fix: keep the P1-SUN motor voice at its played 1.6 pitch
The old engine_voice returned early for flame == 0 with (DRONE_LANCET, 0.8, 1.6), so the later `P1sun => 1.7` match arm was unreachable. The catalog migration mistook that arm for the played value and stored 1.7, which changed the interceptor drone's flight sound. specs.json is back to 1.6 and specs_generated.rs is regenerated. Adds missile_engine_voices_keep_their_played_values, pinning P1-SUN to (DRONE_LANCET, 0.8, 1.6) and M48N6 to (MISSILE_FLIGHT, 1.0, 0.88). The continuation and handoff text now describe the early return instead of the dead arm, and tools/airdef_assets/catalog.py gets its final newline back. Verified: gen_catalog --check and test_gen_assets, core release 195 passed + 8 scenarios (7 ignored), adapter 64 unit + 1 boundary + 5 scenarios, WASM contract 27 steps.
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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": {
|
||||
|
||||
@@ -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 ноября
|
||||
|
||||
|
||||
@@ -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`,
|
||||
|
||||
@@ -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
|
||||
return events
|
||||
|
||||
Reference in New Issue
Block a user