re: exact anchor offsets (GameMesh.vbuf_offset) -- correcting yesterday's defect table
The first read of the capture-truth table located our resources by searching the container for their leading vertices, which reads much worse than reality: the same leading run occurs at several offsets in one container. GameMesh now carries the offset the anchor scan actually chose, so the comparison is exact -- 4 of the ship's drawn buffers are anchored correctly, 2 are the twin collapse, and 2 are real mis-anchors of a size we do decode (brg 51 verts, eng_02_l 44). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -605,25 +605,38 @@ is uploaded contiguously and **a capture names the exact file offset of every
|
||||
buffer the engine drew**. Log 03 loaded the container at a different address, so
|
||||
the constant is per-run, not baked.
|
||||
|
||||
**2. Read against our anchor scan, that is a defect list**
|
||||
**2. Read against our anchor scan, that is a defect list.** `GameMesh` now
|
||||
carries `vbuf_offset` — the offset the anchor scan actually placed a sub-mesh at
|
||||
— so the comparison is exact
|
||||
([`captures/stage-s01-capture-truth-offsets.txt`](../captures/stage-s01-capture-truth-offsets.txt)):
|
||||
|
||||
| file offset | drawn vcount | claimed by our decode |
|
||||
|---|---|---|
|
||||
| `0x3b3ee8` | 119 | `e106_bdy_01_l`(119), `e106_bdy_02_l`(119) |
|
||||
| `0x3c55d8` | 119 | — **nobody** |
|
||||
| `0x3dd2c4` | 146 | `e106_bdy_03`(815), `e106_bdy_03_l`(146) |
|
||||
| `0x40763c` | 179 | `e106_bdy_04_l`(179) ✅ |
|
||||
| `0x40e418` | 51 | `e106_brg_01`(202), `e106_brg_01_m`(92) |
|
||||
| `0x444ccc` | 58 | `e106_eng_01_l`(58) ✅ |
|
||||
| `0x45705c` | 82 | `e106_wep_02_01_l`(82), `e106_wep_02_01_m`(294) |
|
||||
| `0x38788` `0x4b8b8` `0xb6574` `0xdbbac` `0x133da0` `0x162840` `0x44a32c` | 181, 93, 41, 77, 76, 60, 44 | — **nobody** |
|
||||
| drawn offset | vcount | our resource anchored there | our resources with that vcount |
|
||||
|---|---|---|---|
|
||||
| `0x3b3ee8` | 119 | `e106_bdy_01_l`, `e106_bdy_02_l` | `bdy_01_l`, `bdy_02_l` |
|
||||
| `0x3c55d8` | 119 | — **nobody** | `bdy_01_l`, `bdy_02_l` |
|
||||
| `0x3dd2c4` | 146 | `e106_bdy_03_l` ✅ | `bdy_03_l` |
|
||||
| `0x40763c` | 179 | `e106_bdy_04_l` ✅ | `bdy_04_l` |
|
||||
| `0x40e418` | 51 | — **nobody** (ours sit `0x5d0` earlier) | `brg_01_b_02`, `brg_01_l` |
|
||||
| `0x444ccc` | 58 | `e106_eng_01_l` ✅ | `eng_01_l` |
|
||||
| `0x44a32c` | 44 | — **nobody** | `eng_02_l` |
|
||||
| `0x45705c` | 82 | `e106_wep_02_01_l` ✅ | `wep_02_01_l` |
|
||||
| `0x38788` `0x4b8b8` `0xb6574` `0xdbbac` `0x133da0` `0x162840` | 181, 93, 41, 77, 76, 60 | — nobody | mostly none (other objects in the stage) |
|
||||
|
||||
Two resources land exactly (`bdy_04_l`, `eng_01_l`). Everywhere else a **full or
|
||||
`_m` resource starts at the offset of its own `_l` buffer** — `bdy_03` decodes
|
||||
815 vertices beginning where the engine's 146-vertex LOD begins — and eight
|
||||
drawn buffers are claimed by no resource at all. This is the anchor scan taking
|
||||
the first candidate that validates, seen directly rather than inferred.
|
||||
Four of the ship's drawn buffers are anchored exactly right. Two are the twin
|
||||
collapse below. **Two are mis-anchors of a size we do have**: the engine's
|
||||
51-vertex bridge buffer is at `0x40e418` while both our 51-vertex bridge
|
||||
resources sit at `0x40de48`, and its 44-vertex `eng_02_l` is at `0x44a32c` while
|
||||
ours is elsewhere entirely. The remaining six belong to other objects in the
|
||||
stage (`n041`, `n042`, `e303`), only two of which we decode at the right size.
|
||||
|
||||
> **A trap worth recording.** The first version of this table located our
|
||||
> resources by *searching the container for their leading vertices* instead of
|
||||
> asking the decoder, and it read much worse — full and `_m` resources appearing
|
||||
> to start inside their own `_l` buffer. That was an artifact: **the same leading
|
||||
> vertex run occurs at several offsets in one container** (`e106_bdy_03`'s first
|
||||
> eight positions occur at four, `bdy_01`'s at three). That multiplicity is
|
||||
> itself the reason the anchor scan is ambiguous — but it makes a position search
|
||||
> useless for asking where a resource *was* anchored. Hence `vbuf_offset`.
|
||||
|
||||
**3. The twin pair is an anchoring error, and the mirror is in the data.** For
|
||||
`e106_bdy_01_l` ≡ `e106_bdy_02_l` the capture shows **two** 119-vertex buffers
|
||||
|
||||
Reference in New Issue
Block a user