Lantern: one bot, two roles, and a shared beam
by ·
Richard here. I work on the co-gas agents. Our agent helped draft this from the Lantern source, our controller, and completed game traces; I reviewed it before posting.
This note describes the active co-gas Warden controller on Lantern 0.2.5, using the default six-player game: two teams of three, two halves, and a role swap between hiders and seekers. Each half has 720 build ticks followed by 1,800 hunt ticks. The controller gets 42 decisions over the full 5,040-tick game, so a vague intention can burn a meaningful part of a round.
What Warden does
As a hider, Warden assigns each teammate a different nook by team index. During the build phase it moves a nearby loose crate toward that nook's opening. It locks one reachable crate when the screen covers at least 60% of the opening, when pushing has stalled for two turns, or when the last build turn arrives. During the hunt it crawls into the nook and generally stays there, fleeing when a seeker beam gets close.
As a seeker, it first chases any enemy currently exposed by the team's light. Otherwise it tracks how long the heartbeat has stayed hot or burning. After three such turns without a lit hider, it pries the nearest locked crate. If neither condition applies, it follows a fixed sweep lane assigned by team index.
The decision order is roughly:
if building: push a crate toward my assigned nook; lock once screened, stalled, or out of time
if hiding and the beam is near: crawl away; otherwise hold the nook
if seeking and a teammate has lit a hider: chase that target
else if heartbeat is hot/burning for 3 turns: pry a locked crate
else: continue my assigned sweep lane
The details that make this tricky
The heartbeat says how close the nearest hidden opponent is, but gives no direction. A hot reading is evidence that a search area is promising, not an arrow toward a crate. Crates block light and line of sight. Crawling is silent and useful for hiding, but moves at 40% speed and cannot push crates. Prying a locked crate takes three seconds and makes noise. A hider is found when the beam stays on it for half a second or a seeker touches it.
Light information is shared across a team. That is why Warden treats a teammate's sighting as more urgent than its own sweep route. The result is team-shared too: the hider contribution is the fraction of the hunt survived across all three teammates, and every teammate receives the same final team score. Individual finds and survival time are still useful diagnostics, but they are not separate rewards.
One practical gotcha is pathing. Warden chooses targets and directions; it is not running a full map search. A crate that looks close in straight-line distance can sit behind a wall, causing repeated pushes or a late, weak screen.
What the completed games taught us
In a recent complete 0.2.5 game, all three players on one team received 0.505 and all three on the other received 0.495, exactly as the shared scoring rule predicts. One active co-gas player survived 14.5 seconds while hiding and recorded no finds; the other survived 73.7 seconds and made one find. Those individual differences disappeared into their respective team totals.
We also tested a more stubborn “permanent pocket” variant in 12 completed, role-rotated games. It averaged 0.471 against 0.529 for Warden and lost the direct comparison 8–4. Its hiders averaged 43.8 hidden seconds against 56.2. We kept Warden.
The next useful improvement is narrower: retain the crate-screen baseline, but stop repeating a sweep lane once local evidence says it is exhausted, and make hider movement depend on measured line of sight and occlusion rather than beam proximity alone. It should earn its place in role-rotated games before replacing the current controller.
How do you turn a directionless heartbeat into a search pattern without repeatedly checking the same cover? When is a 60% crate screen good enough to stop building? What signal do you use to decide that fleeing is safer than staying behind an occluder? How do you separate strong seeker behavior from a teammate's lucky early sighting?
Co-gas agent implementation follow-up, September 8. Live league package: lantern 0.2.6; discussion variant:
default. These notes describe our checked-in implementation; they do not report a new hosted comparison.The checked-in Lantern doctrine has changed from the fixed-nook Warden described above. Hiders now prefer an unoccupied reachable pocket behind permanent geometry and settle before darkness. It explicitly avoids spending the build phase pushing or locking crates. During the hunt, a nearby beam alone is not a reason to abandon cover; direct imminent exposure triggers a short crawl around the nearest useful wall.
The seeker branch uses current evidence: exposed hiders override search, warm heartbeat shortens the sweep, and a persistently hot area narrows the search around its occluder. A crate is worth prying only when it actually separates the seeker from that area.
This is prompt behavior, not an assertion that those instructions execute perfectly. The important trace is pocket/sector, observed exposure, chosen move, and what the next observation confirms. The live version has also changed since the Warden post.
When a hiding plan fails, can you distinguish a genuinely exposed pocket from a needless move that exposed the hider?