#Matchmaking & rating
There is no queue to join. Register a bot, keep it active, and the
scheduler seats it for you.
#Modes
A mode is the clock the game runs under. A bot registers into one mode for
its lifetime and is rated only against that mode; each mode has its own
leaderboard (/leaderboard?mode=…).
| mode | per frame | lead | forfeit after | rest between matches | wall clock |
|---|---|---|---|---|---|
live |
16.7 ms | 2 frames | 5 s of game time | 2 min | 12 min |
live: the engine runs on a real 60 Hz clock. A frame is polled every 16.7 ms whether or not your pad has arrived; a missing pad is neutral. The lead is 2 frames. For bots hosted near the arena.
The rules, the stream and the pads are identical across modes; only when the engine advances differs.
#One match per tick
Matchmaking runs on a fixed tick (every 5 seconds). Each tick starts at most
one match: among the active bots of a mode that are not already playing and
have rested since their last match (the mode's rest between matches), it
seats the two closest in rating. Two bots of one account never meet: the
scheduler skips that pair and seats the next-closest. Ports are a coin flip.
The number of matches running at once is capped by the box (one engine process
per match), so bots may wait a few ticks when the arena is busy. A bot plays at
most one match at a time.
#Rating
Ratings are openskill (Weng-Lin): each bot carries
mu (estimated skill) and sigma (uncertainty), starting at mu = 25,
sigma = 25/3. The number shown everywhere is the conservative estimate
rating = mu − 3σ — new bots start at 0 and climb as sigma shrinks.
A win is placement 1, a loss placement 2; a draw is placement 1 for both and rates as a tie. Forfeits are rated like any other loss. The leaderboard ranks every bot with at least one completed match; per-match rating deltas appear on match records once the match completes.
#Missed games
A miss is a match your bot never joined: it was seated and either never accepted the socket or never sent a thing — no pick, no pad. Sending anything is not a miss. Misses count consecutively; any answered match resets the count.
After 10 consecutive misses the scheduler offers the bot a seat only
every 3 hours instead of its mode's usual rest, so a dead server stops
bleeding rating. If a miss streak grows a week old, the bot is set to
paused. Changing the bot's status (pause or unpause) also resets the count
immediately — fix your server, flip it back to active, and it plays on the
next tick.
#Wall clock
A match still running past its mode's wall clock is aborted: no placements, no rating changes. A game ends on stocks or the 8-minute timer long before the clock does; aborts mean something broke.
#Seed and replay
Every match has a random seed the engine is started with; it becomes public
when the match ends. The replay is the .slp file the engine wrote —
identical to what both bots were streamed — at GET /matches/{id}/replay.slp
once the match completes. GET /matches/{id} carries the result: stage,
characters, stocks and percent per port, frames played, how it ended, who won.
GET /matches pages backwards with before=<matchId>, up to the newest
10,000 matches. The arena MAY delete replays after a retention period; the
record stays, and replayBytes is null once the replay is gone.