This is my "glitched" any% TAS run of Super Mario World 2 - Yoshi’s Island for the SNES. The currently published run is by NxCy which uses Snes9x, a deprecated emulator. Since I found improvements, I originally planned doing a better run on Snes9x too, but then it became deprecated so I used Bizhawk instead. Of course there are time differences between those two emulators, which is why I couldn't really compare the timing.
Game objectives
- Emulator used: BizHawk 1.4.0
- Aims for fastest time
- Uses death as a shortcut
- Abuses programming errors in the game
- Manipulates luck
Comments
At the end of this run, it has 101 more lag frames than the current run on Snes9x, but this run is only 97 frames longer. One could say that I saved 4 frames but I did a quick video comparison and it seemed like I saved even more. If you make a side by side comparison while balancing out the lag frames, you can see that the Bizhawk version is slower.
Warp Glitch
The Warp Glitch is the glitch that makes this possible. It works by pressing < and > at the same time in the overworld. When you then start the level, it is determined by the amount of coins you have. The reason why this happens is because the game doesn't expect you to press both directions at once.
So what happens when you press < + >. Well, to start things, there is an address ($36) which is input data. That means if you press > bit 0 and if you press < bit 1 of $36 is set. The game checks every frame if it should move the cursor. It does this by checking if one of the two bits in $36 is set. Since we pressed both at once, both bits will be set and the game will think it has to move the cursor.
Next step is that the game checks where to move the cursor. The overworld data is at $030F for level 1-1, $0310 for level 1-2 to $0319 which is the "SCORE" button and $031A which is the button configuration. It goes on like that (so 2-1 is $031B). If a level is not unlocked the value for its address is 0, if it is however unlocked then the value will be its level number (so 1 for 1-1, 5 for 2-5, 9 for Extra and 12 for button config). Of course 11 and 12 will be always unlocked. So the game takes the current position and adds it with $(17E182+x). Where x is what you pressed (so it's 1 if you pressed >, 2 if you pressed < and 3 if you pressed both at the same time). The game only expects x to be 1 or 2, which is why $(17E182+1) = 0x01 (so + 1 to get the level after the current one), and $(17E182+2) = 0xFF (which will act as -1 to get the level before the current level).
So the game checks if the next level is unlocked (it does this by bitwise ANDing the value with 0x0F), if not it will add another value until it found a level which is unlocked (which is why the cursor goes directly to the "SCORE" button when pressed right and only 1-1 is unlocked). Since we pressed both directions at the same time x is 3 which results in $(17E182+3) = 0x06, which means it will go 6 levels forward every check (which is why the cursor goes to 1-7 when it is unlocked and you try the glitch). So now it checks addresses like: $0315, $031B, $0321 ... until it reaches $037B which happens to be the current coin value and it stops there because coin amount % 0x0F is not 0 (that is the reason something different happens if you try to do the glitch with 0, 16, 32, 48, etc. coins).
Stage by stage comments
Intro
The goal here is to get 15 coins as fast as possible, because that will lead to 2-3. I increase Yoshi's average speed with the slopes at the start.
2-3
The goal here is to get the needed 68 coins for going to 6-8, the bowser level. 2-3 was chosen because there is this huge amount of coins right at the start and a quick way to die.
If this stage isn't properly RNG manipulated, many things can go wrong. I jumped on the switch with the position the farthest to the right possible and I again increased Yoshi's average speed once at the start and once after the jump on the switch.
6-8
I got the bubble at the highest position and manipulated my Y position to be the highest possible. If you go up while Kamek is really close behind you, he somehow pushes you up and as long as you don't have positive Y speed (down) you won't get hurt. That saves some time, because varying your Y speed decreases your X speed. In the next room you might see that I manipulated the egg to fly directly to Yoshi, which doesn't save time, but I thought it might would :). The next room is pretty straightforward... I really, really tried to be as entertaining as possible in this long scroller. This is my first YI TAS so I hope I did an OK job at it. This room is also the reason why I originally started making an improvement on this run, because you can clip the invisible wall on the right for one frame (like a walljump) and if you time it perfectly you can enter the door faster. The second Bowser fight was not that easy to optimize because the position where the eggs are spawning is RNG based.
Thanks to
- NxCy for the previous run. Even though it was hard to compare the movies, it still helped to see how things are done and what is possible with RNG manipulation.
- The people who found the glitches which made this run possible.
Enjoy!
Noxxa: Judging.
Noxxa: Accepting as an obsoletion to a previous run on a deprecated emulator.