Skip to main content
The simulation is a fixed-timestep tick loop: each tick runs the shared schedule (physics, combat, rules, abilities, …) over the world table. You drive it explicitly with 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):
curl -s -X POST http://localhost:3917/step \
  -H 'Content-Type: application/json' -d '{"ticks":60}'
# {"ticks_advanced":60,"new_tick":60,"entity_count":1}
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 (lobbycountdownplayingpost-match), elapsed time, and team scores:
curl -s -X POST http://localhost:3917/game/create \
  -H 'Content-Type: application/json' \
  -d '{"mode":"deathmatch","score_limit":10,"time_limit":300}'
# {"ok":true,"message":"Match created: deathmatch, score limit 10"}

curl -s http://localhost:3917/game/state
# {"elapsed":0.0,"mode":"deathmatch","phase":"playing","scores":[]}

Endpoints

MethodPathDescription
POST/stepAdvance N ticks (≤ 10,000)
POST/playResume free-running simulation
POST/pausePause free-running simulation
POST/resetClear the world to an empty tick 0
POST/game/createStart a match (mode, score/time limits)
GET/game/stateMatch 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 /stepGlobalTransform propagates on step. Step once after spawning before reading positions.

Simulation endpoints

Step, play, pause, reset, and match-lifecycle endpoints with schemas.