今回からは最重要部分の戦闘行動実行部分を見ていきます。毎回「重要」とかいって詐欺っぽいのですが、ここはRPGであるDQ3のコアといってもいい部分だと思います。この部分が理解できれば戦闘中のギミックの追加はかなり思い通りにできるでしょう。
- SR: $027939 1キャラクター分の戦闘行動実行処理
027939 | JSR $79D5 | SR: $0279D5 | 攻撃ターゲット決定処理 |
---|---|---|---|
02793C | JSR $7BBF | SR: $027BBF | 戦闘行動がはやぶさのけんに依存する場合ははやぶさのけん装備をチェックし行動回数を確定 |
02793F | STZ $23D8 | $23D8=#$00 | |
027942 | JSL $C1AE9F | SR: $01AE9F | |
027946 | JSL $C2CDAC | SR: $02CDAC | モンスターアニメーションメイン |
02794A | JSR $7983 | SR: $027983 | 戦闘行動開始時の効果音を鳴らす |
02794D | JSR $7BE8 | SR: $027BE8 | ファーストメッセージ表示のタイミングにあわせてメッセージを表示する |
027950 | JSR $7C41 | SR: $027C41 | 戦闘行動を実行可能か判定 |
027953 | BCS #$2A | if(c==on) goto $02797F | |
027955 | JSR $7D53 | SR: $027D53 | 戦闘行動実行処理メイン |
027958 | LDX $23E4 | X=$23E4 | |
02795B | STX $2428 | $2428=X | |
02795E | JSL $C2CB2B | SR: $02CB2B 引数:1#$2050 引数:2#$0002 | 戦闘中キャラクター情報取得 |
027966 | BEQ #$17 | if(z==on) goto $02797F | |
027968 | JSL $C2BE8A | SR: $02BE8A 引数:1#$1C | 戦闘中情報取得変更 |
02796D | BCS #$10 | if(c==on) goto $02797F | |
02796F | JSR $7A9F | SR: $027A9F | |
027972 | BCC #$0B | if(c==off) goto $02797F | |
027974 | INC $23D8 | $23D8++ | |
027977 | LDA $23D8 | A=$23D8 | |
02797A | CMP $23D6 | A>=$23D6? | |
02797D | BCC #$D6 | if(c==off) goto $027955 | |
02797F | JSR $8D78 | SR: $028D78 | 戦闘中アイテム消費 |
027982 | RTS | return |
$7E23D8は行動済み回数で、$7E23D6には行動できる回数がセットされます。DQ3では1回の戦闘行動で2回動けるのははやぶさの剣装備時のみなので$7E23D6に2が入るのは他にはありません。
- SR: $027BBF 戦闘行動がはやぶさのけんに依存する場合ははやぶさのけん装備をチェックし行動回数を確定
027BBF | LDA #$0001 | A=#$0001 | 通常の行動回数 |
---|---|---|---|
027BC2 | STA $23D6 | $23D6=A | |
027BC5 | LDX $23EE | X=$23EE | |
027BC8 | JSL $C2CC47 | SR: $02CC47 引数:1#$007A 引数:2#$0080 | 戦闘行動がはやぶさのけん装備に依存するか |
027BD0 | BEQ #$15 | if(z==on) goto $027BE7 | |
027BD2 | LDA $23E4 | A=$23E4 | |
027BD5 | STA $2428 | $2428=A | |
027BD8 | LDA #$0019 | A=#$0019 | はやぶさのけんのアイテムID |
027BDB | STA $242C | $242C=A | |
027BDE | JSL $C2B87A | SR: $02B87A | アイテム装備チェック |
027BE2 | BVC #$03 | if(v==off) goto $027BE7 | |
027BE4 | ASL $23D6 | $23D6<<1 | 行動回数を2倍にする |
027BE7 | RTS | return |
コメント