This is an explanation of the strategy behind a console-verified Pokemon Yellow Any% NSC TAS in 9:52.
A previous revision in 10:17 showed at GDQx 2018 and can be seen now at the following link:
This was an improvement from an initial prototype which was made for the 2018 Pokemon Speedrun (PSR) Marathon with a time of 11:28:
Credit goes to Luckytyphlosion and Gifvex for glitch routing, Stringflow for helping with botting setups for more intense RNG, and GoddessMaria's general assistance including looking at forest and gen 1 miss manips.

Setup

We now use the pipeline described here to verify console accuracy of gameboy TASes. https://pastebin.com/DXiDT9ZT
This pipeline has been used to verify TASes by both me and Extrems, and it was demonstrated publicly in the practice rooms at SGDQ 2018.
I used a gbc_bios.bin for the GBC firmware and set CGB in GBA to True for GBP verification purposes.

General Strategy

RAM Addresses in BizHawk are offset C000 lower than those listed in other sources; addresses are Big Endian and in WRAM.
End of Paragraph Textboxes that can be cleared with B faster than with A/without a jingle can frequently be cleared faster by adding B presses earlier in the textbox due to JoyPadLowSensitivity

Route

Intro

Manip TID 26F1 (RAM Address 1358 in BizHawk), current manip waits 4-3-12-2 frames on the first 4 inputs of the TAS to get this. This corresponds to the first half of the party count address.
Start a new game, and hold B while text is appearing while clearing text with A, switching which input holds and which one clears as needed to avoid consecutive input lag. This achieves the same effective text speed as Fast without setting options before New Game.
Name your character the default Yellow, which corresponds to a data value of 61 which can be swapped into the owned pokemon count
Name your rival the default Blue, which has a side effect of improving the speed of the battle transition before Oak catches Pikachu. The transition reads from invalid memory because battle transitions are based on your first pokemon's level and the opponent's level, but you don't have any owned pokemon yet! This out of bounds read ends up pulling from rival name. By either writing 5 characters into a non default name and then deleting 4 of them (useful for glitchless) or in a shorter run like NSC using a default name, you'll guarantee the ~30 frame faster transition.
Set options using fast options: inputs Start->Up->Up->Left+A->B->Start. This is the payoff for not setting options before new game, it is faster in TAS timing to set options after the game loads as the start menu is a few frames less laggy than entering options from the main menu.
Pikachu Manipulation Strategy
Before leaving the house, set up rDIV in System Bus FF04 so that the desired Pikachu DVs are possible. A Pikachu with DVs 70C8, 70C9, 70D8, 70D9, 71D8 or 71D9 is needed for ACE and the optimal rival battle. These DVs are generated from successive calls to HRandomAdd, and HRandomAdd is calculated by addition of its current value and rDIV, so for instance to generate Pika 70C9 HRA=C9 and rDIV=A7 are needed so that HRA2 = HRA + rDIV= C9 + A7 = 70. In decimal the ACE-worthy Pikas come from rDIV values of 151,152,167,168, and 169. Within a given map, rDIV tends to be stuck cycling in increments of 18.3125 so that it repeats every 14 frames. In order to break the cycle efficiently, the amount of time spent on previous maps needs to be varied to find different LCD disable lengths between maps. The last textbox before DVs can then be delayed to get to the right part of the cycle for 151-152 or 167-169. Also, in Oak's house where Pika DVs are obtained, textbox delays (especially before the last end of paragraph text box) will shift the initial HRA value (C9 in the example) without shifting rDIV on a given frame.
Practically this means delaying the last input before Pika DVs at least 14 frames to provide buffer space for the rDIV cycle, then changing up turns while walking, delaying walking, pressing A to check for NPCs, and delaying textboxes (especially end of paragraph boxes) on a previous map such as parts of Mom's house while watching Pika's DVs until DVs that correspond to the good rDIV values are found. Then in Oak's house removing a frame before Pika DVs and adding it in different areas of Oak's house will generate several different initial HRA rolls, hopefully landing on or near C8/C9/D8/D9. If C7/CA/D7/DA are found, removing another frame from before Pika DV generation and adding it to the immediately prior textboxes is more likely to shift HRA by a single value.

Rival One and Cutscenes

Use this Strategy to manip a Pikachu with DVs 70C8, 70C9, 70D8, 70D9, 71C8, or 71C9
Win in 3 turns in red bar by critting Eevee with Thundershock, taking a 7 damage 1/39 high roll tackle, hitting Eevee with non-crit Thundershock, taking a 10 damage 1/39 high roll critical hit tackle, then critting Thundershock again.
Avoid encounters, get the parcel, take all yolograss, deliver the parcel, avoid encounters again and buy two poke balls.
Do the old man catch tutorial. This is an improvement from the previous route which would lose about 7 seconds by catching the extra pokemon and using the Viridian Center instead of deathwarping to Pallet and catching the extra pokemon on the way back to Viridian.

ACE

Take all the yolograss and DeathFly off a Pidgeotto, it needs 8 Attack for a better range to 1 shot this Pikachu. Hope that the rDIV manipulation doesn't need to be done again for Pidgeotto to show up in the right part of the DSUM cycle.
On the way back to Viridian, catch any encounter with DVs 76XX (here 76XC with the Special value of C causing a Nidoking encounter in the forest)
Deposit Pikachu, ideally moving the NPC who blocks the optimal path out of the way.
We no longer need to reset here, resetting in TAS only serves to avoid a later encounter and the reset is slower than the encounter by ~7s.
Don't flash the pokedex, this was a relic from the RTA route (saved ~5s).
Go back towards the forest and enter the 2nd house on a frame where the bird moves left and the girl moves up immediately. The NPCs will have timers that are randomly set between 0 and 127 after each movement; we want to manipulate them to roll low so we can repeatedly move them.
Girl NPC Timer: BizHawk Address 0228
Bird NPC Timer: BizHawk Address 0238
Manipulate the Bird to move left 3 times and the girl to move up twice in total, including their movements as you're entering. While you're doing this flash the town map in the back of the room once. Walk to the tile 1 up and 3 right from the entrance as the NPCs finish getting into place.
Manipulate the bird to move left again just after you stop on that tile, then move right on a frame that puts FE in RAM Address 0331 and continue walking down and then left to leave the house.
Walk back to the forest and hop the first ledge you see once on your way there.
Choose Buy in the Mart, Double input 12 down then hold Down through 4 click items which need a B press to pass, then double input 6 down, press A scroll down to 89 and press B. Then double input 5 down and buy 4F.
Press B and hold with Left to reapply B to leave the buy menu, then press B twice more to close the shop.
Don't step right (no longer needed), open the menu, open items and use 4F only once to use the manipulated TID, Pikachu's DVs, and the stat experience gained from Eevee as code to set party count to 84 causing party underflow.
Open the party, your cursor location during these swaps can be tracked at RAM Address 0C26 starting at 0:
Swap slots 0 and 13
Swap slots 12 and 23
Swap slots 23 and 15
Swap slots 17 and 83 (scroll up past 0)
Close the menu and press up to enter the Hall of Fame. These swaps use the wild encounter's DVs (76 from attack and defense) to point to the Hall of Fame and then the item count to set the Hall of Fame Script straight to the credits past the initial Oak dialogue. The Yellow character name is also swapped into owned pokemon count to prevent an input when Oak assesses your pokedex. This saves 18 seconds over an ACE route that does not change the quantity of seen pokemon. The TAS ACE route now used is unique from the RTA route due to the near impossibility of manipping the unbuffered trainer ID (4 consecutive 1 frame 60fps inputs) and the impracticality of manipping Pikachu DVs through several textboxes and NPC timers.

Memory: Judging
Memory: Updating with 711 frame improvement.
Memory: Updating with 823 frame improvement.
Memory: Optimization seems good.
The run was definitely entertaining especially with the new improvements. The glitches in particular were entertaining.
Now while the run does indeed not corrupt save data (anymore), we typically prefer labels that prefer to say what a movie does rather than what it does not, so I am relabeling to "game end glitch".
I felt the run wasn't different enough from [3655] GB Pokémon: Blue Version "warp glitch" by gifvex in 10:12.00 for the reasons listed in this post. Many others also felt that the runs were very similar. Since this is the faster and arguably more entertaining of the two runs, I believe it should obsolete Blue.
Spikestuff: Publishing.


TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
I've taken Gifvex's first 2 fixes into account and have an update to this submission with a completion time of 10:06. Note that this is faster than Blue NSC now. If anything that should demonstrate how incomparable the two routes are :) http://tasvideos.org/userfiles/info/50872871357029851
Memory
She/Her
Site Admin, Skilled player (1556)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
TiKevin83 wrote:
I've taken Gifvex's first 2 fixes into account and have an update to this submission with a completion time of 10:06. Note that this is faster than Blue NSC now. If anything that should demonstrate how incomparable the two routes are :) http://tasvideos.org/userfiles/info/50872871357029851
Updated. I don't see how this proves the two routes are incomparable though. Not saying that Red/Blue and Yellow must obsolete each other in this case but your logic here doesn't add up. Plenty of times when routes within the same version of the same game become faster or slower than each other based on new discoveries and we don't make separate branches for such route differences.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
There are basically two things going on making the routes/games incomparable despite both ultimately using the trainer fly glitch. As Gifvex mentioned, Blue loses a lot of time because it can't set up a glitch mart like Yellow does by getting FE in $C331. On top of this, color lag and the various cutscene differences make Yellow inherently -slower- than Blue outside of the glitch execution, as you can see following Gifvex's 3 way demo. Obviously you might have a different opinion if you focus on the similarities with trainer fly or if you consider Yellow and Blue different versions of one game as opposed to separate games in a generation.
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
When deciding on obsoletion chains and branches, we look at both similarities and unique features. And when it's about games that aren't identical, yet somewhat close to each other, we must compare similarities and unique features of the TASes as well as of the games themselves. That's what we do for hacks in Moons. Pokemon games just happen to be so numerous that overlapping content is really unavoidable between certain games, so we kinda have to treat them a bit like we treat hacks.
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.
Post subject: Differences and similarities with Blue
Memory
She/Her
Site Admin, Skilled player (1556)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
There has been some confusion as to why we are comparing this movie to [3655] GB Pokémon: Blue Version "warp glitch" by gifvex in 10:12.00 to begin with. Our movie rules state the following:
If there are significant in-game differences between different versions of a game, movies which take advantage of such differences can be published side by side. This can include things like different weapons or routes available to the player, different levels being present, or different bosses fought. If a particular version introduces a mechanic which can alter how the game is played, such as where players re-spawn when they die, and this mechanic can significantly alter how the game is played, movies which utilize these changes can be published side by side.
What this means is that differences between two versions must be adequately displayed in movies of different versions with similar goals if both movies are to be published side by side. They should be able to be noticed by a general viewing audience since we cater towards such. I have compiled a list of similarities and differences I have noticed between the two runs and what I felt was minor or major. Similarities:
  • Goes through basic introductory sequence through Viridian Forest lasts about 25000 frames! (major)
  • Performs a DeathFly (triggering a wild Pokemon encounter on the same tile that would trigger a trainer fight and dying to it) at the last trainer of Viridian Forest (major)
  • Catches an additional pokemon and swaps to it at some point (minor)
  • Starts visibly glitching at start of Viridian Forest (major)
  • Warps to end of game in some fashion (major)
Differences:
  • Different cutscenes (minor)
  • Different starter (only 2 relevant battles though) (minor)
  • Different Rival Battle (minor)
  • Different catch and catch location (minor)
  • Setup involving NPCs (major)
  • The mart menu and party swap stuff to cause warp as opposed to getting into multiple trainer fights causing warp (major but see addendum)
  • One goes to hall of fame, the other directly to credits (majorish?)
Addendum: Menu glitches of the sort demonstrated in this Yellow TAS might not be present in the Blue Warp Glitch run but are known to be present in other R/B branches and it is safe to say that this type of glitch is not inherently restricted to Yellow, even if this specific method is. To me this does not seem significant enough to warrant separate publication however others may disagree. I encourage people to post their opinions.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
There are a couple other things we should keep in mind. Imagine these are the differences between 2 TASes of the same game version. We've obsoleted movies with way more difference in the past, even across goals. Within the same goals, having obvious differences is even less realistic. On the other hand, back in 2013 we started removing movies from obsoletion chains using the Moons tier principles. Yet the main difference between those movies was that one of them uses major skip glitches like "game end glitch" or "save corruption", while another one avoids it. This resulted in different goals, different movie classes, different TAS features behind them, and vastly different general impression from the 2 movies. How many of these factors do we have here? How many of them are unambiguously defining the branch like "save corruption"/"no save corruption" does? So far I get the impression that these 2 movies are more similar than they should be. The fact that there are tons of Pokemon versions and branches certainly doesn't help. It looks like for the fans, of course these are different. Not sure how many of them think that they are vastly different though. But for non-experts and for general audience? Meh.
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.
Memory
She/Her
Site Admin, Skilled player (1556)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
I'd like to clarify my comparison only pertains to these specific goals. It is much more likely a Red glitchless (as the Pokemon community refers to it) submission would be published separately from Yellow glitchless because far greater differences between versions would be displayed.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
We're taking another pass at this to try to implement the faster set of party swaps Gif described. In doing so we uncovered a new bug: The game has a routine to decide which battle transition to use based on player and enemy pokemon levels, there are 2 possible transitions with one being about 30 frames faster. It uses this routine before the Pikachu catch despite you not having any Pokemon yet, causing reads from out of bounds memory. It turns out that it's possible to manipulate the wPartyMon1HP read on line 94 of the linked code by writing to the Rival Name. In practice, this means that specifically for Yellow, using the default Blue nickname is ~30 frames faster than previously thought in NSC TAS, and by writing and then deleting 5 characters while manually setting a name in Glitchless you can save a net 10 frames.
Memory
She/Her
Site Admin, Skilled player (1556)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
Let me know when you have any updates.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
I've found the 1 in 10k pikachu DV combination required for Gif's ACE setup and am hoping to have another revision within a couple of days.
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
I got pretty excited about this one and finished another revision: http://tasvideos.org/userfiles/info/51165201188542650 time is closer to 9:52 now, possibly sub 9:50 on console.
Memory
She/Her
Site Admin, Skilled player (1556)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
I took a look and incidentally this time it does not result in a corrupted save. Now it is truly no save corruption.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
Yeah that's a neat little side effect of the new Gifvex route
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
I've updated the submission with documentation of the new route and the steps required to set up the rare Pikachu DVs.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3821)
Joined: 11/30/2014
Posts: 2829
Location: US
Cool stuff! Re-voting yes.
Editor, Reviewer, Skilled player (1358)
Joined: 9/12/2016
Posts: 1646
Location: Italy
Yet again great movie! And thank you for a new commentary. I think that at this point we can start discussing about the movie label. The main problem is that, technically speaking, we already have a published run that does also not corrupt save data: [3664] GBC Pokémon: Yellow Version by TiKevin83 in 1:36:41.68 Then I have to note that it's more appropriate to have a label that tells what the main feature of the movie is, and not what the movie is not. In this case it should be "game end glitch" rather than "warp glitch". If none of these are enough appropriate for describing the glitch used, then we could come up with something more specific.
my personal page - my YouTube channel - my GitHub - my Discord: thunderaxe31 <Masterjun> if you look at the "NES" in a weird angle, it actually clearly says "GBA"
Editor, Player (44)
Joined: 7/11/2010
Posts: 1029
It needs to be listed, somewhere in the category name or in the submission post's extended description of the category, that resetting during a save is categorized out from this run. Otherwise the run is just suboptimal, as faster game end glitches than the one here exist (specifically, resetting during a save can also be used for a game end glitch). Saying "game end glitch" in the title is all very well, but when multiple such glitches exist and the run isn't using the fastest, you need to explain why.
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
We don't use "game end glitch" if save corruption is involved in the primary game breaking glitch used in the movie. We use "save glitch" then. So right here, it's accurate to call it GEG.
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.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15577
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [3880] GBC Pokémon: Yellow Version "game end glitch" by TiKevin83 in 09:52.81
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
I'm taking another pass at this run now due to MrWint's improvement to the Pikachu DV manip. The Pidgeotto DSUM still aligned quite well, so I'm currently 173 frames ahead of the previous TAS after deathfly to Pidgeotto. I'm hoping to make up a few more frames with a better 76XX encounter manip (there are at least 34 wasted frames there) and lock in a 9:49. This is the WIP file with the new Pikachu setup from MrWint. http://tasvideos.org/userfiles/info/51591702623692769
TiKevin83
He/Him
Ambassador, Moderator, Site Developer, Player (155)
Joined: 3/17/2018
Posts: 358
Location: Holland, MI
9:47 run, shaved 293 frames in large part due to MrWint's Pika DV manip but also due to much improved forest, Pidgeotto, and 76XX encounter manip.