GBC Pokémon Yellow in 1:27.23

Hell yeah! Frame war with myself!
One day, I was browsing some videos at Youtube and gia said the published movie could be improved by almost 6 seconds and asked if I could find the improvement. This submission aims to prove that the published run is actually improvable by almost TEN seconds. On a more serious note, I'd like to apologize to this site for submitting a run every time I found an improvement for this movie. I'm well aware that there are rules prohibiting this, but this TAS is counter-intuitive by nature and remains complex even at its broken state. I have learned the lesson now and took some weeks testing everything I could think of. Having said that, this submission is 9.72 seconds faster than my previous attempt, this time there isn't only one improvement, but three. I dearly hope that this is the final revision of this movie.

Attributes

  • Aims for fastest completion of the game
  • Manipulates luck
  • Corrupts save data
  • Heavy glitch abuse
  • Emulator used: VBA-rr v22

Comments

The glitch used to complete the game is the "Inventory glitch", caused by the items counter being overwritten with an arbitrarily large value, this expands the inventory to farther regions of memory and forces the game to convert this data into items, which can be manipulated by the player by means of item switching/tossing. This bug is very powerful, by abusing it, I can speed up the text and overwrite a warp's destination to the Hall of Fame, a map that, once entered, starts the end game sequence.
To overwrite the items counter this early, it's necessary to hard reset the game at the earliest frame that doesn't give a "save file destroyed" message. This corrupts the save and overwrites the party counter. Swapping the 2nd pokemon with the 10th overwrites the items counter and activates the inventory glitch.
The improvements come from faster scrolling, faster text speed and better overwriting of the warp address.

Fast item scrolling trick

When I had the idea for this, I began to wonder why I hadn't thought of it before...
The first items on the inventory have ID# 0, these items are very slow to scroll through, roughly at 30 frames per item. By swapping the 9th pokemon with the 11th, I turn many of these items into ID# 255, the CANCEL button, these items are scrolled at 7 frames per item. The faster scrolling was the biggest improvement in the movie.

Text acceleration glitch

If anyone thought Oak's talking at the Hall of Fame was too long, your problems are over.
The last four bits of memory address 0xD354 control the text speed. The game offers three "text speeds" for the player choice: FAST, MID and SLOW. Because there's no need to turn off animations or change the battle style and it's possible to keep the text at FAST speed by holding the B button, this TAS can safely ignore the options menu and thus, starts the game with the text set at MID speed.
However, it's possible to change text speed to "FASTEST" by putting a number that's multiple of 16 at 0xD354 by means of the inventory glitch. After doing this, all text will be output at once, instead of one character per frame as in fast speed. The funny thing about this discovery is that I declared the function of this address to be unknown for a long time, because I always held down the B button while I was experimenting with it, and this hid its effects.

Item switch + toss trick

The most perceptive viewers will see that I use a new strategy to overwrite 0xD362. In my previous submission, I said switching an item with a quantity above 99 did no good because the game would always set it back to 99. I was wrong, this is only true for normal items.
Glitched items that don't crash the game when you click them will maintain their abnormal quantity after switched. The previous run wasted many frames to toss the necessary amount to warp to the Hall of Fame. This new discovery allowed more improvements. My initial idea was to manipulate the higher byte of the Trainer ID to be 0x76. That doesn't work, because its address would always be attached to a Master Ball, a normal item which, as said before can't be switched.
Fortunately, there's the lower Trainer ID byte, it can be manipulated to be a useful glitch item (in this case, 6F) without any loss of frames at the title screen. The quantity attached to this item is always 0xBA = 186. Switching this item to the appropriate slot allows me to toss only 68 items to warp to the hall of fame, instead of the 138 that the published run throws away. In total, this trick saved 29 frames.

Other things I tried that didn't work

Overwriting address 0xD35D

Try entering the gameshark code 01765DD3 before starting Yellow. You'll spawn at the Hall of Fame and complete the game. This address can be reached faster than the one used here, but overwriting it to the Hall of Fame's map ID without a gameshark makes the game crash. I tried using it to warp to Gary's room, but this always made the game keep flashing weirdly and turned all nearby tiles into unwalkable blocks. That practically eliminated the use of this address.

Changing NPC dialogs to trigger the credits

That would be very cool. My idea was to change the dialogs that some NPCs have using the inventory glitch in a way that the credits are rolled immediately. It'd be an enormous improvement since the Hall of Fame wouldn't have to be visited. However, after some research, I figured this data is not stored in an obvious way and would need a lot of memory manipulation to pull off. Aside from this, all addresses I found that control this are around 0xD4XX, this is way too far to scroll. So, probably, even if this was possible, it'd still end up slower.

Coordinate manipulation

This one was very tricky because coordinates are a little complicated in this game. I wanted to do this to see if I could exit the house without the need of walking so many steps. It turned out that to overwrite coordinates, other "sensitive" addresses needed to be changed too and that always made the game crash. With a lot of item switching, I could only save two steps so this trick was useless.

Special thanks

  • gia, hanzou, Chamale and primorial#soup, the amazing RBY glitch finders.
  • Torchickens/ChickasaurusGL for his AreaDex project and GCL in general for info in Pokémon glitching.
  • Thomaz, Mukki, FractalFusion, Tilus, Mr. Pwnage, cstrakm, was0x, gocha and pretty much everybody else whose contributions made RBY TASing awesome.

Flygon: YouTube module added.
FractalFusion: Judging.
p4wn3r: Since no one else has done it, I replaced the YouTube encode with one that spells the author's nickname correctly.
FractalFusion: Accepting as an improvement to the published run.
GabCM: Using p4wn3r's and mmarks' encodes for publication.