Skip to main content

Match format

Every match consists of 5 games. Each game is played on a different map with a different random seed. The team that wins more games wins the match.

Win conditions per game

A game ends when:
ConditionDescription
Core destroyedOne team’s core reaches 0 HP
ResourcesAfter 2000 rounds, the tiebreaker sequence determines the winner
TimeoutAfter 2000 rounds with equal tiebreakers — decided by coinflip

Ladder

The ladder ranks all teams by Glicko-2 rating. New teams start unrated and are seeded to 1500 when they upload their first ready submission.

Scheduling

Every 10 minutes, the scheduler:
  1. Pairs each team with one similarly-rated opponent (greedy nearest-rating matching with small random jitter to avoid repetitive matchups)
  2. Avoids rematches from the last hour
  3. Submits matches to the runner infrastructure
With N teams, each cycle creates floor(N/2) matches — one match per team.

Rating updates

Ratings are updated using Glicko-2 after each scheduler cycle. Match outcomes use fractional scoring based on the game score (e.g., a 5-0 win counts more than a 3-2 win). Each team has three rating components:
  • Rating — skill estimate (starts at 1500)
  • Uncertainty (RD) — confidence in the rating (starts high, decreases with more matches)
  • Volatility — expected rating fluctuation

Unrated matches

You can challenge any team to an unrated match that doesn’t affect ratings:
cambc unrated <opponent_team_id>
Unrated matches use the same infrastructure and time limits as ladder matches but are prioritised for faster execution.

Test runs

Test runs let you upload two local bots and run them against each other on the same hardware as ladder matches:
cambc test-run my_bot opponent
This is the best way to verify your bot works within the 2ms CPU time limit before submitting to the ladder.
Rate limits: max 10 test/unrated matches per 5 minutes. Unrated matches also have a 5-minute cooldown per specific matchup.