まったりFuropenブログ

ではごゆっくり

スーパーマリオブラザーズ3 コクッパ行動パターンについて(その2)

前回記事の続きです。


ボスのフレームごとの行動パターンを貼っておきます。
これらは、踏む前の最初のパターンです。





※W6のコクッパである玉乗りレミーは行動パターンがおそらく固定ですので省きます

コクッパの移動については全員共通しています。
移動は8フレームごとにマリオに向かうよう移動するようです。
ボス戦開始からこの移動命令が来るまでコクッパは移動しません。

空中に浮いているときは、ジャンプも魔法もできないみたいです。


 W1のコクッパが1フレーム目でジャンプしますが
 ちょうどこのフレームでコクッパが段差から落下中なら
 このジャンプは実行されず、落下終了後である数フレーム後の魔法を使います。


 W4のコクッパと5フレーム目でボス戦開始の場合、
 コクッパはジャンプをしますが、移動命令がまだ来てないので
 垂直ジャンプをしてしまうことになります。



コクッパのファイア撃破は、この表があったところでほとんど役に立ちません。
今回のプレイはどのフレームだったのか確認するには役に立つと思います。

結局は各自で起こりうるボス戦のパターン
(マリオが何マス移動した時、ブロスが何マス移動した時)を確認して、

その撃破方法をすべて作り出すしかないと思います。


スーパーマリオブラザーズ3 コクッパ行動パターンについて(その1)

2020/04/19 ブロス移動フレーム一覧にオルゴールの場合を追記


コクッパのファイア撃破をする時に考える内容です。
コクッパを踏みに行くなら読まなくてもいいかもです。

また、これらの内容はNES版で確認したものです。
FC版も同じだと思われます。
SFCマリコレ版は未確認ですのでご注意ください。


コクッパの行動パターンはランダムではありません。
決められたフレームで必ずジャンプをしたり魔法をしたりします。
そしてその行動パターンは256フレーム(4.27秒)で1周ループします。

この行動パターンを把握することで、
コクッパ戦の安定化、さらにはコクッパのファイア撃破が非常に楽になります。

ここで、コクッパ戦が始まる時、今が何フレーム目に当たるのか把握するのが大事です。
このフレームは、コクッパ戦であるお城に入る前のステージをクリアして、
マップが表示されたらフレームが0から動きだします。




前のステージをクリアして・・・



マップが表示されたらコクッパの行動を決めるフレームが0から動き出し始める

1 ここからステージのクリア演出が入り
2 ブロスが何マスか移動して
3 マップでマリオを何マスか操作して城に入り
4 城でキノピオの会話を聞き
5 飛行船で土管に入りボス戦が始まるまで

この合計フレームがコクッパ戦が始まるフレームになります。


1の場合
 通常のステージクリア  66フレーム
 ブロスクリア      82フレーム
 ピラミッドクリア    78フレーム
 土管クリア       57フレーム
 砦クリア        129フレーム
 
2の場合
 ブロス0マス移動    0フレーム
 ブロス1マス移動    30フレーム
 ブロス2マス移動    62フレーム
 ブロス3マス移動    94フレーム
 ブロス4マス移動    126フレーム
 <4/19追記>
 ブロスがオルゴールで眠っている場合  30フレーム

3の場合
 マリオ1マス最速移動  17フレーム
 W5の場合ジュゲムの雲を使う時間

4の場合
 キノピオ会話後のメッセージ送りのタイミング

5の場合
 飛行船でフラワーを取る時間  30フレーム
 スクロール右端の見えない壁にめり込んで土管に入るかどうか


これだけボス戦のパターンがずれる要素があります。
ただブロスの移動やマリオの移動数など同じ条件なら誤差はだいぶ減らせます。
(筆者の場合、土管めり込みINをなしで最速と比べおよそ8~12フレーム遅れ)
ここまで誤差を減らせばコクッパのパターンはあまり変わらずほぼ固定でき、
ファイア撃破が安定することになります。

具体的なフレーム数のズレを書きましたが、基本的には
マリオの移動数、ブロスの移動数のパターンを複数押さえて練習することになると思います。



コクッパ行動パターンについて(その2)にてボスのパターンを貼っておきます。


スーパーマリオブラザーズ3 スクロール右端めり込みについて

飛行船の最後の土管に入る時、キーを右下に入れれば土管に最速に入れます。
ところが土管に入った時に見える景色がちょっと違うことがあります。






これらの違いの理由は、見た目の通り土管に入るのが数フレーム早いためです。

スクロール面を遊ぶと右端に1ブロック分の見えない壁があることに気づくと思います。
実はこの見えない壁にめり込むことができます。
この見えない壁にめり込むことで、数フレーム土管に早く入ることができるようになります。

壁にめり込むことについては、壁抜けの時と同じです。
ただし、何故か壁の外まで押し出され続けるのではなく、1回のみ1px戻されるようです。

例題
 速度40spx、見えない壁との距離が0~7spxのとき
 1フレーム後マリオは3pxめり込むことが分かります。
 壁にめり込むことで速度が0spxになり、壁の外側に1px押し戻され、
 合計2px壁にめり込んだことになります。
 
 ここでさらに1フレーム後、普通の壁なら壁の外側にまた1px押し戻されますが
 この見えない壁は1pxしか押し戻されず、結果2pxめり込んだ位置を維持し続けます。


めり込み量はマリオの速度が速ければよりめり込む可能性があります。
 ダッシュ無し 最大速度24spx めり込み量:0~1px
 ダッシュ   最大速度40spx めり込み量:0~2px
 Pダッシュ  最大速度56spx めり込み量:0~3px

W4を除く飛行船のスクロールは2フレームで1px動くので
めり込み量が0pxと3pxで最大6フレーム速く土管に入れることになります。

W4ならスクロールは4フレームで1px動くので
めり込み量が0pxと3pxで最大12フレーム速く土管に入れることになります。


壁にめり込むにはマリオの位置(px,spx)次第なので、
深くめり込んだらラッキーくらいで考えたほうがいいです。

逆にめり込み量を0pxにしたければ速度を16spx以下にして壁に当たればOKです。
(速度16spx以下を保って壁に沿って歩くってかなり難しいとは思う・・・)




【オマケ】
5-6(パタメットのスクロール面)の最後の土管に入る時、
もしかしたら死んだ経験がある人がいるかもしれません。



「あ、ありえん・・・」

この死亡原因は分かりませんが、
その死亡条件は、見えない壁に2pxめり込んでいた時に確定で死亡するようです。
(反対に1px以下のめり込みでは死ぬことはなかった)
つまりダッシュ無しで見えない壁に当たりにいけば死ぬことは絶対ないでしょう。


スーパーマリオブラザーズ3 壁抜けについて(立ち抜け編)

7-1の壁抜け等に使われる立って壁を抜けるやり方について述べます。
ただ速度を出してジャンプするだけなので操作が簡単なのが魅力ですね。


壁抜けには、足場となるブロックに乗りたいので、
マリオが天井に大きくめり込まないといけません。
ブロックの角は天井当たり判定がなく深くめり込むことができるため、
7-1のような壁の形状では、壁抜けができることになります。



これではめり込み高さが足りず、マリオの足がブロックの高さに届かない



マリオが半分くらいめり込めばOK

これはジャンプタイミングが早くても遅くてもNGで
(早いと壁の左に押し出され、遅いとめり込み高さが足りない)
そのタイミングは1フレームのみになり、そこが難点です。
しゃがみジャンプ抜けは1フレームではない

壁との適切な距離かつ適切なフレームでジャンプをしたら壁抜けが成功します。





これで終わりのはずでしたが、どうやら例外があるようです。
下図のように、より深くめり込んで壁を抜けるパターンもあります。



深くめり込んだとき、特定の座標でマリオがスライドされるようです。
(この仕様を筆者は現在全く理解できておりません)
特定座標で左に押し戻される場合や、右に押し出される場合があるようです。

押し戻される場合は速度が0になって反対方向に-1pxスライドされますが
押し出される場合は速度は変わらず、進行方向に+1pxスライドされます。
壁にめり込んだのにやけに手前で止まるのは、この仕様のせいです。

この謎の仕様のおかげで1pxスライドするので
壁との距離が16spx~23spxのとき、壁抜けの条件を満たすことができます。

ただしこの場合、高さ方向のspxが重要になります。
 高さ方向のspx=0~5 : 壁の左側に押し出される
 高さ方向のspx=6~15 : 壁抜けが成功する。 

この値の調整についてはステージ内でも可能ですが、調整に時間がかかるため、
壁抜け試行回数を増やしたほうがよいと思います。



まとめ
 立って壁抜けする場合は
 壁との距離が 0~7spx または 16~23spx(条件あり)のとき
 適切なフレームでジャンプすれば壁抜け可能


スーパーマリオブラザーズ3 壁抜けについて(ブロック乗り判定編)

この記事ではブロックに乗るということついてのお話をします。
壁抜けの原理的な話です、知る必要はないです。


普段何気なくジャンプをして地面に着地しています。
実は着地するとき地面にめり込んで落下速度が0になり、上に押し戻されるようです。

これは深さ4px分までなら上に押し戻すようで、ブロックに乗れたことになります。
反対に5px以上の深さならブロックに乗れていないと判定されます

(最大落下速度は4pxなので、横からぶつかった時の判定用ですね)
また、落下時のみ乗れて、上昇中には乗れません

従って、ブロック上面から深さ0px~4pxのときブロックに乗ったという判定になります




せっかく、上図のように進行方向に3pxめり込んでも、高さが合わなければ(2px高い)
ブロックに乗っていないことになり、押し戻されて壁抜けが実現できません。



成功例、高さが合っている



ブロックに乗っているのでしゃがみが解除され、マリオは立ち、
頭がブロックと重なるため、マリオは右にスライドしていきます。
(下キーを押しているとマリオが立たないため押し戻されます)



お気づきの人もいるかもしれませんが、
最小ジャンプなどジャンプ高さ速度を調整することで微調整が出来たりします。
微調整をした結果、悪くなるパターンもあるので注意も必要です。


スーパーマリオブラザーズ3 ダッシュ速度仕様について

この記事ではダッシュ速度の仕様についてのお話をします。
壁抜けについてセットアップを考えている方には必要な内容になります。


マリオの速度は原則、進行方向キーを押すことで毎フレーム速度が1spx加速されます。
しかし、40フレーム後に速度40spxになるかというと絶対になりません。
速度加速には奇妙なルールがあります。

速度加速には、速度が加速しないフレームというものが存在します。
このフレームは各々の面開始から固定されたフレームに存在しているようです。
具体的には、面開始から7フレーム目と16フレーム目に速度が加速されず、
これは16フレームごとに繰り返しループしていくようです。

例えば面開始から、右キーとダッシュボタンを押したらこのように速度が加速されます。
 1,2,3,4,5,6,6,7,8,9,10,11,12,13,14,14,15,16,17,18,19,20,20,21,22,
 23,24,25,26,27,28,28,29,30,31,32,33,34,34,35,36,37,38,39,40
速度40spxに到達した時に、合計で922spxマリオが進んでいることが分かります。

では面開始から1フレーム待って、右キーとダッシュを押したらどうなるでしょうか。
 1,2,3,4,5,5,6,7,8,9,10,11,12,13,13,14,15,16,17,18,19,19,20,21,22,
 23,24,25,26,27,27,28,29,30,31,32,33,33,34,35,36,37,38,39,40
速度40spxに到達した時、合計で917spxマリオが進んだことが分かります。

このように同じ位置でも速度を加速させる開始フレームが違うならば
結果的にマリオの位置が大幅に変わってしまうことになります。

これらの速度加速のフレームはそれぞれの面の開始から固定されたフレームにあるので
面の開始からブレーキせずにいけばマリオの動きは固定されます。



【オマケ】

・減速について
進行方向キーを離したときに、マリオの速度は0に戻るよう毎フレーム1spx減速されます。
この減速については、減速しないフレームというのは存在しません。
減速も加速と同じく、加速しないフレームは減速しないフレームでもあるようです。

何か全然違う気がします、調査中

・ジャンプ中の減速について(しっぽマリオ以外)
マリオがジャンプして空中にいる間は、方向キーを離しても減速しません。

・ジャンプ中の減速について(しっぽマリオの場合)
しっぽマリオの場合ジャンプをすると速度が遅くなったと感じると思います。
どうやら、ジャンプをしているとき毎フレーム1spx速度が減速する仕様があるようです。
(この仕様は減速しないフレームには当たらないようです)
ただし進行方向キーを押していれば毎フレーム1spx加速していくので、
速度が加速しないフレームが存在するため、その結果緩やかに速度が減速していきます。

これも違うようです、調査放棄中

 

 

スーパーマリオブラザーズ3 壁抜けについて(原理編)


スーパーマリオブラザーズ3の壁抜けの原理について、調査結果を記しておきます。
これはFC版、NES版の調査です、マリコレ版は調べていませんが同じだと思われます。





6-10や7-2の場合のように、マリオが足場に立っているときに、
その頭にブロックが重なっているとき右にスライド
していきます。

これが壁抜けの原理となります。





7-1の壁抜けの場合、上図で見て右下のブロックに乗ることで、
マリオが足場に立っていることになり、頭がブロックと重なるため右にスライドします。

右下のブロックに乗るためには、マリオを壁に少しめり込ませることになります
ここでマリオの速度が重要になります。

マリオの速度は以下の通りです。
 ・ダッシュボタンを押してない時の最大速度:24サブピクセル/フレーム
 ・ダッシュボタンを押している時の最大速度:40サブピクセル/フレーム
 ・ダッシュ状態の時の最大速度: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の確率で壁抜けの条件が満たされます。