Skip to main content

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.

A wild battle running against the server

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:

FieldWhat the client does with it
PlayerMoveName, EnemyMoveNameNames the moves that actually resolved
PlayerDamageDealt, EnemyDamageDealtThe damage that landed
PlayerHpRemaining, EnemyHpRemainingThe HP the server says is left
PlayerFainted, EnemyFaintedWho went down
BattleEndedTerminal: win, loss, capture or flight
FleeAttempted, FleeSucceeded, FleeChance, RunAwayAttemptsThe full flight story
EnemySubstituteMonsterId, EnemySubstituteSpeciesIdWho came in when a trainer's monster fell
TurnNumberThe 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:

FieldMeaning
RefusedThe server declined to resolve this turn
RefusalReasonWhy, in words
RefusalFactorThe 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.

Never fall back to a local fight

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.