Gitea #6: secondary MFD Damage/Critical/Heat cycling -- reconstruct the
NotifyOfDisplayModeChange override (vtbl+0x4C @4d1ae4) + wire desktop 'N'
The secondary screen's schematic selector was mislabeled: @004d1ae4 (the
bits-18..20 ModeSecondary* mask swap) was reconstructed as a non-virtual
"SetControlMode" that nothing called, so the desktop stayed pinned on the
Damage view. The binary's L4 vtable @0051e440 pins the truth:
+0x48 = @004d1acc <- CycleControlModeMessageHandler (FUN_004afbe0):
forwards to the base RET no-op @004b048c. A BAS/MID/ADV
control-mode change never touches the secondary view
(empirically confirmed: BT_MODECYCLE_TEST cycles the CONTROL
MODE lamp, mask bits 18-20 unchanged, schematic stays ARMOR).
+0x4C = @004d1ae4 <- CycleDisplayModeMessageHandler (FUN_004afcac):
THE Damage/Critical/Heat selector, indexed by displayMode
(table @0051dbe4 = ModeSecondaryDamage/Critical/Heat).
Authentic pod inputs (streamed type-6 .CTL EventMappings, dumped via the
new BT_CTRLMAP_LOG EVENT records): secondary-panel button 0x15 -> msg
0x15 CycleDisplayMode (manual p13, the "'Mech status Info center" bottom
left of the secondary screen), button 0x18 -> msg 0x14 CycleControlMode
(manual p6, top right), 0x10/0x11 -> ZoomIn/Out. The DOS keyboard
fallbacks (Keypress 0x13d/0x13e = extended F3/F4) are dead under the
WinTesla VK map, hence the desktop pin.
Port wiring (the M/ModeCycle pattern): key N / pad RightThumb -> action
DisplayCycle -> gBTDisplayCycle -> CycleDisplayModeNow() -- the same body
the pod console button message drives. Both .MAP profiles + the
compiled-in default updated.
Verified live (docked gauges + BT_SHOT, BT_VIEWCYCLE_TEST): the sec
panel cycles ARMOR DAMAGE silhouette -> CRITICAL DAMAGE subsystem list
-> HEAT DAMAGE colored list, mask 0x450421 -> 0x490421 -> 0x510421; M
control-mode cycling un-regressed (BAS/MID/ADV lamp cycles, view pinned).
Diags: BT_MODE_LOG, BT_VIEWCYCLE_TEST=<frame>, BT_MODECYCLE_TEST=<frame>,
BT_CTRLMAP_LOG now dumps EVENT records. KB: gauges-hud secondary-view
section rewritten, CLASSMAP +0x48/+0x4C slots, decomp-reference env
gates, GAUGE_COMPOSITE phase-4 entry resolved.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
2ae9bd43ae
commit
1d6339b226
@@ -652,6 +652,7 @@ static int gBTPPCKey = 0;
|
||||
static int gBTMissileKey = 0;
|
||||
static int gBTPinkyKey = 0; // key '4' = the pod's 4th fire button (Pinky 0x45)
|
||||
int gBTModeCycle = 0; // 'M' edge: cycle the control mode (mapper consumes)
|
||||
int gBTDisplayCycle = 0; // 'N' edge: cycle the secondary schematic (Gitea #6, mapper consumes)
|
||||
int gBTLookBehind = 0; // 'V' held: the pod's rear-view button (task #68)
|
||||
float gBTTwistAxis = 0.0f; // Q/E torso-twist deflection (assisted-mode stick X)
|
||||
float gBTElevAxis = 0.0f; // R/F torso-elevation (pitch aim, stick Y)
|
||||
@@ -2670,6 +2671,15 @@ void
|
||||
const int mNow = gBTInput.modeCycle;
|
||||
if (mNow && !sPrevM) gBTModeCycle = 1; // edge -> one cycle
|
||||
sPrevM = mNow;
|
||||
// Gitea #6: 'N' cycles the secondary screen's schematic
|
||||
// (Damage -> Critical -> Heat) -- the pod's status-info-
|
||||
// center button (manual p13), CycleDisplayModeNow.
|
||||
{
|
||||
static int sPrevN = 0;
|
||||
const int nNow = gBTInput.displayCycle;
|
||||
if (nNow && !sPrevN) gBTDisplayCycle = 1;
|
||||
sPrevN = nNow;
|
||||
}
|
||||
// (task #68) LookBehind action HELD = the pod's rear-view
|
||||
// button (releases back to the forward view). Rear-mounted
|
||||
// weapons (blackhawk/owens back racks) fire only in it.
|
||||
@@ -5149,6 +5159,38 @@ void
|
||||
gBTValveKey = (s_vtFrame >= 600 && s_vtFrame < 610) ? 1 : 0;
|
||||
}
|
||||
|
||||
// Gitea #6 scripted verify (BT_VIEWCYCLE_TEST=<frame>): pulse one
|
||||
// secondary-schematic cycle (Damage -> Critical -> Heat -> Damage) at
|
||||
// the given frame and every 300 frames after -- with
|
||||
// BT_DEV_GAUGES_DOCK + BT_SHOT the docked sec panel's schematic layer
|
||||
// swap is pixel-verifiable. BT_MODECYCLE_TEST=<frame> does the same
|
||||
// for the M-key CONTROL-mode cycle (the empirical proof that a
|
||||
// control-mode change does NOT touch the secondary view).
|
||||
if ((Entity *)this == application->GetViewpointEntity()
|
||||
&& getenv("BT_VIEWCYCLE_TEST"))
|
||||
{
|
||||
static int s_vcFrame = 0;
|
||||
++s_vcFrame;
|
||||
int t0 = atoi(getenv("BT_VIEWCYCLE_TEST"));
|
||||
if (t0 < 1) t0 = 600;
|
||||
if (s_vcFrame >= t0 && (s_vcFrame - t0) % 300 == 0)
|
||||
{
|
||||
gBTDisplayCycle = 1;
|
||||
}
|
||||
}
|
||||
if ((Entity *)this == application->GetViewpointEntity()
|
||||
&& getenv("BT_MODECYCLE_TEST"))
|
||||
{
|
||||
static int s_mcFrame = 0;
|
||||
++s_mcFrame;
|
||||
int t0 = atoi(getenv("BT_MODECYCLE_TEST"));
|
||||
if (t0 < 1) t0 = 600;
|
||||
if (s_mcFrame >= t0 && (s_mcFrame - t0) % 300 == 0)
|
||||
{
|
||||
gBTModeCycle = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Gitea #7 scripted verify (BT_FLUSH_TEST=<frame>): hold the coolant
|
||||
// flush for ~60 sim frames starting at the given frame -- the
|
||||
// reservoir drains ([flush] log), the coolant vertBar drops, and the
|
||||
|
||||
Reference in New Issue
Block a user