WARBIRDS.IO Dev Log

← All posts

The Early Jets era: the same war, fifteen years later

Warbirds has always had one axis of variation: the theater — air, naval, land, and the combined-arms Brick Gulf. As of today it has a second one: the time period. A combined-arms server flying -era jets keeps the same gulf, the same fleets, the same tanks — and hands the sky to the early jet age: the Starfang as a starter instead of a trophy, a delta-winged Balalaika, a four-railed Rhino, an Arclight with a city block of bombs — and the era's signature pair: boresight heat-seekers that miss like it's 1965, and the flares that lie to them.

A crimson Starfang banking hard over the coast, afterburner lit, the seeker ring burning solid red with LOCK — R TO LAUNCH beneath it
The ring burns red, the growl goes steady. Hold it one more second.

An era is not a theater

The theaters live as separate server instances that branch at exactly three seams — config, init, step — and the working air game is pinned byte-for-byte by a golden test. A time period had to respect all of that while being orthogonal: any theater, any era. So an era is a config rewrite (swap aircraftTypes for the era roster, stamp world.era) plus exactly one gated system: stepJetsEra, one line in each theater's ordnance block, whose first act is to return if the era is off. With the flag unset, every WW2 wire is byte-identical — the golden test proves the whole era costs the classic game nothing. All of it lives in one file, jets.go, the same one-file discipline the naval and land theaters keep.

Missiles that miss, on purpose

The AIM-9B generation was rear-aspect only, narrow-eyed, weak-armed and unreliable — and that's the whole game design, because every failure is a counter someone can fly. The seeker only locks looking up a tailpipe. In flight it pulls a modest 14 G, which at missile speed is about 0.17 rad/s of turn — a jet in a hard low break turns three times faster and simply exits the seeker's window. Eight percent of launches never guide at all. And a flare punched while the round is in your mirrors gets one honest dice roll to steal the seeker for good.

The numbers came from the era's new balance probe (JETS_PROBE=1), which steps a bot-only jets world for twenty simulated minutes and audits every missile's fate. The shipped tuning reads: 23 launches — 8 bursts, 10 seduced by flares, the rest lost to the gimbal or the clock. Kills per launch landed near 0.1, which is honestly a little generous to 1965.

A heat-seeker's thin trail arcing away over the Brick Gulf islands moments after launch
Fox two over the Gulf. One rail lighter; the chips under the ring keep the count.

What the probe caught (mostly: me)

The first probe run was a massacre with no shooting: 41 of 65 deaths were jets flying into the ground. The WW2 bot brain's terrain margins were tuned for 100 m/s props; at 250 m/s the pull-up bit a ridge too late, every time. The era now layers jet reflexes under the classic brain — longer lookahead, a stall floor, an earlier bounds turn.

The second run had jets flying beautifully and zero kills of any kind between planes — for ten straight minutes. Two bugs of mine, stacked. My missile-hunting override flew pure pursuit (the only geometry that winds a boresight lock) but held a timid throttle and hogged the trigger, so chases never closed into gun range and nobody ever fired. And my first flare model re-rolled seduction every quarter second at 75% — which is not a countermeasure, it's an immunity spell. Now a flare gets one roll per pop, the chase runs full burner, and inside gun range the classic lead-computing brain takes the trigger back. Guns stay the finisher; the missile is the reach.

The third catch was arithmetic: the original motor (720 m/s, a 2.2 s burn) could not physically catch a full-throttle Rhino launched from 1400 m astern — work the closure integral and it falls short. The motor now burns three seconds to 800 m/s, and the bots launch from inside eleven hundred where the math actually closes.

The rest of the war, aged fifteen years

The land theater already fights a missile-age war (that's what ATGMs and stabilizers are), and the gun line at sea reads as timeless in this fiction, so v1 leaves both rosters alone and lets the consequences do the era's work: jets cross the flak envelope in a third of the time but arrive fast and straight — exactly what fire control loves, and the probe still scores surface AA as the sky's top killer, same as the prop war. The design doc (docs/early-jets-era.md) carries the menu for the next passes: SA-2-style SAM rings that teach altitude bands, radar picket ships with an RWR chirp, missile boats with chaff, and — since the seam is just a roster plus a mechanics block — other periods entirely.

Fly it: a combined-arms server with -era jets, then R to launch a wound-up lock and L when the wingman screams. The lock ring is server-truth, the growl is the seeker's, and the break still beats the missile — exactly like 1965.