Bug list
This is a list of bugs / exploits in the Oracle games. These were generally found on the US version ROMs unless stated otherwise. Some were patched in the European release.
Ages and Seasons
Text warping
JP | US | EU |
---|---|---|
Y | Y | Y |
Discovered by: TheOnly0 Date discovered: 2011 |
Certain warps cause Link to walk outside of the screen instead of warping him instantly. By activating a textbox on the same frame Link activates the warp, the game will perform a normal screen transition instead of a warp, which will take him to the wrong room (unless the warp would send him to the same place, ie. the Maku Tree <-> Lynna City warp).
In Seasons, this glitch is not easily exploitable anywhere. However, using Rooster Adventure Deloading in order to bring the Pirate Skull out of the desert demonstrates that the glitch still exists. (Activating a text warp from Horon Village to the Maku Tree takes you to the Lost Woods, in an Out of Bounds location.)
In Ages, this can be used to trigger a glitch called Veran Warp, which is caused by a lack of bounds checking on the map screen. Its effects are numerous, from giving you extra keys in Jabu-Jabu's belly, to re-locking doors in dungeon 1, to spawning the final boss Veran (where its name came from). ACE (Arbitrary Code Execution) is also possible.
Cause
For some reason, the game checks whether a textbox is active, and does not allow this kind of warp to activate if it is. Normal screen transitions are apparently exempt from this check. Removing the check fixes the bug, although it's unclear whether it served a purpose.
The check is at 01:6103
.
Deloading
JP | US | EU |
---|---|---|
Y | Y | Y |
Discovered by: Drenn Date discovered: Unknown |
When there are a great number of objects on the screen at the time Link activates a screen transition, it is possible to prevent some objects on the next screen from loading. This occurs because objects are not unloaded until a screen transition is completed. If the number of objects of a given type between both screens is greater than about 16 (14 for interactions), there will not be enough memory for all of them to load.
There is a similar glitch in Link's Awakening, but it is much easier to perform in that game. This is because the Oracles have 4 types of objects which can each have (roughly) 16 instances, while Link's Awakening can only have 16 objects of any kind.
Equivalently referred to as "despawning" sometimes.
Applications
- The #Rooster Adventure glitch in Seasons can be used to despawn many things, including the cutscene trigger that normally prevents you from entering Onox's Castle.
- Deloading the villagers near Lynna Village using the Bomber's ring and Peace ring (to help with timing) can cause their ball to disappear. This results in some minor music corruption since they try to reference an object that doesn't exist. In particular, the vibrato goes crazy for a short while.
- Whirlpool effects in Ages are implemented through a part object. If the object can be prevented from spawning, Link will be able to pass through whirlpools. This is theoretically doable by digging up 16 items with the shovel before doing a screen transition.
Maple's item drops
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: Drenn Date discovered: Unknown |
Maple is bugged such that, when deciding what items Link should drop, bombs and seeds do not check the correct treasure indices. The end result is that, in order for these items to drop, Link must have a different item:
- Ember seeds require the sword
- Scent seeds require the boomerang
- Pegasus seeds require the rod of seasons
- Gale seeds require the magnet gloves
- Mystery seeds require item 0x09, which isn't an item that goes in the inventory; so Link will never drop mystery seeds?
- Bombs require the switch hook
This means pegasus and gale seeds never drop in ages, while bombs never drop from Link in Seasons (they still drop from Maple).
Note that obtaining the corresponding item isn't sufficient for a seed type to drop, since it also checks that Link has a certain quantity of the item, which will be zero before it is actually obtained. So, obtaining the rod of seasons, by itself, does not make pegasus seeds available from maple.
The relevant function is called _mapleCheckLinkCanDropItem (05:6bb4)
in the disassembly.
Bipin & Blossom's son crash
JP | US | EU |
---|---|---|
Y | Y | Y |
Discovered by: Drenn Date discovered: 2018 |
When the child first decides on what his career will be (in stage 7), if you leave the house without talking to him and come back later, he may change occupations.
If this happens while he is a singer, the game will crash.
See Bipin and Blossom's son#Occupation_changing.
Cucco glitch
JP | US | EU |
---|---|---|
Y | N | ? |
Discovered by: Drenn Date discovered: 2021-03-11 |
Attacking a cucco with gale seeds will put it into a glitched state where it cannot take damage. Patched in the US version by making them get blown away like most other enemies.
Randomly-placed enemies failing to spawn
JP | US | EU |
---|---|---|
Y | Y | Y |
Discovered by: Drenn Date discovered: 2021-03-13 |
This is technically two different glitches with the same cause; which glitch occurs depends on the version. They attempted to patch it in the US version, but they only made it worse.
When placing an enemy randomly on the screen, the game makes 63 attempts at placing the object somewhere within the bounds of the room. If all 63 attempts somehow fail, then the game gives up.
In the Japanese version, although this should prevent the enemy from spawning, instead, the enemy will be placed at position 0,0 (the top-left corner of the screen). This can only occur in large rooms (dungeons), because there aren't even 63 different tiles to check in small rooms (the borders of the room are not considered).
In most cases, this is either impossible, or astronomically unlikely. For example, there is a 1/43543 chance that this can occur in the Samasa Desert sand pit, and only if you fall in from the quicksand (using the staircase doesn't work). The odds may be better in rooms with extremely few tiles that enemies can spawn on to.
The patch to the US version technically fixed this bug, but introduced some other problems. Firstly, there is a danger that the code will work "correctly" and result in enemies failing to spawn, particularly with water-filled rooms, where it attempts to place even water-based enemies on land (eg. Seasons Hero's Cave water combat room). This causes no issues in the JP version because they would be immediately moved back into water from position 0,0 (the object-specific code handles this); but in the US version, they don't spawn at all, so this can't happen. The #Octogon despawning glitch is an example of this.
Secondly, the US/EU versions have a "latent" bug in which the enemy's ID and SubID values are not cleared to 0 before being deleted. Since it is assumed that object memory should always be filled with value "0" when unused, this can cause problems in rare cases. But due to the rarity of this situation in the first place, it does not appear to be exploitable.
There's also more info in a python script here that was used for scienceing this.
Standing on holes/lava
JP | US | EU |
---|---|---|
Y | Y | Y |
Discovered by: Nitroz,Drenn Date discovered: 2022-01-16 |
By using pegasus seeds, jumping straight down into a wall, and getting hit by a damage source as Link is about to touch the wall, it is possible to "wall clip" 2 pixels into the wall (that is, get 2 pixels further into the wall than you would by walking into it normally). This is far enough that Link will be considered to be standing on the tile just below that, meaning he won't get sucked into a hole. The video here shows an application of this for reaching the south-western area of Subrosia early (though this isn't the only method of doing so).
Moldorms killing other objects when dying
JP | US | EU |
---|---|---|
Y | Y | N |
Discovered by: usedpizza,SBD,Drenn Date discovered: 2022-05-14 |
When a moldorm dies, it attempts to kill its two "tail" objects. But because the programmers forgot about a parameter to a function, it ends up "killing" an object of a different type instead. This is not quite the same as "deleting" an object, but it does cause the object's collisions to get disabled, and its health to be set to 0.
This clip shows how after a moldorm is killed, it can deactivate a switchable orb by "killing" it.
Ages only
Portal duplication
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: Drenn Date discovered: 2017-08-18 |
This can be done with time-portals created by the tune of currents or tune of ages (not tune of echoes).
Whenever interactions are disabled (this can happen when opening a textbox or playing an instrument), and there's an existing time portal on-screen, the time-portal will duplicate itself if there is a free object slot before it.
This is difficult to see since the timeportals are in the same spot, and it doesn't have much practical effect. But if you notice the timeportal has multiple colors in a single frame, this bug is the cause (it is more than one time portal).
This could potentially be used for despawning.
Cause
It isn't clear why the game creates new time-portals - the function that does this is at 02:7a3a
. It is prevented from doing so as long as the existing portal is active, because it constantly resets a counter (address $cddd
). Once the portal is deactivated, the counter may reach zero, and it attempts to create a new portal.
However, the newly created time-portal tries to delete itself if an existing time-portal is already on-screen. There is a fault in this code; it only checks the first time-portal it sees. If the first time-portal it sees is itself, it does not see any problem, so it does not delete itself. The result: if the time-portal is created using an object slot before any existing time-portal, it will not delete itself.
The portal's code is at interactionCodede (10:7b68)
.
Stacking
This glitch is very difficult to perform multiple times, because the newly-created time-portal always tries to use the first free object slot. You need to create interactions temporarily before triggering the duplication.
Spirit's Grave and the chest game
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: Morwenn Date discovered: 2011 |
After buying all of the items from the secret shop (which triggers the chest game), map $1b
in dungeon 1 becomes corrupted.
Cause
The programmers forgot a ret opcode in that room's "tile replacement" function, causing code meant for dungeon 1 to continue and execute code meant for the chest game.
This room's tile replacement function starts at 04:6576
(called tileReplacement_group4Map1b
in the disassembly).
Time warping outside of Wing Dungeon
JP | US | EU |
---|---|---|
Y | Y | Y |
Discovered by: Drenn Date discovered: 2016 |
If you attempt to warp to the present on the screen with the entrance to Wing Dungeon, but then get forced back (due to warping into a wall), the room layout buffer at $cf00
becomes corrupted. Side-effects include Link not being able to enter the dungeon, the grass having no effect, the ground being undiggable, and all tiles turning into walls after using the Cane of Somaria on them.
Cause
When a failed timewarp occurs, the buffer with the original room layout gets stored somewhere (so that tile changes are remembered, ensuring that an infinite timewarp loop doesn't occur). The corresponding screen in the present of d2 appears to have some special code relating to the collapsed cave, which uses this same buffer, causing the stored room layout to get overwritten. Thus, the game thinks the room is full of wall tiles.
Raft oddity
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: Drenn Date discovered: 2016 |
There is code at 05:55bc
which makes no sense (code snippet from the disassembly):
ld a,(w1Companion.id)
or SPECIALOBJECTID_RAFT
jr z,@updateDirectionIfNotUsingItem
jr @updateDirection
The jr z
line will never jump because SPECIALOBJECTID_RAFT
is nonzero ($13
).
They likely meant to write this:
ld a,(w1Companion.id)
cp SPECIALOBJECTID_RAFT
jr z,@updateDirectionIfNotUsingItem
jr @updateDirection
The only difference the latter code makes is that Link is prevented from changing directions on a raft while swinging his sword or using other items.
Double-length doorway centering code
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: Drenn Date discovered: 2016 |
When Link warps through time, the game tries to check whether he warped onto a 2-tile wide doorway, such as the main building in past Symmetry City. If he did, the code would adjust his position to be in the center of the 2-tile wide door.
However, the code doesn't work, due to what is presumably a typo. Changing the opcode at 05:4db7
from ld a,e
to ld e,a
results in it working properly. (Although if a time portal is created, it doesn't get centered with him.)
The relevant subfunction starts at 05:4db3
.
Cane of somaria + Expert's Ring
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: Drenn Date discovered: 2019 |
If you swing the Cane of Somaria and cancel the animation with the Expert's Ring (or Fist Ring?), the cane's sprite becomes glitched.
Ramlock
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: jeeves833 Date discovered: 2019-02-02 |
Whatever the heck this is. It seems like he ended Ramrock's Scent Seed phase at the same time he bumped into Ramrock, or perhaps it was on the same frame he finished firing his beam? After this, he couldn't even open the inventory menu.
Veran fight bug
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: mashy Date discovered: 2019 |
It seems that if you use the Switch Hook on Nayru/Ambi Veran as you take damage, she emerges immediately without going through the Switch Hook animation.
https://clips.twitch.tv/ImpossibleAgitatedRadicchioKAPOW
Raft dismount storage
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: Drenn Date discovered: 2019-06-25 |
If you get caught by a Gale Seed on the same frame you mount a raft, Link enters a glitched state. Link will be on the raft, but spinning as if he were caught by the Gale Seed. If Link dismounts the raft before the Gale Seed menu appears, he can partially walk through a wall in the direction he moved.
https://cdn.discordapp.com/attachments/148183762998394890/593144115957334039/recorded.gif
Dimitri softlock
JP | US | EU |
---|---|---|
Y | Y | N |
Discovered by: Multiple people Date discovered: Unknown |
After beating Moonlit Grotto, ride Dimitri to the mainland. If you dismount him while very close to the screen edge, you will be able to perform a screen transition before Dimitri talks. After the screen transition, Dimitri will talk; but since Dimitri has now despawned, the game will softlock, since the cutscene is supposed to continue with him.
They seemed to be aware of the bug in the US version as they attempted to disable screen transitions, but the code that was added didn't have the desired effect. The glitch was finally patched correctly in the EU version.
View US version patch (part 1, part 2)
Timeportal + Raft = Softlock
JP | US | EU |
---|---|---|
Y | N | ? |
Discovered by: Drenn Date discovered: 2021-03-08 |
Mount a raft on the same frame as you enter a timeportal, and weird things will happen. The timeportal animation spawns at the top-left corner (position 0,0) instead of Link's position. After completing the timewarp, Link never regains the ability to move; the game is softlocked.
Patch bugs
JP | US | EU |
---|---|---|
Y | N | ? |
Discovered by: Drenn Date discovered: 2021-03-10 |
In the Japanese version, while doing the Patch minigame for the Tuni Nut / Noble Sword, it's possible to open the menu and then move around after the minecart hits the Tuni Nut. Also, dying as the Tuni Nut gets hit by the minecart causes graphical glitches.
Giving the wrong secret (UNVERIFIED)
JP | US | EU |
---|---|---|
Y | N | ? |
Discovered by: Drenn Date discovered: 2021-03-11 |
It seems like two linked game-related NPC's (King Zora and the mischievous fairy) may not give you the correct secret when you talk to them for the second time. This could particularly be the case if you get a different secret first, and then go back to them.
Octogon despawning
JP | US | EU |
---|---|---|
N | Y | ? |
Discovered by: Every speedrunner Date discovered: Unknown |
This is a consequence of the Randomly-placed enemies failing to spawn glitch. For no particular reason, Octogon is classified as a "random-position" enemy, meaning the game attempts to place him on dry land. Of course, he will immediately be moved back into water, so this shouldn't matter at all. However, due to the very small number of land tiles, there is a possibility that this entirely unnecessary process could fail, causing complications.
In the JP version, it indeed doesn't matter at all, since he will either be placed on land, or at position 0,0 due to the aforementioned glitch, prior to his position being corrected. In the US version, however, he will fail to spawn entirely instead of being put at position 0,0.
This becomes particularly likely to happen if Link surfaces up near the land in the center of the room, because enemies are not allowed to spawn within 2-3 tiles of Link, meaning there will be almost no valid land tiles for the game to find! This is merely an annoyance, as the player can simply dive down and up again to spawn Octogon again.
There is also a small chance (0.08%) that Octogon may fail to spawn even when Link is nowhere near the land tiles. If this occurs when he first enters the room, the fight gets completely screwed up. There are only 35 possible RNG values that can do this. One of those values is FC F4 (FF94=FC, FF95=F4) prior to entering the room.
Seasons only
Rooster Adventure
JP | US | EU |
---|---|---|
Y | Y | N |
Discovered by: Drenn Date discovered: 2019-07-23 |
If you grab a rooster on the same frame you get grabbed by a Gale Seed, the rooster will follow Link through screen transitions.
This can be used to spawn multiple roosters and despawn the cutscene trigger in front of Onox's Castle.
While this bug is possible on the JP and US versions, it is surprisingly patched on the EU version.
Rooster Clip
JP | US | EU |
---|---|---|
Y | Y | N |
Discovered by: zmaster91 Date discovered: 2017-04-27 |
By using a technique known as Wall Clipping - which allows Link to get a few pixels closer to a wall than normal by walking into it from the side - Link can grab the rooster in Mt. Cucco through a wall.
In the EU version, the position of the rooster has been slightly adjusted, making this trick impossible.
Syger bug
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: jangler Date discovered: 2019-06-15 |
If Syger is killed on the same frame he goes into his "ball" form, something goes wrong, and an enemy slot's memory is not cleared properly. This causes a future enemy's "default" state to be 0x0a. All that really matters is that it is nonzero; if state is never zero, then health is never initialized, meaning the enemy will die immediately.
Magnet Block Clip
JP | US | EU |
---|---|---|
Y | Y | ? |
Discovered by: mghtymth Date discovered: 2018-04-12 |
In the room left of dungeon 5's entrance, it is possible to clip into a magnet block with some precise inputs. After clipping into the block, Link gets sucked into it as if falling into a hole.
This occurs because the magnet block is a tile index that is normally reserved for holes. By making the block solid, normally it is impossible for the "hole" behaviour to take effect (because you shouldn't be able to stand on it), but it is still possible to clip into it from the top if you are moving fast enough. This results in its true nature as a hole to be revealed.
Multiple Star Ores
JP | US | EU |
---|---|---|
? | Y | ? |
Discovered by: Drenn Date discovered: 2020 |
After getting the Star Ore in subrosia, if you savewarp before doing a screen transition, then buy the ribbon without revisiting the beach, you will be able to dig up a second star ore.
Invisible Facade
JP | US | EU |
---|---|---|
Y | N | N |
Discovered by: Casusby Date discovered: Unknown |
The miniboss in Dungeon 2 has a weird method of spawning, which involves waiting for Link to go down a certain distance on the screen before initiating the fight. However, on the JP version only, the hitbox of the boss is there before the fight is started, meaning that you can simply throw 5 bombs to the middle of the room while staying above the spawn trigger, in order to kill Facade without initiating the fight at all.