# โœ… `Stage\script.tbl` โ€” the 11 non-`MISSION` fields, and where they point [mission-script-ssb](mission-script-ssb.md) owns this manifest and names its 40 fields; **it never read the 11 that are not `MISSION = StageNN.ssb`.** This does, and follows each value into the archives. Artefact `../data/script-manifest.txt`, regenerator `tools/re-capture/script_manifest.py`. ``` DIALOG_MESSAGE MissionDialogMessage.tbl DIALOG_LOCAL_STRING MissionDialog_local_string.tbl FONT dat\fonts.pak+HGRGE00.TTF FONT_SIZE 15 TEXT_POS 128,128,16 TEXT_LINES 30 MISSION_START_PRT pgmsg_start.prt MISSION_END_PRT pgmsg_end.prt MISSION_UPDATE_PRT pgmsg_update.prt MISSION_FAILED_PRT pgmsg_failed.prt MISSION_RESTART_PRT pgmsg_restart.prt ``` Two sibling records in the same file, also unread until now: `GP_TEST` (`PATH = dat\GP_TEST\` โ€” a debug archive that is **not on the disc**) and `TEXTS` (`FONT_SIZE 33`, `TEXT_LINES 3`, `TEXT_POS 296,565,39` โ€” a second, larger text style beside `SCRIPTS`'s own 15/30/`128,128,16`). ## ๐Ÿ”‘ `message\MissionDialogMessage.tbl` โ€” found, and it is keyed by stage AND phase Probed 7 values ร— 33 prefixes ร— 41 archives. **One resolves**: `message\MissionDialogMessage.tbl`, in all six `GP_MAIN_GAME_*` paks. **200 records, 25 280 bytes**, every name of the form `S_P_` with five kinds, 40 each: | kind | fields | reading | |---|---:|---| | `HINT_PAUSE` | 4 | the pause menu's hint lines | | `HINT` | 4 | ๐ŸŸก in-mission hint | | `OBJECTIVE` | 4 | ๐ŸŸก the objective text | | `GRAPH` | 3 | ๐ŸŸก | | `LOSE` | 1 | ๐ŸŸก the failure line | The fields are **positional, tagged 0โ€ฆ3**, and each value is a message key: `S10_P1_HINT_PAUSE` โ†’ `S10_P1_Hint_Pause_00 โ€ฆ _03`. So this is an index from (stage, phase, kind) to the localised strings โ€” the same `S_P` keying the ISL corpus uses for [mission phases](isl-phase-guards.md). ๐Ÿงช **Control โ€” the 22 stages are exactly the STORY stages.** The 40 stage-phases span stages **1โ€“16 and 24โ€“29**; that is a subset of the 28 shipped, and the six with no hints at all are **18โ€“23**, the tutorials ([stage-numbering-and-player-craft](stage-numbering-and-player-craft.md)). A fifth independent route to the same story/tutorial split, and it also gives the **phase count per stage** โ€” 1 to 3, e.g. S02 and S03 have 3, S10 and S13 have 1. ## ๐ŸŸก The other six values do not resolve โ€” with a working control `MissionDialog_local_string.tbl` and all five `pgmsg_*.prt` are **not a pak entry** under any of the 33 prefixes tried (`message\`, `Stage\`, `2d\`, `ui\`, `prt\`, six language dirs, and the language dirs under `Stage\` and `message\`). The control is in the same loop and in the same sweep: `message\MissionDialogMessage.tbl` **does** resolve, and so does `Stage\script.tbl` itself, both in 6 archives. This is the same wall [mission-phase-advance](../mission-phase-advance.md) hit for the manifest's KEYS โ€” but that sweep probed `MISSION1..33` and `MISSION_*_PRT` as names. This one probes the **values**, which had never been read, and closes them the same way. ## โš ๏ธ `name_hash` is CASE-INSENSITIVE `name_hash("message\\a.tbl") == name_hash("Message\\A.TBL")`. `tag_hash` is **not** (`tag_hash("Abc") != tag_hash("abc")`). Already noted for archive lookup in [sound-pak-contents](sound-pak-contents.md); worth repeating because it doubles the apparent hit count of any prefix sweep. ## ๐ŸŸก Not settled * Where the five `pgmsg_*.prt` screen parts and `MissionDialog_local_string.tbl` actually live. * What `GRAPH` selects, and why `LOSE` carries exactly one entry. * `dat\GP_TEST\` is named by the manifest and is not on the disc โ€” a debug path left in, not a missing asset. Not chased.