Brn/Psn/Par dont affect catch rate in GSC
Posted by: Bent`
Date: 2012-05-18 00:48:28
They tried to do the same in GSC, but introduced a bug that makes Burn/Poison/Paralysis provide the same catch rate as no status effect.
The GSC catch rate formula is explained here.
D = wild Pokémon's status: if asleep or frozen, D=10; if burned, paralyzed, or poisoned, D=5; else D=0
That is what the code attempts to do. The code looks like this:
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
and a is a quick zero check, but here it will always evaluate to 0, because nonzero values are caught by the jr immediately preceding it. As a result, the second jr never gets followed, and the modifier is always set to zero.
Here is a modified version of the routine that works properly:
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