re: all 24 settings objects named -- stage\StageParameter_S<NN>.tbl
The queued item (the 29-object resource manifest) turned out to be already settled by challenge-mission-gate.md and stage-mission-tables.md, so the iteration moved to the open question those docs make answerable. Hashing EVERY string that appears in any IDXD object on the disc resolves all 24: StageParameter_S01..S16 (story), S24..S29 (challenge), StageParameter_ Tutorial shared by all six tutorials, and StageParameter_Test. 16+6+1+1 = 24, which is exactly why the settings family is 24 against 29 stage records. IsBoss16Enable confirmed independently: that object is StageParameter_S16. GravityFactor is non-zero in S10 (700), S11 (400), S03 (250), S27 (250); the three unscored objects are S24, S27, S28; the one without SplinterCell is _Test. Refuted on the way: TOC order is not stage order (the TOC is hash-sorted and the Boss16 object is 17th, not 16th), and neither the StageResource template nor a real 19-field record names the settings table. The AUTO_SETTINGS filenames are a different scheme -- none of the 28 hashes to any of these 24. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
@@ -4670,3 +4670,48 @@ the settings family is 24 objects, the resource family 29.
|
||||
🟡 Still open: which settings object is which stage beyond `IsBoss16Enable`;
|
||||
`SplinterCell Count 5`; what `SpaceSize`, `GlareType` and `Nebura_*` mean
|
||||
numerically.
|
||||
|
||||
---
|
||||
|
||||
## ✅✅ 2026-08-27 — all 24 settings objects named: `stage\StageParameter_S<NN>.tbl`
|
||||
|
||||
**The grep-first rule paid for the whole iteration.** The queued item was the
|
||||
29-object resource manifest — and reading the owning docs first showed it is
|
||||
**already settled**: `challenge-mission-gate.md` counts exactly 29 stage records
|
||||
(16 story + 6 tutorial + 6 challenge + `Test`, `StageResource` schema
|
||||
`0x3c9ae32e`) and `stage-mission-tables.md` documents the six sub-records
|
||||
including the `Phase_N` block with `MapPath`/`MapMesh`/`AsteroidDefinition`/
|
||||
`BackgroundResourceID` — the exact four fields I measured. Nothing to add. So the
|
||||
iteration moved to the open question those docs make answerable.
|
||||
|
||||
✅ **24/24 named.** Hashing **every string that appears in any IDXD object on the
|
||||
disc** — rather than guessing filenames — resolves all of them:
|
||||
`stage\StageParameter_S01…S16.tbl` (story), `S24…S29` (challenge),
|
||||
**`StageParameter_Tutorial.tbl` shared by all six tutorials**, and
|
||||
`StageParameter_Test.tbl`. **16 + 6 + 1 + 1 = 24**, which is why the settings
|
||||
family is 24 against 29 stage records: the tutorials do not get one table each.
|
||||
|
||||
✅ **`IsBoss16Enable` confirmed independently.** Predicted last iteration to mark
|
||||
stage 16; the object carrying it is `0xEECC84F2` = `StageParameter_S16.tbl`.
|
||||
|
||||
⚠️ **The names are NOT `AUTO_SETTINGS`'s.** That record lists
|
||||
`stage01_settings.tbl` … `challenge06_settings.tbl`, and **none of those 28
|
||||
hashes to any of these 24 objects** (19 prefixes tried). Two different naming
|
||||
schemes for stage-scoped parameters; the pak holds only `StageParameter_*`.
|
||||
|
||||
With names attached, earlier findings acquire stages: **`GravityFactor` is
|
||||
non-zero in S10 (700), S11 (400), S03 (250), S27 (250)**; the three objects that
|
||||
zero their score multipliers are **S24, S27, S28**; the object without a
|
||||
`SplinterCell` record is **`_Test`**.
|
||||
|
||||
🔴 **Refuted on the way:** TOC order is not stage order. The 24 objects sit in a
|
||||
separate TOC region (661, 905, 968–1030) from the 29 resource objects (622–771),
|
||||
and the `IsBoss16Enable` object is 17th in TOC order, not 16th — the TOC is
|
||||
hash-sorted, which is arbitrary with respect to stage. Also, neither the
|
||||
`StageResource` template (13 fields) nor a real record (19) names the settings
|
||||
table, so the link is not through the stage record. ⚠️ I first sampled
|
||||
`res[0]` and got the `_Test` **template** — *never conclude from one sample*.
|
||||
|
||||
**Method note:** the win was harvesting *all* disc strings and hashing them,
|
||||
after guessing filenames had failed twice. The real name resembled nothing I
|
||||
would have guessed.
|
||||
|
||||
@@ -99,8 +99,8 @@ files, which is how the same ground got covered twice.
|
||||
| [`structures/sound-cue-table.md`](structures/sound-cue-table.md) | The cue index in `tables.pak` — message id -> cue -> sound id -> `.slb` bank | ✅ CONFIRMED, 1 326/1 338 script message ids bind to a bank; SOUNDS and FILES agree on the same 12 absentees, 0 orphan files |
|
||||
| [`structures/cutscene-message-table.md`](structures/cutscene-message-table.md) | Cutscene dialogue — speaker, portrait, on-screen seconds, audio cue per page | ✅ CONFIRMED, field count = 9·PageCount+2 for all 7 PageCounts, 1 252/1 252 caption keys match, 138 ids close both ways |
|
||||
| [`structures/preset-message-rules.md`](structures/preset-message-rules.md) | The reactive-chatter rule table — 64 events, the (message, Yes/No) pair payload, the `Sperkers` roster | ✅ CONFIRMED, the seven fields read off `sub_82213980`, phase tables merge non-additively (224 variants discarded); 8 firing sites share one entry, Probability is a per-cent roll against rand*100.0; Yes = one-shot line; queue is Priority-ordered and capped at 128; the cooldown is Interval + Fluctuation*rand held in the lingering queue node; the 14 player-facing events are voiced by the player set alone (13/15 Katana tables, 0/129 others) (three are seconds ×60, the Yes/No element is a u32 mask, hence the 32 clamp); MessageCount·2 == positional count in 9 216/9 216; five naming routes union to 144/144 (six names predicted from the speaker roster before hashing, control 0/4); 2 388/2 405 message ids bind to a cue |
|
||||
| [`structures/mission-scoring.md`](structures/mission-scoring.md) | Mission scoring and the S/A/B/C/D rank thresholds — 24 tables x 3 difficulties | ✅ CONFIRMED, one 22-field schema over 72 records; difficulty moves 10 of 22 fields and never the RankScore thresholds; 🔴 which object is which stage unresolved (0/28 names under 19 prefixes) |
|
||||
| [`structures/stage-settings-table.md`](structures/stage-settings-table.md) | The per-stage settings object — Camera rigs, Player limits, Difficulty_* damage record | ✅ CONFIRMED, 24 settings objects vs 29 resource objects both using Phase_1/2/3; Camera is 13/14 fields constant; GravityFactor non-zero in 4 stages; IsBoss16Enable identifies one object; the Phase block is 94 fields of which 68 never vary between phases |
|
||||
| [`structures/mission-scoring.md`](structures/mission-scoring.md) | Mission scoring and the S/A/B/C/D rank thresholds — 24 tables x 3 difficulties | ✅ CONFIRMED, one 22-field schema over 72 records; difficulty moves 10 of 22 fields and never the RankScore thresholds; ✅ all 24 named stage\StageParameter_S<NN>.tbl (+ _Tutorial shared by six, + _Test) |
|
||||
| [`structures/stage-settings-table.md`](structures/stage-settings-table.md) | The per-stage settings object — Camera rigs, Player limits, Difficulty_* damage record | ✅ CONFIRMED, 24 settings objects vs 29 resource objects both using Phase_1/2/3; Camera is 13/14 fields constant; GravityFactor non-zero in 4 stages; IsBoss16Enable identifies one object; the Phase block is 94 fields of which 68 never vary between phases; all 24 objects named StageParameter_S<NN> |
|
||||
| [`structures/isl-mission-timer.md`](structures/isl-mission-timer.md) | The mission timer — two sequential countdowns, not a limit and a warning | ✅ CONFIRMED — read from `sub_822639B8`; the threshold reading is |
|
||||
| [`structures/archive-naming.md`](structures/archive-naming.md) | Which archives the disc can name — 100% for menu paks, **0.0%** for the six 2D paks and `GP_READY_ROOM` | ✅ CONFIRMED — 6027 names × 16 prefixes, bimodal |
|
||||
| [`structures/hud-config.md`](structures/hud-config.md) | The in-game HUD configuration — 16 records, 419 asset paths, and a per-stage `ResourceTable` | ✅ CONFIRMED — 0 of 419 config paths resolve as pak entries |
|
||||
|
||||
@@ -59,6 +59,32 @@ objects whose Normal record differs from the commonest Normal record:
|
||||
0xf1020211 {'CraftScore_Adjustment': '0.0', 'FFPenalty_Craft_Basis': '0.0', 'FFPenalty_Craft_Maximum': '0', 'FFPenalty_Vessel_Basis': '0.0', 'FFPenalty_Zessel_Maximum': '0', 'KillBonus_Maximum': '0', 'LostWingmanPenalty': '0', 'MainMissionBonus': '0', 'MainMissionCount': '1', 'OtherScore_Adjustment': '0.0', 'RankScore_A': '8276', 'RankScore_B': '6897', 'RankScore_C': '4138', 'RankScore_D': '690', 'RankScore_S': '9999', 'TimeBonus_Basis_Maximum': '1200', 'TimeBonus_Basis_Minimum': '330', 'TimeBonus_Maximun': '10000', 'VesselScore_Adjustment': '0.0'}
|
||||
0xf2082b11 {'FriendlyVesselDamageBonus': '1000', 'KillBonus_Maximum': '0', 'MainMissionBonus': '0', 'MainMissionCount': '1', 'RankScore_A': '100001', 'RankScore_B': '80001', 'RankScore_C': '65001', 'RankScore_D': '50001', 'RankScore_S': '120001', 'TimeBonus_Maximun': '0'}
|
||||
|
||||
settings objects named from harvested disc strings: 24/24
|
||||
0xe88492fc stage\StageParameter_S01.tbl
|
||||
0xe98abbfc stage\StageParameter_S02.tbl
|
||||
0xea90e4fc stage\StageParameter_S03.tbl
|
||||
0xeb970dfc stage\StageParameter_S04.tbl
|
||||
0xec9d36fc stage\StageParameter_S05.tbl
|
||||
0xeda35ffc stage\StageParameter_S06.tbl
|
||||
0xeea988fc stage\StageParameter_S07.tbl
|
||||
0xefafb1fc stage\StageParameter_S08.tbl
|
||||
0xf0b5dafc stage\StageParameter_S09.tbl
|
||||
0xe8a78ef2 stage\StageParameter_S10.tbl
|
||||
0xe9adb7f2 stage\StageParameter_S11.tbl
|
||||
0xeab3e0f2 stage\StageParameter_S12.tbl
|
||||
0xebba09f2 stage\StageParameter_S13.tbl
|
||||
0xecc032f2 stage\StageParameter_S14.tbl
|
||||
0xedc65bf2 stage\StageParameter_S15.tbl
|
||||
0xeecc84f2 stage\StageParameter_S16.tbl
|
||||
0xede957e8 stage\StageParameter_S24.tbl
|
||||
0xeeef80e8 stage\StageParameter_S25.tbl
|
||||
0xeff5a9e8 stage\StageParameter_S26.tbl
|
||||
0xf0fbd2e8 stage\StageParameter_S27.tbl
|
||||
0xf1020211 stage\StageParameter_S28.tbl
|
||||
0xf2082b11 stage\StageParameter_S29.tbl
|
||||
0xd4c05c15 stage\StageParameter_Test.tbl
|
||||
0x88720837 stage\StageParameter_Tutorial.tbl
|
||||
|
||||
the rest of the settings object (24 objects):
|
||||
record-name sets: 2
|
||||
x23 ['Camera', 'Difficulty_Easy', 'Difficulty_Hard', 'Difficulty_Normal', 'Phase_1', 'Phase_2', 'Phase_3', 'Player', 'Score_Easy', 'Score_Hard', 'Score_Normal', 'SplinterCell']
|
||||
|
||||
@@ -67,18 +67,12 @@ difficulties) zero the multipliers, the penalties and `TimeBonus_Maximun`
|
||||
outright: missions that are not scored. Full per-object diffs are in the
|
||||
artefact.
|
||||
|
||||
## ❔ Which object is which stage
|
||||
## ✅ Which object is which stage — settled
|
||||
|
||||
Not settled. `AUTO_SETTINGS` names 28 files (`stage01…16`, `tutorial01…06`,
|
||||
`challenge01…06`, tags 1–16/18–23/24–29 — tag 17 absent, the cut S17), but
|
||||
**none of those 28 names resolves to any of the 24 objects** under 19 prefixes
|
||||
(bare, `stage\`, `Stage\`, `message\`, `settings\`, `2d\`, `ui\`, `system\`,
|
||||
`dat\`, `prt\`, `view\`, `language\`, `eng\`, `script\`, `Script\`, `mission\`,
|
||||
`Mission\`, `param\`, `Param\`). So either the settings files are loaded outside
|
||||
the pak namespace, or the scoring objects are keyed by something else entirely.
|
||||
**The 24-vs-28 puzzle is answered** by
|
||||
[`stage-settings-table.md`](stage-settings-table.md): the same pack holds a
|
||||
*second* family of **29** objects that also uses `Phase_1/2/3` — the resource
|
||||
manifest — so the settings family really is 24 and the 29 is a different table.
|
||||
The only per-stage handle found so far is `IsBoss16Enable`, present in exactly
|
||||
one object.
|
||||
All 24 are named `stage\StageParameter_S<NN>.tbl`, plus `_Tutorial` (shared by
|
||||
all six tutorials) and `_Test`. See
|
||||
[`stage-settings-table.md`](stage-settings-table.md); that also explains 24
|
||||
against the 29 stage records, and confirms the `IsBoss16Enable` object is S16.
|
||||
|
||||
⚠️ The names are **not** `AUTO_SETTINGS`'s `stageNN_settings.tbl`; none of those
|
||||
28 hashes to any of these objects.
|
||||
|
||||
@@ -17,6 +17,40 @@ same rendering fields again. `stage-definition-table.md` /
|
||||
`LodResource` / `MotionResource`. `SplinterCell` and `Difficulty_*` are owned by
|
||||
nothing.
|
||||
|
||||
## ✅ Every settings object is named — `stage\StageParameter_S<NN>.tbl`
|
||||
|
||||
**Settled 2026-08-27, 24/24.** Hashing **every string that appears anywhere in
|
||||
any IDXD object on the disc** (rather than guessing filenames) resolves all
|
||||
twenty-four:
|
||||
|
||||
| name | count |
|
||||
|---|---|
|
||||
| `stage\StageParameter_S01…S16.tbl` | 16 — the story campaign |
|
||||
| `stage\StageParameter_S24…S29.tbl` | 6 — the challenge missions |
|
||||
| `stage\StageParameter_Tutorial.tbl` | **1, shared by all six tutorials** |
|
||||
| `stage\StageParameter_Test.tbl` | 1 — the developer stage |
|
||||
|
||||
**That is exactly the 24, and it explains 24 against the 29 stage records**
|
||||
([`challenge-mission-gate.md`](challenge-mission-gate.md) counts 29:
|
||||
16 story + 6 tutorial + 6 challenge + `Test`): the six tutorials do not get one
|
||||
table each, they **share a single `_Tutorial` table**, and `_Test` accounts for
|
||||
the last. 16 + 6 + 1 + 1 = 24.
|
||||
|
||||
✅ **Independent confirmation of the `IsBoss16Enable` hook.** That field is
|
||||
present in exactly one object, and the object is `0xEECC84F2` =
|
||||
**`StageParameter_S16.tbl`** — predicted before the naming, confirmed by it.
|
||||
|
||||
⚠️ The names are **not** what `AUTO_SETTINGS` lists. That record names
|
||||
`stage01_settings.tbl` … `challenge06_settings.tbl`, and **none of those 28
|
||||
hashes to any of these 24 objects** under 19 prefixes. Two different naming
|
||||
schemes for stage-scoped parameters; only `StageParameter_*` is what the pak
|
||||
actually holds.
|
||||
|
||||
With the names in hand the earlier value findings acquire stages:
|
||||
**`GravityFactor` is non-zero in S10 (700), S11 (400), S03 (250) and S27 (250)**;
|
||||
the three objects that zero their score multipliers are **S24, S27 and S28**; and
|
||||
the one object without a `SplinterCell` record is **`_Test`**.
|
||||
|
||||
## ⚠️ Two different families both use `Phase_1/2/3`
|
||||
|
||||
Searching `GP_MAIN_GAME_E.pak` for objects containing a `Phase_1` record finds
|
||||
@@ -123,5 +157,4 @@ owns `MapPath`/`MapMesh` in the `Stage_SNN` records; what it does not say is tha
|
||||
the name recurs in the resource manifest's per-phase records.
|
||||
|
||||
## 🟡 Not settled
|
||||
* Which object is which stage, beyond the single `IsBoss16Enable` hook.
|
||||
* `SplinterCell Count 5` — name and value only.
|
||||
|
||||
Reference in New Issue
Block a user