だいぶ間が空きましたが、続きをやっていきます。まずは戦闘方針ウィンドウ(?)の部分です。具体的にはこの画面のコマンドです。「たたかう」は内部に通常戦闘コマンド処理を含むので後回しにします。
- SR:$023E05 戦闘コマンド処理_SRアドレス_入れ替え
| 023E05 | JSL $C5EF55 | SR: $05EF55 | 戦闘中入れ替え処理 |
|---|---|---|---|
| 023E09 | SEC | c=on | |
| 023E0A | RTS | return |
- SR:$05EF55 戦闘中入れ替え処理
| 05EF55 | PHP | Push P Flag | |
|---|---|---|---|
| 05EF56 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
| 05EF58 | PHA | Push A | |
| 05EF59 | PHX | Push X | |
| 05EF5A | PHY | Push Y | |
| 05EF5B | PHB | Push DB | |
| 05EF5C | JSL $C1CEDA | SR: $01CEDA | |
| 05EF60 | BCC #$22 | if(c==off) goto $05EF84 | |
| 05EF62 | LDA #$0061 | A=#$0061 | |
| 05EF65 | JSL $C37236 | SR: $037236 | ウィンドウ描画+ユーザー入力を得る(キャンセルc=on) |
| 05EF69 | JSL $C02A16 | SR: $002A16 引数:1#$0179 | 戦闘メッセージ表示「ここでは いれかえは できない!」 |
| 05EF6F | JSL $C31BD0 | SR: $031BD0 | |
| 05EF73 | LDA $38B0 | A=$38B0 | |
| 05EF76 | DEC | A– | |
| 05EF77 | JSL $C3B5DB | SR: $03B5DB | |
| 05EF7B | PLB | Pull DB | |
| 05EF7C | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
| 05EF7E | PLY | Pull Y | |
| 05EF7F | PLX | Pull X | |
| 05EF80 | PLA | Pull A | |
| 05EF81 | PLP | Pull P Flag | |
| 05EF82 | SEC | c=on | |
| 05EF83 | RTL | return | |
| 05EF84 | JSL $C42B1C | SR: $042B1C 引数:1#$08 引数:2#$FF | パーティ人数取得 |
| 05EF8A | CMP #$0001 | A==#$0001? | |
| 05EF8D | BNE #$22 | if(z==off) goto $05EFB1 | |
| 05EF8F | LDA #$0061 | A=#$0061 | |
| 05EF92 | JSL $C37236 | SR: $037236 | ウィンドウ描画+ユーザー入力を得る(キャンセルc=on) |
| 05EF96 | JSL $C02A16 | SR: $002A16 引数:1#$0177 | 戦闘メッセージ表示「いれかえられる なかまがいない!」 |
| 05EF9C | JSL $C31BD0 | SR: $031BD0 | |
| 05EFA0 | LDA $38B0 | A=$38B0 | |
| 05EFA3 | DEC | A– | |
| 05EFA4 | JSL $C3B5DB | SR: $03B5DB | |
| 05EFA8 | PLB | Pull DB | |
| 05EFA9 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
| 05EFAB | PLY | Pull Y | |
| 05EFAC | PLX | Pull X | |
| 05EFAD | PLA | Pull A | |
| 05EFAE | PLP | Pull P Flag | |
| 05EFAF | SEC | c=on | |
| 05EFB0 | RTL | return | |
| 05EFB1 | LDA #$0079 | A=#$0079 | |
| 05EFB4 | JSL $C37236 | SR: $037236 | ウィンドウ描画+ユーザー入力を得る(キャンセルc=on) |
| 05EFB8 | BCC #$11 | if(c==off) goto $05EFCB | |
| 05EFBA | LDA $38B0 | A=$38B0 | |
| 05EFBD | DEC | A– | |
| 05EFBE | JSL $C3B5DB | SR: $03B5DB | |
| 05EFC2 | PLB | Pull DB | |
| 05EFC3 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
| 05EFC5 | PLY | Pull Y | |
| 05EFC6 | PLX | Pull X | |
| 05EFC7 | PLA | Pull A | |
| 05EFC8 | PLP | Pull P Flag | |
| 05EFC9 | SEC | c=on | |
| 05EFCA | RTL | return | |
| 05EFCB | ASL | A<<1 | |
| 05EFCC | TAX | X=A | |
| 05EFCD | JMP $EFD0 ($05EFD0) | goto $($05EFD0+X) |
DQ3と比べて低レベルの処理がまぜこぜになってるような印象を受けます。一番最後では、選んだメニュー「いれかえ」「そうがえ」「みる」に応じた処理にジャンプするようになっています。
- SR:$023E0B 戦闘コマンド処理_SRアドレス_作戦
| 023E0B | JSL $C5F4F3 | SR: $05F4F3 | |
|---|---|---|---|
| 023E0F | BCS #$04 | if(c==on) goto $023E15 | |
| 023E11 | JSL $C5F395 | SR: $05F395 | 戦闘中作戦替え処理 |
| 023E15 | SEC | c=on | |
| 023E16 | RTS | return |
- SR:$05F395 戦闘中作戦替え処理
| 05F395 | PHP | Push P Flag | |
|---|---|---|---|
| 05F396 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
| 05F398 | PHA | Push A | |
| 05F399 | PHX | Push X | |
| 05F39A | PHY | Push Y | |
| 05F39B | PHB | Push DB | |
| 05F39C | LDX $38B0 | X=$38B0 | |
| 05F39F | JSL $C43488 | SR: $043488 引数:1#$FF | 作戦取得 |
| 05F3A4 | STA $3AE4 | $3AE4=A | |
| 05F3A7 | STA $3AE6 | $3AE6=A | |
| 05F3AA | STZ $3AF8 | $3AF8=#$00 | |
| 05F3AD | STZ $3AC4 | $3AC4=#$00 | |
| 05F3B0 | JSL $C92B4D | SR: $092B4D 引数:1#$00 引数:2#$0020 引数:3#$7E38B4 引数:4#$0016 | 構造体アクセス(変更) |
| 05F3BC | LDA #$0087 | A=#$0087 | |
| 05F3BF | JSL $C37313 | SR: $037313 | ウィンドウ描画+ユーザー入力を得る(キャンセルc=on) |
| 05F3C3 | BCC #$11 | if(c==off) goto $05F3D6 | |
| 05F3C5 | LDA $38B0 | A=$38B0 | |
| 05F3C8 | DEC | A– | |
| 05F3C9 | JSL $C3B5DB | SR: $03B5DB | |
| 05F3CD | PLB | Pull DB | |
| 05F3CE | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
| 05F3D0 | PLY | Pull Y | |
| 05F3D1 | PLX | Pull X | |
| 05F3D2 | PLA | Pull A | |
| 05F3D3 | PLP | Pull P Flag | |
| 05F3D4 | SEC | c=on | |
| 05F3D5 | RTL | return | |
| 05F3D6 | JSL $C434B2 | SR: $0434B2 引数:1#$FF | 作戦変更 |
| 05F3DB | LDA $38B0 | A=$38B0 | |
| 05F3DE | DEC | A– | |
| 05F3DF | JSL $C3B5DB | SR: $03B5DB | |
| 05F3E3 | LDA #$00D5 | A=#$00D5 | |
| 05F3E6 | JSL $C31DFD | SR: $031DFD | ウィンドウ描画処理 |
| 05F3EA | JSL $C5CC76 | SR: $05CC76 | |
| 05F3EE | JSL $C37581 | SR: $037581 | |
| 05F3F2 | PLB | Pull DB | |
| 05F3F3 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
| 05F3F5 | PLY | Pull Y | |
| 05F3F6 | PLX | Pull X | |
| 05F3F7 | PLA | Pull A | |
| 05F3F8 | PLP | Pull P Flag | |
| 05F3F9 | CLC | c=off | |
| 05F3FA | RTL | return |
基本的には特にコメントすることはなく、ストレートな実装になっていると思います。「逃げる」についてはそこそこ掘り下げる箇所があるので、キリが悪いですが次回に回します。



コメント