DQ6戦闘部分解説14

戦闘コマンド入力もこれで最後です。「そうび」です。

DQ6戦闘画面8

  • SR:$023CFC 戦闘コマンド処理1人分_装備処理
023CFCJSL $C5F3FBSR: $05F3FB戦闘中装備替え処理
023D00JSR $3D05SR: $023D05装備変更に伴う攻撃力守備力素早さリセット
023D03SECc=on
023D04RTSreturn
  • SR:$05F3FB 戦闘中装備替え処理
05F3FBPHPPush P Flag
05F3FCREP #$30m=off(A/M:16b) x=off(X/Y:16b)
05F3FEPHAPush A
05F3FFPHXPush X
05F400PHYPush Y
05F401PHBPush DB
05F402PEA #$7E7EPush #$7E7E
05F405PLBPull DB
05F406PLBPull DB
05F407JSL $C5F4A5SR: $05F4A5使用できる道具があるか(該当c=off)
05F40BBCC #$09if(c==off) goto $05F416
05F40DPLBPull DB
05F40EREP #$30m=off(A/M:16b) x=off(X/Y:16b)
05F410PLYPull Y
05F411PLXPull X
05F412PLAPull A
05F413PLPPull P Flag
05F414SECc=on
05F415RTLreturn
05F416LDA #$0076A=#$0076ウィンドウID
05F419JSL $C37236SR: $037236ウィンドウ描画+ユーザー入力を得る(キャンセルc=on)
05F41DBCC #$09if(c==off) goto $05F428
05F41FPLBPull DB
05F420REP #$30m=off(A/M:16b) x=off(X/Y:16b)
05F422PLYPull Y
05F423PLXPull X
05F424PLAPull A
05F425PLPPull P Flag
05F426CLCc=off
05F427RTLreturn
05F428PHAPush A
05F429LDY $386EY=$386E
05F42CJSL $C2BB34SR: $02BB34戦闘中キャラクターIDから通常キャラクターIDへ変換
05F430STX $2555$2555=X
05F433LDX $386EX=$386E
05F436PLAPull A$05F419で取得した選択結果をAにセット
05F437JSL $C451BASR: $0451BA 引数:1#$01 引数:2#$FE 引数:3#$FF 引数:4#$FDキャラクターの指定位置のアイテムIDを取得
05F43FSTY $5A2A$5A2A=Y
05F442JSL $C4562DSR: $04562D 引数:1#$01 引数:2#$FE 引数:3#$FFアイテム装備処理(装備不能c=on)?
05F449BCS #$23if(c==on) goto $05F46E
05F44BLDA #$0061A=#$0061ウィンドウID
05F44EJSL $C37236SR: $037236
05F452JSL $C02A16SR: $002A16 引数:1#$01B3戦闘メッセージ表示「○○は ☓☓を そうびした。」
05F458JSL $C31BD0SR: $031BD0キー入力を待つ(R,Y入力無視)
05F45CLDA $38B0A=$38B0
05F45FDECA–
05F460DECA–
05F461JSL $C3B4F9SR: $03B4F9指定ページ以上の深さのバッファクリア
05F465PLBPull DB
05F466REP #$30m=off(A/M:16b) x=off(X/Y:16b)
05F468PLYPull Y
05F469PLXPull X
05F46APLAPull A
05F46BPLPPull P Flag
05F46CSECc=on
05F46DRTLreturn
05F46ELDX $5A2AX=$5A2A
05F471LDA #$0061A=#$0061ウィンドウID
05F474JSL $C37236SR: $037236ウィンドウ描画+ユーザー入力を得る(キャンセルc=on)
05F478JSL $C4608DSR: $04608Dアイテム種別取得+呪われているか
05F47CCMP #$0002A==#$0002?
05F47FBEQ #$08if(z==on) goto $05F489
05F481JSL $C02A16SR: $002A16 引数:1#$01B1戦闘メッセージ表示「○○は ☓☓を そうびすることができない。」
05F487BRA #$06goto $05F48F
05F489JSL $C02A16SR: $002A16 引数:1#$01B2戦闘メッセージ表示「☓☓を そうびすることは できません。」
05F48FJSL $C31BD0SR: $031BD0キー入力を待つ(R,Y入力無視)
05F493LDA $38B0A=$38B0
05F496DECA–
05F497DECA–
05F498JSL $C3B4F9SR: $03B4F9指定ページ以上の深さのバッファクリア
05F49CPLBPull DB
05F49DREP #$30m=off(A/M:16b) x=off(X/Y:16b)
05F49FPLYPull Y
05F4A0PLXPull X
05F4A1PLAPull A
05F4A2PLPPull P Flag
05F4A3SECc=on
05F4A4RTLreturn

実装を追っても特に特殊なことをやっているわけではありません。

  • SR:$023D05 装備変更に伴う攻撃力守備力素早さリセット
023D05PHXPush X
023D06PHYPush Y
023D07LDX $258BX=$258B
023D0AJSL $C2EFA7SR: $02EFA7 引数:1#$204F 引数:2#$01FF戦闘中キャラクター情報取得 インデックス:X
023D12AND #$00FFA&=#$00FF下位1バイトでマスクしてキャラクターID取得
023D15TAYY=A
023D16JSL $C450F1SR: $0450F1 引数:1#$07 引数:2#$FD 引数:3#$FF攻撃力取得
023D1DJSL $C2F034SR: $02F034 引数:1#$205A 引数:2#$03FF戦闘中キャラクター情報変更 インデックス:X
023D25JSL $C45124SR: $045124 引数:1#$07 引数:2#$FD 引数:3#$FF守備力取得
023D2CJSL $C2F034SR: $02F034 引数:1#$2058 引数:2#$03FF戦闘中キャラクター情報変更 インデックス:X
023D34JSL $C44A30SR: $044A30 引数:1#$07 引数:2#$FD 引数:3#$FF素早さ取得
023D3BJSL $C2F034SR: $02F034 引数:1#$205B 引数:2#$0FFC戦闘中キャラクター情報変更 インデックス:X
023D43PLYPull Y
023D44PLXPull X
023D45RTSreturn

例によってDQ6もルカナンによって守備力が下げられても装備をし直すと下がった守備力がリセットされることがわかります。この部分でまたDQ6 Extendedの不具合を見つけてしまったので、近々rc3に差し替えます。

コメント

タイトルとURLをコピーしました