Before starting, I want to thank MrWint with his Crystal TAS, as a lot of strategy is inspired from his TAS. Also, most of the submission text is copied from him, sue me.
After my recent submission for Crystal’s save glitch branch, EZGames69 reached out to me for obsoleting the Gold TAS. After a few weeks, we got together this TAS, which on face value is 6 seconds faster. However, it should be noted that the previous TAS is very old, and was run on an emulator that performed much faster due to inaccurate emulation (ie 60 FPS instead of ~59.7275 FPS, reduced lag, etc etc). So the difference between them is actually far greater (around 2 minutes).
Emulator used: Bizhawk 2.4.2
- CGB in GBA mode is enabled for console verification.
- Also for console verification, the RTC Offset is set to -16, to match entrpntr’s Silver cart.
- Beat the game without using glitches.
- “Beating the game” is defined as defeating Red on Mt. Silver.
- Silver is used over Gold for mostly artistic reasons, it is (likely?) a few frames slower, however, starter manip lined up better for it, and the game has a lot of sprites that never end up seen due to Gold and Crystal being more popular.
- Very heavy luck manipulation
- Aims for fastest completion of the game
- Contains speed/entertainment tradeoffs
- Uses a game restart sequence
The main battler for the start of the game is Cyndaquil, the fire starter. Totodile and Cyndaquil are the only two good options, but I chose Cyndaquil. While it’s a bit slower going through Falkner, it quickly makes up for it with Russel, the Slowpoke Well, and Bugsy, due to its high base special attack stat, and learning Ember. To note, Cyndaquil will evolve into Quilava when it reaches level 14, which is earlier than Totodile’s evolution (which doesn’t occur until level 18), aiding it further. Also as a note for later, Cyndaquil will be referred to as Cynda, and Quilava will be referred to as Quil.
The Togepi egg is forced to be obtained, but it is immediately deposited in the PC to skip the hatching animation, along with Togepi being just useless overall for us. Not to mention, at the end of the run we will have 6 Pokemon, so this needs to be deposited so as to not run out of party space.
Since Cynda is used, a Pokemon needs to be caught to learn Surf. Time is set in the morning for this reason, as Wooper will appear on Route 32 in the morning. Wooper is caught, and taught Surf and Whirlpool later on. This is even better when you consider Wooper will only know 2 moves when caught, and it is much faster (~8 seconds each) to teach moves when there are empty slots in a Pokemon’s moveset.
Abra is also caught, due to its move Teleport. This is very beneficial at two points.
- After getting the Squirtbottle, Teleport is used to go to Violet City. Going through the north end of Goldenrod requires fighting through several trainers, who can be skipped by simply teleporting, since Sudowoodo can be encountered on the Violet side too.
- Rock Tunnel has to be gone through to reach the Power Plant (Route 9 would be faster if trainers weren’t there). We can mark a Teleport point at the Rock Tunnel Pokemon Center, skipping the need to go through Rock Tunnel twice for the Power Plant sidequest.
A Spearow named Kenya is also obtained for the move Fly. This is a gift Pokemon, which takes much less time to obtain than to catch a Pokemon (~15 seconds vs ~30 seconds). Its moveset also has empty slots, adding to its worth even further.
While Cynda is good early on, it will start to lose steam. So this run opts to switch to Raikou later, who despite the detour, saves a lot of time in battles due to several factors.
- Raikou starts at level 40. For reference, our starter will be at level 23. This is mostly important since we skip level up jingles. Level up jingles take about ~2.7 seconds; skipping the level ups from 23->40 saves a lot of time. Not to mention Raikou being in a slower level up group, adding further to this (which also results in the exp bar sliding less).
- Raikou has a reduced level up moveset, through level 40-63, Raikou only learns 3 new moves from level ups, and 2 are used for the run.
- High base stats (along with starting with at level 40) let it OHKO nearly every Pokemon, with some exceptions. Not to mention, Raikou often will not need to use a critical hit, and half the time critical hits are just used to substitute a super effective hit (critical hits have less text than super effective hits).
The red Gyarados is caught for the move Waterfall. This is pretty much the only option for us, as every other option is too out of the way, and the red Gyarados is a forced encounter anyways, so it’s only ~7 second time loss to catch it over KOing.
The general rule is to take the least amount of steps. Tall grass and spinners are non-factor, as they can all be manipulated. The bike is also obtained, as the player goes twices as fast on it. The bike can also be binded to Select for use, which makes it worth using the bike whenever the player needs to take more than 8 steps (which is nearly every time).
There are some movement quirks I learned of when making this TAS. Unlike Gen 1, A presses do not lag the game (most of the time, they can sometimes cause a single frame of lag with large amounts of NPCs). A presses also do not affect RNG in most cases, with the exception being that they can be used to offset a subframe random call when loading in a random NPC. This is used occasionally, as it usually results in no frame cost, and even if it causes a frame of lag, it’s still only 1 frame, which is overall minor in the scope of manipulating no encounters. However, if there are no NPCs around, then another trick can be used. On the frame that the game actually checks input for movement, we can simply not give it an input, delaying movement by 2 frames. If we are also beside a wall, we could also give it an input to “bonk” on the wall, then resume normal input, which again results in a 2 frame delay. These sort of delays are often used in caves where there are no NPCs around, and different movement through the cave will not affect RNG. Another quirk is a “turnframe.” Simply, if the player is in a “motionless” state, turning will take 8 frames. Whenever possible, this is avoided. Of course, extra steps to just avoid a turn frame is not a good idea, as 1 step takes 16 frames (or 8 frames with the bike).
Overall, the strategy for battles is to simply reduce the amount of turns needed. Next in priority is reducing super effective hits and critical hits. They cause another textbox to appear, which does cost a bit of time. Of course, another turn takes far longer. Although, even then, PP must be a consideration. When a move runs out of PP, the move cannot be used until it is replenished. There are some forced heals, along with a house that quickly heals your party, but aside from them, it is very slow to restore PP, mostly due to how laggy Gen 2 menus are and the amount of time it takes to heal at a Pokemon Center.
For enemy moves, there is a general chain for speed, it is fastest if the enemy does not move, then if the enemy misses an attack, then if the enemy hits a status move, then if the enemy hits an attack, then if the enemy misses a status move. Of course, there are caveats to this, which will be noted later.
There is a bit of randomness involved with the overall damage, called a “damage roll.” Simply, every attack will have 85%-100% damage overall. This is done by rolling a number between 217 and 255, then dividing that number by 255, then multiplying the result to the damage value. Due to rounding, max damage is only obtained with a 255 roll (1/39 chance), although luckily this is mostly only needed early game.
In some fights, X Attacks are used. An X Attack simply raises the “stage” of the attack stat by 1. The default stage, stage 0, has a 1.0 multiplier, then stage 1 has a 1.5 multiplier, stage 2 has a 2.0 multiplier, stage 3 has a 2.5 multiplier, etc etc. The stages max out at +6, but this is never needed.
The options are set with the “fast options” trick, shifting all options (except frame type), to the left, which sets all the applicable options for speed.
Time is set to 9:00 AM. This is needed for Wooper, who will be caught later.
The player is named “I”. The player’s name appears a lot throughout the game, so it saves a lot of time to give him a 1 character name. To note, A/B/J/I all cost the same amount of time to input in, so naming the character I over A does not actually cost any time.
All other options are irrelevant, so they are all set to their default values, as they are the fastest.
Cynda’s DVs are manipulated to be F9FF (15/9/15/15, in order of ATK/DEF/SPE/SPC). The DVs didn’t really need to be this good, but this works nicely anyways so I’m not complaining. It is also nicknamed, due its name appearing often.
Movement is done to reduce Elm’s aide movement. Reducing NPC movement saves time overall, and it will be done often throughout the run.
Totodile has Scratch and Leer. Scratch will always hit, so Totodile hitting with Leer is the fastest. Cynda also uses Leer to lower Totodile's defense, saving 2 crits.
Unlike Crystal, Poliwag is not a grass encounter, only available by surfing or fishing. As such, it cannot be used for water HMs.
Mom will call you entering the route, although it could be avoided by calling mom yourself. However, it’s slower anyways unless you have to use the menu (we don’t).
Abe's Spearow is faster, and his AI will always choose Peck, which will always hit. Cynda can’t take too much damage, so Smokescreen is used so Peck can miss. Leer is used to save a crit, although it’s not too different from the extra crit. Ron's Pidgeys simply go down with two crits.
Falkner’s Pidgey has Mud-Slap, and his AI will always go for it. Interestingly, in Gen 2, moves with secondary effects with “100%” chances have a 1/256 chance to simply not trigger the effect. Abusing this, Mud-Slap will not lower accuracy, and will save 2 textboxes, and therefore time. To note, Pidgey takes 3 turns to KO (unlike Ron), simply because it has higher DVs. Leer is used on Pidgeotto, saving a turn overall. Once Falkner is defeated, we get his badge, which like Gen 1, has a badge boost, boosting attack specifically.
Violet Pokemon Center
Speaking to the Aide on a turnframe happens to be faster than talking to him head on, due to reduced NPC movement. The egg is deposited immediately, as there isn’t really a better place to deposit it.
Wooper is caught for Surf and Whirlpool, and it happens to have 2 empty slots for those moves. It sadly is unable to learn Waterfall, so it can’t be used for that HM. Wooper’s name will be appearing fairly often, so it is given a nickname.
Unlike Crystal, Albert cannot be avoided. The fight is fairly simple, although I should note that a crit cannot take out the Rattata. This is because the badge boost from Falkner’s badge does not apply for crits IF my attack stage is equal or less than the defense stage of the opponent. Since Cynda’s attack stage is +0 and Rattata’s defense stage is +0, the badge boost is not applied for a crit. Another note, I manipulate a Supersonic miss from Zubat. Hitting Supersonic will cause a confusion animation, which is very long. Also, its only attack is Leech Life, which is a draining move, which has an extra textbox along with an extra HP animation, making it very slow. After the fight, Cynda will learn Ember, which will be used in nearly every fight thereafter.
Talking to the Slowpoke Tail dude directly might seem to be a good idea, but that will incur a turnframe, whereas going into his vision will not, so I don’t talk to him directly.
Unlike Crystal, Russel and Ray are not avoidable. Russel is actually fairly simple with Ember, due to Geodude’s low special defense. Ember is swapped to the top of the moveset due to its prominent use, and it also has minor lag reduction overall. As a note, Totodile does not learn Water Gun until level 13, making Cynda surprisingly much better for this fight. Ray’s fairly simple too, not too much to comment on.
Slowpoke Well is just a bunch of low leveled Rockets, they all get OHKO’d by Ember, some don’t even need a critical hit. Cynda evolves after the first Rocket fight, which allows it to barely OHKO the level 11 Ekans in the next fight (with a 1/39 crit). The Koffing just barely lives a crit, so burn damage finishes it off (which is actually slower than 2 turns, but it's cooler anyways). We’re healed right away after the fight, so getting hit by Poison Gas is fastest.
Bug is weak against fire, so Quil takes out the gym very easily.
Rival 2 is fairly simple, although his Croconaw needs a critical Ember + burn, along with 2 critical Tackles for a 3 turn KO. This is on top of Croconaw using Leer twice, which has a ~90% chance to be discouraged each time, making this fight one of the lowest probability events.
The fastest way to catch the Farfetch’d isn’t exactly obvious, but it’s still faster due to less interactions with the Farfetch’d.
Quil is taught Cut in front of the tree, so as to use Cut within the menu to save some time. Leer is chosen to be replaced with Cut, due to it having a shorter name than Tackle.
Abra is caught here, no nickname is given due to its name never appearing.
The bike shop is done first, as it will speed up movement. It is binded to Select for faster use later, and used within the menu to save some time.
Unlike Crystal, the player does not need to talk to Gloria before getting the Squirtbottle. Of course, Kenya is still valuable, so it is grabbed right before entering the gym.
Once Whitney is defeated, I get the Squirtbottle, then teleport back to the Violet Pokemon Center, to avoid trainers north of Goldenrod.
Violet Mart has 2 items I need, Escape Ropes and X Attacks. When shopping, the game let’s me input in Right to increase the quantity by 10, and due to the amount of money I have, I can abuse this and buy 11 Escape Ropes and 11 X Attacks. Although, in the end, only 5 Escape Ropes and 6 X Attacks will be used.
Rock Smash is required to free the legendary beasts, so I need to talk to the blue dude after getting rid of the Sudowoodo to obtain TM08. This will be taught to Quil later.
Unlike Crystal, Greg is not avoidable. Simple fight; Cut can KO after Ember, so it’s fastest for Disable to hit.
While it is optional to free the beasts compared to Crystal, the benefits of using them still makes it better to do the extra battles to free them.
Rival 3 is fairly similar to Rival 2, although I need to have Haunter only lower 2 PP from Spite so as to not run out of PP for the fight. After the fight, Ember will have 0 PP.
I teach Rock Smash to Quil in front of the rock, so I can use Rock Smash within the menu to save some time. Ember is replaced since it’s now useless to me and has the shortest move name anyways.
Interestingly, the Burned Tower basement allows biking, so movement is a bit faster down there. After releasing the legendary beasts, I go back to Route 37 to catch Raikou.
Raikou is manipulated to have FxxF DVs. Perfect Attack and Special will be needed later in the run, speed can be anything, and higher defense is just marginally faster, but not an overall consideration.
I need to do a turnframe to talk to the first Kimono Girl. Interestingly, while it is usually 2 frames faster to menu then turnframe, lag differences end up making it faster to turnframe then menu.
Interestingly, the second trainer in Morty’s gym can be skipped by simply doing a different path.
The spinner here goes in a constant pattern, so a 2 frame delay is needed to pass him.
Strength is taught to Raikou due to its usefulness in battle. Surf is taught to Wooper, and then Surf is used from the menu to save some time.
At this point of the TAS, I made an interesting consideration: switching Wooper with Kenya, to reduce menuing later when teaching Fly and using Fly. However, switching costs a lot of time, and is slightly slower than just dealing with the extra menuing each time I want to use Fly. Goes to show how laggy Gen 2 menus can be.
After Chuck is defeated, we can obtain Fly. The Fly HM will be highlighted immediately when we go to the TM/HM pocket, since we obtained another TM at Chuck’s Gym. Fly isn’t strictly required, but it allows for quick movement when backtracking to another town.
The Red Gyarados is a forced encounter, and cannot be fled. It is caught for the move Waterfall. Gyarados’ name will appear only 5 times throughout the run, so giving a nickname is not worth it.
The Lance heal replenishes PP. There will be a lot of fights before being able to replenish Raikou’s PP, so moves need to be planned out so as to not run out at the end, sometimes incurring avoidable crits. Raikou will have 0 PP in all its moves at the next heal.
A lot of trainers in the Rocket Hideout are not avoidable, unlike Crystal. Quick Attack makes quick work for most of them though (pun unintended).
To conserve PP, Quick Attack is used for the female Rocket Executive fight, along with the Electrodes. This will mostly do the job for conserving PP overall, so not too bad.
Jasmine is pretty much the only bad fight for the entire run. Her Steelix can only be damaged with Strength, which isn’t very effective. An X Attack is used so that 3 Strength crits can take it out. Defeating her gives us Iron Tail, which will be taught later to even out Raikou’s coverage.
The Radio Tower is just filled with a bunch of low leveled grunts, although interestingly, Gold/Silver have 1 less grunt to deal with compared to Crystal. I’m a bit clumsy, so I bump a bit on the fourth floor. Of course, I have to wait for the spinner anyway, so it doesn't matter.
The fake director Executive fight is another point for PP conservation, instead of using Spark on the Weezing, I use Thundershock instead. This ends up not being too bad as it gets rid of 2 move switches. No more avoidable crits will be needed for PP conservation after this.
Escape Ropes cannot be used in the Radio Tower, so you are forced to walk back down entirely, both times.
Iron Tail is taught to Raikou right before Rival 4, replacing Quick Attack., which now has 4 PP and doesn’t have much use now.
The Radio Card must be obtained for later; it’s on our way now so this is the best time to get it.
The bird keeper here is not avoidable like in Crystal. His AI will always go for Quick Attack, so Raikou is forced to take a hit.
Strength puzzles, *yawn*
Route 27 & 28
Unlike Crystal, not all the trainers here are avoidable. 2 trainers must be fought before I can reach the heal house. Simple fights really, and I will have 0 PP after the Espeon is KO’d. I can then use the heal house to restore my PP for the last few fights of Johto.
Bruno's Hitmonchan has Mach Punch. Its AI will always go for it, and like Quick Attack from the earlier bird keeper, Raikou is forced to take the hit.
Karen's Umbreon cannot be OHKO’d, so I use an X Attack. This lets me OHKO Umbreon and Vileplume with crits, and KO the rest of her mons without crits.
Lance's Dragonites also cannot be OHKO’d, so another X Attack is used. Thus concludes Johto.
Kanto is done completely without any heals, although there isn’t too much consideration needed for PP with some planning. Some super effective hits are done over critical hits, but this is done fairly rarely anyways.
After landing in Kanto, it's faster to fly to Vermilion rather than biking from the pier.
Kanto does have a lot of options, but overall it is best to do Kanto gyms along the way of restoring the Power Plant, whilst minimizing trainer battles.
Route 9 is the fastest route movement wise to get to the Power Plant, but there are multiple trainers in the way, so it cannot be used. Instead, Rock Tunnel is taken to get to the Power Plant. I go into the Pokemon Center once I’m through to set a Teleport point, which avoids going through Rock Tunnel again.
Funny thing for Misty’s gym, the Surf movement in the old TAS happens to be the most optimal, the movement used by MrWint and RTA runners is actually slower.
After Misty is done, I teleport then finish the Power Plant fetch quest.
Surge is done on the second Vermilion visit, as it’s more on the way than the first visit.
Brock is a small detour, but it’s still faster to go to the gym once you visit Pewter City.
I’m running a bit low on Spark PP, so for Janine’s gym, I take out her first 3 Pokemon with Thundershock, then switch back to Spark. Spark is needed to KO the Venomoth without a crit, so the Thundershocks cannot be used on the last 3 Pokemon.
Blue is done right before Erika. After Pidgeot is KO’d, Raikou goes to level 61, learning Crunch, which allows it to beat Rhydon and Exeggutor.
I want to keep my Strength and Iron Tail PP for Red, so Crunch is used for the entirety of Erika’s gym. This is also why Erika is done last, so as to have Crunch.
Red has several high leveled Pokemon, and they do not go down easy. I use 3 X Attacks as to OHKO all of Red’s Pokemon with my limited PP. Red’s AI is dumb and can actually choose Thunder against Raikou, so I simply manipulate Thunder misses while I boost up. It’s then just OHKO’ing all of Red’s Pokemon, thus concluding Kanto, and the entire game.
entrpntr was kind enough to console verify this TAS with his Silver cart, and after adjusting the RTC offset to match his cart, it was successful.
An interesting note for console verification, on the first attempt (which had no RTC offset), the TAS desynced at Misty’s fight. This desync was reproducible with offsets 2 to 29, so -16 was chosen to be the RTC offset for the TAS. Turns out that was the only desync, after adjusting the RTC and redoing the TAS, it just worked. Sometimes drift could be awful in the case of MrWint's Crystal TAS, but sometimes RTC is nice and won’t drift much like in this case.
This lua was used throughout the run: http://tasvideos.org/userfiles/info/64200414251443809
The lua has grown organically and has a lot of spaghetti code within it, and really all it did was just showed some useful information along with simple breakpoints by banks. Which I absolutely recommend anyone needing breakpoints to please just use lua, the “debugger” is buggy as hell, once crashing Bizhawk, with breakpoints set with it sometimes just suddenly stop working, and there is no way to specify a bank or register condition to break on (which I suppose to be fair, lua can’t specify banks directly either, I simply just use the game’s variable for banking, which isn’t a good solution overall, but I digress), along with being a pain to just toggle (assuming it doesn’t just disable itself anyways).
An encode with the lua active is also here, consider it a nerd encode:
Also, for publication, please use the Libretro GBC palette, it looks the best for the game.
fsvgm777: Replaced movie file with one that has the correct cycle count.
ThunderAxe31: The level of optimization meets the technical quality that is to be expected for the game, given the depth of the current knowledge available. It must be noted that the previous movie appears to be just 6 seconds slower, due to emulation inaccuracies; in reality, it's actually much slower than that.
This submission aims for obsoleting the current publication for the same branch. While this is a very clear and straightforward objective, I have to note that an user argued that the current Gold publication should be retroactively obsoleted by the Crystal publication, and this submission rejected. The fact is, we don't have any verdict precedent that could sustain that argument. My opinion is that Gold/Silver vs Crystal are different enough games for warranting separate branches, at least for the glitchless goal. Also, making cross-game obsoletion is an exception, not the norm, and should be done carefully (except for ROM hacks).
With that said, accepting for obsoleting the old Gold movie.
Spikestuff: But who was Green?