Version Differences

I recently completed a full disassembly of the US version of the game. I went about it by getting a mostly complete disassembly of the US version and comparing it to a mostly complete disassembly of JP1.0. I used a file comparer to weed out the superficial changes and a sloppy C# tool to copy the fully annotated JP1.0 disassembly's source and modify it as required to represent the US version. In doing so, I made sure to take note of all the interesting changes, then realized that once I had those, I could look at JP revision 1 and see what changes came from in between.

Unless otherwise noted, any change made in the JP revision 1 ROM (REV1) carries over to the US version.

Huge changes

Text

English is not as informationally dense as Japanese, so the US version had to expand the allotted space for dialog. Not only that, the entire text system is different. Both languages are coded as a VWF (variable-width font), but only the US version actually makes use of the V. The Japanese text system has a single width for every character.

The Japanese versions need to encode a lot more characters, including 256 kanji (255 of which are unique (but all of which are graphically unique)). Making this fit required a clever compression algorithm optimized specifically for storing these characters. I believe this algorithm at least partially dictated some of the weird outlines on certain characters, as those extraneous pixels compressed better. The English font, on the other hand, is completely uncompressed. The biggest space saver was not needing kanji. Those savings made room for the raw graphics to fit comfortably in ROM.

The English text engine introduces two new commands: another choose option, and the bank swap command.

The extra choose option came with 2 new control messages to handle the arrow selection display, shifting every subsequent message ID up by 2. This affected virtually every dialog invocation, but beyond that, no message calls were changed.

The bank swap command was necessary to tell the text pointer initialization code to swap from the large bank 1C (where all text is stored for the Japanese versions) to bank 0E (where the extra English text is located). This multi-bank solution required that the pointers generated grow from 16-bit to 24-bit.

The Link face changed!

The lack of text compression represented a small change in any routine where the font had to be loaded. It no longer had to be decompressed then transferred to VRAM; it could be transferred directly from ROM. The new VWF required a larger space in VRAM though, with the size loaded at $008D02 changing from $0780 to $07E0, an increase of 96 bytes, or 6 graphics tiles.

At $008355 the background 3 clear fill tile is changed from $0188 to $00A9 in the US version. This was merely a tile shift due to the much smaller font.

Menu

Obviously all text needs to be translated, not just the stuff people say. As such, the entire item menu was retiled, but there's a tiny little secret that was deleted at the same time.

At $0DF429 is the text "てがみ", which translates to "letter". You may know that there is a map-looking item the shares a slot with the mirror. That's the letter. The letter behaves exactly the same as the mirror, and besides the menu tables and another table related to the upgrade fairies, there's no reference to it anywhere else in the game. In the English version, the text label for the item is entirely empty space; the icon remains.

A lesser-known item also shares this slot. At $0DF5C9 is the text "トライ フォース" (the space should be a line break), which translates to "tri force". In the English version, the 32 bytes for this label are completely deleted, but the icon and the fairy upgrade table entry are still there.

Unfortunately, the triforce has no real icon. In every version it displays as arrows and bombs, but yellow. This seems to indicate that there were indeed menu graphics for the item at one point, but they were replaced with HUD graphics when it was scrapped.

Would you be upset if I told you about something that didn't change? Within the DO menu labels is the text "いのる", which means "prayer". It can even be seen on the menu if bit 0 of $7EF379 is set, though it will be hanging off the border and not inside the menu proper. In the US version, the data for this text is exactly the same. They didn't even bother translating it! Now it just writes 70% of the "UG" from "BUG-CATCHING NET"—which isn't even visible, since the border writes over it—and empty space.

The overworld

Small changes with a big impact were made with the overworld in REV1. Although, the big impact was pretty superficial. A few new map tile definitions were added, shifting over 70% of them to slightly higher IDs. These ID shifts meant nearly all the overworld screen data had to be recompressed, making it very difficult to compare them properly, although we can still check them visually. Most of this whole ordeal seems to be due to a slight rearrangement of cliff and mountain tiles in the graphics sheets to address clipping out of bounds. At the very least, new tiles were added to East Dark Death Mountain to prevent Link from clipping slightly into the wall with the mirror then jumping down to the ledge leading to the middle of Turtle Rock.

The only visible change is four ball-nub-block-things added to the second tier of the pyramid. If Link mirrors at these spots in JP1.0, he ends up half inside the castle wall. I think the change was entirely aesthetic, though. All the other places where Link can get half into a wall are visually unchanged.

A framework change was made in the way the US version handles audio. In the Japanese versions, whenever an overworld screen loads, hardcoded checks are run to determine which music track should be changed to, if any. The same is true for ambient sound effects. The US version makes this slightly less hardcoded by invoking a new ambiance control at $02C463, which creates a table located at $7F5B00, where the Japanese font decompression took place.

Various smaller changes were made outside of the new general handler as well. Checks for exiting the underworld from Kakariko rooms now include magic bat cave and the chest game south of town. The overworld map and whirlpools in the US version adjust the ambient sound effects when they didn't before. And ambient sound effects are cleared before loading the underworld.

In JP1.0, a check for the special overworld only checks for the screen ID of the master sword/hobo bridge specifically (they're the same ID of $80); REV1 fixes this to check all of the special overworld. It was looking for exact equality instead of greater-than-or-equality.

First impressions

The opening title card and the entire file select interface are both completely redone. The somber black background of the title card is interrupted by a colorful flash and a falling sword before being replaced with a majestic river vista. The developers were so proud of this that they made it unskippable.

The equally somber black of the file interface is now adorned with a wooden border and emblazoned atop a Futaba green stone cladding.

Minor parameter changes and code refactoring is present at every step in these redesigns. Two new palette filter routines handle the flashy new title card. The Triforce vertical targets are 8 pixels lower. Fairy positions were shifted slightly. The ERASE FILE screen (previously KILL) no longer draws Link.

File names in the US version are allowed to be longer—up to a whopping 6 characters! That's a 50% increase! This shifted the save variables that were after the name, but that's only the checksum and the games played counters.

At $0CFDF9, some file name code from the Japanese versions is left in, but skipped over.

New palettes were added over unused placeholders for the castle vista during the title card, and the title card's palette itself was changed as well. And, quite intriguingly, the file select interface modified and reused the Eastern Palace palette. Those new colors didn't affect anything in the game, as no graphics used them where the palette set was used.

Graphics

A bunch of graphics sheets changed in the US version. You can see all the sheets side-by-side here.

Damaging information

A handful of enemies had their damage tables changed in the US version:

Change
Enemy Damage class JP US
00 Raven Ice rod 8 Freeze
01 Vulture Ice rod 8 Freeze
0E Snapdragon Ether 64 Freeze
13 Mini helmasaur Ether 64 Freeze
19 Poe / Hyu Fire rod 8 Burn
22 Ropa Ether 64 Freeze
4C Geldman Fire rod 8 64
Bombos Burn 64
64 Debirando Hookshot Stun 64
Fire rod 8 64
Bombos Burn 64
Quake Stun 64
71 Leever Quake Stun 64
81 Hover Bombos 64 Burn
85 Yellow stalfos Powder 0 Blob
Fire rod 8 Burn
Quake Stun Blob
86 Kodongo Fire rod 8 Burn
8B Gibdo Ether 64 Freeze
8E Terrorpin Ether 64 Freeze
90 Wallmaster Fire rod 8 Burn
A1 Freezor Fire rod 64 Burn
Bombos 64 Burn
A7 Stalfos Fire rod 8 Burn
C9 Tektite Bombos 16 Burn
Ether 16 Freeze
Quake 32 Blob

The debirando change also fixes the issue with them being knocked out of their pit, both physically and temporally.

Famous glitches

Spinspeed and Item-dashing

These two are, from a technical perspective, different consequences of the same glitch. The fix, introduced in REV1, covers both.

Right before checking for a Y button press, this small snippet of code is added:

LDA.b $5D
Get link's state
CMP.b #$11
Check for dashing
BEQ check_cape
Skip Y and B buttons

Mirror Block Erase

This is a silly glitch I've explained before, and the REV1 fix for it is just as silly. Rather than adjusting the code responsible for validating a warp to clear the block indices, the developers added a check after it:

LDA.w $012E
Get SFX2
CMP.b #$3C
Check for beep
BEQ exit
Skip block reset

Theoretically, it introduces a new glitch where a successful mirror warp does not reset the block indices if a beep is played at any point during the frame before the item gets used. At the present moment, I can't think of a way to make that happen.

Fake Flippers

Another glitch I've furiously Explicated™. Another silly "fix" too. Also another REV1 fix.

LDA.l $7EF356
Get flippers
BNE have_flippers
Allow swimming
RTS
Short circuit

This change short circuits the swim code if Link lacks flippers, which gives the splash ancilla all the time it needs to kick Link out of the water. It does not, however, remove Link itself. Instead, if he's somehow swimming without flippers, he just can't move.

Super Bunny

This fan favorite has multiple ways of being activated, but only one of them was fixed. In the routine CheckIfBunny (which is located at $1CFCE2 in the Japanese versions and $0FFD22 in the US version), a misassembled load instruction reads the low byte of the horizontal camera. The fix is to correct this instruction to read the bunny flag.

Unlike the last three, that fix was made in the US version! The bug is still present in JP REV1.

Bomb recoil

A glitch in this game that people hate is rare, and this is one of them. Bombs temporarily commandeer the sprite 0 slot to determine the recoil trajectory applied to Link. Infamously, this hijack does not fix the altitude, meaning a floating or otherwise airborne sprite in slot 0 may cause unintuitive explosion knockback.

The bug is still present in REV1, not being fixed until the US version, but the fix there is still technically buggy. The change caches the slot 0 sprite's altitude then sets it to 0. Really, it should have copied the altitude of the bomb. Knockback is still wrong, but it works in our favor.

Removing insult from injury

Don't you hate it when you're falling to Mothula and some disembodied hand grabs you and escorts you to the exit? Or when you jump into a basement filled with skeletons and turtles and some stupid block hits you with fire?

Well, lucky for you, both of these are fixed in REV1 by making Link invulnerable with the flag at $037B when he falls in a pit.

A handy fix

Another one people hate! If a wallmaster grabs Link right as he begins a northwards dash, the camera will pan upwards with the hand and Link will get stuck. This kinda sucks, especially when trying to go fast, but it isn't a softlock. Link's sword will still be primed from his dash, and it will kill the next wallmaster, whose death will reset Link's state.

The bug happens because the wallmaster doesn't send Link back to the dungeon entrance until it's off the top of the screen, but it's not in any special mode as it drags Link away. It's still using its normal "move upwards" routine that runs when it misses its target. The problem is that this routine despawns the wallmaster after its altitude overflows past 255.

You can see this for yourself by waiting for a wallmaster in the room west of the big key statue puzzle and baiting the hand above the bumper. Once the hand is on screen, move Link into the bumper so that he recoils into the wallmaster. Link will be lifted very high then get stuck. The camera pan happens with a bonk too, but those don't give enough oomph to get you frozen in place. Only speeds which outpace the wallmaster cause an issue.

The bug wasn't fixed until the US version, which implements the rather aggressive solution of clearing 5 different variables on every frame that Link is held by the wallmaster:

STZ.b $46
Clear recoil state
STZ.b $28
Clear X-axis recoil velocity
STZ.b $27
Clear Y-axis recoil velocity
STZ.b $30
Clear Y-axis velocity
STZ.b $31
Clear X-axis velocity

Only one of these was required: STZ.b $30.

Although it wasn't fixed until later, they had to have been aware of it already. Those last two variables are cleared in JP1.0 and REV1, but only once—on the frame the wallmaster grabs Link. It's a movement calculation on the next frame that sets his velocity again, allowing the camera to pan. The US version removed this single frame clear as part of the new fix.

Free EG

A hole on the third floor of the Tower of Hera is slightly too far to the right, and falling through it will allow Link to jump out of bounds. This was fixed in REV1 by moving it leftwards.

Failed fixes ? question mark?

The above bug fixes were pretty obviously intentional and successful, but not everything was. Some failed to work; some do nothing of discernible value; and some worked, fixing a problem that wasn't even present in the first place.

Something with spinning stairs

Apparently, there's a bug with stairs. I don't know what it is. The developers decided that when using spiral stairs, ancilla 0D, the fully-charged-spin-attack sparkle, needs to be deleted immediately. This change was introduced in REV1, but I can't make anything bad happen by using stairs shortly after charging a spin on JP1.0.

All ancillae are deleted as part of normal transition code anyway, so I'm not sure what this change was meant to accomplish.

It's just a menu now.

Overworld YBAs are fixed in REV1, possibly on accident. The transition submodule is explicitly set to $01 instead of incrementing it from zero. I say it's an accident because this doesn't really fix the glitch, per se. It prevents cool stuff from happening, but there's still an unsolicited menu and a wasted potion. Then there are all the other transition-based glitches that could have been mostly prevented with the same idea. None of them were.

Bomb tossing

A less widely-known glitch is that a thrown bomb briefly ignores collision at a specific time when another bomb is being lifted. The US version introduced code that seems to address this:

TXA
Get slot
INC A
Account for offset
CMP.w $02EC
Compare to lifted slot
BNE not_lifted_bomb
BIT.w $0308
Check lift flags
BMI ignore_tile_collision

Here's the punchline: it doesn't work. A tossed bomb can still be made to ignore collision.

Did they know it didn't work and leave the fix in?

Did they mess up the timing and assume the fix worked?

Perhaps they were fixing a completely different bug we don't know about?

Who knows? All we do know is that there's new code, and it appears to do nothing useful.

Sorry. Wrong world.

A curious change was made to the castle gate warp in REV1: a variable that caches your world during mirror transitions now gets cached here too. Theoretically, if the castle warp caused you to land on collision in JP1.0, it wouldn't always kick you back to the light world. In practice, that's not even possible. This was definitely a bug, but it's a bug that never happened.

Lifeguard

When Link jumps in the water without flippers and drowns, a whole slew of variables are rewritten from a block of cached values. In the US version, four camera variables are preceded by an additional check to skip them from being written on the overworld. This change seems to be either pointless or a small optimization. As far as I can tell, the cached values will always match the live values when this code is run.

A hearty mistake

By sheer coincidence, the chest game is fixed so that it no longer prevents the heart piece from being obtained in the first chest. The reason this happens to begin with is memory shared between the chest game and the decompression routines.

The chest game in Village of Outcasts uses the address $C8 to track the last prize pulled. If the prize chosen by the game is not rupees and is the same as the previous prize, it will nudge itself one prize forward.

Every time dialog is shown, the plaques used in the attract sequence are decompressed. There's no reason for this; it only serves to waste 4 frames. It also clobbers $C8. Ultimately, what you need to know is that the final value of $C8 after decompression will be the low byte of the address after the final byte of the compressed data.

In JP1.0, that value happens to be $07, which is also the prize index of the heart piece. When the chest game proctor speaks, his dialog ends up clobbering that value, and the heart piece is impossible to obtain. This can be exacerbated by bringing up the select menu after opening the first chest, setting $C8 back to $07 and making the heart impossible to obtain on the second chest too.

In REV1, this is partially "fixed" on accident. Small graphics changes were made that shifted many sheets into lower addresses. As luck would have it, the location and size of the plaque sheets now sets $C8 to $04. The bug is still there, but it prevents the single arrow from being the first prize instead of the heart piece.

In the US version, it is completely "fixed" on accident. Again, the bug itself is not even acknowledged, but the value $C8 ends up being set to is $0D, which doesn't correspond to any valid prize index. The chest game now allows any item to be obtained on the first chest, but just by stupid luck. The problem fixed itself without ever being discovered by the developers.

When I say "fixed", I just mean obtaining the heart piece from the first chest. The nudge mechanic is still broken. The item graphics themselves need to be decompressed as they pop out of the chest, which again clobbers $C8. After that call, the value is always high enough to allow any prize next. The downside is we lose the intended 1/4 odds on the heart piece when the previous prize was a bomb.

Tiny fixes

Fwsh

Slashing a closed door will play the grass-cutting sound effect. If the door is a vine or curtain, the puzzle complete jingle will also play. The closed door slashy part is an oversight that even causes an invisible tile map update to occur—invisible due to the tiles being changed to what they already are. The US version fixes this by branching further ahead when the door is not a vine or curtain, skipping over half-initialized code that the Japanese versions didn't.

Owee!

When Link touches a spike, his i-frame timer and the cape flag are checked to determine if he should take damage. Beginning with REV1, the invulnerability timer is also checked.

Smoke on the water

An interesting cultural difference between the United States and Japan is that for the latter, explosives placed in shallow water don't seem to disturb the liquid. In America, bombs placed in the water will cause a visible disturbance in the form of animated ripples. In both nations, Somaria blocks sit on water without disturbing it.

Two arrays are introduced to control these ripples: $03D2 and $03E1. The latter was previously unused memory, and the former is part of an existing array. The ripples don't draw with an explosion, so a new check is included for that as well.

Both of these arrays present new misslotting opportunities for the US version. The array at $03E1 is followed by the array of tile type IDs from the last interaction, so this doesn't open any new windows; that variable is updated then used as needed.

The interesting one is $03D2. Sort of. It's followed by an ancilla array that flags layer changes for bombs and somaria blocks that are thrown over ledges. That's not too interesting. You can keep a bomb on the upper layer when it shouldn't be. Who cares? But it sits at the end of an existing array beginning at $03CF. This is only used to position the boomerang relative Link as he winds up his throw.

The overlap is visible without any misslotting. Just place a bomb on shallow water then throw the boomerang. It sometimes disappears way off screen. If you wait, it will come back. Conversely, you might also witness the bomb's ripple turn into a glitchy mess.

The reason the boomerang messes up the graphics is that bombs only expect values of $00, $01, or $02. The boomerang will set its value from the direction Link faces: $00 for up, $02 for down, $04 for left, or $06 for right. The bomb can make the boomerang fly off-screen by this same disparity.

Being in a lower slot, the bomb will execute its code after the boomerang. Every 3 frames, $03D2,X is incremented by 1 and reset to $00 when it reaches exactly $03. Values greater than that are not reset. The graphics can never bug out if Link is facing up or down, since those correspond to lower values, but it should happen every time when facing left or right.

The details behind the boomerang's position are a bit more technical. It uses this value to index a table that tells it where to position itself relative Link during the windup animation. The table expects even indices as it's a collection of 16-bit values. An odd index will have it read misaligned data, and it happens to be that an index of $01 results in a Y-offset of $06FF, or 1791 pixels down.

This can be further corrupted by pausing the game after priming the boomerang while facing left or right. The ripple animation continues to run even while everything else is paused, so that value will keep incrementing until it overflows back to its intended range. Doing this, you can throw the boomerang with any directional offset index. Except for $03.

Bush toss

Carried sprites need to stick with Link, and part of that is copying his layer. Link's "layer" is a little overloaded, with it controlling both the physical layer for interactions and the visual priority for display over backgrounds. In REV1, carried sprites now account for this by extracting the least significant bit of Link's "layer" to copy into theirs.

Gameplay-wise, this doesn't fix anything anyone would ever notice. Other values such as $02 may be used for Link. The effect of that being copied to a sprite is it being unable to collide with other sprites if tossed while Link is landing from a cliff jump. Maybe someone somewhere sometime noticed that they didn't hit a tektite with the rock they threw, but they probably attributed that to hitboxes and not this very specific and subtle oversight.

Caw ca caw

An RTS instruction is removed from the cucco bouncing code in REV1. I think removing this short circuit fixes the null lift!

Men in uniform are attractive.

There's a small bug with the soldiers during the attract sequence regarding their weapons. In JP1.0 and REV1, the value $10 is loaded then stored to a sprite variable to give the guards a shadow. This value is then compared to $39, which will always result in a failure. The comparison is used to pick between sprite IDs $41 (sword guard) and $43 (spear guard), but because of this oversight, the latter value will always be chosen.

In the US version, the code is slightly rearranged so that the correct value (the sprite's palette) is used during the comparison. The Japanese versions were technically using red guards, but blue; the fix makes them blue guards, but blue.

An instruction that resets the guard's altitude is also moved to an earlier part of the code that involves their coordinates. Theoretically, the guards would potentially be floating with stagnant altitudes after a save and quit, but their altitude is cleared every frame somewhere else, and the screen is black during the only possible frame of float.

Goodbye

Fortune tellers have a saying that goes something like this:

ううむ,それはザンネン⋯。
また,おまちしておりますぞ。

Actually it goes exactly like that. And actually, they don't have any such saying.

That text very roughly translates to "Awww shucks. Thank you, come again!", but it's unused anywhere in the Japanese game.

The missing dialog was finally noticed for the English version, allowing this message to be spoken by the fortune tellers should you forgo their offer:

It is indeed a poor man who is
not interested in his future…
I'll be waiting for your return.

You lose.

The GAME OVER sequence got some small tinkers. The new font prompted a 2 pixel shift to the fairy used as a cursor. Behind the scenes, an extra palette loading routine is called when the letter graphics are loaded in, but it's hard to tell what exactly this fixed. If Link dies in the underworld but not a dungeon, the song queue is cleared, fixing a bug where he would respawn to silence.

I didn't realize you were already dating someone.

The fake maiden in the Thieves' Town prison will despawn herself if Link already has a follower, but only in JP1.0. Beginning with REV1, she will only despawn if Link's follower is the fake maiden. And when she does spawn, she'll reset the flag that indicates the big bomb or purple chest are parked instead of actually following.

Hurried

In the US version, the decay timer of an arrow in the wall ancilla is reduced by 32 frames from 160 to 128.

Just 5 more microseconds!

At $008208, the US version changes a write to VTIMEL from 56 to 128. This tells raster interrupts to occur 72 scanlines later, for whatever reason, possibly to compensate for timing changes that came with the new text engine.

BAGE

Have you ever heard of 1/1024th-magic? Probably not. You've surely heard of half-magic, and possibly quarter-magic (which is unused in vanilla), but 1/1024th has to be some sort of troll, right?

Yes and no.

There's unreachable debug code at $03EA1D in JP1.0 ($04FDDD in REV1 and $04EA9D in US) that checks controller input before handing out goodies.

While player 1 is holding the R button:

That's a lot of neat stuff! But you can only have it if FILE1 has a specific name. In the Japanese versions, that name is "ンルルル" (or NRURURU); in the US version, it's "BAGE" (or BAGE).

There's another difference: the magic consumption upgrade. The US version explicitly sets it to half-magic by loading a value of $01, but in the Japanese versions—both 1.0 and REV1—no value is loaded. What gets stored to the address is $0A, the stagnant low byte of the last character in the FILE1 name. For this code to even be run, that character must be "ル", which is encoded as $010A.

From here, the existence of 1/1024th-magic only requires simple mathematical deduction. A value of $00 gives no upgrade, or 1/1-magic; $01 gives 1/2-magic, and $02 gives 1/4-magic. The relationship is clearly 1/2n-magic. Thus a value of $0A (10 in decimal) would give 1/1024th-magic.

Q.E.D.

Of course, the caveat is that magic consumption upgrades are handled with a table that's only sized for quarter-magic; however, we can still perform the lookup to see how much items cost with 1/1024th magic:

Item 1/1 1/2 1/4 1/1024
Rods $10 $08 $04 $04
Medallions $20 $10 $08 $04
Powder $08 $04 $02 $08
??? $08 $04 $02 $02
Somaria $08 $04 $02 $04
??? $10 $08 $04 $08
Lamp $04 $02 $02 $03
??? $08 $04 $02 $0C
Byrna $10 $08 $04 $0C

Okay… that's not very good. 1/1024th-magic sucks. I'm glad they fixed it.

Code refactors

It wouldn't be an update without any very small driveby changes.

My personal favorite

In the routine NameFile_EraseSave, two instructions are swapped around.

The JP1.0 and REV1 code goes like this:

STZ.w $0B12
STZ.w $0B10

But the US code is as such:

STZ.w $0B10
STZ.w $0B12

Inventory check

A lot of shops have bombs, and in the third slot. REV1 optimizes this slightly by having applicable shops converge onto the same code path instead of copy/pasting.

Loud flutes

At the end of the screen load routine used by the flute menu, a small but beautiful optimization is made in the US version:

It goes from this:

CPX.w $0130
BNE different
LDX.b #$F3
STX.w $012C
RTL
different
STX.w $012C
RTL

To this:

CPX.w $0130
BNE different
LDX.b #$F3
different
STX.w $012C
RTL

Wonderful!

Location location location

A lot of code and data had to be juggled to make room for changes, especially in the US version. Any small code shift propagated through the rest of the bank, but there were also larger blocks of code moved to make way for bigger additions.

Banks 03 and 04 did a bit of code trading in both updates. In the US version, some intro code was moved from bank 0C to 02, and various routines were relocated from banks 0F, 0A, and 1C. A significant chunk of bomb draw code is moved out of bank 08 into bank 0F, and the overworld overlays are moved from bank 07 to 0E.

Documenting every single one of these isn't too interesting—it's less than trivia; but it is interesting to know that, on the whole, quite a bit was moved around to squeeze everything in.

And finally…

Engrish

The epilogue text was already English in the Japanese versions, but a few lines were retranslated:

Credit where credit is due

It wouldn't be fair to ignore the work of those who helped make the English version a reality, which is why a new credits header is added for the "English script writers" with the names Daniel Owsen and Hiroyuki Yamada under it.

The misspelling of "Gannon's Tower" is fixed to "Ganon's Tower".

Minor technical details

And to wrap things up, we'll look at the header that contains metadata about the ROM itself: