docs: record oneOfSeveralPixInt (increment 5) + update remaining-widget list
GAUGE_COMPOSITE.md + CLAUDE.md: add the OneOfSeveral/oneOfSeveralPixInt button- lamp reconstruction to the done list; narrow the remaining widgets to map (radar marquee), PlayerStatus, vehicleSubSystems, plus the follow-ups to make the duck/searchlight buttons dynamic (extend the Mech table to 0x37 + a Searchlight table). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
a538d6438e
commit
eae631ba04
@@ -711,13 +711,15 @@ gap slots uninitialized and `Find` strcmps EVERY slot → a published table MUST
|
||||
`NextAttributeID`; fill gaps with a shared read-only pad member.** Done: **HeatSink table** (`CurrentTemperature`
|
||||
→ Heat readout shows 77), **Mech table** (dense prefix 0x15..0x21, `LinearSpeed` → SPEED readout shows ~225),
|
||||
**vertBar** (coolant bars; x87 pixel math recovered by disassembly), **segmentArcRatio** (speed arc; thin subclass
|
||||
of engine `SegmentArc`). **Base primitives `numeric`/`numericSpeed`/`digitalClock`/`rankAndScore` are ENGINE
|
||||
(L4GAUGE.cpp) — only need the data; `vertBar`/`segmentArcRatio`/`oneOfSeveralPixInt`/`map`/`PlayerStatus`/
|
||||
of engine `SegmentArc`), and **oneOfSeveralPixInt** (the button-state lamps — reconstructed the whole OneOfSeveral
|
||||
strip-selector family + PixMap8 blit path). **Base primitives `numeric`/`numericSpeed`/`digitalClock`/`rankAndScore`
|
||||
are ENGINE (L4GAUGE.cpp) — only need the data; `vertBar`/`segmentArcRatio`/`oneOfSeveralPixInt`/`map`/`PlayerStatus`/
|
||||
`vehicleSubSystems` are BT-specific (reconstruct + register).** Technique added: `tools/disas2.py <VA> <len>`
|
||||
(recover FPU math Ghidra drops — `FUN_004dcd94`=round, `FUN_004dcd00`=fabs) + `tools/vtdump.py <vtVA> <n>`
|
||||
(find a vtable override the assert-anchored decomp didn't export). REMAINING: `oneOfSeveralPixInt`/`map`/
|
||||
`PlayerStatus`/`vehicleSubSystems` (task #13) + the aggregate HeatSink-bank `AmbientTemperature` (`#if 0`'d 0xBBE)
|
||||
+ the Reservoir `coolantCapacity` shadow.
|
||||
(find a vtable override the assert-anchored decomp didn't export). REMAINING: `map` (radar — the marquee, needs the
|
||||
Mech table extended to 0x31 + a Sensor table + the `MapDisplay` renderer), `PlayerStatus`, `vehicleSubSystems`
|
||||
(task #13) + the aggregate HeatSink-bank `AmbientTemperature` (`#if 0`'d 0xBBE) + the Reservoir `coolantCapacity`
|
||||
shadow + making the duck/searchlight buttons dynamic (extend the Mech table to 0x37 + a Searchlight table).
|
||||
|
||||
**Alternate route considered:** run original `btrel410.exe` under DOSBox — **blocked**: it needs the
|
||||
VPX/IG board DOSBox can't emulate; bypassing it = the shim work anyway.
|
||||
|
||||
+14
-4
@@ -399,6 +399,13 @@ fill the gaps (bind not-yet-needed ids to a shared read-only pad member).
|
||||
4. **segmentArcRatio** (SegmentArcRatio, btl4gaug) — the SPEED arc. Thin subclass of engine `SegmentArc`;
|
||||
Execute override (`FUN_004dcd00`=fabs): `currentValue = clamp(|num/den * segmentSpan|,0,1)` then
|
||||
`SegmentArc::Execute()`. `segmentSpan = (Scalar)(|n|/(|n|-1))*0.75f` (int division → 0.75 for 36 segs).
|
||||
5. **oneOfSeveralPixInt** (OneOfSeveral base + PixInt, btl4gaug) — the button-state LAMPS. Reconstructed
|
||||
the whole OneOfSeveral family (strip selector: `col=selected%columns, row=selected/columns` → blit that
|
||||
sub-rect via `DrawPixelMap8`(pixmap)/`DrawBitMapOpaque`(bitmap); strip resource via
|
||||
`warehouse->pixelMap8Bin`). PixInt forces the PixMap path + one `GaugeConnectionDirectOf<int>` → the
|
||||
frame index; added the missing `OneOfSeveral::foregroundColor`@0x9C. Config binds duck/searchlight/
|
||||
display-mode/piloting-mode buttons; `ControlsMapper/DisplayMode` resolves live, the rest degrade to
|
||||
frame 0 until their tables land.
|
||||
|
||||
### Reconstruction-technique additions (durable)
|
||||
- **x87 float math Ghidra drops** (`FUN_004dcd94()`/`FUN_004dcd00()` show no args = FPU-stack operands):
|
||||
@@ -418,7 +425,10 @@ fill the gaps (bind not-yet-needed ids to a shared read-only pad member).
|
||||
- Reservoir shadow: `Reservoir::coolantCapacity`@0x128 shadows the inherited `thermalCapacity` the gauge
|
||||
reads → `Reservoir/CoolantCapacity` reads the base default; fix = delete the shadow + write thermalCapacity
|
||||
in the Reservoir ctor (bundle with the Reservoir coolant-bar verification).
|
||||
- Remaining widgets (task #13): `oneOfSeveralPixInt` (button lamps — `ControlsMapper/DisplayMode` already
|
||||
publishes; `DuckState`/`Searchlight/LightOn` need the Mech dense table extended to 0x37 + a Sensor/
|
||||
Searchlight table), `map` (radar — needs Mech RadarRange/LinearPos/AngularPos published + Sensor
|
||||
RadarPercent), `PlayerStatus`, `vehicleSubSystems`.
|
||||
- ✅ **oneOfSeveralPixInt** DONE (increment 5 above). To make its `DuckState`/`Searchlight/LightOn`
|
||||
buttons DYNAMIC (they read frame 0 today): extend the Mech dense table to 0x37 (DuckState@0x3f8) + add a
|
||||
Searchlight `LightOn` table.
|
||||
- Remaining widgets (task #13): `map` (radar — the marquee; needs the Mech dense table extended to 0x31 for
|
||||
RadarRange/RadarLinearPosition/RadarAngularPosition + a Sensor `RadarPercent` table + the map/radar
|
||||
renderer reconstruction, base `MapDisplay` in btl4rdr.cpp), `PlayerStatus` (comm/score, 8 uses),
|
||||
`vehicleSubSystems` (26 uses).
|
||||
|
||||
Reference in New Issue
Block a user