WARBIRDS.IO Dev Log

← All posts

Teaching the bots to shoot

The report was specific: a bot rides a perfect tail chase, saddled and steady, and never takes the shot. Before touching the AI we built a measurement harness — a headless world of bots stepped for five sim-minutes, counting every trigger pull, every firing range, every kill. It confirmed the feel report and then found something better: the bots were aiming fine. They were missing because nobody had ever taught them that bullets fall.

The measurement, not the vibe

The harness said a fighter with an enemy inside gun range was holding its fire 98% of the time, and that the shots it did take averaged 400 m — where they achieved nothing. A .50-cal round here leaves the muzzle at 460 m/s and lives 1.2 seconds. Over a 500 m flight it drops about four meters under gravity; the hit sphere on a fighter is five. The AI's lead calculation predicted the target's motion perfectly and ignored the drop entirely, so past ~350 m even a perfect solution physically could not connect. Six seconds of dead-on-the-pipper fire into a scripted tail chase: zero hits. It had been that way forever — the new wrecks and the busier sky just made it visible.

Hold-over, and a gate that understands range

The fix reads like a gunnery manual. The bot now holds over — aims above the lead point by exactly the drop its rounds will accrue in flight, the same thing a human does by instinct after the first tracer sails low. And the fire gate got rebuilt around what rounds can actually do: a kill window (predicted miss inside a few airframe-lengths) that owns the close fight, plus a wider suppressive cone for pressuring tracers at range — capped at the distance the round can physically reach before it expires. The old gate was a constant angle, which is exactly backwards: 3° at 200 m allowed a 10 m miss, starving the tail chase, while at 700 m it blessed shots the bullet couldn't survive to deliver. One more quiet bug fell out of the steering: inside ~1° of the aim point the controller went silent — a literal dead zone at the moment guns come on — so the nose drifted off the solution it had just built. It now trims on with gentle elevator and rudder instead of letting go.

Fights with a memory, flights with a doctrine

The other kill thief was amnesia. Bots re-rolled “nearest enemy” every couple of seconds, so damage sprayed across the whole furball and nobody ever went down. A bot now stays on its victim while he's alive and in reach. Wingmen got the same medicine as doctrine: a wingman fights his leader's fight — adopting the leader's target so the vic falls on one plane together — and while the leader is unengaged he actually holds formation, breaking only for threats near the flight. You can finally watch a vic cruise out, turn in, and attack as one.

The top cover finally flies high

And the high CAP — the vic that was supposed to loiter above the contrail band writing threads across the sky — turned out never to have flown a single high orbit. Its perch altitude only applied when it had no target, and over a crowded ring it always had a target, so it dove into the furball at spawn and stayed there. The CAP now has real doctrine: it ignores the brawl below, commits to whatever climbs into the band, and defends itself against whoever actually tags it. In the harness its time above the contrail floor went from 2% to a third of its life — which is the difference between a feature in the patch notes and threads you can actually read in the sky.

The numbers, before and after: trigger time up four-fold, average firing range out from 400 to ~480 m with the long shots now able to arrive, and bot-versus-bot gun kills roughly tripled — all pinned by regression tests that fly the tail chase, the CAP doctrine, and the wingman's leash every build.