今回はマップエントリーの取り扱いについて説明します。既存のマップ同士で差し替えを
する場合は、eMapEditorでのデータ編集は不要で、エントリー情報を書き換えるだけで
手軽にマップを変更できます。ただし、出入り口の座標や移動先なども変更が必要です。
WikiのRomマップを見ると、
0E9C00- マップentry[26Bytes * 512]
と書いてあります。Stirlingで原作Romを開いて$E9C00へ移動します。
今回はマップID:0x0020 トゥールの村を探して、改変してみます。下の画像をご覧下さい。
$E9C00から20 00(トゥールの村のID)を検索するとすぐ近くがヒットするのですが、これは
マップエントリーの先頭ではありません。検索6回目にヒットする$E9F40がトゥールの村の
エントリーです。上の画像の反転部分の終端をご覧下さい。最後の05の隣から21 00…と
続いています。マップエントリーは26バイト刻みで、先頭2バイトにマップIDが配置されて
ますので、探しているマップIDを検索してヒットした場所から26バイト選択して反転させて
その直後に次のマップIDらしき数値があれば正解だと判断できます。20 00→21 00。
今回はこのトゥールの村のエントリーを滅びの町のエントリーに変えてみます。滅びの町の
IDは0x00CEです。これを$E9F40から検索すると、一発でヒットします(下の画像)。
この選択部分をコピーして、$E9F40へ移動して元のトゥールの村のエントリー26バイトを
選択して削除。先ほどコピーしておいた滅びの町のエントリーを$E9F40からペーストすると
トゥールの村のエントリーを滅びの町の数値に差し替えられます。
この状態でトゥールの村に突入すると、上の画像のように少しズレた丘の上に出てしまいます。
この状態を修正するにはマップ移動チップを編集します。WikiのRomマップより、
0E3AC0- : マップ移動[6Bytes * ] 2B:移動元座標,2B:移動先マップID,2B:移動先座標
$E3AC0からマップ移動チップが並んでいます。しかし、パッと見どれがどれやらわかりません。
これを手っ取り早く調べるにはドラクエビューアを使います。ドラクエビューアでRomを開いて
トゥールの村の番号0x0020を10進数に戻してから入力します。これは16 * 2 = 32で暗算で
いけますが、面倒な数値の場合はアクセサリの電卓で10進数に戻します。
上の画像はドラクエビューアで、一切いじっていない元のRomを開いて、トゥールの村を
表示したものです。トゥールの村に入ると、イの真下のマスに出ます。このマスをクリック
すると右側にXY座標が20 32と出ます。これでトゥールの村のID:0x0020と移動先座標が
わかりましたので、さっそく$E3AC0に移動して、20 00 20 32で検索してみます。すると、
どこにもヒットしません。今度は座標だけ20 32で検索すると$E3ADCがヒットしました。
下の画像をご覧下さい。
XY座標20 32の手前が20 08になっています。トゥールの村のIDは20 00です。ではこの08は
一体なんでしょうか? 恐らく地名表示のフラグだと思われます。先ほどの滅びの町で
ズレた位置に出たスクショから目測で4マス右にずらせば適切な位置だと思われますので、
XY座標20 32を24 32に変えてみます。ついでに20 08を20 00にして保存。どうなるかというと
今度はマシな位置に出ました。地名表示はナシ。やはり20 08の08は表示用フラグでした。
こんな感じでドラクエビューアを使ってマップ内の座標を調べて、マップ移動チップを探すと
エミュのメモリビューアで座標を調べるより楽です。
マップエントリーの話に戻りまして、先頭2バイトはマップIDなのですが、これは厳密には
イベント配置のIDなんです。今回はトゥールの村のエントリーをまるっと滅びの町の数値で
上書きしたのですが、先頭のCE 00だけ20 00に戻すとどうなるでしょうか?
イベント配置のIDを元に戻すと、上の画像のようにマップの舞台は滅びの町のままですが、
NPCとイベントの配置はトゥールの村のものに戻ります。このようにマップエントリーを
編集するだけでもマップを変えることができます。マップエントリーについてはあと2点だけ
触れておきます。下の画像は元のトゥールの村のエントリーです。
エントリーの7、8バイト目はモンスターエンカウント設定箇所です。ここでは00 00となって
いますので敵は出てきません。これを80 80にすると敵が出てきます。
反転部分の末尾の05はBGMの設定箇所です。ここを変えれば曲を変更できます。
そしてその1つ前は戦闘背景の設定箇所です。00は草原です。
マップエントリーは1〜2バイト目、7〜8バイト目、25〜26バイト目が特に重要ですので、
まずはそこを押さえておいて下さい。その他、レイヤーや流動、パレットなどは筆者もあまり
理解できておらず、試行錯誤で意図した形に近ければOKという感じで対処しています。
今回はこれにて終わります。