# Gen II Capture Mechanics

Thanks to Ultimate Pokémon Center for having the formula and getting me curious about things, iimarckus for indulging my curiosity for clarifications, and magical for being interested, giving second opinions and determining how the game behaves when it divides by zero.

Although people are largely playing HG/SS now and most G/S/C games have had their batteries run dry, the capture mechanics of the second generation are still of some interest to geeky individuals (like me) and as a historical stepping stone between the R/B/Y algorithm and the formulas of the later games.

As always, I have a catch rate calculator at the bottom of the page that you can use to just calculate your chances of capturing a Pokémon in G/S/C if you don't care about the math.

Gold, Silver and Crystal only work with integers. In practice, this essentially means that they round all numbers down, including at every intermediate step in a calculation. This will usually not be specifically included in the mathematical formulas on this page, but whenever you perform any action within a particular formula that results in a non-integer, round it down before performing the next action in the formula if you want to get a perfect result.

## The Catch Rate Formula

The basic formula for G/S/C is a clear prototype of the third- and fourth-generation formula, but with some important differences:

`X = max(((M - H) * C) / M, 1) + S`

As usual, I'll go through the variables one by one.

### X (Final Capture Rate)

X is a number out of 255 (if it's higher than 255 at the end of the calculation, it is made 255 instead) representing the success rate of this particular capture, such that the chance of a successful capture is (X + 1)/256. Unlike the third and fourth generations, this chance is exact, which also means that an X of 255 is automatically a guaranteed capture.

### M (Max HP * 3) and H (Current HP * 2)

Here's where things get interesting. In the later-game capture mechanics sections on this site, the actual formula is shown with 3 * M and 2 * H where this section's formula just has M and H. Actually, however, the M and H in this formula stand for three times the max HP and twice the current HP, respectively. So why did I write the formula up differently here?

It's because the game was on a limited system and the division routine it used could only divide by 8-bit numbers (up to 255). You can see that in the formula above there's a division by M - so if M, three times the max HP, is more than 255, how is the game going to divide by it?

Well, Game Freak figured the most sensible course of action was to check if M was more than 255, and then if it was, to simply divide both M and H by four (rounding down, of course) and then bump H up to 1 if it was 0. The formula would then still in theory have approximately the same result, barring rounding errors (if you don't intuitively see why, try replacing M with M/4 and H with H/4 in the formula above and then rearranging and simplifying it a bit), but they'd have a much lower divisor to deal with.

The inquisitive reader may see a problem here: what if M is greater than 255 even after you divide it by four? Then it still doesn't fit into eight bits and this 'solution' doesn't fix a thing. This would happen if M were more than 1023, which happens if the Pokémon's maximum HP is more than 341. In fact, you are never actually able to catch such a Pokémon during normal gameplay - the level 70 Lugia and Ho-Oh in Gold and Silver respectively can at most have 249 max HP, and that's the largest HP a legitimate wild Pokémon can have in these games - but if you were to hack an encounter with a Pokémon that has more than 341 max HP, weird things will happen:

• The game will act (for the purposes of the capture formula) as if the Pokémon's maximum HP is much lower than it is. The M value used in the formula will consist of only the low eight bits of the actual calculated M value - which essentially means that the M the game uses is actually the remainder you'd get if you divided the real M by 256. Thus, if the real calculated M value is 257 or 513, the value used in the formula will instead be 1; if the real M value is 356, the M value used in the formula will be 100; and so on.
• If you try to capture a Pokémon with exactly 342 or 683 max HP, the game will freeze. This is because these HP values yield an M that is evenly divisible by 256, so the M used in the formula will be zero - and the formula contains a division by M. The division routine that the game uses has no checks or safeguards in case of a divisor of zero and will simply go into an infinite loop until you reset the game.
• You can get ridiculously inflated capture rates for any Pokémon in any Pokéball, provided the maximum and current HP values line up right. The H value, like the M value, will be truncated to the low eight bits if it's greater than 255, but the more interesting case is actually when it isn't - because then H can be greater than the truncated M. What happens if the result of the M - H subtraction is a negative number? Actually, these variables are unsigned, which means they are never considered negative - essentially, the subtraction will instead count down from 255 once it's gone down past zero, which basically amounts to adding 256 to the actual negative result. (3 - 5, for instance, would become 254.) This is called an underflow. While the `(M - H) * C / M` part of the formula is meant to result in something ranging between C / 3 and C, underflows throw that limitation out of the window, allowing the final capture rate to become many times greater than C.
• As you lower the HP of a Pokémon whose maximum and current HP values lie within certain ranges, the capture rate will go in cycles, increasing from low to high and then suddenly looping around to low again: one HP does not necessarily give the best capture rate. This is a result of the interplay between the point above - the possibility of capture rates shooting through the roof - and yet another truncation: the `(M - H) * C / M` part of the formula, since it's supposed to always result in something lower than C (which is capped at 255), will also have only its low eight bits (again, the remainder if you divided it by 256) considered in the continuation. The capture rate will rise at a rate of C / M for every two hit points of damage you deal to the Pokémon, wrapping around to zero whenever it passes 255.

Again, all that weird, glitchy stuff will only happen if you hack, so for normal gameplay, that division of both M and H by four will be sufficient to make the formula behave as expected (as far as hit points go, anyway). If you go play around with my catch rate calculator, however, you might run into all the various wonkiness described above, so be prepared.

### C (Modified Capture Rate)

Like in the later games, this number starts out as the intrinsic capture rate of the Pokémon you're trying to catch, a number that is set for every Pokémon species and can be found in most online Pokédexes (like veekun). The capture rates for each Pokémon are identical to the capture rates for the same Pokémon in later games, and as always higher means a better chance of a successful capture.

However, as you might have guessed from the fact HG/SS's Apricorn balls modify this value directly and the fact the formula above doesn't contain the ball bonus value of the later-game formulas, the second-generation games' Pokéballs all modify the C value rather than having their own special multiplier in the formula. And like in the later games, the catch rate is made 1 if it is lower than one and 255 if it is higher than 255, and this is applied after the ball modifiers have gone through. This means that the same clause that applied to HG/SS Apricorn balls applies for all Pokéballs in G/S/C: they cannot raise your odds of a successful capture above the odds of capturing a Caterpie, Pidgey, etc. at the same fraction of HP with a Poké Ball, and in fact, using "better" balls makes no difference whatsoever to capturing Caterpie/Pidgey/etc. at any HP, since their intrinsic capture rate is already 255.

As a corollary, this also means that there is no such thing as a guaranteed capture without status, barring the impossible-in-game case where M - H underflows (see the discussion of M and H above): even when C is 255, the division by M will inevitably lead to the outcome of the division being lower than the initial capture rate, since M is bound to be greater than M - H under normal circumstances. Without status, this value becomes X unchanged, and since it's less than 255 there will thus always be some chance of the capture failing (remember, the chance to capture the Pokémon is (X + 1)/256).

The different Pokéballs yield the following C values, if we call the original capture rate of the Pokémon R:

Poké Ball, Friend Ball
C = R
Great Ball, Park Ball
C = R * 1.5
Ultra Ball
C = R * 2
Master Ball
The formula isn't used; the capture automatically succeeds
Fast Ball
C = R * 4 if the Pokémon is Grimer, Tangela or Magnemite (they are only the first three of many Pokémon that may flee from battle in the games, but they appear to be the only ones affected by the Fast Ball); C = R otherwise
Heavy Ball
C = R + 30 if the Pokémon weighs more than 307.2 kilograms (677.3 lbs); C = R + 20 if the Pokémon weighs less than that but more than 204.8 kilograms (451.5 lbs); C = R if the Pokémon weighs less than that but more than 102.4 kilograms (225.8 lbs); C = R - 20 otherwise
Level Ball
C = R * 2 if your Pokémon's level is greater than that of the Pokémon; C = R * 4 if your Pokémon's level divided by two and rounded down is greater than the Pokémon's level; C = R * 8 if your Pokémon's level divided by four and rounded down is greater than the Pokémon's level; C = R otherwise
Love Ball
C = R * 8 if the Pokémon is of the same species as your Pokémon and they are either both male or both female (yes, the Love Ball in G/S/C is in fact a gay love ball); C = R otherwise
Lure Ball
C = R * 3 when fishing; C = R otherwise
Moon Ball
C = R (this was meant to check if the Pokémon can evolve with a Moon Stone and give C = R * 4 if it does, but it's buggy like so much else in this formula, so in fact the Moon Ball is just a glorified Poké Ball)

Again, remember that whatever ball you're using, if C is more than 255 it will get capped at 255, and if it's less than zero it will get bumped up to 1.

As in HG/SS, the Heavy Ball is especially noteworthy for adding to (or subtracting from) the capture rate rather than multiplying it. This means in theory it vastly outperforms all other balls for Pokémon with extremely low intrinsic catch rates if they're heavy enough to get a bonus from it, but isn't that useful for Pokémon with higher intrinsic catch rates even if they're very heavy, and can actually make things worse against Pokémon that are relatively light. Given the weights and catch rates of all the Pokémon available in G/S/C, the Heavy Ball is great for catching Lugia (+20 Heavy Ball bonus but an intrinsic catch rate of 3), but only a little better than an Ultra Ball for Snorlax and Steelix (+30 Heavy Ball bonus, intrinsic catch rate of 25), slightly worse than an Ultra Ball for Mantine (+20 Heavy Ball bonus, intrinsic catch rate of 25), worse than a Great Ball for all the other Pokémon heavy enough to get a +20 bonus (Golem, Onix, Gyarados, Lapras and Dragonite, which all have an intrinsic catch rate of 45), and no better or even worse than a Poké Ball for all other Pokémon.

### S (Status)

This is one area where the G/S/C capture formula resembles the R/B/Y one: the status factor is added to the X value, rather than being a multiplier like in the later games. This means that, like in R/B/Y, status has a more significant effect on your chances of capturing a Pokémon with a low catch rate than one with a high catch rate.

The S value is supposed to be 5 if the Pokémon is poisoned, burned or paralyzed, 10 if the Pokémon is asleep or frozen, and 0 if it has no status, but due to a bug (yes, this formula is astoundingly buggy), only sleep and freezing actually affect this value; the check that's supposed to be for poisoning, burning and paralysis always fails. So in fact, the S value is 10 if the Pokémon is asleep or frozen and 0 otherwise. Making a Pokémon poisoned, burned or paralyzed does not improve your chances of catching it at all.

## Wobbles

As I said, X directly represents the actual chance of catching the Pokémon: after it has been calculated, a random number between 0 and 255 is generated, and if it is less than or equal to X, the Pokémon is caught.

If the Pokémon is not caught, however, the game will calculate how often the ball should wobble before breaking, in a way that somewhat resembles how the later games determine whether a Pokémon is caught. (Note, however, that all these calculations are only being done after it has been decided whether the Pokémon will actually be caught; they have no relevance to your chance of catching the Pokémon, only to how often the ball wobbles when it has already been determined that you won't.) First, a Y value is determined from X according to the following table:

XY
0-163
275
384
490
595
6-7103
8-10113
11-15126
16-20134
21-30149
31-40160
41-50169
51-60177
61-80191
81-100201
101-120211
121-140220
141-160227
161-180234
181-200240
201-220246
221-240251
241-254253
255255

The table looks pretty mysterious - where do those seemingly random Y values come from? - but in fact, Y is pretty close to being 64 times the fourth root of the highest value in each X interval, and the table was likely calculated from some similar function to that originally.

Once you have your Y, the game proceeds in a similar manner to the later games. It calculates up to three random numbers between 0 and 255 (inclusive), each representing an attempt by the Pokémon to break out. For each random number, if it is greater than or equal to Y, the Pokémon will break out and no further numbers will be generated; otherwise, if it is less than Y, that corresponds to one wobble of the ball before the Pokémon tries to break out again. (If none of these three attempts succeed, the Pokémon automatically breaks out on the next attempt without another number having to be generated, since at this point we've already determined that we don't manage to catch the Pokémon.)

In other words, if you see the ball pop open without wobbling at all ("Oh no! The POKéMON broke free!"), the first random number was greater than or equal to Y; if it wobbles once and then opens ("Aww! It appeared to be caught!"), the first was less than Y but the second was greater than or equal to it; if it wobbles twice before opening ("Aargh! Almost had it!"), the first two were less than Y but the third was greater than or equal to it; and if it wobbles three times ("Shoot! It was so close, too!"), all three numbers were less than Y.

## Catch Rate Calculator

This tool can calculate your chances of catching a Pokémon in G/S/C. Because of how much variation can be caused by the potential wonkiness with HP, it will calculate the chance individually for each of the sixteen possible HP IVs the Pokémon might have; by default, the calculator will show you the overall chance assuming each IV is equally likely (with a warning if there is a possibility of the game freezing), but if you check the "Show detailed report" box, it will show you the exact chance for each HP IV. (Note, however, that if the Pokémon isn't at full health or False Swiped, the inaccuracy of the estimate of the Pokémon's current HP is generally going to introduce a bigger margin of error than IV-induced variation in the max HP will, making the detailed report not very meaningful.)

Approximation of current HP: