Pokemon Catch Rate Calculator Gen 1

Pokémon Gen 1 Catch Rate Calculator

Common (Pidgey, Rattata, Caterpie) – 255 Semi-Common (Pikachu, Jigglypuff) – 190 Uncommon (Ekans, Sandshrew) – 120 Rare (Vulpix, Meowth) – 90 Very Rare (Dratini, Eevee) – 75 Evolution Stage 1 (Pidgeotto) – 60 Starters & Safaris (Bulbasaur, Scyther) – 45 Evolved Forms (Pidgeot, Arcanine) – 30 Ultra Rare (Snorlax, Dragonair) – 25 Legendaries (Mewtwo, Articuno, Zapdos, Moltres) – 3
Poké Ball Great Ball Ultra Ball Master Ball
None Asleep / Frozen Paralyzed / Burned / Poisoned

Catch Probability

0%


Understanding Generation 1 Catch Mechanics

In the original Pokémon Red, Blue, and Yellow games (Gen 1), the catch mechanics were significantly different—and more "glitchy"—than in modern games. The system relies on a series of random checks (0-255) against the Pokémon's base catch rate, its current health, and its status condition.

The Three Checks of Gen 1

Unlike later games that use a single complex formula, Gen 1 processes the catch in specific steps:

  1. Status Check: If the Pokémon is Asleep or Frozen, there is roughly a 10% (25/256) chance of an instant catch. If it is Paralyzed, Burned, or Poisoned, that chance is roughly 5% (12/256).
  2. Ball/Species Check: If the status check fails, the game checks if a random number (0-255) is less than the Pokémon's base catch rate. If you use a Great Ball, this check is slightly easier.
  3. HP Check: Finally, the game factors in the current HP. Due to an infamous oversight in the Gen 1 code, using an Ultra Ball is actually less effective than a Great Ball in very specific low-HP scenarios, though generally, the Ultra Ball remains superior for high-level targets.

Catch Rates for Kanto Legendaries

Legendary Pokémon like Mewtwo, Articuno, Zapdos, and Moltres have a base catch rate of 3. This is the lowest possible value, making them extremely difficult to catch without a Master Ball.

Pokemon Base Catch Rate
Mewtwo / Birds 3
Snorlax 25
Starter Pokémon 45
Abra 200
Magikarp / Pidgey 255

Pro Tips for Catching in Red/Blue/Yellow

  • Always use Sleep: Sleep is the most powerful modifier in Gen 1. It provides a flat chance to bypass all other HP requirements.
  • False Swipe doesn't exist: You must carefully lower HP without knocking the target out. Aim for roughly 10-20% HP.
  • The Great Ball Glitch: In some instances, because the Great Ball uses a divisor of 8 and the Ultra Ball uses 12 in the HP calculation, the Great Ball can actually be more effective for specific mid-range HP targets.
function calculateCatchRate() { var speciesRate = parseInt(document.getElementById('speciesRate').value); var ballType = document.getElementById('ballType').value; var hpPercent = parseFloat(document.getElementById('hpPercent').value); var statusVal = parseInt(document.getElementById('statusEffect').value); // Validate HP if (isNaN(hpPercent) || hpPercent 100) hpPercent = 100; var finalProb = 0; if (ballType === 'master') { finalProb = 100; } else { // Gen 1 Logic Simulation // P(Status) = statusVal / 256 var pStatus = statusVal / 256; // Ball Factor var ballModifier = speciesRate; if (ballType === 'great') { ballModifier = Math.min(255, speciesRate + 1); } var pBall = ballModifier / 256; // HP Factor // In Gen 1: HPFactor = (MaxHP * 255) / (BallValue * (CurrHP / 4)) // BallValue: Great = 8, Others = 12 // We simulate with % for the web tool var ballDivisor = (ballType === 'great') ? 8 : 12; // Simulating the Gen 1 HP calc: (100 * 255) / (Divisor * (currHP_percent / 4)) // currHP_percent/4 cannot be 0 in the code logic (defaults to 1) var currHPDiv4 = Math.max(1, Math.floor(hpPercent / 4)); var hpFactor = Math.floor((100 * 255) / (ballDivisor * currHPDiv4)); if (hpFactor > 255) hpFactor = 255; var pHP = (hpFactor + 1) / 256; // Probability = P(Status) + (1 – P(Status)) * P(Ball) * P(HP) finalProb = (pStatus + (1 – pStatus) * pBall * pHP) * 100; } // Cap at 100 if (finalProb > 100) finalProb = 100; if (finalProb = 100) { ballEstimate.innerHTML = "Guaranteed catch!"; } else { var avgBalls = Math.ceil(100 / finalProb); ballEstimate.innerHTML = "On average, it will take " + avgBalls + " ball(s) to succeed."; } // Smooth scroll to result resultDiv.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }

Leave a Comment