None
Roto Catch (x1.5)
Capture Power Lv 1 (x1.3)
Capture Power Lv 2 (x1.5)
Capture Power Lv 3 / S (x2.0)
0%
function calculateCatchRate() {
// 1. Get Input Values
var maxHpInput = document.getElementById("maxHp").value;
var currHpInput = document.getElementById("currHp").value;
var speciesRateInput = document.getElementById("speciesRate").value;
var ballMult = parseFloat(document.getElementById("ballSelect").value);
var statusMult = parseFloat(document.getElementById("statusSelect").value);
var rotoMult = parseFloat(document.getElementById("rotoSelect").value);
// 2. Validation
if (!maxHpInput || !currHpInput || !speciesRateInput) {
alert("Please fill in all number fields (HP and Species Rate).");
return;
}
var maxHp = parseFloat(maxHpInput);
var currHp = parseFloat(currHpInput);
var speciesRate = parseFloat(speciesRateInput);
if (currHp > maxHp) {
alert("Current HP cannot be higher than Max HP.");
return;
}
// Master Ball Check
if (ballMult === 255) {
document.getElementById("finalProb").innerText = "100%";
document.getElementById("shakeChecks").innerText = "Master Ball guarantees capture.";
document.getElementById("resultBox").style.display = "block";
return;
}
// 3. Gen 7 Catch Formula Logic
// Formula: A = ( (3 * MaxHP – 2 * CurrHP) * (Rate * Ball * Status * Roto) ) / (3 * MaxHP)
// Calculate the HP Factor
var hpFactor = (3 * maxHp – 2 * currHp) / (3 * maxHp);
// Calculate Modified Catch Rate (A)
// Note: In actual game code this involves flooring at steps, but float is accurate enough for probability display
var modifiedRate = speciesRate * ballMult * statusMult * rotoMult * hpFactor;
var catchProb = 0;
var shakeProb = 0;
// 4. Determine Probability
if (modifiedRate >= 255) {
catchProb = 100;
shakeProb = 100;
} else {
// Calculate Shake Probability (b)
// b = 65536 * (modifiedRate / 255) ^ 0.25
var b = 65536 * Math.pow((modifiedRate / 255), 0.25);
// Probability that a single shake check passes (b / 65536)
var pShake = b / 65536;
// Ensure pShake doesn't exceed 1 (though logic above covers >= 255)
if (pShake > 1) pShake = 1;
// Probability of 4 successful shakes = pShake ^ 4
catchProb = Math.pow(pShake, 4) * 100;
shakeProb = pShake * 100;
}
// 5. Output Results
var resultElement = document.getElementById("resultBox");
var finalProbElement = document.getElementById("finalProb");
var subTextElement = document.getElementById("shakeChecks");
finalProbElement.innerText = catchProb.toFixed(2) + "%";
subTextElement.innerText = "Chance per ball throw. (Shake success: " + shakeProb.toFixed(1) + "%)";
resultElement.style.display = "block";
}
Understanding the Gen 7 Catch Rate Mechanics
Catching Pokémon in Generation 7 games (Pokémon Sun, Moon, Ultra Sun, and Ultra Moon) relies on a mathematical formula that determines whether a thrown ball will successfully contain a wild Pokémon. Unlike simpler RPG luck mechanics, the catch rate is influenced by health, status conditions, the type of ball used, and specific Rotom Powers.
The Catch Formula Explained
The core of the calculation determines a "Modified Catch Rate." If this number exceeds 255, the capture is guaranteed. If not, the game performs four "shake checks." The Pokémon is caught only if the ball passes all four checks. The formula takes the following variables into account:
Species Rate: Every Pokémon has a base catch rate ranging from 3 (hardest, e.g., Beldum, Legendaries) to 255 (easiest, e.g., Rattata, Caterpie).
HP Factor: Lowering a Pokémon's HP significantly increases your odds. A Pokémon at 1 HP is roughly 3x easier to catch than one at full health.
Ball Multiplier: Different balls apply multipliers. An Ultra Ball provides a x2.0 modifier, while a Quick Ball used on the first turn provides a massive x5.0 modifier.
Status Modifiers: Status conditions are critical. Sleep and Freeze provide the highest bonus (x2.5), while Paralysis, Poison, and Burn provide a smaller bonus (x1.5).
Generation 7 Specifics: Rotom Catch
Unique to Gen 7 is the Rotom Dex. Using the "Roto Catch" power from your inventory applies an additional multiplier to the capture formula (typically x1.5), stacking with your ball and status bonuses. This is crucial for catching Ultra Beasts or Legendaries like Necrozma or Tapu Koko.
Tips for Maximizing Capture Odds
False Swipe is Essential: Use the move False Swipe (or Hold Back) to safely lower the target's HP to exactly 1 without knocking it out.
Prioritize Sleep: Use moves like Spore, Hypnosis, or Sleep Powder. The x2.5 multiplier is significantly better than the x1.5 from Paralysis.
Turn 1 Quick Ball: For non-Legendary encounters, throwing a Quick Ball immediately offers a higher catch rate (x5.0) than a Dusk Ball at night (x3.0) or an Ultra Ball (x2.0).
Beast Balls: Only use Beast Balls on Ultra Beasts. Against regular Pokémon, the Beast Ball has a terrible x0.1 modifier, making capture nearly impossible.