DQ3 ストーリー変更(ラスボス4)

次は、ゾーマの城再突入時にフロア数を増やすようにします。全体としてやることは特に難しいことはありません。フロア初期化処理中の移動先データをフラグを見て差し替えるだけで条件に応じたフロアの追加は実現できます(この切り替え処理をミスってテストプレイをしてくれた方には階段に重なっても移動しないというご迷惑をかけしてしまいましたorz)。今回問題となるのは、フロア自体のギミックです。 予定では

  • 裏技で突破できない回転床フロア
  • 無限回廊フロア

を追加する予定だったんですが、時間切れで回転床フロアしか実装できませんでした。無限回廊フロアはイメージ的にはDQ2のロンダルキアの洞窟クラスの嫌らしいのを用意したかったのですが、DQ3の無限回廊は簡単なものしかなく、いいお手本がないのでまだ実装出来ていません。DQ6のスフィーダの盾のダンジョン(でしたっけ?)でも見て参考にしようと思います。

  • SR: $0AA880 ゾーマの城B3F移動・宝箱・ドア・NPC情報設定
0AA88E-90 NOP
0AA891 JSL $CDF811 SR: $0DF811 ゾーマの城B3F階段移動データセット
  • SR: $0DF811 ゾーマの城B3F階段移動データセット(新SR)
0DF811 LDA $35B4 A=$35B4
0DF814 AND #$0020 A&=#$0020 オルテガが竜の女王の石化の呪いを解いた
0DF817 BEQ #$08 if(z==on) goto $0DF821
0DF819 LDX #$01B6 X=#$01B6
0DF81C JSL $C614BB SR: $0614BB 階段移動データ設定
0DF820 RTL return
0DF821 LDX #$00BB X=#$00BB
0DF824 JSL $C614BB SR: $0614BB 階段移動データ設定
0DF828 RTL return
  • SR: $0AA8A1 ゾーマの城B4F移動・宝箱・ドア・NPC情報設定
0AA8A1-3 NOP
0AA8A4 JSL $CDF829 SR: $0DF829 ゾーマの城B4F階段移動データセット
  • SR: $0DF829 ゾーマの城B4F階段移動データセット(新SR)
0DF829 LDA $35B4 A=$35B4
0DF82C AND #$0020 A&=#$0020 オルテガが竜の女王の石化の呪いを解いた
0DF82F BEQ #$08 if(z==on) goto $0DF839
0DF831 LDX #$01BB X=#$01BB 追加フロアに移動
0DF834 JSL $C614BB SR: $0614BB 階段移動データ設定
0DF838 RTL return
0DF839 LDX #$00BC X=#$00BC
0DF83C JSL $C614BB SR: $0614BB 階段移動データ設定
0DF840 RTL return
  • SR: $0DF7DA ゾーマの城追加フロア1進入時初期化処理
0DF7DA LDA #$017A A=#$017A
0DF7DD JSL $C77365 SR: $077365 サブマップ画像情報取得
0DF7E1 LDA #$001C A=#$001C
0DF7E4 LDX #$0020 X=#$0020
0DF7E7 JSL $C777F9 SR: $0777F9 フロアのエンカウント(A),戦闘背景設定(X)
0DF7EB LDA #$000A A=#$000A
0DF7EE JSL $C7773F SR: $07773F 移動単位設定?
0DF7F2 JSL $CC997C SR: $0C997C
0DF7F6 JSL $CADEC9 SR: $0ADEC9 フロア階層設定(B4F)
0DF7FA JSL $CADE4F SR: $0ADE4F ルーラ・キメラの翼使用不可(封印)設定
0DF7FE JSL $C7786D SR: $07786D 引数:1#$CDA5BF BGM設定
0DF805 JSL $C77843 SR: $077843 引数:1#$CDF841 移動・宝箱・ドア・NPC情報設定用SRアドレス設定
0DF80C RTL return
  • SR: $0DF841 ゾーマの城追加フロア1移動・宝箱・ドア・NPC情報設定用SRアドレス設定
0DF841 LDX #$01B7 X=#$01B7
0DF844 JSL $C614BB SR: $0614BB 階段移動データ設定
0DF848 LDX #$01B8 X=#$01B8
0DF84B JSL $C614BB SR: $0614BB 階段移動データ設定
0DF84F LDX #$01B9 X=#$01B9
0DF852 JSL $C614BB SR: $0614BB 階段移動データ設定
0DF856 LDX #$01C3 X=#$01C3
0DF859 JSL $C66696 SR: $066696 宝箱アイテム設定
0DF85D LDX #$01C4 X=#$01C4
0DF860 JSL $C66696 SR: $066696 宝箱アイテム設定
0DF864 JSL $C738E2 SR: $0738E2 引数:1#$00 引数:2#$01 引数:3#$CBB707 サブマップイベント等設定?
0DF86D JSL $C738E2 SR: $0738E2 引数:1#$00 引数:2#$00 引数:3#$CBB70C サブマップイベント等設定?
0DF876 JSL $C738E2 SR: $0738E2 引数:1#$01 引数:2#$04 引数:3#$CAF7B7 サブマップイベント等設定?
0DF87F RTL return

フロアの編集自体はDQ3マップエディタで回転床の編集もサポートしてもらったのでサクサクできました。直前のフロアの通行情報を見るに、1マス16×16の左上8×8のみに回転床属性をセットすればいいようです。ここで肝になるのは$0DF7EE-,$0DF864-,$0DF86D-の3箇所です。DQ3SFCは通常は1歩は8ピクセル分で16×16の1マスを2歩で移動しますが、$0DF7EE-でこの単位を変え、1歩16ピクセル分で16×16の1マスを1歩で移動するようにしています。$0DF864-,$0DF86D-は回転床の設定です(ここでまた回転床の種類の設定を逆にしてしまい、テストプレイをしてくれた方に指摘される始末。通行情報を作りなおすことも考えたのですが、SRの引数をオリジナルと逆にするだけで見た目正しく動くようになったのでそのままにしています)。