DQ3 ストーリー変更(オリハルコンの洞窟2)

ゾーマに新しく実装した「暗黒の波動」が強すぎワラタ。レベル99のパーティでも複数種類のステータス異常でたちどころに崩される様はまさに恐怖です。ゾーマ自体のスペックも高い真・ゾーマ戦はかなり楽しんでもらえるのではないかと予想してwktkしてます。

以前の変更で既にアレフガルドのフィールド上に洞窟のアイコン?は設定済みでしたが、ただの張りぼてで、当たり前ながらキャラクターが重なっても何もおきません。というわけで、まず「洞窟のアイコンに重なったら洞窟内のマップに移動(とその逆)」をできるようにすることを目標とします。これを実現するに当たって必要な作業は

  1. フロアデータ($08A6D4-)レコード数拡張
  2. フロアデータインデックス($0802F4-)レコード数拡張
  3. フロア進入時初期化SR配列($0804A3-)レコード数拡張
  4. サブマップインデックス($08C1F3-)レコード数拡張
  5. BG1,2インデックス($05187D-)レコード数拡張
  6. 通行構成データ($010000-)レコード数拡張
  7. 階段移動データ($0856AA-)レコード数拡張
  8. 座標移動3データ($085A70-)レコード数拡張
  9. オリハルコンの洞窟B1Fフロア情報設定
  10. オリハルコンの洞窟B1F進入時初期化SR実装
  11. オリハルコンの洞窟B1FBG1,2,通行情報レコード設定
  12. オリハルコンの洞窟B1F実マップデータ作成

となります。 1から8の作業は1回やれば十分な作業なので次回マップを追加する場合は9から12の作業をすればいいだけになります。レコード数拡張は別エントリでアドレス移動などについて作業内容を書くので省略します。

フィールドマップから街・ダンジョンなどのマップ(便宜上サブマップと呼びます)への移動は「座標移動3データ」の座標データを使用します。サブマップ中での階段などの移動は「階段移動データ」が使われているようです。おそらく、同一サブマップ中ではドア開閉などの情報($7E3618-27)を共有していて、座標移動3で移動したときにクリアする、という動作なのではないかと推測しています。

さて、肝心のオリハルコンの洞窟B1Fのマップですが、マップ編集は初挑戦なので、まずは既存のマップをパクって改変することにしました。元ネタは「ネクロゴンドの洞窟3F」(落とし穴に一度落ちるフロア)です。50%くらい改変しているのと、出入り口がまったく違うので同じ洞窟とはあんまりわからないと思いますがまあ勘弁してくださいwww。ちなみにB2F以降は完全オリジナルにしています(パーツは流用ですが)。今回マップを編集するにあたって「マップ編集ツール」を使わせてもらいました。非常に直感的に作業ができるので楽に作業ができました。こちらの勝手な意見も聞いていただき、作者の45氏には感謝感謝です。

若干端折りますが、フィールドマップ←→洞窟の部分の実装を行います。

  • SR: $0A8589 アレフガルドフィールド移動・NPC情報設定
0A85EF-F1 NOP
0A85F2 JSL $CAF771 SR: $0AF771 アレフガルド移動情報設定(サブ)
  • SR: $0AF771 アレフガルド移動情報設定(サブ)(新SR)
0AF771 LDX #$0228 X=#$0228 ルビスの塔の座標移動3データ
0AF774 JSL $C61509 SR: $061509
0AF778 LDX #$024C X=#$024C オリハルコンの洞窟の座標移動3データ
0AF77B JSL $C61509 SR: $061509
0AF77F RTL return
  • SR: $0AF714 フロア進入時初期化SRアドレス_SRアドレス_0164(新SR)
0AF714 JSL $CBF86D SR: $0BF86D
0AF718 RTL return
  • SR: $0BF86D オリハルコンの洞窟B1F進入時初期化実処理(新SR)
0BF86D LDA #$0176 A=#$0176
0BF870 JSL $C77365 SR: $077365 サブマップ画像取得
0BF874 JSL $CC9A82 SR: $0C9A82 ダンジョンBGM(アレフガルド)設定
0BF878 LDA #$006A A=#$006A
0BF87B LDX #$000F X=#$000F
0BF87E JSL $C777F9 SR: $0777F9 フロアのエンカウント,戦闘背景設定
0BF882 JSL $CADEB1 SR: $0ADEB1 フロア階層設定(B1F)
0BF886 JSL $CDFF1B SR: $0DFF1B オリハルコンの洞窟B1Fの呪文封印を解いたか(該当c=on)
0BF88A BCS #$04 if(c==on) goto $0BF890
0BF88C JSL $CBF9DC SR: $0BF9DC 呪文無効環境設定
0BF890 JSL $C77843 SR: $077843 引数:1#$CDE803 移動・宝箱・ドア・NPC情報設定用SRアドレス設定
0BF897 JSL $C7787B SR: $07787B 引数:1#$CDE326 特殊効果設定
0BF89E JSL $C77889 SR: $077889 引数:1#$CAEADB 特殊効果設定
0BF8A5 RTL return
  • SR: $0DE803 オリハルコンの洞窟B1F移動・宝箱・ドア・NPC情報設定(新SR)
0DE803 LDX #$024D X=#$024D アレフガルド地上への移動
0DE806 JSL $C61509 SR: $061509
0DE80A LDX #$01AC X=#$01AC
0DE80D JSL $C614BB SR: $0614BB
0DE811 JSL $CDFF47 SR: $0DFF47 オリハルコンの洞窟B1Fの封魔石を倒しているか
0DE815 BCS #$09 if(c==on) goto $0DE820
0DE817 NOP
0DE818 NOP
0DE819 LDA #$058B A=#$058B 封魔石のNPC
0DE81C JSL $C75828 SR: $075828 NPC1設定
0DE820 JSL $CDE92C SR: $0DE92C オリハルコンの洞窟NPC1設定(サブ)
0DE824 RTL return
  • SR: $0DE92C オリハルコンの洞窟NPC1設定(サブ)(新SR)
0DE92C LDA $3545 A=$3545
0DE92F AND #$0008 A&=#$0008 ゾーマを倒しているか
0DE932 BNE #$07 if(z==off) goto $0DE93B
0DE934 LDA #$0597 A=#$0597 洞窟に倒れているNPC
0DE937 JSL $C75828 SR: $075828 NPC1設定
0DE93B RTL return

これでフィールドマップ上の洞窟のアイコンに重なるとマップが切り替わり洞窟内部に移動できます。逆もできることを確認します。

コメント

  1. 匿名 より:

    Kmix楽しくプレイさせて頂いております。

    マップ編集ツールってDQ3-MAP.exeですよね。
    こちらはKmixでも使えるのでしょうか?
    使ってみたら街中の改造は出来ましたが外がぐちゃぐちゃになりました

    あちらのリドミに
    初めて開くゲームファイルの場合、保存する前に一度は設定してください。
    とはありましたが
    どう設定したらいいのかわかりません。

    もともと記述されているアドレスをオリジナルロムで辿って
    そこにある16進数の数字を10程
    コピーしてKmixの方で検索という手法でKmixに対応するアドレスを
    下記のように割り出したつもりですが外がぐちゃぐちゃになる現象は変わりません

    (BG3)
    0x118000 0x11C39F
    (BG12)
    0x11C45A 0x16BDB3
    (ワールドマップ)
    0x19797C 0x1A37E7 
    (通行)
    0x1A36D0 0x1B9960

    正常にDQ3-MAP.exeをKmixで使う方法をご教示くださいませ。

    管理者より返信:

    いろいろ場所を変えているのでまともに使えないと思います。試したこともありません。