feat: v4.0.0 -- radiator switch picks the mode, ammo gate removed

ON vents constantly (vanilla). OFF banks heat and vents only when the
network is nearly full. The gate is now PowerToggle OR MustVent.

The launcher's thermal-ammo broadcast is gone: it did not follow the ammo
selection live, and the switch states the player's intent directly. Only
the radiator is patched now. New test_gate_is_power_or_must_vent pins the
semantics.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011oLWY1G6S8U35bi2FxVWni
This commit is contained in:
2026-08-29 01:44:06 +02:00
co-authored by Claude Fable 5
parent c5ddc78495
commit ad17425508
5 changed files with 107 additions and 174 deletions
+32 -32
View File
@@ -65,23 +65,23 @@ overflow continuously and no threshold value saves you.
## What the mod does
A radiator vents when **either**:
The radiator's own on/off switch picks a mode:
1. **The heat network is running out of room.** The radiator measures this
itself, with a bare `NetworkResourceInput` — the same component an
overclocked part pushes its heat through (`base_part_overclock.rules`:
`NetworkHeatInput`), so it sees exactly what a producer sees. Vent while
less than **5%** of the network's heat storage is free, hold again once
**10%** is free — a deadband so radiators do not chatter. Both numbers are
named constants at the top of `components/radiator_auto.rules`.
2. **No launcher on the network is set to Thermal Canister Missiles.** If you
are not spending heat as ammunition there is nothing to hoard, so radiators
behave exactly as in vanilla.
- **ON** — vanilla. The radiator vents constantly. You want the heat gone.
- **OFF** — bank heat. The radiator idles while the heat network has room and
vents only when it is nearly full: vent while less than **5%** of the
network's heat storage is free, hold again once **10%** is free (a deadband
so radiators do not chatter). The ship never overflows heat onto its own
parts, and thermal batteries stay topped up as a deep missile reserve. An
OFF radiator also releases its crew.
Your manual radiator on/off switch still overrides both. The automation can only
idle a radiator you have left switched on.
The radiator measures the network itself, with a bare `NetworkResourceInput`
— the same component an overclocked part pushes its heat through
(`base_part_overclock.rules`: `NetworkHeatInput`), so it sees exactly what a
producer sees. Both thresholds are named constants in
`components/radiator_auto.rules`.
The design is **fail-safe**: holding heat requires positive evidence that the
The design is **fail-safe**: idling requires positive evidence that the
network has room to spare. Anything missing, disconnected or unmeasurable ends
up venting, which is vanilla behaviour.
@@ -97,8 +97,7 @@ No stat or number is changed. Only *when* radiators run.
```
mod.rules manifest + patch actions
components/radiator_auto.rules measures network headroom, decides, acts
components/launcher_ammo_signal.rules reports thermal ammo in use
components/radiator_auto.rules measures network headroom, gates the radiator
tests/ offline validation suite
tools/dotnet_enum.py reads component schemas out of Cosmoteer.dll
tools/ildump.py disassembles component methods to readable CIL
@@ -134,25 +133,25 @@ for the schema checks.
## How to tell it is working
There is no separate "auto" mode and nothing to reset. The radiator's on/off
switch is an AND gate:
Switch a radiator **OFF** with heat storage low. It shows the "powered off"
indicator and no steam plume while the network fills. As the heat gauge nears
full the plume starts and the gauge stalls around 90–95%, with no overheat
warning. Fire missiles, the gauge drops, the radiator goes quiet again.
- switch **off** -> radiator is off, and stays off. The mod never turns it back on.
- switch **on** -> the automation decides, moment to moment.
An auto-idled radiator shows the "powered off" indicator icon and stops emitting
its steam plume. That icon on a radiator you did *not* switch off is the mod
holding heat back for your launchers.
Switch it **ON** and it runs constantly, exactly as in vanilla.
## Status
**Unconfirmed.** Against game data 0.30.4c, as of 2026-08-29:
**Release path confirmed, switch semantics not yet.** Against game 0.30.4c on
2026-08-29, v3.0.0 in a real fight: radiators idled while the network filled,
vented as it neared full, the ship never overheated, and they went quiet again
once missiles drained the reserve.
- Confirmed in game: the gate closes and idles a radiator when thermal ammo is
in use, and with no launcher on thermal ammo behaviour is vanilla.
- **Not yet confirmed: the release path** — that radiators start venting as the
network fills. v3.0.0 is the first build whose threshold is on the right
scale, and it has not been played yet.
v4.0.0 changed only the gate: earlier builds required a launcher to broadcast
"thermal ammo in use" over the heat network, which worked at load but did not
follow the ammo selection live. The player's switch expresses the intent more
directly, so the broadcast was removed and OFF now means "bank heat". That
switch behaviour is the one thing v4.0.0 has not been played with yet.
### What the assembly says
@@ -223,6 +222,7 @@ debugging again.
## Possible additions
- A per-radiator UI toggle for auto/manual, which needs a new `ChoiceID` wired
into `Data/gui/game/parts/part_toggles.rules`.
- A third switch position (ON / BANK / OFF) so a radiator can be fully
disabled, which needs a new `ChoiceID` wired into
`Data/gui/game/parts/part_toggles.rules`.
- Exposing the 5% / 10% band in the game UI rather than as file constants.