Catch rate glitches (Generation II)

From Glitch City Wiki
Jump to navigation Jump to search

In Pokémon Gold, Silver and Crystal, many "special" kinds of Poké Balls are introduced that affects the catch rate in various ways. Due to the probabilistic nature of the catch rate, glitches that affect its value are very difficult to catch. Listed below are the known catch rate glitches in Pokémon Gold, Silver and Crystal.

Status condition

In Pokémon Gold, Silver and Crystal, a wild Pokémon's catch rate is not affected if it is burned, poisoned, or paralyzed, despite those conditions increasing catch rate in other generations and the code seeming to attempt to factor them in. Sleep and freeze still affect the catch rate as intended.

Explanation

The code for factoring status conditions into catch rate reads as follows:

       ld b, a
       ld a, [WildPokemonStatus]
       and SLP|FRZ
       ld c, 10
       jr nz, .done
       ; ld a, [wEnemyMonStatus] ; bugfix
       and a
       ld c, 5
       jr nz, .done
       ld c, 0
       .done

What the code does is set a value increasing catch rate (referred to as "a" in Bulbapedia's explanation, linked below) to 10 if the opponent is asleep or frozen, and do nothing otherwise. The next few lines are presumably intended to set the value to 5 if there is a different status condition present; however, since the value of register a is already WildPokemonStatus & (SLP|FRZ), the second jr nz, .done is never taken, and the value is set to 0 anyway.

Inserting the commented line would fix this glitch.

Moon Ball

In Pokémon Gold, Silver and Crystal, the Moon Ball is supposed to boost the catch rate of a Pokémon that evolves with Moon Stone, but it checks a Pokémon that evolves with Burn Heal instead. Since such a Pokémon does not exist, Moon Ball never boosts the catch rate in Generation II.

The cause of this glitch is simply a erroneous constant: The hex value 0x0A, while corresponding to Moon Stone in Generation I, corresponds to Burn Heal in Generation II instead.

Love Ball

In Pokémon Gold, Silver and Crystal, the Love Ball boosts the catch rate if the target Pokémon is of the same species, and the same gender (except genderless) as the player's Pokémon, despite the in-game description ("For catching the opposite gender"). In all other generations, it boosts the catch rate if the target Pokémon is of the same species, but the opposite gender.

The cause of this glitch is likely to be a simple typo.

Fast Ball

In Pokémon Gold, Silver and Crystal, the Fast Ball is supposed to boost the catch rate of a Pokémon that can flee. However, it only does this for three of those Pokémon: Magnemite, Grimer, and Tangela.

Explanation

The table of Pokémon that can flee is actually three lists, SometimesFleeMons, OftenFleeMons, and AlwaysFleeMons. The three lists are contiguous in ROM, each terminated with a 0xFF terminator.

The code to calculate the catch rate multiplier of the Fast Ball tries to iterate through this table by keeping a temporary variable d that is initialized to 3, and decreased by 1 each time an 0xFF terminator is found. However, due to an erroneous jump target, the value of d is also decreased whenever a valid entry in the table does not match the species of the target Pokémon. Therefore, instead of iterating over three lists, it only iterates over the first three entries, which are Magnemite, Grimer, and Tangela.

See also

Attribution

  • IIMarckus for discovery and PikalaxALT for the corrected code, in addition to everyone who helped with pokegold and pokecrystal.