re: mission scripts are readable as dialogue (2683/2683 message calls resolve)
Built-in 64's slot-0 operand is a symbol-table-1 type-6 message id, and every one of them now has caption text: 2683 of 2683 call sites across the 28 stage scripts, 1338 distinct names, no residue of any kind. This only became reachable once build_caption_text was switched to the IXUD field table (537 -> 8800 lines); before that most of these names had nothing to resolve to. Adds isl_dialogue.py plus a committed Stage 02 sample. Does not settle which recording plays for a given line, multi-page captions, or the other five languages.
This commit is contained in:
70
docs/re/structures/isl-message-dialogue-link.md
Normal file
70
docs/re/structures/isl-message-dialogue-link.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# ISL `request_script_message` → caption text
|
||||
|
||||
**✅ Settled 2026-08-26.** Every mission-script message call resolves to the
|
||||
dialogue line it plays. The 28 stage scripts are readable as dialogue.
|
||||
|
||||
## The link
|
||||
|
||||
Built-in **64** (`request_script_message`) takes one operand in slot 0: a
|
||||
two-word symbol reference into **symbol table 1**. The symbol's name is a
|
||||
message id such as `MSG_VOICE_D_257`. The text lives in the language pack's
|
||||
IXUD blocks (`dat/GP_MAIN_GAME_<lang>.pak`) as a **named field** whose key is
|
||||
`<id>_<page>_<line>`, read via the record/field table documented in
|
||||
[idxd-container.md](idxd-container.md).
|
||||
|
||||
MSG_VOICE_D_257 → field key `MSG_VOICE_D_257_000_00` → "Katana! Damn it!"
|
||||
|
||||
## Evidence
|
||||
|
||||
Measured over all 28 `StageNN.ssb`:
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| built-in 64 call sites | **2683** |
|
||||
| slot 0 not staged | 0 |
|
||||
| operand not in symbol table 1 | 0 |
|
||||
| operand symbol type | **6** at all 2683 sites |
|
||||
| distinct message names | 1338 |
|
||||
| names with caption text at `_000_00` | **2683 / 2683 (100 %)** |
|
||||
|
||||
There is no residue: no call site takes a different operand shape, no name is
|
||||
of a type other than 6, and no name is missing from the caption table. That
|
||||
totality is the result — a partial rate would have meant the operand encoding
|
||||
was only sometimes what I thought it was.
|
||||
|
||||
Name families and their share of call sites:
|
||||
|
||||
MSG_VOICE 2407 MSG_ADAN 118 MSG_ACRO 82
|
||||
MSG_ADPL 38 MSG_TCAF 35 MSG_RHIN 3
|
||||
|
||||
`MSG_VOICE_*` is crew/wingman dialogue; the four-letter families are
|
||||
ship-side announcements (`ACRO` = ACROPOLIS, `ADAN`/`ADPL` = ADAN,
|
||||
`TCAF`, `RHIN` = Rhino flight).
|
||||
|
||||
## Why this was not obvious earlier
|
||||
|
||||
The caption table only became readable on 2026-08-25, when `build_caption_text`
|
||||
was switched from scraping adjacent string-pool tokens to reading the IXUD
|
||||
**field** table — which took the extractable line count from 537 to 8800
|
||||
(8800 of 8800 distinct keys). Before that the great majority of these 1338
|
||||
names had no text to resolve *to*, and the 100 % figure was unreachable.
|
||||
|
||||
## What this does not settle
|
||||
|
||||
* **Which recording plays.** The caption is the *text*; the voice bank binding
|
||||
is a separate and still-unresolved question — see
|
||||
[voice-bank-leading-region.md](voice-bank-leading-region.md) and the
|
||||
known case of a generic line playing against a specific subtitle.
|
||||
* **Multi-line captions.** `isl_dialogue.py` concatenates pages `_000_00`
|
||||
through `_000_03`. Whether the game wraps by page or by line, and whether
|
||||
any id uses a page other than `000`, is unmeasured.
|
||||
* **The other five languages.** Only the English pack was swept.
|
||||
* **Ordering.** The tool prints call sites in file order, which is *script*
|
||||
order, not necessarily *play* order — phases and branches are not resolved.
|
||||
|
||||
## Tool
|
||||
|
||||
tools/re-capture/isl_dialogue.py <StageNN.ssb> [GP_MAIN_GAME_E.pak]
|
||||
|
||||
Sample output committed at [../data/isl-stage02-dialogue.txt](../data/isl-stage02-dialogue.txt)
|
||||
(Stage 02, 213 message calls, 213 with text).
|
||||
Reference in New Issue
Block a user