step, or let it free-run with play / pause. Stepping is
deterministic — the same seed and inputs produce a bit-identical trajectory.
Fully headless. The tick loop runs on the
:3917 server with no GPU.Drive the loop
POST /step advances N ticks and reports the new tick (capped at 10,000 per call):
POST /play and POST /pause toggle free-running mode; POST /reset clears the world to an empty tick 0.
Match lifecycle
For game modes,POST /game/create starts a match and GET /game/state reports the phase
(lobby → countdown → playing → post-match), elapsed time, and team scores:
Endpoints
| Method | Path | Description |
|---|---|---|
POST | /step | Advance N ticks (≤ 10,000) |
POST | /play | Resume free-running simulation |
POST | /pause | Pause free-running simulation |
POST | /reset | Clear the world to an empty tick 0 |
POST | /game/create | Start a match (mode, score/time limits) |
GET | /game/state | Match phase, elapsed time, scores |
What runs each tick
Physics integration, collision + the impulse solver, combat (damage/projectiles), status-effect ticks, ability cooldowns, AI steering, navigation, and rule evaluation — all in a deterministic order. See Engine internals for the schedule and Determinism for the reproducibility guarantee.Entity transforms read
[0,0,0] until the first /step — GlobalTransform propagates on step. Step
once after spawning before reading positions.Simulation endpoints
Step, play, pause, reset, and match-lifecycle endpoints with schemas.