スプライトの当たり判定

スプライトとは複数の画像や図形を合成して表示する技術のことであり、この技術により合成、表示されたグラフィックをスプライトと呼びます。アニメーションのあるものは基本スプライトであり、スーパーマリオワールドでは、主人公であるマリオ、敵キャラの大半(全て?)、パワーアップアイテム、ゴールバー等が該当します。

敵に当たるとダメージを受ける、パワーアップアイテムを取ると強くなる、ゴールバーを取ると(ボーナスポイントつきの)クリアとなる…と、スプライトには当たり判定が存在しますが、スーパーマリオワールドではこれらのスプライトの当たり判定は常にあるわけではなく、1フレーム毎に有、無、有、無、…と切り替わっています(マリオを除く)。

さらに、この当たり判定の有無はグローバルタイマー(ゲームを起動中常に動いているタイマー)に依存しています。1フレーム毎に当たり判定の有無が切り替わるのは変わらないのですが、ステージへの進入タイミングによって、あるフレームでの当たり判定の有無が変わります。

この仕様の影響を受けることは殆どないのですが、ある場面では大きな影響を受けることとなります。バニラドーム コース1を例に説明しましょう。

このコースの1エリア目はスピンブロックが格子状に配置されており、それを無視して進むためにはエリア下部のメットが3体いる足場を通過しなければなりません。初期位置に一番近いメットを持って行き投げる、マントマリオのボディプレスで3体のメットの一番手前を気絶させ、それを投げる、全てスピン攻撃で倒す等何らかの方法でメットを倒して進んでいくわけですが、全てスピン攻撃で倒す場合、スプライトの当たり判定の仕様に気をつける必要があります。減速無しでスピン攻撃をして倒そうとすると、2体目のメットを倒せる場合と倒せない場合が出てくるのです。

スピン攻撃で敵を倒す場合、敵を倒す前後におけるスピン攻撃の当たり判定の変動は、敵の位置に依って8通り存在します。(スピン攻撃の当たり判定についてはこちら。簡単に書くと、4フレーム毎に攻撃方向が右、左、右、左…と切り替わります。)

そして、2体目のメットを減速無しで倒す場合、以下のようになります。

ダッシュ状態の時、スピンの攻撃判定に敵スプライトが入ってから5フレーム後にマリオと敵スプライトが接触します(速度変動のタイミングによって変わる可能性があります)。この間にスピン攻撃が敵に当たれば倒すことが出来ます。上図を見ると、スプライトの当たり判定の変動タイミングによって、敵に接触してしまう場合と倒せる場合があることが分かります。

もちろん、当たり判定の変動タイミングがどちらであっても敵を倒せる場面もあります。

ここまでの説明で、減速無し/減速の仕方を固定出来る、かつその状態で敵を倒す必要のある場面はそうそうない。だからあまり気にする必要はない、と感じるかも知れません。しかし、この仕様で本当に気をつけるべきは、減速の仕方が毎回バラバラで、その後にダッシュ状態で敵を倒そうとしたときです。この場合、敵を倒せるか倒せないかを把握することは(少なくとも普通の人間には)出来ません。例えば、ドーナツへいやのしろで?ブロックと共にいるカロンを倒そうとする時、なぜか被弾してしまう…こういう経験をされたRTAプレイヤーの方は少なくないでしょう。

これの回避方法は簡単で、減速して敵を倒せばよいのです。減速すれば、スピンの攻撃判定に敵スプライトが入ってからマリオと敵スプライトが接触するまでの時間が伸び、確実にスピン攻撃を当てることが出来ます。他にもクッパの谷コース1のインディー等が該当しますし、失敗をしてリカバリをする時にこういう場面に出くわすこともあるでしょう。

「敵をダッシュ状態かつスピン攻撃で倒さない」

これを押さえておくだけでもミスが減ると思います。

参考: