This repository has been archived on 2026-09-16. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Syplheed-Reborn/docs/re/structures/mission-script-manifest.md
Sylpheed RE agent 94065d40ec re: where .prt screen parts live; the five mission banners are a real exception
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.
2026-08-27 14:01:24 +00:00

139 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ✅ `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<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.tbl` as a find.
> **[ixud-localised-text](ixud-localised-text.md) owns it** and already states
> that `S02_P1_OBJECTIVE` and friends "are record names in an **IDXD** map,
> `message\MissionDialogMessage.tbl`, whose positional fields list the
> *lowercase* per-line IXUD names", and that "`*_GRAPH` is 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.tbl` DOES resolve — as
> `language\MissionDialog_local_string.tbl`, IXUD, in all six
> `GP_MAIN_GAME_*` paks.** My 33 prefixes omitted `language\`, which is exactly
> the convention `ixud-localised-text.md` records 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: "`LOSE` has exactly one entry". Per kind the shapes are
> `HINT_PAUSE` 4, `HINT` 3, `LOSE` 4, `OBJECTIVE` 4 positional fields, and
> **`GRAPH` 1 NAMED field** — the `.t32` texture. The single-field bucket was
> `GRAPH`, not `LOSE`.
>
> **What survives as new**: the 11 field VALUES read as a block, the `GP_TEST`
> and `TEXTS` sibling records, the per-stage phase census, and the five
> `pgmsg_*.prt` still 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](isl-phase-guards.md).
🧪 **Control — the 22 stages are exactly the STORY stages.** The 40 stage-phases
span stages **116 and 2429**; that is a subset of the 28 shipped, and the six
with no hints at all are **1823**, 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.
## 🟡 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](../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.
## 🔎 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_*.prt` screen 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.