斜面抜けについての話
まえがき
2022年1月30日、日本のサンシャインTASerであるsu氏が1つの動画を公開した。
— su (@ykpin64) 2022年1月30日
画面から見切れるギリギリで起きているため分かりにくいが、本来モンテに1コイン払って投げてもらい窓を突き破るか、フルーツすり抜けを使うかで侵入するシャイン部屋の建物の屋根をマリオ単体のみですり抜けて侵入している。これが新発見となる斜面抜けで、今回はこの技の解説をする。
同じ原理の技は4年前から既にあった?
実は斜面抜け自体は2018年に制作したAny%TASのピンナパークストーリー2で大砲に侵入する際に使っている。この時は同TAS制作中に、RTAで偶然起きた事例がマリオサンシャインの総合discordサーバーにて報告され、原理は分からないながらもスティックをほぼ総当たりに近い数だけ行ってTASでも再現を得られた。
その後Nokidoki氏によって、斜面が別の斜面に接続している時、その境目は判定が薄くなるという情報が寄せられ原理は判明したわけだが、それ以上の発展は起こらなかった。ゆえにAny%TAS、そして現在制作中の120枚TASでも大砲抜け以外でこの技は使われていない。
The bottom of a slope has a very thin hitbox, which is exposed if it's connected to another slope pic.twitter.com/Tqx17ZfJl8
— Noki Doki (@Qbe_Root) 2020年12月8日
クォーターフレーム
斜面抜けの原理を解説するには避けて通れないのがクォーターフレーム(以下QF)という概念。
マリオサンシャインは1秒間に30フレーム描画される30FPSで動いているが、各フレームは内部的には更に4分割されており、これをQFと呼んでいる。この4分割ではマリオと壁との接触や床との接触の判定を行っている。通常は4分割全てを見る事はできないが、Zボタンのマップやポーズ画面の開閉を最速で繰り返す事でQFごとに画面を進めることができる。
スイッチ版のサンシャインはマップボタンを押し続けるだけで最速の開閉ができるため、QFを簡単に確認可能である。
床と壁の判定のチェック
サンシャインにおける床の判定、壁の判定がどのように行われているか具体的に見ていく。まず斜面抜けに関わる床の判定について。
まずゲーム内の物の長さの単位をここでは[unit]と呼ぶ事にする。例えば、マリオの水平方向の速度(XZ速度)が48であるならば、それは1Fで48unit移動する事を意味する。ちなみにこの速度48はマリオがダイブをしている時の速度である。
床の判定は以下の通りである。
三角形の1番低い位置では厚さが30unit、最大で厚さが108unit
三角形という新たな要素が出てきたため、順番に解説する。
これはサンシャインに限らずだが、壁、床、天井、水面などあらゆるものは複数の三角形を組み合わせて作られており、その三角形がマリオとの接触を判定している。
画像では、青く描写されているのが床の判定を作っている三角形、緑で描写されているのが壁の判定を作っている三角形である。
床を構成する場合、平らな床では三角形が全て1番低い位置にある事になり、その厚さはどこをとっても30unitである。つまりは床のY座標が300だとすると、Y座標270までは床として認識され、その範囲にマリオがいる場合は強制的にY座標300に押し上げる処理が働く。
斜面では三角形の頂点が異なる高さにあるため、それぞれの場所ごとに厚さが変わってしまう。
ちなみにマリオが地面にいるか空中にいるかで判定の範囲が違い、地面にいる時は床の上100unitも床判定され、これによって階段や斜面を下ってもマリオが空中に飛び出す事がないようになっている。
次に壁の判定のチェック
これは床よりも複雑なため一律に説明できるものではないが、ほぼ全てで共通するのは壁の前後50unitがマリオを押し返す判定になっている事。
例えばハニスキで立ち位置を合わせようとカニ歩きをしていたら急に建物の外へ押し出される事があるのは、この前後50unitの範囲に入ってしまったからである。
壁の前後にマリオを動かす判定(緑の矢印)がそれぞれ50unitずつついているイメージ図。この範囲に入るとマリオが強制的に外に押し返される。分かりやすさ重視なので実際の矢印はもっと狭い。
壁についてもマリオが地面にいるか空中にいるかでその判定が異なるが、斜面抜けで関係があるのは空中にいる時のみなので読み飛ばしてもらっても構わない。
マリオが地面にいる場合、まず三角形の頂点から30unitの範囲のY座標では壁としての判定はない。そしてそこから更に30unitの範囲では壁の押し返す判定は前後25unitずつである。そこから下は前後50unitずつの壁判定があり、三角形の最も低い位置より更に下の60unitの範囲までは壁判定が存在する。
空中にいる場合、三角形の頂点から30unitに判定がないのは地上と同じだが、空中ではその下からすぐに前後50unitの壁判定になる。そして三角形の最も低い位置より下は150unitまで壁の判定が存在する。
これは地上では壁の三角形を水平方向に前後25unitずつ伸ばしたものを真下に30unitずらした壁と、前後50unitずつ伸ばしたものを真下に60unitずらした壁の2つの判定が存在するからである。
同様に空中では三角形を前後50unitずつ伸ばしたものを下に30unitずらした壁、前後50unitずつ伸ばした壁を下に150unitずらした壁の2つの判定が存在する。
補足すると、この壁はX軸、Z軸のどちらかに垂直なものの場合で、斜めを向いている場合は前後25unit、50unitずつ伸ばすという表現は正しくはない。ただし斜面抜けに置いて壁はほとんど関係ないため、これはまた別の機会に解説する。
これだけではとても分かりにくいと思われるので、なおさんが作成した判定図を引用する。
引用元[
https://twitter.com/naosan_RTA2/status/1490198481860186113
]
この2つの壁が存在する仕様により、壁が非常に短い場合は30unitずらした壁と150unitずらした壁との間に隙間が出来てしまい、ホバー等ですり抜ける事ができてしまう。
ここホバーですり抜け可能なのは
— サポミクx守りの白盾 (@sup39x1207) 2022年3月13日
① 壁が短いので、空中にいる時壁の二つの判定(-30と-150)が離れて隙間ができてしまった(cf. 地面にいる時は-30と-60なので長さが30以上ならば隙間がない)
② 空中にいる時、天井の判定は-82(cf. 地面にいる時は-2)からなので、判定の全くない隙間ができてしまった pic.twitter.com/FwEkMBO8Es
すり抜けに必要な要素は?
ここまで床と壁の判定について説明した。ここからはそれらをすり抜けるとはどういう状態なのかについて解説していく。
サンシャインは30FPS、パラパラ漫画で例えるなら1秒間に30コマ存在するわけなので、単純に考えればこの1コマと1コマの間に壁や床の接触判定の広さ以上の距離の移動が起きればすり抜ける事になる。
ただしそれだと床は簡単にすり抜けてしまう事になる。なぜならサンシャインでは落下スピードは最高-75、ヒップドロップ時のみ-80まで出るため、厚さ30unitしかない床では薄すぎる、しかし実際はそう簡単に床をすり抜けない。
QFの項でも述べたとおり、壁と床の接触判定は毎QF行われている。なのでQF毎の移動でそれらの判定の範囲を超えればすり抜ける事ができる。速度を付けて抜ける場合、単純計算、地形の厚さの4倍より上のスピードが必要となる。
床であれば-120より上、壁の場合は前後50unit、計100unitの判定を超える必要があるため、400より上の速度が必要となる。
このゲームでは通常そのレベルの速度は出せないのだが、斜面が他の床に繋がっている場合は話が変わってくる。
斜面抜け
ここまでだいぶ前提知識の話が続いてしまったが、ようやく本題である。
斜面が別の床に繋がっている時、その判定は下のようになる。
(図はサポミクさんのツイートから引用)
床の判定はあくまで三角形のY軸方向に伸びているため、2つの三角形の交点では片方は1番低い点の30unitの厚さ、もう片方は1番高い点の108unitの厚さを持っている。
そして30unitより下は床の判定はないため、斜めの方向で侵入する際は床の厚さが非常に薄い領域が出てきてしまう。
赤のラインは30unitよりも遥かに薄く、これの4倍の速度であれば現実的な速度になるため、それを行うのが斜面抜けとなる。
斜面抜けができる条件
斜面抜けは全ての斜面でできるわけではなく、一定の条件がある。
1つ目は、斜面の傾き具合。
斜面は傾いているほど、すり抜けに最低限必要な速度が低下し、速度が付けばつくほどすり抜ける範囲が増える。
逆にある角度からはゲームの速度の仕様上すり抜ける事が不可能になる。
では斜面の傾きとすり抜ける範囲がどのように求められるか、図を用いて説明する。
①斜面が急な場合(70°)
青い線が床の三角形、水色が床の判定が発生している範囲である。
まず床の判定がなくなる最初の地点(2つの床の交点からY座標を30unit下げた地点)、ここがすり抜け後のマリオの座標になる。この場所を基準点としてマリオのXZ速度の1/4倍したものを横、Y速度を1/4倍したものを縦とした四角形を考える。
今回は分かりやすくするため、Y速度は仕様上の最高速度-75を1/4倍した18.75、XZ速度はダイブでの速度48を1/4倍した12とした四角形を作った。この四角形が意味するものは、基準点にマリオが1QFで到達できる範囲である。
図の通り、この四角形は一部床の三角形より上に飛び出ている。この飛び出た範囲がそのまますり抜けが成功する範囲となる。この範囲内であれば、1QFでXZ方向に12、Y方向へ18.75動かせば水色の領域に入る事なく基準点へ通過する。
同じ斜面でもXZ速度を下げた場合は四角形の横が短く、Y速度を下げた場合は縦が短くなるのですり抜け可能な範囲が狭まる。
②斜面が中くらいの場合(50°)
マリオの速度は①の急斜面と同じだが、見ての通り斜面が緩やかになると青線より上に飛び出た領域が少なくなってしまう。Y速度(縦線)はこれが限界のため、これ以上範囲を増やすにはXZ速度(横線)を大きくする必要がある。
③斜面が緩やかな場合(30°)
傾きが30度の場合では四角形が完全に床判定の中に埋まってしまい、すり抜ける事が不可能になる。XZ速度は空中では80が上限であるため、QF毎の移動距離も20が上限でこれ以上範囲を広げる事はできない。
以上がすり抜ける条件1つ目、斜面の傾きとなる。
条件2つ目は、斜面が下り坂や壁に繋がっていない事である。
斜面が平らな床に繋がっている場合には、元々平らな床の厚さが30unitであるため、既に出した画像(上り坂への接続)と同じ結果になるのだが、これが下り坂への接続になると結果が変わる。
下り坂に面した場合、交点はどちらの斜面も1番低い点ではないため、厚さが30unitではなくなってしまう。
この時、四角形の位置は斜面が下り坂になるにつれてどんどんと下がっていく状態と言え、凸上の地形では基本的に斜面抜けはできない。
次に斜面が壁に面した場合
前述した通り壁は前後50unitに判定があるだけでなく、150unit下にずれた位置にもう1つの壁判定が存在する。そのため斜面に近付く前に壁の判定に阻まれることになり、すり抜ける事ができない。
まとめると、斜面抜けは
①傾いているほど必要速度が小さくなり、よりすり抜けやすくなる
②斜面の傾きは充分でも、それが下り坂や壁に繋がっているとすり抜けない
これをなおさんが画像でまとめているので引用する。
スピードランへの影響
以上で斜面抜けの原理、解説は終了とし、ここからは実戦で使う事ができるのかについての話をする。
結論から言えばRTAでは位置調整がシビアすぎるので使えない。急斜面であってもY座標の猶予は10程度、XZの猶予は5程度でありセットアップでも開発しない限りは到底安定する幅ではない。
ワンシャインにおいては既に採用されており、秒単位の短縮が起きている。
SMS - Delfino Chuckster - 9.23 [WR] - YouTube
ではTASではどうかというと、もはや革命と言っても良いレベルに短縮ができる。
su氏が発見した屋根抜けに触発されてサポミク氏、なおさん氏が三角形の座標とマリオの速度を入力するだけですり抜け可能範囲を計算するツールを開発した事で他の場所でも検証が容易にできるようになった。
これによって更新できたシャインは以下の通り。
大福 on Twitter: "120TASから70F更新
found by @ykpin64
調査協力 @sup39x1207 @naosan_RTA2… "
大福 on Twitter: "GBS fruit less!
サポみくさんにすり抜けに必要な情報を見る方法を教えてもらい、なおさんに目標座標を計算してもらう事で実現しました… "
大福 on Twitter: "ハニスキTAS、Any%から59F更新… "
大福 on Twitter: "マーレ2のTASもまた壊れてしまいました
anyから101F更新で当然120も更新可能… "
大福 on Twitter: "今日は新規のすり抜けが思いつかなかったので、昨日のやつ28F更新しました… "
大福 on Twitter: "マーレ2昨日8時間くらいかけて10F更新しました… "
大福 on Twitter: "120TASでもハニスキは斜面抜けした方が速かった(編集めんどかったので音はない)… "
特にフルーツなどのオブジェクトを使ってすり抜けていた場所の多くが自力ですり抜け可能になった事で大きな短縮になっている。
残念ながら現在制作中の120枚TASは、既に作り終わったところで起きた更新はその地点まで戻って作り直す事はしない方針のため更新余地として残ってしまうが、もしこれから作るシャインで採用できそうな場所があれば使う予定だ(現状の残りシャインでは使えそうな場所はないが、他の新発見技は採用確定のものがある)。
おわりに
今回は今までの記事以上に専門的な内容だったためどれだけ伝わったかは怪しいが、実を言うと私でさえこの記事を執筆段階では完全には理解できていないものがあった(壁の判定など)。しかし今後のサンシャインTASでは間違いなく重要技となるため、何かの形でまとめておきたいと思い情報を集めながら書いた次第である。
発見者のsu氏は他にも2021年から現在にかけて様々な発見をしており、ほぼ全てがTASの記録を更新するレベルのものなので紹介したい事はたくさんあるのだが、斜面抜け以外は難解なものが多く、私も他人に上手く説明する事ができない現状である。
今回は執筆の際に一部なおさん氏に図の作成を引き受けてもらった。
また、解説の内容の大部分はサポミクさんの解析結果に基づいている。