re: the objective/tutorial marker records; S24-S29 are CHALLENGE, not story

Correction first.  stage-numbering-and-player-craft.md called S24-S29
'story' and reported 22 story stages.  challenge-mission-gate.md OWNS
that split and already had it: S01-S16 story, S18-S23 tutorials,
S24-S29 challenge.  A third confirmation fell out of this iteration:
AUTO_SETTINGS names stage01..16_settings.tbl, tutorial01..06 and
challenge01..06, and its field tags are 1-16, 18-23, 24-29 -- the
shipped stage numbers exactly.  The campaign is 16 story missions, not
22.  AUTO_SETTINGS and IGNORE are likewise already owned by
isl-condition-builtins.md, so nothing there was new either.

What is new: the 11 marker records hud-config.md listed as unread.  12
named fields each, portable HUD data.  Colour is ARGB, three per marker
-- objectives red 0xFFFF0000, guard/waypoint green 0xFF20FF20,
Acropolis/tanker cyan 0xFF00FFFF, sub-objective yellow 0xFFFFFF00, and
every TutorialMarker_* amber 0xFFFFA010.  Each carries a Normal sprite
and an Emphasis part with optional Sub companions; HPGauge 0/1/2;
RadarCursorType Circle/Rectangle/blank; BlinkCycle 0x800 on all eleven.
TutorialTarget is Yes on exactly the five TutorialMarker_* and No on the
six ObjectiveMarker_*.

Parameters binds the roles: TargetMarker -> ObjectiveMarker_Target,
HelpMarker -> ObjectiveMarker_SubObjective, TutoTargetMarker ->
TutorialMarker_Target, plus ReloadDispTime 0.1.
Enumerate_ObjectiveMarkers is the 11-name roster.

Artefact +13 lines / 0 deletions; the other nine regenerate
byte-identical.
This commit is contained in:
Sylpheed RE agent
2026-08-27 15:46:31 +00:00
parent 15c9e13c12
commit d1368c12db
5 changed files with 116 additions and 6 deletions

View File

@@ -827,6 +827,40 @@ unknown, what evidence exists, and what the first step would be. Move an item in
field; the stat keys in records not opened here (`MegaTons`, `BulletLimit`, field; the stat keys in records not opened here (`MegaTons`, `BulletLimit`,
`CrewCount`, `HP_CLASS`); why the roster lists 59 of 131. `CrewCount`, `HP_CLASS`); why the roster lists 59 of 131.
* ✅❌ **(2026-08-27) THE OBJECTIVE/TUTORIAL MARKER RECORDS — and a CORRECTION:
S24-S29 are the CHALLENGE missions, not story.**
[structures/hud-config](structures/hud-config.md),
[structures/stage-numbering-and-player-craft](structures/stage-numbering-and-player-craft.md),
artefact `data/hud-config.txt` (+13 lines, 0 deletions — purely additive).
❌ **Correction first.** `stage-numbering-and-player-craft.md` called S24-S29
"story" and reported "22 story stages". **`challenge-mission-gate.md` OWNS that
split and already had it**: `S01-S16` story, `S18-S23` tutorials, **`S24-S29`
challenge**. A third confirmation fell out of this iteration's reading:
**`AUTO_SETTINGS` names `stage01..16_settings.tbl`,
`tutorial01..06_settings.tbl`, `challenge01..06_settings.tbl` — and its field
tags are 1-16, 18-23, 24-29**, the shipped stage numbers exactly. The campaign
is **16** story missions, not 22. (Fourth time the grep-the-owning-doc rule has
caught me; `AUTO_SETTINGS` and `IGNORE` are likewise already owned by
`isl-condition-builtins.md`, so nothing there was new either.)
✅ **What IS new**: the 11 **marker records** `hud-config.md` listed as unread.
12 named fields each, and portable HUD data. **Colour is ARGB, three per
marker** (`ColorNormal`, `ColorEmphasis1`, `ColorEmphasis2`): objectives
**red** `0xFFFF0000`, guard/waypoint **green** `0xFF20FF20`, Acropolis/tanker
**cyan** `0xFF00FFFF`, sub-objective **yellow** `0xFFFFFF00`, and every
`TutorialMarker_*` **amber** `0xFFFFA010`. Each carries a `Normal` sprite and
an `Emphasis` part with optional `…Sub` companions; `HPGauge` 0/1/2;
`RadarCursorType` `Circle` (Acropolis, tanker) / `Rectangle` (guard) / blank;
`BlinkCycle` `0x800` on all eleven. `TutorialTarget` is `Yes` on exactly the
five `TutorialMarker_*` and `No` on the six `ObjectiveMarker_*`.
✅ **`Parameters` binds the roles**: `TargetMarker` -> `ObjectiveMarker_Target`,
`HelpMarker` -> `ObjectiveMarker_SubObjective`, `TutoTargetMarker` ->
`TutorialMarker_Target`, plus `ReloadDispTime 0.1`.
✅ **`Enumerate_ObjectiveMarkers`** is the 11-name roster of the set — the same
shape as `Enumerate_Squadrons` in `unit-group-table.md`.
⚠️ `pgmark_em_ob_s.prt` appears here and is one of the 28 names
`archive-naming.md` shows resolving nowhere — consistent with the namespace
finding, not a missing asset.
* ✅ **(2026-08-27) `CoverArea` IS A 6-BIT MOUNT MASK — plus the three other * ✅ **(2026-08-27) `CoverArea` IS A 6-BIT MOUNT MASK — plus the three other
turret leftovers, all closed.** turret leftovers, all closed.**
[structures/unit-substructure-records](structures/unit-substructure-records.md), [structures/unit-substructure-records](structures/unit-substructure-records.md),

View File

@@ -688,6 +688,19 @@
HudResource_S26.tbl no hit HudResource_S26.tbl no hit
HudMarkerResource_S26.tbl no hit HudMarkerResource_S26.tbl no hit
## the objective / tutorial MARKER records
ObjectiveMarker_Acropolis BlinkCycle=0x800 ColorEmphasis1=0xFFB0FFFF ColorEmphasis2=0xFF00E0FF ColorNormal=0xFF00FFFF Emphasis=pgmark_em_ho.prt EmphasisSub= HPGauge=1 HPGaugeSub=0 Normal=pgmark_ho.t32 NormalSub= RadarCursorType=Circle TutorialTarget=No
ObjectiveMarker_SubObjective BlinkCycle=0x800 ColorEmphasis1=0xFFFFFFD0 ColorEmphasis2=0xFFFFFF00 ColorNormal=0xFFFFFF00 Emphasis= EmphasisSub= HPGauge=2 HPGaugeSub=0 Normal=pgmark_help.prt NormalSub=pgmark_help_s.prt RadarCursorType= TutorialTarget=No
ObjectiveMarker_Guard BlinkCycle=0x800 ColorEmphasis1=0xFF60FF60 ColorEmphasis2=0xFFC0FFC0 ColorNormal=0xFF20FF20 Emphasis=pgmark_em_ga.prt EmphasisSub= HPGauge=1 HPGaugeSub=0 Normal=pgmark_ga.t32 NormalSub= RadarCursorType=Rectangle TutorialTarget=No
TutorialMarker_WayPoint BlinkCycle=0x800 ColorEmphasis1=0xFF60FF60 ColorEmphasis2=0xFFC0FFC0 ColorNormal=0xFF20FF20 Emphasis= EmphasisSub= HPGauge=0 HPGaugeSub=0 Normal=pgmark_ld.t32 NormalSub= RadarCursorType= TutorialTarget=No
TutorialMarker_NoMark BlinkCycle=0x800 ColorEmphasis1=0xFFFFA010 ColorEmphasis2=0xFFFFD090 ColorNormal=0xFFFFA010 Emphasis= EmphasisSub= HPGauge=2 HPGaugeSub=0 Normal= NormalSub= RadarCursorType= TutorialTarget=Yes
TutorialMarker_Tanker BlinkCycle=0x800 ColorEmphasis1=0xFFFFA010 ColorEmphasis2=0xFFFFD090 ColorNormal=0xFFFFA010 Emphasis=pgmark_em_ta.prt EmphasisSub= HPGauge=2 HPGaugeSub=0 Normal=pgmark_ta.t32 NormalSub= RadarCursorType= TutorialTarget=Yes
TutorialMarker_Target BlinkCycle=0x800 ColorEmphasis1=0xFFFFA010 ColorEmphasis2=0xFFFFD090 ColorNormal=0xFFFFA010 Emphasis=pgmark_em_ob.prt EmphasisSub=pgmark_em_ob_s.prt HPGauge=2 HPGaugeSub=0 Normal=pgmark_ob.t32 NormalSub=pgmark_ob_s.t32 RadarCursorType= TutorialTarget=Yes
ObjectiveMarker_WayPoint BlinkCycle=0x800 ColorEmphasis1=0xFF60FF60 ColorEmphasis2=0xFFC0FFC0 ColorNormal=0xFF20FF20 Emphasis=pgmark_em_wp.prt EmphasisSub= HPGauge=0 HPGaugeSub=0 Normal=pgmark_wp.t32 NormalSub= RadarCursorType= TutorialTarget=No
ObjectiveMarker_Tanker BlinkCycle=0x800 ColorEmphasis1=0xFFB0FFFF ColorEmphasis2=0xFF00E0FF ColorNormal=0xFF00FFFF Emphasis=pgmark_em_ta.prt EmphasisSub= HPGauge=2 HPGaugeSub=0 Normal=pgmark_ta.t32 NormalSub= RadarCursorType=Circle TutorialTarget=No
TutorialMarker_Acropolis BlinkCycle=0x800 ColorEmphasis1=0xFFFFA010 ColorEmphasis2=0xFFFFD090 ColorNormal=0xFFFFA010 Emphasis=pgmark_em_ho.prt EmphasisSub= HPGauge=1 HPGaugeSub=0 Normal=pgmark_ho.t32 NormalSub= RadarCursorType= TutorialTarget=Yes
ObjectiveMarker_Target BlinkCycle=0x800 ColorEmphasis1=0xFFFF0000 ColorEmphasis2=0xFF800000 ColorNormal=0xFFFF0000 Emphasis=pgmark_em_ob.prt EmphasisSub=pgmark_em_ob_s.prt HPGauge=2 HPGaugeSub=0 Normal=pgmark_ob.t32 NormalSub=pgmark_ob_s.t32 RadarCursorType= TutorialTarget=No
## ResourceTable -- 29 pairs, one per stage, with a single override ## ResourceTable -- 29 pairs, one per stage, with a single override
GP_MAIN_GAME_D2D.pak 58 fields = 29 pairs ; non-default at [(50, 'HudResource_S26.tbl'), (51, 'HudMarkerResource_S26.tbl')] GP_MAIN_GAME_D2D.pak 58 fields = 29 pairs ; non-default at [(50, 'HudResource_S26.tbl'), (51, 'HudMarkerResource_S26.tbl')]
GP_MAIN_GAME_E2D.pak 58 fields = 29 pairs ; non-default at [(50, 'HudResource_S26.tbl'), (51, 'HudMarkerResource_S26.tbl')] GP_MAIN_GAME_E2D.pak 58 fields = 29 pairs ; non-default at [(50, 'HudResource_S26.tbl'), (51, 'HudMarkerResource_S26.tbl')]

View File

@@ -60,11 +60,52 @@ and index 25 is **S26 — the one stage with its own HUD configuration**. The
arithmetic is exact and the `_S26` suffix names the same stage, but nothing here arithmetic is exact and the `_S26` suffix names the same stage, but nothing here
proves the indexing, so this is **a reading, not adopted**. proves the indexing, so this is **a reading, not adopted**.
## ✅ The objective / tutorial MARKER records
`hud-config.md` listed these as "in the artefact but unread". Opened now — and
they are portable HUD data, 11 records of **12 named fields** each:
```
ObjectiveMarker_Target ColorNormal 0xFFFF0000 Emph1 0xFFFF0000 Emph2 0xFF800000
Normal pgmark_ob.t32 NormalSub pgmark_ob_s.t32
Emphasis pgmark_em_ob.prt EmphasisSub pgmark_em_ob_s.prt
HPGauge 2 HPGaugeSub 0 BlinkCycle 0x800
RadarCursorType (blank) TutorialTarget No
```
* **Colour is ARGB**, three per marker: `ColorNormal`, `ColorEmphasis1`,
`ColorEmphasis2`. Objectives are **red** `0xFFFF0000`, guard/waypoint **green**
`0xFF20FF20`, Acropolis/tanker **cyan** `0xFF00FFFF`, sub-objective **yellow**
`0xFFFFFF00`, and every `TutorialMarker_*` is **amber** `0xFFFFA010`.
* Each marker carries a `Normal` sprite and an `Emphasis` part, optionally with
`…Sub` companions; `HPGauge` is 0 / 1 / 2; `RadarCursorType` is `Circle`
(Acropolis, tanker), `Rectangle` (guard) or blank; `BlinkCycle` is `0x800`
on all eleven.
* `TutorialTarget` is `Yes` on exactly the five `TutorialMarker_*` records and
`No` on the six `ObjectiveMarker_*` — the two families are otherwise the same
shape.
**`Parameters` (4 fields) binds the roles**:
```
TargetMarker ObjectiveMarker_Target
HelpMarker ObjectiveMarker_SubObjective
TutoTargetMarker TutorialMarker_Target
ReloadDispTime 0.1
```
**`Enumerate_ObjectiveMarkers`** is the 11-name roster of the set — the same
shape as the `Enumerate_Squadrons` record [unit-group-table](unit-group-table.md)
uses.
⚠️ `pgmark_em_ob_s.prt` here is one of the 28 names
[archive-naming](archive-naming.md) shows resolving nowhere — consistent with
the namespace finding, not a missing asset.
## 🟡 Not settled ## 🟡 Not settled
* How the 2D pak's 574 T8aD and 130 RATC entries *are* addressed, if not by * How the 2D pak's 574 T8aD and 130 RATC entries *are* addressed, if not by
`name_hash` of the config path. That is now the question. `name_hash` of the config path. That is now the question.
* What `HudMarkerResource.tbl` is — presumably the 13-record marker entry, but * What `HudMarkerResource.tbl` is — presumably the 13-record marker entry, but
the filename does not resolve, so the pairing is by content, not by hash. the filename does not resolve, so the pairing is by content, not by hash.
* `Parameters` (4 fields) and `Enumerate_ObjectiveMarkers` (11) are in the * ~~`Parameters` and `Enumerate_ObjectiveMarkers` unread.~~ **Opened above.**
artefact but unread here.

View File

@@ -13,13 +13,23 @@
The disc's stage numbers are not 1…28: The disc's stage numbers are not 1…28:
``` ```
S01 … S16 story (16) S01 … S16 story (16)
S17 ABSENT S17 ABSENT
S18 … S23 the tutorials (6) -- exactly the six with no AIParams_SNN.tbl S18 … S23 the tutorials (6) -- exactly the six with no AIParams_SNN.tbl
S24 … S29 story (6) S24 … S29 CHALLENGE (6)
== 28 shipped, 22 of them story == 28 shipped
``` ```
> ❌ **CORRECTION (2026-08-27, same day).** This page first called S24–S29
> "story", giving "22 story stages". They are the **challenge** missions —
> [challenge-mission-gate](../challenge-mission-gate.md) owns that split and had
> it already (`S01–S16` story, `S18–S23` tutorials, `S24–S29` challenge). A third
> confirmation turned up while reading `AUTO_SETTINGS`: it names
> `stage01…16_settings.tbl`, `tutorial01…06_settings.tbl`,
> `challenge01…06_settings.tbl` — **and its field tags are 1–16, 18–23, 24–29**,
> the shipped stage numbers exactly. So the campaign is **16** story missions,
> not 22.
Measured by hashing `stage\UnitGroup_S%02d.tbl` and `stage\AIParams_S%02d.tbl` Measured by hashing `stage\UnitGroup_S%02d.tbl` and `stage\AIParams_S%02d.tbl`
for N = 0…39 against `GP_MAIN_GAME_E.pak`. Artefact `../data/stage-numbering.txt`, for N = 0…39 against `GP_MAIN_GAME_E.pak`. Artefact `../data/stage-numbering.txt`,
regenerator `tools/re-capture/stage_numbering.py`. regenerator `tools/re-capture/stage_numbering.py`.

View File

@@ -62,6 +62,18 @@ def main():
for n in list(DEFAULT) + ['HudResource_S26.tbl', 'HudMarkerResource_S26.tbl']: for n in list(DEFAULT) + ['HudResource_S26.tbl', 'HudMarkerResource_S26.tbl']:
print(" %-30s %s" % (n, 'resolves' if any(U.name_hash(q + n) in H for q in PRE) else 'no hit')) print(" %-30s %s" % (n, 'resolves' if any(U.name_hash(q + n) in H for q in PRE) else 'no hit'))
print("\n## the objective / tutorial MARKER records")
seen = set()
for h, b in pak_entries(p2):
if b[:4] != b'IDXD': continue
for r in U.parse(b):
sq = r['squadron']
if not (sq.startswith('ObjectiveMarker_') or sq.startswith('TutorialMarker_')): continue
if sq in seen: continue
seen.add(sq)
n = U.named(r)
print(" %-30s %s" % (sq, " ".join("%s=%s" % (k, v) for k, v in sorted(n.items()))))
print("\n## ResourceTable -- 29 pairs, one per stage, with a single override") print("\n## ResourceTable -- 29 pairs, one per stage, with a single override")
for pk in sorted(glob.glob('/work/sylph_extract/**/GP_MAIN_GAME_*2D.pak', recursive=True)): for pk in sorted(glob.glob('/work/sylph_extract/**/GP_MAIN_GAME_*2D.pak', recursive=True)):
for h, b in pak_entries(pk): for h, b in pak_entries(pk):