対訳メリークリスマス!前記録から1367フレーム、およそ23秒の更新です。ところどころ私の主観が入っています。v17最速を目指すプログラムエラーを悪用する時間短縮のための死亡を許すコメントこの動画を製作するにあたって数ヶ月を費やすこととなりましたが、当初想定していたよりもはるかに多くの更新点が見つかりました。この動画を最大限に楽しみたい場合には、先に動画を見てから続きを読むことをお勧めします。よって発見されました。このバグは「ヨッシーがブルを食べるとパワーアップとして認識される」という(誤って設定されたであろう)仕様を利用したものです。本来食べることのできないブルを口寄せバグ等によって食べると、マリオのパワーアップ状態が変化したり、本来想定されていないストックアイテムが得られたりします。この動画では、ファイアマリオで手拍子ブルを食べることで、ゴール玉(ラムネ海溝の沈没船のゴール)をストックしています。各コースのコメント括弧の中の数字は前記録との差を示しています。ルート変更が著しいため、ヨースター島コース1からイギーの城まではあまり参考になりません。アイディアをもとにした二つの変更点があります。ひとつは、ゴール口寄せ直前での挙動の最適化、もうひとつは、コーナーブースト等を可能にするために数サブピクセルを犠牲にするというものです。よると「コーナーブーストを2回追加することはできても、ゴールを1フレーム早く出現させるには1サブピクセルだけ足りない」とのことだったので、更に数サブピクセルの犠牲を払い、土管での角抜けを1回追加し、1フレームの短縮につなげました。ヨッシーが居ればこのタイプの角抜けが出来るというのは、この時点ではまだ誰も知らなかったようです(もちろん私も)。妥協のない最適化によって、ブロック増殖部分が大幅に短縮されました。今回はヨースター島コース1でヨッシーを使うため、ここで捨てずに持ち越します。(-2559)アイテム入れ替えバグ(または口寄せ)については前記録のコメントを参照してください。この面での目的は、ファイアマリオになり、ゴール手前に配置されている手拍子ブルをヨッシーで食べることです。ブルを食べることはできないので口寄せバグを使うのですが、これを実行するための作戦として、以下の二つが考えられます。ひとつ目は、スプライトコインを用いた口寄せを使う方法です。コースなかほどに設置されている赤甲羅を使い、ブル手前のPパックンをスプライトコインに変えます。そのコインを舌で捕らえ、舌の上のあるうちにコインを取ります。すると舌の上にコインと同じスプライトインデックスを持った無が一時的に生成され、そのインデックスにブルが出現するようにすると、ブルが舌の上にワープして口寄せ成功です。この方法はRスクロールを必要としない分、後述するふたつ目の方法よりもずいぶんと速いように思えますが、手拍子ブルとPパックンの配置が悪く、死ぬために大きく時間をロスしてしまいます。次にふたつ目の方法です。口寄せそのものに使われるテクニックは、ストックアイテムの二個食いです。これはヨッシーが舌でストックアイテムを捕らえるのと同時に、体当たりでストックアイテムを取ってしまうというもので、この方法でも上と同様にして舌の上に一時的に無が生成されます。ここで生成される無のスプライトインデックスは、ストックアイテムと同じものです。スプライトのインデックスは0番から11番までの12個あり、ストックアイテムやブロックから出るアイテムは、空いているインデックスのうちで一番大きいインデックスに出現します。これに対してヨースター島コース1では、ブルや通常の敵は0番から7番のインデックスにしか出現することができないので、口寄せを行うためにはストックを7番以下に出現させなければなりません。ストックから出現するキノコやファイアフラワーは画面外に出ても消えないという性質を持っていて、したがってストックを4つ落とすことで、インデックス8番から11番を埋める事ができます。このためにはストックが合計で5つ必要になる計算ですが、この面に配置されているパワーアップアイテムは羽つきブロックの中のファイアフラワー、草陰のキノコ、コース終盤にあるはてなブロックの中のファイアフラワー、の3つです。草陰のキノコのみ、ブロックから出るアイテムではないため、二個食いで増殖することができますが、それでもまだストックは4つ分しかありません。ここで赤甲羅の上のブロックにある1UPキノコを利用します。1UPをそのまま取ってもストックを増やすことはできませんが、ストックを二個食い増殖するのに使うことができます。この動画では、この地点までに既に2つストックを落としているので、10番と11番のインデックスが埋まっている状態です。この状態では、ストックは9番に出現することになります。そのストックを二個食いすると、ストックにキノコが得られ、舌の上にはインデックス9番の無が生成されます。この無をそのまま食べるとキノコとして扱われるのですが、ストックに入った1個目のキノコを落としてからでなければ増殖に成功したことになりません。このストックのキノコはインデックス9番に落ちてくるので、口寄せによって舌の上にワープしてしまいます。そこで、1UPキノコをあらかじめ9番に出現させ、この1UPキノコが消える直前にストックキノコを出すと、このキノコは8番に現れます。1UPキノコが消えて9番が空いたあとに、キノコを二個食いしてストックを落とすと、無が8番、ストックが9番となって口寄せは起こらず、無を食べることができ、結果としてストックを増殖したことになります。この手法は最後のファイアフラワーでも使われています。最適化案により、ふたつ目の方法が8フレーム速くなると結論付けられました。彼のアイディアは草陰のキノコ以降慣性移動するというものです。ヨースター島コース1でゴールすると、ゴール後の長いデモが流れ、マップ画面ではマリオがかっぱ山黄色スイッチまで歩いていってしまうため、大きく時間をロスしてしまいます。これを回避するために、ゴール玉をストックしたら即座に角抜けで死亡しています。死亡によってヨッシーを失ってしまうので、ヨッシーが必要になるヨースター島コース3を先にクリアし、そのあとヨースター島コース1に戻るというルートを取っています。(-2559)変更点はありません。(1287)ヨースター島コース1で取得したゴール玉を使いゴールします。強制スクロール部分と、卵救出&城破壊デモをスキップすることができ、大きな更新につながりました。(1287)変更点はありません。(1290)最初の土管に入る直前に、1/1を一瞬だけ解除して1フレームの短縮。スプライトの当たり判定は2フレームに一度しか行われないため、先の1フレームの更新により赤パタパタを1フレーム分近くで叩くことができ、更に1フレーム短縮。鍵穴エフェクトのラグを軽減するため、グースカを左側にはじきました。これによる数ピクセルのロスがありますが、マントアタックの周期の関係で、そのロスがなくとも鍵ブロックを叩くことのできるタイミングは同じため、結果としてロスはありません。前記録では、ラグを軽減するために鍵の挿入を1フレーム遅らせていましたが、今回はそれを回避して1フレームの短縮。鍵穴エフェクトのラグを1フレーム軽減、ゴール後のマップ読み込みラグで1フレームロス。マリオの呼吸による気泡は拡張スプライトになっていて、これももちろんラグの増加の一因となりえます。この気泡は128フレーム周期で発生し、また真ん中の64フレーム目で特定のキー入力が行われていると、追加で気泡が発生します。周期の真ん中の気泡は入力を避けることで、発生しないようにできるということです。今回の動画では気泡調整でラグを軽減することはできませんでしたが、スコアが100050の場合には、気泡を一つ減らすことでラグを完全になくして2フレーム短縮することができます。(1289)スコア調整のためにクルクルブロックを壊して50点を取得しました。ロスなく50点を取れるのはここだけです。アトミックテレサを倒したあとのマップ読み込みで1フレームロスしています。(1292)スターワープのフレームルールを破って3フレーム更新しました。スターワープには以下のメモリアドレスが関係しています。特定の値以下になったときに始まります。ワープ速度はゲーム内フレームカウンタに依存して1から4まで増加します。正確には、カウンタの値を8で割った余りが1のとき、ワープ速度が増加します。スターワープは8フレーム周期のフレームルールを持っていることになります。一方でスターワープは少し変わった挙動をするので、周期のちょうど半分、4フレームだけ短縮した場合、ワープ後の更新量は1フレームあるいは7フレームとなります。1フレームの場合は更に4フレーム短縮すると残りの7フレームが更新されます。(1296)前記録ではマリオの押し出し判定のフレームルールが合わず、このコースに入るのを1フレーム遅らせていましたが、今回はそれを回避することができました。新最適化案により、4フレーム短縮しています。クリア後のマップ読み込みで1フレームロスしています。注意として、今回は適用していませんが、鍵の挿入を2フレーム遅らせるとラグが2フレーム減ります。(1296)変更点はありません。ここも鍵の挿入を4フレーム遅らせることでラグを2フレーム減らすことができます。(1296)変更点はありません。(1301)コース内に入るときのマップ読み込みで1フレーム更新。よるリフト加速のアイディアに、改良型角抜けを追加することで1フレーム短縮。リフト加速のみや、通常の角抜けを追加するだけでは、次の角抜けにつながらず、短縮には至りませんでした。改良型角抜けとは、角抜け中に数サブピクセル犠牲にすることで、ブースト回数を増やし、結果的に通常の角抜けよりも数サブピクセル分のアドバンテージを得るための方法です。鍵の挿し込みを最適化して2フレーム短縮し、鍵穴エフェクトのラグも1フレーム軽減しています。ここでも鍵の挿入を3フレーム遅らせることで、ラグを2フレーム軽減することができます。(1302)スターワープのフレームルールの周期をちょうど破ったため、フレームルールによるロスは一切ありません(つまり1フレームでも遅れるとフレームルールで7フレーム遅くなります)。ネイティブスターコース4のリフト加速による更新が見つかるまでは、フレームルールを破るには1フレームだけ足りませんでした。そこで、鍵の挿入をネイティブスターコース2で4フレーム、コース4で2フレーム遅らせることで、ラグを4フレーム軽減していました。遅くなっているように見えますが、6フレーム遅らせた分は、フレームルールのおかげで1フレームのロスに丸め込まれているので、トータルでは3フレームの短縮となります。ラグフレームではゲーム内フレームカウンタは増加しないので、ラグフレームの増減はフレームルールに影響しないというのが重要なポイントです。このように、フレームルールを利用して、ゲーム内フレームとラグフレームをトレードするというアイディアもあります。この記録が更新されるときにはきっと参考になると思います。(1367)クッパの行動パターンを調整するという革新的なアイディアにより、キー入力の終了を大幅に早めることができました。クッパの行動パターンはあるタイマーで制御されていて、適切なタイミングでクッパにダメージを与えると、そのタイマーを強制的に特定の値にリセットすることができます。長い行動パターンの先頭でダメージを与えることで、クッパの時間を削り取ることができるということです。そのために1巡目でメカクッパを余分に出させて1体を持ち越し(444フレームのロス)、2巡目では2つ目の鉄球を投げるモーションに入った瞬間にメカクッパを当て(240フレームリカバリ)、3巡目の開始と同時にメカクッパを当てています(196フレームリカバリ)。この時点ではまだ8フレームロスしている計算ですが、ダメージ1発分のアドバンテージがあるため、実際には短縮に成功しています。そのアドバンテージにより、クッパ上空で入力を終えられるようになりました。完全にテンプレ化していたクッパ戦の見た目を大きく変えることができたので、今回の更新案はとても気に入っています。ゴール玉をクッパ城のどの部分(クッパ戦を含む)で使っても、マップ画面に戻されるだけで、エンディングへと行くことは出来ません。