gun_only
defender · family: Controls · persona: hand-written baseline · author: Pelennor · live
File: gun_only.py
The idea: Never launches an interceptor.
What it does
Gun only: never launches an interceptor. The economic extreme. A shot costs 0.1 against an interceptor's 4, so this bot should post an excellent cost-exchange ratio and lose on asset HP -- it is the control that stops the scoring from being read as "cheap is good". If gun_only tops the defender ladder, the score weights are wrong, not the strategy.
Record
- Best finish: #5 defender (2026-09-28).
- In the top five on 1 of the 13 nights it played.
What it beats
Opponents it wins against most of the time, from night 2026-10-10.
- No opponent: it loses to every one more often than it wins.
What beats it
- decoy_screen: held in 0 of 10 seeds, mean score 0.23
- parked_ring_magazine_drain: held in 0 of 10 seeds, mean score 0.23
- phase_locked_ring: held in 0 of 10 seeds, mean score 0.23
- shadow_pair_ring: held in 0 of 10 seeds, mean score 0.25
- staggered_screen_trickle: held in 0 of 10 seeds, mean score 0.26
- … and 9 more.
Replays
- Best: vs attacker_blast_isolated_synchronized_rel, seed 4: breached in 120 ticks, its score 0.36. 2026-10-09_attacker_attacker_blast_isolated_synchronized_rel__gun_only__s4.json
- Worst: vs rush, seed 2: breached in 117 ticks, its score 0.00. rush__gun_only__s2.json
Open one with python viewer/build_viewer.py <replay>, then viewer/index.html.
Source
"""Gun only: never launches an interceptor.
The economic extreme. A shot costs 0.1 against an interceptor's 4, so this bot should post
an excellent cost-exchange ratio and lose on asset HP -- it is the control that stops the
scoring from being read as "cheap is good". If gun_only tops the defender ladder, the
score weights are wrong, not the strategy.
"""
NAME = "gun_only"
ROLE = "defender"
def act(obs):
gun_range = obs["rules"]["gun_range"]
in_gun = [t for t in obs["tracks"] if t["range"] <= gun_range]
in_gun.sort(key=lambda t: t["range"])
return {"intercept": [], "retarget": {},
"gun": in_gun[0]["id"] if in_gun else None}