pokemons.io

Transparency · Last updated May 2026

How our calculators work.

Every formula, every data source, every validation step. We show our work so you can trust the numbers.

Why this page exists

Most Pokémon calculator sites give you numbers without showing where the formulas come from. That's fine until you get an answer that doesn't match in-game results — at which point you have no way to debug whether the calc is wrong or your inputs are. We document the math openly so you can verify everything yourself.

Damage formula source

Our damage calculator implements the official Generation 9 damage formula as documented in Bulbapedia and validated against Smogon's open-source damage-calc library (the same engine used by Pokémon Showdown). The core equation:

damage = (((2 × level / 5 + 2) × power × A / D) / 50 + 2)
         × targets × weather × crit × random × STAB × type × burn × other

Where:

  • level = attacker's level (1-100)
  • power = move's base power
  • A = attacker's offensive stat after boosts (Atk for Physical, SpA for Special, with exceptions for Body Press, Foul Play, Psyshock)
  • D = defender's defensive stat after boosts
  • targets = 0.75 if move hits multiple opponents in doubles, else 1.0
  • weather = 1.5 for STAB-with-weather (Fire in Sun, Water in Rain), 0.5 for opposite, 1.0 otherwise
  • crit = 1.5 on critical hit, 1.0 otherwise
  • random = uniform 0.85 to 1.00 in 16 steps (we show min, max, and KO chance across all 16 rolls)
  • STAB = 1.5 if move type matches attacker type, 2.0 with matching Tera
  • type = type chart matchup multiplier (0×, 0.25×, 0.5×, 1×, 2×, 4×)
  • burn = 0.5 if attacker burned + physical move (unless Guts ability)
  • other = stacked modifiers from items (Life Orb 1.3×, Choice Band 1.5×, etc.), abilities, screens

Stat calculation formula

Pokémon's actual in-game stats are computed from base stats + IVs + EVs + level + nature. HP uses a different formula than other stats:

stat = floor((floor((2 × base + IV + floor(EV / 4)) × level / 100) + 5) × nature)
HP   = floor((2 × base + IV + floor(EV / 4)) × level / 100) + level + 10

Where nature is 1.1 for the "+" stat, 0.9 for the "−" stat, 1.0 otherwise. HP is never modified by nature.

Type chart source

Our type chart uses the Gen 6+ (Fairy era) matchups. The full 18×18 matrix is hardcoded into our types.ts data file. We validated each cell against Bulbapedia's type chart reference page.

Pokémon dataset

Our 1,025-entry Pokédex combines two sources:

  1. The "complete-pokemon-dataset" (community-curated, available on Kaggle) for Gens 1-6 base stats, types, and generation labels.
  2. Gen 9 stats CSV from the same source, extended to include Paldean dex entries (Annihilape, Gholdengo, Tinkaton, etc.).
  3. Hand-curated abilities + flavor text for the top ~100 competitively-relevant Pokémon (Charizard, Garchomp, etc.).

Stats match the in-game values from Pokémon Scarlet and Violet (current as of The Indigo Disk DLC). Pokémon introduced after this writing — if any — won't be in our dataset until we update.

Move dataset

456 moves with full data (base power, accuracy, PP, type, category, secondary effects, priority, critical-hit ratio) sourced from a Gen 9 Paldean dex CSV. Each move's learnset (which Pokémon can use it) is captured at the same time.

Ability dataset

112 abilities with descriptions, in-depth effects, and holders sourced from Serebii-derived CSVs and cross-validated against Bulbapedia entries.

Pokémon GO calculations

Our Pokémon GO tools use Niantic's published CPM (Combat Power Multiplier) table — a level-dependent constant that scales all three stats. The full CPM table from level 1 (0.094) to level 51 (0.86530 with Best Buddy boost) is hardcoded in our GO calculators. The CP formula:

CP = floor((Atk × √Def × √HP × CPM²) / 10)

where Atk/Def/HP are derived from base stats + IVs (0-15 each) × CPM.

Sprite imagery

Our 1,025 Pokémon sprites are sourced from a public Kaggle dataset of Pokémon images. They are used for visual reference only, with proper attribution-style trademark disclaimers throughout the site (see About). Sprites are optimized to WebP at 240×240 (hero) and 96×96 (thumbnail) for performance.

What we DON'T do

  • No AI-generated build pages. The 25 competitive build write-ups are hand-written by competitive players (Smogon OU + VGC level).
  • No scraped Smogon analyses. We reference Smogon's tier data but every build is original prose.
  • No copied move descriptions. Our move pages use the same factual data Smogon and Bulbapedia use (base power, accuracy) but the prose framing is ours.
  • No mock outputs. Every calc runs the actual formula in your browser — no simulated answers.

Known limitations

  • Damage calculator: covers ~95% of common matchups. Rare interactions (Triple Axel progressive damage, Beat Up per-ally rolls, Pollen Puff heal-vs-damage mode, Misty Explosion grounded targets) are not modeled — for those, use Pokémon Showdown's damage calculator directly.
  • Move learnsets: only available for the 103 Paldean dex Pokémon in our Gen 9 source data. Non-Paldean Pokémon (Charizard, Garchomp, etc.) have factual move data on their move pages but their dex pages show no learnset.
  • Abilities: 112 abilities documented (those held by Paldean dex Pokémon). Some legacy/Hidden abilities for older Pokémon are not in our database yet.
  • Generation coverage: stats accurate as of Gen 9 + Indigo Disk DLC. Older-gen-specific mechanics (Gen 4 critical hit math, Gen 5 Hidden Power) are not separately modeled.

Found an error?

If you spot a number that doesn't match in-game results or Smogon's calc, email thisdudestartedsomething@gmail.com with the matchup details and we'll investigate. Bug fixes are committed within a week.

Updates to this page

  • May 2026: Initial publication of methodology page.