The Fortress — Art / Content Review

Audio Audit

Every music bed, SFX cue, ambient one-shot, and voice line that ships in the game today — grouped by where it lives, with the trigger that fires it, its length, and a ▶ button that plays it. 31 sounds across 7 groups.

Generated 2026-07-20 · sources: audio-asset-manifest.md, game-design-audio-v1.md, the shipped assets under assets/audio/, and the AudioBeds / SoundMgr / NotificationBus wiring.

How to read a row. Sound = the display name, its status pill, and the engine slot / filename (the AudioBeds MUSIC_* const or the SoundMgr cue name). Where & when it plays = the in-game trigger, read from the audio wiring. Length = the shipped clip duration. Listen = a streaming player (preload=none, so nothing downloads until you press play). Status: Live wired and audible in-game · Wiring pending file shipped, its signal not yet wired (inert bytes) · Placeholder a parked stand-in · CC0 a free/public-domain asset (all other music & SFX are Suf originals).

§1Music — Mode Beds 4 §2Music — Sub-State Beds 5 §3Music — Launcher 1 §4Combat SFX 6 §5Event / UI SFX 8 §6Ambient One-Shots 6 §7Voice (Placeholder) 1

§1Music — Mode Beds 4

The continuous bed for each surface. One plays at a time; the outgoing bed crossfades out and stops as the next comes in — music never stacks on music (Nathan 07-17). Beds are scene-driven via ScreenHost context.

SoundWhere & when it plays LengthListen
Ashen KeepLiveMUSIC_MANAGEMENT · ashen_keep.ogg The management screen — every tab. The home / keep bed, the best-covered surface. 3:25 ▶ play on site
Wandering ValeLiveMUSIC_EXPLORE · wandering_vale.ogg Explore mode, roaming the adventure map with no enemy aggro — the non-combat field bed (one per map). 2:55 ▶ play on site
Broken Gate MarchLiveMUSIC_DEFEND · broken_gate_march.ogg Defend (passive) mode — the whole siege run. Waves are 6 s apart, too tight to swap, so one track carries the fight. 2:18 ▶ play on site
Crown of AshesLiveMUSIC_VICTORY_STING · crown_of_ashes.ogg A one-shot fanfare layered over the current bed on a Fighter / Arena duel win (NotificationBus EVENT_VICTORY → AudioBeds.play_sting). The only thing that ever plays over a bed. 1:32 ▶ play on site

§2Music — Sub-State Beds 5

Beds for states that live INSIDE a scene rather than a scene change (combat, the arena, hut interiors, end-of-run reports). A caller swaps one in over the context bed and returns on clear. Delivered by Suf (batch 3); the intra-Explore wiring signals are still pending, so the files are inert until wired — auditable here.

SoundWhere & when it plays LengthListen
Vale SkirmishWiring pendingMUSIC_EXPLORE_COMBAT · explore_combat.ogg Swaps in while any enemy has aggro on you in Explore; back to the Vale bed when the threat clears. 0:58 ▶ play on site
Wandering Vale (reflective)Wiring pendingMUSIC_EXPLORE_SUMMARY · explore_summary.ogg The Explore end-of-run report screen — the Vale's instruments slowed to a weary calm. Stops the field bed, restores on exit. 3:28 ▶ play on site
Broken Gate RequiemWiring pendingMUSIC_DEFEND_SUMMARY · defend_summary.ogg The Defend end-of-run report — also where a defeat lands. The march slowed and grave; stops the march and plays this. 3:03 ▶ play on site
Arena Duel FanfareWiring pendingMUSIC_ARENA · arena.ogg The Arena one-room duel map (off the Vale's west gate) — prouder, more ceremonial than the defend march. Crown of Ashes still fires over it on the win. 2:02 ▶ play on site
Forge of Quiet HandsWiring pendingMUSIC_HUT_INTERIOR · forge_of_quiet_hands.ogg Inside a hut / cottage interior (Builder's, Woodsman's, Warrior's) — a shared cozy forge theme. Back to the Vale bed on exit. 3:28 ▶ play on site

§3Music — Launcher 1

The front door, outside the game proper.

SoundWhere & when it plays LengthListen
Launcher ThemeCC0launcher_theme.mp3 The standalone launcher and the in-editor boot picker — a low-key medieval loop with a mute toggle. Sets the tone before the player is in the game. 1:56 ▶ play on site

§4Combat SFX 6

Fired directly from combat code (SoundMgr.play_projectile_fire / play_hit_impact / play_enemy_death and the defend cues), not through the notification bus. Kept restrained — "battle SFX sensible, not too much" (Nathan).

SoundWhere & when it plays LengthListen
projectile_fireLiveprojectile_fire.ogg A tower / defender looses a projectile. 0.4 s ▶ play on site
hit_impactLivehit_impact.ogg A projectile or attack connects with an enemy. 0.35 s ▶ play on site
enemy_deathLiveenemy_death.ogg An enemy falls. 0.7 s ▶ play on site
fortress_hitLivefortress_hit.ogg The core takes damage — the walls are breached (not every hit). 2.0 s ▶ play on site
wave_startLivewave_start.ogg A new defend wave begins. 4.0 s ▶ play on site
defeatLivedefeat.ogg The fortress falls (death, not a voluntary retreat). 4.0 s ▶ play on site

§5Event / UI SFX 8

Short cues fired through NotificationBus → SoundMgr — the one bucket where a sound and its badge are decided together, once. Each cue prefers a real sample at its slot path and falls back to the procedural synth if the file is absent.

SoundWhere & when it plays LengthListen
completeLivecomplete.ogg A build, craft, research, or recruit finished. 0.8 s ▶ play on site
unlockLiveunlock.ogg A tab, building, mode, or content unlocked (a distinct reveal cue, not the generic alert). 0.7 s ▶ play on site
alertLivealert.ogg A generic modal alert or narrative beat. 0.5 s ▶ play on site
resourceCC0resource_gather.ogg Resources gained — a harvest or reward. 0.85 s ▶ play on site
gearLivegear.ogg A new gear item appeared — loot kept. 0.6 s ▶ play on site
level_upLivelevel_up.ogg A unit or armament gained a level (buildings keep the complete chime). 0.7 s ▶ play on site
milestoneLivemilestone.ogg A major beat — Take the Throne. 1.2 s ▶ play on site
footstep_hoofLivefootstep_hoof.ogg The explorer's footfall — one clop per step, emitted per footfall by the map lane (EVENT_FOOTSTEP). 1.0 s ▶ play on site

§6Ambient One-Shots 6

Sparse discrete clips played on a 6–16 s scheduler while wandering in Explore only. The management and defend pools are intentionally empty — no random noises while planning or mid-fight.

SoundWhere & when it plays LengthListen
amb_bird_chirpLiveamb_bird_chirp.ogg Sparse birdsong while wandering the wilds. 2.0 s ▶ play on site
amb_wind_gustLiveamb_wind_gust.ogg An occasional gust of wind. 4.0 s ▶ play on site
amb_branch_creakLiveamb_branch_creak.ogg A branch creaking nearby. 2.0 s ▶ play on site
amb_leavesLiveamb_leaves.ogg Leaves rustling underfoot. 1.0 s ▶ play on site
amb_crow_cawLiveamb_crow_caw.ogg A distant crow. 1.2 s ▶ play on site
amb_twig_snapLiveamb_twig_snap.ogg A twig snapping. 0.8 s ▶ play on site

§7Voice (Placeholder) 1

The voice / dialog track is parked at placeholders (Nathan: "just use placeholders… we don't need a lot"). One CC0 line ships today, fired off the same NotificationBus seam.

SoundWhere & when it plays LengthListen
recruit_readyPlaceholderrecruit_ready.ogg A recruited unit reports ready — VoiceManager plays this CC0 placeholder line via NotificationBus. 0.7 s ▶ play on site