Catch rate glitches (Generation II): Difference between revisions
>Sherkel No edit summary |
>Sherkel No edit summary |
||
Line 15: | Line 15: | ||
.done |
.done |
||
What the code does is set a value increasing catch rate to 10 if the opponent is asleep or frozen, and do nothing otherwise. The |
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, the "jr nz" preceding it prevents this from being able to occur, as WildPokemonStatus will not be 0. |
||
One possible fix would be modifying the code to the following: |
One possible fix would be modifying the code to the following: |
||
Line 30: | Line 30: | ||
.done |
.done |
||
This would instead |
This would instead set c to 5 if the opponent was inflicted by a status condition but not asleep of frozen before jumping to ".done", rather than doing so prematurely. |
||
==See also== |
|||
* [https://bulbapedia.bulbagarden.net/wiki/Catch_rate#Capture_method_.28Generation_II.29 Bulbapedia's article on catch rate] |
|||
==Attriution== |
==Attriution== |
Revision as of 01:08, 28 February 2019
In Pokémon Gold, Silver and Crystal, if the opposing 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 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, the "jr nz" preceding it prevents this from being able to occur, as WildPokemonStatus will not be 0.
One possible fix would be modifying the code to the following:
ld b, a ld a, [WildPokemonStatus] and a ld c, 0 jr z, .done and SLP|FRZ ld c, 10 jr nz, .done ld c, 5 .done
This would instead set c to 5 if the opponent was inflicted by a status condition but not asleep of frozen before jumping to ".done", rather than doing so prematurely.
See also
Attriution
- IIMarckus for discovery and the corrected code, in addition to everyone who helped with pokegold and pokecrystal.