#118 alarm dig complete: the TechStatus bit model -- MarkGeneratorOut bridge removed

The gauge-alarm "condition" is a STATUS-FLAG BIT INDEX edge-scanned by
MechTech (bit 0/1 structure, 2 leak, 3 heat, 4 AmmoBurning, 5 Jammed,
6 !HasVoltage). Conditions 4/5 -> the engEject flash = the AMMO purge/unjam
invite (flashing the very key whose streamed function is EjectAmmo) --
never pilot eject; cond 6 -> the bus-switch invite; the PANIC lamp is the
sole pilot-eject indicator.

The destruction->stateAlarm(4) bridge is REMOVED as unfounded: alarms never
read stateAlarm; state 4 is the THERMAL BREAKER state produced by
GeneratorSimulation itself (byte-matched vs FUN_004b1f7c). And the binary's
crit distributor (@0049c9a8, read raw) touches nothing electrical -- a
generator destroyed in place keeps stale Ready voltage until any transition
recomputes output via (1 - damage) x rated. The port now matches that
subtlety exactly (verified: single-gen force-kill -> no bus invite, no arm,
silent unarmed keypad -- all authentic).

KB: the full bit table + invite semantics + electrical subtlety recorded in
decomp-reference.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-08-04 03:18:50 -05:00
co-authored by Claude Fable 5
parent 609dde8051
commit a728fa6de9
3 changed files with 43 additions and 16 deletions
+8 -7
View File
@@ -287,13 +287,14 @@ void MechSubsystem::ForceCriticalFailure()
{
((DamageZone *)damageZone)->SetDamageZoneState(1); // zone+0x10
}
// Generator: also reach the OUT display state (stateAlarm 4) so the
// authored gotoEngineering + engEject FLASH invite fires (alarm stream
// conditions 4/5). [T3 inferred link -- see Generator::MarkGeneratorOut.]
{
extern void BTGeneratorMarkOut(::Subsystem *sub); // powersub.cpp
BTGeneratorMarkOut(this);
}
// (A MarkGeneratorOut call lived here 2026-08-03 for a few hours --
// REMOVED same night when the alarm dig completed: the gauge-alarm
// conditions are STATUS-FLAG BITS scanned by MechTech, not stateAlarm
// levels. Generator death raises bit 6 (!HasVoltage) AUTHENTICALLY ->
// the gotoEngineering + engBusMode invite; conditions 4/5 (engEject)
// are the WEAPON's AmmoBurning/Jammed bits -- the ammo-purge invite,
// never a pilot-eject one. stateAlarm 4's real producer remains
// unfound (export holes) and nothing observable needs it.)
}
// issue #22 (PORT): the fresh-mech respawn repair -- the exact inverse of the
+11 -9
View File
@@ -468,15 +468,17 @@ class Generator;
int
GeneratorStateOf() { return stateAlarm.GetLevel(); } // source+0x210
// DESTRUCTION -> the OUT display state (stateAlarm 4). [T3 inferred
// link, 2026-08-03]: both endpoints are byte-verified -- the eject
// evaluator treats stateAlarm==4 as generator-dead (@0049fa1c) and the
// authored alarm streams flash the gotoEngineering + engEject invite on
// conditions 4/5 -- but the binary's destroyed->SetLevel(4) call site
// sits in unexported code (no FUN_0041bbd8(+0x1fc,4) in the flat
// export). Called from MechSubsystem::ForceCriticalFailure via the
// BTGeneratorMarkOut bridge; replace with the exact site when the
// MechSubsystem::TakeDamage / OnAlarmChanged cluster is reconstructed.
// UNUSED -- and now PROVEN unnecessary (2026-08-04 dig): stateAlarm 4
// (GeneratorOut) is the THERMAL BREAKER state, produced by
// GeneratorSimulation itself (heatAlarm==FailureHeat -> SetLevel 4,
// byte-matched vs FUN_004b1f7c) -- never by destruction. The gauge
// alarms scan STATUS-FLAG BITS via MechTech (bit 6 = !HasVoltage);
// a generator destroyed IN PLACE keeps its stale Ready voltage in
// the BINARY TOO (the crit distributor @0049c9a8 touches nothing
// electrical) until any transition recomputes output through the
// (1 - damage) formula. A short-lived ForceCriticalFailure bridge
// to this method was removed as unfounded; keep the method only as
// documentation of the state's meaning.
void
MarkGeneratorOut() { stateAlarm.SetLevel(GeneratorOut); }
Scalar