スーパーマリオブラザーズ3 壁抜けについて(原理編)
スーパーマリオブラザーズ3の壁抜けの原理について、調査結果を記しておきます。
これはFC版、NES版の調査です、マリコレ版は調べていませんが同じだと思われます。
6-10や7-2の場合のように、マリオが足場に立っているときに、
その頭にブロックが重なっているとき右にスライドしていきます。
これが壁抜けの原理となります。
7-1の壁抜けの場合、上図で見て右下のブロックに乗ることで、
マリオが足場に立っていることになり、頭がブロックと重なるため右にスライドします。
右下のブロックに乗るためには、マリオを壁に少しめり込ませることになります。
ここでマリオの速度が重要になります。
マリオの速度は以下の通りです。
・ダッシュボタンを押してない時の最大速度:24サブピクセル/フレーム
・ダッシュボタンを押している時の最大速度:40サブピクセル/フレーム
・Pダッシュ状態の時の最大速度:56サブピクセル/フレーム
以降ピクセルをpx、サブピクセルをspxと略します。
spxとは小数点のようなものと考えると分かりやすく、1px=16spxになります。
例えば速度40spxなら、1フレームで2pxと8spx進むことになります。
(参考データ)
1pxとはゲーム画面内でどの程度の大きさかといいますと
マリオの体は、おそらくですがこのようになっていると思われます。
横幅:16px、12px
高さ デカマリオ:26px しゃがみ状態:16px
また、マリオ3によくある1つのブロックは1辺長さ16pxの正方形です。
普段のプレイでマリオを壁にぶつけていますが、その全てが壁にめり込んでます。
壁にめり込むと、速度が0にされ、毎フレーム1px壁の外に押し出すようです。
例えば、マリオの座標が12pxの0spxにいて、速度が右方向に40spx、
そして目の前に壁があり、壁の左端座標が13pxにあるとします。
この時のマリオの1フレーム後の位置は、速度を足した14pxの8spxになりますが
これは壁にめり込んでいるため押し戻され13pxの8spxに移動することになります。
壁にめり込むことができることが分かりますが、
ブロックに乗るには何px壁にめり込めば乗れるかを知る必要があります。
これは、そこら辺にあるブロックの角に乗れば分かります。
結論を言うと、ブロックの端から3px目に乗ればブロックに乗ることができます。
つまり、壁に3px以上めり込まないとブロックに乗れないことになります。
※マリオの見た目に騙されやすいですが、端から3px目に乗っています
7-1では基本的に速度右方向に40spxで壁抜けを行います。
つまり速度40spxで壁に3pxめり込ますことになります。
壁の左端の座標が13pxにあるとしたら、
3pxめり込んだ位置である15pxにマリオが到達しなければいけません。
ここから逆算すると、マリオの座標は12pxの8spx~15spxにあるときが答えです。
マリオの座標がこの僅か8spx分の間の時しか、壁抜けができないことが分かります。
しかし速度は40spxです。
速度を微調整しない限り、その僅かな8spxに持っていくには運が絡んでしまいます。
(速度や座標を正確に調整するのは非常に困難であり、これは運ゲーですね。)
従って、40分の8=5分の1の確率で壁抜けの条件を満たすことが分かります。
ただしこれだけでは壁抜けには不十分で、高さ方向について検討する必要があります。
そちらについては、別記事で説明しますが、こちらは運ゲーにはなりません。
【オマケ】
7-9の壁抜けのようにPダッシュで壁抜けをする場合
速度が56spxであり、先ほどの7-1の場合と比べ16spx速いことになります。
ブロックに乗るため、壁に3pxめり込ますのですが、
マリオの座標は合計で24spxの猶予があることが分かります。
従って、56分の24=7分の3の確率で壁抜けの条件が満たされます。