Rules at a glance
Timing
| Rule | Value |
|---|---|
| Global command window | 15 seconds |
| Resource replenishment | every 4 resolved Ticks (about 1 minute) |
| Core migration | 4 logical Ticks per cell |
| Core respawn attempt | same Tick as destruction |
| WebSocket Ping interval | 20 seconds |
| WebSocket Pong timeout | 60 seconds |
| Credential revalidation | approximately 5 seconds |
| Recommended reconnect backoff | 250 ms → 5 seconds, with jitter |
Core
| Attribute | Value |
|---|---|
| HP | 5 |
| Shield | 5 |
| Shield cap with Beacon | 10 |
| Vision | 5 |
| Starting resources | 5 |
| Starting Workers | 1 |
| Resource capacity | max(10, population × 5) |
| HP recovery | 1 resource → 1 HP, after combat |
| Shield repair | 1 resource → 1 shield |
Units
| Unit | HP | Vision | Base price | Damage / range |
|---|---|---|---|---|
| Worker | 2 | 3 | 5 | none |
| Vanguard | 4 | 4 | 10 | 1 to adjacent target cell |
| Ranger | 2 | 5 | 12 | 1 at eight-direction range 1-3 |
World
| Rule | Value |
|---|---|
| Cell capacity | 2 occupying entities |
| Terrain kinds | EMPTY, RESOURCE, OBSTACLE |
| Chunk size | 32×32 |
| Central chunk ring | the 2×2 chunks with cx, cy ∈ {-1, 0} |
| Resource quota | max(2, floor(16 × 8 / (8 + ring))) per chunk |
| Spawn distance from nearest active Core | 20-30 |
| Coordinate type | signed int64 [x, y] |
| Beacon start | [0, 0] |
Economy
axis(c) = c if c >= 0 else -c - 1
ring = axis(cx) + axis(cy)
resource_quota = max(2, floor(16 * 8 / (8 + ring)))
One point yields 1 resource to a normal Worker or 2 to a Beacon player's Worker. Either harvest consumes exactly one point. A same-point tie goes to the lowest eligible Worker UUID.
A dead Worker drops its complete cargo amount on its final cell. Recovery takes 1 resource normally or up to 2 with the Beacon, never more than the pile holds. Cargo piles do not count toward the chunk's natural-resource quota.
population = Worker + Vanguard + Ranger
resource_capacity = max(10, population × 5)
k = max(0, floor((population - 20) / 5) + 1)
unit_price = round_half_up(base_price × (13 / 10)^k)
Deposits move only what fits. If population falls, stored resources above the new capacity are destroyed immediately.
There is no per-Tick maintenance charge. The dynamic price uses the living population after same-Tick Unit self-destruction and combat deaths. The exact fraction is rounded once at the end, with halves rounded upward. The initial and respawn Worker are free.
Combat-destroyed Core inventory goes to the player who dealt the most damage to that Core during the Tick, up to this capacity. Ties use raw player UUID order; overflow is destroyed, and all loot is destroyed if the winner's Core also dies.
| Population before spawn | Worker | Vanguard | Ranger |
|---|---|---|---|
| 0-19 | 5 | 10 | 12 |
| 20-24 | 7 | 13 | 16 |
| 25-29 | 8 | 17 | 20 |
| 30-34 | 11 | 22 | 26 |
| 100-104 | 433 | 865 | 1,038 |
Commands
| Limit | Value |
|---|---|
| Idempotency key | 8-128 visible ASCII bytes |
New submissions per (player, tick, source) | 64 |
| Concurrent command bodies per credential kind | 4 |
| WebSocket inbound frame limit | 1024 bytes |
| WebSocket messages | tick, state, received |
| Command sources | AGENT, MANUAL |