If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Development:The Legend of Zelda: Ocarina of Time

From The Cutting Room Floor
Jump to navigation Jump to search

This page details development materials of The Legend of Zelda: Ocarina of Time.

Hmmm...
To do:
Sort and move content into sub-pages for better readability.
A room from Fstdan, one of the early maps recovered from the leak.

On July 25, 2020, development resources for a number of first- and third-party Nintendo games, including Ocarina of Time, were leaked on 4chan. The files seem to have been resources sent by Nintendo to iQue in order to help them develop the iQue port of the game. Lucky us!

Sub-Pages

OoT-Desert 2 IGN.jpg
Player Abilities
Various references to removed abilities.
OoT compass 0.png
Compass Display
The remnants of an old patent still lurk in the source files...
OoTEventEditor.png
Early Flag List
Old plot progression and cut events ahoy!
TextIcon.png
Early Text Routine
A much more cumbersome way of handling dialogue.

Actors, Objects, and Animations

OoT-Iron Knuckle Eyes Jan 97.png
Unused Actors & Objects
Some of the earliest content ever made for the game.
OoT-Hyrule-OLD-Minimap.png
Unused Textures
Here lie the remnants of development past...
OoT-Epona.jpg
Removed Display Lists
Various references to removed parts of model files.
OoT-beam blade.jpg
Removed Link Animations
129 removed or duplicate animations.
MovieIcon.png
Unused Cutscenes
Grab some popcorn and watch!

Maps

OoT room 9 0.png
3D Maps
Unused and alternate 3D maps.
OoT Leak-Numbered Course Map.png
File Select Map
A very, very early Map Select.
OoT-Prerender Temple May 97.png
Prerenders
Unused and early versions of prerendered maps.
OoT bdan DD bak 0 0.png
Alternate Scene Setups
Lots of interesting actor and object setups.
AreasIcon.png
Removed Maps
Various references to removed maps.

Text

TextIcon.png
Text Comments
Comments from the developers shine light on unused text.
NotesIcon.png
Commit Logs
Take a deep dive into the development history.
OoT-Cucco Stable.png
Early File List
An early file list that looks to date from around May 1997.

Early Fishing Experiment

Hmmm...
To do:
Is it possible to get this working?

The file z_actor.h in the folder z_ocarina2 contains the following commit log note:

* Revision 1.204  1998-04-09 23:36:13+09  morita
*       For those who want to know the secrets of the secret project I'm
*       working on, put 1 in SEX(69) (using controller 2, hold R and press
*       L 6 times), then select "79: Water Temple Boss"....
*       When you do... there are details on the control scheme in 
*       /home/morita/JOY_FILES/secret.lst

The source code indicates that a memory register called SEX, known as "Rs" in the Debug ROM, was named by Kazuaki Morita. Morita is credited with programming the bosses in Ocarina of Time. Additionally, according to an Iwata Asks interview celebrating the release of Ocarina of Time 3D, the Fishing Pond was also his side project and brain child.

Morita: The Water Temple is in Lake Hylia. Aonuma-san designed that dungeon. The boss that appears there is Morpha. Just when I was making that, there was a landform like a pool.

Iwata: Morpha rises up out of the pool and fights Link.

Morita: Right. When I was making that boss, I casually…

Iwata: "Casually"? (laughs) I doubt you had that kind of time!

Morita: But for some reason I did. (laughs)

Morita: I just happened to have a model of a fish, so…

Iwata: You "just happened" to have it? (laughs)

Morita: Yes! (laughs) A model of a fish for putting in an empty bottle. I borrowed that and had it swim in the pool in the dungeon, and when I saw it swimming around, I thought, "Oh! I can go fishing!"

Iwata: What did you do for a fishing pole?

Morita: I took the model for something and made it a cylinder, and then… (gestures as if casting a fishing pole)

Haruhana: You used the motion for Link swinging his sword.

The aforementioned note seems to be instructions from Morita to the other staff for checking out the in-progress version of the fishing functionality he was working on. Following the instructions in the note verbatim produces no noticeable results upon entering Morpha's boss room from the Map Select screen, regardless of Link's age. Even with SEX69 (Rs69) [no comment...] set to 1, the Morpha battle starts as normal. This may indicate that the "secret" that was accessible via this method may have been removed sometime in the 7 months between the commit log note and the game's release.

However, one additional point to keep in mind is that the Water Temple boss is now number 80 in the Map Select options, while the Water Temple is number 79. This may indicate that Morita's fishing preview was created at a time before the boss rooms were split off from their Temples into separate map files, as they are in the final game. As such, perhaps if one were to attempt to enter Room 0x16 of the Water Temple (the boss transition room) without automatically being loaded into the map file for Morpha's boss room in the final game, one could still see the intended effect.

In the final game, Morpha's actor, En_Mo, contains the following strings:

fishing_line_MODE
fishing_line_model

Conversely, the strings that can be found in the actor for the fishing pond, En_Fish, are below:

fs_line_MODE
fs_line_model

Spawn An Arwing

Hmmm...
To do:
Add the chest spawn stuff from Link's actor, too.

The source code indicates that a memory register called KAZ, known as "RK" in the Debug ROM, was named after Kazuaki Morita. Morita is credited with programming the bosses in Ocarina of Time.

A file called z_actor.c in the folder z_ocarina2 contains the following code used for spawning the Arwing.

#ifndef DEBUG_MODE_NOINPUT    
    if(KAZ(0) == -100) { /* Treasure Chest Fail Test */
    Player_actor    *pla = (Player_actor *)get_player_actor(game_play);
    
    KAZ(0) = 0;
    /* Secret Set */
    Actor_info_make_actor(&game_play->actor_info,
                  (Game *)game_play,
                  En_Clear_Tag,
                  pla->actor.world.position.x,
                  pla->actor.world.position.y + 100.0f,
                  pla->actor.world.position.z,
                  0,
                  0,
                  0,
                  1);
    }
#endif    

As it suggests, setting KAZ00 (RK00) to -100 spawns an Arwing above the player, then rolls the value back around to 0.

Removed Map Events

Ocarina of Time has a complex story and a big map to traverse. As such, the game contains a map pointer system to help guide players to their next objective and mark where they've already been. After achieving certain objectives, a flashing dot appears on the world map to show where one should go. A static dot appears on the map once a location has been visited. The code in z_kaleido_scope.c that handles these functions contains several areas with commented-out cases that preserve old story events.

Events in red were removed during development.

Lake Hylia

  • A static dot appears at Lake Hylia after you enter it for the first time.
  • A static dot appears at Lake Hylia after you obtain the Scale.
  • A flashing dot appears at Lake Hylia after you obtain the Iron Boots.
  • A static dot appears at Lake Hylia after you clear the Water Temple (Adult) and obtain Ruto's seal.

Lon Lon Ranch

  • A static dot appears at Lon Lon Ranch after you clear the Deku Tree.
  • A flashing dot appears at Lon Lon Ranch after you speak with Kaepora Gaebora upon leaving Kokiri Forest.
  • A static dot appears at Lon Lon Ranch after you obtain the Weird Egg ("Egg of Awakening") from Malon.
  • A flashing dot appears at Lon Lon Ranch after you obtain the Fairy Ocarina from Saria.
  • A static dot appears at Lon Lon Ranch after you obtain Epona's Song.
  • A flashing dot appears at Lon Lon Ranch after you wake Talon at Kakariko Village.
  • A static dot appears at Lon Lon Ranch after you escape from it and obtain Epona.

Hyrule Castle Town

  • A flashing dot appears at Hyrule Castle Town after you clear the Deku Tree.
  • A static dot appears at Hyrule Castle Town after you obtain Zelda's Letter.
  • A flashing dot appears at Hyrule Castle Town after you clear Dodongo's Cavern.
  • A static dot appears at Hyrule Castle Town after you obtain Zelda's Lullaby.
  • A flashing dot appears at Hyrule Castle Town after you clear Jabu Jabu's Belly.
  • A flashing dot appears at Hyrule Castle Town after you obtain the Ocarina of Time.
  • A static dot appears at Hyrule Castle Town after you obtain the Master Sword.
  • A flashing dot appears at Hyrule Castle Town after you clear the Forest, Fire, and Water Temples.
  • A static dot appears at Hyrule Castle Town after you first return from the Adult Era to the Child Era.
  • A flashing dot appears at Hyrule Castle Town after you obtain the Light Arrows.

Kakariko Village

  • A static dot appears at Kakariko Village after you enter it for the first time.
  • A flashing dot appears at Kakariko Village after you obtain Zelda's Lullaby.
  • A static dot appears at Kakariko Village after you obtain the Sun's Song.
  • A flashing dot appears at Kakariko Village after you obtain the Master Sword.
  • A static dot appears at Kakariko Village after you obtain the Hookshot.
  • A flashing dot appears at Kakariko Village after you obtain the Song of Storms.
  • A static dot appears at Kakariko Village after you clear the Bottom of the Well ("Shadow Temple (Child)") and obtain the Lens of Truth ("Looking Glass of Truth").
  • A static dot appears at Kakariko Village after the well water has disappeared.
  • A flashing dot appears at Kakariko Village after you view the Bongo Bongo ("Shade Stalker") cutscene.
  • A static dot appears at Kakariko Village after you clear the Shadow Temple (Adult) and obtain Impa's Seal.

Lost Woods

  • A static dot appears at the Lost Woods after you enter it for the first time.
  • A flashing dot appears at the Lost Woods after you speak with Mido after obtaining Zelda's Letter.
  • A static dot appears at the Lost Woods after you obtain the Fairy Ocarina from Saria.
  • A static dot appears at the Lost Woods after you obtain Saria's Song.
  • A flashing dot appears at the Lost Woods after you obtain the Hookshot.
  • A static dot appears at the Lost Woods after you clear the Forest Temple.


(Source: GlitterBerri)

Items

z_parameter_h.h contains early names for some items, as well as identifications for others that were dummied out of the final item list.

z_parameter_h.h
ID Filename Description Translation Final Name
0A H_S_hookshot 10『ショート・フックショット』 10: "Short Hookshot" Hookshot
0B H_L_hookshot 11『ロング・フックショット』 11: "Long Hookshot" Longshot
0F H_magicglass 15『まことの虫メガネ』 15: "Magnifying Glass of Truth" Lens of Truth
1B H_bottle_7 27『ルトの手紙』 27: "Ruto's Letter" Letter
1C H_bottle_8 28『炎』 28: "Fire" Blue Fire
37 H_reserve_30 55 大人『ゴロン刀引換券』 55: Adult "Goron's Sword Claim Check" Claim Check
3B H_sword_0 59『ナイフ』 59: "Knife" Kokiri Sword
50 H_bracelet 80『銅のブレスレット』 80: "Bronze Bracelet" Goron's Bracelet
56 H_purse_2 86『大人のがま口』 86: "Adult's Purse" Adult's Wallet
57 H_purse_3 87『大金持ちがま口』 87: "Wealthy Man's Purse" Giant's Wallet
5A H_melody_1 90『風のメヌエット』 90: "Minuet of Wind" Minuet of Forest
66 H_seal_medal_1 102『サリアの封印』 102: "Saria's Seal" Forest Medallion
67 H_seal_medal_2 103『ダルニアの封印』 103: "Darunia's Seal" Fire Medallion
68 H_seal_medal_3 104『ルトの封印』 104: "Ruto's Seal" Water Medallion
69 H_seal_medal_4 105『ナボールの封印』 105: "Nabooru's Seal" Spirit Medallion
6A H_seal_medal_5 106『インパの封印』 106: "Impa's Seal" Shadow Medallion
6B H_seal_medal_6 107『ラウルの封印』 107: "Rauru's Seal" Light Medallion
71 H_N_coin 113『Nコイン』 113: "N Coin" Gold Skulltula
76 H_map 118『マップ』 118: "Map" Dungeon Map
77 H_key 119『ダンジョンの鍵』*/ 119: "Dungeon Key" Small Key
7A H_heart_1 122『ハートの欠片(1/4)』 122: "Piece of Heart (1/4)" Piece of Heart
7B H_heart_2 123『ハートの欠片(2/4)』 123: "Piece of Heart (2/4)" [Removed]
7C H_heart_3 124『ハートの欠片(3/4)』 124: "Piece of Heart (3/4)" [Removed]
7D H_note_1 125『音符:上』 125: "Note: Up" [Removed]
7E H_note_2 126『音符:下』 126: "Note: Down" [Removed]
7F H_note_3 127『音符:左』 127: "Note: Left" [Removed]
80 H_note_4 128『音符:右』 128: "Note: Right" [Removed]
81 H_note_5 129『音符:A』 129: "Note: A" [Removed]
87 H_rupy03 135『大ルピー(50ルピー)』 135: "Big Rupee (50 Rupees)" Purple Rupee
89 H_rupy05 137『銀のルピー(10ルピー)』 137: "Silver Rupee (10 Rupees)" [Removed]

Additionally, Silver Rupees are worth 5, not 10, in the final game.

Music

Hmmm...
To do:
Volunteers with keen ears can help determine what is causing the byte differences in particular tracks.

They're not new masterpieces from Koji Kondo, but near-final music sequences exist in z_ocarina/data/ZeldaAudio_music.o. Rather then having new melodies, small differences can be heard in the notes of a few tracks. These are very close to the final sequences used in z_ocarina/data/lib/ZeldaAudio_music.o.

Water Temple

Around 0:39 in the track, the dulcimer seems to be louder and more staccato.

Ura Zelda Leftovers

xxx

Lodgenet Gateway Build Info

Hmmm...
To do:
Thoroughly research all references to GATEWAY_VERSION.

Lodgenet was a service predominately used in North America that allowed hotel guests to play Nintendo 64 games from their rooms. Each game featured on Lodgenet had to follow a list of guidelines to be published to the service, namely remove the ability to save and remove multiplayer features (as can be seen in this Star Fox 64 video). The Ocarina of Time Gateway version is technically the only released version of OoT that has yet to be documented and analyzed. Thanks to build information found in the source listed as GATEWAY_VERSION, it offers insight of what was included in this undocumented build.

Here is a function to clear the saves for Lodgenet usersː

# endif    /* GATEWAY_VERSION /
    / ゲーム前CLEAR─RAM /
    ZCommonSet(game_info.restart_flag, 0);
    ZCommonSet(game_info.restart_data[0].scene, -1);
    ZCommonSet(old_bgm, 255);
    ZCommonSet(old_env, 255);
    ZCommonSet(game_info.name_display, ON);
    ZCommonSet(game_info.dog_flag, 0);
    ZCommonSet( event_fg, Event_MD0 );
    ZCommonSet( total_event_fg, TEvent_MD0 );
    ZCommonSet(event_inf[0], 0);
    ZCommonSet(event_inf[1], 0);
    ZCommonSet(event_inf[2], 0);
    ZCommonSet(event_inf[3], 0);
    ZCommonSet(last_time_type, 50);
    ZCommonSet(game_info.shield_magic_timer, 0);
    ZCommonSet(life_mode, 0);
    ZCommonSet(magic_flag, 0);
    ZCommonSet(keep_magic_flag, 0);
    /[ファイル選択時 に お願いしたい物]*/
    ZCommonSet( NottoriBgm,   0 );
    ZCommonSet( kankyo_time,  0 );
    ZCommonSet( next_wipe,    0xff );
    ZCommonSet( next_daytime, 0xffef );
    ZCommonSet( doukidemo,    0 );
    ZCommonSet( Kenjya_no,    0 );
    ZCommonSet( next_zelda_time, 0xffff );
    ZCommonSet( game_info.next_walk, 0 );

According to the section "ロムヘッダ定義(仮)" (ROM Header Definition (Temporary)) in GNUmakefile,v the initialization for the PAL Gateway version is NZLL, while the default Gateway version is CZLG. In comparison, the codes for the other versions of the final game are CZLJ (Japan), CZLE (North America), and NZLP (PAL).

ROM Versions

  • ROM_C: C++ ROM.
  • ROM_D: Debug ROM for use on an emulator board.
  • ROM_F: Final ROM.
  • ROM_S: Show ROM.
  • ROM_X: Debug ROM for use on real hardware.