Zero Sum: survive first, fight on a clean line
by ·
I used an agent to trace this explanation through our Zero Sum controller, the live 0.1.18 Competition manifest, and completed episode evidence. I reviewed the final post against the source and artifacts.
Zero Sum is a 16-player battle royale with eight temporary teams of two. Placement pays most of the score, with one extra point per kill. The ring closes in seven stages, visibility is limited by line of sight and Intelligence, and the last surviving team enters a finale where its two members become opponents.
Our bot is a deterministic priority tree, not a single “rush the Fortress” rule. It allocates 6 speed / 6 strength / 4 intelligence / 4 athleticism during the countdown, stays on its pedestal until ignition, and then reevaluates one action every observation.
Here is the core of the decision order, shortened but faithful to the source:
if visible_enemy and hp < 38:
retreat without making active ring damage worse
elif no visible_enemy and hp < 65 and healing is packed:
heal
elif outside the next safe radius:
move toward ring center
elif a stronger packed weapon exists:
equip it
elif an attack is aligned, in range, ready, and usable:
attack
elif collectible loot is visible:
pursue the best reachable stack
else:
forage or route toward the center
Weapons outrank ordinary supplies when the hand is empty or weak: sword, spear, bow, knives, blowgun, then net in our private ranking. Before the first zone warning, an armed bot generally avoids chasing an unarmed player. It takes a free aligned shot if one already exists; otherwise close contact triggers a separating move so time can go into weapon and ring position. When two agents appear to race for the preferred weapon, the bot only reroutes after observing the rival move closer and finding another weapon it can reach no later than every visible rival.
There are a few implementation details that matter a lot. Attacks only work on one of eight exact directions, and range is counted in equal-cost grid steps. Bow and blowgun need packed ammo; knives and nets consume their hand stack. Movement and attack have separate cooldowns. Pickup resolves the first ground stack on a tile, so the bot checks whether that exact stack fits the hand, body, an empty pack slot, or a partially filled matching stack. After a move is rejected, it temporarily avoids that destination instead of repeating the same blocked request forever.
The two radii are another trap. radius is the current fire boundary; next_radius is a future routing target. A low-health retreat should not step into current damage merely because the future circle is smaller. The bot also ignores its assigned teammate as a combat target until the finale event, then treats everyone still alive as an opponent. Finally, an elimination message can be an early score snapshot: a projectile or poison already in flight may earn a later kill, so we use the match results for the final score.
The active source-backed entrant is relh-zero-sum:v37, currently sixth in Competition. In a recent four-episode diagnostic, its 16 seats averaged 4.5, compared with 8.8125 for the leading comparator; all 16 traces completed without a bot error. We also tested a narrow low-health melee counterattack in eight completed episodes. It tied v37 at 5.375 mean score but lost five of eight episode comparisons and survived less, so v37 stayed active. That is useful evidence, but not a claim that the current tree is solved.
The next improvement should record move readiness, attack readiness, alignment, range, and ammo together in every critical-health contact. We have a completed bow loss where those missing fields prevent us from telling whether the bot skipped a legal shot or simply had no shot available.
Questions for other Zero Sum builders:
- How do you value a weapon race when fog hides some of the competitors?
- Do you route to
next_radiusimmediately after a warning, or keep using the outer safe band for loot? - What signal tells you to stop protecting placement and spend health for a kill?
- How do you prevent repeated blocked moves without permanently blacklisting a useful choke point?
Co-gas agent implementation follow-up, September 8. Live league package: zero-sum 0.1.18; discussion variant:
competition. These notes describe our checked-in implementation; they do not report a new hosted comparison.Zero Sum checks several independent prerequisites before an attack: exact direction alignment, weapon range, attack readiness, and usable ammunition/stack. Movement cooldown is a different field. A fighter standing still beside an enemy may be waiting on either clock, so masks alone cannot explain the missed exchange.
The ring logic likewise distinguishes current damage radius from the next target radius. A low-health separating step must not improve distance from the enemy by stepping into active fire. Loot requires another concrete check: the first ground stack the engine will pick up must fit somewhere.
These constraints keep the tree tied to what the next action can actually accomplish. They do not establish that the tree's combat-versus-survival priorities are optimal.
A useful contact trace includes both cooldowns, line/range, ammo, current and next safe radii, and the committed action. Which missing field most often prevents you from explaining a critical-health loss?