diff --git a/airdef-mod/src/sim/specs_generated.rs b/airdef-mod/src/sim/specs_generated.rs index 527d53c..7822424 100644 --- a/airdef-mod/src/sim/specs_generated.rs +++ b/airdef-mod/src/sim/specs_generated.rs @@ -452,7 +452,7 @@ const MISSILE_SPEC_P1SUN: MissileSpec = MissileSpec { rear: 10.0, seeker: 60.0, launch_sound: sound::DRONE_LANCET, - voice: (sound::DRONE_LANCET, 0.8, 1.7), + voice: (sound::DRONE_LANCET, 0.8, 1.6), }; impl DroneKind { diff --git a/airdef-mod/src/sim/voices.rs b/airdef-mod/src/sim/voices.rs index d15d6dd..71eeec4 100644 --- a/airdef-mod/src/sim/voices.rs +++ b/airdef-mod/src/sim/voices.rs @@ -25,3 +25,17 @@ impl MissileKind { self.spec().cold } } + +#[cfg(test)] +mod tests { + use super::*; + use super::super::catalog::sound; + + /// The catalog holds the voice that is actually played. P1-SUN has no flame, so it uses the + /// Lancet voice at 1.6; its old `P1sun => 1.7` match arm was unreachable behind `flame == 0`. + #[test] + fn missile_engine_voices_keep_their_played_values() { + assert_eq!(MissileKind::P1sun.engine_voice(), (sound::DRONE_LANCET, 0.8, 1.6)); + assert_eq!(MissileKind::M48n6.engine_voice(), (sound::MISSILE_FLIGHT, 1.0, 0.88)); + } +} diff --git a/catalog/specs.json b/catalog/specs.json index 38c3450..356285a 100644 --- a/catalog/specs.json +++ b/catalog/specs.json @@ -831,7 +831,7 @@ "rear": 10.0, "seeker": 60.0, "launch_sound": "drone.lancet", - "voice": {"event": "drone.lancet", "gain": 0.8, "pitch": 1.7} + "voice": {"event": "drone.lancet", "gain": 0.8, "pitch": 1.6} } ], "named": { diff --git a/docs/CODEX-HANDOFF.md b/docs/CODEX-HANDOFF.md index 4a8421e..8b6e036 100644 --- a/docs/CODEX-HANDOFF.md +++ b/docs/CODEX-HANDOFF.md @@ -12,9 +12,9 @@ След #91 продолжен: `catalog/specs.json` — единственная копия числовых строк дронов, ракет и комплексов; `python3 tools/gen_catalog.py` генерирует `specs_generated.rs` и -`unit_specs_generated.rs`, `--check` (CI) валит расхождение. Числа не менялись; при сверке с -литералами найден и исправлен только голос P1-SUN в JSON (1.6 → 1.7). Остаток: варианты -комплексов и игровая приёмка. +`unit_specs_generated.rs`, `--check` (CI) валит расхождение. Числа не менялись; сверка с литералами +подтвердила 1.6 как фактический голос P1-SUN (недостижимый `P1sun => 1.7` в старом match не в счёт); +на это добавлена Rust-регрессия. Остаток: варианты комплексов и игровая приёмка. ### Контрольная точка 3 ноября diff --git a/docs/CONTINUATION-2026-11-04.md b/docs/CONTINUATION-2026-11-04.md index 153161b..098b720 100644 --- a/docs/CONTINUATION-2026-11-04.md +++ b/docs/CONTINUATION-2026-11-04.md @@ -57,11 +57,13 @@ именованные части и то, что каждая строка кем-то используется; `gen_catalog.py --check` уже в CI-шаге «Проверка generated assets», поэтому расхождение JSON и Rust валит сборку. -Сверка перед переносом: JSON сравнивался с литералами `632061d` по всем полям. Найдено одно -расхождение — голос P1-SUN был записан с pitch 1.6 вместо фактического 1.7 (ветка `flame == 0` -в `voices.rs`); JSON исправлен, поведение не менялось. После генерации строки сверены с прежними -литералами поле-в-поле (включая части моделей и именованные refs) — расхождений нет. Порядок -raid/save, ключи `sam`/дронов, RNG и тексты не менялись. +Сверка перед переносом: JSON сравнивался с литералами `632061d` по всем полям. Голос P1-SUN — +тонкое место: фактически играет ранний возврат `flame == 0` в старом `voices.rs` +(`(DRONE_LANCET, 0.8, 1.6)`), а `P1sun => 1.7` в `match` недостижим. Первая версия сверки ошибочно +приняла недостижимую ветку за факт и поставила в JSON 1.7 — это меняло звук перехватчика; fixup +вернул 1.6 и добавил регрессию `missile_engine_voices_keep_their_played_values` (P1-SUN и M48N6). +После генерации строки сверены с прежними литералами поле-в-поле (включая части моделей и +именованные refs) — расхождений нет. Порядок raid/save, ключи `sam`/дронов, RNG и тексты не менялись. Проверки этого этапа: `cargo test --release` ядра — **194 passed, 7 ignored** + **8 сценариев**; адаптер — **64 unit**, **1 boundary**, **5 сценариев**; `gen_catalog.py --check`, `gen_models.py --check`, diff --git a/tools/airdef_assets/catalog.py b/tools/airdef_assets/catalog.py index ddb9463..117d392 100644 --- a/tools/airdef_assets/catalog.py +++ b/tools/airdef_assets/catalog.py @@ -375,4 +375,4 @@ def sound_events(entries): events[event] = {"sounds": [{"name": f"airdef:{name}", "attenuation_distance": distance}]} if entry["far"]: events[event + "_far"] = {"sounds": [{"name": f"airdef:{name}_far", "attenuation_distance": int(distance * 1.6)}]} - return events \ No newline at end of file + return events