Bite-sized Explications

Some glitches are so simple that they can be explained in just a couple of sentences. Actually, I could probably explain any glitch in under 10 sentences. But I don't want to! I want to examine glitches in as much detail as possible. Some just don't have that many details, so I'll stick them here. And for these glitches only, I'll include a 1-sentence explanation that explains it perfectly as well.

Bomb dupe(permalink)

There's an address in save data that indicates you've dropped the super bomb. If this address is set, the super bomb can't move. It gets cleared when the timer hits 0, but the data that says you have the super bomb as a follower isn't cleared until the explosion ancilla does it 12 frames later. During this intermediate time, performing an overworld transition removes the ancilla, which is what's responsible for removing the follower.

The address that says the bomb isn't following you is cleared before the bomb is removed as a follower.

Sanc and Quit(permalink)

There's a mosaic buffer in memory. If that has a nonzero value, you will spawn in the sanctuary instead of getting to choose where to go. That's it. The code makes no sense, but it's there.

An unnecessary and nonsensical mosaic check forces a Sanctuary spawn.

Sprite altitude and bomb knockback(permalink)

To calculate the direction of recoil when Link is hit by a bomb, the bomb temporarily hijacks sprite slot 0 and uses the sprite knockback routine for its calculations. In JP1.0, this routine neglects to clear the altitude of the sprite during the hijack. It appears to be fixed in later versions.

Bombs hijack sprite 0 to perform a calculation, but they don't clean all variables first.

Fast keys with wallmasters(permalink)

If you kill a wallmaster as you open a chest, you'll be able to move right away. This is because both wallmasters and chests rely on the same variable to freeze Link. Every frame that a wallmaster is not in the default AI state (in this case, it's dying), it resets the address that freezes you.

Wallmasters not in the default state reset Link's ability to move.

Mirroring with a dropped purple chest(permalink)

The behavior of the desert thief is based on his AI pointer. When initially loaded, his AI pointer is determined by your current follower. If you have him as a follower, the sprite version of him will despawn. If you have the purple chest as a follower, he'll begin in "talk about purple chest" mode. In that AI mode he shows a message, and your choice decides the next AI routine he uses. In the "accept offer" routine, the only condition he checks for is whether or not the purple chest is following you, which is indicated by address $7EF3D3 being $00. When mirroring with the purple chest dropped, both your follower and this "attachment" address are zeroed out. However, if you mirror while within range of the thief, his initialization routine will occur first, then your follower will be cleared, along with the address that when 0 allows him to gift you the bottle.

The desert thief is put into a purple chest state early, and later code resets the detachment flag he looks for.

Recoil-free Agahnim damage(permalink)

To determine damage, there's a single address that holds the last damage class calculated for. The value is used near the middle of the routine to determine the actual damage, and then again at the end to determine if the sprite should recoil. If the damage class is that of a medallion, the sprite does not recoil. When energy shots hit Agahnim, they preload some values then jump into the damage routine after the first use of damage class. Damage class is not used for their calculation, so the value is left alone; as such, the last damage class calculated before the fight will be used in the recoil check. If an enemy took damage from a medallion and no other enemy was directly attacked since, then that will be used for the calculation, and Agahnim will not recoil.

An uncleaned shared value will tell the damage routine to not apply recoil to Agahnim.