From abe41d8c27179f73b3a196fae41b3672e149ad3c Mon Sep 17 00:00:00 2001 From: Sylpheed RE agent Date: Wed, 26 Aug 2026 02:40:10 +0000 Subject: [PATCH] =?UTF-8?q?re:=20the=20crate=20reads=201.3%=20of=20the=20g?= =?UTF-8?q?ame's=20text=20=E2=80=94=20seven=20caption=20families=20unread?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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___ key that follows it, and the other seven families use the same __ 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) Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE --- docs/re/structures/movie-subtitles.md | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docs/re/structures/movie-subtitles.md b/docs/re/structures/movie-subtitles.md index 984e97b..29e75dc 100644 --- a/docs/re/structures/movie-subtitles.md +++ b/docs/re/structures/movie-subtitles.md @@ -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___` key that follows it; the other seven +families use the same `__` 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).