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
129 lines
5.0 KiB
Plaintext
129 lines
5.0 KiB
Plaintext
// ABOUT ME
|
|
// Manifest and patch list for "Auto Radiator".
|
|
//
|
|
// What it does: radiators stop dumping heat that the ship still wants. Thermal
|
|
// Canister Missiles are built from the ship's own heat, so a radiator running
|
|
// flat out is competing with the launchers for ammunition -- in vanilla they
|
|
// 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 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.1.0
|
|
CompatibleGameVersions = ["0.30.4c", "0.30.4"]
|
|
ModifiesGameplay = true
|
|
Author = "Tobias Ganter"
|
|
|
|
Description = "Radiators only vent surplus heat instead of running constantly.\n\n"\
|
|
"Thermal Canister Missiles are built from your ship's own heat, and in vanilla "\
|
|
"your radiators compete with your launchers for it -- the heat network is drained "\
|
|
"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 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"\
|
|
"- Your manual radiator on/off switch still overrides everything.\n\n"\
|
|
"- Fail-safe: holding heat requires measured headroom on the network. If that "\
|
|
"headroom runs low, or cannot be measured at all, radiators vent."
|
|
|
|
Actions
|
|
[
|
|
// The missile launcher reports whether it is set to thermal ammunition.
|
|
{
|
|
Action = AddBase
|
|
AddBaseTo = "<ships/terran/missile_launcher/missile_launcher.rules>/Part/Components"
|
|
BaseToAdd = &<components/launcher_ammo_signal.rules>
|
|
}
|
|
|
|
|
|
// --- Receiver ---------------------------------------------------------
|
|
|
|
{
|
|
Action = AddBase
|
|
AddBaseTo = "<ships/terran/radiator/radiator.rules>/Part/Components"
|
|
BaseToAdd = &<components/radiator_auto.rules>
|
|
}
|
|
|
|
// --- Attach the radiator's receivers to the network -------------------
|
|
//
|
|
// A network component only reaches the network if a route leads to it. The
|
|
// radiator's ports anchor on NetworkedHeatBuffer, and its existing Router
|
|
// bridges that anchor to the other network components -- which is how
|
|
// vanilla's own NetworkedThermalDissipationLoadValue gets connected.
|
|
// Without these three entries the receivers are inert and read nothing,
|
|
// which makes the vent gate permanently open.
|
|
{
|
|
Action = AddMany
|
|
AddTo = "<ships/terran/radiator/radiator.rules>/Part/Components/Router/RouteGenerators/0/Routes"
|
|
ManyToAdd
|
|
[
|
|
[NetworkedHeatBuffer, AutoRad_NetworkSpace, 0]
|
|
[NetworkedHeatBuffer, AutoRad_ThermalAmmoSignal, 0]
|
|
]
|
|
}
|
|
|
|
// --- Rewire the radiator ---------------------------------------------
|
|
//
|
|
// The radiator's dissipation is gated on PowerToggle directly, not on its
|
|
// IsOperational toggle, so each of these three components is repointed at
|
|
// the new gate. IsOperational and CommandConsumer are deliberately left
|
|
// alone: an idling radiator still holds its command points, because it is
|
|
// still assigned and will resume without player input.
|
|
|
|
// The actual heat removal.
|
|
{
|
|
Action = Overrides
|
|
OverrideIn = "<ships/terran/radiator/radiator.rules>/Part/Components/HeatDissipationConverter"
|
|
Overrides
|
|
{
|
|
OperationalToggle = AutoPowerToggle
|
|
}
|
|
}
|
|
|
|
// The steam plume, so an idling radiator looks idle.
|
|
{
|
|
Action = Overrides
|
|
OverrideIn = "<ships/terran/radiator/radiator.rules>/Part/Components/SteamEffects"
|
|
Overrides
|
|
{
|
|
OperationalToggle = AutoPowerToggle
|
|
}
|
|
}
|
|
|
|
// The dissipation value that drives the glow and the network load readout.
|
|
{
|
|
Action = Overrides
|
|
OverrideIn = "<ships/terran/radiator/radiator.rules>/Part/Components/DissipationSmoothingTargetValue"
|
|
Overrides
|
|
{
|
|
Toggle = AutoPowerToggle
|
|
}
|
|
}
|
|
|
|
// The "powered off" indicator icon, so an idling radiator is visibly idle
|
|
// rather than looking identical to a working one. Without this the only cue
|
|
// that the mod is doing anything is the absence of the steam plume.
|
|
{
|
|
Action = Overrides
|
|
OverrideIn = "<ships/terran/radiator/radiator.rules>/Part/Components/Indicators/Indicators/0"
|
|
Overrides
|
|
{
|
|
Toggle = AutoPowerToggle
|
|
}
|
|
}
|
|
]
|