WARBIRDS.IO Dev Log

← All posts

The sinking the camera never watched

A week ago we wrote that the highlight reel hard-cuts to any hull going down, so the clip's tail always shows the ship it's named after. That paragraph was a lie. The cut never fired — and the reels had been quietly captioning sinkings the tape never showed, then, ranked by weight, playing nothing but them.

“It says it, but I don’t see it”

The report was two sentences: the reel's caption reads something like “Sir Loops-a-Lot sank the Crimson battleship,” but the footage under it isn't a battleship going down — and every title, all of them, is a sinking. Both halves turned out to be the same bug wearing two coats.

The stream's director keeps a log of watchable moments and cuts the twice-daily reel around them. After the last audit, every moment had to be filmed to be logged — on camera, in the frustum, at a range where it reads — with one exception we wrote down proudly: sinkings got a free pass, because the director “hard-cuts to any hull going down.” A ship takes a long ten seconds to founder, so the clip's tail would always land on it. No need to check the camera; the camera was guaranteed to be there.

Except it wasn't. A hull, the instant the server calls it dead, drops out of the director's list of things it's allowed to point at, and any vantage that's a dead ship scores −1 — below empty ocean. So the “cut to the hull” resolved, every single time, to the hottest thing that wasn't the hull: whatever dogfight was burning three kilometres away. The founder played out, gorgeously, to an audience of nobody. The reel stapled “sank the battleship” over a clip of two fighters merging, and called it a highlight.

Convert the feeling into a number

The house rule is that a bug report is a feeling until it's a number, so we pointed a headless spectator at a fleet-action server and logged, for every sinking, how far the camera actually was from the hull as it went under. Three ships went down in the sample. The camera's distance to each one at the moment it was logged: 6.5 kilometres, 4 kilometres, 3 kilometres. Not one sinking was on screen. The tape and the caption had never once agreed.

A founder cam that actually watches

The fix is a dedicated founder cam: the moment a hull goes down, the director pins an external orbit to the wreck — pushing in and lifting as she settles, aimed a touch below the waterline so the descending hull stays framed the whole way under — and holds it there for nine seconds, exactly as long as the reel's clip runs. It outranks even the establishing shot; a ship breaking in half is the one thing on the map that gets to interrupt anything.

And now the sinking earns its log entry the honest way. Instead of a blind free pass, a sink is recorded only if the founder cam actually took the frame — a stricter test than the frustum check everything else passes, because it means the shot is not just possible but happening. Two hulls going down at once? We can only point at one, so only that one is logged; the reel never captions a sinking we didn't film. Re-run the probe: three sinkings, camera 150, 156, and 157 metres from the hull — dead centre, every time.

The old code trusted a comment. The comment said “the director hard-cuts to the hull.” The director had never heard of the hull.

Not every story is a shipwreck

That fixed the caption, but not the monotony — and the monotony was its own bug, one file over. A sinking is weighted at five times a kill, which is right: it is a bigger moment. But the reel filled itself strictly best-score-first, so in any twelve hours with a few fleet actions in them, every sinking outranked every dogfight and the reel became a slideshow of ships going down — twenty-one clips, twenty-one sinkings, in a synthetic window we built to reproduce it.

This is a dogfighter first, so we said so in the numbers. Air-to-air is the show, so a plane-on-plane kill now logs at double its old weight — a lone kill out-ranks a medal, a three-kill furball out-scores a sinking — and the planner interleaves under per-family ceilings instead of pure-sorting: at each step it takes the best clip whose family (dogfights, sinkings…) is still under its share of the reel so far, falling back to the best-remaining only when nothing else qualifies. The trick is that air is capped too, at three-quarters — which is what reserves the last quarter for the ships instead of letting the dogfights crowd them out entirely. The same window that gave us twenty-one straight sinkings now cuts six sinkings to eighteen dogfights: three dogfights to every sinking, and if a stretch is genuinely all-fleet the reel still fills with what actually happened. The best ships still go down on camera; they just don't get the whole show.

Both birds, or it doesn't count

Making the reel mostly dogfights only mattered if the dogfights themselves were framed, so we pointed the same measuring stick at the air kills — and they had the sinkings' old disease. A kill was logged the instant the victim was on camera, whether or not the killer was; a probe put numbers on it — of the air kills the stream logged, one showed neither plane at all (it fired over the round-end scoreboard), and barely half held both the hunter and the prey. A caption reads “Turbo Ted downed Madame Mayday.” If Madame Mayday is a speck and Turbo Ted is off-screen, that caption is fiction.

Now an air-to-air kill has to show both birds to make the log — killer and victim — and nothing gets logged over the results card between rounds. But “both” doesn't mean cramming the pair into one flat wide shot. Ask any editor how you cover a duel and they'll tell you: a camera on the shooter, a camera on the target, and cut between them. So when two planes lock into a close tail-chase, the director now covers it — shot/reverse. One angle is over the attacker's shoulder, the shooter filling the near frame with the tracer stream running downrange to its prey. The reverse sits out ahead of the hunted plane looking back, so the defender faces camera with its pursuer charging in behind. It holds each angle a beat and a half, cuts to the opposite one, and when the kill lands it rolls straight into a slow orbit of the tumbling wreck.

The first cut of that worked, but it was still guessing: to cover a duel live you have to decide, mid-fight, whether two planes circling each other are about to produce a kill or just going to disengage — and every threshold you pick to make that call ("are they close enough, aligned enough, for long enough?") is a number you're making up. A colleague put it better than we did: stop trying to catch it live. So the 24/7 director now renders on a five-second delay. It buffers the game and plays it back a beat behind, which sounds like a downgrade until you realize what it buys: at the moment the camera is deciding what to shoot, the next five seconds have already happened and are sitting in the buffer. The kill isn't a guess anymore — it's a fact with a timestamp. The director reads it, rewinds three seconds, and opens the shot/reverse on the exact pair it knows is about to score, riding them through to the wreck. Every framing constant we'd been agonizing over — the persistence window, the closure test — simply deleted.

The proof is in what gets covered. Live, the camera cut to any promising tangle and most fizzled — one in sixteen covered fights actually ended in a kill. On the delay, it only ever covers fights it has already watched end: three for three ended on a wreck, each one a clean cut-and-reverse, the camera on the right bird 95% of the time. Same cinematography; the difference is it now points at the future because it's standing in the past.