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; in particular, it really is an algorithm rather than mostly a straightforward formula. And 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, well, if you don't care about the insides of the game, you can always skip down to the basic summary of how capturing is different in R/B/Y.
Meanwhile, if all you want to do is find out how likely you are to capture a Pokémon in R/B/Y, you'll want the catch rate calculator.
The capture algorithm proper, as listed below, applies to regular wild Pokémon battles. A few sanity checks are handled before we get to that part:
- If you're not in battle, you can't use a ball. "OAK: This isn't the time to use that!"
- If this is a trainer battle, the capture immediately fails. "The trainer blocked the BALL! Don't be a thief!"
- If this is not the Old Man's tutorial battle at the beginning of the game, then if both your party and your current box are full, you can't throw a ball. "The POKéMON BOX is full! Can't use that item!"
- If this is a battle against an unidentified ghost, or if the Pokémon is a Marowak and the player's current location is the sixth floor of Pokémon Tower (in an unmodified game, the latter will only happen for the special ghost Marowak), the capture immediately fails. "It dodged the thrown BALL! This POKéMON can't be caught!"
Otherwise, 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.
- If the ball being thrown is a Master Ball, the Pokémon is automatically caught. Skip the rest of the procedure. (Yes, the Master Ball is an automatic guaranteed success, as long as you pass the sanity checks above. There is an extremely persistent rumour that it actually has a 1/256 or 1/65536 chance of missing; whatever you may have heard, wherever you heard it, it is not true. It is true that moves that were meant to be 100% accurate would have a 1/256 chance of missing in R/B/Y, but this has no relation to how the Master Ball works in any game; it always simply skips the calculation entirely.)
- 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).
- 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.
- Subtract S from R1 (to avoid confusion with the original R1, I will refer to the result as R*).
- 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.
- Calculate the HP factor F:
- Multiply the Pokémon's max HP by 255 and store the result in F.
- Divide F by
- 8 if the ball used was a Great Ball.
- 12 otherwise.
- 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.
- If F is now greater than 255, make it 255 instead.
- If the base catch rate of the Pokémon is less than R*, the Pokémon automatically breaks free. Skip to step 10.
- Generate a second random number R2 ranging from 0 to 255 (inclusive).
- If R2 is less than or equal to the HP factor F, the Pokémon is caught. Skip the rest of the procedure.
- If we get here, the capture fails. Determine the appropriate animation to show:
- Multiply the Pokémon's base catch rate by 100 and store the result in a wobble approximation variable W.
- 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.
- If the result is greater than 255, the ball will wobble three times; skip the rest of this subprocedure. (This can't actually happen, since the Pokémon's base catch rate can never be greater than 255, but given the shenanigans that can happen when Game Freak forgets to include failsafes, I don't blame them.)
- Multiply W by F (the HP factor calculated above).
- Divide W by 255.
- 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.
- 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. (This gets a bit mathematical, but bear with me.) Let's call the Pokémon's base catch rate C and create a ball modifier 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.) Depending on where R1 falls in this range, three different things can happen:
- If R1 is less than the status variable S, the Pokémon is immediately caught.
- If R1 is greater than or equal to S, but less than or equal to S + C, the game calculates a second random number R2 between 0 and 255 inclusive and an HP factor F. 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.
- If R1 is greater than S + C, the Pokémon breaks free.
Of the total of B possible R1 values, S of them result in the first path (auto-capture), C + 1 of them (up to a maximum of B - S, since there are only B - S values left) result in the second path where R2 and the HP factor F are calculated, and the rest (if any) result in the third path (auto-failure). 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 within the auto-capture range (the chance of which is S / B, since S out of B possible values of R1 give us that result), 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 - it's F + 1 because we're counting the R2 values from 0 to F inclusive). 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. That means these divisions are not integer divisions, and this formula can be rearranged at will without producing rounding errors or the like. Thus we could, for instance, combine those divisions by B and get this equivalent, perhaps somewhat cleaner formula:
`Chance = (S + min(C + 1, B - S) * (F + 1)/256)/B`
You'll see that version again a bit later, but I'm sticking with the former version for the explanation, as I believe it both reflects the structure of the algorithm better and will illustrate some aspects of its behaviour more clearly. So here it is again with the full formula for F included:
`Chance = S/B + (min(C + 1, B - S))/B * (min(255, |__(|__(M*255)/G__|)/(max(1, |__H/4__|))__|) + 1)/256`
You probably still don't have a very good idea what any of this really means, but that's okay; we're getting to that. Let's go over the values in the formula and how they ultimately affect it.
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' formulas (but like the second-generation formula), the status is factored in not as a multiplier but an addition. This leads to two interesting conclusions. First, it means that status conditions essentially give a certain baseline chance of capturing the Pokémon, equal to S/B - regardless of the Pokémon's catch rate and HP, your final chance of capturing it will always be at least that baseline. Second, addition has a proportionally greater influence the smaller the original value is - think of how if you add 100 to 100, you're doubling it, whereas if you add 100 to one million, the change is barely worth mentioning. This means that status provides only a modest improvement to the odds of a successful capture if your chances are already pretty good, but makes a massive difference when you're trying to catch something like a legendary.
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 and G/S/C to a catch rate of 127 in R/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 and it will be the same as in R/B/Y. Of course, if you use my calculator, you won't have to look anything up.
If you look back at the visualization image above, the capture rate's role in the algorithm is to determine the size of the white part of the top bar: out of the B possible values R1 can take, C + 1 of them (or more accurately, min(C + 1, B - S), since the capture rate window obviously can't be bigger than all the B values that aren't in the status auto-capture window) will lead to the HP factor check happening. 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 (3 + 1) possible R1 values for which the game will look at the legendary's HP at all, for instance.
That capping when the capture rate is greater than B - S has some interesting consequences, which I'll go into better in a bit.
B (Ball Modifier) and G (Great Ball Modifier)
Quite unlike the ball bonus multiplier of the later games, there are two ball-related modifiers in the R/B/Y formula, both of which are primarily 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 calculation of the HP factor (the F variable) 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, but let's take a good look at the formula again.
`Chance = S/B + (min(C + 1, B - S))/B * (F + 1)/256`
The addition splits it into two parts: the status check (S/B), and the HP factor check (the rest). The effect of balls on the status check is simple to calculate. For a Poké Ball the status check becomes S/256, for a Great Ball it's S/201, and for an Ultra or Safari Ball it's S/151. This means that compared to a Poké Ball, a Great Ball effectively gives a 256/201 = 1.27 multiplier to the status check, and an Ultra Ball gives a 256/151 = 1.70 multiplier to it.
The HP factor check is a bit more complicated, since in addition to a division by B, the min(C + 1, B - S) part means it will sometimes also contain B above the line, and the HP factor itself contains the G value within some roundings and a cap of 255. If we ignore rounding errors and the +1, assume that C + 1 is less than B - S and the overall cap of 255 on the HP factor doesn't get tripped, however, then both B and G are basically divisors on the entire outcome, so we can compare them in a similar way as above. This tells us that compared to a Poké Ball, a Great Ball effectively yields a multiplier of around 256*12 / 201*8 = 1.91 to the HP factor check, and an Ultra Ball yields a multiplier of around 256*12 / 151*12 = 1.70.
Yes, you read that right: Great Balls actually give a higher boost to the HP factor check than Ultra Balls, provided our assumptions hold. Ultra Balls are still better for the status check, but if you are for instance trying to catch a Pokémon with no status condition (in which case the status check is always going to be zero), then Great Balls are actually, honest-to-God better according to this. Who would've thought?
So, when do those simplifying assumptions actually hold, and what happens when they don't, anyway? Well, the min(C + 1, B - S) means that when the base catch rate of the Pokémon is sufficiently high, the HP factor check formula turns into this:
`Chance_(HP) = (B - S)/B * (F + 1)/256 = (1 - S/B) * (F + 1)/256`
Suddenly B has vanished entirely as a divisor except in the subtraction of S/B. Under these circumstances, even the advantage the Ultra Ball did have thanks to its lower B value is completely canceled out, and in fact the Great Ball's disadvantage when it comes to status starts to be partly mitigated. To intuitively grasp what's going on here, let's look yet again at the visualization from earlier:
The B value determines the size of the top bar. A lower B value generally helps by making the red auto-failure portion on the right side smaller and thus also making the status auto-capture window and the capture rate window proportionally bigger. However, if the C value is so large that there are no auto-failure values on the right side either way, then a lower B just means the status auto-capture window, if any, becomes proportionally bigger at the expense of the capture rate window, where you would have had some chance to capture the Pokémon anyway - still an improvement, but not as much of one. And if there is no status, then so long as B is less than or equal to C + 1, the entire top bar will be white - beyond that point, a lower B won't do anything at all.
All in all, this means that the Great Ball has an even greater advantage over the Ultra Ball for Pokémon with high catch rates, starting at 150 and maximizing at 200+, by which time the HP factor check will be about 33% more likely to succeed for a Great Ball than an Ultra Ball.
Don't count your chickens just yet, though. The other major simplifying assumption we've been making in calculating the balls' relative strengths was ignoring the cap on the HP factor, and this will turn out to be quite significant as well. More on that in the HP factor section below.
F (HP Factor)
This is where the current health of the Pokémon you're trying to catch comes in, making 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, |__(|__(M*255)/G__|)/(max(1, |__H/4__|))__|)`
where M stands for the Pokémon's maximum HP, H stands for the Pokémon's current HP, G stands for the Great Ball modifier discussed above (8 for Great Balls, 12 otherwise), and `|__x__|` stands for rounding x down to the nearest integer. A higher F value means a greater chance of a successful capture.
First things first, let's see what sort of value is going to come out of this for both possible G values. If we plug in H = M to represent a full-health Pokémon and ignore rounding errors, we get...
`F = min(255, |__(|__(M*255)/12__|)/(max(1, |__M/4__|))__|) ~= (M * 255/12)/(M/4) = 255 * 4/12 = 255/3 = 85` (Poké/Ultra/Safari Ball)
`F = min(255, |__(|__(M*255)/8__|)/(max(1, |__M/4__|))__|) ~= (M * 255/8)/(M/4) = 255 * 4/8 = 255/2 = 127.5` (Great Ball)
Yet again, incredibly enough, the Great Ball is actually better than not just the Poké Ball but also the Ultra and Safari Balls, at least for full-health Pokémon.
So what happens as you lower the Pokémon's HP? It's not hard to see that the basic interaction between the Pokémon's maximum and current HP involved here is M/H (M appears above the line in the fraction while H appears below the line), which at a glance makes sense: at full HP you'll get 1 out of that, and then as H drops, the value will rise. (This means the above full-health values are the minimum possible values the HP factor can take for their respective balls.) But if left unchecked, it would just rise ever faster and faster, which would lead to absurd results - the value for 4 HP would be twice as high as for 8 HP. That's where the HP factor cap comes in: once you've whittled the Pokémon's HP down enough to make the HP factor value 255, lowering its HP more will no longer have any effect upon its catch rate. Given the full-health values above, this means lowering the Pokémon's HP can at most double your chances for the HP factor check if you're using a Great Ball, or triple them when you're using another ball - which in turn means that despite the Great Ball's initial advantage, the Ultra Ball can catch up, what with the maximum being the same for both of them. (The maximum HP factor for non-Great Balls being triple the minimum matches up pretty well with the later games: since G/S/C, the core HP interaction in the capture formula has been 3 - 2H/M, which gives 1 at full HP but rises linearly up to a theoretical limit of 3 as you lower the Pokémon's HP.)
So, just when is this cap tripped? Again, if we ignore rounding errors, we can calculate that easily:
`255 = (M*255)/G / H/4 <=> 1 = M/G / H/4 <=> H = 4/G*M`
which means the HP factor caps when the Pokémon is at roughly 1/2 (4/8) of its total HP for Great Balls, or around 1/3 (4/12) of its total HP for all other balls.
...Wait, you say. Did you just say what I think you just said?
Yes, I'm afraid so. With or without status effects, regardless of catch rates, lowering the Pokémon's HP below one third, or one half if you're using a Great Ball, does absolutely nothing to help you catch it. Continuing to painstakingly deal tiny slivers of damage beyond that is simply a waste of your time and effort. No wonder False Swipe wasn't made until the second generation - leaving a Pokémon at exactly one HP is not actually useful in any fashion in R/B/Y.
For a low-health Pokémon whose HP factor has capped, the final capture formula (regardless of the ball used) simplifies beautifully to
`Chance_(LowHP) = (S + min(C + 1, B - S))/B`
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? Most of the variables involved in the wobble calculation are the same or basically the same as in the actual capture formula, so I'll use the same variable names, but since the status factor in the wobble formula is not the same (it's 10 for sleep/freezing and 5 for poisoning/burns/paralysis instead of 25 and 12 respectively) I'll call that S2. With this in mind, here's the formula the game is evaluating:
`W = |__(|__(C * 100)/(B - 1)__| * F)/255__| + S_2`
Hmm. Doesn't this formula look just the slightest bit familiar? No? How about if we ignore the roundings and rearrange it just a bit...
`W = 100 * (((B - 1) * S_2)/100 + C * F/255)/(B - 1)`
...and note that for Poké Balls in particular, `((B - 1) * S_2)/100` 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 a variation of another formula we know, with some off-by-one errors and a cap removed?
`Chance = (S + min(C + 1, B - S) * (F + 1)/256)/B`
Now, I can't claim I know what Game Freak were thinking when they programmed this calculation. But I would bet money that what the game is trying to do here with the wobbles is to calculate a percentage approximation of its own success rate. If the ball misses, the game estimates your chances are less than 10%, whereas if it wobbles once it's guessing 10-29%, twice means 30-69% and three times means 70% or more.
The main factors to introduce serious errors in this approximation are, firstly, that they failed to account for the status bonus in the real formula being affected by the ball modifier (as noted above, ((B - 1) * S2)/100 only approximates S for Poké Balls); secondly, the one that should be added to the C value (which has some significance for very low catch rates); and thirdly, the C + 1 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 made the stat modification system, after all. That or, more charitably, they didn't want to waste the additional overhead it would take to be more accurate about it for something so insignificant.
Notice anything interesting? This is a completely static calculation with no random factor to it whatsoever, and that means (unlike the later games) 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, it will always break out on the first wobble unless you switch balls or its HP or status change, unless the capture is actually successful.
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 put the formula to use to give you some hard numbers for some actual realistic in-game situations, 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:
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.
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? 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: `Chance = 0/151 + (min(3 + 1, 151 - 0))/151 * (min(255, |__(|__(238*255)/12__|)/(max(1, |__238/4__|))__|) + 1)/256 = 0.89%`
Poisoned/burned/paralyzed: `Chance = 12/151 + (min(3 + 1, 151 - 12))/151 * (min(255, |__(|__(238*255)/12__|)/(max(1, |__238/4__|))__|) + 1)/256 = 8.84%`
Asleep/frozen: `Chance = 25/151 + (min(3 + 1, 151 - 25))/151 * (min(255, |__(|__(238*255)/12__|)/(max(1, |__238/4__|))__|) + 1)/256 = 17.45%`
As you can see, even a lesser status effect makes you nearly ten times more likely to capture it, and capture is nearly twenty times more likely if it's asleep or frozen. The lesson is clear: always inflict status on legendaries. Always.
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): `Chance = 0/151 + (min(3 + 1, 151 - 0))/151 * (min(255, |__(|__(238*255)/12__|)/(max(1, |__238/4__|))__|) + 1)/256 = 0.89%`
119 HP (1/2): `Chance = 0/151 + (min(3 + 1, 151 - 0))/151 * (min(255, |__(|__(238*255)/12__|)/(max(1, |__119/4__|))__|) + 1)/256 = 1.81%`
79 HP (~1/3): `Chance = 0/151 + (min(3 + 1, 151 - 0))/151 * (min(255, |__(|__(238*255)/12__|)/(max(1, |__79/4__|))__|) + 1)/256 = 2.65%`
1 HP: `Chance = 0/151 + (min(3 + 1, 151 - 0))/151 * (min(255, |__(|__(238*255)/12__|)/(max(1, |__1/4__|))__|) + 1)/256 = 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 really 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 never going to get more than three times the original tiny chance by just lowering HP.) 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): `Chance = 25/151 + (min(3 + 1, 151 - 25))/151 * (min(255, |__(|__(238*255)/12__|)/(max(1, |__238/4__|))__|) + 1)/256 = 17.45%`
Asleep/frozen, 1 HP: `Chance = 25/151 + (min(3 + 1, 151 - 25))/151 * (min(255, |__(|__(238*255)/12__|)/(max(1, |__1/4__|))__|) + 1)/256 = 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: `Chance = 0/201 + (min(3 + 1, 201 - 0))/201 * (min(255, |__(|__(238*255)/8__|)/(max(1, |__238/4__|))__|) + 1)/256 = 1.00%`
119 HP (1/2), no status, Great Ball: `Chance = 0/201 + (min(3 + 1, 201 - 0))/201 * (min(255, |__(|__(238*255)/8__|)/(max(1, |__119/4__|))__|) + 1)/256 = 1.99%`
79 HP (~1/3), no status, Great Ball: `Chance = 0/201 + (min(3 + 1, 201 - 0))/201 * (min(255, |__(|__(238*255)/8__|)/(max(1, |__79/4__|))__|) + 1)/256 = 1.99%`
1 HP, no status, Great Ball: `Chance = 0/201 + (min(3 + 1, 201 - 0))/201 * (min(255, |__(|__(238*255)/8__|)/(max(1, |__1/4__|))__|) + 1)/256 = 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 bold enough to try to catch a legendary without statusing, 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:
The weird jaggedness of the lines is because of the integer divisions - since the current HP gets divided by four in the HP factor calculation, the HP factor won't change if Mewtwo goes from 238 to 236, or from 235 to 232, but it will "jump" a little when it goes from 236 to 235.
Of course, hardly unexpectedly, when we do have status...
Full HP, asleep/frozen, Great Ball: `Chance = 25/201 + (min(3 + 1, 201 - 25))/201 * (min(255, |__(|__(238*255)/8__|)/(max(1, |__238/4__|))__|) + 1)/256 = 13.44%`
1 HP, asleep/frozen, Great Ball: `Chance = 25/201 + (min(3 + 1, 201 - 25))/201 * (min(255, |__(|__(238*255)/8__|)/(max(1, |__1/4__|))__|) + 1)/256 = 14.43%`
Compare that to the Ultra Ball's 17.45% and 19.21%. 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?
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: `Chance = 0/151 + (min(235 + 1, 151 - 0))/151 * (min(255, |__(|__(55*255)/12__|)/(max(1, |__55/4__|))__|) + 1)/256 = 35.16%`
Poisoned/burned/paralyzed: `Chance = 12/151 + (min(235 + 1, 151 - 12))/151 * (min(255, |__(|__(55*255)/12__|)/(max(1, |__55/4__|))__|) + 1)/256 = 40.31%`
Asleep/frozen: `Chance = 25/151 + (min(235 + 1, 151 - 25))/151 * (min(255, |__(|__(55*255)/12__|)/(max(1, |__55/4__|))__|) + 1)/256 = 45.89%`
Note how compared to Mewtwo, where the baseline status chance was just added onto the no-status chance, the status bonus is actually diminished here, not just relatively less significant. This is because of Nidoran's high base catch rate, as explained under the ball modifier section above.
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.
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: `Chance = 0/151 + (min(235 + 1, 151 - 0))/151 * (min(255, |__(|__(55*255)/12__|)/(max(1, |__1/4__|))__|) + 1)/256 = 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: `Chance = 0/201 + (min(235 + 1, 201 - 0))/201 * (min(255, |__(|__(55*255)/8__|)/(max(1, |__55/4__|))__|) + 1)/256 = 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. As discussed in the ball modifier section, Great Balls really are much better than Ultra Balls against Pokémon with very high (200+) catch rates, provided the HP factor hasn't capped yet. Again, I've got a chart to let you visualize this; the jaggedness here is more pronounced because Nidoran's maximum HP is so much lower:
In fact, even when there's a status affliction in play...
Full HP, asleep/frozen, Great Ball: `Chance = 25/201 + (min(235 + 1, 201 - 25))/201 * (min(255, |__(|__(55*255)/8__|)/(max(1, |__55/4__|))__|) + 1)/256 = 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: `Chance = 0/201 + (min(235 + 1, 201 - 0))/201 * (min(255, |__(|__(55*255)/8__|)/(max(1, |__1/4__|))__|) + 1)/256 = 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 even starts checking the Pokémon's HP and whatnot. These chances are listed in the following table:
|Poké Ball||12/256 = 4.69%||25/256 = 9.77%|
|Great Ball||12/201 = 5.97%||25/201 = 12.44%|
|Ultra Ball||12/151 = 7.95%||25/151 = 16.56%|
Your overall chance of capturing the Pokémon if it has a status affliction will never be less than 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 is and always has been waste of time in R/B/Y. 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 can be 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 breakout. Roughly:
|Wobbles||Message||Approximated 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%|
Notice that the message "The ball missed the POKéMON!" is simply R/B/Y's version of the ball breaking without wobbling. The message confusingly implies that the Pokémon is currently impossible to catch, but in reality, if you keep chucking balls, you'll eventually get it - it's just that your chances are low.
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
The catch rate calculator for the first-generation games is now its own page; look there to easily determine your chances of capturing a Pokémon in R/B/Y without manually working through the formulas.
Page last modified June 15 2018 at 21:54 GMT