#119 leak-voice stutter SETTLED: authentic -- the wooHoo latch is authored OFF
Deterministic leak bench (BT_KILL_SUBSYS partial form, "Condenser4=0.5":
zone level without the crit -- a clean leak source) + the aud-tail receipts
decode the voice stutter end to end: the warning is a phrase-sequenced
voice patch (Warnings01 zones as notes), and every techstat leak-bit edge
restarts/stops the sequence mid-phrase (authored zero-release = hard cut).
At a drained tank the draw HUNTS the authored 0.0025/0.003 band -> edge
streams -> progressive clipping as more systems hunt.
The anti-spam wooHoo latch would bound exactly this -- but no armer exists
anywhere in the flat export, and the authored tuning is minDur=0 range=0
chance=0 (dumped live): DORMANT BY AUTHORING. The clipping is the 1995
experience; the port's one real bug here was the 2x hunt cadence, already
fixed by the 28 Hz filter (#119, 1df2c57). No code change warranted.
Bench additions: the partial-damage killsub form + the authored-tuning
dump (BT_LAMP_LOG).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
a728fa6de9
commit
42b0691592
@@ -6618,23 +6618,46 @@ void
|
||||
{
|
||||
// COMMA-LIST (eject bench): "GeneratorA,GeneratorB,..." kills
|
||||
// each named subsystem; single-name behavior unchanged.
|
||||
// PARTIAL form (leak bench, #119): "Condenser4=0.5" sets the
|
||||
// subsystem's own zone to that LEVEL without the crit kill --
|
||||
// a deterministic LEAK source (damage x heatLoad drives the
|
||||
// coolant draw), so the leak alarm/voice path is testable
|
||||
// without waiting for random cook-offs.
|
||||
char want_list[256];
|
||||
strncpy(want_list, getenv("BT_KILL_SUBSYS"), sizeof(want_list) - 1);
|
||||
want_list[sizeof(want_list) - 1] = 0;
|
||||
for (char *want = strtok(want_list, ","); want != 0;
|
||||
want = strtok(0, ","))
|
||||
{
|
||||
float partial = -1.0f;
|
||||
char *eq = strchr(want, '=');
|
||||
if (eq != 0)
|
||||
{
|
||||
*eq = 0;
|
||||
partial = (float)atof(eq + 1);
|
||||
}
|
||||
for (int i = 2; i < GetSubsystemCount(); ++i)
|
||||
{
|
||||
Subsystem *s = GetSubsystem(i);
|
||||
if (s == 0 || s->GetName() == 0) continue;
|
||||
if (stricmp(s->GetName(), want) != 0) continue;
|
||||
if (!s->IsDerivedFrom(MechSubsystem::ClassDerivations)) continue;
|
||||
((MechSubsystem *)s)->SetSubsystemDamageLevel(1.0f);
|
||||
((MechSubsystem *)s)->ForceCriticalFailure();
|
||||
DEBUG_STREAM << "[killsub] '" << s->GetName()
|
||||
<< "' force-destroyed (statusAlarm=1, zone=1.0)"
|
||||
<< std::endl << std::flush;
|
||||
if (partial >= 0.0f)
|
||||
{
|
||||
((MechSubsystem *)s)->SetSubsystemDamageLevel(partial);
|
||||
DEBUG_STREAM << "[killsub] '" << s->GetName()
|
||||
<< "' PARTIAL zone=" << partial
|
||||
<< " (leak source, no crit)"
|
||||
<< std::endl << std::flush;
|
||||
}
|
||||
else
|
||||
{
|
||||
((MechSubsystem *)s)->SetSubsystemDamageLevel(1.0f);
|
||||
((MechSubsystem *)s)->ForceCriticalFailure();
|
||||
DEBUG_STREAM << "[killsub] '" << s->GetName()
|
||||
<< "' force-destroyed (statusAlarm=1, zone=1.0)"
|
||||
<< std::endl << std::flush;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,6 +197,15 @@ MechTech::MechTech(
|
||||
wooHooMinimumDuration = model->wooHooMinimumDuration; // res +0x34 -> this+0xF4
|
||||
wooHooDurationRange = model->wooHooDurationRange; // res +0x38 -> this+0xF8
|
||||
wooHooChance = model->wooHooChance; // res +0x3C -> this+0xFC
|
||||
// DIAG (#119 leak-voice dig): the AUTHORED anti-spam latch tuning.
|
||||
// No armer for the wooHoo latch exists anywhere in the flat export --
|
||||
// if the authored chance is 0 the latch was dormant in 4.10 too and
|
||||
// the repeating warning voice under multiple leaks is AUTHENTIC.
|
||||
if (getenv("BT_LAMP_LOG"))
|
||||
DEBUG_STREAM << "[techstat] wooHoo authored: minDur="
|
||||
<< wooHooMinimumDuration << " range=" << wooHooDurationRange
|
||||
<< " chance=" << wooHooChance
|
||||
<< " alarmModel=" << alarmModel << "\n" << std::flush;
|
||||
|
||||
//
|
||||
// Walk the owner's subsystem roster and attach a monitor to every
|
||||
|
||||
Reference in New Issue
Block a user