Issue #20: wire Mech BalanceCoolant (id 0x16) -- the auto-cooling-balance button
Third instance of the silent-swallow pattern (unregistered handler id ->
Receiver NullHandler). The Mech handler table @0x50BDF8 binds
{0x16, "BalanceCoolant" -> @0049f728}; the reconstruction never registered it.
Disasm-verified body (@0049f728): press-only guard (msg+0xc > 0; the binary
has NO novice lockout on this one), set EVERY condenser's valveState@0x1D0
to 1 (equal weights), then the shared redistribute @0049f788 -- which the
port ALREADY had faithfully as BTRecomputeCondenserValves (flow =
valve/total + condenserAlarm pulse; MoveValve calls it). So the fix is:
- mech.hpp/mech.cpp: BalanceCoolantMessageID=0x16 + handler + MESSAGE_ENTRY
- heatfamily_reslice.cpp: BTBalanceCondenserValves bridge (Condenser is a
complete type there; sets valves to 1 + redistributes)
- mech4.cpp: BT_BALTEST scripted harness (MoveValve press alternating with
a Balance press)
VERIFIED headless (BT_BALTEST=1 BT_VALVE_LOG=1):
boot -> all valves 1, flows 0.1667 each
MoveValve-> condenser#1 valve 5, flows 0.5 / 0.1x5 (the priority boost)
BALANCE -> all valves 1, flows 0.1667 each (equalized)
Awaiting the tester's live ADV-mode confirmation.
KB: decomp-reference.md Mech-table row marked wired.
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
4aab10ba89
commit
e9db161404
@@ -5654,6 +5654,43 @@ void
|
||||
}
|
||||
}
|
||||
|
||||
// issue #20 verify (BT_BALTEST): alternate a MoveValve (id 4) press to
|
||||
// the first condenser with a Mech BalanceCoolant (id 0x16) press every
|
||||
// ~2s -- BT_VALVE_LOG shows the valve going 1->5 then BALANCE pulling
|
||||
// every valve back to 1 with equal flows.
|
||||
if (getenv("BT_BALTEST") && (Entity *)this == application->GetViewpointEntity())
|
||||
{
|
||||
static int s_balTest = 0;
|
||||
if ((++s_balTest % 120) == 0)
|
||||
{
|
||||
int phase = (s_balTest / 120) & 1;
|
||||
if (phase == 0)
|
||||
{
|
||||
for (int s = 1; s < GetSubsystemCount(); ++s)
|
||||
{
|
||||
Subsystem *sub = GetSubsystem(s);
|
||||
if (sub != 0 && (int)sub->GetClassID() == 0xBBD) // Condenser
|
||||
{
|
||||
ReceiverDataMessageOf<ControlsButton> msg(
|
||||
4 /*Condenser::MoveValveMessageID*/,
|
||||
sizeof(ReceiverDataMessageOf<ControlsButton>),
|
||||
(ControlsButton)1);
|
||||
sub->Dispatch(&msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ReceiverDataMessageOf<ControlsButton> msg(
|
||||
0x16 /*Mech::BalanceCoolantMessageID*/,
|
||||
sizeof(ReceiverDataMessageOf<ControlsButton>),
|
||||
(ControlsButton)1);
|
||||
Dispatch(&msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// task #6 dev harness: the config-session BRACKET. 'G' edge ->
|
||||
// dispatch ConfigureMappables (id 9) press/release to the selected
|
||||
// weapon -- the exact ReceiverDataMessageOf<ControlsButton> payload
|
||||
|
||||
Reference in New Issue
Block a user