ドアを追加する


部屋の繋がりを変更する際よくぶちあたるのが「ドアが足りない状況」だと思います。
手っ取り早い解決手段は、やはりドアの多い部屋とポインタを入れ替える方法ですが
適当な部屋がない時にはなかなか困難です。

そんな時には部屋にドアを追加してしまいましょう。
ここでの方法を厳密に言うと、未使用領域に新しいドア情報を書き込んで
Door Outのポインタを変更する事でドアの数を増やす手順です。





ドアが1枚しかない部屋を、ドア4枚にしてみましょう。

ドア本体の情報はFX1と同じ範囲、18000~1FFFFの間に書かれているので
ここの未使用領域を使います。
バイナリエディタでロムを開き、1AD70へジャンプします。
ドアの情報は1枚につき12バイトです。

  • 1AD70~7B
  • 1AD80~8B
  • 1AD90~9B
  • 1ADA0~AB

上記にあるFFを、全て上書きで00に書き換えます。



書き換えた部分を赤・青・緑・橙で囲ってみました。

では、書き換えるところがもう1か所あるので
7E9A0へジャンプします。



78000~7FFFFの範囲は、どうやら7E99A以降が未使用領域のようです。
わかりやすく7E9A0から使ってみましょう。

ここへ何を書き込むのかというと、さきほど1AD70あたりを00に書き換えましたが
この書き換えたところの先頭部分のアドレスを、頭の1を取ったうえで
上2桁・下2桁入れ替えたものを書き込みます。

とてもわかりづらい説明ですが、つまり

  • 70AD
  • 80AD
  • 90AD
  • A0AD

こういう事になります。
これを上書きで書き込みます。



やはり赤・青・緑・橙で囲ってみました。
同じ色の囲いが、ドア情報とそれを指し示すアドレスとで対応しています。
最後の灰色で囲った0000は終了命令にあたるものなので、これも必ず書き込みます。

ここまで終わったら、変更を保存してファイルを閉じます。
最後にSMILEで、目的の部屋のポインタを変更しましょう。



ここでは、ドア情報のありかを示すアドレス群の先頭を指定します。
つまりこの場合、7E9A0の頭7を取ったE9A0に変更し
Save Pointers→いいえを押します。



見事ドアが増えました。
ただしこの手順だと、ドア情報が全てクリアになってしまうので
すでに設定済だったドアがあった場合には、再度設定しなおす必要があります。



Door Outを変更すると元々あったドア情報などは、どこの部屋からも参照されない浮いた状態になります。
ドア1枚ではあまり使いどころがありませんが、2枚以上あれば少しだけドアを増やしたい時に
重宝するので、メモ帳などにDoor Outの元アドレスを書きとめておくと便利です。

また、ドア情報はくっついていてもかまいません。



この場合ドア情報の先頭が変わるので、アドレス指定も変わります。