From a02339112a8eff46d5e904a9acafe9c4f8c55930 Mon Sep 17 00:00:00 2001 From: arcattack Date: Tue, 7 Jul 2026 06:54:44 -0500 Subject: [PATCH] vehicleSubSystems: verify Phase 1 end-to-end + confirm the Phase-2 blocker Add a BT_VSS_LOG diagnostic (Make entry + per-subsystem classID/auxScreen dump + the ConfigureForModel path). Verified under BT_DEV_GAUGES: the gauge renderer builds, ConfigureForModel(Init) runs bhk1Init, and VehicleSubSystems::Make is called with the full 33-subsystem roster -- the dispatcher iterates every subsystem and its classID switch resolves the displayable types (0xBC3 Sensor, 0xBC6 Myomers, 0xBC8/0xBD4 Emitter/PPC, 0xBCD/0xBD0 Proj/Missile). CONFIRMED (empirically) the Phase-2 blocker: subsystem[0x1dc] (the aux-screen position the Make gates on) reads 0xCDCDCDCD (uninitialized) / garbage for the displayable subsystems -> every panel hits the "Illegal aux screen position" skip, so nothing renders yet. Phase 2 = populate the aux-screen field from the subsystem resource. Combat remains un-regressed (the skip path is inert). Co-Authored-By: Claude Opus 4.8 (1M context) --- game/reconstructed/btl4app.cpp | 3 +++ game/reconstructed/btl4gau2.cpp | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/game/reconstructed/btl4app.cpp b/game/reconstructed/btl4app.cpp index 0a2439d..4cf3cf9 100644 --- a/game/reconstructed/btl4app.cpp +++ b/game/reconstructed/btl4app.cpp @@ -645,6 +645,9 @@ BTL4Application::SharedData BTL4GaugeRenderer *gauge_renderer = (BTL4GaugeRenderer*)GetGaugeRenderer(); // *(this+0x4c) + if (getenv("BT_VSS_LOG")) + DEBUG_STREAM << "[vss] MakeViewpointEntity: gaugeRenderer=" + << (int)(gauge_renderer != NULL) << " -> ConfigureForModel(Init)\n" << std::flush; if (gauge_renderer != NULL) { gauge_renderer->ConfigureForModel("Init", viewing_entity); // FUN_0046ff64 diff --git a/game/reconstructed/btl4gau2.cpp b/game/reconstructed/btl4gau2.cpp index b494898..79f230b 100644 --- a/game/reconstructed/btl4gau2.cpp +++ b/game/reconstructed/btl4gau2.cpp @@ -1371,6 +1371,8 @@ Logical imageNames[p] = methodDescription.parameterList[p].data.string; int count = entity->GetSubsystemCount(); // entity+0x124 + if (getenv("BT_VSS_LOG")) + DEBUG_STREAM << "[vss] Make called: subsystemCount=" << count << "\n" << std::flush; for (int i = 0; i < count; i++) { if (i == 0) // slot 0 = the controls mapper @@ -1382,6 +1384,9 @@ Logical continue; int group = *(int *)((char *)sub + 0x1dc) - 1; // aux-screen position 1..12 + if (getenv("BT_VSS_LOG")) + DEBUG_STREAM << "[vss] i=" << i << " classID=" << (int)sub->GetClassID() + << " auxScreen[0x1dc]=" << (group + 1) << "\n" << std::flush; if (group < 0) { DebugStream << "Auxiliary screen position = zero\n";