Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/tldrwtf/pokedo/llms.txt

Use this file to discover all available pages before exploring further.

PokeDo battles are asynchronous and turn-based. You and your opponent each submit your action independently — the server holds both actions and resolves the turn once both sides have responded. This means you don’t need to be online at the same time. All outcomes (damage, status effects, critical hits, faints) are calculated server-side by the BattleEngine, so neither player can influence the result.

Full battle flow

1

Register an account

Before challenging anyone, create an account on the running PokeDo server.
pokedo battle register -u myname -p mypass
2

Send a challenge

Challenge another registered trainer. The command returns a battle ID — share it with your opponent so they can accept.
pokedo battle challenge <opponent> -u myname -p mypass
The default format is singles_3v3. Use --format to change it:
pokedo battle challenge <opponent> --format singles_1v1 -u myname -p mypass
3

Accept the challenge (as the opponent)

The challenged player accepts using the battle ID.
pokedo battle accept <battle-id> -u opponent -p pass
After accepting, the battle moves to the team selection phase.
4

Submit your team

Both players submit their current active team. The server snapshots each Pokemon’s stats, moves, and nature at this moment — local roster changes after this point have no effect on the battle.
pokedo battle team <battle-id> -u myname -p mypass
The battle becomes active once both teams are submitted.
5

Attack with a move

Submit an attack using a move index (0–3, corresponding to your active Pokemon’s move slots).
pokedo battle move <battle-id> -m 0 -u myname -p mypass
The server holds your action until your opponent also submits. When both actions are in, the turn resolves and events are returned (damage, effectiveness, crits, status changes, faints).
6

Switch your active Pokemon

Switch to a different Pokemon using its team slot index (0-indexed).
pokedo battle switch <battle-id> 1 -u myname -p mypass
Switches are processed before attacks. You cannot switch to a fainted Pokemon.
7

Forfeit

Concede the battle. The opponent is awarded the win and ELO is updated immediately.
pokedo battle forfeit <battle-id> -u myname -p mypass
8

Check battle status

View the current state of any active or completed battle. Shows your team’s full HP and moves, your opponent’s active Pokemon, and the last turn’s events.
pokedo battle status <battle-id> -u myname -p mypass
Your opponent’s bench Pokemon have their HP hidden — only the active Pokemon’s HP is visible.
9

View battle history

List your completed battles with results, opponents, formats, and turn counts.
pokedo battle history -u myname -p mypass
Use --limit (short: -n) to control how many battles are shown (default 10).

Battle formats

FormatTeam sizeDescription
singles_1v11Single Pokemon duel — first to faint loses
singles_3v33Three Pokemon; one is active at a time
singles_6v66Full team; one is active at a time
For singles_3v3 and singles_6v6, when your active Pokemon faints, the server automatically switches to the next non-fainted Pokemon in your roster. You can also manually switch on your turn.

Snapshot teams

When you submit your team with pokedo battle team, each Pokemon is snapshotted with its current stats (including IVs, EVs, nature, and level), its moves, and its current HP. Changes to your local roster — adding Pokemon, evolving them, changing the active team — do not affect any battle already in progress. This ensures both players compete on a fixed footing from team submission onward.

Damage formula

PokeDo uses the Generation V+ damage formula:
damage = ((2 * level / 5 + 2) * power * (atk / def) / 50 + 2)
         * STAB * type_effectiveness * critical * random(0.85–1.0)
  • STAB: 1.5× if the move’s type matches the user’s type
  • Type effectiveness: 0×, 0.25×, 0.5×, 1×, 2×, 4× — dual types multiply (e.g., a Fire move against Grass/Steel hits for 4×)
  • Critical hit: 1.5× damage; base chance 6.25%
  • Burn: halves physical attack damage for the burned Pokemon
Special moves use the attacker’s Special Attack against the defender’s Special Defense. Physical moves use Attack against Defense.

Status effects

StatusEffect
BurnDeals 1/16 max HP at end of each turn; halves physical attack
PoisonDeals 1/8 max HP at end of each turn
Badly poisonedEscalating damage: 1/16 max HP × turns poisoned, per turn
Paralysis25% chance of being unable to act; halves Speed
SleepPokemon cannot act; wakes up after 1–3 turns
FreezePokemon cannot act; 20% chance to thaw each turn
A Pokemon can only have one non-volatile status at a time. Status moves that target an already-afflicted Pokemon fail.

Move mechanics

  • Priority moves: Resolved before normal-priority moves regardless of Speed (e.g., Quick Attack at priority +1)
  • Speed ties: Broken randomly when priority and Speed are equal
  • PP: Each move has limited PP; when PP runs out, the Pokemon uses Struggle (50 power, 25% recoil, typeless)
  • Drain moves: A portion of damage dealt is restored to the attacker’s HP
  • Recoil moves: The attacker takes a fraction of the damage dealt as recoil damage
  • Protect: Blocks all incoming damage for the turn it is used
  • Secondary effects: Some damaging moves have a percentage chance to inflict a status condition

Natures

All 25 natures are supported. Each nature (except the five neutral natures) increases one stat by 10% and decreases another by 10%. Natures are assigned when a Pokemon is caught and are locked into the battle snapshot at team submission time. Nature modifiers apply to Attack, Defense, Special Attack, Special Defense, and Speed — not HP.

Build docs developers (and LLMs) love