File 11 — workshop journal · long-form

From the workshop.

Patch notes tell you what changed. This is where we write down how, and what broke on the way. Long reads, posted when there's a story worth telling. Newest entry up top.

Workshop journal 002 — 1 Aug 2026

The launcher, and three bugs that deserved better

Filed by the Svera workshopRe: v0.2.5~5 min read

— we built a front door, then went looking for what was wrong with it.

For most of this alpha, installing Svera Defense meant pulling down a 1.6 GB zip and trusting yourself to unpack it somewhere sensible. That works the way a plank across a ditch works. This build replaces it with a proper field launcher — and building it turned up three bugs that had been sitting quietly in the game the whole time, plus one we wrote ourselves that was worse than the other three together. All four are below, including the embarrassing one.

A progress bar that isn't lying

Almost every launcher you've used shows a bar that fills at a comfortable, invented rate. It's a mood light. Ours doesn't, mostly because we're the ones sitting at 3am wondering whether the transfer has died. The launcher is a torn-paper WPF app — same paper, tape and rubber stamps as the game and this site — and every number on it is real. The download line is actual byte counts off the wire: when it says 412 MB of 1.6 GB, 412 MB are on your disk.

Unpacking is where it gets fun. Instead of a spinner and the word Extracting…, the launcher streams every real file path and size into a live supply log as it writes them, under a counter ticking the genuine total — 4,326 files for this build. It scrolls far too fast to read, and that's the point: you can watch the install at the granularity it's actually happening at, and if it stops you know which file it stopped on.

The cost of telling the truth

Honesty was not free. The first working version reported every entry as it came out of the archive and ran 35.6% slower than a silent extract of the same zip — minutes of someone's evening spent rendering text nobody can read anyway. So we measured instead of guessing. Almost none of the cost was the extraction: it was the reporting standing in the way of the work — the write loop stopping to hand each filename over, the log re-laying itself out 4,326 times. Now the extractor runs flat out and the display samples it, coalescing whatever arrives between frames instead of promising to draw every line. Same paths, same counter, overhead down to 9.9%.

The bug we found in our own launcher

Here's the one we'd rather not be writing up. The launcher decides what to run after an update by reading an exe field out of the update manifest — a small JSON file it fetches from our web server — and that field went straight to the shell. Whatever the manifest said, the launcher ran. Which means the manifest, not the launcher, decided what executed on your machine: a bad file in that one spot on our server could have named anything on your disk and had it opened, with your account, on a double-click you thought was play the game.

We didn't find it by reading the code and feeling clever. We found it because a test manifest we'd typed carelessly named a C++ header file, and the launcher dutifully tried to open it. It didn't complain. It didn't check. It did as it was told, which is the whole problem. Now the name has to earn it: it must resolve to a real file ending in .exe inside the install directory. A path that climbs out of the folder, a file that isn't there, a name that isn't an executable — the launcher refuses, and offers a clean reinstall instead.

Workshop rule, now on the wall: a name that arrived over the network is data, never an instruction. It gets validated against the disk before anything acts on it.

This never reached a player build — the launcher in your hands is the fixed one. We're telling you anyway, because "we quietly patched a hole in the thing that runs code on your computer" is not a sentence anyone should keep to themselves. If we find another, you'll read about it here.

In-game corridor at wave one, vitals card and ammo readout on the HUD
The far end of the pipe. 4,326 files, one counter, and eventually this.

The screen you couldn't leave

Now the ones that were the game's fault. The server browser had a Back button that could not be pressed — not styled wrong, not occasionally missing the click, genuinely unpressable. Esc did nothing either, so once you opened the list your only exit was the taskbar.

We spent an honest hour on the button. The button was fine. The bug wasn't where it looked: the browser widget never took focus when it came up, so no key event was ever delivered to it at all. Esc wasn't being swallowed — as far as the input system was concerned that screen wasn't listening, and every fix we tried was landing on a component that already worked.

The screen takes focus when it opens now, and Esc, gamepad B and the Back button all back out of it — all three started working the moment focus was right. One cause, three symptoms.

Four players when it should have been twenty

Shorter story, same shape. Hosting capped the lobby at four players while every menu, every page and every one of our own plans said twenty. One stale default buried deep in the host menu, set long enough ago that nobody thought to look at it. It's 20 now — the number the rest of the game already believed.

Why the server browser was empty, honestly

And the one people have been politely asking about. The in-game browser has been returning nothing — not "no servers today", but structurally nothing, every time, for everyone. Here's why.

Steam's subsystem won't initialise without its appid file sitting beside the executable. Ours wasn't in the packaged build, so the game did what it's designed to do when Steam isn't available: fell back to the LAN-only subsystem and carried on without a word. That fallback can only see machines on your local network, so an internet search run through it wasn't failing — it was answering correctly, and the correct answer is nothing. The browser was never broken. It was asking a service that had no idea the internet existed.

The file ships beside the executable from this build on. Straight talk about the rest, though: our dedicated servers are direct-IP for now, so if you want a game tonight, Direct Connect is the reliable route — and it stays that way until we've had the browser under load with real players in it. Better to point you at what works than at what ought to.

What's next

Gamepad navigation in the inventory, quick-med hotkeys, and a smaller patch payload — the launcher already pulls only what changed, but there's plenty left to shave. Past that: the browser earning its place over Direct Connect, and more maps in the Bellows spirit. The whole board, in the order we intend to work it, is on the operations roadmap.

Run the launcher. Watch the counter. It's telling you the truth.

— the Svera workshop Read the 0.2.5 dispatch →

Workshop journal 001 — 31 Jul 2026

Building the Bellows — one night, twenty-five agents

Filed by the Svera workshopRe: v0.2.3 "All Hands Below"~6 min read

— how the submarine got built, and what it cost us in sleep.

The 0.2.3 cut — the Bellows, the flooding, the handling pass, the new turrets — came together in one long overnight push. We ran it like an operation: the build split into twenty-five agents, each with one system to own and a hard rule not to touch anyone else's deck. One on water. One on doors. One on nothing but the way your legs look when you sprint down a ladder. When the sun came up, the boat floated. Mostly. Here's the honest version.

Why a submarine

Horde defense lives and dies on chokepoints, and every map we'd built so far fought on a flat plane — you find the best doorway and you farm it. A submarine is the opposite of a flat plane. It's nothing but chokepoints: bulkheads, stair towers, ladder wells, a hallway exactly one shoulder wide. And it fights on the vertical — the horde above you on the mezzanine matters as much as the horde in the corridor, and the fastest route between decks is a stairwell you have to hold, not just cross. The design brief was one line: the boat is the ninth zombie. Hull quakes shake the frame and chip your health. Leaks flood the low deck. The geiger crackle in the walls isn't ambience, it's a warning.

Editor view down a narrow Bellows chokepoint toward a stair tower, spawner gizmos visible
The forward choke, mid-build — one shoulder wide on purpose. The gizmos are the spawner plumbing you never get to see.

Water that actually rises

The obvious way to flood a compartment is to script it: play a rising-plane animation, done. We didn't, because scripted water is dead water — it can't respond to anything. The bilge pool is a real reservoir: every sprung leak contributes an inflow rate, the pumps contribute an outflow, and the water level each frame is just the integral — dV/dt, summed and settled. Which means floods are emergent. A hull quake can spring a fresh leak mid-wave, and the pool doesn't jump to a new height; it starts filling faster, and you feel the timeline shift under you. Stand in the low deck doing inventory math and the water will make the argument for moving.

Editor view over the open bay from the mezzanine, character test dummies on the deck below
The bay from the mezzanine, blockout night. Those two dummies stood in for the whole squad for about six hours.

Getting a body

This patch the operator got legs. True first person — one full-body character, camera bolted to its skull — instead of the classic floating-arms rig. It sounds like a cosmetic. It is absolutely not. The floating-arms trick exists because it hides a hundred perspective sins, and the moment we committed to a real body we got to meet every one of them live: the camera clipping through your own collarbone on a crouch, sprint animations swinging the view like a bell, the memorable build where looking straight down while turning let you see the inside of your own spine. Every one of those got logged mid-playtest and fixed in the same sitting. What you keep, once it's stable, is worth all of it — look down and you're there, boots on the deck plate you're defending.

The handling pass

With a body came weight. The movement rework is openly from the Tarkov school: Q/E lean that squashes against walls instead of poking through them, breathing sway, a landing dip — and mass that means something. Load up on plates and belts and you accelerate slower, stop wider, and drag your aim through more inertia. The gun stops being a cursor. On a boat made of one-shoulder corridors, leaning around a bulkhead frame instead of stepping into the lane is the difference between a peek and an obituary.

Eight turrets, eight voices

The turret family grew to eight this cycle, and the rule we enforced was distinct voices — every emplacement has its own report, its own tracer color, its own muzzle signature. Not for flavor: for information. When the line is holding two decks below you, your ears are the only instrument you've got, and "the Scorcher is still burning its lane, but the heavy cannon has gone quiet" is a sentence you can now hear.

Same philosophy hit the arsenal menu: all 45 weapon portraits in the shop were photographed from the actual in-game models — posed one at a time in a little studio light rig, same angle, same falloff — instead of renders grabbed at whatever default angle. It took a full agent's night. The shop finally looks like a rack of real hardware instead of a spreadsheet.

War story: the 1uu doorway

Best bug of the cycle. Playtesters kept reporting that the horde would hit a breach and form a polite, motionless scrum — thirty zombies grinding into one spot of a doorway while the rest of the opening stood empty. We assumed avoidance was broken. It wasn't. The pathing was doing exactly what we told it: every zombie was routed to the breach's target point, and every one of those target points quantized to the same one-unreal-unit spot — a single 1uu convergence point in the middle of the frame. One centimetre of floor, thirty claimants. The horde wasn't stupid; it was obedient. The fix fans targets across the full width of the opening and lets avoidance do the rest — and now a breach looks like a breach: the whole doorway fails at once, which is much worse for you and much better for the game.

Blockout hallway and staircase with Boss Spawner marker text on the wall
Blockout honesty: when the wall literally says BOSS SPAWNER, you hold the stairs anyway.

Hardening the wire

Multiplayer got a quieter but bigger pass. The ammo desync — the one where your mag count and the host's mag count drifted until your rifle clicked on a round the server swore you'd spent — traced back to one root cause repeated in a dozen places: state being mutated on the wrong machine. Clients were decrementing ammo locally and the server was decrementing it authoritatively, and the two ledgers never reconciled. The fix wasn't clever; it was discipline. One machine owns the numbers. Everyone else renders them. We swept every combat-state write in the game against that rule, and a whole family of "it works in solo" bugs died in the same night.

Workshop rule, now on the wall: if a value matters to the fight, the server owns it. Clients predict; they never decide.

What's next

Controller support is the headline of the next drop — full Xbox pad support, end to end, menus included — alongside the packaged build of everything above. Past that: more maps in the Bellows spirit (spaces that fight back), and the steady grind down the road to 1.0. The wall between here and there is mostly polish, and we intend to sand it in public.

See you below decks.

— the Svera workshop Read the 0.2.3 dispatch →

Last word

That's the whole journal so far — entries 001 and 002. New entries land here when there's a story worth the paper. For the terse version of every change, the patch log has all of it; for arguing with us about any of the above, the Field Reports board is open.