K3の住民

最近はレア社のゲームについては書いていませんが、一応レア社のゲームが一番好きな人です。『雪圀』で"圀"は"国"とほぼ同義ですが、国ではありませんって当たり前か(笑)。

【N64ゼルダ】N64ゼルダにおける壁の概念

皆さん、GWは満喫しましたでしょうか。雪圀です。
今回はゴロンミサイルによるクリッピング「Goron Push Clip」の原理を発見しました
が、これは壁の概念を分かっていないとダメなのでN64ゼルダにおける壁の概念を
先ずは説明していこうと思います。


先ず、N64ゼルダの壁は基本的にはシステムの派生元であるスーパーマリオ64(以降
マリオ64)とあまり変わりません。
しかし、ムジュラにおける壁にはマリオ64、時オカと決定的に違う部分があります。

先ず、床と壁は基本的には同じものであると言って良いです。強いて違うとすれば、
傾きが違うぐらいでしょうか。マリオ64N64ゼルダでは傾きが垂直であればそれは
床では無く壁と判定されます。因みに床には床、坂、急斜の坂の3種類がありますが
それは今は解説しません。また、床、壁の他に天井もありますがそちらも今は解説
しません。

当たり判定

床は少しだけ高度がある場合階段となります。この階段を以下の図のように2つ並べて
みます。

f:id:ryoryoau24:20180509214910p:plain
(Top View)

その間をくぐってみます。すると、まぁ階段なのでこのようになることは分かるで
しょう。

f:id:ryoryoau24:20180509214943p:plain
(Top View)

ここまでは「なんだ、普通じゃん」と思われるかもしれません。しかし、マリオ64
N64ゼルダではこのようになります。

f:id:ryoryoau24:20180509202448p:plain
(Front View)

「は?なんで?」と思われたでしょう。実はマリオ64N64ゼルダプレイヤー
そのものの当たり判定は非常に小さいのです。プレイヤーのモデルは数十・・・
いや、100pxぐらいは余裕でありそうですがプレイヤーそのものはそれに対し数px程
しかありません。

壁の押し出される方向

マリオ64N64ゼルダ共通で壁には「押し出される」為の当たり判定が存在します。
これを「ヒットボックス」と言います。
元々は格ゲーに使われるような言葉なのですが壁の押し戻しの解説をする際にも
使われたりします。
基本的なヒットボックスを可視化して見てみます。

f:id:ryoryoau24:20180509212801p:plain
ヒットボックスの一例

基本的なヒットボックスはこのようになっています。この辺りはマリオ64でも
N64ゼルダでも共通です。
ではヒットボックスの基本動作を見てみましょう。

f:id:ryoryoau24:20180509215641p:plain
(Top View)

星マークがプレイヤーそのものの座標とします。ここから以下の図の位置まで移動
したとします。

f:id:ryoryoau24:20180509220510p:plain
(Top View)

すると、ヒットボックスの範囲に行っていることによりヒットボックスが無い範囲
まで移動します。

f:id:ryoryoau24:20180509221245p:plain
(Top View)

以上から、プレイヤーは以下のように移動することが分かります。

f:id:ryoryoau24:20180509222723p:plain
(Top View)

マリオ64ではBLJ(ケツワープのことである)をすれば簡単に壁を抜けられる為
壁のヒットボックスの作りが甘いと言えますが、時オカではそれに相当するバグは
残念ながらありません。また、ヒットボックスが少しだけ改善されています。
ではN64ゼルダではどうやって壁抜けを起こすのでしょうか?

N64ゼルダの壁抜け方法

N64ゼルダでの壁抜けは基本的に処理を追いつかなくさせる、ヒットボックスによる
押し出しを利用することが多いです。
例えばジャンプ斬りするだけで壁を抜けられる「Jump Slash Clip」は基本的に以下の図
のような方法で壁抜けをしています。

f:id:ryoryoau24:20180511220818p:plain
(Top View)

上方向以外のヒットボックスは全て上方向で無いとします。このとき、右上の方向に
ジャンプ斬りをします。

f:id:ryoryoau24:20180511221724p:plain
(Top View)

すると、上方向に押し出されるヒットボックスに当たります。

f:id:ryoryoau24:20180511222333p:plain
(Top View)

そして(優先順位によりますが)上方向に押し出され、見事クリッピングが出来ると
いうわけです。

f:id:ryoryoau24:20180511222942p:plain
(Top View)

この「Jump Slash Clip」はこの他にもジャンプ斬りでの坂着地の座標ズレによる
ものもあります。そうです、剣さえあれば最初からゾーラの川に行けるあの有名な
バグですね(ナビィダイブでは無いです)。
これは坂で着地すると少しだけ瞬間移動したようになることを利用しており、ヒット
ボックスに当たることなく座標移動をした為に起こっています。この座標ずらしは
ある意味瞬間的にBLJの最低限壁抜けをする速度を超えていると言えます。

ムジュラの仮面(3D)」の壁について

ムジュラ(3D)では、ヒットボックスが更に改善されておりゴロンミサイルの速度
でも壁抜け出来なくなっているうえに使うプレイヤーによって(特にリンクとゴロン
リンクの差が顕著)ヒットボックスに押し出される量が変化するようになりました。

しかし、変わったのはそれぐらいで、後はそこまで変わりありません。

「Goron Push Clip」

最後に「Goron Push Clip」の原理は何なのかということについて書きます。
「Goron Push Clip」ではクリッピングする前にまるで押しつぶされているかのように
ゴロンリンクが潰れるのですが、実はこのときに着地すると、座標ズレが起こりそれ
によりクリッピングをしていることが判明しました。
どういうことなのかを図で解説したいと思います。

f:id:ryoryoau24:20180512102747p:plain
(Top View)

以下のような壁があったとします。壁のヒットボックスは全て押し出すものと
します。
ゴロンミサイルをし、「Goron Push Clip」発生前の状態にします。

f:id:ryoryoau24:20180512103113p:plain
(Top View)

そして着地します。すると前方向に座標ズレが発生します。

f:id:ryoryoau24:20180512103550p:plain
(Top View)

座標ズレを表す為に敢えて矢印を書いていません。分かりづらかったらすいません。
このように座標ズレが発生しクリッピングが発生していたのです。

最後に書きたいこと

ところで「Goron Push Clip」ですが、実は最近制限RTAで妙に活躍してる気がする
「Ground Clip」の原理も「Goron Push Clip」と同じなのかなと推測しています。
だからいつか「Goron Push Clip」は「Ground Clip」へと名称が変更されるかも
しれません。


以上です。実は検証しすぎて記事完成に3,4日ぐらいかけましたがようやく完成する
ことが出来ました。正直疲れた・・・。
まだ検証不足なところもあるかと思いますが、前の誤ツイート事件のようなことも
ありますので温かい目で見てくれるとありがたいです。

今回はこれくらいにしときます。