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.


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15655
Location: 127.0.0.1
Migu
He/Him
Player (202)
Joined: 10/3/2015
Posts: 64
Location: Louisiana
Looks great, Pancake! It would be cool if this can be published but even if not this is good documentation of the run. By the way I don't have any inputs - I just did the routing.
CoolHandMike
He/Him
Editor, Judge, Experienced player (899)
Joined: 3/9/2019
Posts: 735
I have to say I do not understand your steps to run this on emulator especially with that github project or the instructions to open a menu in game to then run what you are calling a macro. Could you make a short video on how to make this file then run it in BizHawk?
discord: CoolHandMike#0352
Skilled player (1744)
Joined: 9/17/2009
Posts: 4986
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Oh wow, nice.
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.
I'm guessing without the practice ROM, the run doesn't sync on console? I have 0 idea what to make of a movie that console verifies on a practice ROM, yet doesn't on the original (unless I interpret it wrong.) Is it possible to extract the inputs from the macro to work on a non practice ROM? I'm very curious.
Migu
He/Him
Player (202)
Joined: 10/3/2015
Posts: 64
Location: Louisiana
jlun2 wrote:
I'm guessing without the practice ROM, the run doesn't sync on console? I have 0 idea what to make of a movie that console verifies on a practice ROM, yet doesn't on the original (unless I interpret it wrong.) Is it possible to extract the inputs from the macro to work on a non practice ROM? I'm very curious.
The practice ROM has its own "in-game" movie playback (and recording). It's not reading live controller inputs, it's essentially reading an input file from RAM. That's why it's able to sync on the practice ROM but not the real thing. In the first place, it might not be possible to re-create this run as a traditional TAS because GZ uses "hacks" to fix RNG at every scene transition, and emulators deal with RNG differently. But even if that's possible, true console verification still hasn't been achieved for this game as far as I know.
CoolHandMike
He/Him
Editor, Judge, Experienced player (899)
Joined: 3/9/2019
Posts: 735
Migu wrote:
jlun2 wrote:
I'm guessing without the practice ROM, the run doesn't sync on console? I have 0 idea what to make of a movie that console verifies on a practice ROM, yet doesn't on the original (unless I interpret it wrong.) Is it possible to extract the inputs from the macro to work on a non practice ROM? I'm very curious.
The practice ROM has its own "in-game" movie playback (and recording). It's not reading live controller inputs, it's essentially reading an input file from RAM. That's why it's able to sync on the practice ROM but not the real thing. In the first place, it might not be possible to re-create this run as a traditional TAS because GZ uses "hacks" to fix RNG at every scene transition, and emulators deal with RNG differently. But even if that's possible, true console verification still hasn't been achieved for this game as far as I know.
When you say it fixes RNG what do you mean exactly?
discord: CoolHandMike#0352
Bigbass
He/Him
Moderator
Joined: 2/2/2021
Posts: 194
Location: Midwest
jlun2 wrote:
I have 0 idea what to make of a movie that console verifies on a practice ROM, yet doesn't on the original (unless I interpret it wrong.) Is it possible to extract the inputs from the macro to work on a non practice ROM? I'm very curious.
I'd be quite surprised if this TAS worked on the original game ROM. Even if the game was more reliable, like Super Mario 64 is in regards to input handling, the practice ROM clearly modifies the behavior of the game in several ways. As outlined in ch4 and ch5 of the practice ROM's manual. Maybe the modifications don't affect the game/system behavior enough to matter? That certainly doesn't seem to be true to me, but I guess it's possible. The ability to successfully replay the TAS's inputs using the practice ROM, only proves that the TAS verifies on the practice ROM (i.e. a modified version of OoT). The practice ROM is effectively no different than a ROM hack, in my opinion. The gameplay may be very similar, but it definitely appears that they are still two different "versions" of the game.
Moreover, because of the modifications to the game, I personally feel that this run is specifically a TAS of the OoT Practice ROM. Not a TAS of the original OoT. I'm not saying the run is invalid or anything like that, rather just that the distinction should be clearly stated where applicable.
TAS Verifications | Mastodon | Github | Discord: @bigbass
Joined: 9/26/2023
Posts: 6
CoolHandMike wrote:
I have to say I do not understand your steps to run this on emulator especially with that github project or the instructions to open a menu in game to then run what you are calling a macro. Could you make a short video on how to make this file then run it in BizHawk?
Sorry, I thought it might not be clear as it is a little complicated. Here is a video that shows how to build gz and inject a macro. https://www.youtube.com/watch?v=-sh3kQ3Cnqw I will agree with other commentors that yes, this is not a vanilla OoT ROM. The gameplay is however functionally the same. The Submission notes have my view on it.
Site Admin, Skilled player (1256)
Joined: 4/17/2010
Posts: 11496
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
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/).
Can we see the patch? Also the documentation on the .gzm format.
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: 6
feos wrote:
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/).
Can we see the patch? Also the documentation on the .gzm format.
extra ram: https://github.com/TASEmulators/BizHawk/compare/master...glankk:BizHawk:16mb official documentation on macro (.gzm): https://www.practicerom.com/manual/menus/macro/index.html The .gzm file itself is just a binary file, where: First 4 bytes is number of inputs (or frames) Next 4 bytes is number of RNG seeds (scene transitions) The next 4*[number of frames] bytes are input data The next 12*[number of rng seed] bytes are RNG seeds The next 4 bytes is n_oca_input (usally zeroed out) The next 4 bytes is n_oca_sync (usally zeroed out) The next 4 bytes is n_room_load (usally zeroed out) The next 4 bytes is number of rerecords And the last 4 bytes is the last recorded frame
Joined: 9/26/2023
Posts: 6
PancakeTurtle wrote:
First 4 bytes is number of inputs (or frames)
I should specify, this is the number of actual visual frames, and not input frames. This means instead of constant 60 FPS it is measuring 20 FPS at normal gameplay, 30 FPS at pausing, and 60 FPS at the title screen (given the n64 actually lags so much it's more like 30 frames per second on title screen). Example: The 100% TAS .gzm has 220626 inputs (or frames), but if it was the input frames it would instead be 674650. It is evident that 220626*3 is a little less than 674650, because some of the frames in the 220626 count is recorded at 30FPS or 60FPS.
Site Admin, Skilled player (1256)
Joined: 4/17/2010
Posts: 11496
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Is there a way to calculate accurate duration of the entire movie in seconds, from just the gzm file 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.
Emulator Coder, Judge, Experienced player (733)
Joined: 2/26/2020
Posts: 791
Location: California
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)
To be clear, "non-standard TASes" was not so much the direct use case for the "Events" class. It's more a rules override for handling TASBot events at GDQ etc, allowing for bypassing normal publication rules, with even the possibility just having some video of the event itself as the publication encode, as it's less the TAS being published, but rather publishing the event showcase of the particular TAS. Now there can be some debate on what counts as an event (there is disagreement among staff on whether someone's livestream counts as such), but if it is determined this does not count as an event, then it needs to fall under normal publication rules in order to be published. As far as the goal goes, it seems perfectly fine within Standard or Alt (unsure exactly which this fits in, possibly Alt if there are major skip glitches within the TAS yet SRM is avoided; if SRM is the only possible major skip glitch then the goal could be accepted into Standard). For technical requirements, this means being able to replay the TAS, on an official release of an approved emulator (although console-only playback being accepted could come under a rules change; in that case the .gzm here should be the one parsed, not a 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/).
This of course is not acceptable under normal publication rules, we cannot accept unofficial versions of emulators under normal publication, it must sync on an official release. I'm also skeptical of this kind of change; how does doubling the RAM work, if the problem was the ROM was too large for the emulator? Especially as you couldn't double the RAM on the N64 with just some flashcart, although with a flashcart you could end up having a much larger ROM than retail ROMs normally have. I assume by "too large" it's > 64MiB, as that's the limit mupen's code appears to have. However, mupen is not the only N64 core on BizHawk, another option is the Ares64 core. It appears to accept > 64MiB ROMs (although the commit for that isn't in BizHawk until after 2.9.1, i.e. it will be in 2.10's release). Could you try playing back the "large" ROM on that core in 2.10 rc2?
InputEvelution
She/Her
Editor, Reviewer, Player (36)
Joined: 3/27/2018
Posts: 195
Location: Australia
CasualPokePlayer wrote:
This of course is not acceptable under normal publication rules, we cannot accept unofficial versions of emulators under normal publication, it must sync on an official release.
Reading this, I'm a little confused. Haven't exceptions been made before about this for Zelda? The published Twilight Princess TAS was done on a version of Dolphin specially modified to make GC Zelda TASing easier, with input files incompatible with regular Dolphin, but that didn't seem to prevent its acceptance. Was there a mistake in the process for that run? Did the rules change at some point to become more restrictive?
Emulator Coder, Judge, Experienced player (733)
Joined: 2/26/2020
Posts: 791
Location: California
InputEvelution wrote:
CasualPokePlayer wrote:
This of course is not acceptable under normal publication rules, we cannot accept unofficial versions of emulators under normal publication, it must sync on an official release.
Reading this, I'm a little confused. Haven't exceptions been made before about this for Zelda? The published Twilight Princess TAS was done on a version of Dolphin specially modified to make GC Zelda TASing easier, with input files incompatible with regular Dolphin, but that didn't seem to prevent its acceptance. Was there a mistake in the process for that run? Did the rules change at some point to become more restrictive?
That kind of run is part of why we do not accept unofficial versions of emulators anymore. Rules in older days were much more relaxed in this regard (which has lead to other runs (particularly with ancient Dolphin) with lost source code/builds due to them being on deleted forks, leading to runs we cannot sync anymore), and even when they were tightened, judges could override that rule if it was "justified" (I believe this was the case for that Zelda TAS). We do not do that anymore, the closest we do that is just making whatever unofficial version official itself (integrating whatever into official emulator releases, although this is probably more typically making a quick ""release"" of an interim build if anything) or working to make it sync on an official version.
Site Admin, Skilled player (1256)
Joined: 4/17/2010
Posts: 11496
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
If we treat this as a per-game TAS environment and parse the actual input file, it may not have to work on approved TAS emulators, because it's not a movie made on/for them. But figuring out the tech aspect is part of how we want to support it properly, instead of it being a bunch of black box files that we can't even host currently.
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: 6
CasualPokePlayer wrote:
then it needs to fall under normal publication rules in order to be published. As far as the goal goes, it seems perfectly fine within Standard or Alt (unsure exactly which this fits in, possibly Alt if there are major skip glitches within the TAS yet SRM is avoided; if SRM is the only possible major skip glitch then the goal could be accepted into Standard). For technical requirements, this means being able to replay the TAS, on an official release of an approved emulator (although console-only playback being accepted could come under a rules change; in that case the .gzm here should be the one parsed, not a bk2).
It (understandably) wont fall under normal publication rules for emulator. If .gzm (and console only) becomes an accepted format it could fall under Standard as the only useful glitch not used (at the time of creation) is SRM.
CasualPokePlayer wrote:
I'm also skeptical of this kind of change; how does doubling the RAM work, if the problem was the ROM was too large for the emulator? However, mupen is not the only N64 core on BizHawk, another option is the Ares64 core. Could you try playing back the "large" ROM on that core in 2.10 rc2?
The Macro is stored in RAM, so it is not the ROM that is too big, but that when it loads it puts the macro into RAM. I was unclear in my explanation. In fact macro injection is memory inefficent, so this is not an issue on a real N64, but this macro is close to the limit the N64 can play without running out of memory too.
feos wrote:
Is there a way to calculate accurate duration of the entire movie in seconds, from just the gzm file itself?
I do not actually know, I've asked the main developer of GZ, so I'll return with an answer when I have it :)
feos wrote:
If we treat this as a per-game TAS environment and parse the actual input file, it may not have to work on approved TAS emulators, because it's not a movie made on/for them. But figuring out the tech aspect is part of how we want to support it properly, instead of it being a bunch of black box files that we can't even host currently.
Basically having GZ as an "Approved Emulator" for Ocarina of Time?
Site Admin, Skilled player (1256)
Joined: 4/17/2010
Posts: 11496
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
PancakeTurtle wrote:
The Macro is stored in RAM, so it is not the ROM that is too big, but that when it loads it puts the macro into RAM. I was unclear in my explanation. In fact macro injection is memory inefficent, so this is not an issue on a real N64, but this macro is close to the limit the N64 can play without running out of memory too.
I don't understand how m64p has less N64 RAM than the actual console...
PancakeTurtle wrote:
Basically having GZ as an "Approved Emulator" for Ocarina of Time?
Yeah like DOOM's internal replays.
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: 6
feos wrote:
I don't understand how m64p has less N64 RAM than the actual console...
It is not really that it has less, it is more that injecting the macro into the ROM is memory inefficient.
feos wrote:
Is there a way to calculate accurate duration of the entire movie in seconds, from just the gzm file itself?
The answer is "not really", you'd have to play it back to figure out what frames are at what framerate.
Site Admin, Skilled player (1256)
Joined: 4/17/2010
Posts: 11496
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
PancakeTurtle wrote:
It is not really that it has less, it is more that injecting the macro into the ROM is memory inefficient.
I still don't understand what the problem is and how it's solved by giving the emulated console impossible amount of RAM, while it's fine on the actual device.
PancakeTurtle wrote:
The answer is "not really", you'd have to play it back to figure out what frames are at what framerate.
Is this movie's framecount even known? In this submission some number is entered but it seems to include setting up the replay 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.
Emulator Coder, Judge, Experienced player (733)
Joined: 2/26/2020
Posts: 791
Location: California
As the format has a variable input rate, and seemingly no way to know when the rate switches statically, inputs cannot be used to derive the movie time. Therefore, GZ cannot become an "accepted emulator" like Doom replays. The format would need to be changed to add in movie time (directly or indirectly) in order to have GZ to become an "accepted emulator"
Joined: 9/26/2023
Posts: 6
CasualPokePlayer wrote:
As the format has a variable input rate, and seemingly no way to know when the rate switches statically, inputs cannot be used to derive the movie time. Therefore, GZ cannot become an "accepted emulator" like Doom replays. The format would need to be changed to add in movie time (directly or indirectly) in order to have GZ to become an "accepted emulator"
Makes sense. A format change is probably not out of the question, but that's not up to me.