fix: measure the network, not a battery's storage

v2.0.0 held heat forever: thermal batteries visibly full, parts taking
heat damage, radiators still idle. That is the dangerous direction.

The ceiling read a thermal battery's own HeatStorage with a percentage
threshold. That storage is wrapped by a NetworkResourceStore, and the
local read never crossed 98% however full the network actually got, so
the battery broadcast "hold" permanently.

Measure the network's remaining room directly instead, from the radiator
itself, with a bare NetworkResourceInput -- the same way the heat
exchanger decides whether it can still push heat. Vent below ~2000 status
heat of headroom, hold again above ~6000. Absolute headroom is also the
better metric: what matters is room against the generation rate, not a
percentage of whatever storage happens to be installed.

Polarity is now fail-safe. Holding requires positive evidence of
headroom, so anything missing or unmeasurable vents rather than holds --
the opposite of the failure above.

This deletes both broadcasters. The thermal battery and base_part_overclock
are no longer patched at all, and the mod touches two parts instead of
four. The launcher ammo signal stays; it is confirmed working in both
directions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011oLWY1G6S8U35bi2FxVWni
This commit is contained in:
2026-08-29 00:49:53 +02:00
co-authored by Claude Opus 5
parent d82b7e43a4
commit da331e955c
6 changed files with 159 additions and 301 deletions
+16 -28
View File
@@ -7,16 +7,21 @@
// pull from the same pool, with the same Mode, in the same category, and
// Data/ships/priorities.rules defines no ordering between them.
//
// The patches below add components to four vanilla parts and then repoint the
// radiator's heat dissipation, steam plume, dissipation readout and power
// indicator from the raw PowerToggle to the AutoPowerToggle gate defined in
// components/radiator_auto.rules.
// The patches below add components to two vanilla parts -- the radiator, which
// decides and acts, and the missile launcher, which reports whether thermal
// ammunition is in use -- and then repoint the radiator's heat dissipation,
// steam plume, dissipation readout and power indicator from the raw PowerToggle
// to the AutoPowerToggle gate defined in components/radiator_auto.rules.
//
// The radiator measures the heat network's remaining room itself, so nothing
// patches the thermal battery or the overclock base. Holding requires positive
// evidence of headroom; anything missing or unmeasurable results in venting.
//
// Nothing here changes a stat or a number. It only changes when radiators run.
ID = ganter.auto_radiator
Name = "Auto Radiator"
Version = 2.0.0
Version = 2.1.0
CompatibleGameVersions = ["0.30.4c", "0.30.4"]
ModifiesGameplay = true
Author = "Tobias Ganter"
@@ -27,26 +32,16 @@ Description = "Radiators only vent surplus heat instead of running constantly.\n
"to keep radiators busy, and your missiles reload at whatever rate your reactors "\
"happen to produce.\n\n"\
"With this mod, radiators hold off while the heat network still has room, keeping "\
"your thermal batteries topped up as a deep missile reserve, and vent once the "\
"network is nearly full.\n\n"\
"your thermal batteries topped up as a deep missile reserve, and vent as the "\
"network runs out of room.\n\n"\
"- Only applies when a launcher is actually set to Thermal Canister Missiles. "\
"Otherwise radiators behave exactly as in vanilla.\n\n"\
"- Ships with no thermal battery are unaffected.\n\n"\
"- Your manual radiator on/off switch still overrides everything.\n\n"\
"- Safety net: if any part is actually overflowing heat, every radiator vents "\
"immediately regardless of the threshold."
"- Fail-safe: holding heat requires measured headroom on the network. If that "\
"headroom runs low, or cannot be measured at all, radiators vent."
Actions
[
// --- Broadcasters -----------------------------------------------------
// The thermal battery decides when the network has surplus.
{
Action = AddBase
AddBaseTo = "<ships/terran/thermal_battery/thermal_battery.rules>/Part/Components"
BaseToAdd = &<components/thermal_battery_vent.rules>
}
// The missile launcher reports whether it is set to thermal ammunition.
{
Action = AddBase
@@ -54,13 +49,7 @@ Actions
BaseToAdd = &<components/launcher_ammo_signal.rules>
}
// Every overclockable part reports when it is actually overflowing heat.
{
Action = AddBase
AddBaseTo = "<ships/base_part_overclock.rules>/Part/Components"
BaseToAdd = &<components/overclock_overflow_signal.rules>
}
// --- Receiver ---------------------------------------------------------
{
@@ -82,9 +71,8 @@ Actions
AddTo = "<ships/terran/radiator/radiator.rules>/Part/Components/Router/RouteGenerators/0/Routes"
ManyToAdd
[
[NetworkedHeatBuffer, AutoRad_HoldSignal, 0]
[NetworkedHeatBuffer, AutoRad_NetworkSpace, 0]
[NetworkedHeatBuffer, AutoRad_ThermalAmmoSignal, 0]
[NetworkedHeatBuffer, AutoRad_ForceVentSignal, 0]
]
}