Last Update 08/09/23
◇スクロール
マップ上に$80番オブジェクトを設置することで行われる。設置Y座標によって処理内容が変わる。
$722FB-7237A (80) = 設置Y座標: スクロール処理データのアドレス(low)
$7237B-723FA (80) = 設置Y座標: スクロール処理データのアドレス(high)
◇スクロール処理データ
byte0-1 -> コードアドレス1(ビッグエンディアン)(生成された後1回だけ実行)(省略可能)
byte0の値が$80未満の場合、省略されたと見なされる。
ボス登場やMr.Xステージ2の落下ブロックの落下フラグの消去などに使われている。
byte2 -> エリア内進行可能なスクロール方向(00 -> 左右進行不可, +01 -> 右, +02 -> 左)
byte3-4 -> コードアドレス2(ビッグエンディアン)(毎フレーム実行)(省略不可・何も処理しない場合はbyte3に00を入れておく。
但し、コード1でjmp $E45Aのような次のオブジェクト処理へ移行する場合はその限りではない)
中間地点の設定などの用途に使われている。
byte5 -> スクロール方向(00~06) (byte5に00又は$80以上があった時点でデータ終端)
00 無し,
01 = 下(部屋番号増加), 02 = 上(部屋番号増加),
03 = 下(部屋番号減少), 04 = 上(部屋番号減少),
05 = 右(部屋番号増加), 06 = 左(部屋番号減少)
byte6 -> スクロール時のパターンテーブル書き込み番号(00で書き込み無し)
byte7 -> スクロール時のパレット変更番号(00で変更無し)
byte8 -> bit7=0で省略されたとみなされる, bit6-0=スクロール元とする部屋番号
部屋番号の離れた部屋へスクロールする際に使用。
省略された場合は現在の部屋番号がそのままスクロール元の部屋番号。
byte9- -> スクロールする方向分だけbyte5-8を繰り返す
・例1 (01 00 00 00)
01 -> $80未満の値なのでbyte0-1は省略されたと見なし、これをbyte2の値と考える。
byte2 エリア内を右に進行可能
00 00 -> byte3-4 実行するコード無し
00 -> byte5 スクロール方向無しでデータ終端
・例2 (02 00 00 01 00 00 00)
02 -> $80未満の値なのでbyte0-1は省略されたと見なし、これをbyte2の値と考える。
byte2 エリア内を左に進行可能
00 00 -> byte3-4 実行するコード無し
01 -> byte5 下にスクロール可能(部屋番号増加)
00 -> byte6 パターンテーブルへの書き込み無し
00 -> byte7 パレットの変更無し
00 -> bit7=0なのでbyte8は省略。スクロール先部屋番号は現在の部屋番号 + 1
byte9 他にスクロール方向無しでデータ終端
・例3 (00 84 11 01 85 1A 04 84 00 00)
00 -> $80未満の値なのでbyte0-1は省略されたと見なし、これをbyte2の値と考える。
byte2 エリア内での左右進行不可(1部屋分の広さのエリア)
84 11 -> byte3-4 コードアドレス2 $8411(現在の部屋番号が$0Dなら中間復帰部屋番号を$0Dにセット)
01 -> byte5 下にスクロール可能(部屋番号増加)
85 -> byte6 パターンテーブル書き込み番号85
1A -> byte7 パレット変更番号1A
04 -> bit7=0なのでbyte8は省略。下スクロール先部屋番号は現在の部屋番号 + 1
byte9 上にスクロール可能(部屋番号減少)
84 -> byte10 パターンテーブル書き込み番号84
00 -> byte11 パレット変更無し
00 -> bit7=0なのでbyte12は省略。上スクロール先部屋番号は現在の部屋番号 - 1
byte13 他にスクロール方向無しでデータ終端
・例4 (02 00 00 02 98 58 05 00 00 8B 00)
02 -> $80未満の値なのでbyte0-1は省略されたと見なし、これをbyte2の値と考える。
byte2 エリア内を左に進行可能
00 00 -> byte3-4 実行するコード無し
02 -> byte5 上にスクロール可能(部屋番号増加)
98 -> byte6 パターンテーブル書き込み番号98
58 -> byte7 パレット変更番号58
05 -> bit7=0なのでbyte8は省略。上スクロール先部屋番号は現在の部屋番号 + 1
byte9 右にスクロール可能(部屋番号増加)
00 -> byte10 パターンテーブルへの書き込み無し
00 -> byte11 パレットの変更無し
8B -> byte12 bi7=1なのでbit6-0がスクロール元部屋番号。
右スクロール先部屋番号は $0B + 1 =$0C
00 -> byte13 他にスクロール方向無しでデータ終端
・例5 (92 36 01 00 00 00)
95 36 -> byte0-1 コードアドレス1 $9536(Mr.Xステージ2の落下ブロックの落下フラグを消去)
01 -> byte2 エリア内を右に進行可能
00 00 -> byte3-4 実行するコード無し
00 -> byte5 スクロール方向無しでデータ終端