Where
* HPmax is the number of hit points the Pokémon has at full health,
* HPcurrent is the number of hit points the Pokémon has at the moment,
* rate is the catch rate of the Pokémon,
* bonusball is the multiplier for the Poké Ball used, and
* bonusstatus is the multiplier for any status ailment the Pokémon has (2 for sleep and freeze, 1.5 for paralyze, poison and burn).
Given this formula, the maximum value for a (if the Pokémon could have 0 HP) would be catch rate * bonusball * bonusstatus. The minimum value for a (for a Pokémon with full health) would be 1/3 * catch rate.
If a is greater than or equal to 255, then the Pokémon is caught. If not, then calculate b as follows:
Then generate 4 random numbers between 0 and 65535, inclusive. If the random numbers are all less or equal to than b, then the Pokémon is caught; otherwise the ball shakes n times, where n is the number of random numbers that are less than b. Note that b ≥ 65535 if a ≥ 255.