※条件に誤りがあったため修正
関連記事:YouTubeにあげた動画2つ
2:12付近で壁抜けをしています。
一昔前にひっそりと発見され、ひっそりと公開されたウィリー降り壁抜け。
成功条件が不明なまま放置されていたため、自身の考察を含めた壁抜けの方法をここで説明します。
1.バイクを降りた時の位置
壁を抜ける直前、つまりバイクを降りた直後の位置ですが、
カービィが壁にギリギリめり込むよう調整します。
この調整をするにはX座標のメモリを監視をします。(目視でもいいですが)
nを整数とした場合、ウィリーから降りた時にカービィが
- 右抜けの場合:24n+1
- 左抜けの場合:24n
の位置にいることが条件です。
この値から少しでもズレると壁を抜けることは不可能です。
降りた時の座標はウィリーライダー時のウィリーの座標と同じなので、
1P,2P共にX座標を監視するとやりやすいです。
また、座標の関係上、角のある地形でのみ壁抜けができます。
【参考】X座標メモリアドレス
1P: s00A02(2x)
2P: s00896(2x)
2.バイクに乗る時の位置
合体前のウィリーに対するカービィのX座標です。
この時、カービィがウィリーより右にいるか左にいるかによって、
降りた時の挙動が微妙に変わります。
壁が右側にある場合は、右側から乗った時のみ壁抜け可能となります。
(左側から乗ると降りた時点で壁から押し出されます)
見るのはカービィのX座標のみです。(ウィリーに対する位置は関係ありません)
右抜けの場合、抜ける壁より右でウィリーに乗ってから降りる必要があります。
具体的には、ウィリーから降りた時の座標よりも5ドット以上右で乗ることが条件です。
(左抜けの場合は5ドット以上左になります)
ちなみに理由ですが、カービィの実際のX座標とは別に「壁衝突補正のためのX座標」のメモリが存在し、
通常はカービィのX座標とほぼ同じ値を示しますが、ウィリーに乗っている間及びウィリーから降りた直後(1F)は乗る直前の座標のまま固定されます。
なので乗る位置が降りる位置より右だと補正が間に合わないため壁抜けが可能ということになります。
3.降りた直後のカービィのX速度
まず視覚的な壁抜けの条件ですが、「1.バイクを降りた時の位置」の通り、
降りた直後にカービィのX座標が24n-1になったのち、
次のフレームでカービィが5ドット以上移動する、つまり、
X座標が24n+4になるよう動けば壁抜け成功です。
降りた直後から2F間で10ドット以上移動することで成功になります。
ちなみに、最も速い場合でも2Fで5ドット+5ドットの移動しか方法がありません。
2F間移動するということで、抜ける時の速度減衰も考慮に入れると、
(降りた直後のX速度)+(降りた直後のX速度)- 8(カービィの空中減速度)
が2F間で動く距離になります。
SDXでは、1ドット=256サブピクセルに設定されていて、
カービィが1Fで移動する距離は「(X速度 / 256)ドット」となります。
バイクから降りた時にカービィが出せる最大速度は
「ホイールのダッシュ時に乗った後」の1264ですが、
これを1Fの移動距離に当てはめると、「4ドット + 240サブピクセル」になります。
ここで、カービィのXサブピクセルを監視します。
例えばカービィのXサブピクセルが0の場合は、
1264の速度で降りた時に0 + 1264 + 1264 - 8 = 2520になり、
ドットに換算すると2520 / 256 = 9.84... になり、10ドットに満たないため壁抜けに失敗します。
しかして、Xサブピクセルが96だった場合は、
96 + 1264 + 1264 - 8 = 2616となり、
2616 / 256 = 10.22... となって10ドット以上移動が出来るため、めでたく壁抜け成功となります。
このように、ウィリー降り壁抜けにはサブピクセルの監視が必須となります。
TAS制作の際にも普段からサブピクセルを眺めていた方がいいでしょう。
また、カービィはバイクに乗ってから降りた直後までサブピクセルが固定されるので、
乗る直前のサブピクセルさえ見れば心配いりません。
降りた直後のカービィのX速度は乗る直前と同じであるため、
バイクに乗った瞬間に降りた時に10ドット移動できるかが分かります。
10ドット=2560サブピクセルなので、
(乗る時のXサブピクセル)+(乗る直前のX速度)+ (乗る直前のX速度 - 8)≧ 2560
がウィリー降り壁抜けの必要条件になります。
ちなみに、カービィのX速度は1157以上あれば条件を満たしますが、
ウィリーから降りた時に1157以上を出せる能力はホイールだけです。