Setup:
The TAS is intended for the Gambatte core of BizHawk 2.5.2 but the input log should sync back as far as BizHawk 2.3 due to console verification. The choice to use specifically GBA as the emulated platform is due to the ability for console verification on GBI and the use of the GBP platform in the RTA speedrunning community for Pokemon Gen 1-3. The youtube upload above demonstrates this console verification.
Improvements
Frames Saved is compared against the official publication, the TAS is 465 frames faster than the console verified update to the previous publication.
Event | Frames Saved | Cumulative | Frames Saved (Verified) |
---|---|---|---|
In-Game Options | 26 | 26 | |
Pika Cutscene Transition | 14 | 40 | |
Rival 1 with Tackle Animations On | 14 | 54 | |
Buying 1 less Poke Ball | 2 | 56 | |
Nido manip | -21 | 35 | |
Pidgeotto manip | 85 | 120 | |
Fight RNG through Brock | 34 | 154 | |
Fight RNG Rt 3 | 17 | 171 | |
Mt Moon Encounter Manip | 35 | 206 | |
Swag Cerulean PC | -4 | 202 | |
Misty Gen 1 Miss and removed Crit | 60 | 262 | |
Swag Bill Cutscene | -4 | 258 | |
Surge Raichu fight with Growl Fail | 20 | 278 | 278 |
Rock Tunnel bonk cleanup | 8 | 286 | |
Thrashing Tower Rival | 21 | 307 | |
Swag Indigo Plateau PC | -4 | 303 | |
New Ending Red Bar Route | 87 | 390 | |
Total | 390 | 390 | 465 |
In-Game Options:
It was known around the time of the creation of the previous TAS that setting options in-game was faster than setting them at the "new game" screen, but fixing this was infeasible until improvements were made to the use of botting tools for Nido and Pidgeotto manip. (in other words, the good nido manip relied on the flawed use of new-game options for RNG). With a reliable way to bot new nido and pidgeottos this is no longer a problem.
Pika Cutscene Transition:
During the creation of the Yellow NSC TAS I discovered with the help of the PSR programmers that different rival name settings were affecting the battle transition when Pikachu is encountered by Oak. The game compares the first pokemon in your party's level against the encounter's level to determine how intense it should make the animation appear. Since you don't have a pokemon yet, the game gets very confused and ends up reading from the same place that was used for temp storage while setting the Rival name. The practical upshot is that a 30 frame faster animation can be obtained by taking 20 frames to write data into the rival name and then delete it so that the name still ends up as A for later text. 4 other frames were saved through quirks up to the rival battle including pika stats.
Rival 1 with Tackle Animation On:
Hilariously, the Tackle animation is one of the only animations that is faster with animations on, and also the only animation used in the initial rival battle. Knowing that it's faster to set options in-game, it then becomes logical to delay the options set which turns off animations until after the rival 1 battle (which makes the battle extremely hard to manipulate without losing frames, and most of the difficulty of the rewrite was spent just in getting ready a double gen 1 miss rival 1 battle that doesn't have options set yet).
Buying 1 less Poke Ball:
During the initial TAS, a 2 frame cost was added to have a spare Poke Ball in case a Sandshrew catch could be better than Charmander as an HM friend. It's not, so we removed the spare Poke Ball.
Nido manip:
DSUM describes a 13.2 second long cycle that encounters rotate through due to a flaw in encounter RNG, NidoM L6 being encounterable during only .67 seconds of the cycle. That .67s needs to happen sometime while walking through the 8 steps of route 2 grass to encounter Nido without delay, let alone to get perfect stats. Practically, this means that a given TAS up to the grass would have a roughly 1 in 5 chance of being in the right part of the cycle without having to wait up to 10 seconds. The previous TAS naturally hit this 1 in 5. With 56 frames saved up to Nido, we had to go back to Rival 1 and use the damage RNG to shift DSUM alignment, costing 21 frames. From there, the Nido manip was botted writing code for new tools from PSR programmer stringflow and also with the help of Hwangbro, allowing us to improve the portion of Nido manip outside of DSUM alignment. Overall though this results in 21 frames lost.
The search code to find the Nido and Pidgeotto manips is available below in src/searches - it requires libgambatte.dll available in the path or root of the project (can be built from gambatte-speedrun) as well as the game rom in roms/pokeyellow.gbc and a gbc bios.
https://github.com/TiKevin83/pokemon
Pidgeotto manip:
The previous TAS did not use a bot for encounter manips and suffered for it with the 1% Pidgeotto slot. Again with the use of the latest encounter botting tools the Pidgeotto manip was able to be vastly improved. 67 frames were saved to the manip itself and an additional 18 frames were saved by dropping an unneeded crit from NidoranM on the last turn. This requires a 1/39 crit on one of Pikachu's Thundershocks and a 1/39 from Nido.
51 frames were saved on fight RNG in the forest, Brock and Rt 3 fights. More experience with strategy for finding fight RNG and clearing textboxes allowed me to implement lots of small frame saves. A notable find is the occasional end of paragraph textbox that clears earlier if you mash while text prints.
Mt Moon:
Mt Moon has some complexity with lag from NPCs being on screen and being able to avoid long stretches of encounters with small changes to walk paths/A presses. Better understanding of this helped save 35 frames.
Cerulean PC:
By turning on a dime, PCs can be "swagged" such that you look away from them while using them. This also happens at Bill's cell separator and the Indigo Plateau PC. The three uses cost 12 frames total and constitute an important speed/entertainment addition.
Misty:
Gen 1 Missed an additional turn instead of using Harden to avoid damage, and got high roll crits on both of the first 2 horn attacks to enable a non-crit HA on the last turn, saving 60 frames total in the Misty fight.
Surge:
Additional effort was placed into the RNG manip hunt on Surge, finding a double growl fail fight which helped most of the 20 frames saved between Misty and Surge.
Rock Tunnel:
The old TAS bonks briefly in Rock Tunnel for RNG manip. This looks bad and was removed, helping save 8 frames in the fly split.
Tower Rival:
improved encounterless manips saved 12 frames while Thrashing the Tower Rival's last 4 pokes saved 9 frames over the previous Horn Drill x5 fight.
New Ending Red Bar Route:
Through the rest of the TAS a new red bar route enabled saving 72 additional frames. The TAS was delayed briefly to investigate the potential for a double Clefairy trainer to replace Gambler's Growlithe and Arcanine. This turned out to not be possible due to the reduced XP causing us to be be outsped by Koga's first Juggler's Kadabra. However, this delay led me to reevaluate the existing strategy for maintaining red bar from Hypno to Champion. I discovered that a normal Quick Attack on Silph Rival Ninetales could keep red bar through Viridian Rival instead of Ember, then with the additional HP we could survive a crit from the Quick Attack at Viridian Rival Ninetales and be able to avoid damage on Agatha. Though we do need to give Agatha's Gengar a turn, that turn is much shorter with a Gen 1 Miss from Lick than being hit by it. 15 frames were also saved in rewriting all of the fight RNG so the ending badge run saved 87 frames.
Final Comments
In total, these changes helped save 390 frames on the published TAS (465 console verified), pulling the final time below 1:36:30 to 1:36:26.54 and dropping an IGT minute at the final Hall of Fame screen from 1:34 to 1:33:56 and 50 frames. The incorporation of botting tools into the early encounter manips has finally allowed the complex intro optimizations to shine through alongside numerous other small cleanups.
Another note: the rerecord count is no longer useful when evaluating movies of this kind because the input log is repeatedly manipulated in external botting frameworks. The hardest work in searching for the new rival fight is not reflected at all in the count, nor is any of the effects of the botting work.
ThunderAxe31: Setting to Delayed, in view of a recently found improvement.
ThunderAxe31: File replaced with a 72 frames improvement and 1 blank frame trimmed at the end, and judging.
ThunderAxe31: Accepting as improvement over the current publication.
Spikestuff: Publishing.