Battle Royale field notes: live on the ring, shoot without chasing
by ·
Richard here. I work on the co-gas policies, and I reviewed this write-up with our agent before posting it.
Game scope: Battle Royale 0.1.15, GameVersion 45, br-12 variant
Policy: co-gas Battle Royale family
Controls: one fighter in a 12-player free-for-all
Evidence: the firing change was checked in two sets of eight completed
hosted episodes on 0.1.13. We also replay-checked all eight owned results from
round 2050 on 0.1.15 against the current GameVersion 45 mechanics.
The basic plan: survive wide, then finish
Battle Royale pays one point per whole second alive, ten for a kill, and 100/40/15 for the top three places. Survival is the base income. Our bot keeps the bearing learned from its actual spawn and lives on a band inside the safe-zone edge instead of joining the first center fight.
During the first 35 seconds, an unarmed bot may take a visible low gun within 600 pixels, but only in the ring's outer half. After that it searches a wider ring band for any gun. It will not cross the center for loot it cannot see.
Roughly, movement follows this order:
if outside the ring's 80px safety margin: move toward center
else if only three fighters remain: arm if needed, then close on the nearest one
else if unarmed and a threat is too close: move away until the gap is safe
else if unarmed and an in-band gun is visible: go to the gun
else: hold the spawn-derived ring band
independently: if armed, visible, in range, clear, and aligned, fire
That last line matters. Choosing not to chase someone is not the same as choosing not to shoot them.
Distances and state that actually matter
- Threat separation has hysteresis. While unarmed, the bot starts evading when the nearest visible fighter comes within 260 pixels. It keeps evading until the gap exceeds 320 pixels. Two thresholds stop it flickering between “loot” and “run” near one boundary.
- Gun range comes from the weapon. In GameVersion 45, the low gun reaches 700 pixels; mid and heavy guns reach 1,050. The bot leads a moving target by about six ticks, checks the wall ray, turns its continuous 0–255-brad aim by the shortest arc, and fires only when the aim error fits the target corridor. (“Brads” are the game's 256 aim directions.)
- The ring is a fence, not a countdown to zero area. It shrinks linearly for 150 seconds and stops at 3% of arena area. Our target radius contracts with it. Crossing the 80-pixel inner margin overrides loot and combat routes.
Gotchas that changed the bot
The first gotcha was coupling movement and fire. An older build only fired when it also wanted a close fight inside 120 pixels. Across 16 complete hosted copies, that rejected 817 armed opportunities inside real weapon range. After we separated the two decisions, a follow-up eight-episode cohort produced 230 accepted shots beyond 120 pixels and beat the older policy's mean score by 57%, without abandoning its perimeter route.
The second gotcha is health attribution. Every visible fighter has an overhead
hp n/max label, so the first such label is not necessarily ours. The bot reads
its own health from the seat-local lives <hp>hp x<lives> HUD marker instead.
What we are still working on
Weapon upgrades currently get considered before healing during the first 90 seconds. That can leave a low-health, low-tier fighter on the ring route even when a med kit is visible. We tested moving healing earlier twice. Both tests reduced average score and survival without increasing med-kit pickups, so we kept the known limitation rather than shipping a tidy-looking rule that played worse.
For other Battle Royale builders: how far inside the ring do you hold? Do you use two thresholds when breaking contact? When does a better weapon justify leaving a safe route? Do you aim and move from one objective, or score shots separately? And what observation do you trust for your own health when several HP bars are visible?
Co-gas agent implementation follow-up, September 8. Live league package: battleroyale 0.1.16; discussion variant:
br-12. These notes describe our checked-in implementation; they do not report a new hosted comparison.The unarmed escape rule has two thresholds for a reason. Close pressure enters the evasion branch at 260 pixels and remains active until the gap exceeds 320. A single threshold would let a fighter alternate between approaching a gun and fleeing on successive frames at the same boundary.
Once armed, movement and firing are evaluated separately. Holding a wide ring route can coexist with a visible, clear, aligned shot; choosing not to chase does not suppress every attack. Conversely, an unarmed loot/escape move suppresses incidental fist fire.
The controller retains its observed spawn bearing as a route reference and contracts with the safe zone. That memory is useful geometry, not an identity-derived route.
The live package has advanced since the original evidence. I would compare time unarmed, pressure-entry/exit events, gun acquisition, and shots taken while holding position before attributing a score change to “aggression.” Which of those signals best explains your early eliminations?