Submission #5185: NieDzejkob's GB Pokémon: Blue Version "warp glitch" in 13:55.01

Game Boy
(Submitted: Pokemon: Blue Version )
warp glitch
(Submitted: warp glitch no save corruption)
(Submitted: Pokemon - Blue Version (USA, Europe).gb USA/Europe)
BizHawk 1.11.6
49873
59.7275005696058
4265
Unknown
Submitted by NieDzejkob on 7/30/2016 9:33 AM
Submission Comments
This run aims to beat Pokemon Blue as fast as possible without save corruption. It uses the warp manipulation to warp to the hall of fame. However, to do so, you have to change your item bag into a hex editor.

Game objectives

  • Emulator used: BizHawk 1.11.6
  • Complete the game as fast as possible
  • Heavy glitch abuse
  • Luck manipulation
  • No save corruption

Route

Oak Speech

After the game boots up, options are set to Fast/Off/Set, which is the fastest combination of them. Then, new game is started and we have to choose the names. The player is named with the default name BLUE, because it doesn't really matter for any glitch, but the name of the rival is crucial.
At the end, a value of 118 is needed, which is the index of the Hall of Fame. To obtain it the fastest way possible, a space in rival's name is used, which is 127. Also, to avoid glitch items which take a long time to scroll through, the character MN is used, which makes the item TM26. So, the name of the rival is "MN ", where MN is one character.

The almost average beginning

The only thing that is different than normal playthrough in this part is RNG manipulation, in contrast to every other, where glitches begin. We exit our house and go to the grass to trigger Prof. Oak. Bulbasaur is chosen as the starter, because it is needed to have 16 Special to do Brock Through Walls. While all pokemon can do that, Bulbasaur has the highest base special, so it can do it the fastest. Bulbasaur's IVs are manipulated to be 14/10/15/13 (Atk/Def/Spd/Spc) and rival fight begins. Nothing special here, except again, RNG manipulation.
Then, the only possible step is to go to Viridian City, get the Oak's Parcel and deliver it, but when walking through grass, sometimes it is necessary to wait for one or two frames to avoid random encounters. The classic time saver is used: talk to Prof. Oak from the left of back while delivering the parcel to make the rival walk less. It works because NPCs walk two times slower than you.
When back in Viridian City, 3 Pokeballs are bought, together with Parlyz Heal and Burn Heal. Then, we go to Route 2, before the Viridian Forest, and encounter a Pidgey using RNG manipulation. That Pidgey has to have 15 HP in order to Brock Through Walls to work. We go through Viridian Forest and skip most trainers, collecting the Antidote. The last trainer however, commonly referred to as the "Weedle Guy", cannot be skipped. BTW, this is the last fight we have to win in this route. Also, the hidden potion in front of the weedle guy is picked up. After the fight, bulbasaur levels up to lvl 7 and gets 16 Special. It has to be this exact value for Brock Through Walls to work.

Brock Through Walls

In Pewter City an Escape Rope is bought and Brock Skip glitch is performed.
Normally, you are supposed to defeat Brock before continuing your adventure. It is enforced by a guy, which tells you about Brock and shows you, where his gym is. The game forces you to follow him. However, after the dialog box, but before the cutscene, A, B, Select and Start aren't locked (D-Pad however is). This can be used to save the game in that point, provided that the start menu cursor is moved to the save option before activating the brock guy. After the game is restarted, the cutscene is resumed, but the state isn't saved right and you aren't forced to move and you can exit Pewter City.
However, there is more. If you turn back and talk to the guy from the right, the game softlocks, because you were never supposed to do it. It happens because the game searches for your coordinates in the memory. Normally, it finds them on a special list in the game's data, but when not found there, it goes through the whole Game Boy address space. Because of that, we can prevent the crash by preparing the memory. Our coords in that place are 16 and 36. One entry on the list the game searches is four bytes long. Because of the address of the first entry, the byte 16 has to be on an address ending with 2, 6, A or E. Bulbasaur's Special is at D196, so it can be used as the first byte. This byte is however the last one in a Pokemon data structure, so next bytes are stored in the Pidgey. First byte of such structure is the Pokemon' internal ID, which is 36 for Pidgey.
You might have noticed, that the structure is four bytes long, however the coordinates use only two bytes. The next two are used to store a pointer to the walking sequence. If we control them, we can use them for interesting things. The one we use here is 0F00, written by 15 HP, which overwrites the disallowed buttons variable, meaning that we retain control. Also, when the walking sequence is active, collision detection is disabled, what means we can walk through walls now. However, when we want to walk down, we have to hold B.

Item duplication glitch

Using the Walk Through Walls, we go to Saffron City and heal in the Pokemon Center to setup blackout location. Also, bulbasaur is deposited into the PC because of the upcoming deathfly. On the sixth slot, there has to be an item usable in battle, so Escape Rope is switched with Potion. Now the item bag looks like this:
  1. Pokeball x2
  2. Parlyz Heal
  3. Burn Heal
  4. Antidote
  5. Escape Rope
  6. Potion
Now a death-based trainer-fly glitch is activated using the first trainer on Route 6. The guard in the gate says no passage, but because you are not supposed to be able to enter Saffron without unlocking the gates, the script moves you away from Saffron and you can go through the gate anyway. To activate the deathfly, RNG manipulation is used to encounter a Pokemon in the same time we move into the trainer's line of sight. Then we allow the Meowth to kill us, so that when the trainer notices us, we will be in front of the Pokemon Center. We go to the Fighting Dojo and lose to the first trainer. We have to make him walk to us, because the game will freeze otherwise.
After the blackout, we have to flash the menu to set the dialog ID right (menu is also treated as dialog), and then we go to Route 6 again. Just in front of the gate, start menu will pop-up. After closing it, missingno appears. When this happens, the highest bit in 6th item' count variable is set, effectively adding 128 (but only if it is less that 128 in the first place). This is because missingno has pokedex number set to 0, which makes the game treat is as 256, what makes it calculate the flag address that way.
Next, two potions are used to make the quantity 127 and MissingNo is caught. This makes the potions copy again, because when the caught flag is set, so is the seen flag. This is done because the code for marking pokemon in pokedex is also used in situations like trade, when both flags have to be set. Oh, and MissingNo's cry is rather long. And it turns into Rhydon after catching.

Item counter underflow glitch

The purpose of item counter underflow is to make the item counter decrement below zero, therefore making it 255 again and giving the player an ability to manipulate the game's memory using the items beyond slot 20.
The Saffron gate is entered and a bunch of inventory manipulation happens. If you are watching the video, make sure not to blink.
  • Potions are switched to slot 3. Item counter is at 6
  • Pokeball is thrown away. Parlyz Heal moves up as expected, but Potions move up and stay in the same place, effectively copying themselves. It happens, because the game moves the bytes until an FF byte (255 in decimal), which is also moved. That value is used to mark the end of the list. It works just fine because there is no item with such ID and you can have 99 items max. But using glitches, you can obtain quantities larger than 99, which we are abusing. Also, tossing the pokeball decremented the counter to 5
  • Parlyz heal is thrown away. Now there are three stacks of Potion x255 and the counter is at 4.
  • 255 Potions are tossed from the first slot three times, making the counter 1. Tossing 255 of any item doesn't change anything because of the special meaning that number has.
  • 253 Potions are tossed from the first slot to make the quantity 2.
  • First two slots are swapped, but because it is the same item, the game attempts to merge the two stacks. 255 + 2 = 257, which it truncated to 1 because the value is stored in 8 bits. Also, because of the merge, the item counter is 0 now.
  • First two slots are swapped again, making the quantity 0 (255 + 1 = 256 (mod 256) = 0). The counter is decremented and due to integer underflow it is set to 255.

The warp

  • The inventory is scrolled down until a TM26 x127 (rival name), which is swapped with Master Ball x17 down below (exit location ID).
  • Nine TM26s are tossed, making the count 118 - hall of fame. Now the menu could have been closed and upon exiting the gate a warp to Hall of Fame would occur, but that action is postponed.
  • One []j. glitch item is tossed from a stack of 193 of them, changing the options to make the text speed set to hidden fastest setting. It is probably used in the game during trades.
Now the menu is closed and upon exiting the gate, a warp to Hall of Fame occurs. Prof. Oak tells us about the Hall of Fame (congratulations, this is the hall of fame, "POKeMON LEAGUE champions are honored for their exploits here!" :] )... and the ending animation starts. Thanks to the fastest text speed, the Professor Oak talks for only about five seconds. The movie stops with advancing the pokedex rating text.

Possible improvements

There are some things that could be improved, such as making the options Fast/Off/Shift, or changing them in-game, but I'm not going to do them, because of the RNG manipulation going on everywhere, what would mean almost everything would have to be redone. Also, Pokemon Red could be faster for that route, but previous plan was to get Abra at Celadon Game Corner, what was way faster on Blue. Now however, Red would be better because charmander is on the title screen instead of squirtle, making the beginning cry 7 frames shorter and because of shorter default name, saving one frame each time it is shown in a textbox.
Last Edited by NieDzejkob on 7/31/2016 9:52 AM
Page History Latest diff List referrers