Battle Authority
In an online world the server resolves the turn and the client draws it.
That sentence is easy to write and hard to mean. Most "authoritative" battle systems are authoritative about the outcome and vague about everything on the way there — and the way there is what the player actually watches. If the server decides the damage but the client decides whether the hit was super effective, then two players watching the same battle can see different fights.
So the server does not send a result. It sends what happened, fact by fact, and the client's job is to animate exactly that.

Nothing in that screenshot is drawn from a local decision. The wild Caterpie was
chosen by the server, its level came with it, and the four actions on the right are
the only ones the client is allowed to offer — each one becomes a request, not an
outcome. The badge at the bottom (32ms · Server: US-East) and the channel strip at
the top are the same session: this is one connection, not a battle bolted onto a
lobby.
What travels back from a turn
Every submitted action comes back as one turn record. The interesting part is how much of it is narration rather than numbers:
| Field | What the client does with it |
|---|---|
PlayerMoveName, EnemyMoveName | Names the moves that actually resolved |
PlayerDamageDealt, EnemyDamageDealt | The damage that landed |
PlayerHpRemaining, EnemyHpRemaining | The HP the server says is left |
PlayerFainted, EnemyFainted | Who went down |
BattleEnded | Terminal: win, loss, capture or flight |
FleeAttempted, FleeSucceeded, FleeChance, RunAwayAttempts | The full flight story |
EnemySubstituteMonsterId, EnemySubstituteSpeciesId | Who came in when a trainer's monster fell |
TurnNumber | The server's turn counter, not the client's |
Note the HP fields. The client does not subtract damage from the HP it thinks it had — it takes the number the server states. Those are not the same thing, and only one of them survives a disagreement.
Note also the substitute fields. When a trainer's monster faints, the server says which monster came in, by id and by species. An earlier version only said that a substitution happened, and "someone came in" is not enough to draw it.
Refusal is a first-class answer
Three fields exist for the case that matters most:
| Field | Meaning |
|---|---|
Refused | The server declined to resolve this turn |
RefusalReason | Why, in words |
RefusalFactor | The specific thing it could not model |
A server that meets a factor it does not model — an effect, an item interaction, a rule from a build it does not know — refuses the turn and names what stopped it. It does not resolve it neutrally.
That is the whole design, and the alternative is worse than it looks. A server that quietly resolves the unknown factor as "no effect" produces a battle that runs to completion and is wrong in a way nobody can see. The player watches a move do nothing and concludes the move is bad. Refusing is loud; guessing is silent, and silence is the expensive failure.
A refusal is shown to the player. It is never translated into "resolve this battle on the client instead". The moment one turn resolves locally, the server's record and the player's game have diverged, and nothing downstream can tell which one is real.
What this buys you
Because the turn is resolved server-side, a set of exploits simply have no surface:
- Wild encounters are generated by the server — species, level, IVs and shininess. A client cannot roll until it likes the result.
- Captures are verified server-side. The capture roll is not the client's.
- Damage variance, critical hits and stat stages are the server's rolls.
- PP, Struggle and item use are charged by the server, so a client cannot spend what it does not have.
The honest limit
Server authority is scoped to online mode. Core's offline battle path is untouched — the same engine plays a single-player game exactly as it did before, with no server anywhere. That boundary is deliberate: the online layer is an opt-in module, and a buyer who never enables it never pays for any of this.
See also: PvP Battles for matchmaking, spectating and raids, and World Options for the rules the server applies to trainer levels.