DQ3 フロア中の階段、宝箱を自由に配置する

DQ3のクリア後の隠しダンジョンはずいぶんと中途半端です。ゼニスの城までのフロア構成は脇道を除いて以下のようになっています。

  1. ネクロゴンド2F(逆)
  2. ネクロゴンド4F(逆)
  3. おろちの洞窟B1F
  4. ピラミッド2F
  5. 地底の湖B3F(回復ポイント有)
  6. ネクロゴンド1F(エンカウントなし)
  7. サマンオサ場内B1F(エンカウントなし)
  8. 格闘場(エンカウントなし)
  9. ポルトガの灯台2F?(エンカウントなし)

改めて見ると実質エンカウントのあるフロア数は実質5フロアと少ない事がわかります。おまけ要素の強い隠しダンジョンでは、フロアの統一性は無視できますが、階段が複数あるような分岐フロアをおいそれと使うわけにも行きません。また、宝箱が多いフロアもその中身を別途考えないといけないため、これまた厄介です。というわけで、そのままだと隠しダンジョンで使用できるフロアにかなりの制限ができてしまうため、この制限を取り払い、フロア中に自由に階段パーツ、宝箱パーツを配置、またその逆を行えるようにします。実際にフロアを移動する情報(階段移動データ)、宝箱の座標と中身(アイテム習得データ等)の座標はグラフィック上の階段パーツとは別に設定するので、これはどうとでもなります。従って実際のマップ上に配置されている階段パーツ、宝箱パーツ、及び宝箱パーツ上に合わせて設定されている通行構成情報上の通行不可フラグをいじればいい、ということになります。

オリジナルでも動的に階段を配置する、という処理はゾーマの城1Fの玉座の裏のように行われているので、その処理を参考にすればいいということになります。今回は例として、ナジミの塔B1F(アリアハンB1F、岬の洞窟B2F、草原のほこら、ナジミの塔1Fに接続するフロア)の宝箱、階段をいじることにします。ナジミの塔、岬の洞窟に通じる階段をなくし、アリアハン城に通じる階段を下り階段に変更します。また、草原のほこらの入り口から入ってすぐの扉の中にある宝箱を1つ消します。

  • SR: $0BF376 隠しダンジョン挿入フロア1進入時初期化処理
0BF376 LDA #$013A A=#$013A サブマップID指定
0BF379 JSL $077365 SR: $077365 サブマップ画像情報取得
0BF37D JSL $0C9A3A SR: $0C9A3A ダンジョンBGM設定
0BF381 JSL $0C997C SR: $0C997C
0BF385 LDA #$0068 A=#$0068
0BF388 LDY #$0001 Y=#$0001
0BF38B JSL $077522 SR: $077522
0BF38F JSL $0AF9AD SR: $0AF9AD
0BF393 LDA #$0064 A=#$0064
0BF396 LDX #$0018 X=#$0018
0BF399 JSL $0777F9 SR: $0777F9 フロアのエンカウント(A),戦闘背景設定(X)
0BF39D JSL $0ADE63 SR: $0ADE63
0BF3A1 JSL $0AE0CE SR: $0AE0CE
0BF3A5 JSL $077843 SR: $077843 引数:1#$C9EC54 移動・宝箱・ドア・NPC情報設定用SRアドレス設定
0BF3AC JSL $07787B SR: $07787B 引数:1#$CDE326 パレットアニメーション1設定
0BF3B3 JSL $077889 SR: $077889 引数:1#$CAE992 パレットアニメーション2設定
0BF3BA RTL return
  • SR: $09EC54 隠しダンジョン挿入フロア1移動・宝箱・ドア・NPC情報設定
09EC54 LDA #$0C20 A=#$0C20 X座標指定(絶対座標?)
09EC57 STA $9680 $9680=A
09EC5A LDA #$08D8 A=#$08D8 Y座標指定(絶対座標?)
09EC5D STA $9682 $9682=A
09EC60 LDX #$03A3 X=#$03A3 下り階段のマップパーツ
09EC63 LDY #$0000 Y=#$0000 0ならBG1,1ならBG2
09EC66 JSL $C734B3 SR: $0734B3 指定座標にBG1,2を上書き?
09EC6A LDA #$0C80 A=#$0C80
09EC6D STA $9680 $9680=A
09EC70 LDA #$0AF8 A=#$0AF8
09EC73 STA $9682 $9682=A
09EC76 LDX #$04DF X=#$04DF 空のマップパーツ
09EC79 LDY #$0000 Y=#$0000
09EC7C JSL $C734B3 SR: $0734B3 指定座標にBG1,2を上書き?
09EC80 LDA #$0A00 A=#$0A00
09EC83 STA $9680 $9680=A
09EC86 LDA #$0B88 A=#$0B88
09EC89 STA $9682 $9682=A
09EC8C LDX #$04DF X=#$04DF
09EC8F LDY #$0000 Y=#$0000
09EC92 JSL $C734B3 SR: $0734B3 指定座標にBG1,2を上書き?
09EC96 LDA #$0BC0 A=#$0BC0
09EC99 STA $9680 $9680=A
09EC9C LDA #$0A10 A=#$0A10
09EC9F STA $9682 $9682=A
09ECA2 LDX #$04DF X=#$04DF
09ECA5 LDY #$0000 Y=#$0000
09ECA8 JSL $C734B3 SR: $0734B3 指定座標にBG1,2を上書き?
09ECAC LDA #$0078 A=#$0078 左上相対X座標指定
09ECAF STA $9C11 $9C11=A
09ECB2 LDA #$0041 A=#$0041 左上相対Y座標指定
09ECB5 STA $9C13 $9C13=A
09ECB8 LDA #$0079 A=#$0079 右下相対X座標指定
09ECBB STA $9C15 $9C15=A
09ECBE LDA #$0043 A=#$0043 右下相対Y座標指定
09ECC1 STA $9C17 $9C17=A
09ECC4 LDX #$0000 X=#$0000
09ECC7 LDY #$0000 Y=#$0000
09ECCA JSL $C736C8 SR: $0736C8 通行情報動的設定(#$2000)
09ECCE LDX #$01C4 X=#$01C4
09ECD1 JSL $C614BB SR: $0614BB 階段移動データ設定
09ECD5 LDX #$01C5 X=#$01C5
09ECD8 JSL $C614BB SR: $0614BB 階段移動データ設定
09ECDC LDX #$0155 X=#$0155
09ECDF JSL $C62407 SR: $062407 ドア開閉データ設定
09ECE3 JSL $CBD8C1 SR: $0BD8C1 ナジミの塔B1F屋根配置
09ECE7 LDX #$01CC X=#$01CC
09ECEA JSL $C66696 SR: $066696 宝箱アイテム設定
09ECEE LDX #$01CD X=#$01CD
09ECF1 JSL $C66696 SR: $066696 宝箱アイテム設定
09ECF5 RTL return

絶対座標、相対座標というのはデバッグメニューの「座標ウィンドウ表示」をONにして表示されるWX,WY(絶対座標)、X,Y(相対座標)のことです。で、実際にゲーム上でどうなるか、というのがこちら。

というわけで、フロア中の階段や宝箱の操作を動的に行えるので、何でもやり放題、ということになります。