The ABC is a classic challenge.
Jokes aside, this continues on the work of TheZZAZZGlitch's work on Gen 1 ABC, improving the route from 33 A presses down to 29 A presses.

Game objectives

  • Completes the game as fast as possible using minimum A presses
  • Save data corruption is not allowed
  • All other glitches are allowed

ACE setup

This run is similar to TheZZAZZGlitch's run and the current game end glitch run, in that it abuses 0xF8FF ACE. Due to the A press limitation, we can't rely on a custom player name for the ACE payload, so only one of the default players names, the TID, DVs, and IGT are used to perform the ACE payload. IGT needs to be 7 frames, while seconds could generally be whatever (in this run, it will be 0). The trainer ID is manipulated to be 0x2E08. The boxed Pokemon's DVs are manipulated to be 0x65E9. This results in the following payload:
; pick ASH for player name
; pick Bulbasaur for starter

; after player name, a = 0x6A

; wPlayTimeFrames
rlca ; a = 0xD4

; wNumInBox + wBoxSpecies
ld bc,0xFF99

; wBoxMon1Species
sbc a,c ; a = 0x3B

; wBoxMon1OTID (0x2E08)
ld l,0x08
; ld hl,0x0008 also works
; ld hl,sp+0x21 also works

; wBoxMon1Exp
add a,a ; a = 0x76

; wBoxMon1DVs
ld h,l ; hl = 0x0808
jp hl
The end of the payload jumps to 0x0808 while the a register is 0x76. This is basically the exact same idea as the old warp glitch TAS, except 0x07A0 is not the only location that works, various other locations work, including 0x0808. 0x0808 has both bytes be the same, making it easy to jump to with a limited amount of bytes. As long as the previous bytes can manipulate a to be 0x76 (the Hall of Fame map ID), this warps the player immediately to the Hall of Fame.
The reliance on the ASH default player name does mean this setup is specific to Red version, and wouldn't work on Blue version. However, I did end up making a setup that would work on Blue version:
; pick JOHN for player name
; pick Bulbasaur for starter

; wPlayTimeSeconds + wPlayTimeFrames (s: 30 / f: 8)
ld e,0x08
; ld de,$0008 also works

; wNumInBox + wBoxSpecies
ld bc,$FF99

; wBoxMon1Species
sbc c ; a = 0x3E

; wBoxMon1Type1 + wBoxMon1Type2
ld d,0x03

; wBoxMon1OTID (0x9253)
sub a,d ; a = 0x3B
ld d,e ; de = 0x0808

; another TID also works
; 0x9A53 (sbc a,d / ld d,e)

; wBoxMon1Exp
add a,a ; a = 0x76

; wBoxMon1DVs (0xD5C0)
push de
ret nz
; ret (0xC9) and ret nc 0xD0) and reti (0xD9) also works

; alternative TIDs
sub a,d ; a = 0x3B
ld h,e ; h = 0x08

; DVs for alt TIDs (0x65E9)
ld h,l ; hl = 0x0808
jp hl
Blue would be slower in any case due to relying on a specific seconds value, so Red's setup was opted for. Red's setup still requires a little bit of waiting however (not so much because of the seconds value, but because of the minutes value being bad).

Route

  • The trainer ID is manipulated to be 0x2E08. 0x2108 or 0xF821 also work, but 0x2E08 ended up being the fastest to manipulate.
  • Preset names are used as they only require 1 A press to select. ASH must be picked for the ACE payload to work here.
  • Options are set before New Game, as only then they can be set without an A press.
  • Bulbasaur is picked as the starter, with 0x65E9 DVs. In theory, a few other DVs would work for the ACE payload, but 0x65E9 must be used, as it is the only one which give Bulbasaur 10 or less defense DVs, and thus allows for a 3 turn fight. Nicknaming costs A presses, so nicknaming is not done.
  • Squirtle is out of the picture here, as it cannot do the rival fight in 4 turns. Charmander can technically do the fight in 3 turns, but its DV restrictions make the idea used for this ACE payload non-viable, so only Bulbasaur is left.
  • A 3 turn rival fight saves 2 A presses over TheZZAZZGlitch's run, whose ACE payload resulted in a 4 turn fight with Charmander.
  • The Rival fight is purposefully lost, as it does not need to be won and it is fastest to lose. This is done in 3 turns, needing 2 1/39 crits and a high roll crit. 2 Tackle misses are done with Bulbasaur (to save time).
  • A Level 5 Spearow is caught with 0xE4E0 DVs. Various DVs were technically workable here. However, to avoid needing to manipulate 1/39 crits to maintain red bar, the DVs needed to be as follows: Attack must be 10, 12, or 14; Defense must be 0, 2, 4, 6, or 8; Speed must be 14; Special can be any value.
  • Bulbasaur is deposited into the PC. The Pokemon Center is not used to set the blackout location, as that costs A presses.
  • A Level 5 Pikachu is manipulated at the end of the forest to deathwarp. Pikachu's stats are irrelevant (even if Pikachu had 0 special and Spearow had 15 special, Thundershock crit is a guaranteed KO).
  • The first bug catcher fight is manipulated to have 2 high roll crits from Weedle, allowing for red bar for the fight and the next fight. The L9 Weedle is KO'd with a 1/39 non-crit and a high roll non-crit.
  • The second bug catcher KOs Spearow, as defeating it is not needed. This saves 2 A presses over TheZZAZZGlitch's run.
  • The third bug catcher's Pokemon is won just like the first bug catcher. Damage isn't taken here as there're no more battles afterward and the battle must be won for the ACE to work.

The Potential Improvements Not To Be

TheZZAZZGlitch mentioned various possible improvements in his own video, none of which are used within this TAS. These potential improvements were actually looked at before this route (and my previous route) was created, and sadly they don't appear to actually bear any fruit.

Losing The Final Fight

The main possible improvement pointed out is fainting in the third Bug Catcher battle, rather than winning the battle with Spearow. This ends up having different values in VRAM for the function pointer, taken from the player's lead Pokemon. For most pokemon, this is an immediate dead-end as the VRAM used for the function pointer is 00 00, i.e. a crash in any case. However, Charmander/Pikachu and Bulbasaur both show potential, but end up falling flat.
Charmander/Pikachu was the main case explored in the video, where the VRAM contained 03 03, which ended up allowing for a jump to 0x03FF, the overworld loop. This lets you go fight the trainer again, although since you lose immediately, the player's sprite is used for the VRAM function pointer. This gives C0 CF for the VRAM data, which allow more potentially useful jumps like 0xCFC0 or 0xCFFF
0xCFC0 in theory has potential, but it ends up falling flat due to hitting a theoretically unavoidable invalid opcode in wLastMusicSoundID. Theoretically, as 0xCFC0 is at the end of wLoadedMon*, i.e. data we can control with our own Pokemon. Except this isn't that useful in practice, since it's just the speed and special stats we execute (as it's the end of the data), and the only way to make an actual jump would be to have a ton of speed/special, as in grinding to level 100 kind of speed/special, so pretty much completely useless.
0xCFFF in theory also has potential, but ends up hitting an unavoidable rst 0x38. 0xCFFF is at the end of enemy mon data, specifically at the second move's PP (note: this doesn't change due to moves used because funny Gen 1 enemies have infinite pp), and right after enemy mon data is wBattleMon*, which is fairly controllable. Unfortunately, this just slides down eventually to an rst 0x38 in wEnemyMonActualCatchRate. Weedle has the maximum catch rate, so 0xFF (i.e. rst 0x38). Weedle is also the first pokemon used in all trainer battles available in Viridian forest, so this rst 0x38 is completely unavoidable.
For Bulbasaur, it's actually a pretty interesting case. The VRAM contains FC CF. that means a jump to 0xCFFC or 0xCFFF would be available. This runs into similar issues to Charmander/Pikachu, but since Bulbasaur can in theory just faint against any of the Pokemon within the trainer battles, we're not stuck with Weedle. Unfortunately, there're only 3 enemy Pokemon available here: Weedle, Caterpie, and Kakuna. Caterpie runs into the same issue as Weedle (catch rate is 0xFF), but Kakuna seems to be a potential winner, as its catch rate is not 0xFF, and would allow for sliding down to wBattleMon*. Of course, in order for this to work, you would need to somehow make Bulbasaur faint while facing Kakuna, the Pokemon that only knows Harden and can never Struggle. And since Bulbasaur is part poison, you can't even let poison damage take care of it.
However, besides these 3 Pokemon, there is a final target that seems to have pretty interesting potential: Squirtle. Squirtle's VRAM isn't very interesting by itself. It's 0F 33. It offers 2 "interesting" jumps: 0x330F and 0x33FF. They seem completely useless at a glance, they just call some code in the ROM that eventually just safely returns. However, in doing this, it proceeds to allow the fainting to actually take place. Going back to Viridian Forest will thus immediately grant 0xF8FF ACE (as the script index is still at the right location), meaning ACE is available without needing to win any battles. This is extra good potentially, as losing battles means only taking 1 A press per turn, if we buy a ton of Pokeballs to waste turns (although such costs 3 extra A presses in order to use the shop).
Of course, Squirtle being used makes this less than ideal considering Squirtle is rather bulky (it would take 3 turns for the L9 weedle to defeat the L5 squirtle, as it does 7 damage at most (that includes poison damage), and it has to take out 19 HP). And of course, this means ACE still needs a box Pokemon (so have to catch and deposit another Pokemon anyways).
There is also the matter of the Pokemon put into the box in the first place. It cannot be any Pokemon. Most Pokemon found run into the same issue with their catch rates being 0xFF, meaning an unavoidable crash. The starters are all ideal in this case since they have non-0xFF catch rates. Besides the 3 starters, only Pikachu, Metapod, and Kakuna will not crash due to their catch rate.
But what if we were to let other Pokemon take the first 2 losses? This doesn't work either, due to the above restriction. Only Caterpie is able to be OHKO'd by the L9 Weedle, and it runs into the same 0xFF issue. Pikachu and Metapod both can be 2HKO'd, but this isn't able to doesn't offset the extra party management cost in doing this (although granted, even if it was a OHKO, it probably wouldn't offset the cost still).
I did find a route that actually saved an A press using Squirtle, which would catch a Pikachu for the box Pokemon, but only after the first 2 Bug Catchers are lost, stalling for a turn so Squirtle was taken down to low HP. This allowed for net 1 A press saved over TheZZAZZGlitch's route. Of course, I eventually found out how to improve the Spearow route which had way more A press saves available.

"Glitchy Overworld"

Another thing pointed out was a weird "glitchy overworld" that the player enters on losing the fight with the Charmander/Pikachu quirk. Most notably, exiting Viridian Forest seemingly leaves the player in a glitch city! Clearly, if we can control this, we can warp to the Hall of Fame!
Except this is actually no glitch city. These are just the standard gates, however, the map tile data loaded is loaded in the wrong place along with the warp coordinates, so the player goes way out of bounds with bad tile data within the gates. Nothing actually useful here. All 4 map connections don't lead anywhere (since this is just the gatehouse), and if you get to the coordinates where the doors would normally be, they work just fine, leaving you back into the normal overworld. Nothing exploitable it seems.

Darkman425: Claiming for judging.
Darkman425: I considered making the judging notes based around also doing a "minimum A presses" gimmick but it would just be unreadable by pretty much anyone.
The technical info on display for the submission notes were quite helpful for understanding this interesting submission. I found this to be a fun one to learn about and a fairly amusing watch as someone who likes looking at old games kind of fall apart, even with the constraint of sparingly using 25% of the buttons on the console. Nice work!
Accepting to Alternate as a new branch.
A dumb tidbit not related to the submission: not counting this line my entire judging notes has 39 A presses.
fsvgm777: Processing.


TASVideoAgent
They/Them
Moderator
Location: 127.0.0.1
Joined: 8/3/2004
Posts: 17477
Location: 127.0.0.1
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Location: 127.0.0.1
Joined: 8/3/2004
Posts: 17477
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. ---- [6981] GB Pokémon: Red Version "minimum A presses" by CasualPokePlayer in 12:20.368