Files
cosmoteer-pressure-relief-r…/components/radiator_auto.rules
T
TotenKnopfandClaude Opus 5 3ad03d7964 fix: carry signals as NetworkValue, not NetworkToggle
v1.0.0 loaded cleanly and did nothing in game. Every vanilla use of
NetworkToggle and NetworkToggleReceiver -- all three of them -- sets
IncludeInPhysical = false. They are blueprint stat-display plumbing and
carry no signal on a real ship, so the receivers always read off, the
vent gate stayed open, and radiators behaved exactly as in vanilla.

Broadcast 1/0 through NetworkValue and threshold it back into a toggle
on the receiving side. That is what the thermal amplification pump uses
to drive physical behaviour, and vanilla never sets IncludeInPhysical on
it anywhere.

Also repoint the radiator's power indicator at the gate, so an auto-idled
radiator is visibly idle instead of looking identical to a working one.

Tests grow a guard against the blueprint-only types, plus a check that
re-verifies that premise against the installed game data so the guard
cannot go stale, and a name-collision check against vanilla components.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011oLWY1G6S8U35bi2FxVWni
2026-08-28 23:37:21 +02:00

86 lines
2.2 KiB
Plaintext

// ABOUT ME
// Components merged into the Radiator. They receive the three network values
// this mod broadcasts and combine them into a single gate, AutoPowerToggle,
// which mod.rules then substitutes for the radiator's vanilla PowerToggle on
// the parts of the radiator that actually dissipate heat.
//
// Each broadcast arrives as a number, 1 or 0, summarised across the network by
// a NetworkValueReceiver and turned back into a toggle by a threshold at 0.5.
// A network with no broadcaster at all yields 0, which is why a ship without
// thermal batteries or thermal launchers keeps vanilla behaviour.
//
// The player's manual on/off switch (PowerToggle) is preserved and still wins:
// a radiator the player has switched off stays off. The automation can only
// idle a radiator the player has left on.
//
// A radiator vents when ANY of these hold:
// - the network is not asking it to hold (no battery, or battery full)
// - no launcher on the network is using thermal ammunition
// - some part is overflowing heat right now (safety net, overrides all)
AutoRad_HoldSignal
{
Type = NetworkValueReceiver
Categories = [ auto_radiator_hold ]
Mode = Max
AllowUncategorized = false
}
AutoRad_ThermalAmmoSignal
{
Type = NetworkValueReceiver
Categories = [ auto_radiator_ammo_user ]
Mode = Max
AllowUncategorized = false
}
AutoRad_ForceVentSignal
{
Type = NetworkValueReceiver
Categories = [ auto_radiator_force_vent ]
Mode = Max
AllowUncategorized = false
}
AutoRad_IsHolding
{
Type = ThresholdToggle
ValueFrom = AutoRad_HoldSignal
MinAmount = 0.5
}
AutoRad_ThermalAmmoInUse
{
Type = ThresholdToggle
ValueFrom = AutoRad_ThermalAmmoSignal
MinAmount = 0.5
}
AutoRad_ForceVent
{
Type = ThresholdToggle
ValueFrom = AutoRad_ForceVentSignal
MinAmount = 0.5
}
AutoRad_VentAllowed
{
Type = MultiToggle
Toggles
[
{ Toggle = AutoRad_IsHolding; Invert = true }
{ Toggle = AutoRad_ThermalAmmoInUse; Invert = true }
AutoRad_ForceVent
]
Mode = Any
}
// The replacement gate. PowerToggle is the radiator's vanilla UIToggle, so the
// player's switch remains the master control.
AutoPowerToggle
{
Type = MultiToggle
Toggles = [ PowerToggle, AutoRad_VentAllowed ]
Mode = All
}