#118: the FLASHING eject invite fires -- generator OUT state + pilot keypad
The last hop lands: a destroyed Generator now reaches its OUT display state (stateAlarm 4 -- enum renamed from the placeholder "GeneratorRecovered"; [T3 inferred link, both endpoints byte-verified: the eject evaluator's state==4 dead clause @0049fa1c and the authored alarm streams' conditions 4/5 -> gotoEngineering 0x80 + engEject 0x85]). Wired from the one crit chokepoint (MechSubsystem::ForceCriticalFailure -> BTGeneratorMarkOut bridge). Verified live: gen kill -> the quad-select columns FLASH (RIO 0x37 fast-flash) -- the pod's guided "punch out now" trail. Plus the authentic panel eject input: CONTROLS.MAP binds the desktop NUMPAD to the pilot keypad (keypad pilot 0-9) -- while armed, any pilot- keypad key fires the eject (the binary's only armed binding); un-armed they feed program entry. The full 1995 eject experience is now live: alarm -> flashing invite trail -> lit Panic button -> press (Panic / numpad / Backspace) -> punch-out -> death without honor -> respawn. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
417008a6d4
commit
aa54655980
@@ -1305,10 +1305,10 @@ void
|
||||
{
|
||||
// The THERMAL BREAKER: output collapses to 0 until the generator cools
|
||||
// past NormalHeat and re-spins (task #11 diag below shows the duty cycle).
|
||||
if (stateAlarm.GetLevel() != GeneratorRecovered && getenv("BT_HEAT_LOG"))
|
||||
if (stateAlarm.GetLevel() != GeneratorOut && getenv("BT_HEAT_LOG"))
|
||||
DEBUG_STREAM << "[gen] " << GetName() << " TRIPPED (T="
|
||||
<< currentTemperature << ")" << std::endl;
|
||||
stateAlarm.SetLevel(GeneratorRecovered); // SetLevel 4
|
||||
stateAlarm.SetLevel(GeneratorOut); // SetLevel 4
|
||||
}
|
||||
|
||||
switch (stateAlarm.GetLevel()) // this[0x84] @0x210
|
||||
@@ -1337,7 +1337,7 @@ void
|
||||
}
|
||||
break;
|
||||
|
||||
case GeneratorRecovered: // 4
|
||||
case GeneratorOut: // 4
|
||||
outputVoltage = 0.0f;
|
||||
if (heatAlarm.GetLevel() == HeatSink::NormalHeat) // this+0x184 == 0
|
||||
{
|
||||
@@ -1779,6 +1779,17 @@ int BTSubsystemIsGenerator(::Subsystem *sub)
|
||||
return (sub != 0 && sub->IsDerivedFrom(*Generator::GetClassDerivations())) ? 1 : 0;
|
||||
}
|
||||
|
||||
// Destruction -> OUT display state (see Generator::MarkGeneratorOut, the [T3
|
||||
// inferred link]): a destroyed generator must reach stateAlarm 4 or the
|
||||
// authored gotoEngineering/engEject FLASH invite (alarm conditions 4/5) never
|
||||
// fires and the eject evaluator's state clause never sees it. Called from
|
||||
// MechSubsystem::ForceCriticalFailure (the one crit-death chokepoint).
|
||||
void BTGeneratorMarkOut(::Subsystem *sub)
|
||||
{
|
||||
if (sub != 0 && sub->IsDerivedFrom(*Generator::GetClassDerivations()))
|
||||
((Generator *)sub)->MarkGeneratorOut();
|
||||
}
|
||||
|
||||
//===========================================================================//
|
||||
// BTGeneratorCountsForEject -- complete-type bridge for the EJECT-permission
|
||||
// evaluator (Mech::EvaluateEjectPermission @0049fa1c). Binary clause: classID
|
||||
|
||||
Reference in New Issue
Block a user