DQ6戦闘部分解説7

だいぶ間が空きましたが、続きをやっていきます。まずは戦闘方針ウィンドウ(?)の部分です。具体的にはこの画面のコマンドです。「たたかう」は内部に通常戦闘コマンド処理を含むので後回しにします。

dq6000

  • SR:$023E05 戦闘コマンド処理_SRアドレス_入れ替え
023E05JSL $C5EF55SR: $05EF55戦闘中入れ替え処理
023E09SECc=on
023E0ARTSreturn
  • SR:$05EF55 戦闘中入れ替え処理
05EF55PHPPush P Flag
05EF56REP #$30m=off(A/M:16b) x=off(X/Y:16b)
05EF58PHAPush A
05EF59PHXPush X
05EF5APHYPush Y
05EF5BPHBPush DB
05EF5CJSL $C1CEDASR: $01CEDA
05EF60BCC #$22if(c==off) goto $05EF84
05EF62LDA #$0061A=#$0061
05EF65JSL $C37236SR: $037236ウィンドウ描画+ユーザー入力を得る(キャンセルc=on)
05EF69JSL $C02A16SR: $002A16 引数:1#$0179戦闘メッセージ表示「ここでは いれかえは できない!」
05EF6FJSL $C31BD0SR: $031BD0
05EF73LDA $38B0A=$38B0
05EF76DECA–
05EF77JSL $C3B5DBSR: $03B5DB
05EF7BPLBPull DB
05EF7CREP #$30m=off(A/M:16b) x=off(X/Y:16b)
05EF7EPLYPull Y
05EF7FPLXPull X
05EF80PLAPull A
05EF81PLPPull P Flag
05EF82SECc=on
05EF83RTLreturn
05EF84JSL $C42B1CSR: $042B1C 引数:1#$08 引数:2#$FFパーティ人数取得
05EF8ACMP #$0001A==#$0001?
05EF8DBNE #$22if(z==off) goto $05EFB1
05EF8FLDA #$0061A=#$0061
05EF92JSL $C37236SR: $037236ウィンドウ描画+ユーザー入力を得る(キャンセルc=on)
05EF96JSL $C02A16SR: $002A16 引数:1#$0177戦闘メッセージ表示「いれかえられる なかまがいない!」
05EF9CJSL $C31BD0SR: $031BD0
05EFA0LDA $38B0A=$38B0
05EFA3DECA–
05EFA4JSL $C3B5DBSR: $03B5DB
05EFA8PLBPull DB
05EFA9REP #$30m=off(A/M:16b) x=off(X/Y:16b)
05EFABPLYPull Y
05EFACPLXPull X
05EFADPLAPull A
05EFAEPLPPull P Flag
05EFAFSECc=on
05EFB0RTLreturn
05EFB1LDA #$0079A=#$0079
05EFB4JSL $C37236SR: $037236ウィンドウ描画+ユーザー入力を得る(キャンセルc=on)
05EFB8BCC #$11if(c==off) goto $05EFCB
05EFBALDA $38B0A=$38B0
05EFBDDECA–
05EFBEJSL $C3B5DBSR: $03B5DB
05EFC2PLBPull DB
05EFC3REP #$30m=off(A/M:16b) x=off(X/Y:16b)
05EFC5PLYPull Y
05EFC6PLXPull X
05EFC7PLAPull A
05EFC8PLPPull P Flag
05EFC9SECc=on
05EFCARTLreturn
05EFCBASLA<<1
05EFCCTAXX=A
05EFCDJMP $EFD0 ($05EFD0)goto $($05EFD0+X)

DQ3と比べて低レベルの処理がまぜこぜになってるような印象を受けます。一番最後では、選んだメニュー「いれかえ」「そうがえ」「みる」に応じた処理にジャンプするようになっています。

  • SR:$023E0B 戦闘コマンド処理_SRアドレス_作戦
023E0BJSL $C5F4F3SR: $05F4F3
023E0FBCS #$04if(c==on) goto $023E15
023E11JSL $C5F395SR: $05F395戦闘中作戦替え処理
023E15SECc=on
023E16RTSreturn
  • SR:$05F395 戦闘中作戦替え処理
05F395PHPPush P Flag
05F396REP #$30m=off(A/M:16b) x=off(X/Y:16b)
05F398PHAPush A
05F399PHXPush X
05F39APHYPush Y
05F39BPHBPush DB
05F39CLDX $38B0X=$38B0
05F39FJSL $C43488SR: $043488 引数:1#$FF作戦取得
05F3A4STA $3AE4$3AE4=A
05F3A7STA $3AE6$3AE6=A
05F3AASTZ $3AF8$3AF8=#$00
05F3ADSTZ $3AC4$3AC4=#$00
05F3B0JSL $C92B4DSR: $092B4D 引数:1#$00 引数:2#$0020 引数:3#$7E38B4 引数:4#$0016構造体アクセス(変更)
05F3BCLDA #$0087A=#$0087
05F3BFJSL $C37313SR: $037313ウィンドウ描画+ユーザー入力を得る(キャンセルc=on)
05F3C3BCC #$11if(c==off) goto $05F3D6
05F3C5LDA $38B0A=$38B0
05F3C8DECA–
05F3C9JSL $C3B5DBSR: $03B5DB
05F3CDPLBPull DB
05F3CEREP #$30m=off(A/M:16b) x=off(X/Y:16b)
05F3D0PLYPull Y
05F3D1PLXPull X
05F3D2PLAPull A
05F3D3PLPPull P Flag
05F3D4SECc=on
05F3D5RTLreturn
05F3D6JSL $C434B2SR: $0434B2 引数:1#$FF作戦変更
05F3DBLDA $38B0A=$38B0
05F3DEDECA–
05F3DFJSL $C3B5DBSR: $03B5DB
05F3E3LDA #$00D5A=#$00D5
05F3E6JSL $C31DFDSR: $031DFDウィンドウ描画処理
05F3EAJSL $C5CC76SR: $05CC76
05F3EEJSL $C37581SR: $037581
05F3F2PLBPull DB
05F3F3REP #$30m=off(A/M:16b) x=off(X/Y:16b)
05F3F5PLYPull Y
05F3F6PLXPull X
05F3F7PLAPull A
05F3F8PLPPull P Flag
05F3F9CLCc=off
05F3FARTLreturn

基本的には特にコメントすることはなく、ストレートな実装になっていると思います。「逃げる」についてはそこそこ掘り下げる箇所があるので、キリが悪いですが次回に回します。

スポンサーリンク

コメントを書く

メールアドレスが公開されることはありません。コメントは管理者の承認後表示されます。