diff --git a/docs/re/structures/movie-subtitles.md b/docs/re/structures/movie-subtitles.md index a2b2be29..a7ca8e40 100644 --- a/docs/re/structures/movie-subtitles.md +++ b/docs/re/structures/movie-subtitles.md @@ -176,3 +176,27 @@ data** (mission scripts / `GP_MAIN_GAME` IDXD tables), not in the text pack. Whe reversing mission data, look for demo-id references there to bind dialogue to events; the IDXD "Message" schema records also carry `Character` (speaker) and `Face` (portrait) per line. + +## ✅ `DEMO_*` in a message's voice slot is NOT a sound bank + +The dialogue message tables put a token in what reads as a voice slot, and 296 +distinct ones are spelled `DEMO_*` rather than `VOICE_*`. They do not name audio: + +| token family | distinct | resolve in `sound.pak` | +|---|---|---| +| `VOICE_*` | 4443 | **4175** — 2360 under `eng\Voice\`, 1815 under `eng\etc\` | +| `DEMO_*` | 296 | **0** | + +Zero resolve under any of the three directories (`Movie`, `etc`, `Voice`), and +prefixing the convention — looking up `VOICE_DEMO_nnn` — resolves **0 of 296** +too. So the slot is not "the voice bank" but something that can hold either a +bank reference or a demo reference. + +🟡 The tokens run `DEMO_000` … `DEMO_310`, **287 distinct in [0, 310]** — a dense +sequential id space, which is the shape of the demo id this file already uses in +`MSG_DEMO___` caption keys. **I did not confirm the overlap**: +those keys live in the IXUD wide-string blocks and the scan above only walked +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.