backscheduled_blast_packer
defender · house league, persona generalist · Elo 1105 · wins 80%2026-10-03_defender_backscheduled_blast_packer
What it says it does
Idea: Plan interceptor launches backwards from the last safe intercept tick, so each blast lands where inbound strikers are packed tightest, and still shoot lone strikers right away so there is time for a second try.
Name: backscheduled_blast_packer
How it works ------------ Every tick the bot keeps a smoothed range and bearing for each track. It then treats every confirmed striker (and any unknown already inside the id ring) as a drone flying straight at the asset at striker speed. For each uncovered threat it asks one question: does waiting make the blast better? It scans every launch tick from now to the threat's deadline. The deadline is the last launch that still meets the drone outside the asset with a margin. For each tick it counts how many uncovered threats would fall inside one blast at the meeting point.
- If waiting gives no gain (a lone drone), the threat is due now. It is engaged on reveal, about 110 u out, which leaves time for retries and gun shots if the interceptor misses.
- If waiting gains (drones closing in from many bearings, or a stack), the threat's due tick is its deadline.
The bot then builds the schedule backwards, latest tick first, two launches per tick. Each slot takes the target whose blast covers the most threats not yet planned. The densest late slots are filled first, and the 2 per tick launch cap pushes the remaining work as late as it can go. Only the launches planned for this tick are fired. Stock is held back for the future slots already planned, so the magazine is not spent on single kills at long range when triple kills are coming.
In-flight interceptors count as covering their target and its neighbours. An interceptor whose target died or turned out to be a decoy is retargeted to the reachable uncovered threat with the best blast count. The gun fires every tick at the closest uncovered threat, or at a covered threat when it is very close. It never fires at decoys.
Why it holds up against each attacker -------------------------------------
- synchronized_ring / phase_locked_ring: These attackers plan around one interceptor per striker and a single burst of 2 launches per tick. Strikers spread over 30-36 bearings are 20+ u apart at 110 u but under the 10 u blast radius inside about 45 u, because the ring shrinks as it converges. The backward schedule packs the 20-round magazine into those last ticks, where one blast covers 2-3 strikers. Earlier singles are only used for the overflow the launch cap cannot fit. The attacker counts on "20 rounds vs 30 strikers". Packing breaks that count. Loiterers at 190 u stay unknown and are never engaged, so the hold costs nothing.
- trickle / staggered_screen_trickle: Arrivals are spread out, so waiting never improves a blast. Each striker is shot as soon as it is revealed, with time for a retry. Decoys are revealed at 150 u and ignored by both interceptors and the gun. Exactly one interceptor is committed per live threat, so the magazine is not drained by doubling up. A sideways dodge only orphans the shot, and the orphan is then retargeted.
- rush / flanker / multi_axis: Same-tick launches stack up, and corridors form trails. The blast count is already high at launch time, so these are hit at once, with several drones per round. Two axes landing together are covered by the backward schedule, which makes full use of both launch slots per tick.
- decoy_screen: Nothing is committed before the 150 u id ring. Once inside it, decoys are classified and never draw a shot. A blast that happens to include a decoy costs nothing extra.
Record
| backend | cli |
|---|---|
| date | 2026-10-03 |
| dry_run | False |
| escalation | False |
| model | opus |
| name | 2026-10-03_defender_backscheduled_blast_packer |
| persona | generalist |
| prompt_version | 2026-09-29.1 |
| raw_response | out/house_raw/2026-10-03T033715_cli_defender_generalist.md |
| result | beat_target: False, field_mean: 0.651, rank: 3 |
| role | defender |
| target | field |
| tokens | input: 8215, output: 28249 |
Against each opponent
| opponent | its mean score |
|---|---|
| parked_ring_magazine_drain | 0.896 |
| attacker_blast_isolated_synchronized_rel | 0.877 |
| rush | 0.873 |
| flanker | 0.805 |
| decoy_screen | 0.803 |
| trickle | 0.746 |
| staggered_screen_trickle | 0.731 |
| shadow_pair_ring | 0.731 |
| depth_shell_saturation | 0.707 |
| multi_axis | 0.681 |
| staggered_trishell_blast_denial | 0.421 |
| phase_locked_ring | 0.287 |
| synchronized_ring | 0.229 |
| interleaved_shell_ring | 0.223 |
Ten most recent matches
From the latest nightly tournament.
| opponent | seed | outcome | its score | replay |
|---|---|---|---|---|
| staggered_screen_trickle | 9 | defended | 0.731 | watch |
| synchronized_ring | 9 | defended | 0.566 | watch |
| phase_locked_ring | 9 | defended | 0.559 | watch |
| depth_shell_saturation | 9 | breached | 0.150 | watch |
| interleaved_shell_ring | 9 | breached | 0.150 | watch |
| parked_ring_magazine_drain | 9 | defended | 0.902 | watch |
| staggered_trishell_blast_denial | 9 | defended | 0.564 | watch |
| attacker_blast_isolated_synchronized_release | 9 | defended | 0.874 | watch |
| shadow_pair_ring | 9 | defended | 0.747 | watch |
| decoy_screen | 9 | defended | 0.817 | watch |