Skip to content
Drenn1 edited this page Dec 21, 2016 · 3 revisions

This is a list of programming errors in the Oracle games. All offsets given are for the US Ages rom.

Table of Contents

Spirit's Grave and the Chest Game (Ages)

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.

See the tileReplacement_group4Map1b function (04:6576).

Text Warping (Both games)

https://www.youtube.com/watch?v=eaCbXa5lM7Q

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 known to be exploitable anywhere. However, hacking the Pirate Skull to take him 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 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).

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.

Raft oddity (Ages)

There is code at 05:55bc which makes no sense:

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 (Ages)

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.

Clone this wiki locally