DQ6 ダークドレアムの行動パターン解析

DQ3 K.Mixにダークドレアムを移植するにあたって、「DQ6の行動パターンのまま移植してDQ3のパーティと戦わせたい」という方針を立てたので、DQ6(SFC)ではどのような実装になっているのかをプログラムサイドからのアプローチで見ていきます。あまたある攻略サイトで言及されているように、ダークドレアムの行動パターンというのは下記の3パターンのループで構成されている、というのは周知の事実です。

パターンA(1or2→3or4→5or6)1.ギガデイン2.かがやくいき3.かまいたち4.空高く舞い突き刺す5.ID切り替え6.グランドクロス
パターンB(1→6までローテ)1.いてつくはどう2.メラゾーマ3.しゃくねつ4.おたけび25.目にも止まらぬ早技6.ID切り替え
パターンC(均等に選択)1.メタルぎり2.あやしいめ3.はやぶさぎり4.バイキルト5.ID切り替え6.ドラゴンぎり

※パターンAは1or2回行動、パターンB,Cは2回行動

DQ6では1モンスターに定義できる戦闘行動は6種類しかなく、1モンスターの定義だけであれだけの多彩な攻撃を実現することは不可能です。モンスターの定義を見ると、ダークドレアムとして$F6, $F7, $F8が割り当てられており(それぞれ上記パターンA~Cに対応)、更にその行動パターンの中に「モンスターID切り替え」というものが存在します。

  • SR: $02A877 ダークドレアムモンスターID変更1
02A877LDA #$00F8A=#$00F8$F8に変更
02A87AJSR $A824SR: $02A824モンスターID切り替え処理
02A87DRTLreturn

  • SR: $02A824 モンスターID切り替え処理
02A824PHAPush A
02A825LDX $2559X=$2559
02A828JSL $C2EFA7SR: $02EFA7 引数:1#$204E 引数:2#$0007グループID取得?
02A830CMP #$0006A>=#$0006?PC側ならスキップ?
02A833BCS #$2Aif(c==on) goto $02A85F
02A835ASLA<<1
02A836TAYY=A
02A837PLAPull A
02A838JSL $C2F034SR: $02F034 引数:1#$204F 引数:2#$01FFモンスターID変更
02A840JSL $C2F034SR: $02F034 引数:1#$2051 引数:2#$01FFモンスターID変更
02A848STA $2567,Y$2567+Y=A
02A84BLDA #$0000A=#$0000
02A84EJSL $C2F034SR: $02F034 引数:1#$205E 引数:2#$00E0不明
02A856STX $258B$258B=X
02A859JSL $C241EBSR: $0241EB各種ステータスリセット?
02A85DSECc=on
02A85ERTSreturn
02A85FPLAPull A
02A860CLCc=off
02A861RTSreturn

ということで、モンスターID切り替えが戦闘行動として定義されている以上、表面上は何も行動しないように見える切り替え処理自体も行動枠を1つ消費してしまい行動回数が減るはずが、実際にはそんなことはなく、パターンBの行動をした後、パターンCの行動を2回行ったりと合計3回行動をすることもあります。という訳でもう少し調べてみると、「実行後追加処理を行うSRリスト」の中に切り替え処理が含まれていました。ここで行動情報をいじっているようです。

  • SR: $027C5C
027C5CPEA #$2516Push #$2516
027C5FPEA #$0008Push #$0008
027C62PEA #$7E00Push #$7E00
027C65JSL $C92965SR: $092965やまびこ中かチェック
027C69BNE #$09if(z==off) goto $027C74
027C6BDEC $2543$2543–行動主体インデックスをデクリメントする
027C6ELDA #$0002A=#$0002
027C71STA $2545$2545=A行動インデックスに2をセット
027C74RTSreturn

$2543は「現在の行動主体インデックス」$2545は行動主体がいくつ目の行動をしているかを表すインデックスです(3回行動まであるので取りうる値は0~2)。つまり、「1つ前の行動主体が行動し終わった直後にカーソルを移動している」ようです。このあと行動主体インデックスが1インクリメントされ行動インデックスが0にリセットされ、再度ダークドレアムが0から行動を開始します。これにより、2つ目にモンスターID切り替えが来ると、トータルで3回以上行動するということになります。これを踏まえると理屈上では

  1. パターンB 5を実行
  2. (パターンB 6を実行→パターンCに切り替え)表面上には現れない
  3. パターンC 5以外を実行
  4. (パターンC 5を実行→パターンAに切り替え)表面上には現れない
  5. パターンA 1or2を実行
  6. パターンA 3or4を実行

となり、1ターンに最大4回行動する可能性がありますが、実際のところはパターンBからCに変わったターンでは、なぜかパターンCからAに変わる戦闘行動は選択されません。この部分をもう少し詳しく調べると、モンスターIDを切り替えた時に、「連発行動不可フラグ」(7E2521-からグループごとに1バイトづつ、ターンごとにリセット)がクリアされていないことが原因でした。パターンBの5番目「目にも止まらぬ早業」(連発不可フラグがON)を実行した後、5番目の戦闘行動が同ターンで連発不可になりますが、パターンCに切り替わった後もこの情報が生きるため、パターンCの5番目である「パターンAに切り替え」が選ばれない、ということのようです。これは意図的なのか、フラグのリセットし忘れなのか不明ですが、DQ6ではダークドレアムは3回行動までしかしないようです。DQ3 K.MixではID切り替えを光ゾーマ、灰ゾーマで実装していますが、こちらはターン終了時に必ず切り替わる、としているので、ダークドレアムの挙動をDQ3に再現するには不適当です。とはいえ、上記の動作はDQ3にも存在する枠組みで対処可能であるため、移植は比較的簡単です。ただ、SR: $0241EBでID切り替え後のステータスを大幅にリセットしているように見えますが、DQ6の戦闘部分の解析をまるでやっていないため何をやっているかよくわかりませんが、だいたいはこのくらい理解しておけば皆さんご存知の通りDQ3でDQ6のダークドレアムの行動を再現することはできそうです。ただ、テストプレイ中にダークドレアムが4回行動した、という報告があり、手元でも1回起きた気がするのでまだなにか問題は残っているかもしれません。

コメント

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