From d1368c12dba05bdc5289ab8a599131eecb2e36f4 Mon Sep 17 00:00:00 2001 From: Sylpheed RE agent Date: Thu, 27 Aug 2026 15:46:31 +0000 Subject: [PATCH] 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. --- docs/re/BACKLOG.md | 34 ++++++++++++++ docs/re/data/hud-config.txt | 13 ++++++ docs/re/structures/hud-config.md | 45 ++++++++++++++++++- .../stage-numbering-and-player-craft.md | 18 ++++++-- tools/re-capture/hud_config.py | 12 +++++ 5 files changed, 116 insertions(+), 6 deletions(-) diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index 43559cc..b7b5d74 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -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`, `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 turret leftovers, all closed.** [structures/unit-substructure-records](structures/unit-substructure-records.md), diff --git a/docs/re/data/hud-config.txt b/docs/re/data/hud-config.txt index 945289e..4b9c63b 100644 --- a/docs/re/data/hud-config.txt +++ b/docs/re/data/hud-config.txt @@ -688,6 +688,19 @@ HudResource_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 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')] diff --git a/docs/re/structures/hud-config.md b/docs/re/structures/hud-config.md index 7258af7..c1dc644 100644 --- a/docs/re/structures/hud-config.md +++ b/docs/re/structures/hud-config.md @@ -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 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 * 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. * 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. -* `Parameters` (4 fields) and `Enumerate_ObjectiveMarkers` (11) are in the - artefact but unread here. +* ~~`Parameters` and `Enumerate_ObjectiveMarkers` unread.~~ **Opened above.** diff --git a/docs/re/structures/stage-numbering-and-player-craft.md b/docs/re/structures/stage-numbering-and-player-craft.md index 93ff319..6914b11 100644 --- a/docs/re/structures/stage-numbering-and-player-craft.md +++ b/docs/re/structures/stage-numbering-and-player-craft.md @@ -13,13 +13,23 @@ The disc's stage numbers are not 1…28: ``` -S01 … S16 story (16) +S01 … S16 story (16) S17 ABSENT -S18 … S23 the tutorials (6) -- exactly the six with no AIParams_SNN.tbl -S24 … S29 story (6) - == 28 shipped, 22 of them story +S18 … S23 the tutorials (6) -- exactly the six with no AIParams_SNN.tbl +S24 … S29 CHALLENGE (6) + == 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` for N = 0…39 against `GP_MAIN_GAME_E.pak`. Artefact `../data/stage-numbering.txt`, regenerator `tools/re-capture/stage_numbering.py`. diff --git a/tools/re-capture/hud_config.py b/tools/re-capture/hud_config.py index 07e4d6c..e8b85f5 100644 --- a/tools/re-capture/hud_config.py +++ b/tools/re-capture/hud_config.py @@ -62,6 +62,18 @@ def main(): 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("\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") for pk in sorted(glob.glob('/work/sylph_extract/**/GP_MAIN_GAME_*2D.pak', recursive=True)): for h, b in pak_entries(pk):