WARBIRDS.IO Dev Log

← All posts

Where the round actually landed

The report was one line: “anecdotally, I only ever see wings fall off.” We have a whole localized damage model — engines, wings, fuel, pilot — so that shouldn't be possible. We measured it. The report was right, twice over.

The wing that always fell off

First finding: the death animation was scripted. Every combat kill zeroed the victim's worse wing so the wreck would corkscrew down dramatically — which looked great, and meant 100% of kills showed a wing coming off no matter what actually killed the plane. The drama was drowning the model.

Second finding: the model underneath barely fired before death. Hits routed to components by weighted dice — every burst, the same 18% chance of engine, 26% wings, 6% pilot, wherever the round came from. And because a component only fails after roughly two to four planes' worth of focused damage, the lethal pool nearly always won the race: over 20,000 simulated lives under sustained fire, the engine actually died in 4.8% of them, a tank ran dry in 2.6%. The engine-out you never saw also never sounded like one: the prop spun with the throttle lever and the drone pitched with the stick, engine health be damned.

Boxes instead of dice

The fix keeps the forgiving part and replaces the blind part. Whether a round hits is still the generous sphere it always was — netcode at 12 Hz would make true-silhouette hit tests feel like the guns stopped working. But once a round connects, its travel segment is dropped into the victim's body frame and walked through real component boxes — engine, canopy, tanks, each wing, and a new one: the tail. First box the round pierces is what it broke. The boxes are the same silhouettes the client paints scorch and bullet holes on, so the thing that breaks is the thing you see break.

The distribution finally has an accent. From a probe of 40,000 sphere-passing rounds per firing solution: a dead-six chase chews the empennage (17% tail) and can't touch the engine at all — the whole fuselage shadows it, which is exactly why real fighters carried armor plate behind the seat. A head-on merge gambles the cowl and the canopy. Plunging deflection fire is the wing-taker — over half of lives under it now lose a wing panel before they die. Fly the aspect, earn the failure mode.

A cobalt Sparrowhawk falling nose-heavy with its entire empennage torn away at a charred break, the severed tailplane-and-fin cross tumbling below it
The new way to die: empennage gone at a charred break, the tail cross tumbling away, and nothing left to argue pitch with.

The tail comes off now

The empennage is a real subsystem: chew it up and the elevators and rudder go mushy together, down to a quarter authority when it's gone — the plane still weathervanes, you just can't argue with it. Saw clean through and the whole tail cross tears away, the nose falls through, and the wreck tumbles flat instead of corkscrewing. And the scripted death shear now defers to the battle: a victim whose tail you shredded sheds the tail, not a wing the animation invented. Your kills finally look like your gunnery.

No gauge for it

Deliberately, none of this adds HUD. A dead engine now windmills the prop down and drops the drone to an idle mutter at any throttle setting (a dying jet's flame shrinks the same way); a shot-away tail is a stick that stops answering; a shredded wing is a roll you have to hold against. The airframe is the instrument panel — if you can't feel it, it didn't matter.

One confession from the process: the probe that measured the “before” also caught the design doc lying — it promised a pilotLethalFrac (a cockpit hit that can kill outright) that was never actually implemented. It still isn't; the pilot heals and the canopy regrows, and that's now written down as a decision instead of hiding as an accident. The probe stays in the tree (DMG_PROBE=1), the aspect table is a logged measurement, and the next “something feels off” about damage starts from numbers.