Merry Christmas TASVideos! This is our improvement of 1367 frames, or ~22 seconds over the previous run.

Game objectives

  • Emulator used: Snes9x 1.43 v17
  • Aims for fastest time
  • Abuses programming errors
  • Uses death to save time

Comments

This run has taken us a few months and we found many more improvements than we initially thought was possible. If you wish to enjoy the movie to the fullest we suggest you watch before reading ahead.

New Tricks

Chuck-Eat Glitch
This glitch was discovered by nathanisbored. The glitch abused the fact that chucks erroneously have the "Give Power-Up when eaten by Yoshi" bit set. Watching sprite table $7E:167A shows this. Thus, when we eat a chuck, we get something strange in our reserve box or a crash. When we eat a Clappin' Chuck as Fire Mario, it produces a goal sphere in reserve. Other chucks with other power-up statuses give other strange results but these aren't relevant.

Level comments

Level comments in (brackets) are over our previous smv, which is for the same submission but replaced 07/01/12 (dd/mm/yy)

Yoshi's Island 2 (4)

ISM suggested an idea of losing subpixels in order to perform additional corner boosts in this level. These are lost early in the level when 6/5ing. We perform 2 additional corner boosts. Then it became clear that performing one more boost would cause the goal to spawn a frame earlier; we managed a corner clip on a pipe near the end, which is set up via the corner boosts.
Lag is reduced at the goal too, by landing further to the left it seems. Lag is temperamental in this area.

Yoshi's Island 3 (27)

Many frames are saved on the duplications due to PangaeaPanga. Improvement of the sky level is taken from ISM's 96-exit wip.

Yoshi's Island 1 (-2559)

For information on the Item Swap glitch, please see the previous movie's comments.
Many optimization improvements occurred in this level. The aim of yi1 is to eat the Clappin' Chuck as fire mario by using the item-swap glitch; this yields a Goal Point Question Sphere, sprite 4A. We have two strategies to perform this. The first one (smv) is to collect a sprite coin from Jumping Piranha Plant while it is on Yoshi's tongue. We burn the Piranha Plant with Yoshi flames from the red shell near the midpoint. We turn the Piranha Plant into a coin, then collect it while it is on Yoshi's tongue. This triggers an item-swap. This strategy might be thought to be very fast, but because of bad placement of the Piranha Plant and the Clappin' Chuck, it costs a lot of time to die. The second one, which we've chosen in our run, is to fill sprite slots by dropping four resereved powerups and then use the fifth reserved powerup to item-swap. This strategy has an advantage, that we can die with no cost of time, but it costs a little time to collect powerups and we also had to R-Scroll.
(Until recently, these strategies matched after heavy optimization. But thanks to insight from regnum0nline (Dawn), 8 frames were gained for the latter strategy. This idea involved 49 hopping most of the way.)

Yoshi's Island 4 (-2559)

No change.

Iggy's Castle (1287)

The large portion of the improvement in this run happens here. The Goal Point Question Sphere we acquired from Yoshi's Island 1 is used.

Donut Plains 1 (1287)

No change.

Donut Secret 1 (1291)

Just before the first pipe entry, speed oscillation is changed from 17¨15 to 17¨16, which saves a subpixel and hence a frame. In addition, this enables us to beat the frame rule of sprite interaction so we can hit the red koopa a few pixels further to the right as it is unnecessary to slow down and it saves another frame.
To reduce key entry lag, we hit the sleeping fish to the left, with no loss of time thanks to the timing of cape spin.
(A frame is lost due to level transition lag.)

Donut Secret House (1290)

(A frame is lost due to level transition lag.)

Star Warp (1292)

We beat the frame rule of star warp and gain 4 frames on previous movie.
Related addresses:
  • $7E0013: In-Game Frame Counter
  • $7E1F19: Mario's Y Position in OW (2 bytes)
  • $7E1DF7: Star Warp speed
  • $7E1DF8: Star Warp Rotating Timer
OW transition starts as soon as $7E1F19 hits a certain value or less, and warp speed increments depending on the in-game frame counter, or more precisely, it increments when the value of the counter modulo 8 equals 1. So the star warp has a frame rule whose cycle is 8 frames long. Due to its strange behaviour, beating just a half of its cycle may save a frame , and hence the other half 7 frames.

Star World 1 (1296)

New optimization idea of smashola saves 4 frames. This gives us glitchy colours in this level, also.
(A frame is lost from level transition lag.)
Delaying key entry by 2 frames may remove 2 frames of lag.

Star World 2 (1296)

No change.
Delaying key entry by 4 frames may remove 2 frames of lag.

Star World 3 (1296)

No change.

Star World 4 (1302)

By platform boosting at the beginning, we gain some subpixels allowing us to corner clip once more. This saves us a frame. At the keyhole we reduce lag.
(A frame is gained from level transition lag.)
Delaying key entry by 3 frames may remove 2 frames of lag.

Star Warp (1302)

We managed to beat just the whole cycle of the frame rule, which means no time is lost due to the frame rule. If this was not the case, we could sacrifice a few in-game frames, in such a way we would end up losing no time after star warp, to remove lag frames. We were previously on this plan, but the new sw4 improvement finally enabled us to beat the frame rule and this old plan became useless.

Bowser (1367)

A new innovative method involving manipulating Bowser phases allows us to end input much earlier. We can reset a long counter during a phase by hitting Bowser at an appropriate time. For example in the second phase, by hitting Bowser as he begins his routine to drop a Big Steelie, we can avoid this and instead have him throw Mechakoopas on next round. Addresses 7E14B0-7E14B9 are important in this.
The credits would never be triggered by goal spheres being used at any places of Bowsers Castle. It only puts Mario to the overworld.

Thanks

  • Mister thanks #TASers and pirohiko
  • #tasvideos
  • amaurea and gocha for their helpful Lua scripts
  • nathanisbored for finding Chuck-Eat glitch
  • ISM for some ideas used in this run
Thanks for your patience while we worked on this! Enjoy.

Translation into Japanese - 対訳

メリークリスマス!前記録から1367フレーム、およそ23秒の更新です。
この対訳は Mister (Mr.) によるものです。ところどころ私の主観が入っています。

仕様

  • 使用したエミュレータ:Snes9x 1.43 v17
  • 最速を目指す
  • プログラムエラーを悪用する
  • 時間短縮のための死亡を許す

コメント

この動画を製作するにあたって数ヶ月を費やすこととなりましたが、当初想定していたよりもはるかに多くの更新点が見つかりました。この動画を最大限に楽しみたい場合には、先に動画を見てから続きを読むことをお勧めします。

新テクニック

ブル食べバグ
このバグは nathanisbored によって発見されました。このバグは「ヨッシーがブルを食べるとパワーアップとして認識される」という(誤って設定されたであろう)仕様を利用したものです。本来食べることのできないブルを口寄せバグ等によって食べると、マリオのパワーアップ状態が変化したり、本来想定されていないストックアイテムが得られたりします。この動画では、ファイアマリオで手拍子ブルを食べることで、ゴール玉(ラムネ海溝の沈没船のゴール)をストックしています。

各コースのコメント

括弧の中の数字は前記録との差を示しています。ルート変更が著しいため、ヨースター島コース1からイギーの城まではあまり参考になりません。

ヨースター島コース2 (4)

ISM のアイディアをもとにした二つの変更点があります。ひとつは、ゴール口寄せ直前での挙動の最適化、もうひとつは、コーナーブースト等を可能にするために数サブピクセルを犠牲にするというものです。ISM によると「コーナーブーストを2回追加することはできても、ゴールを1フレーム早く出現させるには1サブピクセルだけ足りない」とのことだったので、更に数サブピクセルの犠牲を払い、土管での角抜けを1回追加し、1フレームの短縮につなげました。ヨッシーが居ればこのタイプの角抜けが出来るというのは、この時点ではまだ誰も知らなかったようです(もちろん私も)。

ヨースター島コース3 (27)

PangaeaPanga の妥協のない最適化によって、ブロック増殖部分が大幅に短縮されました。今回はヨースター島コース1でヨッシーを使うため、ここで捨てずに持ち越します。翼を取ったあとの空の面では、ISM の全クリ TAS を参考にしています。

ヨースター島コース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番となって口寄せは起こらず、無を食べることができ、結果としてストックを増殖したことになります。この手法は最後のファイアフラワーでも使われています。
検証の結果、このふたつの方法はまったく同じ速さになると思われていましたが、regnum0nline (Dawn) の最適化案により、ふたつ目の方法が8フレーム速くなると結論付けられました。彼のアイディアは草陰のキノコ以降慣性移動するというものです。
ヨースター島コース1でゴールすると、ゴール後の長いデモが流れ、マップ画面ではマリオがかっぱ山黄色スイッチまで歩いていってしまうため、大きく時間をロスしてしまいます。これを回避するために、ゴール玉をストックしたら即座に角抜けで死亡しています。死亡によってヨッシーを失ってしまうので、ヨッシーが必要になるヨースター島コース3を先にクリアし、そのあとヨースター島コース1に戻るというルートを取っています。

ヨースター島コース4 (-2559)

変更点はありません。

ヨースター島の城 (1287)

ヨースター島コース1で取得したゴール玉を使いゴールします。強制スクロール部分と、卵救出&城破壊デモをスキップすることができ、大きな更新につながりました。

ドーナツ平野コース1 (1287)

変更点はありません。

ドーナツ平野秘密のコース1 (1290)

最初の土管に入る直前に、1/1を一瞬だけ解除して1フレームの短縮。スプライトの当たり判定は2フレームに一度しか行われないため、先の1フレームの更新により赤パタパタを1フレーム分近くで叩くことができ、更に1フレーム短縮。鍵穴エフェクトのラグを軽減するため、グースカを左側にはじきました。これによる数ピクセルのロスがありますが、マントアタックの周期の関係で、そのロスがなくとも鍵ブロックを叩くことのできるタイミングは同じため、結果としてロスはありません。前記録では、ラグを軽減するために鍵の挿入を1フレーム遅らせていましたが、今回はそれを回避して1フレームの短縮。さらに鍵穴エフェクトのラグを1フレーム軽減、ゴール後のマップ読み込みラグで1フレームロス。
マリオの呼吸による気泡は拡張スプライトになっていて、これももちろんラグの増加の一因となりえます。この気泡は128フレーム周期で発生し、また真ん中の64フレーム目で特定のキー入力が行われていると、追加で気泡が発生します。つまり、周期の真ん中の気泡は入力を避けることで、発生しないようにできるということです。今回の動画では気泡調整でラグを軽減することはできませんでしたが、スコアが100050の場合には、気泡を一つ減らすことでラグを完全になくして2フレーム短縮することができます。

ドーナツ平野の隠れ屋敷 (1289)

スコア調整のためにクルクルブロックを壊して50点を取得しました。ロスなく50点を取れるのはここだけです。また、アトミックテレサを倒したあとのマップ読み込みで1フレームロスしています。

スターワープ (1292)

スターワープのフレームルールを破って3フレーム更新しました。スターワープには以下のメモリアドレスが関係しています。
  • $7E0013:ゲーム内フレームカウンタ
  • $7E1F19:マップ画面でのマリオのY座標
  • $7E1DF7:スターワープ時のマリオの速度
  • $7E1Df8:スターワープ時のマリオの回転タイマー
ワープによるマップ移動は $7E1F19 が特定の値以下になったときに始まります。また、ワープ速度はゲーム内フレームカウンタに依存して1から4まで増加します。より正確には、カウンタの値を8で割った余りが1のとき、ワープ速度が増加します。つまりスターワープは8フレーム周期のフレームルールを持っていることになります。一方でスターワープは少し変わった挙動をするので、周期のちょうど半分、4フレームだけ短縮した場合、ワープ後の更新量は1フレームあるいは7フレームとなります。1フレームの場合は更に4フレーム短縮すると残りの7フレームが更新されます。逆もまたしかりです。

ネイティブスターコース1 (1296)

前記録ではマリオの押し出し判定のフレームルールが合わず、このコースに入るのを1フレーム遅らせていましたが、今回はそれを回避することができました。コース内では smashola の新最適化案により、4フレーム短縮しています。また、クリア後のマップ読み込みで1フレームロスしています。
注意として、今回は適用していませんが、鍵の挿入を2フレーム遅らせるとラグが2フレーム減ります。

ネイティブスターコース2 (1296)

変更点はありません。ここも鍵の挿入を4フレーム遅らせることでラグを2フレーム減らすことができます。

ネイティブスターコース3 (1296)

変更点はありません。

ネイティブスターコース4 (1301)

コース内に入るときのマップ読み込みで1フレーム更新。bahamete によるリフト加速のアイディアに、改良型角抜けを追加することで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発分のアドバンテージがあるため、実際には短縮に成功しています。また、そのアドバンテージにより、クッパ上空で入力を終えられるようになりました。完全にテンプレ化していたクッパ戦の見た目を大きく変えることができたので、今回の更新案はとても気に入っています。
ゴール玉をクッパ城のどの部分(クッパ戦を含む)で使っても、マップ画面に戻されるだけで、エンディングへと行くことは出来ません。

DarkKobold: Judging.

DarkKobold: This run will obsolete the current any%. We will not be changing the branch name.
DarkKobold:Delaying submission while the authors improve the movie. And you only thought it happened to Mario in 3 dimensions.

DarkKobold: Verified and replaced, setting back to accepted. Nice new bowser fight. This run will obsolete the current any%. We will not be changing the branch name.
ledauphinbenoit:Processing...


1 2
4 5
1 2
4 5