見出し画像

スーパーマリオブラザーズのループ面における判定の検証

 どーもこんにちは、たまちゃんです。
 ゲーム好きの如何を問わず幅広く知られているマリオシリーズ。そんなマリオを一躍有名にしたのは1985年発売のファミリーコンピュータ用ソフト「スーパーマリオブラザース」、いわゆる「初代マリオ」と呼ばれている奴です。

 

おなじみのタイトル画面
https://www.nintendo.co.jp/software/smb1/index.html

 この作品から今でも続く横スクロールマリオが始まっていきます。その横スクロールマリオでしばしば出てくるのが”ループ面”と呼ばれるステージです。簡単に言ってしまえば、分岐で正しい道を通らなかったら分岐前まで戻されてしまうというものです。初代マリオでは4-4 7-4がこれに該当します。  
 今回扱う4-4は以下のようなステージ。

ステージ4-4
https://izuito.net/game/fc-s-mario/  を改変

 黄色で囲っている部分が今回話題になっているループ箇所です。分岐しており、同じ道へとつながっているように見えますが、左のループでは、下の道を選ぶとまた、分岐前に戻される仕様となっています。右のループは最後に壁があり行き止まりのように見えますが、下のルート以外も右に通じており、下のルート以外を通るとループします。

 とゆうわけで、これをプレイした人や多くの攻略サイトでは以下のように言います。「ループ面では正しい道を選ばないと戻されちゃうよ。」
 
 これ実は100%正しいと言えないのです。

 以下の動画の1:01:26あたりを参照してみてください。

 これはniconicoゲーム実況者界では知らぬものはいない"幕末志士"さんの動画です。この配信では、「後ろを向いた状態でステージをクリアしていく」を縛りとして初代マリオをプレイしています。ここで4-4をクリアする際、正しい道を選んでいるのにループが発生してしまう、という現象が起こっています。

 ではなぜこれが起こってしまうのか?配信中のユーザーコメントでも触れられていましたが、通常のプレイと比較して考えられる要因は2つ。
①ジャンプし過ぎでループクリア判定踏めてない
②後ろ向きだとループクリア判定でない
の二つですね。

 ②だとしたらこの縛りプレイを任天堂がピンポイントで封じてきたことになり面白すぎますが、とりあえず①を検証していきます。その結果が以下の動画。(gifで張っております)


 正しいルートでもループしていますね。
 つーわけで、100%正しいのは「ループ面では正しい道を選び、ジャンプしないようにして進まないと戻されちゃうよ。」というわけですね。めでたしめでたし。


 で、終わらないのが今回。先ほどでた後ろ向きマリオに話が戻りますが、これは、ジャンプしている間はマリオの向く方向は変わらないがその方向に進むことができるという性質を使った縛りプレイです。つまり、ジャンプすることが必要不可欠なんですよね。じゃあこの縛りプレイは無理なのか?結局その配信では、分岐した先は一定距離前向きで進んで、進んだ分戻って、行った分だけ後ろ向きで進む、という手段で解決しています。ステージの最初から最後まで後ろ向きで踏破はしているので、縛りプレイ内でうまくやってはいますが、如何せんだるいでしょうその作業は。もし、ループ判定の場所がわかればそこをジャンプで飛び越さないようにするだけでいいので、その箇所以外は通常通り後ろマリオでいいわけです。とゆうわけでその箇所を調べます。尚、使用するのはswitch onlineの加入者特典で遊べるバージョンです。

 今回は4-4の最初のループ箇所の検証をします。さっきの画像でいうこの部分。

ステージ4-4
https://izuito.net/game/fc-s-mario/  を改変

 先述の通り上の道が正解ルートです。そしてこの検証は、「ループする判定になったら、2本目のファイアーバーが消える。」という仕様が役に立ちます。先ほどのジャンプしながら走っている動画を見てもらってもそれが確認できます。
 というわけで、ファイアーバーが消える瞬間のマリオの位置からそれを割り出せると考え、検証していきます。そしてできた一番いい観測が以下の動画(これもgifです)。
 この動画内のジャンプまでの道のりは地に足をつけて進んでいます。とゆうことは、このジャンプでマリオが空中にいた区間が、ループ判定に使われているということになりますね。

ちなみに0.25倍再生です

これでもわかりづらいので、2フレームごと動画を進めていき、ファイアーバーが消える直前と直後をとらえた画像が以下です。
黄色い線はブロックを見やすくした線、赤い線はファイアバーから右に2個目のブロックの中心線です。

消える前
消えた後

 2つを比べるとファイアバーが消える前後でマリオの中心がファイアバーから右に2個目のブロックの中心に達しています。

描写上ではなく、システム上のマリオの位置が正確にはわからないため、だいたい、にはなってしまいますが、2本目のファイアバーから右に2個目のブロックの列の一番上のブロックが、ループ判定に関係する位置であると結論付けて良いでしょう。

 ここからは考察。
 一つ目は、なぜこのような仕様にしているのだろうかということ。道間違えなければいいんだから正解の道通ったら絶対ループフラグが立たないようにすればいいのですよね。まあこの手の疑問は"容量削減のため"ってゆうのが大体のオチな気がします。
 二つ目は、ほんとに「ループする判定を偽にする座標にマリオがくる」ことがループしない条件なのだろうかということ。もしかしたら「ループする判定を真にする座標にマリオをいかせない」ことが条件かもしれない。具体的に言うと、プログラム的にはこのループをするかしないかは1つの変数で管理しているはず。(アセンブリで作られているらしいので、正確には変数ではないが…)ここでの疑問は、このループフラグの初期値が真なのか偽なのかというとこ。偽であれば、どこかにループフラグを折る場所がある、ということなので今回の結論が正しそうに思えるが、これが真であれば、そのような場所は無く、逆にループフラグを立たせる場所が存在することになる。
 内部はわからんので真実はわからないが、結論づけた場所にマリオを立たせた状態でジャンプしてもループせず進めたので、フラグを偽にする箇所がある仕様である可能性は低いんじゃないかなぁと思います。

 とゆーわけでこの記事は以上です。ちなみに幕末志士さんはスーパーマリオブラザーズ2でも同じ縛りをやっており、ループ面では同じようになっています。ループが出てきた他の作品は2020-2021の期間限定で遊べた「マリオ35」くらいですかね。期間限定だし、仮にできたとしても他プレイヤーからの妨害があって検証ができないのが残念です。他の作品でもループ面が存在するなら調べてみたいですね。

 とゆーわけで、お相手はたまちゃんでした。シーユーアゲイン!ばいばい!


いいなと思ったら応援しよう!