re: S28 does have an asteroid definition - it borrows Stage 14's
Withdrawing my own repeated claim that S28_p1 has an asteroid volume with no
definition. It came from a set-difference over FILE NAMES, which cannot see
reuse. Joining the fields per PHASE settles it:
S28.Phase_1 MapMesh = S28_p1_AsteroidVolume_wp.col
AsteroidDefinition = S14_p2_asteroid.tbl
S28 scatters Stage 14 phase 2's rock list inside its own volume. Nine
definition tables and nine _AsteroidVolume_wp meshes, with one table shared by
two phases: S14_p2_asteroid.tbl -> S14.Phase_2 and S28.Phase_1.
The earlier census's own arithmetic already contained the answer: the four
values counted x12 (2 per language pack) were S01, S04, S05 - two phases of ONE
stage - and S14_p2, which is two phases of TWO different stages. The count was
right; reading x12 as "two phases of the same stage" was the error.
test_s8p1_asteroid.tbl is not test-only either - it is what S02.Phase_1 ships
with. A test_ name here is a leftover, not a dead table.
The true residual is two phases and it is the opposite pairing to what I
recorded: S01.Phase_3 has the volume and no definition (S01 keeps its volume
across all three phases but scatters rocks only in 1-2), and S02.Phase_1 has a
definition and no volume (MapMesh is the plain mapmesh_box_500km).
All fifteen artefacts byte-identical.
This commit is contained in:
@@ -6060,3 +6060,41 @@ dictionary-attack lever remains without a corpus.
|
||||
|
||||
🟡 Not settled: why `S28_p1` has an asteroid volume with no definition; the two
|
||||
unnamed `_Test` variant objects; what `Placement_*`/`RouteTest_*` are for.
|
||||
|
||||
---
|
||||
|
||||
## 🔴✅ 2026-08-28 — S28 does have an asteroid definition: it borrows Stage 14's
|
||||
|
||||
Item (a). **Withdrawing my own repeated claim** that "`S28_p1` has an asteroid
|
||||
volume with no definition". It came from a set-difference over **file names**,
|
||||
which cannot see reuse. Joining the fields **per phase** settles it:
|
||||
|
||||
```
|
||||
S28.Phase_1 MapMesh = S28_p1_AsteroidVolume_wp.col
|
||||
AsteroidDefinition = S14_p2_asteroid.tbl
|
||||
```
|
||||
|
||||
**S28 scatters Stage 14 phase 2's rock list inside its own volume.** Nine
|
||||
definition tables ↔ nine `_AsteroidVolume_wp` meshes, with **one table shared by
|
||||
two phases** — `S14_p2_asteroid.tbl` → `S14.Phase_2` *and* `S28.Phase_1`.
|
||||
|
||||
⚠️ **The earlier census's own arithmetic already contained the answer.** The four
|
||||
values counted **×12** (2 per language pack) were `S01`, `S04`, `S05` — two phases
|
||||
of *one* stage — and `S14_p2`, which is two phases of **two different stages**.
|
||||
Reading ×12 as "two phases of the same stage" was the error; the count was right
|
||||
and my interpretation of it was not.
|
||||
|
||||
⚠️ **`test_s8p1_asteroid.tbl` is not test-only either** — it is what
|
||||
**`S02.Phase_1`** ships with. A `test_` name here is a leftover, not a dead table.
|
||||
(That also softens the `_Test`-dangling pattern: a `test_`-named *table* can be
|
||||
live even when `_Test`-named *declarations* dangle.)
|
||||
|
||||
✅ **The true residual is two phases, and it is the opposite pairing to what I
|
||||
recorded**: `S01.Phase_3` has the volume and no definition (S01 keeps its volume
|
||||
across all three phases but scatters rocks only in 1–2), and `S02.Phase_1` has a
|
||||
definition and no volume (its `MapMesh` is the plain `mapmesh_box_500km`).
|
||||
|
||||
Corrected in `asteroid-fields.md` and `INDEX.md`.
|
||||
|
||||
🟡 Not settled: whether the quaternion is object→world or world→object; the two
|
||||
unnamed `_Test` variant objects; what `Placement_*`/`RouteTest_*` are for.
|
||||
|
||||
@@ -119,7 +119,7 @@ files, which is how the same ground got covered twice.
|
||||
| [`structures/isl-message-dialogue-link.md`](structures/isl-message-dialogue-link.md) | Mission scripts as dialogue — built-in 64 -> message id -> caption text | ✅ CONFIRMED total, 2 683/2 683 call sites across all 28 stages resolve, no residue |
|
||||
| [`structures/mission-objective-counter.md`](structures/mission-objective-counter.md) | `REMAINING OB` — the mission's own objective counter, in RAM | ✅ CONFIRMED for one Stage 02 run: a big-endian u32 whose value |
|
||||
| [`structures/movie-subtitles.md`](structures/movie-subtitles.md) | Movie subtitles & the movie ↔ mission ↔ text chain | — |
|
||||
| [`structures/asteroid-fields.md`](structures/asteroid-fields.md) | `AsteroidGroup_00N` — the asteroid-field tables a `Phase_N.AsteroidDefinition` names | ✅ 10 objects/pack, 384 group records, 3 fields each (`AsteroidModelName`, `AsteroidFrameName`, `EnumAsteroid` = **the frame record's `FrameCount`, 57/57**, and the frame holds **`index, quaternion(x,y,z,w), position(x,y,z)`** per asteroid — 37 518 items, unit norm 37 518/37 518); `Enum<Thing>` counts while `Enumerate<Thing>` names a table (54/60); the join resolves as `name_hash("stage\" + name)` 9/9; 🔑 a tenth `Frame_Alpha_S01_*` object nothing references — it miscounts AND its 7 frames have no placement records; 🔑 **S28_p1 has an asteroid volume but no definition** |
|
||||
| [`structures/asteroid-fields.md`](structures/asteroid-fields.md) | `AsteroidGroup_00N` — the asteroid-field tables a `Phase_N.AsteroidDefinition` names | ✅ 10 objects/pack, 384 group records, 3 fields each (`AsteroidModelName`, `AsteroidFrameName`, `EnumAsteroid` = **the frame record's `FrameCount`, 57/57**, and the frame holds **`index, quaternion(x,y,z,w), position(x,y,z)`** per asteroid — 37 518 items, unit norm 37 518/37 518); `Enum<Thing>` counts while `Enumerate<Thing>` names a table (54/60); the join resolves as `name_hash("stage\" + name)` 9/9; 🔑 a tenth `Frame_Alpha_S01_*` object nothing references — it miscounts AND its 7 frames have no placement records; 🔑 **S28.Phase_1 borrows `S14_p2_asteroid.tbl`** — the per-phase join shows 9 tables ↔ 9 volumes with one table shared |
|
||||
| [`structures/mcol-collision.md`](structures/mcol-collision.md) | `MCOL` — same container and map parameters as `REGN` | 🟡 OPENED — `POF0` at `data_size+16` 11/11, bbox pad words 11/11, `extent == max−min` 11/11, and bbox + cell-size distributions identical to `REGN` (2/6/3 and 2/9); everything past `0x40` ❔ |
|
||||
| [`structures/regn-map-grid.md`](structures/regn-map-grid.md) | `REGN` — a per-map spatial grid (and `MCOL` beside it) | ✅ CONFIRMED for the header, which self-checks on all 11 objects on |
|
||||
| [`structures/savegame-format.md`](structures/savegame-format.md) | Save file (`savedata`) — container ✅ exact, 3 fields named ✅, rest ❔ (2026-08-11) | ✅ CONFIRMED for the container and the chunk layout — parsed off the |
|
||||
|
||||
@@ -155,9 +155,41 @@ these are metres from the map origin. **There is no scale slot** — an asteroid
|
||||
size comes from its group's `AsteroidModelName`, which is why one group is one
|
||||
model plus one placement list.
|
||||
|
||||
## 🔴✅ CORRECTION — S28 does have a definition: it borrows Stage 14's (2026-08-28)
|
||||
|
||||
Withdrawing "`S28_p1` has an asteroid volume with no definition". That came from a
|
||||
set-difference over **file names**, which cannot see reuse. Joining the fields
|
||||
**per phase** instead:
|
||||
|
||||
| table | the phases that declare it |
|
||||
|---|---|
|
||||
| `S01_asteroid.tbl` | S01.Phase_1, S01.Phase_2 |
|
||||
| `S04_asteroid.tbl` | S04.Phase_1, S04.Phase_2 |
|
||||
| `S05_asteroid.tbl` | S05.Phase_1, S05.Phase_2 |
|
||||
| `S08_p1` / `S08_p2` | S08.Phase_1 / S08.Phase_2 |
|
||||
| `S13_asteroid.tbl` | S13.Phase_1 |
|
||||
| `S14_p1_asteroid.tbl` | S14.Phase_1 |
|
||||
| **`S14_p2_asteroid.tbl`** | **S14.Phase_2 *and* S28.Phase_1** |
|
||||
| `test_s8p1_asteroid.tbl` | **S02.Phase_1** |
|
||||
|
||||
**S28.Phase_1 declares `S14_p2_asteroid.tbl` while using its own
|
||||
`S28_p1_AsteroidVolume_wp` mesh** — it scatters Stage 14's rock list inside its
|
||||
own volume. Nine tables, nine volumes, one table shared by two phases.
|
||||
|
||||
⚠️ The earlier census's own arithmetic contained this: the four values counted
|
||||
**×12** (2 per language pack) were `S01`, `S04`, `S05` — two phases of one stage —
|
||||
and `S14_p2`, which is **two phases of two different stages**. Reading ×12 as
|
||||
"two phases of the same stage" was the error.
|
||||
|
||||
⚠️ **`test_s8p1_asteroid.tbl` is not test-only either** — it is what **S02.Phase_1**
|
||||
ships with. A `test_` name here is a leftover, not a dead table.
|
||||
|
||||
**The true residual is two phases, and it is the opposite pairing:**
|
||||
`S01.Phase_3` has the volume and no definition (S01 keeps its volume across all
|
||||
three phases but scatters rocks only in 1–2), and `S02.Phase_1` has a definition
|
||||
and no volume (its `MapMesh` is the plain `mapmesh_box_500km`).
|
||||
|
||||
## 🟡 Not settled
|
||||
|
||||
* Why `S28_p1` has an asteroid volume and no definition (S28 is the challenge
|
||||
mission that alone flies `rou_f004`, see [[stage-numbering-and-player-craft]]).
|
||||
* Whether the quaternion is object→world or world→object, and its handedness —
|
||||
the norm test cannot tell them apart.
|
||||
|
||||
Reference in New Issue
Block a user