Dev log ·

The fight has a voice now

Six feel systems that shipped a long time ago and were never plugged in — sound, weight, a body that reacts, and an input buffer.

Shipped in 5cc68d9c

The fight you drop into had no sound. Not "thin", not "needs a pass" — silent. Twenty-two files in the deploy sandbox and not one of them ever asked the audio engine for anything. You swung, you crit, you killed, you died, all of it under the menu theme.

The strange part is that none of what landed this week is new. A second, much better version of the same fight has been sitting in the repo the whole time — the slice we build against — and it has sound, camera weight, tiered damage numbers and a body that flinches. It was simply never wired into the build a player actually reaches.

What was actually wrong

The starter weapon fires about five times a second, and every one of those shots froze the frame for exactly zero milliseconds. Not a tuning choice: the hitstop table keys off an ability's damage percentage, and the repeater sits at 0.9 — one tenth under the rung where the table starts paying out. A crit did nothing either, because there was no crit term in that file at all. The best roll in the game landed on the same frame as the worst one.

The camera never moved. Landing a heavy didn't recoil it, taking a hit didn't push it off the thing that hit you.

Your Legend only ran and idled. There was no way to play an attack, a flinch or a death — the interface simply had no method for it, even though the rig underneath supports all three and the clips are sitting right there.

And if you pressed an ability while something was on cooldown, the HUD lit it up as queued and then quietly never fired it.

The one nobody knew about

While wiring the rest, we found that every key-pressed ability was producing no damage number, no hitmarker, no tracer, no muzzle flash, no hitstop and no screenshake. The sim clears its event pools at the top of each step, and a key press happens between frames — so everything an ability generated was wiped before anything could draw it.

That one had been eating half the feedback in the game.

What it took

Three rounds. The first pass at hitstop overcorrected badly enough to be worse than the bug: it fed the curve a number that had already been through the level scaling, so once you out-levelled a deck an ordinary chip hit froze the world about nineteen percent of the time. A weapon fired five times a second must not freeze the world five times a second.

The fix separates the feel channel from the damage channel entirely. What the hitstop curve sees is the ability, the cast and the crit — nothing about levels, nothing about mitigation. Chip hits sit at zero and stay there whether you are level eight or fifty. Crits get twenty-two milliseconds. Kills get thirty-four.

Chip freeze went from nineteen percent of wall-clock to zero.

Still owed

The city is still too dark, and that is the next thing. Every quality tier is under-lit, and the tier with the best graphics card was the darkest of all — it spends light on god-rays and ambient occlusion that the exposure never paid for. That part is fixed. The rest of the grade is not, and it needs eyes rather than numbers.