Gen I Capture Mechanics

Special thanks to a_magical_me, who started analyzing the algorithm, let me use his notes and then provided me with an assembly dump to pick up where he left off. The hacking genius is mostly his.

If you were an avid player of Red, Blue and Yellow, you may have read the other capture mechanics sections and fleetingly wondered, "But what about the times in R/B/Y when it would say, 'The ball missed the POKéMON!'? What was going on then? How much of this stuff was the same back then, anyway?"

How much, indeed? As it turns out, barely any. The R/B/Y capture algorithm is drastically different from that of the later games; case in point, it doesn't mostly just consist of the application of a formula. It is also, as it happens, quite interesting - especially if you, like me, have always sort of wondered exactly how that worked. So sit back, relax and let's take a look at the insides of the game. Or, I suppose, if you don't care about the insides of the game and just want to know your chances of capturing a Pokémon in R/B/Y, you can just go straight to the catch rate calculator. But that will make me sad.

The Algorithm

To determine the outcome of a thrown ball, the game executes the following procedure (cleaned up and tweaked for human presentation, of course). Note that any time it speaks of division, it means integer division: the result is an integer and the remainder is simply discarded. Thus, for example, if it says "Divide 5 by 2", the result is simply 2, not 2.5.

  1. If the ball being thrown is a Master Ball, the Pokémon is automatically caught. Skip the rest of the procedure.
  2. Generate a random number R1, with a range depending on the ball used:
    • If it's a Poké Ball, R1 ranges from 0 to 255 (inclusive).
    • If it's a Great Ball, R1 ranges from 0 to 200 (inclusive).
    • If it's an Ultra or Safari Ball, R1 ranges from 0 to 150 (inclusive).
  3. Create a status variable S:
    • If the targeted Pokémon is asleep or frozen, S is 25.
    • If the targeted Pokémon is poisoned, burned or paralyzed, S is 12.
    • Otherwise, S is 0.
  4. Subtract S from R1 (to avoid confusion with the original R1, I will refer to the result as R*).
  5. If R* is less than zero (i.e. if the generated R1 was less than S), the Pokémon is successfully caught. Skip the rest of the procedure.
  6. Calculate the HP factor F:
    1. Multiply the Pokémon's max HP by 255 and store the result in F.
    2. Divide F by
      • 8 if the ball used was a Great Ball.
      • 12 otherwise.
    3. Divide the Pokémon's current HP by four. If the result is greater than zero, divide F by this number and make that the new F.
    4. If F is now greater than 255, make it 255 instead.
  7. If the base catch rate of the Pokémon is less than R*, the Pokémon automatically breaks free. Skip to step 10.
  8. Generate a second random number R2 ranging from 0 to 255 (inclusive).
  9. If R2 is less than or equal to the HP factor F, the Pokémon is caught. Skip the rest of the procedure.
  10. The capture fails. Determine the appropriate animation to show:
    1. Multiply the Pokémon's base catch rate by 100 and store the result in a variable W.
    2. Divide W by a number depending on the ball used, rounding the result down:
      • If it was a Poké Ball, divide by 255.
      • If it was a Great Ball, divide by 200.
      • If it was an Ultra or Safari Ball, divide by 150.
    3. If the result is greater than 255, the ball will wobble three times; skip the rest of this subprocedure. (Normally the result can't actually be greater than 255; however, because throwing rocks or bait in the Safari Zone actually manipulates the variable holding the Pokémon's base catch rate directly, that can result in this capping being needed.)
    4. Multiply W by F (the HP factor calculated above).
    5. Divide W by 255.
    6. Add a number if the Pokémon has a status affliction:
      • If the Pokémon is asleep or frozen, add 10 to W.
      • If the Pokémon is poisoned, burned or paralyzed, add 5 to W.
    7. Show the animation and message corresponding to W:
      • If W is less than 10, the ball misses ("The ball missed the POKéMON!").
      • If W is between 10 and 29 (inclusive), the ball wobbles once ("Darn! The POKéMON broke free!").
      • If W is between 30 and 69 (inclusive), the ball wobbles twice ("Aww! It appeared to be caught!").
      • Otherwise (if W is greater than or equal to 70), the ball wobbles three times ("Shoot! It was so close too!").

What It Means

(Psst, if you don't speak math, you can skip down to the plain English summary, which has almost no math at all. It's simple, I promise!)

So what, indeed, does this algorithm actually mean for capturing in R/B/Y? How is it different from the later games? In the rest of this discussion, I will assume you are not using a Master Ball; that case is trivial and it would be a bother to keep mentioning it.

Well, first, we can derive a formula for the odds of a successful capture from the algorithm. Let's first create a variable B to stand for the range of R1: 256 if the ball is a Poké Ball, 201 if the ball is a Great Ball and 151 if the ball is an Ultra Ball. (Note that this is one higher than the maximum numbers discussed in the algorithm above; this is because a random number between 0 and X inclusive can take on X+1 possible values, since one of them is zero.) The algorithm then has three different cases, depending on where R1 falls in this range:

  • R1 is less than S (S possibilities). The Pokémon is immediately caught.
  • R1 is greater than or equal to S, but less than or equal to S + C (min(C + 1, B - S) possibilities). The game calculates a second random number R2 between 0 and 255 inclusive and an HP factor F equal to min(255, int(int(M*255/G)/max(1, int(H/4)))), where M is the Pokémon's max HP, H is its current HP and G is 8 if the ball is a Great Ball or 12 otherwise. These numbers are then compared:
    • If R2 is less than or equal to F, the Pokémon is caught.
    • If R2 is greater than F, the Pokémon breaks free.
  • R1 is greater than S + C (max(0, B - (S + C + 1)) possibilities). The Pokémon breaks free.

We can visualize it like this:

Now getting the formula is simple. What we want is the sum of the two possible paths leading to the Pokémon being successfully caught: first, the case where R1 is less than S (the chance of which is S / B), and second, the case where R1 is within that white range in the middle (the chance of which is min(C + 1, B - S) / B) and subsequently R2 <= F (the chance of which is (F + 1) / 256 - we add one because, again, we need to count the case where R2 is zero). This directly gives us the following:

Chance = (S / B) + (min(C + 1, B - S) / B) * ((F + 1) / 256)

Note that the game is not actually performing any of these mathematical operations; the only actual arithmetic it's doing is within the F variable, while this is a probabilistic formula derived from the structure of the algorithm. Thus, these divisions are not integer divisions, and this formula can be rearranged at will without producing rounding errors or the like. This allows us to combine those two redundant divisions by B and remove some parentheses to create a cleaner formula:

Chance = (S + min(C + 1, B - S) * (F + 1) / 256) / B

or, to include the full formula for F:

Chance = (S + min(C + 1, B - S) * (min(255, int(int(M*255/G)/max(1, int(H/4)))) + 1) / 256) / B

So that's the proper formula, but if we cheat a little, ignore the rounding in the HP factor and assume that none of the caps are tripped (i.e. C + 1 is less than or equal to B - S, the HP factor is at most 255 and int(H/4) is at least 1), we can also create a simplified version of the formula that will come in handy when analyzing its behaviour later on:

Chance ~= (S + (C + 1) * (M*255/G/(H/4) + 1) / 256) / B

Chance ~= (S + (C + 1) * (M*4*255 / (G*H*256) + 1/256)) / B

255 and 256 are so close together we can assume they just about cancel each other out (remember, we're ignoring a bunch of rounding anyway, so this is just a very rough approximation), and furthermore we can also discard the negligible 1/256 there:

Chance ~= (S + (C + 1) * (M/H/(G/4))) / B

Also, in most cases the one that is added to C will have a fairly negligible influence, so we'll discard that too for good measure, since we're doing all this simplification anyway.

Chance ~= (S + (C/(G/4)) * (M/H)) / B

Remember that this formula is an approximation, and not a particularly good one at that - later I will explain numerous nuances of the full formula that don't apply correctly to the approximation. Regardless, as I said, it is useful to get a clue about roughly how the formula behaves at a glance.

By now we're ready to discuss each of the variables used in the algorithm in turn and what interesting conclusions can be drawn from them, so let's just get right to it.

S (Status)

This is a simple variable: it is 25 if the Pokémon you're trying to catch is asleep or frozen, 12 if it's poisoned, burned or paralyzed, and 0 otherwise.

Unlike the post-Advance games' formula (but like the second-generation formula), the status variable is not a multiplier but an addition. What this means, as with all other addition, is that its effect on the total result is proportionally greater the lower the result would be otherwise - a status affliction will massively improve your chances of catching a legendary but only mildly increase the odds of catching a Nidoran, compared to trying to achieve the same without status.

Specifically, status conditions in R/B/Y essentially give you a set baseline chance of capturing the Pokémon, equal to S/B. It is thus dependent only on the status affliction and the Pokéball you're using but not on the Pokémon's catch rate or HP - those only come into play if the initial check of R1 against the status variable fails. Thus, a status effect will guarantee you at least a certain chance of catching the Pokémon, no matter what. Sweet!

B (Ball Modifier) and G (Great Ball Modifier)

Unlike the ball bonus of the later games, there are two ball-related modifiers in the R/B/Y formula, both of which are divisors, meaning a lower value for them means a higher chance of a successful capture. In the later games, a Poké Ball has a ball bonus multiplier of 1, with a Great Ball having a ball bonus of 1.5 and an Ultra Ball having a ball bonus of 2, forming a straightforward linear progression from worse to better balls. In R/B/Y, however, the ball modifier B is 256 for Poké Balls, 201 for Great Balls and 151 for Ultra Balls and Safari Balls, and furthermore the G value in the HP factor is 8 for Great Balls but 12 for all other balls.

This makes it a little harder to see at a glance just how much more effective the better balls actually are than plain Poké Balls in R/B/Y, so let's find out, shall we? Here we use the simplified formula calculated above, so it will not give completely accurate results; it is merely to give a rough idea of how the balls compare to one another:

Poké Ball: (S + (C/(12/4)) * (M/H)) / 256 = (S + (C/3) * (M/H)) / 256 = 201 * (S + (C/3) * (M/H)) / 51456 = (201*S + 67*CM/H) / 51456

Great Ball: (S + (C/(8/4)) * (M/H)) / 256 = (S + (C/2) * (M/H)) / 201 = 256 * (S + (C/2) * (M/H)) / 51456 = (256*S + 128*CM/H) / 51456

So what, exactly, does this mean? What's the significance of the G value, anyway? Well, the Great Ball gives approximately a 256/201 = 1.27 multiplier to the status baseline chance compared to the Poké Ball. However, it gives a whopping 128/67 = 1.91 multiplier to the Pokémon factor, where the catch rate and HP come in. In other words, though it only gives a modest bonus to the status chance, if the Pokémon has no status affliction - making S zero - a Great Ball is nearly twice as good as a Poké Ball, which is close to an Ultra Ball's boost in the later games. Whoa! So what must the Ultra Ball be like, then?

Poké Ball: (S + (C/3) * (M/H)) / 256 = 151 * (S + (C/3) * (M/H)) / 38656

Ultra Ball: (S + (C/3) * (M/H)) / 151 = 256 * (S + (C/3) * (M/H)) / 38656

In other words, Ultra Balls give a multiplier of 256/151 = 1.70 to the whole formula compared to Poké Balls, both the status baseline and the Pokémon factor. Notice anything? Yes, the Great Ball's boost to the Pokémon factor is honest-to-God higher than the Ultra Ball's! Mind you, the difference in the multiplier to the status baseline is very significant, especially for Pokémon with low catch rates, where the status factor dwarfs the Pokémon factor - but if you're not inflicting any status effects on the Pokémon, that point is moot and clearly you're actually better off using Great Balls. Who would've thought?

Well, actually, that isn't quite true. Remember when we shaved off all the caps and rounding to create the simplified formula we calculated this from? Well, the G value we've been cheerfully working with is part of the HP factor, which has a cap of 255, and once that cap is reached, the lower G value for the Great Ball obviously no longer helps any, whereas the B value (not part of the capped HP factor) will still affect the outcome; in this case, Ultra Balls again gain an advantage over Great Balls even without statusing. More on the capping of the HP factor in the discussion of F below.

C (Capture Rate)

This is simply the base catch rate of the Pokémon species, ranging from 3 (for legendaries) to 255 (for common Pokémon like Caterpie and Pidgey). The values for the Kanto Pokémon are mostly unchanged in the later generations, with a couple of exceptions: Raticate went from a catch rate of 90 in R/B/Y to a catch rate of 127 in G/S, and in Yellow only, Dragonair and Dragonite's catch rates were changed to 27 and 9 respectively, while both in R/B and the later games they had a catch rate of 45 like Dratini. For any other Pokémon, you can look up the catch rate in an online Pokédex of your choice (psst, use veekun) and it will be the same as in R/B/Y. Of course, if you use my R/B/Y catch rate calculator, you won't have to look anything up.

The capture rate's role in the algorithm is that the size of that white window of R1 values that cause the game to calculate R2 is C + 1. All values of R1 that don't fall either within the status auto-capture window or the capture rate window are auto-failures. For a legendary (with capture rate 3), there are therefore always only four possible R1 values for which the game will consider the legendary's HP at all.

Where things get interesting is that the C + 1 window can't logically be bigger than what remains of the full range of R1 after the subtraction of the status window, so for a Pokémon with a very high catch rate, the probability formula will contain B - S instead of C + 1. More notes on the consequences of this in the real-world examples section below.

F (HP Factor)

This is where the current health of the Pokémon you're trying to catch comes in and makes it easier to capture a Pokémon that has been weakened. To recap, the F value is given by the following formula:

F = min(255, int(int(M*255/G)/max(1, int(H/4))))

where M stands for the Pokémon's maximum HP, H stands for the Pokémon's current HP, and G stands for the Great Ball modifier discussed above (8 for Great Balls, 12 otherwise).

In discussing this, it is illustrative to first take a look at what has changed in the later games. In the later-game catch rate formula, the HP factor amounts to (in a simplified form ignoring extra multipliers and roundings, since the context of the formulas is completely different anyway) 3 - 2H/M, whereas here it amounts to M/H. What's the difference between 3 - 2H/M and M/H? Both formulas return one if the Pokémon is at full health; however, as you bring down the Pokémon's HP, 3 - 2H/M naturally caps at 3, while M/H simply rises, ever faster, with no theoretical limit! Surely that can't be right; intuitively, it doesn't even quite make sense that just bringing a Pokémon down from 2% of its HP to 1% should do the same to your chances of catching it as bringing it from 100% to 50%, which is what this implies. We must be forgetting something, right?

Indeed we are: there is a cap of 255 on the HP factor that we ignored for convenience when comparing the old and new. Under just what circumstances is this cap reached, anyway? Well, obviously, that would be when int(int(M*255/G)/max(1, int(H/4))) >= 255, and a little bit of rearrangement (ignoring the roundings again, since they're not going to be very important) gives us that that means when H <= M/(G/4), which means H <= M/2 for Great Balls and H <= M/3 for other balls.

...Wait, you say. Did you just say...?

Yes. The HP factor caps when you've gotten the Pokémon down to half of its max HP if you're using a Great Ball, or a third otherwise. This applies to all Pokémon, with or without status effects. Any further lowering of the Pokémon's HP is simply a waste of your time and effort. No wonder they didn't make False Swipe until G/S/C!

This clearly defined maximum to the HP factor also makes it easy to calculate the difference between the maximum and minimum chances of capturing some given Pokémon with a given status and ball. If the Pokémon is at full health, F becomes roughly (discarding the inner roundings yet again; this will matter and make the result inaccurate at very low levels, but becomes insignificant at higher levels) int(255/2) = 127 for Great Balls and int(255/3) = 85 for other balls, and since the cap is always 255, that means lowering a Pokémon's HP will at most make it twice as easy to catch if you're using Great Balls, or three times easier otherwise (which, by the way, corresponds nicely to the newer games' HP factor's 1-3 range). This is assuming no status, however; lowering the HP has no effect on the status baseline for the given ball, resulting in a total reduction of the significance of reducing HP if the Pokémon has a status affliction, especially so if it also has a low catch rate (since that means the C + 1 window as a whole is smaller compared to the status window).

We can now approximate a "full-health Pokémon" formula of (S + min(C + 1, B - S) * 128 / 256) / B = (S + min(C + 1, B - S) / 2) / B for Great Balls and (S + min(C + 1, B - S) * 86 / 256) / B = (S + min(C + 1, B - S) * 43 / 128) / B for other balls. Even better, we get an accurate "low-health Pokémon" formula of (S + min(C + 1, B - S)) / B for all balls, which applies to any Pokémon below the HP cutoff point for the ball.

W (Wobble Approximation)

But what about the wobbling? What's all that weird calculation the game is doing just to figure out how many times the ball is going to wobble?

Well. Let's analyze just what the game is doing there, shall we? For clarity, we'll use the same variable names as in the capture success formula. Since the status factor in the wobble value is not the same as the one in the success formula (10 for sleep/freezing and 5 for poisoning/burning/paralysis instead of 25 and 12 respectively), I will refer to this status variable as S2.

W = int((int((C * 100) / (B - 1)) * F) / 255) + S2

Hmm. Doesn't this formula look just the slightest bit familiar? No? How about if we simplify it a little, like by removing the roundings and rearranging things just a bit...

W = 100 * (((B - 1) / 100) * S2 + C * F / 255) / (B - 1))

...and noting that for Poké Balls in particular, ((B - 1) / 100) * S2 gives a result uncannily close to the S variable from the success formula...

W = 100 * (~S + C * F / 255) / (B - 1))

...doesn't it look just a little bit like simply a hundred times another formula we know with caps and roundings removed?

Chance = (S + (C + 1) * (F + 1) / 256) / B

Yes: the game determines the number of times a ball will wobble based on a crude percentage approximation of its own success rate! What the number of wobbles is telling you is simply a very rough idea of how good your chance to capture the Pokémon is at present - if the ball misses, the game is estimating your chances are less than 10%, whereas if it wobbles once it's betting on 10-29%, twice means 30-69% and three times means 70% or more.

The main factors to introduce serious errors in this approximation are that they failed to account for the status bonus in the real formula being affected by the ball modifier (hence why ((B - 1) / 100) * S2 only approximates S for Poké Balls), the one that gets added to the C value (which has some significance for very low catch rates), and the C value potentially hitting a cap. What were the programmers thinking? I'm rather inclined to think it was simply an honest oversight - we are talking about the same programmers who seemingly accidentally gave all moves a 1/256 chance of missing, after all. That or, more charitably, they didn't want to waste the additional overhead it would take to be more accurate about it. On the other hand, the weird off-by-one errors (using 255 instead of 256, B - 1 instead of B, and F instead of F + 1), though very much the sort of typo one could guess they'd make, are likely just because the multiplication and division routines the game is using only work with one byte as the second argument - making that argument at most 255.

Since this is a static calculation with no random factor, this means that the number of wobbles in R/B/Y is always the same given the Pokémon's HP and status and the type of ball. Thus, if you're throwing balls at something and you've seen it break out on the first wobble, you can be certain you're catching it for real the moment you see the ball start to wobble a second time, unless its HP or status were changed in between.

Some Real-World Examples

A lot of these conclusions seem odd and counterintuitive and are a little hard to properly wrap one's head around, so it's only natural I should include some full calculations of actual hypothetical cases, using the proper formula rather than those gross simplifications, don't you think?

Low Catch Rates

The most interesting Pokémon for most people when it comes to catch rate calculations are of course legendaries and other very difficult-to-catch Pokémon. As it happens, the R/B/Y legendaries - Articuno, Zapdos, Moltres and Mewtwo - all have the standard legendary catch rate of 3. This means that if we visualize our chances in the spirit of the above visualization, we get this:

So let's now look at the effects of each of the other variables in the formula and how they interact with this low catch rate.

Status Afflictions

The visualization is here very illustrative, specifically because it shows just how tiny the chance the game will bother to even look at the HP is - doesn't the status portion look pretty huge in comparison? Indeed: the chance that R1 is less than the status variable is three times greater than the chance it's within the white area when the legendary is poisoned, burned or paralyzed, and more than six times greater if it's asleep or frozen. And that's just the chance it's going to check the HP factor at all, remember; the status matters even more comparatively when getting into the white area doesn't mean a guaranteed capture. Let's crunch some numbers to see this, assuming for the sake of the example that we're throwing an Ultra Ball at a level 70 full-health Mewtwo with an HP IV of 7 (238 total HP):

No status: (0 + min(3 + 1, 151 - 0) * (min(255, int(int(238*255/12)/max(1, int(238/4)))) + 1) / 256) / 151 = (4 * (min(255, int(5057/59)) + 1) / 256) / 151 = (4 * (85 + 1) / 256) / 151 = (4 * 86 / 256) / 151 = 0.89%

Poisoned/burned/paralyzed: (12 + min(3 + 1, 151 - 12) * (min(255, int(int(238*255/12)/max(1, int(238/4)))) + 1) / 256) / 151 = (12 + 3 * (min(255, int(5057/59)) + 1) / 256) / 151 = (12 + 4 * (85 + 1) / 256) / 151 = (12 + 4 * 86 / 256) / 151 = 8.84%

Asleep/frozen: (25 + min(3 + 1, 151 - 25) * (min(255, int(int(238*255/12)/max(1, int(238/4)))) + 1) / 256) / 151 = (25 + 4 * (min(255, int(5057/59)) + 1) / 256) / 151 = (25 + 4 * (85 + 1) / 256) / 151 = (25 + 4 * 86 / 256) / 151 = 17.45%

As you can see, even a lesser status effect makes you nearly ten times more likely to capture it, and nearly twenty times more so if it's asleep or frozen. The lesson is clearly to always inflict status on legendaries.

Hit Points

So wait, you think. Status matters this much before the HP is even checked? What does that mean for the effectiveness of lowering a legendary's HP, in comparison? Let's continue throwing Ultra Balls at that same Mewtwo after lowering its HP some instead of statusing it:

Full HP (as above): (0 + min(3 + 1, 151 - 0) * (min(255, int(int(238*255/12)/max(1, int(238/4)))) + 1) / 256) / 151 = (4 * (min(255, int(5057/59)) + 1) / 256) / 151 = (4 * (85 + 1) / 256) / 151 = (4 * 86 / 256) / 151 = 0.89%

119 HP (1/2): (0 + min(3 + 1, 151 - 0) * (min(255, int(int(238*255/12)/max(1, int(119/4)))) + 1) / 256) / 151 = (4 * (min(255, int(5057/29)) + 1) / 256) / 151 = (4 * (174 + 1) / 256) / 151 = (4 * 175 / 256) / 151 = 1.81%

79 HP (~1/3): (0 + min(3 + 1, 151 - 0) * (min(255, int(int(238*255/12)/max(1, int(79/4)))) + 1) / 256) / 151 = (4 * (min(255, int(5057/19)) + 1) / 256) / 151 = (4 * (255 + 1) / 256) / 151 = 4 / 151 = 2.65%

1 HP: (0 + min(3 + 1, 151 - 0) * (min(255, int(int(238*255/12)/max(1, int(1/4)))) + 1) / 256) / 151 = (4 * (min(255, 5057/1) + 1) / 256) / 151 = (4 * (255 + 1) / 256) / 151 = 4 / 151 = 2.65%

Here you can see both how the HP factor cap results in the exact same chance of capturing Mewtwo at 79 HP and at 1 HP and how the change is honestly pretty minuscule, compared to the massive improvement you get by inducing even one of the lesser status afflictions. (This shouldn't come as a surprise - as we calculated earlier, the HP factor caps at three times the full-health HP factor for Ultra Balls, so inevitably you're only to get three times the original tiny chance.) In fact, let's take a look at our chances with a 1 HP sleeping Mewtwo, compared to a full-health one:

Asleep/frozen, full HP (as above): (25 + min(3 + 1, 151 - 25) * (min(255, int(int(238*255/12)/max(1, int(238/4)))) + 1) / 256) / 151 = (25 + 4 * (min(255, int(5057/59)) + 1) / 256) / 151 = (25 + 4 * (85 + 1) / 256) / 151 = (25 + 4 * 86 / 256) / 151 = 17.45%

Asleep/frozen, 1 HP: (25 + min(3 + 1, 151 - 25) * (min(255, int(int(238*255/12)/max(1, int(1/4)))) + 1) / 256) / 151 = (25 + 4 * (min(255, 5057/1) + 1) / 256) / 151 = (25 + 4 * (255 + 1) / 256) / 151 = (25 + 4) / 151 = 29 / 151 = 19.21%

That's a pretty meager improvement upon just not bothering with the HP at all, don't you think? Weakening it is really hardly worth the effort; we could probably have thrown the five or six balls it would take to catch it on average in the time it took to wear it down. So much for the old man's advice to weaken Pokémon before catching them, huh?


So is it really true that Great Balls can be better than Ultra Balls against a non-statused Pokémon? Let's find out by throwing some Great Balls at that Mewtwo with no status and comparing to the analogous situation using Ultra Balls.

Full HP, no status, Great Ball: (0 + min(3 + 1, 201 - 0) * (min(255, int(int(238*255/8)/max(1, int(238/4)))) + 1) / 256) / 201 = (4 * (min(255, int(7586/59)) + 1) / 256) / 201 = (4 * (128 + 1) / 256) / 201 = (4 * 129 / 256) / 201 = 1.00%

119 HP (1/2), no status, Great Ball: (0 + min(3 + 1, 201 - 0) * (min(255, int(int(238*255/8)/max(1, int(119/4)))) + 1) / 256) / 201 = (4 * (min(255, int(7586/29)) + 1) / 256) / 201 = (4 * (255 + 1) / 256) / 201 = 4 / 201 = 1.99%

79 HP (~1/3), no status, Great Ball: (0 + min(3 + 1, 201 - 0) * (min(255, int(int(238*255/8)/max(1, int(79/4)))) + 1) / 256) / 201 = (4 * (min(255, int(7586/19)) + 1) / 256) / 201 = (4 * (255 + 1) / 256) / 201 = 4 / 201 = 1.99%

1 HP, no status, Great Ball: (0 + min(3 + 1, 201 - 0) * (min(255, int(int(238*255/8)/max(1, int(1/4)))) + 1) / 256) / 201 = (4 * (min(255, 7586/1) + 1) / 256) / 201 = (4 * (255 + 1) / 256) / 201 = 4 / 201 = 1.99%

So as you can see if you compare this with the numbers above, yes, Great Balls are indeed better when no status is involved, down past half HP... but only slightly, and Ultra Balls have a considerable advantage by the time the health gets below one third. And even if you're crazy enough to try to catch a legendary without statusing (i.e. very crazy), surely you're at least planning to lower its HP below one third before you do it, right? So really, that genius plan to catch the legendaries with Great Balls but no status afflictions isn't looking so good.

If you want to be able to really visualize this, here's a handy chart showing how the effectiveness of each type of ball changes as you lower that Mewtwo's HP:

Ball effectiveness by current HP (Mewtwo, no status)

Of course, hardly unexpectedly, when we do have status...

Full HP, asleep/frozen, Great Ball: (25 + min(3 + 1, 201 - 25) * (min(255, int(int(238*255/8)/max(1, int(238/4)))) + 1) / 256) / 201 = (25 + 4 * (min(255, int(7586/59)) + 1) / 256) / 201 = (25 + 4 * (128 + 1) / 256) / 201 = (25 + 4 * 129 / 256) / 201 = 13.44%

1 HP, asleep/frozen, Great Ball: (25 + min(3 + 1, 201 - 25) * (min(255, int(int(238*255/8)/max(1, int(1/4)))) + 1) / 256) / 201 = (25 + 4 * (min(255, 7586/1) + 1) / 256) / 201 = (25 + 4 * (255 + 1) / 256) / 201 = (25 + 4) / 151 = 29 / 201 = 14.43%

Just compare this to the numbers above in the HP section. So yeah. Ultra Balls.

High Catch Rates

But what if we aren't catching a legendary? What if we're just trying to catch, say, a level 20 Nidoran female (catch rate 235) with 55 max HP?

Status Afflictions

Doesn't the status portion look so much smaller now than it did for Mewtwo? Let's find out with some Ultra Balls.

No status: (0 + min(235 + 1, 151 - 0) * (min(255, int(int(55*255/12)/max(1, int(55/4)))) + 1) / 256) / 151 = (151 * (min(255, int(1168/13)) + 1) / 256) / 151 = (151 * (89 + 1) / 256) / 151 = (151 * 90 / 256) / 151 = 35.16%

Poisoned/burned/paralyzed: (12 + min(235 + 1, 151 - 12) * (min(255, int(int(55*255/12)/max(1, int(55/4)))) + 1) / 256) / 151 = (12 + 139 * (min(255, int(1168/13)) + 1) / 256) / 151 = (12 + 139 * (89 + 1) / 256) / 151 = (12 + 139 * 90 / 256) / 151 = 40.31%

Asleep/frozen: (25 + min(235 + 1, 151 - 25) * (min(255, int(int(55*255/12)/max(1, int(55/4)))) + 1) / 256) / 151 = (25 + 126 * (min(255, int(1168/13)) + 1) / 256) / 151 = (25 + 126 * (89 + 1) / 256) / 151 = (25 + 126 * 90 / 256) / 151 = 45.89%

Note that compared to Mewtwo, where the baseline status chance was pretty much just added onto the Pokémon factor, the status bonus is actually diminished here, not just relatively less significant; this is because thanks to Nidoran's catch rate being so high, the values reserved for the status-induced auto-capture aren't just cutting off the auto-fail section on the right side of our visualization (in fact, that auto-fail section only exists when the ball used is a Pokéball and Nidoran is not asleep/frozen), but in fact eliminating R1 values within the C + 1 window, which therefore would have had a chance of resulting in a capture anyway. The status bumps that chance up to 100%, so it's still an improvement, but not as great of one as if these guaranteed successes were replacing guaranteed breakouts.

Either way, though the status afflictions still give a respectable improvement, status clearly isn't nearly as much of an absolute must as it was for the legendaries.

Hit Points

Meanwhile, let's look at what happens if we choose instead to just lower that Nidoran's HP. Since we already know the HP factor caps at 1/3 of the total HP for all Pokémon when using Ultra Balls, let's not bother with the other possible HP values and just go straight to 1 HP (which is equivalent to any other low-HP value):

1 HP: (0 + min(235 + 1, 151 - 0) * (min(255, int(int(55*255/12)/max(1, int(1/4)))) + 1) / 256) / 151 = (151 * (min(255, 1168/1) + 1) / 256) / 151 = (151 * (255 + 1) / 256) / 151 = 151 / 151 = 100.00%

Guaranteed capture just like that! Clearly you're much better off just dealing some damage to that Nidoran to bring it below 1/3 of its total health than you are trying to inflict a status effect on it.


So what about those Great Balls that we concluded just aren't worth it against Mewtwo? What if we can't even be bothered to lower the Nidoran's HP and just lob a Great Ball at it straight away?

Full HP, no status, Great Ball: (0 + min(235 + 1, 201 - 0) * (min(255, int(int(55*255/8)/max(1, int(55/4)))) + 1) / 256) / 201 = (201 * (min(255, int(1753/13)) + 1) / 256) / 201 = (201 * (134 + 1) / 256) / 201 = (201 * 135 / 256) / 201 = 52.73%

When you scroll up and find you'd only have a 35.16% chance of catching this same Nidoran in an Ultra Ball, it is plain that Great Balls do have their uses after all. But how can the advantage suddenly be this great? Didn't we find earlier that Great Balls just give a 1.91 multiplier where Ultra Balls multiply by 1.70 - surely that shouldn't result in a 50% improvement in the actual chance when you use a Great Ball rather than an Ultra Ball?

Yet again, the answer lies in the simplifying assumptions we made when creating the dumbed-down formulas to analyze their behaviour above, specifically in ignoring the "cap" on the C + 1 value. Because Nidoran's catch rate is higher than the range of the ball modifier for both Great and Ultra Balls, we use B - S in the formula instead of C + 1 - and that B - S is a multiplier rather than a divisor like the other place the B value appears, meaning this time higher is better. In visualization terms, whereas for something like Mewtwo shrinking the range of R1 is a good thing even when there's no status because it's cutting off those auto-fail possibilities on the right side, doing the same for Nidoran (past Poké Balls, anyway) makes no difference at all, allowing the Great Ball to confer the full extent of its advantageous influence on the HP factor upon the final success rate.

In short, Great Balls are much better than Ultra Balls against Pokémon with very high (200+) catch rates, provided the HP factor hasn't capped yet. Fancy that! Again, I've got a chart to let you visualize this; the stepped nature of the chart here results from the fact this Nidoran's maximum HP is so low:

Ball effectiveness by current HP (Nidoran, no status)

In fact, even when there's a status affliction in play...

Full HP, asleep/frozen, Great Ball: (25 + min(235 + 1, 201 - 25) * (min(255, int(int(55*255/8)/max(1, int(55/4)))) + 1) / 256) / 201 = (25 + 176 * (min(255, int(1753/13)) + 1) / 256) / 201 = (25 + 176 * (134 + 1) / 256) / 201 = (25 + 176 * 135 / 256) / 201 = 58.61%

Still considerably better than an Ultra Ball (45.89%, if you're too lazy to look up), if not as much so as without the status. So what about when the HP factor caps?

1 HP, no status, Great Ball: (0 + min(235 + 1, 201 - 0) * (min(255, int(int(55*255/8)/max(1, int(1/4)))) + 1) / 256) / 201 = (201 * (min(255, 1753/1) + 1) / 256) / 201 = (201 * (255 + 1) / 256) / 201 = (201 * 256 / 256) / 201 = 100.00%

The Great Ball equals the Ultra Ball here, and it will for any Pokémon with a catch rate of 200+. So in other words, for Pokémon with high catch rates, there is never a reason to choose an Ultra Ball over a Great Ball; they're just equally good when the HP is low, and otherwise the Great Ball is actually better.

In Plain English

Confused by all the math talk? All right; here's a plain, summarized, as-few-numbers-as-possible version of the unexpected conclusions of the algorithm. Remember, this is all stuff that applies to R/B/Y only; it does not work this way in the later games, including FireRed and LeafGreen.

First of all, regardless of anything else, if the targeted Pokémon has a status affliction, you get a set extra chance to capture it depending on the status and the Pokéball you're using, before the game starts checking the Pokémon's HP and whatnot. These chances are listed in the following table:

Poké Ball12/256 = 4.69%25/256 = 9.77%
Great Ball12/201 = 5.97%25/201 = 12.44%
Ultra Ball12/151 = 7.95%25/151 = 16.56%

Your overall chance of capturing the Pokémon if it has a status affliction will never go below the chance stated above, even if it's a legendary at full health - this is a check the game applies before it even looks at the HP or catch rate, after all. This makes status by far the most viable way of increasing your chances of getting a legendary - the improvements to be made by lowering their HP are frankly negligible in comparison. (The chance of catching an average full-HP sleeping Mewtwo in an Ultra Ball is 17.45%; the chance of catching an average 1-HP sleeping Mewtwo in an Ultra Ball is 19.21%.)

Second of all, lowering a Pokémon's HP below one third has no effect at all on its catch rate. If you're using Great Balls, in fact, that cutoff point is at one half rather than one third. Painstakingly shaving off slivers until the HP bar is one pixel wide? A waste of time. Sorry. When a Pokémon is down to the cutoff point, you are twice as likely to capture it as if it were at full health if you're using a Great Ball, and three times as likely if you're using any other ball.

Third, Great Balls are actually better than Ultra Balls for Pokémon with no status afflictions or that have an intrinsic catch rate of 200+, provided they're at around half of their health or more. The difference is slight (but still there) for non-statused Pokémon with low catch rates, such as legendaries, but at high catch rates, Great Balls are very noticeably superior to Ultra Balls, even with status afflictions. Ultra Balls, meanwhile, truly shine at catching statused Pokémon with low intrinsic catch rates, and for low-health Pokémon they're always at least as good as Great Balls.

Fourth, wobbles are a loose indicator of the game's approximation of your chances of capturing the Pokémon at the current status and HP with the current ball. This approximation is significantly flawed, especially when status or high catch rates are involved, but I would guess accuracy wasn't particularly a priority for the programmers, considering it's just determining how many times you'll see a ball wobble on the screen before a by-this-point-inevitable conclusion. Roughly:

WobblesMessageApproximated chance of capture
0"The ball missed the POKéMON!"< 10%
1"Darn! The POKéMON broke free!"10-30%
2"Aww! It appeared to be caught!"30-70%
3"Shoot! It was so close too!">= 70%

The catch rate calculator below will show this approximation and the number of wobbles in addition to the actual chance when "Show detailed report" is on, if you're interested.

Catch Rate Calculator

I doubt anybody in the world will ever have use for this, since nobody plays R/B/Y anymore, but hey, why not? Calculate your chances of capturing a Pokémon at a given status and health with a given ball using this tool.

The calculator will do the calculation for each of the sixteen possible HP IVs. If you check the "Show detailed report?" box, it will show the exact chance (as well as the game's approximation of the chance and the according number of wobbles) for each given IV; otherwise, it will show the overall chance assuming each HP IV is equally likely (which is normally the case). Note that the detailed report is generally not very meaningful in real-world situations in R/B/Y unless the Pokémon is at full health; while the game's internal wobble calculation is fun trivia, the approximation of the Pokémon's current HP is going to introduce a far bigger margin of error than the possible variation in the maximum HP.


Approximation of current HP:

Page last modified March 31 2013 at 21:51 GMT