DQ3 まねまね実装3

  • SR: $02DA30 まねまね反撃時の対象情報作成(新SR)
02DA30JSL $C2CC2CSR: $02CC2C 引数:1#$0075 引数:2#$0003
02DA38CMP #$0003A>=#$0003?
02DA3BBCC #$05if(c==off) goto $02DA42
02DA3DLDA #$0041A=#$0041
02DA40BRA #$15goto $02DA57
02DA42CMP #$0002A>=#$0002?
02DA45BCC #$0Dif(c==off) goto $02DA54
02DA47JSL $C2CB2BSR: $02CB2B 引数:1#$203C 引数:2#$00FF
02DA4FORA #$0020Aor=#$0020
02DA52BRA #$03goto $02DA57
02DA54JSR $E659SR: $02E659
02DA57STA $23E6$23E6=A
02DA5ARTSreturn

  • SR: $02DA0D まねまねで使用するRAM領域の初期化(新SR)
02DA0DLDX #$001EX=#$001E
02DA10LDA #$FFFFA=#$FFFF
02DA13STA $2620,X$2620+X=A
02DA16DEXX–
02DA17DEXX–
02DA18BPL #$F9if(n==off) goto $02DA13
02DA1ARTSreturn

前回のエントリで重要と書きましたが、完全に解析はできておらず、デバッガでRAM上の値をのぞきながら「これが確からしい」というものでしかありません。反撃する戦闘行動の対象設定値を取得し、3(全体)、2(グループ)、1(敵1体)によって$7E23E4にセットする値を変えています。この値は、戦闘中キャラクター情報($7E2030-)の5バイト目の2-7ビットを1ビット右にシフトしたものと同じです。

もう1つ前回のエントリで説明し忘れたのですが、「SR: $02D907 まねまねによる反撃処理」でまねまねによる反撃処理が終わった後に「SR: $02DA0D まねまねで使用するRAM領域の初期化」を呼んで関連する領域($7E2620-3F)の初期化を行っています。ただ、このままだと、戦闘開始直後に上記の領域が初期化されないので初期化を行う必要があります。

  • SR: $025A56 戦闘中使用RAM領域初期化
025A69JSR $D7C0SR: $02D7C0
025A6C-74NOP
  • SR: $02D7C0 戦闘中使用RAM領域初期化(新SR)
02D7C0LDA #$FFFFA=#$FFFF
02D7C3STA $2462$2462=A
02D7C6STA $2464$2464=A
02D7C9STA $2465$2465=A
02D7CCJSR $D54FSR: $02D54F
02D7CFJSR $DA0DSR: $02DA0D
02D7D2RTSreturn

SR: $025A56は戦闘に入った直後に1回だけ呼ばれる(はず)のSRですが、空き領域がないのでそれっぽい処理と共に別SRで初期化を行っています。

とりあえずこれでまねまねの実装は終わりです。分割して書きづらかったので読むほうも理解しにくいと思われますが、これから改造界に踏み入ろうとする人の助けになればいいなと思います。

現時点で問題が1点あります。PC*1側のエフェクトがもともと存在しない戦闘行動(炎を吐くなど)はエフェクトが何も出ません。解析できればDQ6からエフェクトをコピれればこの部分も問題なくなるでしょう。

20090525210612.jpg

実装してから気がついたのですが、この特技(呪文?)はキメラ+はぐれメタルの組み合わせのときに、キメラが炎を吐くとぐれメタルを高確率で仕留められることに気が付きました。コマンドとしてまねまねを選んでいればキメラがはぐれメタルよりも先に炎を吐いてきた場合にははぐれメタルを一網打尽にできます。ドラゴラムのように1ターン待つ必要もないですし、遊び人自体の素早さも関係ありません。思わぬところで遊び人の存在価値が上がりました。

*1:プレイヤーキャラクター

コメント

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