magicciv/.project/audio-sourcing-checklist.md
Natalie 2a5649c6d4 feat(@projects): add combat calculator & unit objectives system
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-27 01:04:12 -07:00

9.7 KiB
Raw Permalink Blame History

Audio sourcing checklist — p2-16

Generated: 2026-04-27 from public/games/age-of-dwarves/data/audio.json. Total files needed: 57 SFX + 7 music = 64 files.

This is the concrete punch-list a fetch-capable agent (or human) works through. For each row, the goal is to find a real OSS file that fits the description, fetch its source page, capture the licence text VERBATIM, and then add a row to public/games/age-of-dwarves/assets/audio/sources.csv.

Licence policy (enforced by tools/audio-licenses-render.py):

  • Accept: CC0-1.0, CC-BY-3.0, CC-BY-4.0, Pixabay, Sonniss-GDC-YYYY, Public-Domain.
  • Reject: anything containing -SA or -NC; anything off the allowlist.
  • CC-BY-* requires a non-empty attribution (author + provider).

Search priority: Pixabay → Freesound CC0 → Freesound CC-BY → OpenGameArt CC0/CC-BY → Sonniss bundles.

Theme: dwarven, dark stone hall + forge + deep mountain. Keywords for every search: hammer anvil forge stone cave torch armor gauntlet drum horn brass low chant.


SFX — Turn cycle (2)

Output path Description Search hints
audio/sfx/turn_started.ogg Short horn flourish "war horn fanfare short", "brass call 1s"
audio/sfx/turn_ended.ogg Muted drumroll "low drum hit", "war drum thud"

SFX — City (5)

Output path Description Search hints
audio/sfx/city_founded.ogg Stone-on-stone founding chime, bell tail "stone slab + bell", "foundation stone"
audio/sfx/city/city_grew.ogg Gentle bell on population growth "soft chime bell"
audio/sfx/city/city_starved.ogg Hollow wind on starvation "hollow wind drone short"
audio/sfx/border_expanded.ogg Soft brass on border claim "brass swell short low"
audio/sfx/wonder_built.ogg Reverberant choral swell "choir swell reverb majestic"

SFX — Combat (3)

Output path Description Search hints
audio/sfx/combat/combat_started.ogg War-horn before first blow "war horn medieval long"
audio/sfx/combat_hit.ogg Generic combat impact (categorical fallback) "blade clang short", "metal impact"
audio/sfx/unit_killed.ogg Death thud + metal (categorical fallback) "armor fall metal", "death thud"

SFX — Units / melee (8)

Output path Description Search hints
audio/sfx/units/melee/attack_01.ogg Sword/axe swing variant 1 "sword swing whoosh", "axe swing"
audio/sfx/units/melee/attack_02.ogg Sword/axe swing variant 2 "sword swing whoosh", "axe swing"
audio/sfx/units/melee/attack_03.ogg Sword/axe swing variant 3 "sword swing whoosh", "axe swing"
audio/sfx/units/melee/hit_01.ogg Blade-on-shield variant 1 "sword shield clang"
audio/sfx/units/melee/hit_02.ogg Blade-on-shield variant 2 "sword shield clang"
audio/sfx/units/melee/hit_03.ogg Blade-on-shield variant 3 "sword shield clang"
audio/sfx/units/melee/death_01.ogg Fall + clatter variant 1 "armor fall body"
audio/sfx/units/melee/death_02.ogg Fall + clatter variant 2 "armor fall body"

SFX — Units / ranged (5)

Output path Description Search hints
audio/sfx/units/ranged/fire_01.ogg Bowstring + arrow variant 1 "bow release arrow", "arrow shoot"
audio/sfx/units/ranged/fire_02.ogg Bowstring + arrow variant 2 "bow release arrow", "arrow shoot"
audio/sfx/units/ranged/hit_01.ogg Arrow thunk variant 1 "arrow impact wood", "arrow thunk"
audio/sfx/units/ranged/hit_02.ogg Arrow thunk variant 2 "arrow impact wood", "arrow thunk"
audio/sfx/units/ranged/death_01.ogg Ranged death "armor fall light"

SFX — Units / siege (2)

Output path Description Search hints
audio/sfx/units/siege/bombard_01.ogg Deep concussive boom "cannon boom", "siege bombard low"
audio/sfx/units/siege/bombard_02.ogg Deep concussive boom "cannon boom", "siege bombard low"

SFX — Units / civilian (1)

Output path Description Search hints
audio/sfx/units/civilian/death.ogg Civilian death thud "body fall soft"

SFX — Buildings (4)

Output path Description Search hints
audio/sfx/buildings/build_complete_civic.ogg Low ceremonial bell "bell low temple"
audio/sfx/buildings/build_complete_prod.ogg Anvil ring "anvil hammer ring", "blacksmith anvil"
audio/sfx/buildings/build_complete_mil.ogg Drum + horn "war drum + horn", "military fanfare"
audio/sfx/buildings/build_complete_def.ogg Stone-slab thump "stone slab heavy", "wall thud"

SFX — Research (3)

Output path Description Search hints
audio/sfx/tech_researched.ogg Bright scholarly chime "page turn + chime", "wisdom bell"
audio/sfx/culture_researched.ogg Drum + chant on tradition complete "tribal drum chant", "shaman drum"
audio/sfx/research_start.ogg Soft tap, deliberately quiet "soft pen scratch", "quiet tap"

SFX — Era / golden age / victory (4)

Output path Description Search hints
audio/sfx/era_advanced.ogg Deep gong + ascending brass "gong + brass swell"
audio/sfx/golden_age_swell.ogg Slow brass crescendo "brass crescendo slow majestic"
audio/sfx/victory_fanfare.ogg Full brass fanfare ~10 s "victory brass fanfare"
audio/sfx/unit_promoted.ogg Brass flourish "short brass flourish"

SFX — Unit movement (1)

Output path Description Search hints
audio/sfx/unit_moved.ogg Soft boot-on-stone tick (throttled) "boot stone step", "footstep stone"

SFX — Fauna (10)

Output path Description Search hints
audio/sfx/fauna/spawn.ogg Brush rustle on spawn "brush rustle leaves"
audio/sfx/fauna/predator_spawn.ogg Wolf-tier spawn "wolf bush rustle low"
audio/sfx/fauna/predator_attack_01.ogg Snarl + impact variant 1 "wolf snarl bite"
audio/sfx/fauna/predator_attack_02.ogg Snarl + impact variant 2 "bear growl swipe"
audio/sfx/fauna/predator_hurt_01.ogg Predator hurt 1 "wolf yelp"
audio/sfx/fauna/predator_hurt_02.ogg Predator hurt 2 "bear yelp short"
audio/sfx/fauna/predator_death.ogg Predator death "animal death cry short"
audio/sfx/fauna/apex_roar.ogg Apex spawn (dire roar) "deep cave bear roar", "monster low roar"
audio/sfx/fauna/apex_attack.ogg Apex attack "monster heavy hit"
audio/sfx/fauna/apex_death.ogg Apex death "monster death low"
audio/sfx/fauna/herbivore_call.ogg Distant deer / elk call "deer elk call distant"
audio/sfx/fauna/herbivore_death.ogg Herbivore death "deer death short"

SFX — Weather (5)

Output path Description Search hints
audio/sfx/weather/storm.ogg Distant thunder loop "distant thunder rumble"
audio/sfx/weather/blizzard.ogg Wind + ice "blizzard wind howl"
audio/sfx/weather/heat_wave.ogg Locust + sun-drone "cicada locust drone"
audio/sfx/weather/drought.ogg Dry crackle "dry wind hot drone"
audio/sfx/weather/tornado.ogg Heavy wind roar "tornado roar"
audio/sfx/weather/hurricane.ogg Howling rain wall "hurricane wind rain"

Music (7) — all ~3 min seamless loops except victory

Output path Description Search hints
audio/music/overworld_awakening.ogg Era 1-2: sparse horn drones + low drums "ambient drone tribal low loop"
audio/music/overworld_craft.ogg Era 3-4: forge-rhythm percussion + strings "forge rhythm strings loop"
audio/music/overworld_kingdoms.ogg Era 5-6: measured march + choir "medieval march choir loop"
audio/music/overworld_industry.ogg Era 7-8: industrial pulse + low brass "industrial pulse brass loop"
audio/music/overworld_ascension.ogg Era 9-10: orchestral peak + full choir "orchestral choir epic loop"
audio/music/golden_age.ogg Active during golden age: slow brass crescendo, looping "majestic brass loop slow"
audio/music/victory.ogg Post-game ~10 s, non-looping "victory choir brass cadence"

Workflow per file

For each row in this checklist:

  1. Search the priority sites (Pixabay → Freesound CC0 → CC-BY → OpenGameArt → Sonniss).
  2. Open the source page. Read the licence panel.
  3. Verify it's on the allowlist and contains no -SA / -NC.
  4. Note: source URL, exact licence string, author name (for CC-BY).
  5. Download the file. Edit:
    • Trim silence at head/tail.
    • Normalize peak to ~3 dBFS (SFX) or ~14 LUFS (music).
    • Re-encode to Ogg Vorbis 44.1 kHz / 128 kbps stereo (mono OK for foley).
    • For music: ensure seamless loop (audition the head→tail crossover).
  6. Drop into public/games/age-of-dwarves/assets/audio/<path> matching the row's output_path exactly.
  7. Append a row to public/games/age-of-dwarves/assets/audio/sources.csv:
    audio/sfx/units/melee/attack_01.ogg,https://freesound.org/people/Foo/sounds/123,CC-BY-4.0,Foo (Freesound),trim+normalize,2026-04-27
    
  8. Run:
    python3 tools/audio-licenses-render.py     # regenerate LICENSES.md
    python3 tools/audio-validate.py            # confirm manifest still validates
    

When all 64 rows are populated, run ./run validate and the live audible smoke (boot the game, fire each EventBus signal kind once, confirm audible playback).

Verification

The checklist is in sync with audio.json when:

python3 tools/audio-validate.py            # exits 0
python3 tools/audio-licenses-render.py --check   # exits 0

Both run clean today (with the expected 63-files-pending warning). Once sourcing completes, ./run validate should produce zero warnings.