Last Update 08/01/20

チップ属性チェック・めり込み補正サブルーチン及び、めり込み補正付き移動サブルーチンに関する記述です。


ここで、チップ属性チェック・めり込み補正・めり込み補正付き移動サブルーチンとは、例えば以下のようなサブルーチンを指す。
◇チップ属性チェックサブルーチン
jsr $C4A1 Y方向
jsr $C5AA X方向

◇めり込み補正サブルーチン
jsr $E6F9 X方向(右)
jsr $E738 X方向(左)
jsr $E771 X方向(下)
jsr $E7A8 X方向(上)

◇めり込み補正付き移動サブルーチン
jsr $E7B7 Y方向移動・重力加算有り
jsr $EA3F X方向移動
jsr $EA52 Y方向移動

いずれもYレジスタにめり込みチェックデータの参照番号をセットして呼び出す。
めり込みチェックデータは、オブジェクトの座標を基準としたチップ属性をチェックする相対座標で構成される。
チェックした座標のチップ属性は$48~4Fに格納される。
めり込み補正(付き移動)サブルーチンではブロックへのめり込みを検出・座標の補正が行われる。
移動サブルーチンに関して、上方向・左方向へ移動することになった場合、
めり込みチェックの前にYレジスタの値がインクリメントされる。
ほとんどのチェックデータは右・左、または下・上の順で対になっているので、
移動サブルーチンを呼ぶ際のYレジスタの値は、右または下に移動すると考えた場合の番号にすればよい。

◇Y方向移動用めり込みチェック
$3C817~3C846 (30) = 参照番号: $3C847を基点としたY方向移動用めり込みチェックデータへの相対アドレス

$3C847~3C8F1 Y方向移動用めり込みチェックデータ

byte0 めり込みチェック位置の総数(00で1個を表すため、実際の個数より1小さい値を指定する)
byte1 めり込みチェック位置の(相対)Y座標
byte2 1個目のめり込みチェック位置の(相対)X座標

byte3 2個目のめり込みチェック位置の(byte2からの相対)X座標 
byte4 3個目のめり込みチェック位置の(byte3からの相対)X座標 
…

◇X方向移動用めり込みチェック
$3C8F2~3C921 (30) = 参照番号: $3C922を基点としたX方向移動用めり込みチェックデータへの相対アドレス

$3C922~3C9EC X方向移動用めり込みチェックデータ

byte0 めり込みチェック位置の総数(00で1個を表すため、実際の個数より1小さい値を指定する)
byte1 めり込みチェック位置の(相対)X座標
byte2 1個目のめり込みチェック位置の(相対)Y座標

byte3 2個目のめり込みチェック位置の(byte2からの相対)Y座標 
byte4 3個目のめり込みチェック位置の(byte3からの相対)Y座標 
…


Y方向めり込みチェックデータ
番号チェック方向チェックする座標移動ルーチンを呼ぶ
際のYレジスタの値
備考
00(-7, +12), (0, +12), (+7, +12)Y=00ロックマンの移動に使用
01(-7, -10), (+7, -10)
02(-14, -14), (0, -14), (+14, -14)
03(-14, +12), (0, +12), (+14, +12)
04(-14, +10), (0, +10), (+14, +10)Y=04ロックマンのスライディング移動に使用
05(-14, -8), (0, -8), (+14, -8)
06-(0, 0)
07(-5, +6), (+5, +6)Y=07
08(-5, -6), (+5, -6)
09(-11, +16), (0, +16), (+11, +16)Y=09
0A(-11, -16), (0, -16), (+11, -16)
0B(-7, +4), (+7, +4)Y=0B
0C(-7, -4), (+7, -4)
0D(-15, +16), (0, +16), (+15, +16)Y=0D
0E(-15, -16), (0, -16), (+15, -16)
0F(-15, +28), (0, +28), (+15, +28)Y=0F
10(-15, -28), (0, -28), (+15, -28)
11(-7, +20), (+7, +20)Y=11
12(-7, -20), (+7, -20)
13(0, +4)Y=13クリスタルマンの反射弾・
敵の出したアイテム(小)等に使用
14(0, -4)
15(-11, +12), (0, +12), (+11, +12)Y=15
16(-11, -12), (0, -12), (+11, -12)
17(-7, +8), (+7, +8)Y=17
18(-7, -8), (+7, -8)
19(-11, +20), (0, +20), (+11, +20)Y=19
1A(-11, -20), (0, -20), (+11, -20)
1B-(-7, 0), (+7, 0)
1C(0, +16)Y=1Cグラビティーマンの移動・
クリスタルマンの移動等に使用
1D(0, -16)
1E(-15, +12), (0, +12), (+15, +12)Y=1E
1F(-15, -12), (0, -12), (+15, -12)
20(0, +36)
21(-7, +12), (+7, +12)Y=21
22(-7, -12), (+7, -12)
23(0, +8)Y=23エディーの出したアイテム・
敵の出したアイテム(大)等に使用
24(0, -8)
25(-7, -6), (+7, -6)
26(-7, +5), (+7, +5)
27(0, +12)Y=27
28(0, -12)
27-2F 実データ無し

X方向めり込みチェックデータ
番号チェック方向チェックする座標移動ルーチンを呼ぶ
際のYレジスタの値
備考
00(+8, -9), (+8, 0), (+8, +11)Y=00ロックマンの移動に使用
01(-8, -9), (-8, 0), (-8, +11)
02-(0, -11), (0, 0), (0, +5)はしごとの接触判定に使用
03-(0, -5), (0, 0), (0, +11)はしごとの接触判定に使用(重力反転時)
04(+15, -5), (+15, +9)Y=04ロックマンのスライディング移動に使用
05(-15, -5), (-15, +9)
06(+15, -7), (+15, -7)Y=06ロックマンのスライディング移動(重力反転時)に使用
07(-15, -7), (-15, -7)
08(+15, +4)Y=08
09(-15, +4)
0A(+12, -15), (+12, 0), (+12, +15)Y=0A
0B(-12, -15), (-12, 0), (-12, +15)
0C(+8, -3), (+8, +3)Y=0C
0D(-8, -3), (-8, +3)
0E(+6, -5), (+6, +5)Y=0E
0F(-6, -5), (-6, +5)
10(+16, -15), (+16, 0), (+16, +15)Y=10
11(-16, -15), (-16, 0), (-16, +15)
12(+16, -27), (+16, -12), (+16, +3), (+16, +18), (+16, +27)Y=12
13(-16, -27), (-16, -12), (-16, +3), (-16, +18), (-16, +27)
14(+8, -19), (+8, -3), (+8, +13), (+8, +19)Y=14
15(-8, -19), (-8, -3), (-8, +13), (-8, +19)
16(+12, -11), (+12, 0), (+12, +11)Y=16
17(-12, -11), (-12, 0), (-12, +11)
18(+7, -11), (+7, 0), (+7, +11)Y=18
19(-7, -11), (-7, 0), (-7, +11)
1A(+4, 0)Y=1Aクリスタルマンの反射弾等に使用
1B(-4, 0)
1C(+8, -7), (+8, +7)Y=1C
1D(-8, -7), (-8, +7)
1E(+12, 0)Y=1Eクリスタルマンの移動等に使用
1F(-12, 0)
20(+16, 0), (+16, +12)Y=20
21(-15, 0), (-15, +12)
22(+20, 0)Y=22
23(-20, 0)
24(+16, -11), (+16, 0), (+16, +11)Y=24
25(-16, -11), (-16, 0), (-16, +11)
26(+12, -19), (+12, -3), (+12, +13), (+12, +19)Y=26
27(-12, -19), (-12, -3), (-12, +13), (-12, +19)
28(+8, -11), (+8, 0), (+8, +11)Y=28
29(-8, -11), (-8, 0), (-8, +11)
2A(+8, 0)Y=2A
2B(-8, 0)
2C-(0, -6), (0, +2)
2D-(0, +5)
2E-2F 実データ無し