Preserve engine type side view cohorts

This commit is contained in:
Jan Petykiewicz 2026-04-21 23:42:20 -07:00
commit 7741dc2087
3 changed files with 265 additions and 12 deletions

View file

@ -15,11 +15,13 @@ This file is the short active queue for the current runtime and reverse-engineer
The checked 1.05 corpus now also splits `.car` auxiliary stems into `126` direct matches, `14` role-neutral roots, and only `5` truly distinct cases, with those five exact internal-to-auxiliary pairs now preserved directly in the report surface, while `.cgo` collapses into five stable scalar ladders instead of arbitrary floats.
The early `.lco` lane block is now partially partitioned too: only offsets `0x20`, `0x34`, `0x38`, `0x3c`, `0x44`, `0x48`, and `0x54` behave like low-cardinality buckets, while the other early lanes still look high-variance.
The side-view resource path is now grounded into `Data/2D/rt3_2IMB.PK4`, and the `.imb` parser now decodes shipped comment-suffixed numeric rows plus `_NE` profile fields such as `HorizontalScaleModifier` and `ImageWHScaled`.
The checked PK4 linkage split is now explicit too: `132 / 145` side-view resource names resolve directly, but the remaining `13` are the missing `CarSideView_3.imb` cohort and that hole exists in both checked installs, while `43 / 145` derived `{internal_stem}_NE.imb` names resolve and all of those hits belong to matched locomotive pairs.
The checked PK4 linkage split is now explicit too: `132 / 145` side-view resource names resolve directly in 1.05, but the remaining `13` are the missing `CarSideView_3.imb` cohort and that hole exists in both checked installs, while `43 / 145` derived `{internal_stem}_NE.imb` names resolve and all of those hits belong to matched locomotive pairs.
The parser now preserves that `CarSideView_3` miss cohort exactly, and it also preserves the tiny conditional `.lco` companion-profile seam directly: in 1.05 the padded `.lco` companion/body slots collapse to `Zephyr / (none) / CarSideView_3` for `242_a1_l`, `gp35l`, `u1l`, and `zephyrl`, and to `VL80T / Loco / CarSideView_{1,2}` for `be 5-7`, `f3 loco`, and `gp7`.
The classic install widens the same `0xc0` seam further: the side-view slot is not only `CarSideView_*` but also a larger unresolved `*_Profile.imb` family, and every checked classic `*_Profile.imb` reference currently misses the packaged `rt3_2IMB.PK4` surface too.
The packaged profile metadata is stable enough to summarize: `CarSideView_1` is `512x512` at `0.04` VRAM, `CarSideView_2` is `512x256` at `0.02`, and every packaged `_NE` profile is `512x128` with `HorizontalScaleModifier = 0.75` and `MaxPercentOfInterfaceVRAM = 0.09`.
The `_NE` split is now aligned with the locomotive display census too: all `43` packaged `_NE` hits live inside the grounded display prefix, and all `5` unmatched display-tail families are still missing packaged `_NE` profiles.
The cargo side is partially linked now as well: the `.cgo` ladder families and `.cct` sidecar identifiers share the same cargo-family keys for ten checked families, with `Troop` left as the only `.cct`-only outlier.
The next honest static work is to keep promoting those fixed lanes into stable parser fields, explain the five remaining distinct auxiliary-stem cases, and decide how far the `.cgo` ladders plus the low-cardinality `.lco` lanes can be grounded without overclaiming semantics. The latest corpus check did narrow one point already: the low-cardinality `.lco` lanes do not split cleanly on `_NE` presence, so that branch now wants binary/code correlation rather than more aggregate-only counting.
The next honest static work is to keep promoting those fixed lanes into stable parser fields, explain the five remaining distinct auxiliary-stem cases, decide whether the classic `*_Profile.imb` side-view references are dead loose-file dependencies or a still-unmapped package family, and decide how far the `.cgo` ladders plus the low-cardinality `.lco` lanes can be grounded without overclaiming semantics. The latest corpus check did narrow one point already: the low-cardinality `.lco` lanes do not split cleanly on `_NE` presence, so that branch now wants binary/code correlation rather than more aggregate-only counting.
Preserved checked parser detail now lives in [EngineTypes parser semantics](rehost-queue/engine-types-parser-semantics-2026-04-21.md).
Preserved checked format inventory detail now lives in [RT3 format inventory](rehost-queue/format-inventory-2026-04-21.md).

View file

@ -71,6 +71,54 @@ first `.car` / `.lco` / `.cgo` / `.cct` inspector pass landed.
- no freight-car or tender family currently resolves to a packaged `{internal_stem}_NE.imb`
- That `CarSideView_3.imb` hole is now confirmed across both checked installs (`rt3` and
`rt3_105`): neither shipped `rt3_2IMB.PK4` contains a `CarSideView_3.imb` entry.
- The parser now preserves the exact 1.05 `CarSideView_3.imb` miss cohort directly:
- `242_a1_l`
- `242_a1_t`
- `class_460`
- `class_a1l`
- `class_a1t`
- `class_p8l`
- `class_p8t`
- `class_qjl`
- `class_qjt`
- `gp35l`
- `u1l`
- `u1t`
- `zephyrl`
- The conditional `.lco` companion/body seam is also narrow enough to preserve exactly in 1.05:
- `companion=Zephyr / body=(none) / side_view=CarSideView_3.imb`
- `242_a1_l`
- `gp35l`
- `u1l`
- `zephyrl`
- `companion=VL80T / body=Loco / side_view=CarSideView_1.imb`
- `f3 loco`
- `gp7`
- `companion=VL80T / body=Loco / side_view=CarSideView_2.imb`
- `be 5-7`
- The classic install widens the `0xc0` side-view seam beyond `CarSideView_*`.
The parser now confirms a larger checked classic `*_Profile.imb` reference family at `0xc0`,
and every one of those checked classic profile names currently misses the packaged
`rt3_2IMB.PK4` entry set too:
- `264T_Profile.imb`
- `Black5_Profile.imb`
- `BR39_Profile.imb`
- `ClassS_Profile.imb`
- `Daylight484_Profile.imb`
- `E111_Profile.imb`
- `Eurostar_Profile.imb`
- `G10_Profile.imb`
- `G4_Profile.imb`
- `Goods_Profile.imb`
- `GP40-2_Profile.imb`
- `GP7D_Profile.imb`
- `ICE_Profile.imb`
- `Mogul_Profile.imb`
- `P-2_Profile.imb`
- `Sm2_Profile.imb`
- `TenWheeler_Profile.imb`
- `V2Class_Profile.imb`
- `Vittorio_Profile.imb`
- The packaged profile metadata is now bounded too:
- `CarSideView_1.imb`: `512x512`, `MaxPercentOfInterfaceVRAM = 0.04`
- `CarSideView_2.imb`: `512x256`, `MaxPercentOfInterfaceVRAM = 0.02`
@ -123,9 +171,12 @@ first `.car` / `.lco` / `.cgo` / `.cct` inspector pass landed.
- what the `0xa2` auxiliary stem really represents in the five remaining distinct cases:
alternate content root, paired tender/loco image root, or a narrower foreign-display alias
- whether the trailing side-view resource can be tied cleanly to the PK4-backed `CarSideView_*`
metadata and the engine-specific `_NE.imb` profiles without inventing frontend semantics
metadata, the classic `*_Profile.imb` reference family, and the engine-specific `_NE.imb`
profiles without inventing frontend semantics
- whether the `CarSideView_3.imb` missing cohort is a classic-only asset dependency, an omitted
1.05 package, or just a dead resource reference in the shipped `EngineTypes` data
- whether the classic `*_Profile.imb` references are dead loose-file dependencies, a separate
package family outside `rt3_2IMB.PK4`, or a still-unmapped authoring convention
- `.lco`
- whether the guarded companion-stem slot is a tender/fallback display family, a foreign reuse
key, or only a subset authoring convenience