Confirmed in game. The radiator's thermal-ammo and hold signals both arrive, VentAllowed goes false, and the radiator idles with its manual switch still on -- heat banked for the launchers instead of vented. The self-test probes did their job: ThresholdToggle was fine, and a mod-defined category carries a value perfectly well. The EMP probe was simply a bad probe -- it read thermal_load_dissipation, which an idled radiator broadcasts as zero, so it was correctly reporting a real zero. Routing in v1.3.0 was the actual cure. Remove the probes and the diagnostic indicators. The repointed power indicator is the one cue a player needs: it now shows on a radiator the mod has idled. Add test_override_values_name_real_components, which catches an Overrides value naming a component that does not exist -- a fourth way to produce a mod that loads clean and does nothing, and one this very commit introduced while stripping the scaffolding. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011oLWY1G6S8U35bi2FxVWni
96 lines
2.6 KiB
Plaintext
96 lines
2.6 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
|
|
}
|
|
|
|
// "value is not zero", written the way vanilla writes it (the thermal pump's
|
|
// UtilizationToggle). The signals are only ever 0 or 1, so this is equivalent
|
|
// to a 0.5 threshold while sticking to a form the game demonstrably honours.
|
|
AutoRad_IsHolding
|
|
{
|
|
Type = ThresholdToggle
|
|
ValueFrom = AutoRad_HoldSignal
|
|
MinAmount = 0
|
|
MaxAmount = 0
|
|
Invert = true
|
|
}
|
|
|
|
AutoRad_ThermalAmmoInUse
|
|
{
|
|
Type = ThresholdToggle
|
|
ValueFrom = AutoRad_ThermalAmmoSignal
|
|
MinAmount = 0
|
|
MaxAmount = 0
|
|
Invert = true
|
|
}
|
|
|
|
AutoRad_ForceVent
|
|
{
|
|
Type = ThresholdToggle
|
|
ValueFrom = AutoRad_ForceVentSignal
|
|
MinAmount = 0
|
|
MaxAmount = 0
|
|
Invert = true
|
|
}
|
|
|
|
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: it can turn a radiator off, and
|
|
// the automation can only idle one the player has left on.
|
|
AutoPowerToggle
|
|
{
|
|
Type = MultiToggle
|
|
Toggles = [ PowerToggle, AutoRad_VentAllowed ]
|
|
Mode = All
|
|
}
|