STARBROKEN WIKI
Game site ↗
Home/Reference/Reactor Physics

Reactor Physics

Every other Neutronics page tells you what to do. This one tells you what the simulation actually computes to decide the outcome. A reactor isn't a number that ticks up — it's a small neutron-transport-and-heat model solved from your actual block layout every tick. Read this if you want to know why a packed cube breeds and a spread core doesn't, why the k gauge dips as xenon builds, or why pushing past cruise runs the fuel hot instead of just faster.

Nothing here changes how you play — it's the model under the meters. If you only want to run a reactor safely, the overview and Fuel & Isotopes are enough.

What a tick computes

Each tick the engine takes the persisted heat + neutronics state, your scanned block lattice, and the elapsed time, and returns the next state plus effects as pure data — no hidden state, fully deterministic. A single tick simulates at most a few minutes of elapsed time (the online-gating grace window); longer gaps resume where they left off, so nothing accrues while nobody's home.

Long elapsed times are split into sub-steps of at most one second each for numerical stability, and the whole pipeline below runs per sub-step. Heat is conserved to a rounding epsilon end to end: every unit produced is either captured to the coolant loop, vented, radiated from the hull, or still sitting in a cell — none vanishes or appears.

The tick, step by step

The flux field is solved once at the top of the tick; the thermal and kinetics pipeline then runs each sub-step against it.

1. Flux solve → criticality (k-eff)

The engine solves the neutron flux shape across your lattice by fission-source power iteration — a few Jacobi sweeps (more on a cold start, fewer when warmed from the persisted flux). Fuel cells are neutron sources (scaled by their adjacency amplification); every cell absorbs (fuel, moderator, coolant, inserted control rods, and any accrued xenon) and leaks neutrons from its faces that touch open space (reflectors return a fraction of that leakage).

From that converged shape it computes k-eff — the dominant eigenvalue, production ÷ loss. k > 1 is supercritical, < 1 subcritical, = 1 exactly critical. This is a stable geometry property: a well-reflected, low-leakage core is inherently more reactive than a leaky one. Loading fertile material adds absorption, which lowers k — that's the "attention tax," power traded for breeding, and it falls straight out of the eigenvalue balance.

2. Doppler self-limit

As fuel heats, reactivity falls: the feedback term is −alphaD × (meanFuelTemp − tRef). This is the reactor's built-in brake. Throttle up, the fuel warms, k drifts down, and the core settles at a steady power instead of running away. It's why a burner at cruise holds itself — you're not balancing on a knife-edge, the physics pulls back toward equilibrium on its own.

3. Point kinetics + the demand-follower servo

Amplitude A is the throughput dial — the actual power level the flux shape is running at. How it updates depends on one config knob, amplitudeRestore:

What the console k gauge really shows. Under the shipped servo, the gauge is not the raw eigenvalue — a fully-enclosed core has almost no leakage and its raw eigenvalue reads absurdly supercritical, which would scream "prompt critical!" on a perfectly healthy reactor. Instead the gauge reads 1 + the feedback deviation (Doppler + xenon around critical): it sits near 1.0 and dips as poison builds, exactly what a real operator watches. The servo holds the power; the gauge shows how far feedback has pushed the core off critical.

When reactivity outruns the delayed-neutron margin (ρ ≥ β) the tick fires a one-shot prompt-critical event — that's the source of the white-blaze + klaxon, never a meter diffed across ticks.

4. Xenon dead-time (I-135 → Xe-135)

Fission stages iodine-135, which decays into xenon-135 — a strong neutron poison that also burns off under flux. The pool follows the real coupled ODEs (build from direct fission + iodine decay; loss from decay + flux burn-off) per zone. This produces the classic behaviours: a dip-then-rise after a power change, and a dead-time peak after shutdown, when the flux that was burning xenon off vanishes but iodine keeps decaying into more of it.

Real xenon dead-time is ~9 hours; the sim compresses it (xenonTimeScale) into a playable band so you actually see it in a session. The core is partitioned into up to two xenon zones along its longest axis (only once it has enough fuel — below a fixed fuel-count floor it's one lumped zone); a zoned core can show flux oscillating between halves. The zone count and the fuel floor are fixed engine structure, not config knobs.

5. Per-cell thermal + meltdown

Each cell stores energy; its temperature is energy ÷ heatCap. Within the sub-step, in order: fuel produces heat (∝ amplitude × its adjacency amplification); heat conducts between neighbours (symmetric, conservative); capable exchangers pull heat from a shared pool of all hot fuel into the coolant loop; turbines convert loop heat into Drive Cells; vents remove heat to open space (wasted but safe); then over-cap cells melt, over-threshold heat bleeds into the hull pool, and the hull sheds a little to ambient (the passive cruise-holding term).

Meltdown is per-cell first: a cell past its own melt cap breaks, dumping its heat into the hull and its neighbours. When the hull pool reaches its ceiling, the core breaches. Plating raises that ceiling only modestly — the base ceiling stays the dominant term, so a thick shell does not buy you out of running hot. Capture rate-limits per step on purpose: at high throttle the fuel runs hotter than capture can instantly bleed off, which is exactly the overclock danger — push for more output and the core heats toward the redline.

Breeding

Breeding is gated by geometry, not a mode switch. Each fuel cell computes a net packing figure:

net        = (fuel neighbours) − (moderator neighbours)
breedFactor = clamp((net − 1.5) / 1.5, 0, 1)

The breed rate is amplitude × fluxShape × captureXS × fertile × breedScale × breedFactor, so breeding needs the packed geometry and the core run hot. Fertile (U-238) captures neutrons and transmutes to staged bred fissile (Pu-239) — and because fertile absorbs, loading it lowers k. That's the trade: the eigenvalue solve itself allocates the neutron budget between power and breeding. What you breed is worth it: a Pu-239 rod's productionScale is wired to 1.5×, so it makes half again the Drive Cells per rod that a U-235 rod does. Burn tracks fissions, so the rod lasts just as long — it simply produces more per fission — while its low delayed-neutron fraction (β ≈ 0.0021) makes it twitchier to drive. Pu-239 is premium for both reasons: more power and harder to hold, not merely because it's a hassle to breed.

The over-breed walk. Left cooking under flux, bred Pu-239 doesn't just stop at a poison — it walks the full actinide chain: Pu-240 (a poison whose spontaneous fission leaves an amplitude floor that resists SCRAM) → Pu-241Am-241, which forks into Cm-244 and Pu-238. Those are the deep actinides. Of the four, Am-241 and Pu-238 are usable — they withdraw as themselves for dedicated uses (neutron source / RTG) rather than consolidating to waste; the rest are poisons or waste. The walk is keyed off the bred stock, so withdrawing your Pu-239 stops it. Breeding is therefore a harvest-timing skill: pull the Pu-239 before it degrades. See Fuel & Isotopes for the handling side of this.

Every breeding term is proportional to a per-cell fertile / bred / actinide-walk stock, so a burner (which holds none) is byte-for-byte the non-breeding path — breeding never perturbs a reactor that isn't set up for it.

Status thresholds

The console light is driven by heat vs. redline — the greater of the hull pool's fraction of its ceiling and the hottest single cell's fraction of its own melt cap. (Hull alone is a lagging indicator — it only fills right before a breach — so the hottest-cell term keeps the gauge honest while the core is visibly running hot.)

StateTrigger (heat vs. redline)Meaning
GREENbelow 60%safe — cruise, walk away
AMBERat or above 60%warming — attend it
REDat or above 85%near the redline — act now or SCRAM
Hot spotany cell ≥ 90% of its own melt capa flagged cell about to breach

The numbers, in full

Every knob the sim runs on. Most read live from game.yml (reactor:) — your server may retune any of them, and this table is generated from the same config the simulation reads, so it never drifts. It's grouped in advance() order, so you can read it alongside the tick walkthrough above.

Two blocks — Breeding and Fission products — have no game.yml override and show the engine defaults (flagged as such): they scale terms that are exactly zero for a burner, so they tune the breeder and the byproduct smorgasbord without ever touching a plain burner tick.

Production: reactor.production

Knob (game.yml reactor.*)ValueMeaning
baseFuelHeatPerSec10.0heat units/s one fuel cell emits at throttle 1, amp 1
throttleExponent1.0throttle → production curve (1 = linear)
uraniumPerHeatUnit0.0002fuel burned per heat unit produced
fuelUnitsPerRod10.0burn budget one fuel rod loads (~3 h @ T1 0.45)

Amplification (superlinear clustering): reactor.amplification

Knob (game.yml reactor.*)ValueMeaning
clusterCoeff0.25+heat per adjacent FUEL (packing risk/reward)
reflectorCoeff0.15+heat per adjacent REFLECTOR (edge fuel)
moderatorCoeff0.25+heat per adjacent MODERATOR
ampCap4.0one fuel cell can't exceed ×this

Point kinetics & feedback: reactor.neutronics / reactor.feedback

Knob (game.yml reactor.*)ValueMeaning
beta0.0065delayed-neutron fraction β — the prompt-critical margin (U-235)
lambda0.001prompt neutron generation time (s)
meanDelayedTime10.0mean delayed-neutron time (s)
amplitudeRestore3.0demand-follower gain (0 = pure point kinetics)
rodAbsorption0.30neutron absorption per control-rod insertion
alphaD0.00002Doppler Δk per (mean fuel temp − tRef) — the cruise-holding self-limit

Xenon poison: reactor.xenon

Knob (game.yml reactor.*)ValueMeaning
gammaI0.06iodine-135 yield per fission proxy
sigmaXe0.0001Xe-135 burn-off cross-section
xenonWorthPerUnit0.000005reactivity absorbed per unit Xe-135
xenonTimeScale120.0time compression → a playable ~dead-time band

Heat capture → Drive Cells: reactor.capture

Knob (game.yml reactor.*)ValueMeaning
exchangerCaptureRate20.0heat/s one exchanger pulls core → coolant loop
captureFraction1.0fraction of the excess an exchanger can pull (rate limit)
turbineThroughputPerSec40.0heat/s one turbine converts to output
turbineEfficiency0.35enthalpy → work fraction
heatPerDriveCell5.587work per Drive Cell (tuned: ~1000 DC/hr @ T1 0.45)

Thermal & meltdown: reactor.thermal

Knob (game.yml reactor.*)ValueMeaning
ventRatePerBlock8.0heat/s a VENT removes (wasted but safe)
hullMaxBase3000.0meltdown ceiling with zero plating
hullMaxPerPlating14.0+ceiling per PLATING cell (small — base dominates)
hullAmbientLossPerSec4.0passive hull cooling (the cruise-headroom knob)

Breedingengine default, no game.yml override: Breeding

Knob (engine default)ValueMeaning
fertileCaptureXS0.020neutron capture per unit fertile (folds into k: the attention tax)
breedScale0.12fertile → bred conversion scale (banks a rod in minutes in a breeder)
overbreedXS0.0015bred → Pu-240 over-breed walk (the harvest-timing pressure)
breedPackingFloor1.5net fuel-minus-moderator packing a cell needs before it breeds
breedPackingSpan1.5packing width from the floor to full breeding (breedFactor 1)

Fission productsengine default, no game.yml override (real thermal-U-235 cumulative yields): FissionProducts

Knob (engine default)ValueMeaning
cesium_1370.061Cs-137 relative yield per unit heat produced
strontium_900.057Sr-90 relative yield
technetium_990.061Tc-99 relative yield
iodine_1310.029I-131 relative yield
molybdenum_990.061Mo-99 relative yield
productionScale0.007global accrual multiplier (first whole unit ~1 min at cruise)

Behaviour, charted

Two schematic curves for the behaviours that trip people up most. Both are illustrative shapes — they show why the model behaves as it does, not exact sim output for any one build.

Heat vs. throttle — why push is dangerous000.550.51.11throttleheat / redline (1.0 = breach)hull heat vs. redline
Shaded: cruise (safe-to-leave) - push (attended) - redline. Doppler holds heat flat across cruise; past it, production outruns cooling and hull heat climbs toward a breach. Illustrative shape (a real curve depends on your vent/exchanger ratio), not sim output.
Xenon dead-time after a throttle cut0.801.415230time (compressed by xenonTimeScale)xenon poison (relative)Xe-135 poison (relative)
Drop the throttle and Xe-135 first RISES: the iodine already in the pipeline keeps decaying into xenon faster than the reduced flux can burn it off. That peak is the dead-time when the core resists a restart, before it finally decays away. Illustrative, not sim output.

See also