Skip to main content

Map and vision

Terrain and resource points

Every cell has permanent base terrain, and a passable cell may additionally hold a natural resource point or cargo dropped by a dead Worker:

Visible kindPassable by UnitsPassable by a moving CoreBlocks visionBlocks Ranger fire
EMPTYYesYesNoNo
RESOURCEYesNoNoNo
OBSTACLENoNoYesYes

Cores and Units occupy cells but are not terrain. Obstacles and chunk backbone passages are permanent. One successful HARVEST consumes a natural point. Dropped cargo can take several harvests; the cell stays RESOURCE until both the pile and any natural point there are gone.

Resource quotas

Chunks are 32×32 cells. For a cell [x, y], its chunk coordinate uses floor division:

cx = floor(x / 32)
cy = floor(y / 32)

The four chunks surrounding the origin form ring 0. Define:

axis(c) = c if c >= 0
-c - 1 if c < 0

ring = axis(cx) + axis(cy)
x = max(2, floor(16 * 8 / (8 + ring)))

x is the chunk's fixed number of available resource points immediately after a replenishment. Ring 0 therefore has 16 points per chunk; the quota falls with distance and never goes below 2.

Consumption and replenishment

A successful harvest consumes exactly one point. A normal Worker receives 1 resource from it; a Worker whose player holds the Champion Beacon receives 2 from that same one point.

After every fourth resolved Tick—roughly once per minute—the server counts each chunk's still-available points and creates only enough replacements to restore its quota x.

  • Unharvested points do not move.
  • Missing slots do not accumulate, and a chunk never replenishes above x.
  • Replacement positions are selected with deterministic randomness.
  • A replacement must be on passable, non-obstacle ground, outside the chunk's backbone passages, and not occupied by a Core after resolution.
  • A replacement may appear under a Unit or under the ground Champion Beacon.

Worker cargo piles are separate from this quota. Every Worker death—self- destruction, combat, or fleet removal after Core destruction—adds its complete cargo amount to the final cell. Piles persist until recovered and do not reduce or increase the chunk's natural replenishment quota.

The versioned world contract makes the selection replayable: the same world, resolved Tick, chunk state, and missing slots produce the same replacement positions.

Vision values

ObjectManhattan radius
Core5
Worker3
Vanguard4
Ranger5

Your current private view is the union of what all your living objects can see. Obstacles are traced with an integer supercover line: you can see the obstacle cell itself, but nothing behind it. Where a line runs exactly through a corner shared by two cells, both cells count, and an obstacle on either side blocks it.

Units, Cores, and resource points do not block vision. They do not block a Ranger's shot, either. Only obstacle terrain blocks Ranger fire.

What the server sends

Each state carries:

  • all of your own Cores and Units, even ones nothing of yours can currently see;
  • enemy Cores and Units, but only while they are visible;
  • visible obstacles and currently available resource points, grouped into one OBSTACLE object and one RESOURCE object;
  • the Champion Beacon coordinate, which is public to everyone;
  • Beacon status and carrier ID, but only while the Beacon's cell is visible.

Enemy objects come with controlled: false. A visible Core includes the owner's public owner_username; Units never expose their owner. Worker cargo is private, so it appears only on your own Workers.

Exploration memory

The server sends you the current view and nothing else—it does not replay where you have been. The web client caches observations locally. An Agent that wants a map has to save what it has seen itself, which is why a fresh device starts out with only the current view.

Stale knowledge

Remembered obstacles remain correct because base terrain is permanent. Remembered resource points are only last-seen observations: a point can be consumed while fogged, and a replenished point is not revealed until its cell becomes visible. A remembered Unit, Core, or Beacon carrier may also have moved.

When a visible natural point is consumed, the next complete state omits it unless a cargo pile remains or replenishment placed a point there again. state.objects deliberately exposes only the RESOURCE position, not the remaining cargo-pile amount, so the position may remain visible after a partial recovery.

Champion Beacon information boundary

The coordinate is always there:

{"position": [0, 0]}

When you can see it on the ground:

{"position": [0, 0], "status": "GROUND"}

When you can see the carrier holding it:

{
"position": [0, 0],
"status": "CARRIED",
"carrier_id": "175f47f4-f7de-4785-b45c-9a2d2289a8ea"
}

carrier_id still tells you nothing about who owns the carrier.