re: the crate reads 1.3% of the game's text — seven caption families unread

movie_subtitle handles MSG_DEMO_*, the cutscene captions. Counting every IXUD
block in GP_MAIN_GAME_E.pak, that is the SMALLEST of eight families:

  MSG_ADAN   23236 keys   9801 with text   ADAN combat chatter
  MSG_RHIN   21196        8509            Rhino squadron
  MSG_TCAF   17148        6728            TCAF
  MSG_VOICE  13060        6776            in-mission scripted dialogue
  MSG_BIRD   14036        5834            Bird squadron
  MSG_ADPL   12640        4127            ADAN pilots
  MSG_ACRO    4804        2244            Acropolis
  MSG_DEMO    1252         560            cutscene captions <- the only one read
  total     107372       44579

560 of 44579 text-bearing keys = 1.3%. I report the text-bearing column rather
than raw keys because only 41.5% of keys carry text -- the rest are the empty
line slots this container pads with, and counting those would flatter the
denominator.

MSG_VOICE_* is the family the message tables reference -- the dialogue whose
voice bindings this file now analyses in detail -- and nothing in crates/
parses it. So the corpus knows which bank plays for a line it cannot read.

First step recorded: build_demo_text already pairs a text value with the
MSG_DEMO_<demo>_<page>_<line> key that follows it, and the other seven
families use the same <id>_<page>_<line> shape, so generalising the key parser
is most of the work. With a warning attached: do NOT assume the id spaces
relate, since the voice-bank id and the caption id within one message page are
different numbers.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
Sylpheed RE agent
2026-08-26 02:40:10 +00:00
parent 188d5cfdd7
commit abe41d8c27

View File

@@ -310,3 +310,36 @@ Message_044: voice = VOICE_E_012B
`VOICE_C_468``MSG_VOICE_C_385`, `VOICE_D_182``MSG_VOICE_D_152`,
`VOICE_E_012B``MSG_VOICE_E_044`. Same family letter, **different index
space**. Deriving one from the other will silently mis-pair audio and text.
## ❔ The crate reads 1.3 % of the game's text
`movie_subtitle` handles the `MSG_DEMO_*` family — the cutscene captions. That is
the **smallest of eight** caption families in the English pak, and the rest have
no reader.
Counted over every IXUD block in `GP_MAIN_GAME_E.pak`:
| family | keys | with text | what it is |
|---|---|---|---|
| `MSG_ADAN` | 23 236 | **9 801** | ADAN combat chatter |
| `MSG_RHIN` | 21 196 | **8 509** | Rhino squadron chatter |
| `MSG_TCAF` | 17 148 | **6 728** | TCAF chatter |
| `MSG_VOICE` | 13 060 | **6 776** | in-mission scripted dialogue |
| `MSG_BIRD` | 14 036 | **5 834** | Bird squadron chatter |
| `MSG_ADPL` | 12 640 | **4 127** | ADAN pilots |
| `MSG_ACRO` | 4 804 | **2 244** | Acropolis |
| **`MSG_DEMO`** | **1 252** | **560** | **cutscene captions — the only one read** |
| **total** | **107 372** | **44 579** | |
**560 of 44 579 = 1.3 %.** (41.5 % of keys carry text; the rest are the empty
line slots this container uses for padding, so the "with text" column is the
honest denominator.)
`MSG_VOICE_*` is the family the message tables reference — the dialogue whose
voice bindings are analysed above — and nothing in `crates/` parses it.
▶️ **First step:** `movie_subtitle::build_demo_text` already pairs a text value
with the `MSG_DEMO_<demo>_<page>_<line>` key that follows it; the other seven
families use the same `<id>_<page>_<line>` shape, so generalising the key parser
is most of the work. ⚠️ Do **not** assume the id spaces relate — the voice-bank
id and the caption id in one message page are different numbers (above).