【マリオ64】カーソル移動の仕様まとめ
マリオ64のセーブ画面などには、項目を選択するためのカーソルが存在する。
今回は、このカーソルの移動の仕様を説明した後、高速で『セーブしないでつづける』へカーソルを移動するテクニックの原理を説明する。
(本記事は以下の解説動画のまとめ記事となる。動画のほうが見やすいかもしれない。)
関連記事1: レース・サルのスターで『カーソル高速移動テクニック』を利用する方法
関連記事2: 『カーソル移動の仕様』という観点で70枚RTAを見てみよう!
テーブル: 『カーソル高速移動テクニック』のスティック入力まとめ
カーソル画面の種類
カーソルが出現する画面は4種類ある。(以降、カーソル画面と呼ぶ)
- 通常スターのセーブ画面 ([セーブして続ける][セーブしないで続ける]の画面)
- 秘密スターのセーブ画面 / レース開始など選択が必要な画面 ([はい][いいえ]の画面)
- ポーズ画面 ([続けてマリオする][コースから出る]の画面 or スコア一覧画面)
- スター選択画面 (★1~6のミッション選択)
これら4種類の画面では以下の2つの値が共通で使われていて、しかも、カーソル画面を閉じた時にこれら値が初期化されない仕様となっている。
- Index: カーソル画面での前回のスティックの状態
- Timer: カーソル画面にて、何フレーム連続でスティックが倒されているかを数えるカウンター
Indexの詳細
『Index = カーソル画面での前回のスティックの状態』
Indexには値が3つあり、それぞれ以下を指している。数値で言うと、スティックが該当方向に60以上倒されていると、Indexが変わる。
- 0: スティックニュートラル
- 1: (カーソル横移動の画面)スティック左、(カーソル縦移動の画面)スティック上
- 2: (カーソル横移動の画面)スティック右、(カーソル縦移動の画面)スティック下
で、Indexの値が変わると、そのスティックの方向にカーソルが動く仕様となっている。この仕様が全てのベースとなるので必ず覚えてほしい。
スター選択画面の例
『やみにとけるどうくつ』のスター選択画面で一例を示す。
(1) ミッション1の時、スティックを右(Index = 2)に倒した場合
Indexが0→2に変わることでカーソルが右(ミッション2)へ移動する。
(2) (1)の後すぐにスティックを左(Index = 1)に倒した場合
Indexが2→1に変わることでカーソルが左(ミッション1)へ移動する。
Timerの詳細
『Timer: カーソル画面にて、何フレーム連続でスティックが倒されているかを数えるカウンター』
Timerはスティックが任意の方向へ倒されて続けていると、最大10まで増える。そして、10以降もスティックが倒されていた場合、0に戻るのではなく8に戻り、Indexは0(ニュートラル)になる。
つまり、ずっとスティックを倒し続けていると、以下でループすることになる。
Index = X, Timer = 1, 2, 3, ….. , 10 (Xは0以外の数値)
↓
Index = 0, Timer = 8
↓
Index = X, Timer = 9
↓
Index = X, Timer = 10
↓
Index = 0, Timer = 8
↓
Index = X, Timer = 9…
ポイントは、Timerが8に戻る時、同時にIndexも0に戻るところにある。
『Index = 0, Timer = 8』の次のフレームで任意の方向にスティックが倒されていた場合、Indexは0 → 1 or 2になる。
Indexのセクションで話した通り、Indexの値が変わる = その方向へカーソルが動くということなので、スティックを倒し続けてもカーソルが動き続けるのだ。
実はこれが高速で『セーブしないで続ける』までカーソルを移動できる原理となっている。
スター選択画面の例
『やみにとけるどうくつ』のスター選択画面で一例を示す。
■ ミッション1にてスティックを右に倒し続けた場合
(1) 最初はIndexが0→2に変わることでカーソルが右へ移動する。
(2) (1)後、右に倒しっぱなしにするとTimerが1ずつ上がっていき10になる。Indexはずっと2なので、カーソルは移動しない。
(3) (2)後も右に倒しっぱなしにすると『Index = 0, Timer = 8』になる。
(4) (3)後も右に倒しっぱなしにすると、Indexが0→2に変わるため、カーソルが右へ移動する。Timerは1加算されて9となる。
(5) 以降も右を倒しっぱなしにすると、(2)~(4)をループし、最終的にミッション6(ゴロ岩)までカーソルが移動する。
やみにとけるどうくつ 100赤の例
100赤のスター選択画面はスティックを左に倒しっぱなしにすると良い。
左に倒しっぱなしにした場合、以下の値でループするので、
- Index = 0, Timer = 8
- Index = 1, Timer = 9
- Index = 1, Timer = 10
この3つのうちのどれかでステージに入ることになる。『Index = 1, Timer = 9』を例に見ていく。
他のスターと違い、100赤では、100枚スター後のセーブ画面([はい][いいえ])が存在する。
このセーブ画面は、右に倒しっぱなしにしないと最速で[いいえ]にならない。
『Index = 1, Timer = 9』で、右に倒しっぱなしにしてみたのが以下となる。
見ての通り、『Index = 1, Timer = 9』から『Index = 2, Timer = 10』へ値が変わることが分かるだろう。
つまり、Indexが1→2へ変わったことで最速で[いいえ]を選択できているのだ。
今までの話を理解できた方だと、「入場時にIndex = 0(ニュートラル)にしておけば、スティックを右に倒しっぱで最速で[いいえ]を選べるよね。スター選択画面で、左に倒しっぱにする必要無いのでは?」と思うかもしれない。
これは100枚スターだけを見ると正解だ。以下を見ると分かるが、Index = 0にしておけば、スティックを右に倒しっぱで最速で[いいえ]を選べる。
(IDX, TMRの表示が変わっていないのは無視してほしい)
では、なぜ左に倒しっぱなしが正解かというと、2枚目スター後のセーブ画面で高速でカーソルを移動できるようにするためだ。
実際に流れで見てみるとすぐ理解できると思う。
(1) 『Index = 2, Timer = 10』で100枚スターのセーブ画面を終える。
(2) 2枚目スター後のセーブ画面でスティックを下に倒しっぱなしにする。
Index = 2, Timer = 10
↓
Index = 0, Timer = 8
↓
Index = 2, Timer = 9 (ここで『セーブしておわる』になる)
(3) そのままずっと下に倒しっぱなしにすると、『セーブしないでつづける』にたどり着く。
Index = 2, Timer = 10
↓
Index = 0, Timer = 8
↓
Index = 2, Timer = 9 (ここで『セーブしてつづける』になる)
もう理解できたと思うが、100赤のスター選択画面で左に倒しておくと、Timer値が8~10のループに入り、最終的に2枚目スター後のセーブ画面でカーソルを高速移動できるようになるわけだ。
これがカーソルを高速で移動させるテクニックの原理となる。
やみにとけるどうくつからキノピオスターまでの例
この区間は少し考えてやらないといけない区間なので、順番に状態を見てみる。
やみにとけるどうくつの最終スターのスター選択画面にて左倒しっぱなし、セーブ画面にて下に倒しっぱなしにした場合、以下3パターンでセーブ画面が終わる。
- Index = 0, Timer = 8
- Index = 2, Timer = 9
- Index = 2, Timer = 10
このうち、『Index = 0, Timer = 8』を引いた場合は、キノピオスター時に右入力で『Index = 2, Timer = 9』となり、最速で[いいえ]を選択することができる。
しかし、その他2パターンを引いた場合は、右入力だと最速で[いいえ]を選択できないのだ。
例. 最終スターを『Index = 2, Timer = 9』で終え、キノピオスター時に右倒しっぱなしにした場合
Index = 2, Timer = 9
↓
Index = 2, Timer = 10
↓
Index = 0, Timer = 8
↓
Index = 2, Timer = 9 (+2フレームロス)
ということで、最終スターのセーブ画面では、理想としてはスティックをニュートラルで終えると良い。
ニュートラルで終えることで、Indexが0→2になり、最速で[いいえ]を選択できるようになる。
補足: 左倒しっぱなしがベースである理由は?
高速でカーソルを移動させるテクニックは、例外的なスターを除き、スター選択画面時に
- スティックを左に倒しっぱなしにしても
- スティックを右に倒しっぱなしにしても
どちらでも問題ない。
ただ、「基本的には左に倒しっぱなしにしたほうが良い」みたいな話を耳にする方が多いかもしれないので、一応補足しておく。
左倒しのほうが良い理由は、左倒しの場合、セーブ画面出現時にカーソルが最速で1つ下に移動するからである。
これも流れで見たほうが分かりやすい。
(1) スター選択画面で左に倒しっぱなしにすると、以下3つの値でステージに入ることになる。
- Index = 0, Timer = 8
- Index = 1, Timer = 9
- Index = 1, Timer = 10
(2) 例えば『Index = 1, Timer = 9』でスター選択した場合、普通の個別スターを取り終えた後のセーブ画面は『Index = 1, Timer = 9』で迎えることになる。
(3) (2)の時に下(Index = 2)に倒しっぱなしにした場合、Indexが1→2になり、まずは最速で1つ下にカーソルが移動する。
(IDX, TMRの表示が変わっていないのは無視してほしい)
(4) 以降も下に倒し続けた場合、Timer値8~10のループで『セーブしないでつづける』に到達する。
もう分かったと思うが、左に倒した場合、(1)で挙げた3パターンどれにおいてもIndexの値が変わるので、まずは最速で1つ下にカーソルが移動してくれるのだ。
一方、右に倒した場合は、
- Index = 0, Timer = 8
- Index = 2, Timer = 9
- Index = 2, Timer = 10
のどれかでスター選択することになり、『Index = 0, Timer = 8』を引かないとIndexの値が変わらないため、最速で1つ下にカーソルが移動してくれない。
この違いがあるため、カーソルをより速く移動させやすい左倒しがベースとなっているのである。
むすび
今回は『やみにとけるどうくつ』を例に話したが、別のステージなどでも同様の仕様となっている。なので、別ステージで同じように状態を考えてみると理解が深まるかもしれない。
混乱しやすいカーソル画面として、『レース系の開始のカーソル画面、TTMウッキィのカーソル画面』があるので、それは別途まとめて紹介する予定だ。
ぜひこの仕様を理解して、カーソルを高速で移動させるテクニックを駆使してみてほしい。