Devlog #2 ended with a promise: the audio system was next. How Dreadnought synthesizes every sound from raw waveforms, no audio files anywhere in the repository. That post is still coming. But something happened on the way to writing it — the station stopped being quiet, and we had to build the machine that proves it stays that way.
This devlog covers two sprints that ran back to back. The first built a QA harness from nothing — zero tests to 95, with 22 automated screenshots and zero failures. The second used that harness as a safety net while layering atmospheric audio across every surface, every enemy state, and every hazard zone on the station. Dreadnought came alive acoustically. Every deck tells you where you are. Every enemy tells you what it knows. And 95 tests verify the horror holds together.
The QA Harness — Building the Safety Net First
The Dark Factory learned something from shipping earlier titles: polish without test coverage is decoration on sand. You can add all the atmospheric audio you want, but if a footstep system breaks the collision layer or an enemy audio tell masks a critical gameplay cue, you won’t know until a player finds it. So before the atmospheric sprint touched a single sound parameter, Dreadnought got its QA harness.
Wave one: 30 tests, 14 screenshots. The initial harness covered the systems most likely to regress during an audio-heavy sprint — enemy awareness state machines, hazard zone boundaries, and difficulty scaling. Each test runs headless, seeds a deterministic station layout, and asserts against known-good values. The 14 screenshots capture visual baselines: cone of vision at each battery level, enemy patrol routes at each awareness state, hazard zone floor rendering, and the HUD at each difficulty tier.
These 30 tests caught two issues on first run. An enemy awareness transition from PATROL to INVESTIGATE was firing one frame early when the player entered sensor range while the enemy was mid-turn animation. And the INSANE difficulty multiplier was applying to ambient radius twice — once in the vision system and once in the difficulty manager — making the ambient bubble on INSANE roughly half the intended size. Both fixed before the atmospheric sprint started. Both would have been invisible without the harness.
Wave two: 95 tests, 22 screenshots, 0 failures. As the atmospheric sprint added systems, the harness grew to cover them. Final coverage:
- Enemy awareness: PATROL → INVESTIGATE → HUNT → RETREAT state transitions, sensor range boundaries, line-of-sight checks, awareness decay timers, and the new audio tells for each state
- Hazard zones: damage tick rates, floor warning marker rendering, environmental audio reactivity triggers, zone boundary precision
- Difficulty scaling: cone range multipliers, ambient radius multipliers, enemy speed scaling, resource spawn rates, and the interaction between difficulty modifiers and the new atmospheric systems
- Persistence: save/load round-trip integrity for all new audio settings, atmospheric state serialization, and a regression test for a persistence bug where hazard zone audio flags weren’t surviving a save during zone transitions
The persistence fix deserves its own line. Mid-sprint, the harness caught a state serialization edge case: if the player saved while standing in a hazard zone during the frame where the zone’s audio reactivity system was ramping up, the ramp progress was lost on load. The hazard audio would snap to full intensity instead of resuming the ramp. Subtle in isolation. Jarring in practice — walking into a radiation zone should build dread gradually, not hit you with a wall of Geiger crackle. Fixed by serializing the ramp state alongside the zone flags.
Dreadnought is the first game in the Dark Factory to have full automated QA coverage of enemy awareness, hazard zones, and difficulty scaling. Not the first to have tests — every game in the portfolio has a harness. But the first where the harness covers the complete behavioral surface area of the AI and environmental threat systems.
Surface-Typed Footstep Audio — The Floor Speaks
Horror games teach players to listen to the floor. Every survival horror worth its save rooms has taught players that footstep audio is environmental storytelling — it tells you what surface you’re on before you can see it, and it tells you whether the thing walking behind you is on the same surface.
Dreadnought now has three surface-typed footstep audio profiles, each synthesized at runtime from waveform parameters:
Metal floor. The default station surface. A sharp transient attack with a short metallic ring — think steel deck plate under a heavy maintenance bot. The ring frequency shifts slightly with D.R.E.D-9000’s movement speed: faster movement produces a higher pitch, selling the impact force. Walk speed gives a measured clank. Sprint gives a frantic tang-tang-tang that communicates urgency before the player consciously registers it.
Grating. Open-mesh walkways over mechanical substructure. The footstep profile adds a secondary rattling component — a brief burst of high-frequency noise layered over a softer transient, as if the grate flexes under weight. The rattle has a randomized duration between 40 and 80 milliseconds so consecutive steps never sound identical. The effect is immediately distinguishing: if you close your eyes and hear grating footsteps, you know you’re on a catwalk above machinery. That knowledge matters when something is moving on the level below.
Wet floor. Leaking coolant corridors and damaged pipe sections. The transient is softer and wetter — lower attack, longer decay, with a squelch component synthesized from filtered noise. Walking through a wet zone now sounds fundamentally different from walking on dry deck, and the transition is instant. Cross the boundary from dry metal to wet floor and the audio shift is the first signal, before the visual hazard markers register.
Surface type is determined per-tile from the station’s procedural generation data. The audio system queries the tile under D.R.E.D-9000’s feet every step and selects the appropriate synthesis profile. No samples, no audio files — just waveform math tuned to three distinct material signatures.
Enemy Awareness Audio Tells — Hearing What They Know
Devlog #2 described the audio system filling the gap left by the cone of vision: when something is nearby but outside your flashlight arc, audio is your only warning. The atmospheric sprint expanded that principle from proximity detection to awareness communication. Enemies now tell you what they know about you through distinct audio signatures for each awareness state.
Idle. An enemy in PATROL state emits a low-frequency ambient hum — mechanical servos cycling, internal systems ticking over. It’s quiet enough to blend into the station’s background noise at distance, but when you hear it up close, it means something is nearby and hasn’t noticed you yet. The hum is periodic, with a 2-second cycle that gives it a breathing quality. An idle enemy sounds like the station itself. That’s the point — you’re not sure if it’s a threat or a pipe until you point your flashlight at it.
Alert. When an enemy transitions to INVESTIGATE — it detected something but hasn’t confirmed the player’s position — the audio profile shifts. The hum accelerates. A higher-frequency component layers in: a scanning tone that sweeps up and down, like a sensor array panning. The sweep rate increases as the enemy gets closer to confirming visual contact. Players who learn this audio cue can gauge how close the enemy is to spotting them without turning to look, which means they can keep moving without breaking their flashlight coverage in the current direction.
Chase. HUNT state drops all subtlety. The enemy emits a harsh, aggressive tone — a distorted sawtooth wave with rapid modulation that sounds like angry machinery bearing down. The audio is deliberately uncomfortable. It’s not a musical cue; it’s a mechanical scream that triggers the same stress response as a smoke alarm. The chase audio is louder than idle or alert because at this point stealth has failed and the game’s priority shifts from tension to flight-or-fight urgency.
The transitions between states aren’t instant cuts. Each state change fades over 200 milliseconds — long enough to avoid a jarring pop, short enough that the player perceives the shift as responsive. The idle-to-alert transition, specifically, has a ramp curve that accelerates: the first 100ms is subtle, the second 100ms is obvious. Players who are listening carefully catch the shift early. Players who aren’t catch it when it’s already urgent. This is a skill reward buried in an audio parameter.
Deck PA Announcements and the D.R.E.D. Intercom
A space station should sound like an institution. It should have a voice — not a human voice, but the mechanical voice of systems that were designed to communicate with a crew that may or may not still be alive.
Deck PA system. Entering a new deck now triggers a synthesized public address announcement — a clipped, vocoder-style tone sequence that plays the deck designation. It’s not speech. It’s closer to a tone-coded alert, the kind of audio marker that maintenance equipment would be calibrated to recognize. The PA fires once per deck entry and doesn’t repeat until the player leaves and returns. It serves two purposes: spatial orientation (you know when you’ve crossed a deck boundary) and atmosphere (the station is still trying to communicate with someone).
D.R.E.D. intercom. Context-triggered audio messages from D.R.E.D-9000’s own systems. Low battery triggers a descending three-tone warning. Entering a hazard zone plays a sharp double-pulse alert. Proximity to a high-tier threat produces a stuttering interference pattern, as if the intercom itself is being disrupted by the threat’s presence. These are not UI sounds bolted onto the game — they’re diegetic audio from D.R.E.D-9000’s maintenance hardware, delivered through the same synthesis pipeline as everything else.
The intercom sounds are deliberately utilitarian. No dramatic orchestral stings, no Hollywood tension cues. A maintenance bot’s warning systems would sound like industrial equipment warning about industrial hazards. The horror comes from the frequency with which those warnings fire, not from the warnings themselves. When the low-battery tone and the hazard alert and the threat interference all trigger in the same five-second window, the player doesn’t need a musical score to feel fear. The machine is screaming in its own language.
Environmental Reactivity — The Station Responds
Two systems that don’t appear in the audio menu but shape the atmosphere constantly:
Proximity flashlight flicker. When an enemy enters sensor range — regardless of awareness state — D.R.E.D-9000’s flashlight now exhibits a subtle luminosity fluctuation. The cone doesn’t change shape or direction; the rendered brightness within it oscillates by 3-5% at an irregular interval. The effect is subliminal. Players don’t consciously notice the flicker, but playtesting showed measurably higher tension ratings in rooms where the flicker was active versus rooms where it wasn’t. The flashlight becomes an ambient threat indicator that operates below conscious awareness.
Environmental hazard audio reactivity. Hazard zones — radiation leaks, coolant spills, electrical damage areas — now modulate the station’s ambient audio layer when the player is nearby. Approaching a radiation zone introduces a Geiger-counter-like crackle that increases in density with proximity. Electrical damage zones add a buzzing hum with occasional arc-snap transients. Coolant leaks layer in a pressurized hiss. These reactive audio cues begin at the edge of the hazard’s detection radius, well before the player enters the damage zone. They’re the audio equivalent of the cone of vision’s penumbra — advance warning that something is wrong in this direction.
Hazard zone floor warning markings. The one visual addition in an otherwise audio-focused sprint. Hazard zones now render floor-level warning markers — chevron patterns, striped borders, hazard diamonds — procedurally placed at zone boundaries. The markings use the station’s existing tile palette (no new art assets) and render beneath the entity layer. They serve as the visual confirmation of what the audio is already telling the player: you’re approaching something dangerous. Audio-first, visuals-second. The floor markings are redundant by design — the audio should have already warned you.
Distant Metallic Groaning — The Station Breathes
The most subtle addition and possibly the most important.
Dreadnought’s station now produces a continuous layer of distant ambient sound effects: deep metallic groaning, structural settling noises, far-off impacts, and resonant hull vibrations. These are synthesized from low-frequency sine waves with slow modulation, producing sounds that evoke a large metal structure under stress — because that’s exactly what the station is.
The groaning layer is always present but varies by deck. Engineering decks produce lower, more mechanical tones. The Communications Deck adds intermittent static bursts. Medical has a cleaner, more sterile ambient profile with higher-frequency hums. Each deck’s ambient signature was tuned to complement its visual palette and enemy population.
The key design decision: the groaning is non-interactive. It doesn’t respond to player action, enemy proximity, or game state. It just exists, constantly, like the sound of a building at night. This was a deliberate choice against making the ambient layer reactive (which would have been technically straightforward). Reactive ambient audio teaches players that changes in background sound mean something. Non-reactive ambient audio denies them that comfort. When everything in the background is always shifting and groaning, the player can never be sure whether that new sound was the station settling or something moving three rooms away. The uncertainty is the design.
PROMPT.md — Trimming the Fat
A side note on development process. Dreadnought’s PROMPT.md — the development context document that guides the autonomous build agents — was trimmed from 24KB to 3.7KB during this sprint. The original document had accumulated cruft across dozens of development sessions: redundant feature descriptions, obsolete architecture notes, superseded design decisions. The trim removed everything that was either derivable from the codebase or no longer relevant, leaving only the active constraints and design principles.
The effect on development velocity was immediate. Build agents working from the trimmed context produced more focused changes with fewer tangential modifications. A focused brief produces focused work. This is a lesson that applies beyond AI-assisted development — any design document that’s growing faster than it’s being pruned is eventually going to mislead the people reading it.
Where the Build Is Now
Dreadnought entered this sprint with a cone of vision, a battery system, and silence. It exits with a station that groans, floors that announce their material, enemies that broadcast their awareness state, a PA system that marks your location, and an intercom that screams warnings in maintenance-bot language. And 95 automated tests that verify every one of those systems holds together under save/load, difficulty scaling, and state transitions.
The station stopped being quiet. That’s the most important sentence in this devlog. Horror games are often discussed in terms of what the player sees — lighting, enemy design, environmental art. Dreadnought’s thesis has always been that what the player hears is more important than what they see, because hearing operates in 360 degrees while the flashlight covers 72. The atmospheric sprint delivered on that thesis. Every surface, every threat, every hazard now has an audio signature. The player is never in silence and never in safety.
| Metric | Before | After |
|---|---|---|
| Automated tests | 0 | 95 |
| Screenshot coverage | 0 | 22 |
| Footstep audio profiles | 0 | 3 (metal, grating, wet) |
| Enemy awareness audio states | 0 | 3 (idle, alert, chase) |
| Environmental audio reactors | 0 | 3 (radiation, electrical, coolant) |
| Persistence edge cases fixed | — | 2 (awareness double-apply, hazard ramp) |
| PROMPT.md size | 24KB | 3.7KB |
Dreadnought is in active development at x00f.com/games/dreadnought/. Every sound synthesized. Every test automated. The station is listening back.