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人目にならないのですが便宜的にこう呼びます
コメント