Game data quality
Everything PoGoBattler simulates comes from one committed snapshot of the Pokemon GO Game Master. This page is the readout of that snapshot: what is in it, the checks it has to pass, and the hand-curated corrections applied on top.
Built 2026-10-03 from https://raw.githubusercontent.com/PokeMiners/game_masters/master/latest/latest.json by npm run data:build.
What is in the snapshot
Costume and cosmetic variants are collapsed into the base form because they are identical in battle, and the Game Master's form-less template is dropped whenever a species has real form templates — that stale template is what used to make Genesect and Zacian appear twice.
Evolution lines are read from each form's own evolutionBranch, so they are form-accurate: Galarian Slowpoke points at Galarian Slowbro, and the Alolan forms that merely name a Kanto parent are left unlinked because the game does not let you evolve into them. 2 edges (Stantler → Wyrdeer, Girafarig → Farigiraf) exist only as a child's parentPokemonId with no branch and no cost, and the pages say so rather than printing a candy number nobody sourced.
Movepool cross-check against Pokebattler
Not our own dataset marking its own homework: every form diffed move by move against the table Pokebattler's simulator runs on.
- 557 return (purified only) — across 557 forms
- 416 hidden power, typed — across 26 forms
- 88 unreleased, both placeholders — across 22 forms
- 12 pokebattler placeholder — across 3 forms
Gholdengo, the form wave 6 flagged: four charged moves on both sides, Power Gem included. Every difference anywhere in the dex, with the rule that explains it, is on the movepool cross-check page, together with 17 of their Pokemon pages opened and transcribed by hand on 2026-09-11: 17/17 headers and 8/8 move-table rows now identical, after fixing a headline Max CP that was the level-50 number under a level-51 caption.
Integrity checks
Re-computed from data/*.json on every request; all of them also run in the vitest suite.
| Check | Found | Expected | Result | What it means |
|---|---|---|---|---|
| Duplicate Pokemon ids | 0 | 0 | pass | every form appears exactly once |
| Duplicate species + form | 0 | 0 | pass | no two entries share a Game Master form token |
| Non-slug ids | 0 | 0 | pass | ids are url-safe lower-case slugs |
| Unresolved move references | 0 | 0 | pass | every movepool entry resolves in moves.json |
| Released forms with an empty movepool | 0 | 0 | pass | a released form always has a fast and a charged move |
| Non-positive base stats | 0 | 0 | pass | attack, defense and stamina are all positive |
| Moves missing PvE stats | 0 | 0 | pass | every move can be simulated in raids |
| Forms with no artwork | 0 | 0 | pass | every form has a picture resolved against a live file listing |
| Artwork from an unexpected host | 0 | 0 | pass | pictures come only from the PokeMiners asset dump or PokeAPI |
| Unresolved evolution references | 0 | 0 | pass | every evolution points at a form that exists |
| One-way evolution links | 0 | 0 | pass | every pre-evolution lists the form that names it |
| Evolution cycles | 0 | 0 | pass | walking back up a family always reaches a root |
| Megas inside the candy evolution graph | 0 | 0 | pass | a Mega costs Mega Energy and reverts, so it is not an evolution |
| GO-only Megas missing a release signal | 0 | 0 | pass | all 11 Megas with no mainline counterpart carry shipped client artwork, a Mega Energy cost, per-species Mega Level tuning and their own exclusive move |
| Held-back forms with shipped client artwork | 0 | 0 | pass | the control group: a form the Game Master only gives a placeholder moveset has no in-game icon either |
| Mega-exclusive moves missing combat stats | 0 | 0 | pass | every Mega-exclusive move resolves with both raid and PvP numbers |
| Mainline Mega forms missing from the snapshot | 0 | 0 | pass | all 48 mainline Mega Evolutions and both Primal Reversions are present |
| Trainer Battle numbers that differ from the raw template | 0 | 0 | pass | all 337 moves with a COMBAT_ template were re-derived from that template by a second, independently written pass at build time |
| Hand-written Trainer Battle answers that no longer match | 0 | 0 | pass | 17 moves whose power / energy / turns and stat effect are written down as literals below and re-compared against moves.json on every request |
| Learnable moves missing Trainer Battle numbers | 0 | 0 | pass | the 4 raid-only moves in the snapshot (Crush Claw, Fissure, Horn Drill, Leech Life) are retired moves no released form can learn |
| Fast moves with an illegal turn length | 0 | 0 | pass | every fast move lasts 1 to 5 turns once the Game Master's zero-based count is made one-based |
| Charged moves carrying a turn count | 0 | 0 | pass | a charged move resolves inside a turn, so it has no duration of its own |
| Damaging fast moves that bank no energy | 0 | 0 | pass | a fast move that deals damage always gains energy (Ditto's Transform deals none and is excluded) |
| Learnable charged moves that cost no energy | 0 | 0 | pass | every charged move a released form can learn spends energy |
| Stat changes outside the game's own stage range | 0 | 0 | pass | the Game Master allows -4 to +4 stages and ships the ladder 0.5, 0.5714286, 0.6666667, 0.8, 1, 1.25, 1.5, 1.75, 2 |
| Buff effects with no activation chance | 0 | 0 | pass | each of the 104 moves with a stat change carries a chance between 0 and 1 |
| Signature moves missing Trainer Battle numbers | 0 | 0 | pass | every signature move the checklist names is complete in both halves of the dataset |
Signature moves that the raw Game Master leaves out
Fusion, Crowned, Origin and Drive forms lose their signature move in some Game Master snapshots. data/overrides.json puts each one back, with the source recorded.
| Form | Signature move | Present | Why it needs checking |
|---|---|---|---|
| Moongeist Beam | yes | fusion signature, added by overrides | |
| Sunsteel Strike | yes | fusion signature, added by overrides | |
| Dynamax Cannon | yes | numeric Game Master move id 482 | |
| Freeze Shock | yes | Elite / legacy charged move | |
| Ice Burn | yes | Elite / legacy charged move | |
| Behemoth Blade | yes | Crowned Sword signature | |
| Behemoth Bash | yes | Crowned Shield signature | |
| Techno Blast (Fire) | yes | per-Drive signature, not shared | |
| Techno Blast (Ice) | yes | per-Drive signature, not shared | |
| Techno Blast (Water) | yes | per-Drive signature, not shared | |
| Techno Blast (Electric) | yes | per-Drive signature, not shared | |
| Dragon Ascent | yes | exclusive move the Game Master omits | |
| Roar of Time | yes | Origin-forme exclusive | |
| Spacial Rend | yes | Origin-forme exclusive | |
| Secret Sword | yes | signature charged move |
Forms held back as unreleased (146)
These are excluded from rankings instead of being simulated with fake moves.
A form is held back only when the Game Master gives it nothing but the placeholder moveset (Splash + Struggle) — never on a guess about the release calendar. Pokebattler's own dataset fills the same set with its Pound / Body Slam placeholder, so both sites agree these forms have no real moves yet. Species with genuinely tiny movepools (Magikarp, Cosmog, Cosmoem, Smeargle) stay released.
Are the 11 GO-only Mega forms live?
Megas with no counterpart in the mainline Pokemon games look fabricated at a glance. This is the evidence, recomputed from the snapshot on every request.
Niantic only publishes a form's addressable art bundle when the live client needs to draw it, so a shipped in-game icon is the strongest release signal a datamined snapshot can carry. Every one of these eleven has one — and so does every mainline Mega (50 of 50). None of the 23 placeholder-only forms does. On top of that each GO-only Mega has a Mega Energy cost, its own per-species Mega Level tuning, and a Mega-exclusive charged move with full raid and PvP numbers — strictly more evidence than Mega Charizard X, which carries two of the four signals and has been in the game since 2020.
Two outside sources agree, checked 2026-09-07. Pokebattler's own dataset (fight.pokebattler.com/pokemon) carries all eleven — DRAGONITE_MEGA, FALINKS_MEGA, RAICHU_MEGA_X and the rest — with the same base stats and the same exclusive moves this page lists, and its home page currently reads “Mega + Charged Attacks are live — Real stats, Mega Level scaling, and many Mega Raids are now soloable”, which is the Mega Level tuning and the exclusive moves in the table below, live.
What this still cannot prove: a snapshot is not a running client. The falsifiable claim is the one the table makes — nothing in this Game Master separates these eleven from Megas nobody doubts, and the placeholder-only control group is separated by every signal at once.
| GO-only Mega | In-game icon shipped | Mega Energy | Mega Level templates | Exclusive move | Signals |
|---|---|---|---|---|---|
| Mega Chesnaught | yes | 300 / 60 | 5 | Seed Bomb+ | 4 / 4 |
| Mega Delphox | yes | 300 / 60 | 5 | Mystical Fire+ | 4 / 4 |
| Mega Dragonite | yes | 300 / 60 | 5 | Outrage+ | 4 / 4 |
| Mega Falinks | yes | 300 / 60 | 5 | Brick Break+ | 4 / 4 |
| Mega Greninja | yes | 300 / 60 | 5 | Surf+ | 4 / 4 |
| Mega Malamar | yes | 300 / 60 | 5 | Psybeam+ | 4 / 4 |
| Mega Raichu X | yes | 300 / 60 | 5 | Volt Tackle+ | 4 / 4 |
| Mega Raichu Y | yes | 300 / 60 | 5 | Zap Cannon+ | 4 / 4 |
| Mega Skarmory | yes | 300 / 60 | 5 | Drill Peck+ | 4 / 4 |
| Mega Starmie | yes | 300 / 60 | 5 | Liquidation+ | 4 / 4 |
| Mega Victreebel | yes | 300 / 60 | 5 | Acid Spray+ | 4 / 4 |
| 50 mainline Megas and Primals | 50 / 50 | 100–400 | 0–5 | Mewtwo X / Y only | 2–4 |
| Control: 23 forms held back as unreleased | 0 / 23 | n/a | n/a | none | 0 / 4 |
Control group, in full: Necrozma (Ultra), Magearna, Great Tusk, Scream Tail, Brute Bonnet, Flutter Mane, Slither Wing, Sandy Shocks, Iron Treads, Iron Bundle, Iron Hands, Iron Jugulis, Iron Moth, Iron Thorns, Roaring Moon, Iron Valiant, Walking Wake, Iron Leaves, Gouging Fire, Raging Bolt, Iron Boulder, Iron Crown, Terapagos — every one of them has only Splash and Struggle in the Game Master and no in-game icon, so they are excluded from rankings rather than simulated with fake moves.
Megas only in Pokebattler's data (33)
The Game Master snapshot (PokeMiners, last updated 2026-08-29) has no temp-evolution template for these, so they cannot be audited with the four signals above. Their stats, types and movepools are Pokebattler's, copied as published; the Mega Energy cost is unknown and left blank. 1 of them is out in Pokemon GO (Mega Staraptor, since 2026-09-19); the rest are Legends Z-A Megas with no GO release date yet, so they are held out of rankings, counters and pickers until the game catches up.
- absol-mega-z (unreleased)
- barbaracle-mega (unreleased)
- baxcalibur-mega (unreleased)
- chandelure-mega (unreleased)
- chimecho-mega (unreleased)
- clefable-mega (unreleased)
- zygarde-complete-mega (unreleased)
- crabominable-mega (unreleased)
- darkrai-mega (unreleased)
- dragalge-mega (unreleased)
- drampa-mega (unreleased)
- eelektross-mega (unreleased)
- emboar-mega (unreleased)
- floette-mega (unreleased)
- excadrill-mega (unreleased)
- feraligatr-mega (unreleased)
- froslass-mega (unreleased)
- garchomp-mega-z (unreleased)
- glimmora-mega (unreleased)
- golisopod-mega (unreleased)
- golurk-mega (unreleased)
- hawlucha-mega (unreleased)
- heatran-mega (unreleased)
- lucario-mega-z (unreleased)
- meganium-mega (unreleased)
- meowstic-mega (unreleased)
- pyroar-mega (unreleased)
- scolipede-mega (unreleased)
- scovillain-mega (unreleased)
- scrafty-mega (unreleased)
- staraptor-mega
- tatsugiri-mega (unreleased)
- zeraora-mega (unreleased)
Mega-exclusive moves (13)
The Game Master carries a charged move that only one Mega can use, under VM_MOVE_TEMP_EVOLUTION_<FORM>_V####_POKEMON_<SPECIES>. It ships raid numbers, PvP numbers and the same isLocked flag that marks Behemoth Blade, Behemoth Bash, Dynamax Cannon and Secret Sword — but no name, only the animation key it reuses. No learnset entry points at it either, so scripts/build-data.ts attaches it to the Mega that owns the template. Pokebattler names all thirteen after the same animation (brick_break → Brick Break+) and prints the same power, duration, energy and damage window for every one, so those names are used here.
| Form | Move | Move id |
|---|---|---|
| Mega Chesnaught | Seed Bomb+ | SEED_BOMB_PLUS |
| Mega Delphox | Mystical Fire+ | MYSTICAL_FIRE_PLUS |
| Mega Dragonite | Outrage+ | OUTRAGE_PLUS |
| Mega Falinks | Brick Break+ | BRICK_BREAK_PLUS |
| Mega Greninja | Surf+ | SURF_PLUS |
| Mega Malamar | Psybeam+ | PSYBEAM_PLUS |
| Mega Mewtwo X | Dynamic Punch+ | DYNAMIC_PUNCH_PLUS |
| Mega Mewtwo Y | Future Sight+ | FUTURE_SIGHT_PLUS |
| Mega Raichu X | Volt Tackle+ | VOLT_TACKLE_PLUS |
| Mega Raichu Y | Zap Cannon+ | ZAP_CANNON_PLUS |
| Mega Skarmory | Drill Peck+ | DRILL_PECK_PLUS |
| Mega Starmie | Liquidation+ | LIQUIDATION_PLUS |
| Mega Victreebel | Acid Spray+ | ACID_SPRAY_PLUS |
Trainer Battle numbers
Every move carries two unrelated sets of numbers. The raid set comes from V####_MOVE_*; this one comes from a separate COMBAT_V####_MOVE_* template with its own power, its own energy, a turn count instead of a duration, and a stat-change block with no raid equivalent.
npm run data:build makes a second pass over the raw Game Master, written independently of the pass that builds moves.json, and re-derives every move's power, energy, turn count and stat-change block from its own COMBAT_ template. That sweep covered 337 of 337 templates — including the ones with a numeric id instead of a name (Dynamax Cannon is uniqueId 482) and the thirteen Mega-exclusive moves that have no id at all — and found 0 disagreements. So nothing in the override, movepool-supplement or Mega-exclusive machinery downstream is quietly rewriting a Trainer Battle number.
Seventeen answers written down by hand, re-checked on this request
The build-time sweep above would not catch a bug in the sweep itself. These expected values were transcribed from the raw COMBAT_V####_MOVE_* templates by hand and are stored as literals in src/lib/data-fidelity/pokedex.ts; the page reads the same moves back out of moves.json and compares the strings. 17 / 17 match
| Move | Kind | Expected | In the snapshot | Stat change | Result |
|---|---|---|---|---|---|
| Counter | fast | 8 / 6 / 2t | 8 / 6 / 2t | - | match |
| Mud Shot | fast | 3 / 9 / 2t | 3 / 9 / 2t | - | match |
| Shadow Claw | fast | 6 / 8 / 2t | 6 / 8 / 2t | - | match |
| Psycho Cut | fast | 4 / 9 / 2t | 4 / 9 / 2t | - | match |
| Dragon Breath | fast | 3 / 4 / 1t | 3 / 4 / 1t | - | match |
| Lock-On | fast | 1 / 5 / 1t | 1 / 5 / 1t | - | match |
| Moongeist Beam | charged | 135 / 65 | 135 / 65 | - | match |
| Sunsteel Strike | charged | 135 / 65 | 135 / 65 | - | match |
| Behemoth Blade | charged | 100 / 55 | 100 / 55 | - | match |
| Behemoth Bash | charged | 80 / 45 | 80 / 45 | - | match |
| Dynamax Cannon | charged | 80 / 45 | 80 / 45 | - | match |
| Techno Blast (Fire) | charged | 120 / 55 | 120 / 55 | - | match |
| Power-Up Punch | charged | 20 / 35 | 20 / 35 | Raises its own Attack by 1 stage | match |
| Wild Charge | charged | 100 / 45 | 100 / 45 | Lowers its own Defense by 2 stages | match |
| Icy Wind | charged | 60 / 45 | 60 / 45 | Lowers the opponent's Attack by 1 stage | match |
| Acid Spray | charged | 20 / 45 | 20 / 45 | Lowers the opponent's Defense by 2 stages | match |
| Aeroblast | charged | 170 / 75 | 170 / 75 | Raises its own Attack by 2 stages (12.5% chance) | match |
Stat changes, by activation chance
104 moves raise or lower a stat, on either side of the battle. Each stage moves the stat along the ladder the Game Master ships — 0.50, 0.57, 0.67, 0.80, 1.00, 1.25, 1.50, 1.75, 2.00 for stages -4 to +4 — and every one carries an activation chance.
| Chance | Moves | For example |
|---|---|---|
| 100% | 62 | Acid Spray, Acid Spray+, Aqua Step, Aura Wheel (Dark) |
| 50% | 10 | Bulldoze, Leaf Tornado, Luster Purge, Mist Ball |
| 40% | 1 | Seed Flare |
| 33% | 2 | Spirit Shackle, Zap Cannon |
| 30% | 10 | Air Cutter, Bug Buzz, Freeze Shock, Ice Burn |
| 20% | 3 | Crunch, Shadow Bone, Signal Beam |
| 12.5% | 7 | Aeroblast, Aeroblast+, Aeroblast++, Crabhammer |
| 10% | 9 | Ancient Power, Earth Power, Energy Ball, High Jump Kick |
Two oddities in the source, left as the game ships them
- 4 moves have no Trainer Battle template at all — CRUSH_CLAW, FISSURE, HORN_DRILL, LEECH_LIFE. All four are retired; the integrity list above checks that no released form can learn any of them, which is what makes the gap harmless rather than a hole.
- Secret Sword ships an empty stat-change block ("buffs": {} with nothing in it). It is kept verbatim rather than deleted or turned into a phantom effect, and reads as "no stat change" everywhere on the site.
Spot check
Fifteen forms sampled evenly across the dex, so anyone can compare them with Pokebattler or GamePress in a minute.
| # | Form | Types | Atk / Def / Sta | Max CP | Moves |
|---|---|---|---|---|---|
| 0006 | fire / dragon | 273 / 213 / 186 | 4,353 | 5f / 6c | |
| 0068 | fighting | 234 / 159 / 207 | 3,455 | 3f / 8c | |
| 0128 | fighting / fire | 210 / 193 / 181 | 3,207 | 3f / 4c | |
| 0198 | dark / flying | 175 / 87 / 155 | 1,766 | 2f / 3c | |
| 0267 | bug / flying | 189 / 98 / 155 | 1,996 | 2f / 3c | |
| 0342 | water / dark | 224 / 142 / 160 | 2,797 | 2f / 6c | |
| 0407 | grass / poison | 243 / 185 / 155 | 3,359 | 5f / 6c | |
| 0479 | electric / flying | 204 / 219 / 137 | 2,916 | 3f / 3c | |
| 0532 | fighting | 134 / 87 / 181 | 1,487 | 2f / 3c | |
| 0605 | psychic | 148 / 100 / 146 | 1,566 | 2f / 3c | |
| 0670 | fairy | 309 / 264 / 179 | 5,322 | 2f / 3c | |
| 0734 | normal | 122 / 56 / 134 | 994 | 2f / 3c | |
| 0792 | psychic / ghost | 255 / 191 / 264 | 4,570 | 3f / 4c | |
| 0871 | electric | 176 / 161 / 134 | 2,183 | 3f / 3c | |
| 0945 | poison / normal | 199 / 149 / 160 | 2,559 | 3f / 4c |
Artwork coverage
Every form carries a picture. The URL is resolved at build time against a live listing of the files that exist, so a page never renders a broken image.
| 1,155 | In-game icon for this exact form |
| 1 | In-game icon for the species (form has none) |
| 94 | Official artwork for this exact form |
| 19 | Official artwork for the species |
| 0 | No picture |
First choice is Niantic's own in-game icon from the PokeMiners asset dump — the same picture Pokebattler renders. Species the dump has not published yet fall back to PokeAPI official artwork, and the detail page says which one it is showing.