1. Protean changes more than the power of one attack
Greninja's Protean and Cinderace's Libero change the user's type to match a move, with a once-per-entry restriction. After becoming Ice type, a Pokémon must defend as Ice type too. It cannot keep the old Water/Dark resistances while enjoying a new attack bonus. The change persists until the Pokémon leaves the field; simply selecting another move does not restart it.
In the inspected fan simulator, an attack can receive a matching-type bonus, yet the saved battle slot has no current-type field or record of whether the ability already activated. The damage calculation still receives the species' original types. The attack and defense calculations may therefore inhabit two different realities. This is a confirmed gap in the code model, not a claim that every live screen has been reproduced.
2. The bugs hiding in ordinary clicks
Replacing a Pokémon in a selected slot keeps the previous slot's HP, status and sometimes item, while clearing the fainted flag. Replace a burned Pokémon at 25% HP and the newcomer may inherit the same burn and 25% HP. An impossible zero-HP-but-alive state is also possible.
The check for Toxic Spikes looks for the shorter word Spikes first. Because Toxic Spikes contains Spikes, the number of ordinary Spike layers may decide whether the toxic traps appear complete. Shell Smash records the Attack, special attack and Speed boosts but omits its Defense and special defense drops. One battle-message parser even converts the string 0% to 100% because it treats zero like failed input. Whether that last string is delivered during ordinary play still requires testing.
3. A species sheet is not the current battlefield
Other paths infer a Mega form from its stone before actual evolution, restore a template item when the player specified none, or recreate weather from an active Pokémon's ability after weather was set to none. Sticky Web is treated in some estimates like a continuing speed penalty rather than a change applied when a grounded Pokémon enters. Disguise cannot be tracked simply by asking whether HP is full.
Different facts last for different durations: a used item, a changed type, an altered ability, a stat stage, a temporary barrier, weather and a fainted teammate cannot all be represented by original species data.
4. Fix the record before making the screen more complicated
Keep original and current types separately, original and current abilities, whether an ability is suppressed, whether Protean has fired during this entry, actual form, item state (unknown, none, held, consumed), stat changes, and remaining field turns. Burn and Substitute can coexist, so they should not compete for one status slot.
The everyday interface can stay simple. Put rare conditions in an expandable panel. When evaluating several candidate moves, give each one a copy of the current battle state. Otherwise an Ice-type change calculated for one candidate can accidentally carry over into the next.
5. What could make the page heavy?
One recommendation may calculate several attacks, possible knockouts, opposing replies and move order repeatedly. Candidate-set creation can add entries and reset derived data. In the comparison worker, a configured maximum of 60 selections against 60 selections, with 50 games per pairing, allows up to 180,000 games for one team pairing. That is a theoretical upper bound, not a statement about what the default page continuously runs.
Compute each matchup once per state and reuse the result across panels. Refresh only values affected by an edit. Limit and cancel large runs; keep them separate from interactive input. Measure list rendering, repeated storage writes, and stale jobs overwriting the latest answer. No production-device timing benchmark was performed for this article.
6. What does a displayed win rate really mean?
The automated player uses programmed choices, including randomness for attacks and supporting moves. It is not a master player looking ahead for the best opponent response. An unfinished game can also enter the draw tally. A simulated win rate, an exact damage range and a human tournament win rate must have different labels.
For multiple-strike moves, the display combines independent damage outcomes per strike, while another recommendation path pairs damage rolls by matching their positions. Minimum and maximum damage can agree even when knockout probabilities do not. Decimal places cannot rescue the wrong method.
7. Test interactions, not merely a list of names
Coverage must include changing types and defensive matchups; copied or suppressed abilities; Mega timing; entry-only effects; priority; weather-sensitive moves; variable-power and multi-hit attacks; shields, substitutes and Focus Sash; item removal and consumption; and switching out and back. Mark unavailable features as outside the current rules instead of pretending they are implemented.
Run complete sequences: original state, chosen action, updated state, damage received, switch, and re-entry. Also try empty input, zero, negative numbers, impossible moves, duplicate items and rapid edits while an older calculation is still running.
8. The repair order
First stop HP and status from jumping into a newly selected Pokémon. Next represent current type, ability, form, item and stat changes. Then fix Toxic Spikes, Shell Smash, move priority and multi-hit probabilities. Finally eliminate repeated work and measure real devices. Compare the result with the official rule set instead of assuming a similarly named battle format is identical.
These findings describe the inspected code as of October 9, 2026, plus items needing further tests—not a completed live-browser audit. Before asking which team is strongest, make sure all calculations are happening in the same battle.
References (6)
- Simulator interface and states: https://github.com/akatsuki8754-source/mendoi-apps/blob/main/src/scripts/pokemonChampionsLab.ts
- Damage calculations: https://github.com/akatsuki8754-source/mendoi-apps/blob/main/src/lib/pokemonChampionsMechanics.ts
- Multiple hits and knockout rates: https://github.com/akatsuki8754-source/mendoi-apps/blob/main/src/lib/pokemonChampionsDamageView.ts
- Batch battles: https://github.com/akatsuki8754-source/mendoi-apps/blob/main/src/workers/pokemonChampionsSimulation.worker.ts
- Official rules: https://news.pokemon-home.com/ja/page/816.html
- Reference simulator: https://github.com/smogon/pokemon-showdown/tree/master/data/mods/champions

