Talk:Catch rate

From Bulbapedia, the community-driven Pokémon encyclopedia.
Jump to navigationJump to search

The computer science term for "Floor" is, in fact, "int(", which simply truncates the number. "round(" would make a value like 6.9 become 7; "int(" would make it 6. I believe Zhen is correct in this case. ~Evan

What was that in reference to? - Jshadias
Zhen's edit and your subsequent reversion, if I read the history right. ~Evan
He was just editing it to make it consistent with my other changes. In any case, the after revision is the right-side column. In any case, trunc() and floor() are the same, but int() is ambiguous. It simply means conversion to integer, which could be rounding or truncating. Wish I could get TeX-rendering working... - 刘 (劉) 振霖 09:40, 12 Feb 2005 (GMT)

Is this formula accurate?

When using the formula

Chance = floor (((( TotalHP * 4 ) - ( CurrentHP * 2 )) * CatchRate ) / TotalHP ) + Status + 1

with Pokémon with high catch rates (ex. Pidgey and Rattata), the formula says that there should be about a 200% chance to catch a Pidgey at 100% HP. But there isn't a 200% chance or even a 100% chance. I caught 5 Pokémon on Route 1 of FireRed without weakening any of them and I used 15 Pokéballs. Despite the sample size, the fact that the Pokémon escaped even once is enough to raise concern about the formula. Any other thoughts on the matter? -Wild Eep

Experimental data isn't the same as theoretical results. But then again, methinks you might be misinterpreting the results of using this formula. The formula does not return a percentage, it returns a number, and in order to capture a Pokémon, the randomly generated number between 0 and 255 (or possibly a higher number than that, say, 511) has to be below the number you obtain from this formula. But I'm not the game mechanics expert. - 振霖T 02:16, 25 November 2005 (CST)

Hmm. . . using the formula for any pokémon at any level with full HP and no status ailments with a catch rate of 255 gives an output of 511. Every site I could find has the exact same formula, and they all say the random number is between 0-255. Those that site sources site Meowth346 as their source, so maybe he knows, or can find out. Slim 15:54, 29 November 2005 (CST)

Indeed, there seems to be something off with either this formula or the listed CatchRates. Trying to catch a Pokemon simply by chucking a normal Pokeball at it (that is, no damage done, no status changes) simplifies as so:
Chance = floor (Poké Ball * (((( TotalHP * 4 ) - ( CurrentHP * 2 )) * CatchRate ) / TotalHP ) + Status + 1)
Chance = floor (1 * (((( TotalHP * 4 ) - ( TotalHP * 2 )) * CatchRate ) / TotalHP ) + 0 + 1)
Chance = floor ((( TotalHP * 2 * CatchRate ) / TotalHP ) + 1)
Chance = floor (( 2 * CatchRate ) + 1)
For any CatchRate of 128 or higher, Chance is at least 257. The random number between 0 and 255 this is compared to will always be less than this, and as a result any Pokemon with a CatchRate of 128 or higher should always be caught simply by chucking a Pokeball at it. Yet this does not seem to be the case -- you can't always catch an Abra this way, despite them having a CatchRate of 200. This should give them a Chance of 401, and thus a 100% catch rate. Wild Eep and Slim seem to have noticed the same thing. Opaopa13 05:12, 27 April 2007 (UTC)
I just noticed something -- note the following line in the article:
CurrentHP is either the wild Pokémon's current HP, or if its current HP is greater than 255, use floor ( CurrentHP / 4).
It doesn't make sense to simply replace CurrentHP with floor ( CurrentHP / 4) -- that would make for a very strange function, where a Pokemon with 256 HP would be easier to catch than one with 68. Replacing all of (CurrentHP * 2 ) just makes the problem worse. This suggests a typographical error somewhere in either the formula or its explanation.
I had a hunch, and replaced (( TotalHP * 4 ) - ( CurrentHP * 2 )) with (( TotalHP / 4 ) - ( CurrentHP / 2 )). Unfortunately, that's not right either -- according to that forumla, a Pokemon above 50% health will have a negative Chance value and thus can NEVER be caught. We know that is not the case. However, I suspect something along those lines is the solution. Perhaps one of those multiplications is supposed to be a division instead. Is there any healthy chunk of experimental data to look at? Opaopa13 05:24, 28 April 2007 (UTC)

The sensible thing to do is to ask someone who knows how to use a debugger/disassembler to investigate this. Unfortunately, the only person I know who can do this is pika. - 振霖T 06:57, 28 April 2007 (UTC)


Examining an emulated copy of Pokemon Red, I did, indeed, find it impossible to NOT catch any Rattata or Pidgey I threw a Pokeball at. I was more than ready to believe this formula were true. But, as Opaopa13 said, we know it isn't, because anyone who has played the Red or Blue versions knows Abra is not so easy to catch.

Interestingly, I tried the same thing on a Pidgey in an emulated copy of the Gold version (throwing a ball at it when it was at full health), and failed to capture it until my third try.

I JUST DON'T KNOW WHAT TO BELIEVE! - Pineapple

It would be easy to explain this if Abra's catch rate was just wrong, but the catch rates must have been data-mined, so that's out. Allow me to be completely speculative here, but perhaps it's something like a rare few Pokemon having an additional chance to escape capture? Or certain catch rates that are influenced by what badges you have? It would be odd to have something like that when the programmers could just alter something's catch rate instead, though...
Well, we _know_ we get the wrong results for Abra. I'm guessing there was some minor typo somewhere, or else some minor modifier to the formula we aren't aware of.
On a side-note, I'm still really confused by the "if CurrentHP > 256, use (CurrentHP / 4) instead" thing. I just can't imagine any reason, technical or modelling-wise, where "use CurrentHP = 255" doesn't work just as well or better. Or at least divide by 2! (Pokemon HP never exceeds 1024, right? Thinking in terms of the number of bits it takes to represent these numbers...). Opaopa13 19:22, 7 May 2007 (UTC)

I think, we should just remove the formula from the page until we can get some authoritative analysis, or otherwise from experimental data. - 振霖T 06:17, 8 May 2007 (UTC)

I strongly suspect that the only problem with the formula on the site is the 2. I know that's how the old equation simplifies, so the original was probably off as well. 1+INT(B*(2-P)*C+S) makes perfect sense. Then a Pidgey or other Pokemon with a catch rate of 255 is guaranteed to be caught, since at full health and no ailments, you get 256. Any number from 0-255 will be lower than that, so you'll always catch it. On the other hand, a legendary Pokemon with 1/10th of its health left, paralyzed, with an ultra ball thrown an it, is 1+INT(2*1.9*3+5), or 17. 17/256 (since it's a less than roll, not less than or equal to) is about 6.6% (1 in 15). That seems about right, given that it's taken an average of 15-20 ultra balls for me to catch most of the legendaries. The current formula says it would be 28/256, or 10.9% (about 1 in 9), which is definitely not right. Easiest way to test would be to repeatedly try catching something with a catch rate around 120, using a standard ball, and see if it happens about half the time. Arrkhal 03:50, 20 May 2007 (UTC)

The correct formula

Apparently someone at Smogon found an extremely complex formula on a Japanese website. A good friend of mine simplified it and it seems to be 100% Accurate:

( ( 1 - CurHP * 2 / ( MaxHP * 3 ) ) * Catch * Ball * Status ) / 256

Status:

  • 1 for Normal
  • 1.5 for Poisoned, Paralyzed, or Burned
  • 2 for Asleep or Frozen

Examples:

  • A level 2 Rattata, with 13/13 HP, catch rate 255, using a Pokeball. No status effects.
    • ( ( 1 - 13 * 2 / ( 13 * 3 ) ) * 255 * 1 * 1 ) / 256
    • = 0.33203125
    • ~ 33%
  • A level 70 Regigigas, with 1/234 HP, frozen, catch rate 3, using a Dusk ball.
    • ( ( 1 - 1 * 2 / ( 234 * 3 ) ) * 3 * 4 * 2 ) / 256
    • = 0.093482906
    • ~ 9%

MK 05:51, 20 May 2007 (UTC)

Formula is nowhere near correct

I just tried catching a Lv. 13 Feebas at full health (30 HP). I threw three dusk balls at it (while in the cavern, of course), and they all broke. On the fourth try I was able to catch it. It has a catch rate of 255, so according to this formula I have maybe a 400% chance of catching it at full health. Even going by the catch rate alone, I should have had a 100% chance of catching it. This wasn't an atypical situation either. I tried catching a few more before and after this one, and I generally wasn't able to capture them until I weakened them (I caught maybe one or two without hurting it). Once I threw an ultra ball at one, and it immediately broke. I think the pokemon's HP ratio definitely has a lot more to do with catching it than what this formula suggests.

If there are any sources on that other function that someone submitted in here (I don't know how to reply to comments, sorry :<), then that would be really nice. But I tried that equation on the above-mentioned feebas and got (1-(30*2)/(30*3))*255*4*1)/256 (the pokeball page on here says that the dusk ball is 4x in caverns, and Wikipedia says it's twice as good as an ultraball, so I'm going with 4x), which equals 340/256, or 1.328125. This is still above a 100% catch rate on something that seemed like it was maybe 50%. Even going with the assumption that the dusk ball is only 3x better than a pokeball, I still got 255/256, which awfully close to 100%. So unless the dusk ball didn't have its 3x/4x effect (maybe from me fishing in the cavern instead of walking in the cavern?), I don't think this function is true either.

--Stele007 18:59, 21 May 2007 (UTC)

Were you surfing by any chance? There has to be some way to explain this. Feebas is extremely easy to capture regardless. My friend caught several using Quick balls (4x for the first 5 turns) immediately at the start of battle and none of them missed. If you were, perhaps the Dusk balls did not work because of surfing. I know they do work while fishing... MK 06:25, 22 May 2007 (UTC)