feat(@projects/audio): add victory audio tracks

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-04-28 17:50:20 -04:00
parent 4bcae0a13f
commit fd9640ade7
29 changed files with 245 additions and 11 deletions

View file

@ -938,7 +938,7 @@ export function AudioSystemPage(): React.ReactElement {
return (
<Page>
<Back to="/"> back</Back>
<Title>Audio system v2</Title>
<Title>Audio system</Title>
<Sub>
One engine, many packs · {Object.keys(manifest.sfx).length} SFX +
{" "}{manifest.music.tracks.length} music tracks · live read of{" "}

View file

@ -4,7 +4,7 @@
Each row records one `.ogg` shipped under `public/games/age-of-dwarves/assets/audio/`. Licence policy: CC0 / CC-BY 3.0 / CC-BY 4.0 / Pixabay / Sonniss-GDC-YYYY / Public-Domain accepted. ShareAlike (`-SA`) and NonCommercial (`-NC`) are rejected by the renderer.
**Asset count:** 70 files. (Empty until p2-16 sourcing begins.)
**Asset count:** 90 files. (Empty until p2-16 sourcing begins.)
## Assets
@ -18,6 +18,16 @@ Each row records one `.ogg` shipped under `public/games/age-of-dwarves/assets/au
| `audio/music/overworld_industry.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%232%20%5BTowns%5D%20by%20Juhani%20Junkala.zip#Town3 - Sunshine Coast.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/overworld_kingdoms.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%232%20%5BTowns%5D%20by%20Juhani%20Junkala.zip#Town4 - Bazaar.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action3 - Preparing For Battle.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory_culture_a.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm1 - A Place I Call Home.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory_culture_b.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm2 - Childhood Friends.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory_culture_c.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm5 - Summer Memories.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory_domination_a.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action3 - Preparing For Battle.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory_domination_b.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action1 - Encounter With The Witches.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory_domination_c.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action2 - Army Approaching.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory_economic_a.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration1 - Grasslands.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory_economic_b.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration4 - Prairie Nights.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory_science_a.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration3 - Tha'el Mines.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/victory_science_b.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration6 - Tropical Island.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/sfx/border_expanded.ogg` | CC0-1.0 | [link](https://github.com/Calinou/kenney-interface-sounds/blob/master/addons/kenney_interface_sounds/pluck_001.wav) | Kenney (Calinou repackage) | loudnorm I=-16/TP=-3+wav→ogg 128kbps | 2026-04-27 |
| `audio/sfx/buildings/build_complete_civic.ogg` | CC0-1.0 | [link](https://github.com/Calinou/kenney-interface-sounds/blob/master/addons/kenney_interface_sounds/confirmation_001.wav) | Kenney (Calinou repackage) | loudnorm I=-16/TP=-3+wav→ogg 128kbps | 2026-04-27 |
| `audio/sfx/buildings/build_complete_def.ogg` | CC0-1.0 | [link](https://kenney.nl/media/pages/assets/impact-sounds/8aa7b545c9-1677589768/kenney_impact-sounds.zip#Audio/impactPlate_heavy_002.ogg) | Kenney (Impact Sounds) | loudnorm I=-16/TP=-3+ogg 128kbps | 2026-04-27 |
@ -72,13 +82,23 @@ Each row records one `.ogg` shipped under `public/games/age-of-dwarves/assets/au
| `audio/sfx/weather/drought.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/sfx_loops.zip#noise_03.ogg) | rubberduck (OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps | 2026-04-27 |
| `audio/sfx/weather/heat_wave.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/sfx_loops.zip#noise_02.ogg) | rubberduck (OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps | 2026-04-27 |
| `audio/sfx/weather/hurricane.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/sfx_loops.zip#ambient_02.ogg) | rubberduck (OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps | 2026-04-27 |
| `audio/sfx/weather/storm.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/sfx_loops.zip#rain.ogg) | rubberduck (OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps | 2026-04-27 |
| `audio/sfx/weather/storm.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/sfx_100_v2.zip#sfx100v2_thunder_01.ogg) | rubberduck (OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps | 2026-04-28 |
| `audio/sfx/weather/tornado.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/sfx_loops.zip#ambient_03.ogg) | rubberduck (OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps | 2026-04-27 |
| `audio/sfx/wonder_built.ogg` | CC0-1.0 | [link](https://kenney.nl/media/pages/assets/impact-sounds/8aa7b545c9-1677589768/kenney_impact-sounds.zip#Audio/impactBell_heavy_001.ogg) | Kenney (Impact Sounds) | loudnorm I=-16/TP=-3+ogg 128kbps | 2026-04-27 |
| `audio/sfx/wonder_built_own.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/fanfare_0.ogg) | Spring Spring (OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps | 2026-04-28 |
| `audio/sfx/wonder_built_rival.ogg` | CC0-1.0 | [link](https://kenney.nl/media/pages/assets/impact-sounds/8aa7b545c9-1677589768/kenney_impact-sounds.zip#Audio/impactBell_heavy_002.ogg) | Kenney (Impact Sounds) | loudnorm I=-22/TP=-6+ogg 128kbps (extra-quiet for distant feel) | 2026-04-28 |
| `c/victory.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action3 - Preparing For Battle.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `ic/golden_age.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action2 - Army Approaching.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `ic/overworld_kingdoms.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%232%20%5BTowns%5D%20by%20Juhani%20Junkala.zip#Town4 - Bazaar.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `ic/victory_domination_c.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action2 - Army Approaching.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `io/music/victory_culture_b.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm2 - Childhood Friends.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `music/overworld_industry.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%232%20%5BTowns%5D%20by%20Juhani%20Junkala.zip#Town3 - Sunshine Coast.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `music/victory_culture_a.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm1 - A Place I Call Home.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `music/victory_economic_b.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration4 - Prairie Nights.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `o/music/victory_domination_b.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action1 - Encounter With The Witches.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `o/music/victory_science_b.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration6 - Tropical Island.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `sic/victory_culture_c.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm5 - Summer Memories.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `udio/sfx/wonder_built_rival.ogg` | CC0-1.0 | [link](https://kenney.nl/media/pages/assets/impact-sounds/8aa7b545c9-1677589768/kenney_impact-sounds.zip#Audio/impactBell_heavy_002.ogg) | Kenney (Impact Sounds) | loudnorm I=-22/TP=-6+ogg 128kbps (extra-quiet for distant feel) | 2026-04-28 |
| `usic/overworld_craft.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%232%20%5BTowns%5D%20by%20Juhani%20Junkala.zip#Town2 - Where Time Stands Still.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
## Encoding

View file

@ -59,7 +59,6 @@ ic/overworld_kingdoms.ogg,https://opengameart.org/sites/default/files/JRPG%20Mus
audio/music/overworld_ascension.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action1 - Encounter With The Witches.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-27
ic/golden_age.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action2 - Army Approaching.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-27
c/victory.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action3 - Preparing For Battle.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-27
audio/sfx/weather/storm.ogg,https://opengameart.org/sites/default/files/sfx_loops.zip#rain.ogg,CC0-1.0,rubberduck (OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-27
audio/sfx/weather/blizzard.ogg,https://opengameart.org/sites/default/files/sfx_loops.zip#noise_01.ogg,CC0-1.0,rubberduck (OpenGameArt),loudnorm I=-16/TP=-3+highpass+ogg 128kbps,2026-04-27
audio/sfx/weather/heat_wave.ogg,https://opengameart.org/sites/default/files/sfx_loops.zip#noise_02.ogg,CC0-1.0,rubberduck (OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-27
audio/sfx/weather/drought.ogg,https://opengameart.org/sites/default/files/sfx_loops.zip#noise_03.ogg,CC0-1.0,rubberduck (OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-27
@ -86,3 +85,24 @@ audio/sfx/fauna/herbivore_call.ogg,https://opengameart.org/sites/default/files/8
audio/sfx/fauna/herbivore_death.ogg,https://opengameart.org/sites/default/files/80-CC0-creature-SFX_0.zip#hurt_04.ogg,CC0-1.0,rubberduck (OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-27
audio/sfx/defeat_stinger.ogg,https://kenney.nl/media/pages/assets/impact-sounds/8aa7b545c9-1677589768/kenney_impact-sounds.zip#Audio/impactPlate_heavy_004.ogg,CC0-1.0,Kenney (Impact Sounds),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/defeat.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm6 - Innocence.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/sfx/wonder_built_own.ogg,https://opengameart.org/sites/default/files/fanfare_0.ogg,CC0-1.0,Spring Spring (OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
udio/sfx/wonder_built_rival.ogg,https://kenney.nl/media/pages/assets/impact-sounds/8aa7b545c9-1677589768/kenney_impact-sounds.zip#Audio/impactBell_heavy_002.ogg,CC0-1.0,Kenney (Impact Sounds),loudnorm I=-22/TP=-6+ogg 128kbps (extra-quiet for distant feel),2026-04-28
audio/sfx/weather/storm.ogg,https://opengameart.org/sites/default/files/sfx_100_v2.zip#sfx100v2_thunder_01.ogg,CC0-1.0,rubberduck (OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/victory_domination_a.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action3 - Preparing For Battle.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
o/music/victory_domination_b.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action1 - Encounter With The Witches.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
ic/victory_domination_c.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action2 - Army Approaching.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
music/victory_culture_a.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm1 - A Place I Call Home.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
io/music/victory_culture_b.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm2 - Childhood Friends.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
sic/victory_culture_c.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm5 - Summer Memories.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/victory_domination_b.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action1 - Encounter With The Witches.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/victory_culture_a.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm1 - A Place I Call Home.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/victory_culture_c.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm5 - Summer Memories.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/victory_domination_c.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action2 - Army Approaching.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/victory_culture_b.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm2 - Childhood Friends.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/victory_science_a.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration3 - Tha'el Mines.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
o/music/victory_science_b.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration6 - Tropical Island.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/victory_economic_a.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration1 - Grasslands.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
music/victory_economic_b.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration4 - Prairie Nights.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/victory_science_b.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration6 - Tropical Island.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/music/victory_economic_b.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration4 - Prairie Nights.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-28
audio/sfx/wonder_built_rival.ogg,https://kenney.nl/media/pages/assets/impact-sounds/8aa7b545c9-1677589768/kenney_impact-sounds.zip#Audio/impactBell_heavy_002.ogg,CC0-1.0,Kenney (Impact Sounds),loudnorm I=-22/TP=-6+ogg 128kbps (extra-quiet for distant feel),2026-04-28

Can't render this file because it has a wrong number of fields in line 3.

View file

@ -40,7 +40,21 @@
"stream": "audio/sfx/wonder_built.ogg",
"volume_db": -3.0,
"bus": "SFX",
"description": "Reverberant choral swell announcing a completed wonder."
"description": "Generic wonder-built cue — fallback when neither own/rival variant resolves."
},
"wonder_built.own": {
"stream": "audio/sfx/wonder_built_own.ogg",
"volume_db": -2.0,
"bus": "SFX",
"fallback": "wonder_built",
"description": "Triumphant brass fanfare when YOUR wonder completes (~5s, full ensemble)."
},
"wonder_built.rival": {
"stream": "audio/sfx/wonder_built_rival.ogg",
"volume_db": -8.0,
"bus": "SFX",
"fallback": "wonder_built",
"description": "Distant ominous bell when a rival wonder completes (short, restrained, somewhere else in the world)."
},
"era_advanced": {
"stream": "audio/sfx/era_advanced.ogg",
@ -435,9 +449,90 @@
"era_range": null,
"mood": "lament",
"description": "Defeat screen music, plays once when the human player is eliminated."
},
{
"id": "victory_domination_a",
"stream": "audio/music/victory_domination_a.ogg",
"volume_db": -6.0, "bus": "Music", "loop": false, "era_range": null,
"mood": "triumph",
"description": "Domination victory variant A — Junkala 'Preparing For Battle'."
},
{
"id": "victory_domination_b",
"stream": "audio/music/victory_domination_b.ogg",
"volume_db": -6.0, "bus": "Music", "loop": false, "era_range": null,
"mood": "triumph",
"description": "Domination variant B — Junkala 'Encounter With The Witches'."
},
{
"id": "victory_domination_c",
"stream": "audio/music/victory_domination_c.ogg",
"volume_db": -6.0, "bus": "Music", "loop": false, "era_range": null,
"mood": "triumph",
"description": "Domination variant C — Junkala 'Army Approaching'."
},
{
"id": "victory_culture_a",
"stream": "audio/music/victory_culture_a.ogg",
"volume_db": -6.0, "bus": "Music", "loop": false, "era_range": null,
"mood": "triumph",
"description": "Cultural victory A — Junkala Calm 'A Place I Call Home', wistful + settled."
},
{
"id": "victory_culture_b",
"stream": "audio/music/victory_culture_b.ogg",
"volume_db": -6.0, "bus": "Music", "loop": false, "era_range": null,
"mood": "triumph",
"description": "Cultural victory B — Junkala Calm 'Childhood Friends'."
},
{
"id": "victory_culture_c",
"stream": "audio/music/victory_culture_c.ogg",
"volume_db": -6.0, "bus": "Music", "loop": false, "era_range": null,
"mood": "triumph",
"description": "Cultural victory C — Junkala Calm 'Summer Memories'."
},
{
"id": "victory_science_a",
"stream": "audio/music/victory_science_a.ogg",
"volume_db": -6.0, "bus": "Music", "loop": false, "era_range": null,
"mood": "triumph",
"description": "Science victory A — Junkala Exploration 'Tha'el Mines', discovery vibe."
},
{
"id": "victory_science_b",
"stream": "audio/music/victory_science_b.ogg",
"volume_db": -6.0, "bus": "Music", "loop": false, "era_range": null,
"mood": "triumph",
"description": "Science victory B — Junkala Exploration 'Tropical Island', mystery."
},
{
"id": "victory_economic_a",
"stream": "audio/music/victory_economic_a.ogg",
"volume_db": -6.0, "bus": "Music", "loop": false, "era_range": null,
"mood": "triumph",
"description": "Economic victory A — Junkala Exploration 'Grasslands', pastoral wealth."
},
{
"id": "victory_economic_b",
"stream": "audio/music/victory_economic_b.ogg",
"volume_db": -6.0, "bus": "Music", "loop": false, "era_range": null,
"mood": "triumph",
"description": "Economic victory B — Junkala Exploration 'Prairie Nights'."
}
],
"crossfade_seconds": 2.0,
"default_track_id": "overworld_awakening"
"default_track_id": "overworld_awakening",
"victory_pool": {
"domination": ["victory_domination_a", "victory_domination_b", "victory_domination_c"],
"culture": ["victory_culture_a", "victory_culture_b", "victory_culture_c"],
"science": ["victory_science_a", "victory_science_b"],
"economic": ["victory_economic_a", "victory_economic_b"],
"score": ["victory"]
}
}
}

View file

@ -23,7 +23,16 @@
"items": { "$ref": "#/$defs/music_track" }
},
"crossfade_seconds": { "type": "number", "minimum": 0.0, "maximum": 30.0, "default": 2.0 },
"default_track_id": { "type": "string" }
"default_track_id": { "type": "string" },
"victory_pool": {
"type": "object",
"description": "Per-victory-condition track pool. Keys are the victory_type strings the engine emits in EventBus.victory_achieved (e.g. 'domination', 'culture', 'science', 'economic', 'score'). Value is a list of track IDs from `tracks[]`; AudioManager picks one at random per win, so a player who triggers the same victory type twice across multiple games gets variation.",
"additionalProperties": {
"type": "array",
"items": { "type": "string", "minLength": 1 },
"minItems": 1
}
}
}
}
},

View file

@ -24,6 +24,11 @@ var _sfx_events: Dictionary = {}
var _music_tracks: Dictionary = {}
var _music_default_id: String = ""
var _crossfade_seconds: float = 2.0
## Per-victory-condition track pool. Keys are victory_type strings the engine
## emits (`domination` / `culture` / `science` / `economic` / `score`); each
## value is an array of track IDs from `_music_tracks`. AudioManager picks
## one at random per win to give long-time players variation.
var _victory_pool: Dictionary = {}
var _sfx_pool: Array[AudioStreamPlayer] = []
var _sfx_cursor: int = 0
@ -90,6 +95,7 @@ func load_theme(theme_id: String) -> void:
if id.is_empty():
continue
_music_tracks[id] = track
_victory_pool = (music.get("victory_pool", {}) as Dictionary).duplicate()
_loaded = true
@ -448,8 +454,33 @@ func _on_unit_destroyed(unit: Variant, _killer: Variant) -> void:
play_sfx("unit_killed")
func _on_wonder_built(_wonder_id: String, _player_index: int) -> void:
play_sfx("wonder_built")
func _on_wonder_built(_wonder_id: String, player_index: int) -> void:
# Own vs rival branching: hearing a triumphant fanfare when a rival
# civilisation builds a wonder is wrong. Pick `wonder_built.own` for
# the human player, `wonder_built.rival` for everyone else, and fall
# back to the generic `wonder_built` key if neither variant is in the
# manifest (so a half-shipped pack still produces a cue).
play_sfx_for_owner("wonder_built", player_index)
## Play an event SFX with owner-aware variant selection. The candidate
## chain is:
## <key>.own — when player_index belongs to the local human
## <key>.rival — when player_index is any non-human (including AI / wild)
## <key> — generic fallback
## play_sfx already walks the per-entry `fallback` chain, so individual
## variant entries can additionally fall back to the generic key.
func play_sfx_for_owner(key: String, player_index: int) -> void:
var suffix: String = "rival"
if player_index >= 0 and player_index < GameState.players.size():
var player: RefCounted = GameState.players[player_index] as RefCounted
if player != null and "is_human" in player and bool(player.get("is_human")):
suffix = "own"
var variant_key: String = "%s.%s" % [key, suffix]
if _sfx_events.has(variant_key):
play_sfx(variant_key)
return
play_sfx(key)
func _on_era_changed(new_era: int, _player_index: int) -> void:
@ -533,9 +564,24 @@ func _on_unit_moved(_unit: Variant, _from: Vector2i, _to: Vector2i) -> void:
play_sfx("unit_moved")
func _on_victory_achieved(_player_index: int, _victory_type: String) -> void:
func _on_victory_achieved(_player_index: int, victory_type: String) -> void:
play_sfx("victory_fanfare")
play_music("victory")
play_music(_pick_victory_track(victory_type))
## Pick a music track id for the given victory type. Looks the type up in
## `_victory_pool`; if multiple track ids are listed, picks one at random
## so a player who triggers the same victory across multiple games hears
## variation. Falls back to the manifest's "victory" track id when the
## type is unmapped, then to default_track_id.
func _pick_victory_track(victory_type: String) -> String:
if _victory_pool.has(victory_type) and _victory_pool[victory_type] is Array:
var pool: Array = _victory_pool[victory_type] as Array
if pool.size() > 0:
return String(pool[_rng.randi_range(0, pool.size() - 1)])
if _music_tracks.has("victory"):
return "victory"
return _music_default_id
## Defeat is the human-player counterpart of victory_achieved. The signal

View file

@ -0,0 +1,13 @@
# Batch 06 — quality upgrades to placeholder-tier cues, all CC0.
#
# wonder_built.own: triumphant brass fanfare (~5s) — Spring Spring CC0
# pack: https://opengameart.org/content/just-a-random-fanfare
# wonder_built.rival: somber distant bell — Kenney Impact's softer bell
# variant 002 (heavy bell with longer tail), CC0
# weather/storm: replace rubberduck rain.ogg (loop, no impact) with
# sfx100v2_thunder_01.ogg (real thunderclap), CC0
# pack: https://opengameart.org/content/100-cc0-sfx-2
audio/sfx/wonder_built_own.ogg https://opengameart.org/sites/default/files/fanfare_0.ogg CC0-1.0 Spring Spring (OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
audio/sfx/wonder_built_rival.ogg https://kenney.nl/media/pages/assets/impact-sounds/8aa7b545c9-1677589768/kenney_impact-sounds.zip#Audio/impactBell_heavy_002.ogg CC0-1.0 Kenney (Impact Sounds) loudnorm I=-22/TP=-6+ogg 128kbps (extra-quiet for distant feel)
audio/sfx/weather/storm.ogg https://opengameart.org/sites/default/files/sfx_100_v2.zip#sfx100v2_thunder_01.ogg CC0-1.0 rubberduck (OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
Can't render this file because it has a wrong number of fields in line 11.

View file

@ -0,0 +1,31 @@
# Batch 07 — Per-victory-condition music pool. All Junkala CC0.
#
# Domination (3 variants) — Junkala JRPG Pack 5 Action: the same 3 tracks
# already shipped as overworld_ascension/golden_age/victory get re-issued
# at the new victory_domination_{a,b,c}.ogg paths so the manifest's
# victory_pool can pick from them. (Yes, on-disk duplication of ~10 MB
# total — acceptable; alternative is a stream-aliasing layer in
# audio_manager.gd that's more complexity than its weight.)
#
# Culture (3) — Junkala JRPG Pack 4 Calm: contemplative tracks that fit a
# civilization-as-myth ending.
# Science (2) — JRPG Pack 1 Exploration: discovery + mystery vibe.
# Economic (2) — JRPG Pack 1 Exploration: pastoral wealth.
# Domination — re-issue from JRPG Pack 5
audio/music/victory_domination_a.ogg https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action3 - Preparing For Battle.ogg CC0-1.0 Juhani Junkala (SubspaceAudio, OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
audio/music/victory_domination_b.ogg https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action1 - Encounter With The Witches.ogg CC0-1.0 Juhani Junkala (SubspaceAudio, OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
audio/music/victory_domination_c.ogg https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%235%20%5BAction%5D%20by%20Juhani%20Junkala.zip#Action2 - Army Approaching.ogg CC0-1.0 Juhani Junkala (SubspaceAudio, OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
# Culture — JRPG Pack 4 Calm
audio/music/victory_culture_a.ogg https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm1 - A Place I Call Home.ogg CC0-1.0 Juhani Junkala (SubspaceAudio, OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
audio/music/victory_culture_b.ogg https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm2 - Childhood Friends.ogg CC0-1.0 Juhani Junkala (SubspaceAudio, OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
audio/music/victory_culture_c.ogg https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm5 - Summer Memories.ogg CC0-1.0 Juhani Junkala (SubspaceAudio, OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
# Science — JRPG Pack 1 Exploration
audio/music/victory_science_a.ogg https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration3 - Tha'el Mines.ogg CC0-1.0 Juhani Junkala (SubspaceAudio, OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
audio/music/victory_science_b.ogg https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration6 - Tropical Island.ogg CC0-1.0 Juhani Junkala (SubspaceAudio, OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
# Economic — JRPG Pack 1 Exploration
audio/music/victory_economic_a.ogg https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration1 - Grasslands.ogg CC0-1.0 Juhani Junkala (SubspaceAudio, OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
audio/music/victory_economic_b.ogg https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration4 - Prairie Nights.ogg CC0-1.0 Juhani Junkala (SubspaceAudio, OpenGameArt) loudnorm I=-16/TP=-3+ogg 128kbps
Can't render this file because it has a wrong number of fields in line 16.