Submission Text Full Submission Page

Submission notes

This TAS was finished more than a year ago but I have not submitted it because I at the time believed TASVideos to be too strict to accept this TAS. I am submitting it now because recently the "Triforce%" run was accepted as an "Event", and believe that TASVideos are more open to welcoming non-standard TASes. I think a 100% TAS of Ocarina of Time fits right in, even if it is a bit non-standard (see playback information)

Commentated Version

The commentated version is a console playback on a real N64:

Annotated Version

BizHawk playback with item trackers and notes:

Game objectives

This Tool-Assisted Speedrun aims to beat The Legend of Zelda: Ocarina of Time, without the use of Stale Reference Manipulation, while collecting "everything" in as little time as possible, and Ganon must also be defeated disallowing credits warp. This category is widely known as "100%", and the full list of items required can be found here: https://docs.google.com/spreadsheets/d/1PqqpZs_wRDmMeTdtFCdiNNhC4qIB0_PncwH7Uzdhlh0/edit#gid=0
The run utilizes the N64 1.0 version of the game for some version exclusive glitches, like getting the Eyeball Frog early and a 1.0 exclusive way of doing Quick Putaway.

Game information

  • Game version: JPN 1.0
  • SHA1 Hash: c892bbda3993e66bd0d56a10ecd30b1ee612210f

Emulator information

  • Emulator: BizHawk
  • Emulator version: 2.9.1
  • Core type: Interpreter
  • Video plugin: Angrylion
  • Video resolution: 320x240
(Core type, video plugin, video resolution and profile doesn't matter for this specific playback)

Timing information

  • TAS timing (Power on to last input): 3h 07m 24.17s
  • New RTA timing (Link's first movement to Ganon final blow cutscene): 3h 01m 17s

Playback information

Here are all the files that are needed for playback. The macro does not use the .bk2 file to actually play back, but uses the included .gzm file, see below for more information.
This movie was made specifically for the OoT Practice Rom known as GZ. GZ gives the possibility for creating savestates and playing back movies (macros) inside OoT. This makes it able to play back on console. This movie best plays back directly on the GZ rom on a real N64, by loading it via an Everdrive or similar.
The embedded youtube video linked in the submission is a BizHawk playback of the .gzm macro. I chose Angrylion as the video plugin since it is the most accurate to what a real N64 shows.

Playback on BizHawk

The movie can alternatively be played back on emulators such as BizHawk, but the macro needs to be injected directly into the GZ rom for playback on emulator (Guide). To create a 1.0 rom that plays back on bizhawk please clone this fork of GZ https://github.com/MrPancakeTurtle/gz (and see https://github.com/glankk/gz/blob/master/BUILDING.md ) and run CPPFLAGS='-DEMBEDDED_MACRO=/path/to/macro.gzm' ./make-rom /path/to/oot-jp1.0.z64 where macro.gzm is from the submitted .zip file and oot-jp1.0.z64 is an original ROM of Ocarina of Time 1.0 JP. When opened in a fresh version of GZ you will need to use L+R to open (and close) the menu, then navigate via DPAD and L to the macro to start it.
  • The included .bk2 file has the inputs for starting the macro like the embedded video. You can also toggle any other settings you see fit manually instead of using the .bk2.
  • The created ROM is likely too big for the default mupen64plus core (since an entire macro is injected directly into the ROM), and so I've included a .dll that adds extra RAM to m64p in the submission (should be placed in /path/to/BizHawk/dll/).

Comments

The first full single segment 100% TAS of Ocarina of Time. The previous 100% TAS from 2015 by MoronicTAS and GCTK24 was getting dangerously close to getting beaten but RTA speedruns, so an updated version was needed. Some major glitches discovered since then change the route massively. Additionally, RBA was not allowed at the time of the previous TAS but is now and is heavily used, mostly to always have bombchus available. Equip swap, which allows equipping items as any age, was also discovered which allows for better routing such as Jabu-Jabu's Belly as adult. Many other tricks were found since then to speed up segments too, such as early bow with hookshot jump, bug push Door of Time skip, frozen timer with master sword and glitched damage with Quick Putaway. Since the run is now over a year old it has, unfortunately, been outdated by a few new tricks since.

General tricks and glitches

Check this page for an explanation of various tricks and glitches used in the TAS.

More tricks

Twisted Bombchu

While holding the ESS position and a bombchu, dropping it with the shield and a changed angle at the same frame makes the bombchu have weird effects: the bombchu can explode when meeting a wall, and can go through doors. This trick is used multiple times in the TAS as it is one of the fastest way to blow up a chu to use it for a HESS, or to kill skulltulas before entering a door.

Quick Putaway and Glitched Damage

Quick Putaway is a state where Link will be able to put his item away fast. You achieve this by trying to put away an item and interrupting it the frame after. If this is done with a Deku Stick, and you break it in a way that would normally give you an indefinite broken stick you put it away instantly and get glitched damage. This glitched damage has many properties and the most useful is Din's Fire property. Since crouch stabs use the last damage value you now have this glitched damage every time you crouch stab. On the 1.0 version of the game exclusively you can quickly put away your sword just before walking off a ledge and then, the frame after, press B to do a jumpslash in the air, and do an "Empty Jumpslash". This also gives you glitched damage with the same properties as a Deku Stick, but is much more useful on N64, as Deku Stick crashes as adult.

Text Transfer Glitch (Skipping Trade Quests)

Link can interrupt himself speaking to NPCs if he takes damage on the same frame he initiates the talk, and throws a Deku Nut the frame after. This puts him in a weird glitchy state called "Speak A" (because on English the A button would say "Speak" even after walking away from the NPC). In this state the game still thinks Link is talking to the previous NPC since the textbox didn't finish. If you then bring up a YES/NO textbox with Saria's Song you can run the dialogue they would normally have associated to a YES/NO textbox. This is known as Text Transfer Glitch. This allows us in two cases to skip a lot of the trade quests. By using Speak A we can get the Broken Goron Sword from the carpenter in Kakariko, which is the same carpenter you'd normally trade in Gerudo Valley as Adult. By doing Double Speak A we can sell the Bunny Hood to the running man without ever having gotten it, skipping the entire Mask Quest. There are other methods of performing Text Transfer Glitch, but Speak A is the only one used in the run.

Bug Push Door of Time skip

Getting Past the Door of Time as Adult and being able to have Bottle on B for doing Bottle Adventure is very hard to achieve on N64, especially without the Hover Boots. In the run bugs are used to give us just enough push to get past the door and clip back in. The bugs hitboxes are tiny, and Links hitbox is only large enough to interact with the bugs on a very few specific frames of his animations, one of them being the landing frame of a backflip. The position of the bugs, Link's movement angle, and Link's position all play a factor on the trick, and since the bugs' movement is random and they interact with each other, it is extremely precise.

Reverse Bottle Adventure (RBA)

I recommend getting somewhat familiar with RBA before watching the run, to truly appreciate all the drops/catches of bugs.

Game version choice

The TAS was made on the Japanese version of the game because the text is faster. The version 1.0 was chosen based on the benefits it provides in terms of glitches, summed up in the table below:
JPN 1.0JPN 1.1 JPN 1.2 (Wii VC)
Bongo Bongo Quick Kill✅Yes✅Yes❌No
Deku Stick as Adult❌No❌No✅Yes
Early Eyeball Frog✅Yes✅Yes❌No
1.0 Quick Putaway✅Yes❌No❌No
Broken Goron's Sword as Child ✅Yes❌No❌No
Skip Mask Quest✅Yes❌No❌No
The overall timesave is hard to tell. 1.0 and 1.1 are both exclusive to N64 so therefore 1.0 is strictly better. But 1.2 is on Wii VC and while it doesn't have many of the glitches, it has less lag, it has slower alternatives and more importantly Deku Stick as Adult. Deku Stick as Adult is very useful as it can both be used for Quick Putaway on 1.2, a fire source, a damage source and lets you skip hammer until way later in the route. The entire route would change and the only way to properly compare 1.0 and 1.2 would be to make an entire full TAS of both routes.
Note: the last two glitches are possible on all versions but they would require slower and less convenient methods of performing the Text Transfer Glitch.

Stage by stage comments

The run is very long and is generally split into Child and Adult segments. The run already has a commentated version too, that goes into specific stuff.

Child 1

The goal of the first Child segment is to get the essentials and then go Adult as fast as possible, since Adult Link is usually faster for moving around, and also has access to learning Warp Songs.
  • In Kokiri Forest, Sword and Shield is obtained and then a WESS is used to clip through the guard to leave the forest early.
  • A time of day cycle is now in effect until Link reaches Hyrule Castle, so some daytime is wasted by going to Zora's River first and collecting the first skulltula and the magic beans. A-Slide and Z-Slide is used to not waste too much time.
  • The two most important items for this category are Bottle and Bombchus, both of which can be found in Kakariko, so a WESS is used to get there fast from Zora's River. Staying in the current for additional speed is faster than going on land.
  • Bottle is equip swapped over beans to be able to duplicate it later.
  • Bombchus are obtained via Bottom of the Well by unloading the basement, and all Skulltulas are collected on the first trip to Bottom of the Well to skip the Second Trip which saves 30 seconds and enables better routing.
  • While waiting for day to be able to talk to Zelda, some RBA is done. The most important one here is setting the Bombchu count to 29. The other RBAs gives 3 extra bottles in various inventory slots.
  • Waking Talon is required for Milk Bottle and Epona's Song. Visiting Zelda is required for Zelda's Lullaby which is an important song, since all the Fairy Rewards are behind it.
  • After getting these essentials the goal is becoming Adult, which can easily be achieved by jumping past the Door of Time.

Adult 1

As adult, Link can finally start learning Warp Songs so child can move around faster, and also start really collecting items and skulltulas.
  • The first thing is rescuing Epona, which can be done by hovering over the fence in Lon Lon Ranch. This cutscene also functions as a buffer to allow a Big Poe to spawn, which can then be duped 10 times for another Empty Bottle from the Poe Collector. Link will never be in Hyrule Field as Adult again, so this is the best time for these two objectives.
  • Next up is Sun's Song and Hookshot, which are both in Kakariko and are very convenient for collecting skulltulas. And a Bombchu refill while waiting for Dampé.
Even though Sun's Song is collected, the goal is to play it as few times as possible, making a lot of time of day cycles very close. There are only a few frames left of night when entering Zora's Domain later for example.
  • A cutscene skip is performed for Song of Storms which allows Link to run around with the ocarina notes up and play them to get the song as a heart piece is collected.
  • Green Potion is bought to be able to RBA the Adult Trade Slot, which allows for changing the Adult Trade Slot when convenient.
  • The next important item is Magic, since that unlocks the remaining Fairy Fountains, the fastest way from Kakariko to Magic is simply by going out of bounds up the mountain.
  • While in Death Mountain Crater Link would like the Bolero of Fire Warp Song, but watching cutscenes is slow. Getting a glitchy ledge grab into a cutscene allows Link to fall out of bounds during the cutscene and void, while still getting the song.
  • In Sacred Forest Meadow, the same principle of skipping cutscenes by voiding out applies. An RBA is performed to once again refill Bombchus and also put a bottle in Adult Trade Slot using Green Potion.
  • The bottle in Adult Trade Slot allows for getting Eyeball Frog early by holding R. Pausing on ice removes ice physics for one frame, allowing for changing direction instantly and superswim to the fountain.
  • Ice Cavern is very heavy on cool clips and starts out by going out of bounds to skip killing the Freezards. Link then proceeds to clip through all red ice and even clips through the gate leading to Iron Boots that usually needs 5 rupees to be collected.
  • Another way to skip cutscenes is to die, which is necessary to skip the Serenade of Water cutscene, since it activates immediately upon getting Iron Boots.
  • The loading zone to enter Jabu-Jabu's Belly is still there as adult, it is just underneath the ice and needs precise movement to enter.
  • The switch before the Boomerang Room is hardcoded to require Ruto, and there is no fast way to skip her.
  • In Water Temple the first instance of Empty Jumpslash Glitched Damage is used to skip needing arrows or Din's Fire to light some torches. Water Temple is also routed before getting too many hearts, since Dark Links health is directly tied to Links maximum hearts. Longshot is also convenient.
  • Adult Link can use Boomerang just fine if it is equipped. Equipping it with the Equip Swap trick eliminates the need for Child Link to enter any Dungeons.
  • Barinade to King Dodongo is the first Wrong Warp in the run. This Wrong Warp is quite complicated because Ruto is inside the warp.
  • After the Wrong Warp Link has Unrestricted Items and can use Farore's Wind in Boss Rooms. Setting it here sets FW at "Leaving Barinade's Boss Room" entrance. Using this during the King Dodongo Blue warp gives another Wrong Warp to... King Dodongo! This is because "Leaving Barinade's Boss Room" is the same entrance used for both Wrong Warps. The second Wrong Warp is only used to skip the Goron Ruby cutscene.
  • After beating King Dodongo Link finally gets Bombs, usually a really important item. Unfortunately Bombs have not been prioritized here because Bombchus are faster in most scenarios, especially when you can refill them at will with RBA. So Bombs are only used when they are convenient or when there is a shortage of Bombchus.
  • In Fire Temple Link doesn't want to talk to Darunia, but also wants him to move as he does after talking. By talking to him when stepping on the switch we retain control and he also moves out of the way for later. Fire Temple also has the first use of a Twisted Chu under a wall to kill a skulltula before entering. Fire Temple is fairly early in the route, because later Link will not have sword on B, but still needs a weapon. Since Deku Sticks crash as Adult on N64, Megaton Hammer is the only option.
  • Forest Temple is the only Dungeon that needs to be beaten before Link can go back in time again. A cutscene skip is performed at the 4 Poes to allow the elevator to stay up without having to kill the Poes, so Link can enter the basement after collecting the courtyard skulls.
  • Using a Triple Bomb Push with a Hammer Recoil it is possible to open the door far enough away to stay inside the wall in the Stalfos room. Before the Bombs explode there is just enough time to hookshot the chest to get a hookshot jump, to reach the upper room and and walk away from the door, setting the respawn point high enough to trigger the Stalfos, then void out to start the Stalfos fight.
    • All 3 bombs must be dropped on the first possible frame and in a 1x1 unit range.
    • Hammer must be drawn on first possible frame.
    • Crouchstab must be done on first possible frame.
    • Taking out hookshot and hitting the chest must be done on first possible frame.
  • After getting Fairy Bow a "Boss Key Skip" is performed by going out of bounds and hitting the loading zone behind where the boss door would be. This can be done in every dungeon and will be seen again.
  • A cutscene skip is performed on the blue warp by dying, to avoid watching the lengthy Forest Medallion Cutscene.
  • The Bug Push Door of Time Skip is then performed twice, as Sun's Song is used to skip the Prelude of Light cutscene, putting Link back at the beginning of Temple of Time.

Child 2

The shortest segment of the run. This segment only serves to activate Bottle Adventure for Adult Link.

Adult 2

Now with Farore's Wind on B, Adult Link can set it anywhere, which makes more Wrong Warps possible.
  • Setting Farore's Wind in Temple of Time allows for a Wrong Warp using the Master Sword entrance, and also allows an easy warp back to behind the Door of Time.
  • Deku Tree is extremely fast as Adult, since Adult has Longshot and Hammer available. The only roadblock is the crawlspace, which is easily skipped with a hover out of bounds.
  • Wrong Warping from Deku Tree with the Temple of Time Farore's Wind takes Link to the Rauru cutscene that happens after beating Shadow Temple and Spirit Temple, and this puts Link in Desert Colossus, which is a very fast way to get to Spirit Temple. For now only a few things are collected along with Requiem of Spirit to get back to Spirit Temple later.
  • Another instance of hookshot jump is used with a skulltula token to get Fire Arrows easily without raising the water in the lake by beating Water Temple.
  • By showing the Prescription (that was gotten by failing to deliver the Eyeball Frog) to King Zora and doing the same hold R trick as last time he will give the Zora Tunic instead of Eyeball Frog, then show prescription again get the actual Eyeball Frog.
  • Since Farore's Wind was last used for a Wrong Warp, the warp point is still set. So using Farore's Wind takes Link back to Temple of Time, but the Eyeball Frog timer expires. By mashing B every frame (game runs at 20, polls inputs at 60, button needs to be pressed and released 20 times a second) the textbox can stay on screen and prevent Link from being warped back to King Zora. When pulling out the Master Sword the timer expiry gets interrupted when Link turns child and now Child Link has a frozen timer.

Child 3

The longest child segment of the run. This segment aims to get all the remaining items that can only be gotten as child, and a few things that are faster as child because they are on the way.
  • Almost as soon as this segment starts it is evident how useful it is to collect the Warp Songs as Adult before playing as child, as getting Saria's Song and getting to Death Mountain Crater is just a melody away.
  • The frozen timer is an important tool for a Wrong Warp, but almost all the NPCs talked to from going child to doing the Wrong Warp can unfreeze the timer if the textboxes aren't cleared frame-perfectly. All textboxes are closed frame-perfectly regardless, but this would be an issue with attempting this route in real time.
  • While collecting soil skulls it is easy to use the same bugs to do RBA. Green Potion is RBAed again to replace the Eyeball Frog with a bottle, another prerequisite for the Wrong Warp.
  • During fishing Child Link can actually get both rewards by doing collection delay for Gold Scale first, which is the Adult reward, then afterwards obtaining the heart piece, which is the Child reward.
  • Collecting 2 skulltula tokens at the same time overlaps their cutscenes.
  • In the Hyrule Field Web Grotto near Gerudo Valley, Child Link makes use of Deku Stick Quick Putaway Glitched Damage to burn the web and get the token, since using Din's is very slow.
  • The seemingly random movements and equips Child Link does in front of the running man is actually to get Double Speak A so that Text Transfer Glitch can be performed to sell the Bunny Hood, even though we never got it. We only opened the mask shop by showing Zelda's Letter to the guard in Kakariko, but never got a mask.
  • By letting a trade item timer expire with no trade item in your inventory (hence getting rid of Eyeball Frog) at the time as triggering the Zelda Escape cutscene, if you entered Hyrule Field from Gerudo Valley, you Wrong Warp to the Nocturne of Shadow cutscene, skipping the Zelda Escape cutscene. This also skips the first half of Nocturne of Shadow cutscene and the requirement of Fire Medallion, allowing another Wrong Warp from Fire Temple.
  • While in Kakariko it is important to get Broken Goron Sword with Text Transfer Glitch, so that it is possible to finish the Adult Trade Quest.
  • Since Link already has 4 bottles, no item get animation plays when the 4th bottle from source is obtained from Talon.
  • As Bunny Hood was sold to running man the Mask Salesman awards us with the Mask of Truth. But the Goron Mask is also needed for BA later, so both can be snuck out by equip swapping the Mask of Truth.
  • In Lost Woods it is possible to dupe rooms since it has a black transition between them. This is useful for upgrading Deku Stick Capacity twice. It is also useful for unloading rooms, allowing to get the Bullet Bag Upgrade twice. By pulling a Bomb when getting the Deku Nut Capacity upgrade it is possible to delay it until Link is exiting the grotto, skipping the animation.
  • It is important that Child 3 goes Adult with Goron Mask on C-Right as Child has gotten everything, and Goron Mask will only be used for BA.

Adult 3

The last segment of the run. This segment aims to clean up the remaining items and dungeons, and beat Ganon.
  • This section is tight on Bombchus - we can't RBA because we need to keep Farore's Wind on B for a long time. So it's time to make use of some bombs.
  • A Triple Bomb Push is used to skip the loading zone on the stairs, to enter Shadow Temple. The Hover Boots are finally picked up here - since they aren't needed for anything in a TAS they are delayed until now, as opposed to RTA that likes to get them early on. A Boss Key skip can be performed from the Hover Boots room with some well placed bombs and enough speed to clip out of bounds.
  • The 1.0 Bongo Bongo Quick Kill is not so quick here. The Hammer doesn't actually damage Bongo Bongo, and Farore's Wind on B is still important, so the default crouch stab value of 1 has to be used. The cutscene skip on the blue warp is very easy and fast with Farore's Wind.
  • Bombs can be exploded quickly with the Bow. It's not as fast as instantly exploding a Bombchu, but it makes it worth equipping Bow and Bombs when there is an extra available C-button slot.
  • In Water Temple too Farore's Wind on B proves fast to skip the cutscene. It's slightly faster to skip equipping hookshot for Morpha is actually slightly faster. Farore's Wind was placed in Shadow Temple so it is straight back to seeing some cool Hover Boots HESSes.
  • Similar to the MST TAS a token delay Hookshot Jump is used to reach the Mirror Shield, but has to be done using a slower method, cause it is important to collect the token while actually setting its flag, since otherwise it would invalidate the source requirement. This has been the case for all tokens so far.
  • An easy way back to the bottom of Spirit Temple after getting a key is to clip out of bounds and megaflip to the loading zone that leads back out to Desert Colossus.
  • To get to the Boss after collecting the skulls in Spirit Temple, the fastest way is to climb the statue and clip into the head, then jump to the loading zone.
  • To skip the Nabooru Cutscene a chu is sent to hit the Nabooru Knuckle as Link does a glitchy ledge grab, that allows Link to void out at the same time the cutscene starts, like the Bolero of Fire cutscene skip.
  • The Twinrova fight is manipulated to have 3 fast ice shots, with the fire as close as possible to get hit faster, into the fourth shot being, since that is faster than getting 4 of the same type. For phase 2 ice and making sure she doesn't move is manipulated. Ice lags less than Fire on a real N64 so this is the reason for the choices.
  • The cutscene skip is again performed with Farore's Wind, proving again and again just how useful it is to have on B.
  • Freeing the carpenters in Gerudo Fortress is required for the Gerudo Card and playing Gerudo Archery for its rewards.
  • In Gerudo Training Grounds the only item necessary is Ice Arrows. Conveniently they are in a chest right in the middle that a weirdshot reaches easily.
  • In Gerudo Valley it is faster to wait for morning than it is to actually play Sun's Song for daytime, so there is not much rush here.
  • Epona is finally required, for a heart piece and for the Quiver. It is possible to dupe the Quiver by unloading the Gerudo as she hands over the Quiver. This is abused to get the 40-arrow and the 50-arrow quivers.
  • Before heading to watch Light Arrow Cutscene a bottle is placed on the B button again. This is important as during the cutscene when it shows a flashback of Child Link it actually puts Link back in time. This activates BA and since Child Link had Goron Mask on C-Right Adult Link now has Item 117 on B. This is a glitched item, but it works as Eye-Drops for Biggoron.
  • With a precise HESS it is possible to reach Ganon's Castle with just hover boots, a twisted sidehop and a jumpslash. This is faster than hovering in or watching the rainbow bridge cutscene.
  • The only thing 100% needs from Ganon's Castle is Golden Gauntlets. Since Warp Songs can't be played in Ganon's Castle the fastest way out is megaflipping into Ganon's Tower and playing a Warp Song from there.
  • Since Broken Goron Sword was obtained as Child it is possible to show this to Biggoron to get the Prescription back. With Prescription in the inventory the Glitched Item 117 on B can be shown as Eye-Drops for Biggoron, and he will hand over the claim check. The only thing left to finish this quest is letting time pass with Sun's Song to get Biggoron Sword.
  • There are two remaining skulls inside Dodongo's Cavern since they were slow to get last time Link was here. The cutscene of blowing up the wall can be skipped with a ground clip and then it's just a matter of collecting them.
  • The last skulltula is collected in the bottom of Fire Temple, before going to fight Volvagia. The Boss Key was obtained earlier by RBAing Fire Arrows.
  • As the Heart Container from Volvagia is collected the only thing that is missing is the Fire Medallion, and beating Ganon. It would be nice if they could be combined. So a Wrong Warp is used from Fire Temple to the Tower Collapse Sequence.
  • After arriving at Tower Collapse, it is possible to hover up to a ledge above the door and ground clip to get out of bounds. From here it is possible to reach the very bottom of collapse, and with a superslide end up at the Final Fight.

Improvements

Unconfirmed Possible Improvements

  • Getting Bug Push Door of Time Skip without the need to drop the Bugs a second time to get them to dig faster. This would be even more precise than the existing trick and has not been proven possible.

Untested Improvements

  • Switching the entire route to iQue and exploiting the new Dynawarp glitch

Confirmed Improvements

  • It is possible to save a Bombchu on the hover going to the top of Lakeside Lab
  • Boomeranging the Kakariko watchtower Skulltula Token from a short hover, instead of climbing the Ladder
  • Superslide earlier in Shadow Temple when going to the Hover Boots to skip extra textboxes
  • Pulling Bombs earlier for Water Temple Boss Key Skip
  • HESSing through the Shadow Temple gate to the crusher room Skulltula
  • 1 Less Backflip during Spirit Temple Boss Key Skip

Special Thanks

  • My thanks go to the entire Ocarina of Time community for finding all the cool glitches that make such runs like these possible. A few special shoutouts to:
  • Migu: Creating the 100% TAS route and verifying my TASing
  • glank and the GZ team: Creating the OoT Practice Rom GZ: https://github.com/glankk/gz
  • jolin: Doing the math to make Bug Push possible
  • cadmic: Advice on routing
  • zfg: For lending his platform to showcase the TAS

Samsara: Alright, let's figure this out. Judging. Apologies in advance, this may take some time.
Samsara: I'm passing this over to ikuyo, as I'm finding myself with less and less spare time as of late and I would like to ensure that this does not get delayed further after we've figured out the technical hurdles. Further apologies for the continued delay. This is being worked on.

ikuyo: Claiming for judging.


Joined: 9/26/2023
Posts: 24
InputEvelution wrote:
Inaccurate emulation that is designed to be deterministic isn't necessarily an obvious choice over real hardware that is forced to be deterministic.
FWIW the prevailing opinion within the OoT speedrunning community is real hardware being the better option, as emulators are known to be wildly inaccurate for OoT specifically. In fact emulator is banned for all times faster than 110% of the current world record for speedruns (i.e. if record is 1h then runs on emulator faster than 1h06m are banned).
Bigbass
He/Him
Moderator
Location: Midwest
Joined: 2/2/2021
Posts: 250
Location: Midwest
InputEvelution wrote:
I feel that the practice ROM can be viewed in a similar vein to libTAS here. The results aren't necessarily exactly recreatable on a real game, and getting ideal RNG is a lot more trivial than it would be otherwise. While this makes comparing runs on this tool to those on an emulator more difficult, particularly when dealing with obsoletion, I don't think it should prevent them from being published under the same banner. And while it is true the game has been modified to achieve this, to my recollection there are Flash games that have been accepted onto the site that were modified in order to make them work in ruffle, or to make them sync more consistently. While it's true these games don't really have alternative avenues for TASing like OoT does, I think that our existing familiarity with emulators may be causing some bias here. Inaccurate emulation that is designed to be deterministic isn't necessarily an obvious choice over real hardware that is forced to be deterministic.
While I agree it may be similar in a sense, I don't agree that these are the same circumstances at play here. Imo, we shouldn't be comparing how the game plays on console to how it plays in a TASing environment. Unlike the Flash example, both the original ROM and the modified ROM function on the original hardware, and in emulators. AFAIK, the original OoT could be TASed if someone chose to do so. Regardless, as I mentioned in a previous post, I personally don't feel like the emulation part should be relevant to whether the two ROM versions are the same game or not. I think of the emulation like a black box, with an input and an output. The ROM (and user input) goes in, and we get graphics and audio out. The original input data (ROM) is never modified. To me, this inherently means that the emulation has no affect on the ROM itself. This distinction is especially important since there are different emulators which give different outputs despite the same input as each other. How should we evaluate the output of the ROM then? Since emulation is essentially a "best guess" or "best effort" toward replicating the original hardware, the original hardware should be viewed as the "source of truth" so to speak, regarding what the outputs should be. (Of course, as you noted, sometimes games cannot operate in the original environment, especially in a TASing context. However I don't believe that's the case here.) (Also, sometimes games are developed specifically for a particular emulator - like many N64 ROM hacks - but in that case the "original hardware" is whatever the game was intended to run on.) Following the above idea, the two ROMs we have can behave measurably different from each other. They may visually appear similar, but there are still differences that have real consequences when playing the game, especially when TASing. As a compromise, I could see the practice ROM being treated in the same way we treat different regions or releases of a game. NTSC vs PAL versions (or Rev0 vs Rev1) of the same game can have practical differences, even if the games look visually identical. They may be of the same base game, but they are different nonetheless, and we clearly document them as separate versions.
TAS Verifications | Mastodon | Github | Discord: @bigbass
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
I must admit I particularly fail to see any difference between "touching OOT so it syncs on hardware" and "touching a flash/PC game so it syncs in libTAS".
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Joined: 9/26/2023
Posts: 24
Bigbass wrote:
AFAIK, the original OoT could be TASed if someone chose to do so. (...) (Of course, as you noted, sometimes games cannot operate in the original environment, especially in a TASing context. However I don't believe that's the case here.)
This is absolutely the case here: N64 Zeldas cannot ever hope to play back inputs on real hardware, even if you had an emulator that met "perfect" accuracy standards. There's fundamentally non-deterministic elements* involved that make no two playbacks the same even on real hardware. SM64 only gets away with it due to the game's logic not being sensitive to any hardware counters or the presence of lag. Almost all N64 games are in the other category, they are sensitive to these things and this excludes them from ever playing back on an unmodified cartridge or console, irrespective of how they were recorded. *For example lag on Nintendo 64 is strongly non-deterministic, we know of at least one reason why this is: The N64 has a shared memory architecture and two crystal oscillators, one for the system clock and one for the video clock. The video clock drives RAM refreshes on HSYNC, rendering the entire system sensitive to the relative phase of the two oscillators.
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
Thought I'd link this request I made to GZ: Write overall macro duration on export
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Bigbass
He/Him
Moderator
Location: Midwest
Joined: 2/2/2021
Posts: 250
Location: Midwest
PancakeTurtle wrote:
Bigbass wrote:
AFAIK, the original OoT could be TASed if someone chose to do so. (...) (Of course, as you noted, sometimes games cannot operate in the original environment, especially in a TASing context. However I don't believe that's the case here.)
This is absolutely the case here: N64 Zeldas cannot ever hope to play back inputs on real hardware, even if you had an emulator that met "perfect" accuracy standards.
I wasn't referring to replaying TASes on hardware. I was talking about whether the game actually worked or not. As in, there are many SM64 rom hacks for example that do not function at all on original hardware.
TAS Verifications | Mastodon | Github | Discord: @bigbass
Alyosha
He/Him
Editor, Emulator Coder, Expert player (4325)
Location: US
Joined: 11/30/2014
Posts: 2906
Location: US
PancakeTurtle wrote:
This is absolutely the case here: N64 Zeldas cannot ever hope to play back inputs on real hardware, even if you had an emulator that met "perfect" accuracy standards. There's fundamentally non-deterministic elements* involved that make no two playbacks the same even on real hardware. SM64 only gets away with it due to the game's logic not being sensitive to any hardware counters or the presence of lag. Almost all N64 games are in the other category, they are sensitive to these things and this excludes them from ever playing back on an unmodified cartridge or console, irrespective of how they were recorded. *For example lag on Nintendo 64 is strongly non-deterministic, we know of at least one reason why this is: The N64 has a shared memory architecture and two crystal oscillators, one for the system clock and one for the video clock. The video clock drives RAM refreshes on HSYNC, rendering the entire system sensitive to the relative phase of the two oscillators.
Can you go into some more details of non-determinism? Two clock sources could potentially be fixed with a hardware mod, is there anything less fixable that could go wrong? I'm curious bacuse N64 is one of the consoles I'm most interested in doing verifications on but I don't want to put time into a lost cause.
Joined: 9/26/2023
Posts: 24
Bigbass wrote:
PancakeTurtle wrote:
Bigbass wrote:
AFAIK, the original OoT could be TASed if someone chose to do so. (...) (Of course, as you noted, sometimes games cannot operate in the original environment, especially in a TASing context. However I don't believe that's the case here.)
This is absolutely the case here: N64 Zeldas cannot ever hope to play back inputs on real hardware, even if you had an emulator that met "perfect" accuracy standards.
I wasn't referring to replaying TASes on hardware. I was talking about whether the game actually worked or not. As in, there are many SM64 rom hacks for example that do not function at all on original hardware.
Sure, but Ocarina of Time cannot operate in the original environment (N64) in a TASing context.
sometimes games cannot operate in the original environment, especially in a TASing context
By extension a TASing environment on emulator is therefore not representative of the original console, which means that none of the current movies posted under this game are any more accurate than a GZ macro. There is no "purity" or "perfection" in the TASes for this game, they are inherently flawed, as both emulators and GZ "hack" fixes to make the game deterministic.
Joined: 9/26/2023
Posts: 24
Alyosha wrote:
Two clock sources could potentially be fixed with a hardware mod
How many parts of a Nintendo 64 can you replace while still saying it is in fact an original official Nintendo 64. Where is that line drawn? Can you replace all the parts?
Alyosha wrote:
Can you go into some more details of non-determinism?
More seriously, I am unfortunately not the correct person for this. You'd need some real N64 hardware nerds for that (I learned about the oscillators from thar0 originally).
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
To create a 1.0 rom that plays back on bizhawk please clone this fork of GZ https://github.com/MrPancakeTurtle/gz
Is there no way to replay this tas on emulator using upstream GZ? EDIT: I built the patched ROM exactly like you did in the video, but it gives black screen in any version of bizhawk, with both ares and with your patched m64p. Its size is different from what it has in your video:
34,834,960 bytes
CRC32: 9D7A0359
MD5: DF5B32C6F703609BD615C0CE36D175F8
SHA-1: 757068AD8D34E56C08F2F45D36CA6C9C9F854782
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Joined: 9/26/2023
Posts: 24
feos wrote:
Is there no way to replay this tas on emulator using upstream GZ?
Not unless the emulator supports SD cards (for example via SummerCart64 interface, like Parallel Launcher). The upstream GZ does not have the functions needed for injection of the macro directly to the rom.
feos wrote:
I built the patched ROM exactly like you did in the video, but it gives black screen in any version of bizhawk, with both ares and with your patched m64p. Its size is different from what it has in your video:
34,834,960 bytes
CRC32: 9D7A0359
MD5: DF5B32C6F703609BD615C0CE36D175F8
SHA-1: 757068AD8D34E56C08F2F45D36CA6C9C9F854782
Sorry about that it seems that recent additions to GZ has caused the file to not open on BizHawk, usually this is memory related but I have not tested. I have created a branch that should be a preservation of the version I used for getting the 100% TAS running on BizHawk: https://github.com/MrPancakeTurtle/gz/tree/100%25tas When using this branch I can run it on BizHawk and I am getting:
34,821,112 bytes
SHA-1: E90E28E76135446EBCDF72026DB01A8B125967D4
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
Can't get that one to build.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Joined: 9/26/2023
Posts: 24
feos wrote:
Can't get that one to build.
It looks to me like an issue with paths? You're in the gz folder so it should just be ./make-rom not ../make-rom
CPPFLAGS='-DEMBEDDED_MACRO=/path/to/macro.gzm' ./make-rom /path/to/oot-jp1.0.z64
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
It still can't run make itself.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Joined: 9/26/2023
Posts: 24
feos wrote:
It still can't run make itself.
It turns out I might've made a small mistake, I have updated the makefile and tested the following commands on a fresh install of Ubuntu 24.04.3 LTS
sudo apt install make
sudo sh -c "$(curl -fsSL https://raw.githubusercontent.com/PracticeROM/packages/HEAD/scripts/install-debian_amd64.sh)"
sudo apt install practicerom-dev
git clone https://github.com/MrPancakeTurtle/gz.git
cd gz
git checkout 100%tas
CPPFLAGS='-DEMBEDDED_MACRO=/path/to/macro.gzm' ./make-rom /path/to/oot-jp1.0.z64
This gives me the following file:
34,822,344 bytes
SHA-1: 4EFF22EB85C05908DA7CA8666702177EE4385D31
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
Got it to compile on 24.04 (23.10 was running in circles), and after wiping the config it now runs in your modded m64p core, but still only black screen and silence in the Ares core. Standalone Ares same problem.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Emulator Coder, Judge, Skilled player (1132)
Location: California
Joined: 2/26/2020
Posts: 857
Location: California
ares (nor any normal N64 emulator) is not going to be expected to work in its current form, since again the issue is a RAM limitation. When the macro is embedded into the ROM, what currently happens is that embedded copy in ROM, being part of the .data section, is copied entirely into RAM (this is something expected on the N64 since you don't normally directly access ROM since that's very slow). That copy in RAM is then used to be deserialized into gz's internal format, which is effectively another copy into RAM, thus you effectively have 2 copies of the movie in RAM. The N64 doesn't have enough memory for that so this doesn't work normally. The SD Card importing doesn't have this first copy into RAM, so it only ends up having 1 copy of the movie present in RAM, which the N64 can handle. Ideally, the embedded movie handling is just adjusted so that first copy doesn't happen, so instead it's kept into ROM for the eventual gz deserialization, just like the SD Card importing does.
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
CasualPokePlayer wrote:
Ideally, the embedded movie handling is just adjusted so that first copy doesn't happen, so instead it's kept into ROM for the eventual gz deserialization, just like the SD Card importing does.
Yeah, not depending on hacked emulators would be HUGE! Currently our only option is https://github.com/TASEmulators/BizHawk/pull/4438
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
feos wrote:
Yeah, not depending on hacked emulators would be HUGE! Currently our only option is https://github.com/TASEmulators/BizHawk/pull/4438
Made a fixed version of that PR https://github.com/TASEmulators/BizHawk/pull/4506 and I'm getting consistent deyncs: Link to video For the ROM, I used upstream GZ GUI patcher and applied it to the ROM used in this submission. Loaded that rom along with the SD card image created by Dolphin with just the macro present, and ran the macro by importing it from GZ menu.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Joined: 9/26/2023
Posts: 24
feos wrote:
feos wrote:
Yeah, not depending on hacked emulators would be HUGE! Currently our only option is https://github.com/TASEmulators/BizHawk/pull/4438
Made a fixed version of that PR https://github.com/TASEmulators/BizHawk/pull/4506 and I'm getting consistent deyncs: Link to video For the ROM, I used upstream GZ GUI patcher and applied it to the ROM used in this submission. Loaded that rom along with the SD card image created by Dolphin with just the macro present, and ran the macro by importing it from GZ menu.
Please check this for me: under the "macro" menu there is a "settings" submenu, please check that "wii vc camera" is unchecked. Also make sure that "ignore state's rng" setting is unchecked if you are using the upstream, it might have an influence? If both of the above is unchecked and the macro still desyncs please go to the "watches" menu, and add the watch 80105440 of type x32, you can click the anchor to have it always display, as I'd like to see when the desync is happening then. EDIT: Nevermind, the desync is most definitely because File 1 already exists, please delete it before playing the macro.
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
PancakeTurtle wrote:
EDIT: Nevermind, the desync is most definitely because File 1 already exists, please delete it before playing the macro.
How? I've never played this game, I don't know Japanese, and when I press things randomly different GZ operations happen. Removing the saveram file from host didn't help. EDIT: The thing that made it work past that desync point was starting the macro replay while at the title screen or at save file selection.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Joined: 9/26/2023
Posts: 24
feos wrote:
PancakeTurtle wrote:
EDIT: Nevermind, the desync is most definitely because File 1 already exists, please delete it before playing the macro.
How? I've never played this game, I don't know Japanese, and when I press things randomly different GZ operations happen. Removing the saveram file from host didn't help. EDIT: The thing that made it work past that desync point was starting the macro replay while at the title screen or at save file selection.
I don't know how the file was there already, maybe you played it back for a bit once by accident and wanted to retry without clearing saveram? In the video you posted you're already desynced after file select, before the first textbox even comes on screen, since the inputs to make the filename are used for loading the file instead. It was lucky (or unlucky) it managed to sync back up due to the timing of textboxes being delayed and allowing Link to move seemingly normal for a while.
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
I removed saveram several times between sessions, but kept getting the same desyncs. Without saveram, save file removal does nothing obviously, but starting the macro at the correct moment fixed my problems.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Site Admin, Skilled player (1247)
Joined: 4/17/2010
Posts: 11766
SO, FINALLY, I captured video as this run was replaying in ares, and since the frame of reset when starting the macro, to the last emulated frame of it (thankfully it was also the last frame of input, no blank frames at the end), I'm getting the overall duration of 3:07:26.833 in ares frames. 3:07:26.317 if I count from the first non-lag frame which is when the macro counts its first frame.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Joined: 9/26/2023
Posts: 24
feos wrote:
SO, FINALLY, I captured video is this run was replaying in ares, and since the frame of reset when starting the macro, to the last emulated frame of it (thankfully it was also the last frame of input, no blank frames at the end), I'm getting the overall duration of 3:07:26.833 in ares frames. 3:07:26.317 if I count from the first non-lag frame which is when the macro counts its first frame.
Very close to the timing for the original recording I did. On a real N64 with TAS timing the timing seems to be 3h10m07s, so still significantly more laggy than ares.

1761250630