re: the cue-less cutscene pages ARE the resupply lines, and they cross-check the movie work

16 of the 17 pages with an empty slot 4 belong to MSG_DEMO_600..604, whose
caption text matches, word for word, the five resupply lines documented from the
movie side as VOICE_D_450..454. Slot 4 is empty on purpose: that audio binds
through the movie path, not through a DEMO_nnn cue.

That also disposes of the '5 ids with more than one record' item -- each appears
once per stage that uses it, and the repeat counts equal the movie-slot counts
recorded independently for the matching banks: 3/3/4/4/2 both ways, 5 of 5. The
11 extra records over 138 ids are these repeats.

Worth more than closing two items: the cutscene message table and the movie
subtitle chain were decoded from different containers by different routes and
agree on the same five lines with the same multiplicities.

MSG_DEMO_500 remains: one page, KATANA, 2s, no text and no cue.
This commit is contained in:
Sylpheed RE agent
2026-08-26 04:23:52 +00:00
parent e3c5eeae58
commit ce726eaa9c
2 changed files with 43 additions and 5 deletions

View File

@@ -62,6 +62,12 @@ and which bank voices a line (`tables.pak`'s cue index — see
[`structures/sound-cue-table.md`](structures/sound-cue-table.md); 1 326 of 1 338 [`structures/sound-cue-table.md`](structures/sound-cue-table.md); 1 326 of 1 338
script message ids resolve to a `.slb`). script message ids resolve to a `.slb`).
**Also closed (2026-08-26)**: the 17 cue-less cutscene pages and the 5
duplicated `MSG_DEMO` records are one and the same thing — the resupply lines,
whose audio binds through the movie path rather than a `DEMO_nnn` cue. Their
repeat counts match the movie-slot counts recorded for `VOICE_D_450``454`, 5 of
5, from a separately decoded container.
**Still open from this**: nothing about the wrong-recording case — that was **Still open from this**: nothing about the wrong-recording case — that was
already settled in `voice-bank-leading-region.md` (generic line, correct already settled in `voice-bank-leading-region.md` (generic line, correct
binding) and my first write-up wrongly reopened it; the other five languages; and play order, since the tool prints binding) and my first write-up wrongly reopened it; the other five languages; and play order, since the tool prints

View File

@@ -71,13 +71,11 @@ reference would be.
## What this does not settle ## What this does not settle
* **17 pages have no cue** (slot 4 empty). Silent, or voiced by another route, * **`MSG_DEMO_500`** — one page, KATANA, 2 s, **no text and no cue**. A
is unmeasured. placeholder, apparently.
* **Slot 2 is `None` at all 149 records**, so what it would hold otherwise is * **Slot 2 is `None` at all 149 records**, so what it would hold otherwise is
unknown — a constant with no observed variation carries no information. unknown — a constant with no observed variation carries no information.
* **5 ids have more than one record** (`MSG_DEMO_600``604`), accounting for
the 11 extra records over 138 ids. Whether these are context variants or
duplicates was not investigated.
* **Nothing here was run.** This is a static read of the tables; the playback * **Nothing here was run.** This is a static read of the tables; the playback
order, and whether slot 3 is really the on-screen duration rather than an order, and whether slot 3 is really the on-screen duration rather than an
audio length or a delay, has not been checked against the running game. audio length or a delay, has not been checked against the running game.
@@ -87,3 +85,37 @@ reference would be.
[`../data/cutscene-message-table.txt`](../data/cutscene-message-table.txt) — [`../data/cutscene-message-table.txt`](../data/cutscene-message-table.txt) —
all 313 pages with speaker, portrait, seconds, cue and text. all 313 pages with speaker, portrait, seconds, cue and text.
Regenerate with `tools/re-capture/sound_cues.py demo`. Regenerate with `tools/re-capture/sound_cues.py demo`.
## ✅ The cue-less pages are the resupply lines — and they corroborate the movie work
**Settled 2026-08-26.** 16 of the 17 pages with an empty slot 4 belong to five
ids, and those five are exactly the resupply lines already documented from the
*movie* side in [voice-bank-leading-region.md](../voice-bank-leading-region.md).
The caption text matches word for word:
| id | speaker | line | bank |
|---|---|---|---|
| `MSG_DEMO_600` | NATALIE | "Rhino 3 has landed. Commencing resupply." | `VOICE_D_450` |
| `MSG_DEMO_601` | NATALIE | "Rhino Leader has landed. Commencing resupply." | `VOICE_D_451` |
| `MSG_DEMO_602` | NATALIE | "Resupply complete. You are cleared for take-off!" | `VOICE_D_452` |
| `MSG_DEMO_603` | TCAFSUPPLY | "All right, beginning resupply." | `VOICE_D_453` |
| `MSG_DEMO_604` | TCAFSUPPLY | "Resupply complete. Switching to take-off sequence." | `VOICE_D_454` |
This also explains the duplicate records. Each of these ids appears **once per
stage that uses it**, and the repeat counts equal the movie-slot counts recorded
independently for the corresponding banks — **5 of 5**:
DEMO_600 x3 DEMO_601 x3 DEMO_602 x4 DEMO_603 x4 DEMO_604 x2
D_450 x3 D_451 x3 D_452 x4 D_453 x4 D_454 x2
Two facts fall out:
* the **11 extra records over 138 ids** are these repeats, not an anomaly; and
* slot 4 is empty on purpose — a resupply line's audio is bound through the
**movie** path (`VOICE_D_45x`), not through the `DEMO_nnn` cue path, so there
is no cue to name.
The agreement is worth something beyond closing two items: the cutscene message
table and the movie subtitle chain were decoded separately, from different
containers, and they land on the same five lines with the same multiplicities.