Submission #6230: fmp, total & Yuzuhara_3's SNES The Legend of Zelda: A Link to the Past (Japan) "game end glitch" in 00:54.53

(Link to video)
Super Nintendo Entertainment System
game end glitch
lsnes rr2-β23
3277
60.0988138974405
238
Unknown
Zelda no Densetsu - Kamigami no Triforce (Japan).sfc
Submitted by fmp on 1/18/2019 11:41:19 AM
Submission Comments
For a while now I've had the theory that many of the more exotic crashes we can get in A Link to the Past were not just a crash, but something we could take full control of. Previously, the only known and confirmed way to gain total control of the game was a method that took a lot longer to perform than the non-ACE method. This new route uses a completely different technique to utterly quash ACE's previous inferiority. Best of all, it must be mentioned that we completely skip over the ending text that normally precedes the credits. That text would be about 45% of the run were it included, taking around 3000 frames to sit through.
Categories:
  • Major skip glitch
  • Executes arbitrary code
  • Heavy glitch abuse
  • Fastest completion
  • Genre: Action
  • Genre: Adventure
Uses lsnes rr2-β23 (bsnes v085 compatibility core). Rerecord count is inaccurate. It's actually probably like 2000, but most of it was lost in the conversion. Not something we really care about though.

Route

Beginning

The beginning is boring. The same nonsense you see at the start of every run. "Link, save me!" Blah blah blah. Uncle walks out and tells us to stay put, but we ignore him.

Outside

Outside we use a teleport to reach the cliff and then jump off of it to almost wrap the screen, allowing us to walk eastwards to the other cliff. A teleport directly to the other cliff would have been faster, but the guards make it impossible to reach the corner. As there is no way to clip into other parts of a ◢ slope without boots, this was the only option.
We need to move up 4 pixels before transitioning south, or else we will get a funny auto-walk thing. A few frames are saved on the third overworld screen by transitioning to land inside of the cliff, where a couple snaps are used by moving down 2 pixels then moving up to get booted down 6. We then hop down the cliff back in bounds and enter the fortune teller's house.

ACE

Inside the fortune teller, we do 1 pixelport south followed by v, <^v> 7 times to move us down 7 pixels such that we'll be stuck a little into the wall. At that height, we move as far right as possible then down to trigger a south supertile transition.
That's where things break badly. The fortune teller is a single entrance building, meaning it appears on the secondary underworld map. This map is smaller and will get confused when we go south, which, in this case, attempts to load room 0132. As this room doesn't exist, it ends up reading outside the table for room data and proceeds to load random garbage values into the memory locations where room data is stored. One of the corrupted values read is $FF into memory location $AD (Hold the value for special room "effects). This value is later used by the game to determine if there are any special effects, but since this value is way out of bounds it causes the CPU to jump to "open bus" and eventually end up executing a "BRK" instruction. This instruction in turn jumps to $00FFFF in ROM where there's the value for a "branch long" instruction that executes a jump. The location from this jump will be read from $000000-$000002 because of a wraparound from $00FFFF. As luck would have it, those addresses contains the controller inputs left there by the controller reading routine that executed just before this crash happened. From there on it's business as usual when it comes to ACE on the SNES. A jump to controller registers is done and execution is kept there in a loop by executing code entered by 4 controllers, waiting for the next frame and then looping back. This code ends up storing $1A to $10 and $00 to $11 to set the game mode to credits and then jumping back into the main game loop and letting the game resume from there.

Do doo ♫ do doo ♫ do do doo do doo

Do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫

Credits

Unfortunately, we lose. Ganon's music begins playing during credits, signifying the bad ending that no one knew existed.

That's it

Thanks to

Yuzuhara for working on this movie and optimizing the route ~10% by moving the game crash from the dam to the fortune teller.
total for even looking at this and getting the ACE working and converting to lsnes. Was not expecting him to chime in.
Pinkus for discussing a lot of things I honestly don't understand that well with total.
Acmlm for his previous ACE shenanigans and looking at this method initially when pinged.
Myramong gave 1 suggestion. Hello Myramong.
Tompa for being Tompa.

Stuff

Suggested screenshots:
  • 3238
  • 7649

feos: As explained in this post, everything this movie claims to be doing it is indeed doing the way it is described.
The value that arbitrary code ends up setting is a condition that defines the credits routine; that address contains the same value in other ALttP movies right before they roll.
After the ending I can reset the game and use the save that is created, and its contents are fundamentally the same as in other ALttP movies, aside from the Pyramid top not being broken, which isn't a requirement, just a leftover when final boss is reached normally.
So everything happens and functions as it should, and this movie is legitimate.
Great job guys!
And thanks to Masterjun for helping to understand the code.
Spikestuff: The Legend of Doors: A Glitch in the Link.
Publishing.
Last Edited by adelikat on 10/31/2023 1:16 AM
Page History Latest diff List referrers