loiter_then_collapse
defender · house league, persona counter_meta · Elo 1070 · wins 86%2026-10-02_defender_loiter_then_collapse
What it says it does
Idea: Launch interceptors after the ring is released, park them over the asset by retargeting them between two opposite tracks every tick, then fire every one at the same moment at the closing ring so each blast covers three strikers.
Which part of synchronized_ring this attacks -------------------------------------------- The release logic. synchronized_ring holds all 30 strikers at radius 190. They are evenly spaced 12 degrees apart. It then sets steer[did] = asset for every drone on the same tick. After that it never steers again, so every striker flies a straight radial line inward at the same speed. The whole raid is then a single circle of radius W(t) = 190 - 4t that shrinks around the origin. The arc spacing between neighbours is 2*pi*W/30, about 0.21*W. At W of about 35 the spacing is about 7.3, which is less than the blast radius of 10. One blast centred on a striker also catches both of its neighbours. The attacker spaced its drones to stop multi-kills at the ring (its docstring says so). It did not account for the geometry forcing them back together near the asset.
What the replays show ---------------------
- In every winning match the stock ran out (stock_left 0, 20 launched) before the end. 16 to 18 interceptor kills came from 20 interceptors, which is about one kill per interceptor. Defenders that fire as strikers enter id or engagement range meet them where they are still 15 to 25 units apart.
- The only defender that held (convergence_blast_scheduler, defended with hp 30) got 22 to 25 interceptor kills from 20 interceptors. Kills above one per interceptor are the whole game here. But the launch cap is 2 per tick. Launching straight at the wave spreads meeting radii over a span of about 30 units, so most of its blasts still go off where the spacing is too wide. It still loses about 60% of its matches.
What this bot does differently ------------------------------ It removes the launch cap from the timing problem. Interceptors are launched as soon as the release is detected, around W = 175. Every tick each interceptor is retargeted between two roughly opposite tracks, so it moves back and forth inside about 12 units of the asset. This loitering costs nothing; the lifetime of 90 is ample for the roughly 40-tick run-in. When the wave reaches W of about 47, all loiterers are committed on the same tick. The targets are the ring members sorted by angle, at indices round(j*N/k). For N=30 and k=20 that skips every third index, so every striker is inside 2 blasts. All blasts go off together at radius about 35, where the spacing is smallest. The gun clears leakers at point-blank range.
Record
| backend | cli |
|---|---|
| date | 2026-10-02 |
| dry_run | False |
| escalation | True |
| model | opus |
| name | 2026-10-02_defender_loiter_then_collapse |
| persona | counter_meta |
| prompt_version | 2026-09-29.1 |
| raw_response | out/house_raw/2026-10-02T033611_cli_defender_counter_meta.md |
| result | beat_target: True, field_mean: 0.664, rank: 2, score_vs_target: 0.647 |
| role | defender |
| target | 2026-09-29_attacker_synchronized_ring |
| tokens | input: 7929, output: 13621 |
Against each opponent
| opponent | its mean score |
|---|---|
| rush | 0.771 |
| decoy_screen | 0.762 |
| attacker_blast_isolated_synchronized_rel | 0.758 |
| parked_ring_magazine_drain | 0.753 |
| flanker | 0.749 |
| multi_axis | 0.722 |
| shadow_pair_ring | 0.716 |
| phase_locked_ring | 0.664 |
| synchronized_ring | 0.647 |
| staggered_screen_trickle | 0.609 |
| staggered_trishell_blast_denial | 0.437 |
| depth_shell_saturation | 0.397 |
| trickle | 0.390 |
| interleaved_shell_ring | 0.181 |
Ten most recent matches
From the latest nightly tournament.
| opponent | seed | outcome | its score | replay |
|---|---|---|---|---|
| staggered_screen_trickle | 9 | defended | 0.729 | watch |
| synchronized_ring | 9 | defended | 0.769 | watch |
| phase_locked_ring | 9 | defended | 0.765 | watch |
| depth_shell_saturation | 9 | defended | 0.359 | watch |
| interleaved_shell_ring | 9 | breached | 0.086 | watch |
| parked_ring_magazine_drain | 9 | defended | 0.754 | watch |
| staggered_trishell_blast_denial | 9 | defended | 0.564 | watch |
| attacker_blast_isolated_synchronized_release | 9 | defended | 0.758 | watch |
| shadow_pair_ring | 9 | defended | 0.737 | watch |
| decoy_screen | 9 | defended | 0.761 | watch |