Read first, as the rule now requires: ui-prm-primitives.md, ui-rat-layout.md, ui-screen-runtime.md -- they own the .prt/RATC/T8aD stack but describe element names inside bundles, not where parts live. A .prt IS a pak entry, under a LANGUAGE directory. Of 376 distinct .prt names referenced on the disc, 241 resolve as archive entries -- 220 under eng\ and jpn\, 38 under each of the other four. prbase.prt resolves under all six; palogo1.prt under two. All five pgmsg_*.prt resolve under nothing, across 15 prefixes that include every language dir, so this is not the missing-prefix mistake again. A lead, refuted by its own control: four of the five have a same-stem _sub.rat sub-bundle inside every per-language 2D pak, and pgmsg_update has none -- but only 4 of 376 .prt stems have a _sub.rat, and prbase.prt, which does ship as an entry, has none. Not the container convention, not adopted. An intermediate pass nearly reported 'the five appear only in the manifest'; that was wrong because the token census was truncated by a slice and the RATC hits were pgmsg_start_sub.rat, a longer token. New artefact and regenerator; the other six regenerate byte-identical.
6.9 KiB
✅ Stage\script.tbl — the 11 non-MISSION fields, and where they point
mission-script-ssb owns this manifest and names its
40 fields; it never read the 11 that are not MISSION<n> = 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).
❌ CORRECTION (2026-08-27, same day) — the dialogue table was ALREADY KNOWN,
and one "not found" was a FALSE NEGATIVE
This page announced
message\MissionDialogMessage.tblas a find. ixud-localised-text owns it and already states thatS02_P1_OBJECTIVEand friends "are record names in an IDXD map,message\MissionDialogMessage.tbl, whose positional fields list the lowercase per-line IXUD names", and that "*_GRAPHis the odd one: a single named field holding a texture,pgmsg_stg02_1.t32". I grepped the manifest doc and not the text doc. Third overclaim in four days.Worse, the sweep's headline negative was wrong.
MissionDialog_local_string.tblDOES resolve — aslanguage\MissionDialog_local_string.tbl, IXUD, in all sixGP_MAIN_GAME_*paks. My 33 prefixes omittedlanguage\, which is exactly the conventionixud-localised-text.mdrecords for language paks. A prefix sweep is only as good as its prefix list, and the list should have come from the corpus.Also wrong here: "
LOSEhas exactly one entry". Per kind the shapes areHINT_PAUSE4,HINT3,LOSE4,OBJECTIVE4 positional fields, andGRAPH1 NAMED field — the.t32texture. The single-field bucket wasGRAPH, notLOSE.What survives as new: the 11 field VALUES read as a block, the
GP_TESTandTEXTSsibling records, the per-stage phase census, and the fivepgmsg_*.prtstill resolving nowhere.
message\MissionDialogMessage.tbl — keyed by stage AND phase
Probed 7 values × 34 prefixes × 41 archives. Two resolve:
message\MissionDialogMessage.tbl (IDXD) and
language\MissionDialog_local_string.tbl (IXUD), each in all six
GP_MAIN_GAME_* paks.
200 records, 25 280 bytes, every name of the form
S<NN>_P<n>_<KIND> with five kinds, 40 each:
| kind | fields | reading |
|---|---|---|
HINT_PAUSE |
4 | the pause menu's hint lines |
HINT |
3 | 🟡 in-mission hint |
OBJECTIVE |
4 | 🟡 the objective text |
LOSE |
4 | 🟡 the failure lines |
GRAPH |
1 NAMED | ✅ a .t32 texture — S10_P1_GRAPH → pgmsg_stg10_1.t32 |
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<NN>_P<n> keying the
ISL corpus uses for mission phases.
🧪 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). 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.
🟡 Five values still do not resolve — with two working controls
All five pgmsg_*.prt are not a pak entry under any of the 34 prefixes
tried. Two controls sit in the same sweep and both resolve in 6 archives:
message\MissionDialogMessage.tbl and
language\MissionDialog_local_string.tbl — the second only after the
correction above added language\.
This is the same wall mission-phase-advance 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; worth repeating because it
doubles the apparent hit count of any prefix sweep.
🔎 Where .prt parts live — and why these five are the exception
Followed up the next iteration. Read first: ui-prm-primitives.md,
ui-rat-layout.md, ui-screen-runtime.md — they own the .prt/RATC/T8aD UI
stack and describe element names inside bundles, not where the parts live.
Artefact ../data/prt-parts.txt, regenerator tools/re-capture/prt_parts.py.
A .prt IS a pak entry — under a LANGUAGE directory. Of the 376 distinct
.prt names referenced anywhere on the disc, 241 resolve as an archive
entry: 220 under eng\ and jpn\, 38 under each of the other four. My earlier
sweep had eng\…esp\ in the list, so this is not the missing-prefix mistake
again — the five simply are not there.
| name | resolves under |
|---|---|
prbase.prt |
all six language dirs |
palogo1.prt |
eng\, jpn\ |
all five pgmsg_*.prt |
nothing, under any of 15 prefixes |
🟡 A partial lead, and its own refutation. Four of the five have a
same-stem _sub.rat sub-bundle inside every per-language 2D pak
(pgmsg_start_sub.rat, _end_, _failed_, _restart_ — 6 archives each);
pgmsg_update has none. Tempting as "the parts live as RATC sub-bundles",
but the control kills the generalisation: only 4 of 376 .prt stems have a
_sub.rat at all (the other 7 belong to GP_BUNK, GP_SYSTEM,
GP_MISSION_LOG), and prbase.prt — which does ship as an entry — has no
_sub.rat. So _sub.rat is not the container convention; it is something these
four happen to have.
Still not settled: where the five mission-banner parts actually are. What is
now settled is that they are not pak entries while 241 of their siblings are,
and that pgmsg_update is the odd one out even among them.
🟡 Not settled
- Where the five
pgmsg_*.prtscreen parts live — see the section above for how far that got. 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.