Run a local match
cambc run <bot_a> <bot_b> [map]
This runs the full game engine locally with no time limits — ideal for rapid iteration. The engine outputs a replay.replay26 file.
Bot paths can be a directory containing main.py, a .py file, or a bot name from your bots_dir (set in cambc.toml). The optional map argument is a .map26 file — if omitted, the first map in your maps_dir is used.
cambc run starter starter # bot vs itself
cambc run my_bot opponent --seed 42 # deterministic seed
cambc run my_bot opponent maps/custom.map26 # custom map
cambc run my_bot opponent --replay out.replay26 # custom replay path
View a replay
cambc watch replay.replay26
Opens the visualiser in your browser. Supports play/pause, round scrubbing, speed control, and keyboard navigation.
Run + watch in one command
cambc run --watch starter starter
cambc watch --match <match_id>
cambc watch --match <match_id> --game 3
Remote test runs
Remote commands require authentication — run cambc login first if you haven’t already.
Test your bots on the same hardware that runs ladder matches, with full time limit enforcement:
cambc test-run <bot_a> <bot_b> [map]
This uploads both bots and runs a match on AWS Graviton3 instances with the 2ms CPU time limit enforced. Use this to catch performance issues before submitting.
Bot paths for test-run must be a directory containing main.py or a .zip file (unlike cambc run, arbitrary .py files are not accepted).
cambc test-run my_bot opponent
cambc test-run my_bot opponent maps/custom.map26
Remote test runs are rate-limited: max 10 test/unrated matches per 5 minutes. Unrated matches also have a 5-minute cooldown per specific matchup.
You can also challenge another team to an unrated match using both teams’ latest submissions:
cambc unrated <opponent_team_id>
Debugging
- stdout (
print()) is captured and saved to the replay — view it per-unit in the visualiser
- stderr prints to your console in real time
- Use
c.draw_indicator_line() and c.draw_indicator_dot() to draw debug overlays on the map
Next steps