The Pilgrims' Camp had bodies in it. It didn't have sound.
You walked through a stockade of sleeping survivors in total silence, opened a shop that made no noise, picked up a sword that made no noise, and stood by a bonfire you could see but not hear. This round gave the game its ears — and then spent most of its time on the small, unglamorous corrections that turn a pile of audio files into a place.
227 sounds, and the one that mattered most
The library went in at 227 clips across 86 groups: combat foley, item handling, UI, three vendor voices, camp chatter, and eleven music tracks. All of it is regenerable — the raws live beside the project and a script re-derives every shipped file, so nothing is hand-edited and nothing is precious.
The interesting problem wasn't generating them. It was that the generator has a one-second minimum, and most of these sounds want to be a fifth of that. A coin chink is 0.2 seconds. A UI tap is 0.1. Every file arrived as mostly silence with the actual sound buried somewhere inside it — and that silence isn't harmless, because the game plays the file, not the sound, so the click you hear lands late.
So the pipeline trims each file to the part that matters: find the first and last sample above a threshold set relative to that file's own peak, cut to it, fade the edges so they can't click, and normalise. A one-second sword swing came out at 137 milliseconds.
Two sounds are exempt, and the second one is the interesting exemption. Loops obviously can't be trimmed — cutting an ambience bed destroys the seam it was built to have. But the heavy skeleton's slam carries 618 milliseconds of deliberate silence at the front, because it's played at the start of the wind-up so the thunk lands exactly on the damage frame. Trimming it would have silently de-synced an enemy's entire telegraph, and it would have looked like a gameplay bug months later. The tool now refuses to touch it and says why.
Sound that knows what it's touching
Picking things up used to make one noise regardless of what it was. Now the sound tells you what you grabbed before you read the label: coin, cloth, boiled hide, plate, or a blade. Crafting is the same idea — nine different substances (ash, lye, wax, bone, oil, a tear) that all used to share one generic clink.
The routing reads the item's real armour-weight field rather than parsing its name, so renaming a base can't silently mis-route it. Two places needed overriding by hand, because a rule that's right 90% of the time is still wrong twice: a cloak is cloth at every weight (the heavy one is a weighted cape, not a plated one), and a shield is leather only at its lightest — the rest are iron and banded oak.
The camp talks

Three vendors greet you, comment when you buy, and grumble when you can't afford something. Survivors mutter to each other across the fire — and a small faint bubble appears over whoever spoke, showing the line, so an overheard voice has a body attached to it instead of arriving from nowhere.
The barks come from whichever survivor is actually near you, never from a single hidden emitter. Six lines from one spot makes a camp sound like one person talking to themselves, which is worse than silence. And a vendor speaking now cuts the chatter mid-word: two voices at once reads as a bug, not as atmosphere.
One rule made this work at all, and it's a single number. The engine randomises pitch by ±8% on every sound so repeated sword hits don't grate. That's exactly right for foley and a disaster on a human voice — ±8% is about a semitone and a half, so the same character reads as a different person every line. Voice now goes through its own call that forces that to zero, so it cannot be forgotten at a call site.
Music, and the thing that couldn't play it
Eleven tracks landed, and none of them could play. The sound system spawns a temporary object per effect, places it in the world, and destroys it when the clip ends — so a thirty-second music bed would have played once, from a fixed point in space, fading as you walked away.
Music needed its own player: a persistent one with two independent crossfading channels, so ambience and score can change on different beats. Zone ambience rides one, the soundtrack rides the other, and they play together.
Two bugs surfaced there that no compiler would ever have caught. A utility scene loads invisibly alongside every zone, and because it has no ambience of its own it was clearing the bed the real zone had just started — leaving a source holding the right audio, playing, at volume zero, forever. And the player object was flagged in a way that survives leaving play mode, so every test run stacked another copy on top of the last, quietly inflating the very levels being judged.
Both were found by asking the running game what it thought was playing, rather than by reading the code and believing it.
Everything else
The camp's exits used to highlight one at a time, so the way out read as three separate things to try; hovering any of them now lights all three. Escape closes an open window without also opening the game menu. Clicking a shopkeeper no longer swings your sword at them. Walking into scenery no longer vaults it — that's Space now, deliberately, as an anti-stuck escape rather than something the movement code decides for you.
The shop became a grid of item boxes like the bag and the stash, at the same size as every other window, because reading a list of names is not how you shop in a game about pictures of swords. Item tooltips became a real widget with an icon, per-line colour, and a comparison against what you're wearing.
And three survivors now carry torches, with an idle animation to match. That took two attempts: the first grip was derived while the character stood in its default pose rather than its actual idle, which put the torch at 120 degrees from vertical — pointing at the ground. Measuring the pose that's actually playing fixed it. There's now a small tuning window for the grip, because that's the kind of thing that needs an eye, not a number.
The waypoint's four bowl-flames were rotated half a bowl off, sitting between the braziers instead of in them. The old placement measured the platform's bounding box, which gives you a radius and never an angle — so the flames had been placed on an assumed square the prop never had. Reading the actual mesh put them where they belong.
---
Next: a way back to town from wherever you're standing, more monster variety, and the thing the cathedral has been waiting for.