9.レイヤー2にブロックを配置する場合

レイヤー2に配置されたブロックにマリオが触れた場合は、
$9A$98にはレイヤー2上での座標が格納され、$1933の値が1になります。
レイヤー1上での座標と異なることに注意してください。
レイヤー2にタイルを生成する場合、$1933に1を入れて$9A$98にレイヤー2での座標を格納すればいいので、
例えば触れたブロックを変化させる場合などは、今までと同じ処理のままで問題ありません。

しかしながら、スプライトを生成する場合はレイヤー1の座標を使わなければいけません。
レイヤー1とレイヤー2のx座標の差は$26から2バイト、y座標の差は$28から2バイトですので、
スプライトを生成する場合は、これらの値からレイヤー1上での座標を計算します。

レイヤー2に配置することも考えて、前回の壊れるブロックのソースを修正すると以下の通りになります。



まだ問題があります。
カスタムブロックにおいて$1933に1が入るのは、直接マリオが触れたときのみです。
レイヤー2に配置したブロックにマントやファイア、スプライトをぶつけた場合は駄目なわけです。
この場合でも、$9A$98、あるいは$0A$0Cにはレイヤー2の座標が格納されます。
しかしながら、$1933の値が1とならず、処理上においては
レイヤー1と判断されてしまい、座標の修正が行えません。
これを力づくで解決するには、レイヤー2専用のブロックをもう一つ作り、
絶えず$1933に1を入れるようにすれば何とかなります。

なお、?ブロックなどの標準のブロックをレイヤー2に配置した場合、
マントやファイアでは正常に動作しますが、スプライトをぶつけた場合正常に動作しません。
こちらはちゃんと$1933に1が入る代わりに$0A$0Cの座標がレイヤー1になってしまってます。
どうもカスタムブロックとオリジナルでは処理のタイミングが違うような。