DQ3 ストーリー変更(光の鎧入手4)

DQ6のメニューインターフェース改良に手を出しているのですが、ようやく取っ掛かりができたかなという感じ。目立たない部分ではありますが、一番よく触る部分でもあるので操作性の悪さ(特にさんざんDQ3をプレイしたあとだと)があちこちで目立ちます。幸いなことにwikiのDQ6の項は(おそらく45氏の編集の賜物と思われる)DQ3に比べて充実しているので、作業は以前に比べてずいぶん楽な印象があります。

さて、PCにもう一人追加するという作業をするわけですが、確実に「やっかいな作業」のうちの一つでした(一部まだ未修正だし)。作業の方針として、「移動時に5人目*1を連れて歩けるようにする」ことを第1段階の目標とします。その後「同一マップ中での5人目の加入/離脱」を第2段階とします。

今回の作業は「DQ3がDQ6のエンジンをベースにしている」ことに大きく依存しています。メッセージ中にはDQ6で使用されていたメッセージ(天空の武具をインパスしたときのメッセージ)が一部残っていたり、成長データの一部が残っていたりとその可能性はかなり高いです。そこで、「移動中のモードがDQ6のものが残っていないか」を調べてみたところ、馬車の入れるダンジョンでのPC表示用のモードがそっくりそのまま残っていることがわかりました(2人目、3人目に馬と馬車の代わりにスライムのキャラが挟まった6人編成)。

  • SR: $062D4C PC描画モード設定?
062D4C JSR $F5DA SR: $06F5DA PC描画タイプ初期化?
062D4F NOP
062D50 NOP
062D51 NOP
062D52 BCS #$11 if(c==on) goto $062D65
062D63 BRA #$03 goto $062D68
062D65 NOP
062D66 NOP
062D67 NOP
  • SR: $06F5DA PC描画タイプ初期化?(新SR)
06F5DA LDA $DB05 A=$DB05
06F5DD CMP #$0008 A==#$0008?
06F5E0 BNE #$05 if(z==off) goto $06F5E7
06F5E2 LDA #$0006 A=#$0006
06F5E5 SEC c=on
06F5E6 RTS return
06F5E7 PHX Push X
06F5E8 TAX X=A
ガライが仲間になっているかの条件判定を実装
06F613 LDA #$0002 A=#$0002
06F616 PLX Pull X
06F617 SEC c=on
06F618 RTS return
06F619 TXA A=X
06F61A PLX Pull X
06F61B CLC c=off
06F61C RTS return

SR: $062D4Cのオリジナルの実装を見るとわかるのですが、このSRではもともとは$7EDAF7に対して#$00か#$08しか設定しません。#$00は通常時の描画モード、#$08はおそらく鳥に乗っている間の描画モードと思われます。ためしにデバッガでこのSRの終了間際に$7EDAF7に#$02をセットすると上述のように6人編成になります。というわけで今回は描画モード2をガライが仲間になっている間の描画モード用に転用します。

  • SR: $062DA6 PC描画タイプ設定?_SR_0001
062DAE CPX #$000A X>=#$000A? #$000Cから変更(6人→5人)
  • SR: $063019 PC+NPC描画?
063033 JSL $CDF97C SR: $0DF97C 5人目を透明にするべきか(該当c=on)
063037 BCC #$03 if(c==off) goto $06303C
063039 LDA #$FFFF A=#$FFFF
06303C CMP #$FFFF A==#$FFFF?
06303F BEQ #$33 if(z==on) goto $063074
063041 JSR $F512 SR: $06F512 追加NPCキャラクターインデックス置き換え(置換済みc=on)
063044 BCS #$10 if(c==on) goto $063056
063046 JSR $F56B SR: $06F56B 追加NPC用キャラクターインデックス取得(実体)
063049-55 NOP
  • SR: $06F56B 追加NPC用キャラクターインデックス取得(実体)
06F56B PHX Push X
06F56C AND #$7FFF A&=#$7FFF
06F56F TAX X=A
06F570 LDA #$0000 A=#$0000
06F573 STA $EA21 $EA21=A
06F576 LDA #$00FF A=#$00FF
06F579 STA $EA23 $EA23=A
06F57C JSL $C903EE SR: $0903EE 引数:1#$00 引数:2#$0002 引数:3#$C8D23C 引数:4#$0000 構造体アクセス
06F588 PLX Pull X
06F589 RTS return

さらに、$08D23C-Dを#$003Fに変更しておきます。#$003Fとは吟遊詩人のキャラグラIDです。

これでとりあえず移動中の最後に5人目のキャラクターが付くようになります。通常→透明、通常→変化の杖による変身も5人目もちゃんと対象になります。ただ、透明→変身(もしくはその逆)だと若干エフェクトが4人目までと異なってしまいますが、今回の変更では透明→変身の経路は存在しないので目をつぶります。

(だいぶ前に作業したので詳細を忘れてしまいました。またあとで追記するかも)

*1:パーティが4人未満の場合は5人目にならないのですが便宜的にこう呼びます