diff --git a/docs/re/structures/movie-subtitles.md b/docs/re/structures/movie-subtitles.md index a7ca8e4..04a58d4 100644 --- a/docs/re/structures/movie-subtitles.md +++ b/docs/re/structures/movie-subtitles.md @@ -200,3 +200,38 @@ IDXD objects, so it found 0 of them. Confirming it needs an IXUD-aware sweep. ❔ **268 of the 4443 `VOICE_*` tokens do not resolve either.** That is a separate gap and is not explained by the `DEMO_*` finding. + +### ✅ 268 voice references on the disc name a bank that does not exist + +Resolving every `VOICE_*` token the message tables use the way the engine does — +token → `eng\sounds.tbl` for its directory → `sound.pak` — gives **4175 resolved, +268 unresolved** out of 4443 distinct tokens. + +The unresolved ones are **not** listed in `sounds.tbl` at all. Nothing is listed +and then missing from the pak: of the 4175 that *are* listed, **every one is +present**. So the gap is in the manifest, not the archive. + +By family, comparing the ids the scripts use against the ids `sounds.tbl` lists: + +| family | ids used | listed | **missing** | +|---|---|---|---| +| `VOICE_A_` | 696 `[0..772]` | 683 | 14 | +| `VOICE_B_` | 391 `[0..422]` | 383 | 8 | +| `VOICE_C_` | 429 `[0..489]` | 366 | 63 | +| `VOICE_D_` | 508 `[0..598]` | 387 | **126** | +| **`VOICE_E_`** | **44 `[0..43]`** | **0** | **44 — the whole family** | + +Two different shapes: + +* `A`/`B`/`C`/`D` lose **short runs** scattered through an otherwise dense range — + `11,12,13`, `56,57`, `181,182,183`, `389…392`. That is what cut dialogue looks + like: lines written, referenced, and never recorded. +* **`VOICE_E_` is absent entirely** — 44 ids used, none listed, no `VOICE_E_*` + anywhere in the manifest. A whole speaker or category, cut. + +**For the port:** a missing voice bank is a *retail* condition, not a decode bug. +A reimplementation must tolerate an unresolvable `VOICE_*` reference and carry on, +the same way it must tolerate `SUBTITLE_S12B.tbl` resolving in no language. + +🟡 Measured on `GP_MAIN_GAME_E.pak` and `eng\sounds.tbl` only. Whether the other +five languages drop the same ids is untested.