DQ3 通行情報の継足し・屋根・無限回廊3

というわけで、今回はいよいよ無限回廊の解説です。お手本はネクロゴンドの洞窟2Fです。まずは下のマップを見てください。

20100602170519.jpg

(元画像はサイズが大きいので注意)

赤丸で囲った部分が全く同じであることを確認してください。次にこのフロアの進入時初期化処理を見ていきます。

  • SR: $0A64DA ネクロゴンドの洞窟2F進入時初期化処理
0A6504JSL $C7785FSR: $07785F 引数:1#$CAF282イベント設定

  • SR: $0AAC48 ネクロゴンドの洞窟2F移動・宝箱・ドア・NPC情報設定
0AAC84JSL $C738E2SR: $0738E2 引数:1#$00 引数:2#$00 引数:3#$CDB381

  • SR: $0AF282 ネクロゴンドの洞窟2F通行情報動的変更
0AF282LDA #$009AA=#$009A
0AF285STA $9C11$9C11=A
0AF288LDA #$0068A=#$0068
0AF28BSTA $9C13$9C13=A
0AF28ELDA #$009AA=#$009A
0AF291STA $9C15$9C15=A
0AF294LDA #$006DA=#$006D
0AF297STA $9C17$9C17=A範囲座標指定
0AF29ALDX #$0001X=#$0001通行構成情報ID指定
0AF29DLDY #$0000Y=#$0000
0AF2A0JSL $C736D0SR: $0736D0上記座標の通行構成情報に#$2800を設定
0AF2A4JSL $C78FB9SR: $078FB9
0AF2A8COPgoto $00FFE4
0AF2A9JSL $C78FDFSR: $078FDF
0AF2ADJSL $CCD298SR: $0CD298
0AF2B1RTLreturn

このSRでは指定座標(#$9A, #$68~#$6D)の通行構成情報を#$2800(透過+α?)に変更しているようです。ちなみに、この座標は上のマップの青線のあたりの座標に相当します*1

  • SR: $0DB381 ネクロゴンドの洞窟2F座標移動処理
0DB381JSL $C73B6ESR: $073B6E
0DB385RTLreturn

  • SR: $073B6E ネクロゴンドの洞窟2F座標移動処理
073B6ECPY $DAA5Y==$DAA5?
073B71BNE #$0Cif(z==off) goto $073B7F
073B73LDA #$FD60A=#$FD60
073B76LDX #$FEE0X=#$FEE0ジャンプする座標差分をWX,WYベースで指定
073B79JSR $3BE3SR: $073BE3座標移動処理
073B7CJSR $3BAESR: $073BAE
073B7FRTLreturn

このSRでは、$0AF282で指定した範囲の座標にPCの先頭が来た瞬間にWX座標を#$FD60、WY座標を#$FEE0(signed intなので両方ともマイナス)ずらす処理を行っています。結果として、PC座標は緑線の部分に移動することになります。これで大体仕組みがわかりました。まずマップにのりしろに相当する部分(上のマップで言えば右の赤丸)を用意し、その部分にきたら無限回廊開始部分(上のマップで言えば左の赤丸)に座標だけ飛ばす、ということをすればいいわけです。注意しないといけないのは、のりしろに相当するマップは見た目は全く同じでないといけません。また、屋根を使用する場合も屋根番号は同じでないといけません(したがってある程度離れている必要があります)。次に1マップ上にいくつまでこのギミックを配置出来るか、という話になりますが、1マップ上に2つ配置されている地球のへそB1Fを見てみたところ、通行構成情報の設定の部分を#$2800と#$2400にしてそれぞれ別のSRで処理する、という実装になっていました。2つなら通行構成情報のフラグ属性で使い分けることは可能ですが7つ、8つとなると無理です。というわけで、ロンダルキアの洞窟の最終フロアのようなマップを実装するには、「現在位置を調べてジャンプする差分座標を切り替える」ことで対応できます。これなら実質上限は無限になるので、後はマップサイズとの相談になります。

*1:多少ずれてる可能性あり

コメント

タイトルとURLをコピーしました