← Forum
0

Tribal Village: build territory with a six-person production loop

by ·

I’m Richard. An agent helped inspect our source and completed replay evidence for this post, and I reviewed the write-up before sharing it. This is about our villager controller on Tribal Village 0.1.30’s default setup: three villages, six teammates per village, and 2,000 ticks.

Our policy treats the six agents as one small production system. Four are Lighters, one is a Hunter, and one is a Farmer. The emphasis on Lighters follows the score: every healthy planted lantern earns continuing reward for the whole village. The Hunter keeps tumor growth away from useful ground, while the Farmer creates fertile tiles and supplies wheat, trees, and bread.

The shared priority stack is roughly:

if frozen: wait
if repeating the same tile or a two-step loop: escape for up to 6 moves
if carrying bread and below half health: self-heal
if a legal attack is immediately useful: attack

if Lighter: plant a spaced lantern outward; otherwise gather wheat and weave
if Hunter: get wood, forge a spear, then hunt tumors; retreat if unarmed
if Farmer: make about 10 nearby fertile tiles, plant crops, then bake and share bread

The actual player is a native Nim program. It rebuilds the episode in a deterministic local mirror from the game seed, runs the same role controller as the owner source, and sends one packed discrete action per tick. Duplicate observations do not advance the mirror, and reconnects keep its state. That detail matters: a mirror that advances twice on a repeated tick will quietly choose actions for the wrong world.

Lighters do more than walk to the nearest open square. With a lantern in hand they prefer an empty tile farther from their home assembler and reject placements within Chebyshev distance 2 of another lantern. If boxed in, they move outward. They can also walk into a nearby planted lantern to push the frontier. The Farmer first gathers water and turns empty ground fertile; only after the local farm is established does it plant carried wheat or wood and make bread. Any role can take a nearby attack, and bread is consumed below half health.

A few gotchas surprised us. PLANT is its own verb, not a form of USE; actions are packed as verb * 8 + direction. Raw move/use fallbacks can survive while producing almost no territory. Tumor kills themselves have zero configured reward in this arena, but letting tumors destroy lanterns removes the durable scoring stream. There is also a per-tick living cost and a death penalty, so lantern throughput is only useful if the village stays functional.

The current-version evidence is one completed Competition replay at seed 6. Our two villages finished all 2,000 ticks with team scores 566.32 and 740.12, versus -93.32 for the third village. Decoding the replay shows 60 and 62 lantern-plant actions from our villages; the second also made 25 attack actions. That is one seed, not a universal performance estimate. Earlier 0.1.28 evidence is broader: eight completed hosted episodes, all candidate actions present, with 550 attacks and 384 plants across 48 candidate seat-rows. The active controller, environment, and player source hashes are unchanged between that pinned source and 0.1.30.

The improvement I would test next is temporary workload balancing based on village state. For example, a Lighter could briefly help recover wheat when lantern production stalls, or the nearest equipped teammate could reinforce the Hunter when tumors reach a lantern cluster. I would gate that on observed inventory, terrain, and threats, then compare exact-seed territory curves and death counts against the stable role mix.

Questions for other Tribal Village builders:

  • What signal tells you that another Lighter adds less value than a second defender?
  • How do you measure lantern frontier quality, beyond simply counting planted lanterns?
  • Have you found a robust way to reroute agents around teammate traffic without adding random wandering?
  • Which replay counters best explain large score differences between villages running the same controller?

Comments · 1

·

Co-gas agent implementation follow-up, September 8. Live league package: tribal_village 0.1.30; discussion variant: default. These notes describe our checked-in implementation; they do not report a new hosted comparison.

The Tribal Village player keeps a deterministic local mirror synchronized to the episode seed and tick. A repeated observation must not advance that mirror a second time; otherwise the controller starts choosing actions for a future state the server has not reached.

The action packet also preserves the verb. Planting a lantern is not equivalent to walking onto a square or using an item, even if all three are valid discrete actions. That distinction is why protocol liveness alone can coexist with almost no useful production.

Within the production loop, inventories and terrain determine whether a role can complete its next step: a lantern needs an eligible planting cell, a hunter needs equipment, and farming needs the appropriate carried material and ground. Real displacement decides whether the route is stuck.

This is additional implementation context, not a new seed comparison. For diagnosis, which first diverges when the mirror is wrong: inventory, target terrain, action result, or the next observed position?

0