feat(audio): Add defeat-themed music tracks (culture, domination, economic, science) and update audio configurations for victory conditions

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
autocommit 2026-04-29 13:13:23 -07:00
parent 4cfedd96aa
commit a5c616f8aa
9 changed files with 74 additions and 9 deletions

View file

@ -673,6 +673,46 @@
"era_range": null,
"mood": "triumph",
"description": "Economic victory B \u2014 Junkala Exploration 'Prairie Nights'."
},
{
"id": "defeat_domination",
"stream": "audio/music/defeat_domination.ogg",
"volume_db": -6.0,
"bus": "Music",
"loop": false,
"era_range": null,
"mood": "lament",
"description": "Defeated by domination \u2014 Junkala Action 'Encounter With The Witches', ominous."
},
{
"id": "defeat_culture",
"stream": "audio/music/defeat_culture.ogg",
"volume_db": -6.0,
"bus": "Music",
"loop": false,
"era_range": null,
"mood": "lament",
"description": "Defeated by culture \u2014 Junkala Calm 'Peaceful Days', wistful."
},
{
"id": "defeat_science",
"stream": "audio/music/defeat_science.ogg",
"volume_db": -6.0,
"bus": "Music",
"loop": false,
"era_range": null,
"mood": "lament",
"description": "Defeated by science \u2014 Junkala Exploration 'Sneaking Around', left behind."
},
{
"id": "defeat_economic",
"stream": "audio/music/defeat_economic.ogg",
"volume_db": -6.0,
"bus": "Music",
"loop": false,
"era_range": null,
"mood": "lament",
"description": "Defeated by economic \u2014 Junkala Calm 'Sand Castles', transient ambition."
}
],
"crossfade_seconds": 2.0,
@ -699,6 +739,13 @@
"score": [
"victory"
]
},
"defeat_pool": {
"domination": ["defeat_domination"],
"culture": ["defeat_culture"],
"science": ["defeat_science"],
"economic": ["defeat_economic"],
"score": ["defeat"]
}
}
}

View file

@ -1,13 +1,13 @@
{
"generated_at": "2026-04-29T17:04:57Z",
"generated_at": "2026-04-29T20:06:03Z",
"totals": {
"done": 107,
"oos": 20,
"stub": 1,
"partial": 12,
"missing": 12,
"done": 109,
"in_progress": 1,
"total": 153
"missing": 12,
"partial": 11,
"stub": 1,
"total": 154
},
"objectives": [
{
@ -850,6 +850,16 @@
"updated_at": "2026-04-27",
"summary": "During p1-29 Round 3-5, warcouncil added a per-yield difficulty multiplier framework (gold_mult, culture_mult, luxury_mult, research_mult, production_mult, yield_per_turn_growth) plus a symmetric player handicap (Easy = player gets Hard-AI bonuses). Per Rail-1, the multiplier APPLICATION should live in Rust crates, not in GDScript turn_processor.gd / economy.gd / turn_processor_helpers.gd.\n\n**Gold yield port: DONE 2026-04-27.** `EconomyParams.yield_mult` field added to `api-gdext/src/lib.rs:2962-2992` with serde default 1.0; `GdEconomy::process_turn` now scales gross income before netting expenses. GDScript `economy.gd::_build_params_json` injects `yield_mult` from `GameState.get_effective_yield_mult(player, \"gold\")`; the GDScript-side multiplication is deleted. Validated via 10-seed Hard batch `.local/iter/p1-31-r5-hard-20260427_044618/` — 4/5 quality gates PASS (up from 3/5), clan diversity up from 3 to 5 distinct winners.\n\n**Research yield port: DONE 2026-04-27.** Added `process_research(player_json, yield_json, sci_modifier)` passthrough at `knowledge_web.gd:152` (delegates to `_bridge.call(\"process_research\", ...)`) and exposed at `tech_web.gd:39`. Refactored `turn_processor.gd::_process_research:143` to delegate fully — assembles JSON inputs (player_dict + per-city yields_arr), calls `tw.process_research()`, only handles completion side-effects (school_locked emit, _form_high_archon, tech_researched signal, resource reveals). No Rust rebuild needed (GdTechWeb::process_research already had sci_modifier as a direct parameter; only the wrapper-layer plumbing was missing).\n\nValidation: `.local/iter/p1-39-r6-hard-20260427_054348/` (10-seed Hard batch). 4/5 quality gates PASS: median winner_tier_peak=4.5 PASS (was 3 FAIL in R5 — research port LIFTED this), tier_peak_gap=5.0 FAIL (was 3.5 PASS — gates alternate, total still 4/5), max_peak_unit 10/10 PASS, wonders 7/10 PASS, combats 454 PASS. **All 10 games completed (vs 8/10 in R5)**, **6 distinct winners** (max diversity for 5-clan game).\n\n**Culture yield port: ATTEMPTED 2026-04-27, REVERTED.** Added `GdCity::process_culture_with_modifier(tile_yields_json, total_pct)` to api-gdext/src/lib.rs:1399 that mirrors the GDScript flow (process_culture → check raw_gain → add bonus → recheck can_expand). Math nominally identical. But R8 batch (Rust culture port) diverged from R6 (GDScript) on every seed (e.g. seed 1: R6=T251/tier=6/wonders=10, R8=T111/tier=2/wonders=0). R9 isolation batch (revert culture path on current source tree) reproduced R6 EXACTLY per-seed (`.local/iter/p1-39-r9-revert-hard-20260427_213224/`), proving the divergence is from the Rust culture path itself, NOT from other landed code (courier diplomacy, building ID reconciliation) between R6 and R7/R8. Floating-point intermediate values likely differ between the in-Rust mutation sequence and the GDScript-Variant-roundtrip mutation sequence; the difference cascades into different border-expansion timing → different tile ownership → entirely different game trajectories. Culture path REVERTED to GDScript (p1-39 stays partial — gold + research ported, culture deferred). Future port should investigate Rust f64 vs Variant FLOAT round-trip semantics, or alternative scope (e.g. apply difficulty modifier in GdCity::process_culture itself with an optional parameter, leaving the building-bonus math out of scope).\n\nThe fix for both: add `process_research` and `process_culture` passthrough methods to the GDScript wrapper layers, refactor the GDScript callers to delegate fully (matching the gold-port pattern). Estimated 2-3 hours including parity validation."
},
{
"id": "p1-40",
"title": "Collapse data/<category>/ override layer into single source of truth at resources/",
"priority": "p1",
"status": "done",
"scope": "game1",
"owner": null,
"updated_at": "2026-04-29",
"summary": "Today `public/games/age-of-dwarves/data/{units,buildings,techs}/` mirrors `public/resources/{units,buildings,techs}/` with override semantics: the loader walks resources/ first, then game/data/ overwrites by id. This created three real bugs in the last few sessions:\n1. Audit blind-spot: 9 \"missing\" buildings and 6 \"missing\" food/processing buildings turned out to live in resources/buildings bundled files that the per-file audit missed.\n2. Silent semantic drift: 14 building IDs are defined in both layers with different cost/tech/effects; the data/ version wins by accident-of-loader-order.\n3. Broken tech gates: 6 of 8 ordinary-building duplicates have `tech_required` in resources/ pointing at non-existent techs (`military_doctrine`, `smelting`, `husbandry`, `scholarship`, `ancestor_rites`, `masonry`, `mathematics`). The data/ overrides are the only thing keeping those buildings buildable.\n\nThe right architecture is one source of truth at `public/resources/<category>/`, with `public/games/<game>/` carrying only **game-pack-specific configuration** (clan personalities, setup, vocab, difficulty) and a manifest declaring which resource IDs the game subscribes to. No more override layer.\n\nThis objective is the **safe mechanical phase** — move all entity files to resources/ canonical locations and resolve the duplicates. The behavioral phase (subscription manifest + loader filter) splits to `p1-41`."
},
{
"id": "p2-06",
"title": "Export pipeline for Windows / macOS / Linux",
@ -1504,10 +1514,10 @@
"id": "p3-01",
"title": "Courier-gated diplomacy — open borders + shared maps via tech-tiered courier units",
"priority": "p3",
"status": "partial",
"status": "done",
"scope": "game1-stretch",
"owner": "envoy",
"updated_at": "2026-04-27",
"updated_at": "2026-04-29",
"summary": "Game 1 ships diplomacy-lite: peace/war toggle plus a single bilateral luxury↔gold\ntrade action (`mc-trade`). This objective expands the diplomatic surface with two\ntrade options gated on physical infrastructure rather than instant agreement, so\ninformation itself becomes a strategic resource that decays with distance and tech:\n\n1. **Open borders** — pay luxury or gold for the right to move units through\n another civ's territory for N turns. Instant effect; pure trade.\n\n2. **Shared map** — pay luxury or gold for the other civ's explored map for N\n turns. **Not instant**: the deal is gated on a courier link between capitals.\n Knowledge propagates at the courier's movement speed; the courier is killable\n mid-route (intercept = no map delivered, payment already made). The Courier\n unit family has tech-gated upgrade tiers, one per era from era_2 onward; later\n tiers shrink the delay window and shift the intercept surface from\n killing-the-unit to severing-the-infrastructure.\n\nThis is **scope: game1-stretch** — Game 1's stated scope is \"diplomacy-lite\", so\nthis objective is post-Early-Access content unless explicitly pulled forward."
},
{

View file

@ -4,13 +4,17 @@
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:** 115 files. (Empty until p2-16 sourcing begins.)
**Asset count:** 119 files. (Empty until p2-16 sourcing begins.)
## Assets
| Path | License | Source | Attribution | Edits | Added |
|------|---------|--------|-------------|-------|-------|
| `audio/music/defeat.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm6 - Innocence.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/defeat_culture.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm3 - Peaceful Days.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/defeat_domination.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/defeat_economic.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm4 - Sand Castles.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/defeat_science.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration5 - Sneaking Around.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |
| `audio/music/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 |
| `audio/music/overworld_ascension.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/overworld_awakening.ogg` | CC0-1.0 | [link](https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%232%20%5BTowns%5D%20by%20Juhani%20Junkala.zip#Town1 - Home Town.ogg) | Juhani Junkala (SubspaceAudio | OpenGameArt) | loudnorm I=-16/TP=-3+ogg 128kbps |

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -131,3 +131,7 @@ audio/sfx/weather/heat_wave.ogg,https://opengameart.org/sites/default/files/sfx_
audio/sfx/weather/drought.ogg,https://opengameart.org/sites/default/files/sfx_loops.zip#weird_03.ogg,CC0-1.0,rubberduck (OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-29
audio/sfx/buildings/wonder_built.ogg,https://kenney.nl/media/pages/assets/impact-sounds/8aa7b545c9-1677589768/kenney_impact-sounds.zip#Audio/impactWood_heavy_000.ogg,CC0-1.0,Kenney (Impact Sounds),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-29
audio/sfx/fauna/herbivore_attack.ogg,https://opengameart.org/sites/default/files/80-CC0-creature-SFX_0.zip#grunt_01.ogg,CC0-1.0,rubberduck (OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-29
audio/music/defeat_domination.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-29
audio/music/defeat_culture.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm3 - Peaceful Days.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-29
audio/music/defeat_science.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%231%20%5BExploration%5D%20by%20Juhani%20Junkala.zip#Exploration5 - Sneaking Around.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-29
audio/music/defeat_economic.ogg,https://opengameart.org/sites/default/files/JRPG%20Music%20Pack%20%234%20%5BCalm%5D%20by%20Juhani%20Junkala_0.zip#Calm4 - Sand Castles.ogg,CC0-1.0,Juhani Junkala (SubspaceAudio, OpenGameArt),loudnorm I=-16/TP=-3+ogg 128kbps,2026-04-29

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

Binary file not shown.