Jump to content

Catch rate glitches (Generation II): Difference between revisions

Added other catch rate glitches.
>Sherkel
No edit summary
>Bbbbbbbbba
(Added other catch rate glitches.)
 
(4 intermediate revisions by 2 users not shown)
Line 1:
In {{GSC}}, ifmany the"special" opposingkinds Pokémon'sof catchPoké rateBalls isare notintroduced affectedthat ifaffects itthe iscatch burned,rate poisoned,in orvarious paralyzed,ways. despiteDue thoseto conditionsthe increasingprobabilistic nature of the catch rate, inglitches otherthat generationsaffect andits thevalue codeare seemingvery to attemptdifficult to factorcatch. them<!-- inPun intended. Sleep--> andListed freezebelow still affectare the known catch rate asglitches intendedin {{GSC}}.
 
==Status condition==
==Explanation==
In {{GSC}}, 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:
 
Line 9 ⟶ 12:
ld c, 10
jr nz, .done
; ld a, [wEnemyMonStatus] ; bugfix
and a
ld c, 5
Line 15 ⟶ 19:
.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 "jrvalue nz"of precedingregister it<code>a</code> preventsis thisalready from<code>WildPokemonStatus being& able(SLP|FRZ)</code>, tothe occursecond <code>jr nz, as.done</code> WildPokemonStatusis willnever nottaken, beand the value is set to 0 anyway.
 
Inserting the commented line would fix this glitch.
One possible fix would be modifying the code to the following:
 
==Moon Ball==
ld b, a
In {{GSC}}, 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.
ld a, [WildPokemonStatus]
 
and a
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.
ld c, 0
 
jr z, .done
==Love Ball==
and SLP|FRZ
In {{GSC}}, 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.
ld c, 10
 
jr nz, .done
The cause of this glitch is likely to be a simple typo.
ld c, 5
 
.done
==Fast Ball==
In {{GSC}}, 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===
[https://github.com/pret/pokecrystal/blob/91f914718a263839daef24d44eda857bfc7cca95/data/wild/flee_mons.asm The table of Pokémon that can flee] is actually three lists, <code>SometimesFleeMons</code>, <code>OftenFleeMons</code>, and <code>AlwaysFleeMons</code>. The three lists are contiguous in ROM, each terminated with a 0xFF terminator.
 
[https://github.com/pret/pokecrystal/blob/abee217ce0e29331f1ac691fd1d4edeacf2295f9/engine/items/item_effects.asm#L998 The code to calculate the catch rate multiplier of the Fast Ball] tries to iterate through this table by keeping a temporary variable <code>d</code> 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 <code>d</code> 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.
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]
* [https://github.com/pret/pokecrystal/blob/master/docs/bugs_and_glitches.md#brnpsnpar-do-not-affect-catch-rate Relevant sections of the glitch documentation on pokecrystal]
 
==AttriutionAttribution==
* IIMarckus for discovery and PikalaxALT for the corrected code, in addition to everyone who helped with [https://github.com/pret/pokegold pokegold] and [https://github.com/pret/pokecrystal pokecrystal].
 
[[Category:Generation II glitches]]
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.