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 acbcd8d75c re: Stage\script.tbl's 11 non-MISSION fields, and the mission dialogue table
structures/mission-script-ssb.md owns this manifest and names its 40
fields but never read the 11 that are not MISSION<n> = StageNN.ssb.
They are DIALOG_MESSAGE, DIALOG_LOCAL_STRING, FONT (+size), TEXT_POS,
TEXT_LINES and the five pgmsg_*.prt.  Two sibling records were also
unread: GP_TEST (PATH = dat\GP_TEST\, a debug archive not on the disc)
and TEXTS (a second text style).

Probed 7 values x 33 prefixes x 41 archives.  One resolves:
message\MissionDialogMessage.tbl, in all six GP_MAIN_GAME_* paks --
200 records, 25280 bytes, every name S<NN>_P<n>_<KIND> with five kinds
40 each (HINT_PAUSE, HINT, OBJECTIVE, GRAPH, LOSE), fields positional
and tagged 0..3, each value a message key.  An index from (stage,
phase, kind) to the localised strings, on the same S<NN>_P<n> keying
the ISL corpus already uses.

Control: the 40 stage-phases span stages 1-16 and 24-29 -- a subset of
the 28 shipped, and the six with no hints are exactly 18-23, the
tutorials.  A fifth independent route to the story/tutorial split, and
it gives the phase count per stage.

The other six do not resolve, with the control in the same sweep:
MissionDialog_local_string.tbl and all five pgmsg_*.prt are not a pak
entry under any of the 33 prefixes, while
message\MissionDialogMessage.tbl and Stage\script.tbl both resolve in
6 archives.

name_hash is CASE-INSENSITIVE (message\ == Message\); tag_hash is not.

New structure doc, artefact and regenerator; the other five artefacts
regenerate byte-identical.
2026-08-27 13:37:31 +00:00

78 lines
3.7 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`).
## 🔑 `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<NN>_P<n>_<KIND>` 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<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.
## 🟡 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.