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

3.7 KiB
Raw Blame History

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).

🔑 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_PAUSES10_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 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). 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 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.

🟡 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.