Bugs:Pokémon Red and Blue
This page details bugs of Pokémon Red and Blue.
This page or section needs more images. There's a whole lotta words here, but not enough pictures. Please fix this. Specifically: All but one entry is missing an image showing the bug in effect. |
Contents
- 1 Overworld bugs
- 1.1 Safari Zone Glitch
- 1.2 Trainer-Fly glitch
- 1.3 Unwinnable Game
- 1.4 Man on the Roof Glitch
- 1.5 Escape Rope bug
- 1.6 Invisible PC bug
- 1.7 Vermilion Gym Trash Can bug
- 1.8 Cable Club Escape glitch
- 1.9 Vending Machine bug
- 1.10 Statue bug
- 1.11 Game Corner bugs
- 1.12 Cycling Road save bug
- 1.13 Lift Key bug
- 1.14 Silph Co. 11F bug
- 1.15 Surf glitch
- 1.16 Trapped glitches
- 1.17 Fainted party walk glitch
- 2 Battle Engine bugs
- 2.1 1/256 Miss Bug
- 2.2 Lorelei Softlock
- 2.3 Evolution Stone bug
- 2.4 Ghost type
- 2.5 Ghost bugs
- 2.6 Psywave bug
- 2.7 Fly/Dig Invulnerability bug
- 2.8 Healing Moves bug
- 2.9 Focus Energy bug
- 2.10 Hyper Beam bugs
- 2.11 Mirror Move bug
- 2.12 Transform bugs
- 2.13 Substitute bugs
- 2.14 Toxic bugs
- 2.15 Blaine AI bug
- 2.16 Cooltrainer AI bug
- 2.17 Counter bugs
- 2.18 Dual-type effectiveness bug
- 2.19 Bide bugs
- 2.20 Victory music bug
- 2.21 Jump Kick bug
- 2.22 Reflect/Light Screen bug
- 2.23 Division by zero bug
- 2.24 Exp. All bug
- 2.25 Stat modification bugs
- 2.26 Levelup learnset glitch
- 2.27 Mimic bugs
- 2.28 Binding move PP overflow bug
- 2.29 Freeze desync bug
- 2.30 Minimize/Substitute bug
- 2.31 Battle Transition bug
- 2.32 Endless Battle Bugs
Overworld bugs
Safari Zone Glitch
The Safari Zone Glitch is probably one of the most infamous bugs due to how early it was discovered. The core of this glitch is that the Safari Zone guard will give the wrong speech if a specific set of instructions is followed. To perform the glitch:
- Go to the Safari Zone and pay to enter.
- Once inside, go right back to the gate.
- When asked if you want to leave, say no to be brought back inside the Safari Zone.
- Once there, save the game. Reset the console and load the saved game.
- Go back to the gate and this time you will be asked if you want to enter the Safari Zone.
If at this point you say no, you can leave the Safari Zone but the game thinks a Safari Zone game is still in progress. This means that all battles, including trainer battles, are replaced with the special Safari Zone battles (i. e. you can throw bait/rocks and Safari Balls, but not actually attack), but moreover, it also makes the game keep track of your steps, and sounds the bell to return you to the Safari Zone gate once you reach 500 steps.
The reason this glitch happens is actually a bit complicated and requires a bit of in-depth understanding of the game mechanics:
- Every overworld map in the game keeps track of the script ID, which is used to run various events (such as trainers walking up to the player if spotted). The script corresponding to the script ID is run every frame.
- The Safari Zone gate guard uses the script ID to keep track of which speech he should give (00 = "Welcome to the Safari Zone!", 05 = "Leaving early?")
- Normally, when you enter the Safari Zone, the script ID is set to 05, ensuring that the Safari Zone gate guard gives the correct speech for the situation. However, if you enter the gate house and say no to the "Leaving early?" question, the game makes the player auto-walk back into the Safari Zone. This is its own script (06), overwriting the script ID.
- Now, under normal circumstances, the regular script ID would be shoved into the temporary memory value CF0D. The moment you reenter the Safari Zone gate, the game will read this value and restore the script ID, ensuring everything is fine.
- However, the value of CF0D is not written to the savefile. So if you save at this point and then reset the console, that value gets initialized to 00, and if you reload the save file and go back into the Safari Zone gate, the guard will subsequently give the wrong speech.
- The flag whether a Safari Zone game is currently in progress is stored separately, so if you say no and leave the Safari Zone, the game still thinks a Safari Zone game is running.
The second part of this glitch occurs once the Safari Zone's bell goes off. You will warp back to the Safari Zone Gate, and depending on where you were when you reached 500 steps (most towns do not trigger this glitch), you will end up in a completely random, unplayable assortment of tiles dubbed "Glitch City" by the Pokémon community. The only way to get out is to Fly or Teleport, as doors and caves don't work and the game crashes when attempting to leave the map boundaries. This happens because exiting the gate house tries to return the player to exit 04 of the last overworld location, which under normal circumstances would be Fuchsia City, in front of the door leading into the Safari Zone. However, since the glitch allows you to freely roam the overworld, the last overworld location may be somewhere else, and if that place does not have an exit 04 (most routes don't, most towns do), the game will read garbage data instead.
Some further implications of this glitch are:
- If the 500th step is above a ledge, so the character is in mid-air when the bell sounds, you will gain the ability to walk through walls upon returning to the Safari Zone gate. This ability fades the moment you exit to (what would be) Fuchsia City, but it persists if you black out inside the gate (by having your last Pokémon faint from poison damage), allowing you to freely traverse the overworld.
- If the 500th step is during the sequence in Pewter City where the NPC guides you to the Pewter Museum of Science, upon exiting the Safari Zone gate you will appear back in Pewter City but the NPC, and the rest of the game, will glitch out completely.
- If the 500th step is on a spinning tile (such as those in Rocket Hideout), the player will be perpetually spinning upon returning to the Safari Zone gate. This can also cause the player sprite to be replaced with another NPC if the player uses the PC in this state.
In Red and Blue only, the Safari Zone Glitch could also be activated by blacking out inside the Safari Zone. This method was fixed in Yellow by checking whether the player blacked out in the Safari Zone, and resetting all Safari Zone-related flags if that is the case. However, the Save & Quit method described above works in all versions.
Trainer-Fly glitch
The Trainer-Fly glitch quickly became famous because it allowed people to catch Mew for the first time, and unlike all the schoolyard rumors it actually works.
The basic gist of the glitch is that for trainers that have a sight range that spans the entire screen, if you scroll the trainer into view and step into its sight range, the script that makes the trainer see you can be interrupted in one of the following two ways:
- Open the menu (there is a short window of input where you can open the menu before the trainer sees you), then Fly or Teleport away. Inside a cave, Dig or Escape Rope will work as well.
- Get a wild encounter on the exact tile the trainer would spot you (through tall grass or inside a cave). The wild encounter takes priority over the trainer seeing you. From there, lose the battle by blacking out.
If done correctly, the trainer will spot the player (the ! sprite will appear over his head) but the player character will warp away before the trainer gets a chance to walk up to the player character.
Because the game still thinks that a trainer battle is about to take place, the menu will be disabled. The effects of this can be remedied by fighting a different trainer (in a different area than the one where the first trainer was encountered), making sure the trainer walks to the player character (if the player character engages the trainer directly or walks right in front of him without at least a tile of space in between, the game will softlock).
Once that is taken care of, walking back to the map where the first trainer was will open the menu automatically, then start a wild battle.
- The species of the wild Pokémon is determined by the Special stat of the last Pokémon fought. As such, if the Special stat of the last Pokémon fought was 21 (hex 15), you will fight a Mew.
- The easiest way to get the desired special stat is to have it on one of your own Pokémon, encounter a wild Ditto, have it use Transform on said Pokémon, then knock it out or run away.
- The level is determined by that Pokémon's attack modifier, which defaults to 7. By using Growl (or another Attack-lowering move) six times before ending the battle, you will fight a level 1 Pokémon, which causes various glitches as no Pokémon were ever intended to be encountered at level 1.
In Red and Blue, the earliest point in the game this can be used to catch a Mew is if the Jr. Trainer♂ on Route 24, directly west of Nugget Bridge is used as the first trainer, and the Swimmer inside Cerulean Gym, whose last Pokémon is a level 16 Shellder (Special of 21) is used as the second trainer. In Yellow, a Mew can be caught even earlier, using the Yellow-exclusive Bug Catcher in Viridian Forest as the first trainer, and the Super Nerd that protects the fossils in Mt. Moon as the second trainer.
A second, lesser known consequence of this glitch is that the game will remove one sprite from the overworld, because it makes the assumption that the wild Pokémon fought comes from a special one-time event (like the legendary birds or Mewtwo). This can be used to remove the sleeping Snorlax from route 12, eliminating the need to enter the Pokémon Tower and acquire the Poké Flute.
Unwinnable Game
Due to an oversight, it is possible to create an unwinnable game in all versions of Red, Green, and Blue. Around halfway through the game, you are required to pay 500 Poké Dollars to enter the Safari Zone in order to find HM03 Surf and the Gold Teeth (to give to the Warden for HM04 Strength), both of which are necessary to progress further into the game. If your money, the cumulative sell value of all your items, and the cumulative money yields of all available trainer battles total to less than 500 Poké Dollars, and you have no Meowth that can use Pay Day, the game becomes unwinnable.
This was fixed in Yellow by allowing you to enter the Safari Zone with fewer than 500 Poké Dollars:
- If you have some money, you'll be given fewer Safari Balls proportional to the amount you paid.
- If you have no money at all, bug the guard enough times and he'll let you in with one Safari Ball.
Man on the Roof Glitch
Under certain circumstances, an NPC's initialization script can be interrupted by opening a dialog box. The NPC will then appear in a random position on the screen (usually in the top left corner), facing down until the dialog box is closed. There are currently three known ways to trigger this bug:
- Transition to a new area and press Start to open the menu as soon as possible. If done correctly, the menu will open and the NPC will appear in the top left corner. This can be done e. g. with the first trainer on Nugget Bridge when coming from Cerulean City, the trainer on Route 6 when coming from Vermilion City, or with the NPC in Pallet Town when surfing from Cinnabar Island.
- Trigger a hidden object that opens a dialog box on the same tile an NPC is loaded. The NPC will then appear in a random location on the screen, based on the number of steps the player took since entering the map. This is the most well-known variant of this bug as it can easily be seen with the locked Cinnabar Island Gym door (when the player does not have the Secret Key), but it also works e. g. with the bicycles that are on exhibit in the Bicycle Shop (approach the bicycle and press A as soon as possible).
- The guard in the gate house on Route 16 (west of Celadon) that blocks passage to Cycling Road if you do not have a Bicycle calls its own function that is also suspectible to this bug. Simply try to enter Cycling Road and the bug will manifest itself when the guard stops you.
This glitch was partially fixed in the Italian and Spanish versions: The NPCs will load in their correct position, but their orientation is still not initialized properly, so they will face down until the dialog box is closed. The glitch was fully fixed in Yellow.
Escape Rope bug
In all versions of Red, Green, and Blue, you can use an Escape Rope to escape the Pokémon Fan Club in Vermilion City as if it were a cave. This was patched in Yellow.
Invisible PC bug
In Celadon Hotel, there's an invisible PC that can be used by walking to where the PC would be in a Pokémon Center (go to the very right of the room, stand one tile away from the counter and face up). Three of the four rest houses in the Safari Zone also have invisible PCs, though they cannot be accessed without using a walk-through-walls code.
Yellow removed all invisible PCs.
Vermilion Gym Trash Can bug
The algorithm that randomizes the position of the switches in the trash cans in Vermilion Gym is very broken in these games.
The original intent of the algorithm was to have the second switch always be directly adjacent to the first switch. To achieve this, the game has a table of possible positions for the second switch based on the position of the first switch, as well as the number of adjacent trash cans. The game then rolls a random number and performs an AND instruction between the random number and the number of adjacent trash cans to determine which trash can will have the second switch.
This has a number of unfortunate implications:
- If there are only two adjacent trash cans (i. e. the first switch was in one of the corners) or four adjacent trash cans (i. e. the first switch was in one of the three trash cans in the center), an AND with that number will only ever yield that number, making the position of the second switch seemingly guaranteed.
- However, the game fails to catch the case where the AND operation yields zero (i. e. there was no match between the random number and the trash can table). This makes the algorithm point to the zero padding past the end of the ROM bank instead, placing the second switch in the top left trash can.
The result is the following:
- If the first switch is in one of the two corners on the right side, the second switch can only be above/below the first switch (50% of the time).
- If the first switch is in one of the two corners on the left side, or is in one of the three center trash cans, the second switch can only be to the right of the first switch (50% of the time).
- Only the trash cans at the borders work like the algorithm was intended to work, giving each adjacent trash can an equal chance to have the second switch (25% of the time).
- In addition to all that, the top left trash always has a chance to have the second switch, no matter where the first switch was (50% of the time, or 25% if the first switch was in one of the border trash cans)
Yellow uses a different algorithm that is, however, bugged in another way.
Cable Club Escape glitch
If the player blacks out inside the Cable Club by having their last Pokémon faint from poison damage, they will return to the last Pokémon Center but the game still thinks the player is in the Cable Club.
The effect of this is that items can't be used and the Save option in the menu is disabled (though the game can still be saved by switching boxes in the PC). Also, if the player traded Pokémon or battled in the Cable Club prior to blacking out, all in-game trainers will display Red's sprite and have their Pokémon replaced with the team of the linked game. If there was no trade or battle prior to blacking out, the in-game trainers will be glitched instead.
This was fixed in Yellow by preventing Pokémon from taking poison damage inside the Cable Club.
Vending Machine bug
The vending machines in Celadon Department Store only check if you have enough money to buy a Fresh Water, even if you pick the Soda Pop or the Lemonade instead. This means you can buy those items even if you do not have enough money to cover their cost, as long as you have enough money to buy a Fresh Water.
Statue bug
The bottom tile of the statues that can be found in Gyms behaves like a water tile when faced from the left or right. This means you can fish in the statues (though only the Old Rod and Good Rod will pull up any Pokémon, since Gyms don't have any wild encounter data) and also Surf into the statue. This was fixed in Yellow.
Game Corner bugs
- As soon as the Game Corner is entered, an RNG script selects one of the slot machines to be the lucky slot machine, which has a much higher likelihood of winning. However, due to an off-by-one error in said script, it's possible that none of the slot machines in the Game Corner will end up being the lucky one.
- The lucky slot machine itself is also bugged. The original intent was that the first wheel will always stop at a 7, but the condition that checks this can never be true due to the wrong type of conditional jump being used ("jump if carry" instead of "jump if zero"). The second wheel was supposed to stop when that would yield a 7-7 or a BAR-BAR, but that code doesn't work either.
Cycling Road save bug
If the player saves the game on Cycling Road, then resets and starts a new game, the player will be unable to use a bicycle or surf until entering Cycling Road again. This is because the memory value D732, which stores the flag that determines whether the player is on Cycling Road, is not reset when starting a new game. Since that value also holds several debug flags, this may actually be a leftover from development.
Lift Key bug
The Rocket Grunt that drops the Lift Key is programmed to always drop it on the tile to his left. If the player stands in that position and interacts with the Rocket Grunt, he will drop the Lift Key right on top of the player. This was fixed in Yellow by making the Rocket Grunt drop the Lift Key immediately after the battle ends, rather than having to interact with him a second time.
Silph Co. 11F bug
Exiting the elevator on Silph Co. 11F will make the player appear right on top of the elevator door, rather than walking down as on all the other floors. This can lead to a glitch where the elevator exit will not work if you hold Down as soon as you appear inside the elevator.
This was fixed in Yellow.
Surf glitch
Walk towards a water tile, open the menu and save in the middle of the walking animation, then reset the game. If done correctly, the player character should be facing the direction he walked after reloading the saved game. If you now use Surf, the player character will surf down instead of the direction he's facing.
This can be used to bypass barriers, since there is no collision check for the Surf animation. The most common application is to reenter the S.S. Anne after acquiring Surf and reach the infamous truck. It can also be used to reach an otherwise inaccessible piece of land next to Bill's house, commonly titled "Bill's Secret Garden" due to the once rampant rumors surrounding this piece of land.
Trapped glitches
There are two instances in the game where the player character can get trapped, with no way to get out:
- In Pokémon Mansion 3F, in the room in the bottom left corner there's a trainer who walks back and forth horizontally. If you go into the narrow gap between the table and the rubble and then interact with the trainer from below to battle him once he passes by, once the battle ends the trainer will block the only way out of the gap. Since trainer positions are preserved when you save the game, the only way out is to either use Dig or Escape Rope or, failing that, black out to a wild Pokémon by repeatedly walking back and forth. This bug became infamous because it affected the initial playthrough of Twitch Plays Pokémon.
- In Cerulean City, the police officer in front of the burgled house will normally only move after you see Bill. If you trade in a Pokémon that knows Cut from another game, and cut the tree to battle the Rocket Grunt behind the house, once you receive TM28 the police officer will move as well as a failsafe. However, if your bag is full at this point, so you cannot receive TM28, the police officer will not move, and if you go through the burgled house from behind, once you exit you will be stuck on top of the door tile with the police officer blocking your path, with no way to get back in the house. Saving at this point creates an unwinnable game.
Fainted party walk glitch
If you deposit your party Pokémon to the PC so that only fainted party members remain, the game will normally force a blackout after 4 steps. This can be circumvented by saving and resetting the game every 3 steps, as the counter for this check gets reset to 4 when the game boots.
This occurs because the check for a fainted party was tied with the check that applies poison damage on the overworld, which operates on the (incorrect) assumption that a poisoned Pokémon fainting is the only way to get a party of only fainted Pokémon.
This glitch was fixed in Yellow, which runs the fainted party check every step instead.
Battle Engine bugs
1/256 Miss Bug
Rather infamously, any move in the game, including those that have 100% accuracy, may miss at a rate of 1/256.
This happens due to a quirk in how the game determines whether a move should miss or hit. The algorithm rolls a random number and then checks if that random number is less than the move's accuracy (taking into account accuracy modifiers and such) to determine whether the move should hit. However, if the RNG rolls an FF, this condition can never hold true because there is no number higher than that, so any move will miss if that number is rolled by the game's RNG. The only move that is impervious to this bug is Swift because it bypasses the accuracy check to always hit, however this applies only to the international (non-Japanese) versions of the games.
The same bug also affects critical hits: even if a Pokémon would be guaranteed to land a critical hit (by having a high base speed and using a move with an increased critical hit chance), there's a 1/256 chance the Pokémon will only score a normal hit.
Lorelei Softlock
In Red and Blue, it is possible to end up in a practically infinite battle if you challenge Lorelei with certain Pokémon that know the move Rage while all of its other moves have zero PP.
The reason for this is twofold: first is how the AI in Red and Blue works. While the AI used by wild Pokémon is fairly simple (it just selects any of its available moves at random), trainer AI on the other hand is forced to take type effectiveness into account and always chooses a move of a type super effective against the player's Pokémon, if available, even if that move is a status move (which will not deal damage).
In Lorelei's case, if the player sends out a Fighting- or Poison-type Pokémon (the two types weak to Psychic), Lorelei's Dewgong will use Rest continuously, because Rest is Psychic-type, and therefore the trainer AI is forced to select it (unless the Pokémon in question is also weak to the Ice-type Aurora Beam (which Lorelei's Dewgong knows), such as Nidoking (Poison/Ground), as there is a chance that the trainer AI will instead select that move). If the player's Pokémon cannot do enough damage to compensate for the amount restored by Rest, this results in the battle being unwinnable. Enemy trainers cannot run out of PP in these games, and there is no way to end the battle other than winning or losing. However, your Pokémon would eventually run out of PP, and trying to attack after this causes the Pokémon to use Struggle, which causes recoil damage, and this would eventually cause your Pokémon to knock itself out, ending the battle and causing the player to black-out, returning them to the last used Pokémon Center.
This is where Rage comes in, the second key necessary for this softlock. In Generation I games, when selecting Rage, one PP is consumed, and then the Pokémon is forced to continuously use Rage thereafter as long as the move doesn't miss the first time (bare in mind that Rage has 100% accuracy); however, these forced uses of Rage do not consume PP, even if a forced use of Rage misses, rendering the Struggle problem moot. Saving the game before entering the battle under these conditions effectively dooms the save file, as leaving the room Lorelei is in is only possible by winning or losing the battle against her.
That said, the above situation is technically escapable due to an infamous bug in Generation I where every move in the game, even ones with 100% accuracy, have a 1/256 chance of missing, including Rage. Therefore, triggering this miss 20 times in a row will deplete Rage's PP, causing the Pokémon to knock itself out with Struggle. Don't count on it, though, as the chance of missing 20 times in a row at these odds is astronomically unlikely (1/25620).
Yellow fixed this conundrum by programming in a special case for Lorelei's Dewgong, which allows the AI to break out of the above logic and select a random move from its move pool 40% of the time.
Evolution Stone bug
Pokémon that normally evolve by Evolution Stone will also evolve if they level up in battle and the last Pokémon sent out in that battle has the same index number as the evolution stone. The Pokémon correspond to the Evolution Stones as follows:
- Moon Stone (0A): Exeggutor
- Fire Stone (20): Missingno. (not normally obtainable)
- Thunderstone (21): Growlithe
- Water Stone (22): Onix
- Leaf Stone (2F): Psyduck
This bug was fixed in Yellow.
Ghost type
In the Generation I games, Psychic-type Pokémon are completely immune to Ghost-type moves. As this contradicts every piece of Pokémon-related media released at the time, including Nintendo's official strategy guides and the anime, as well as a trainer in Saffron Gym who mentions that Psychic-type Pokémon are weak to Ghosts, this is very likely a programming bug and not intentional. However, the only Ghost-type move that takes typing into account is the pathetically weak Lick, making it highly unlikely to encounter this bug in practice (which is likely why it was missed).
Starting from Generation II, Ghost-type moves are super effective against Psychic-type Pokémon, matching the depiction in official media.
Ghost bugs
The fights with the ghosts in Pokémon Tower, when their identities haven't been revealed with the Silph Scope, are particularly buggy in this game.
- Just triggering these fights will register Gastly, Haunter, Cubone, or Marowak as seen in the Pokédex.
- If you check out one of your Pokémon's stats during battle, the ghost will then display the sprite of its true form instead of the generic ghost sprite. This is a purely visual bug; you still can't attack or catch the Pokémon, and they will still never attack you.
- Using a Poké Doll on the Marowak ghost ends the battle as if you won, progressing the game's storyline. This completely eliminates the need to acquire the Silph Scope and skips the entire Rocket Hideout in the process.
Psywave bug
The special RNG algorithm that calculates Psywave's damage will discard a 0 if the player is the user but not if the player is the target. If this occurs in a link battle, the link battle will desync.
Fly/Dig Invulnerability bug
If a Pokémon uses Fly or Dig and the attacking turn fails due to confusion or paralysis, the Pokémon will become invulnerable for the rest of the battle until they use Fly/Dig or a charging move (Razor Wind, Skull Bash or SolarBeam).
Healing Moves bug
Healing moves (Recover, Rest, or Softboiled) will fail if the difference between the current HP and max HP is exactly 255 or 511. That is because the algorithm that determines if the move should fail due to the Pokémon already being fully healed erroneously doesn't take the upper bits of the HP value into account and only checks the lower bits.
Focus Energy bug
The move Focus Energy is completely broken in these games; instead of increasing the critical hit chance, it reduces it to a quarter of its original value.
The game's code reveals that the two branches that determine critical hit chance may have been accidentally swapped; if so, the reduced critical hit chance might have been the originally intended critical hit chance and the critical hit chance of the final game would have been the one after using Focus Energy. Thus, critical hits would have been a lot less common than they ended up being in the final game.
This bug also applies to the Dire Hit item, which uses the same function as the Focus Energy move.
Hyper Beam bugs
The move Hyper Beam comes with another set of bugs:
- If the player's Pokémon uses Hyper Beam, then gets frozen before it gets to its recharge turn, the player will stop getting turns altogether, allowing the enemy to attack endlessly until the player's Pokémon faints or gets thawed from a Fire-type move. The move Haze will thaw the Pokémon but not end the glitch, so the player will still not get any turns.
- If the player's Pokémon uses Hyper Beam, and the opponent attempts to use a binding move (Bind, Clamp, Fire Spin or Wrap) and it misses before the player's Pokémon gets to its recharge turn, the player's Pokémon will automatically use Hyper Beam again instead of recharging. If the move has 0 PP at this point, it will roll over to 63 PP.
- Hyper Beam does not need to recharge if it knocks out the opposing Pokémon. If the user flinches or gets put to sleep, the recharge turn is skipped altogether.
Mirror Move bug
In a link battle, if the player uses a binding move (Bind, Clamp, Fire Spin or Wrap) by way of Mirror Move, and the opponent switches out the Pokémon while trapped, on the user's side the Pokémon will continue using the binding move against the Pokémon that switches in, while on the opponent's side the game will say that the Mirror Move failed. This causes the link battle to desync.
Transform bugs
The move Transform is particularly buggy in these games:
- If the player's Ditto uses Transform, and then you use the Select button to swap the first move with a different move in the transformed Pokémon's moveset, once the battle ends the Ditto will have Transform replaced with the glitch move -- (two dashes), which corrupts the game when used. This was fixed in Yellow.
- If a wild Pokémon uses Transform and is caught while transformed, it will become a Ditto even if it was originally a different species. This can only happen when a Pokémon uses Transform by way of Mimic, Mirror Move or Metronome, as the only Pokémon that learn Transform are Ditto and Mew, and the latter cannot be legitimately encountered in the wild.
- If a Pokémon that used Transform levels up during battle and learns a new move, the transformed moveset will be replaced by its own moveset, even though the Pokémon will otherwise stay transformed.
- If a transformed Pokémon uses Metronome or Mirror Move, the Pokémon will gain 1 PP in the moveslot corresponding to its own moveset. If there is no move in that moveslot, the Pokémon is effectively locked out of Struggle forever. This can also lead to a softlock if the Pokémon has no usable moves and the enemy Pokémon attempts to use Disable.
- In SGB mode, any Pokémon that is not Ditto and uses Transform will have its sprite's palette replaced with Ditto's if the sprite is refreshed by opening the menu and checking out a Pokémon's stats.
- Critical hits involving a player's transformed Pokémon will incorrectly be calculated based off the Pokémon's stats before transforming. Wild Pokémon and Pokémon of in-game trainers are not affected by this bug.
Substitute bugs
The move Substitute comes with its own set of bugs:
- If the user's current HP is exactly 25% of its maximum HP, using Substitute will leave the Pokémon with 0 HP, fainting immediately.
- If both the player and the opponent have a Substitute up and the player's Pokémon hurts itself due to confusion, the opponent's Substitute will take the confusion damage instead. If the opponent does not have a Substitute, the damage gets discarded entirely, although the text will still claim that the Substitute took damage for the opponent. This can also cause a minor graphical glitch if the damage dealt would be enough to break the user's Substitute, causing the opponent's sprite to fall down (as if the Pokémon fainted), only to reappear a split second later.
- A Substitute protects against stat-altering moves, burn, freeze, poison, moves that cause confusion (Confuse Ray and Supersonic) and moves that have paralysis as their secondary effect (Body Slam, Lick, Thunderbolt, Thunderpunch, Thundershock). It does not protect against moves that have confusion as their secondary effect (Confusion and Psybeam), moves that cause paralysis (Glare, Stun Spore, Thunder Wave) or any kind of sleep move. This was fixed in Stadium so a Substitute protects against all status effects.
- If a move breaks a Substitute, any secondary effects of the move are skipped, leading to some very unintended side effects:
- If Explosion or Selfdestruct break a Substitute, the user will not faint, but its sprite will vanish and it will be invisible for the remainder of the battle. This (and only this) was fixed in Stadium.
- If a move that hits with recoil breaks a Substitute, the user will not take any recoil damage.
- (In the localized versions only) Absorb, Mega Drain, Leech Life and Dream Eater will not restore any HP to the user if they break a Substitute.
- If Hyper Beam breaks a substitute, the user will not need to recharge.
- Pay Day will not scatter any money if it breaks a Substitute.
- Psybeam and Confusion will not confuse the target if they break a Substitute.
- Moves that hit multiple times will end immediately after the hit that breaks the substitute.
Toxic bugs
- The damage multipliers used by Toxic and Leech Seed will stack with one another if both are inflicted on the same Pokémon. This is because both moves use the same variable for determining how many turns have passed since the move was used.
- If a Pokémon affected by Toxic uses Rest, it will no longer be badly poisoned but the turn counter will not be reset. If the Pokémon then gets affected by Toxic or Leech Seed again, the damage multiplier will pick up where it left off. Additionally, if the Pokémon gets burned instead, the burn damage will behave like Toxic and increase with each successive turn. This is because burn, poison and Toxic call the same function for dealing damage (which also explains why burn damage uses the same animation as poison damage if battle animations are turned on).
Blaine AI bug
Blaine has two Super Potions that he can use on his Pokémon. However, because there is no check for the Pokémon's HP, he will try to use the Super Potions even on Pokémon that have full HP.
This was fixed in Yellow, so it was very likely not intentional.
Cooltrainer AI bug
The Cooltrainer♀ has special programming where if its Pokémon's current HP is between 10% and 20% of its max HP, it will switch it out. If two of its Pokémon meet that condition, it will switch them with one another every turn and never attack. This behavior was supposed to only happen 25% of the time, but due to a programming bug, the RNG roll is completely discarded and the behavior will always happen as long as the conditions are met.
Counter bugs
- Normally Counter will only hit if the opponent uses an attacking move on the same turn Counter is used, however turns where the opponent did not select a move (by being frozen, asleep, or being switched out) do not count against this, and thus Counter will counter the attack used on the turn before in these cases, no matter who used the attack. The result is that Counter can "counter" a move used by the user, including Counter itself and recoil damage the user took as a result of using a move that hits with recoil.
- Counter is supposed to only counter damage dealt by Normal- or Fighting-type moves. However, the memory value that the game uses to determine the move (and thus its type) the opponent used last is updated when the cursor is moved in the movelist - not when the move is actually used. The effect of this is that if the player selects Fight, moves the cursor to a move that is Normal- or Fighting type, then backs out with B and switches out, Counter may counter a move that is not Normal- or Fighting-type. Doing this in a link battle will cause the link battle to desync.
- If a Pokémon uses Counter to counter an attack that hit (and broke) the user's Substitute, Counter's damage will be calculated based on the damage the user would have taken were it not for the Substitute, instead of the actual damage taken.
- Counter can be called by Metronome, but will always fail no matter what.
Dual-type effectiveness bug
If a move hits a dual-type Pokémon whose two types are weak and strong in a way that cancel each other out, the game may erroneously use the wrong message and claim that the move is super effective or not very effective when it's not. This is because the game runs both types of the opponent against an internal table of type matchups to determine which string to use, and if there are two matches the second match will simply overwrite the first.
Bide bugs
- If the opponent uses Bide, and the Pokémon faints before Bide goes off, the game will erroneously only clear the low byte of the Bide damage counter and not the high byte. The result is that if the first Pokémon took more than 255 damage during Bide before fainting, and the next Pokémon uses Bide again, the move may deal more damage than intended. If this happens in a link battle, the link battle will desync.
- Bide can hit Pokémon that are in the invulnerable turn of Fly/Dig. If Bide hits a Pokémon that has used Dig, on the subsequent turn the Pokémon's sprite will scroll up and then loop back to its original position.
Victory music bug
In a wild battle, if the battle ends in a draw (e. g. by having the player's last Pokémon use Explosion on the wild Pokémon and fainting it), the victory music will play as the player blacks out. This is because the function that plays the victory music is called before the game checks whether to black out the player.
Jump Kick bug
The moves Jump Kick and Hi Jump Kick were intended to apply crash damage equivalent to 1/8 of the damage they would have done to the target if they miss. However, when a move misses the game sets the damage dealt to zero before the routine that deals with Jump Kick/Hi Jump Kick is called, so the recoil damage will always be calculated based off a damage of zero, and thus will always be exactly 1 HP.
Reflect/Light Screen bug
- The moves Reflect and Light Screen do not have any boundary checks at all. If Reflect or Light Screen would cause the user's accumulated Defense/Special to rise above 1023, the stat will wrap around to 0.
- Using Reflect will reduce the damage the opponent takes if it hurts itself due to confusion.
Division by zero bug
Stats in this game are stored in 10 bits, which means they can have a maximum value of 1023. However, presumably to make calculations a bit easier, the damage formula divides the Pokémon's stats by 4 if either of the stats involved in the damage calculation is above 255, so the damage calculation can proceed with single byte math, at the cost of slight precision loss.
However, this causes a problem if a Pokémon's accumulated Defense is lower than 4. This can happen on an already low-level Pokémon that has also had stat debuffs applied to it. In this case, the division step will set the Pokémon's defense to 0. At a later step, the game tries to divide the user's attack by the opponent's defense, and if the defense is 0, the game will softlock to a division by zero error.
As such, if the user's accumulated attack is higher than 256, and the opponent's accumulated defense is lower than 4, the game is guaranteed to softlock as soon as the user attacks.
Amusingly enough, the game does have a failsafe if the division step would make Attack equal zero (it will be bumped to 1 if this happens), but there is no similar failsafe for Defense even though the dividend being zero is a lot less problematic than the divisor being zero. Make of that what you will.
Exp. All bug
The Exp. All calculates the experience to be distributed among the player's party only based on the experience the last Pokémon received. If more than one Pokémon participated in the battle, the experience that would normally go to the other Pokémon who participated in the battle is completely discarded, effectively reducing the total amount of experience the player receives from the battle. The game also doesn't take fainted party members into account, so if one or more party members are fainted, the experience they would receive is also discarded.
Stat modification bugs
Stat modifications are particularly messy in this game.
- Every time the player's stats are altered in any way (boosted by an own move, or debuffed by an opponent's move), all badge boosts are reapplied to the player's Pokémon, stacking with one another infinitely until the stat cap is reached.
- If the opponent is burned or paralyzed, every time a stat-altering move is used in battle (either boosting the Pokémon's own stats or lowering the opponent's), the Attack and Speed drop from burn and paralysis (respectively) are applied to the opponent again, similarly stacking with one another until the stat reaches 1.
- A Pokémon that is burned or paralyzed can remove its Attack and Speed drop from burn and paralysis (respectively) by using a move that raises Attack or Speed, such as Swords Dance or Agility.
- If a status-healing item such as Burn Heal is used (no matter which status was cured), all stat changes are removed and the Pokémon also loses its badge boosts.
The first three bugs suggest the game at one point used to recalculate all stats from the ground up whenever a stat modification was applied, but this was changed (presumably for performance reasons) and the stat modification code was not changed to compensate. The fourth bug is nothing more than a programming goof.
But wait! There's more!
While stats in the game are stored in 10 bits, and thus can store a maximum value of 1023, all stats are effectively capped at 999 by the game's code. When a stat is boosted (for example by using a stat raising move) the game checks if the accumulated stat would exceed 999 after boosting, and if so it will set it to 999, preventing any further boosts to this stat. The code, however, doesn't take into account the existence of moves that raise a stat by two stages (such as Swords Dance, Agility, or Amnesia), leading to the following bugs:
- When a stat is debuffed (as opposed to boosted), the stat cap is not enforced. This means that if a Pokémon's stat is at a point where raising the stat by another stage would hit the stat cap, the Pokémon uses a move like Swords Dance to raise the stat by two stages (setting the stat to 999), then gets hit by a move that lowers the stat by one stage (such as Growl), the stat is recalculated but the stat cap is not enforced, so the stat will now be above 999. If the stat exceeds 1023, it will wrap around to 0.
- The code that applies stat boosts first raises the current stat stage, then checks if the stat is already capped at 999, and if so lowers the stat stage by one, even if the move used is one that raises the stat stage by two. The effect is that trying to use the move over and over raises the stat stage by one every time without actually changing the stat in any way.
Levelup learnset glitch
If a Pokémon gains enough experience from a single battle to skip a level completely, the Pokémon loses out on any moves that it would normally learn on the level(s) skipped. For example, a level 4 Pidgey that gains enough experience to directly level up to level 6 will not learn Sand-Attack, normally learned at level 5.
Mimic bugs
- Moves copied by Mimic will use Mimic's PP, but the maximum PP displayed will erroneously be based on the move copied. This can lead to a visual glitch where the current PP will appear to be higher than the maximum PP (e. g. when Mimic copies a move with 5 PP like Horn Drill).
- Mimic's effect will revert if the user learns a new move by leveling up in battle.
Binding move PP overflow bug
If a binding move (Bind, Clamp, Fire Spin or Wrap) is used and the target switches out before the end of the duration, the binding move will automatically be used again on the Pokémon that switches in, deducting 1 PP in the process. If the move has 0 PP at this point, it will roll over to 63 PP.
Freeze desync bug
In a link battle, if a slower Pokémon that is frozen gets thawed by a faster Pokémon's attack before its turn would have come up, the Pokémon will automatically use a move, despite the game not having given that option beforehand.
On the user's side, it will be the last move that the cursor was moved over in the move list. This can be a move from another Pokémon's movelist, if the Pokémon was switched in and frozen before its turn came up. If the move list was never opened since the battle started, the Pokémon will use the glitch move -- (two dashes). On the opponent's side, the Pokémon will use its last move it used in battle, or failing that, the topmost move from its movelist. This causes the link battle to desync.
PP will always be deducted from the move that was used on the opponent's side. If the move has 0 PP at this point, it will roll over to 63 PP.
Minimize/Substitute bug
If you use Minimize or Substitute, then open the Pokémon menu, look at the stats of any of your party Pokémon and go back to battle, the enemy Pokémon sprite will glitch up. In the case of Minimize, it will turn into a garbled version of the Pokémon sprite from the stats screen, in the case of Substitute, it will turn into the Substitute doll.
This glitch was fixed in Yellow.
Battle Transition bug
The Generation I games have a total of 7 (technically 8, but two are identical) different battle transitions. The game determines the battle transition by these three factors:
- whether it's a wild Pokémon battle or a trainer battle
- whether the opponent's Pokémon is at least three levels higher than your lead Pokémon
- whether the player is inside a dungeon or on the overworld
The following maps are incorrectly not recognized as dungeons and so they do not play the correct battle transition:
- Victory Road 2F and 3F (1F is fine)
- Silph Co. 9F to 11F (2F to 8F is fine, and there are no battles on 1F)
- Pokémon Mansion 1F (all other floors are fine)
- Seafoam Islands B1F to B4F (1F is fine)
- all of Rocket Hideout, the Power Plant, and Diglett's Cave
Endless Battle Bugs
- If two Pokémon who only know Transform transform into each other, the battle will become endless. This is because using Transform resets PP on all moves, so the Pokémon get stuck in an infinite loop and can never fall back to using Struggle. English Stadium (notably not Japanese Stadium) tried to fix this by preventing Transform from being used if the target is Ditto, but the bug can still be exploited by using a Mew with Transform, or by using a Pokémon with Mimic to copy Transform.
- Struggle is treated as a Normal-type move in Generation I games, which means, among other things, that Struggle cannot hit a Ghost-type Pokémon. If two Ghost-type Pokémon run out of PP and fall back to using Struggle, the battle becomes endless as these two Pokémon can never hurt each other. This also works with a Pokémon that can change its type to Ghost via Transform or Conversion.