Overview
This is a TAS of the USA/Europe version of Pokémon Blue, finishing with a in-game clock of 1:17. The emulator used for recording was VBA 1.7.2 re-recording v19.3, and will desync on v20. Throughout the run, only four pokémon are collected: Charmander, Gyarados, Abra, and Mew.
Features
- Aims for fastest time.
- Takes damage to save time.
- Uses death as a shortcut.
- Manipulates luck.
- Abuses programming errors in the game.
- Ignores semi-important goals in the game.
- No predefined saves.
- Genre: RPG
Description
As with the previous movie, this submission is also aiming for the fastest time to become the Pokémon League Champion, and does so 82,784 frames (approximately 23 minutes) faster than the last. In general, this new time can be attributed to better manipulation throughout, and a lot of new time saving route changes and glitches.
Luck Manipulation
Nearly all the manipulation in this game occurs during battles. By varying when a button is pressed, and also its duration, one can manipulate critical hits, damage, opponent misses, etc. In my previous run, I had given myself a 10 frame window for manipulation of a specific attack. In this run, I have narrowed this window to 2 frames for common occurrences, and 5 frames for rare occurrences (such as maximum damage critical hits or 1/256 misses). The difference is noticeable. Upon entering Vermillion, at which point the runs are nearly identical, I was approximately 35 seconds ahead.
Not everything can be manipulated so easily though. One thing that had long been a problem to manipulate were random encounters. Manipulating them away is not a problem, but for the most part, which pokémon one would see at a certain frame count seemed more or less fixed; one could attempt to change a part of the run to alter the randomality, but the encounter rotation was usually unaffected, or affected only mildly. With the help of
Nitrodon, and a gameboy emulator/disassembler known as no$gmb, I was able to determine not only what was causing this behavior, but also how to manipulate it. There are two memory addresses FFD3 and FFD4. These numbers are responsible for every aspect of pseudo-randomality in this game, and are updated in such a way that their sum (which I will refer to as the D-sum) remains nearly constant. In battles, it slowly rises, and in the field, it slowly decreases. If FFD3 is less than a certain value specific to the patch of grass you are in (stored at D887), you will have a random encounter. Which pokémon you encounter is determined by FFD4, and each pokémon in the area has a certain range in which it appears. Logically, this means that for a relatively long period of time, it is only possible to encounter a certain pokémon, because if FFD3 is small (usually less than 0F), then FFD4 will always be in the same range. Fortunately, by altering button presses, one can specifically manipulate this D-sum to be higher or lower to meet one's needs. Because of this, I was able to manipulate an Abra on my first step, and the trigger for Mew, a L16 Meowth (which is the area rare, with 1/256 probability) without losing any time.
Other things were manipulated as well, such as the location of the switches in Vermillion Gym, causing people to move (or not to move), etc.
Glitch Abuse
If you wish to be surprised while watching the movie, do not read this section until afterwards.
Snazzypadgett from the SDA forums (specifically in this thread) (EDIT: link removed as it no longer exists) noticed that after performing the Trainer-Fly glitch, that he (or rather, a friend of his) had managed to make Snorlax disappear. Details were vague, but after experimentation, several people were able to reproduce this.
Hanzou did a lot of research on this glitch, and found that it was not only Snorlax, but the last disappearable object seen before or during the glitch, where a disappearable object can be a number of things: Snorlax, Legendary Pokémon, item balls, guards, and even Rival battles. However, alone this glitch isn't very useful. It allows for a faster route to Lavender (instead of going through Rock Tunnel, about 50-60 seconds faster), but doesn't allow one to skip the Poké Tower, where one normally gets the flute to wake Snorlax up. The reason is, that the tower needs to be done before you gain access to the Silph Co. building, and without going through there, you cannot enter Saffron Gym, or Viridian Gym.
Later,
Chamale, while experimenting with the Glitch City glitch, noticed that if on the step when you get called back to the Safari Zone, you are jumping over a ledge, when you get there you will remain in mid-air. Not only that, but inside the building you can walk through walls as you please. The problem is, this effect ends when you use the door to exit the building. The solution was not to use the door, but instead to warp out via death. The only way to do this is with poison damage, and after you warp out, the effect continues and you can walk through walls as you please, but only until you enter a building. This run utilizes this glitch to skip large portions of the game towards the end of the run, and only completes the remaining Gyms necessary to get past the Badge checks. Earthbadge, obtained from the last Gym, is not checked, so this Gym is skipped as well. In order to perform this glitch, one needs to take exactly 500 steps outside of the Safari Zone. If it appears that I am biking around needlessly in a few sections, this is what I'm doing.
A problem is, that in order to black out (death, in this game), all of your pokémon need to be fainted. This means that you cannot fly anywhere afterwards unless you had a fainted flier in your party, because you cannot enter a Poké Center to withdraw one. To save time from having to faint multiple pokémon, Mew was chosen as the main battler for the second half of the run, and was taught Fly. Also, because so much of the game is skipped, Mew was caught at level 1, and leveled to 100 in a single battle via the experience-underflow glitch.
Mr._Pwnage posted an excellent description of this glitch shortly after its discovery in the
Pokémon R/B thread.
The run also generates a miss for an attack which was not intended to be able to miss: Lt. Surge's Raichu using Thunderbolt in Vermillion Gym. Previously, I had listed this as luck manipulation, but after examining the disassembled code, I am also convinced that this is a programming error. Each attack has a miss ratio associated with it, which is simply stored as a value between 0 and 255. Attacks which are not intended to be able to miss have a miss ratio of zero. When determining if an attack has failed, a pseudo-random number is choosen, also between 0 and 255, and this value is subtracted from the miss ratio. If there was not a carry (if this value is less than or equal to the miss ratio), the attack will fail. Obviously, the programmer had intended to have these operands switched, and to check for carry instead; in the check for non-physical attacks, this is implemented correctly. This glitch was fixed in later generations of Pokémon.
Possible Improvements
Towards the end, I use a trick a few times which saves a little time; if your health bar is red, the delay from battle cries and from fainting is suppressed. When you do this, however, there is an annoying alarm in the background, and I only do this in places where I needed to take damage anyway. Were this trick to be done throughout the entire run, it's possible that it could save time, but I think having to listen to the alarm for the entire run would detract from the entertainment value significantly.
I use Gyarados for the first half of the run, because even with the extra glitching time involved, it is still faster than playing Charmander up to the earliest point to catch a Mew. An alternative to this might be to glitch a L100 Gengar in Mt. Moon instead, which could possibly be faster. The downside to this, is that for the entire run one would be using a L100 pokémon, which I think also takes away from entertainment.
New glitches? In the Badge check, Boulderbadge is also no longer checked. If a way could be found to leave Pewter without doing this Gym, this could save a lot of time, especially when using Charmander.
Special Thanks
Firstly, I would like to thank
hanzou, not just for his work on the Snorlax skip glitch, but also for suggesting several route improvements, and stopping me when I was about to redo half the run unnecessarily. Without him, the run would be significantly longer, and wouldn't be even close to done yet. I'd also like to thank
Chamale, for his awesome discovery which lead to the WTW glitch, and also for active participation in the pokémon thread, and helpful suggestions.
Thomaz also deserves a thank you for his real-time speedrun. The new route was more or less being pioneered as we went along, and it was good to be able to swap ideas. A thanks to
Nitrodon for his help picking apart the disassembled rom, and to
Mr._Pwnage for his description of the experience underflow glitch and other good advice. Also, to Snazzypadgett and all those at the SDA forums who worked on figuring out the Snorlax skip mechanics.
Bag_Of_Magic_Food: 90 minute blitz? And lastly, all those who actively gave feedback and suggestions in the pokémon thread.
Bisqwit: Accepting and taking for encoding.
I'm glad you also had mind on entertainment and didn't just singlemindedly go for the absolutely fastest time.
NesVideoAgent: Hi! I am a robot. I took a few screenshots
of this movie and placed them here.
Oh! I also replaced the ROM name.
- You indicated
Pokemon Blue (UE) [S][!].gb
- I updated it to
Pokemon - Blue Version (UE) [S][!].sgb