re: the Phase_1/2/3 block of the settings family -- mostly per stage, not per phase

72 records, 94 distinct field names, 31 in every one (post-processing core, five
Fog*, three ScreenColor*, SpaceSize, five Supply*, UnderCommandSquadron, the
first BGOperate slot).  Optional families sit in clean tiers: Nebura_* and
ColorLayer* in 69/72, DOF_*/UnsharpMask_*/ExposureKey_* in 15/72, FinalPass* in
3/72.

REFUTED: BGOperateFrameCount is NOT the number of BGOperateFrameName_i slots --
36 of 72.  What holds is Count <= slots, 72/72: a fixed slot array with a live
count, the same shape as MessageCount under the 32-slot clamp.

68 of the fields common to all three phases NEVER differ in any of the 24
objects.  The phase block is a per-stage environment block copied three times;
what a phase change is actually for is the backdrop animation (BGOperate*) and
the supply/command squadron assignment.

MapPath is not in this family -- its 87 records per pack are 29 x 3, the
resource manifest's Phase_N.

Also fixed a non-determinism the verify loop caught: most_common() over a set
iteration ordered ties differently per run; now sorted by (-count, name).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
Claude (auto)
2026-08-27 18:50:27 +00:00
parent 26b7728ceb
commit 5f764458cd
5 changed files with 177 additions and 7 deletions

View File

@@ -77,11 +77,51 @@ almost everything is `1.0`, with `CollisionDamageRatio 0.8` and
is expressed **twice** in the same object — once for *scoring*
(`Score_{Easy,Normal,Hard}`) and once for *damage* (`Difficulty_*`).
## 🟡 Not settled
## ✅ The `Phase_1/2/3` block — mostly per stage, not per phase
* The `Phase_1/2/3` block of the settings family (3190 named fields:
post-processing, fog, DOF, unsharp mask, supply squadrons and movies,
`UnderCommandSquadron`, `MapPath`) is **not read here** — it is the largest
remaining piece of this table.
**Settled 2026-08-27.** 72 records (24 objects × 3), **94 distinct field names**,
of which **31 appear in every one**: the post-processing core
(`ExposureKeyValue`, `LuminanceMin/Max`, `FirstAdaptedLuminance`,
`BrightPassThreshold/Offset`, `BloomScale`, `StarScale`, `GlareType`,
`Brightness`, `Contrast`, `Saturation`, `Hue`), the five `Fog*` fields, the three
`ScreenColor*`, `SpaceSize`, the five `Supply*` (`SupplySquadron1/2`,
`SupplyMovie1/2ID`, `SupplyRange`), `UnderCommandSquadron`, and the first
`BGOperate` slot. Optional families come in fixed frequency tiers:
`Nebura_*` (12 fields) and `ColorLayer*`/`BGRotateScale`/`AfterimageScale` in
**69/72**, `DOF_*` (7) and `UnsharpMask_*` (7) and the four `ExposureKey_*` in
**15/72**, `FinalPass*` (11) in **3/72**.
### 🔴 Refuted: `BGOperateFrameCount` is not the number of name slots
The obvious reading — a `Count` naming its indexed group, the pattern that pinned
the chatter pairs and the cutscene pages — **fails here: 36 of 72**. What holds is
the weaker statement, **`BGOperateFrameCount ≤ slot count` in 72/72**: the slot
array is fixed (1, 4 or 5 `BGOperateFrameName_i` present) and `Count` says how
many are live, exactly as `MessageCount` sits under the 32-slot clamp in
[`preset-message-rules.md`](preset-message-rules.md). `Count` runs 1…5.
### ✅ What actually changes between phases
Of the fields common to all three phase records of an object, **68 never differ
in any of the 24 objects**. The entire `Nebura_*`, `DOF_*`, `UnsharpMask_*` and
`FinalPass*` families, most of the fog and colour settings, `SupplySquadron2` and
`SupplyRange` are **per stage, duplicated into all three phases**.
The short list that *does* move — and never in more than 6 of 24 objects — is:
`BGOperateFrameName_0` (6), `SupplySquadron1` (5), then `Brightness`,
`BrightPassOffset`/`Threshold`, `ColorLayerA`, `BGOperateFrameCount`,
`UnderCommandSquadron`, `FirstAdaptedLuminance`, `BGOperateFrameName_2` (3 each),
and a tail of bloom/glare/contrast/colour knobs at 2.
So the phase block is best read as **a per-stage environment block copied three
times**, with the backdrop animation (`BGOperate*`) and the supply/command
squadron assignment as the parts a phase change is actually for.
⚠️ **`MapPath` is not in this family.** Its 87 records per pack are 29 × 3 — the
**resource** manifest's `Phase_N`, not the settings'. `stage-definition-table.md`
owns `MapPath`/`MapMesh` in the `Stage_SNN` records; what it does not say is that
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.