戦闘コマンド入力もこれで最後です。「そうび」です。
- SR:$023CFC 戦闘コマンド処理1人分_装備処理
023CFC | JSL $C5F3FB | SR: $05F3FB | 戦闘中装備替え処理 |
---|---|---|---|
023D00 | JSR $3D05 | SR: $023D05 | 装備変更に伴う攻撃力守備力素早さリセット |
023D03 | SEC | c=on | |
023D04 | RTS | return |
- SR:$05F3FB 戦闘中装備替え処理
05F3FB | PHP | Push P Flag | |
---|---|---|---|
05F3FC | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
05F3FE | PHA | Push A | |
05F3FF | PHX | Push X | |
05F400 | PHY | Push Y | |
05F401 | PHB | Push DB | |
05F402 | PEA #$7E7E | Push #$7E7E | |
05F405 | PLB | Pull DB | |
05F406 | PLB | Pull DB | |
05F407 | JSL $C5F4A5 | SR: $05F4A5 | 使用できる道具があるか(該当c=off) |
05F40B | BCC #$09 | if(c==off) goto $05F416 | |
05F40D | PLB | Pull DB | |
05F40E | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
05F410 | PLY | Pull Y | |
05F411 | PLX | Pull X | |
05F412 | PLA | Pull A | |
05F413 | PLP | Pull P Flag | |
05F414 | SEC | c=on | |
05F415 | RTL | return | |
05F416 | LDA #$0076 | A=#$0076 | ウィンドウID |
05F419 | JSL $C37236 | SR: $037236 | ウィンドウ描画+ユーザー入力を得る(キャンセルc=on) |
05F41D | BCC #$09 | if(c==off) goto $05F428 | |
05F41F | PLB | Pull DB | |
05F420 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
05F422 | PLY | Pull Y | |
05F423 | PLX | Pull X | |
05F424 | PLA | Pull A | |
05F425 | PLP | Pull P Flag | |
05F426 | CLC | c=off | |
05F427 | RTL | return | |
05F428 | PHA | Push A | |
05F429 | LDY $386E | Y=$386E | |
05F42C | JSL $C2BB34 | SR: $02BB34 | 戦闘中キャラクターIDから通常キャラクターIDへ変換 |
05F430 | STX $2555 | $2555=X | |
05F433 | LDX $386E | X=$386E | |
05F436 | PLA | Pull A | $05F419で取得した選択結果をAにセット |
05F437 | JSL $C451BA | SR: $0451BA 引数:1#$01 引数:2#$FE 引数:3#$FF 引数:4#$FD | キャラクターの指定位置のアイテムIDを取得 |
05F43F | STY $5A2A | $5A2A=Y | |
05F442 | JSL $C4562D | SR: $04562D 引数:1#$01 引数:2#$FE 引数:3#$FF | アイテム装備処理(装備不能c=on)? |
05F449 | BCS #$23 | if(c==on) goto $05F46E | |
05F44B | LDA #$0061 | A=#$0061 | ウィンドウID |
05F44E | JSL $C37236 | SR: $037236 | |
05F452 | JSL $C02A16 | SR: $002A16 引数:1#$01B3 | 戦闘メッセージ表示「○○は ☓☓を そうびした。」 |
05F458 | JSL $C31BD0 | SR: $031BD0 | キー入力を待つ(R,Y入力無視) |
05F45C | LDA $38B0 | A=$38B0 | |
05F45F | DEC | A– | |
05F460 | DEC | A– | |
05F461 | JSL $C3B4F9 | SR: $03B4F9 | 指定ページ以上の深さのバッファクリア |
05F465 | PLB | Pull DB | |
05F466 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
05F468 | PLY | Pull Y | |
05F469 | PLX | Pull X | |
05F46A | PLA | Pull A | |
05F46B | PLP | Pull P Flag | |
05F46C | SEC | c=on | |
05F46D | RTL | return | |
05F46E | LDX $5A2A | X=$5A2A | |
05F471 | LDA #$0061 | A=#$0061 | ウィンドウID |
05F474 | JSL $C37236 | SR: $037236 | ウィンドウ描画+ユーザー入力を得る(キャンセルc=on) |
05F478 | JSL $C4608D | SR: $04608D | アイテム種別取得+呪われているか |
05F47C | CMP #$0002 | A==#$0002? | |
05F47F | BEQ #$08 | if(z==on) goto $05F489 | |
05F481 | JSL $C02A16 | SR: $002A16 引数:1#$01B1 | 戦闘メッセージ表示「○○は ☓☓を そうびすることができない。」 |
05F487 | BRA #$06 | goto $05F48F | |
05F489 | JSL $C02A16 | SR: $002A16 引数:1#$01B2 | 戦闘メッセージ表示「☓☓を そうびすることは できません。」 |
05F48F | JSL $C31BD0 | SR: $031BD0 | キー入力を待つ(R,Y入力無視) |
05F493 | LDA $38B0 | A=$38B0 | |
05F496 | DEC | A– | |
05F497 | DEC | A– | |
05F498 | JSL $C3B4F9 | SR: $03B4F9 | 指定ページ以上の深さのバッファクリア |
05F49C | PLB | Pull DB | |
05F49D | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
05F49F | PLY | Pull Y | |
05F4A0 | PLX | Pull X | |
05F4A1 | PLA | Pull A | |
05F4A2 | PLP | Pull P Flag | |
05F4A3 | SEC | c=on | |
05F4A4 | RTL | return |
実装を追っても特に特殊なことをやっているわけではありません。
- SR:$023D05 装備変更に伴う攻撃力守備力素早さリセット
023D05 | PHX | Push X | |
---|---|---|---|
023D06 | PHY | Push Y | |
023D07 | LDX $258B | X=$258B | |
023D0A | JSL $C2EFA7 | SR: $02EFA7 引数:1#$204F 引数:2#$01FF | 戦闘中キャラクター情報取得 インデックス:X |
023D12 | AND #$00FF | A&=#$00FF | 下位1バイトでマスクしてキャラクターID取得 |
023D15 | TAY | Y=A | |
023D16 | JSL $C450F1 | SR: $0450F1 引数:1#$07 引数:2#$FD 引数:3#$FF | 攻撃力取得 |
023D1D | JSL $C2F034 | SR: $02F034 引数:1#$205A 引数:2#$03FF | 戦闘中キャラクター情報変更 インデックス:X |
023D25 | JSL $C45124 | SR: $045124 引数:1#$07 引数:2#$FD 引数:3#$FF | 守備力取得 |
023D2C | JSL $C2F034 | SR: $02F034 引数:1#$2058 引数:2#$03FF | 戦闘中キャラクター情報変更 インデックス:X |
023D34 | JSL $C44A30 | SR: $044A30 引数:1#$07 引数:2#$FD 引数:3#$FF | 素早さ取得 |
023D3B | JSL $C2F034 | SR: $02F034 引数:1#$205B 引数:2#$0FFC | 戦闘中キャラクター情報変更 インデックス:X |
023D43 | PLY | Pull Y | |
023D44 | PLX | Pull X | |
023D45 | RTS | return |
例によってDQ6もルカナンによって守備力が下げられても装備をし直すと下がった守備力がリセットされることがわかります。この部分でまたDQ6 Extendedの不具合を見つけてしまったので、近々rc3に差し替えます。
コメント