Repository navigation
Nuclear Fuel Cycle
Note
Design stage. This page describes planned mechanics from the design document. Not implemented yet — see Roadmap (milestone M4 for the simplified ore → metal chain of the T0 pile; M9 for hydrometallurgy, conversion, the centrifuge cascade and fuel assemblies; M12 for spent fuel storage, PUREX, MOX and disposal).
The nuclear fuel cycle is the top of the industry ladder. You find uranium with a radiometer, mine and leach it into yellowcake, refine and convert it to UF₆, enrich it in a cascade of gas centrifuges spun by Create shafts, press and sinter pellets, load them into zirconium tubes and build fuel assemblies. After the reactor, spent fuel cools in a pool, goes to dry casks or a hot cell for PUREX reprocessing, plutonium becomes MOX, and high-level waste is vitrified and buried in a geological repository.
Chemistry is physical: stoichiometry, yields, energy per kilogram of product and radioactive decay are real. Only two scaling points are tuned for game pace:
| Config key | Default | Meaning |
|---|---|---|
chain.ore_yield_multiplier |
8 [BALANCE]
|
Ore mass per mined block = 2500 kg × k_ore. A block of ore is a "window" into an ore body that continues beyond the voxel. Without it, the first T2a core needs ≈ 2000 blocks of 0.5 % ore; with 8, about 260 (2–3 ore bodies). |
enrichment.swu_multiplier |
16 [BALANCE]
|
Separative capacity of each centrifuge is multiplied by this factor. Energy per SWU stays physical. |
Chemistry runs in the SLOW domain (×72): one physical minute of a process takes 0.83 real seconds. Process times in the GDD are physical; real time = physical / 72. Energy per kilogram of product stays physical, so instantaneous power drawn from Create shafts or the grid is 72 times the physical power of the same unit. Create machines running their own recipes (crushing wheels, millstones, fans) work in real time; ore preparation is a bottleneck that scales with the number of machines, not with time acceleration.
| Carrier | Mass |
|---|---|
Ore block/item (raw_*) |
2500 kg × k_ore |
Powders (yellowcake, uo2_powder, uf4_powder, puo2_powder, …) |
10 kg per item |
| Liquids | 1 mB = 1 L (1 bucket = 1 m³ = 1 block) |
| UF₆ and other gases | stored as mass in containers (uf6_cylinder_*), not as mB |
fuel_pellet_tray |
10 kg UO₂ (≈ 2000 pellets) |
Continuous properties are quantized so items stack: ore grade in 6 classes, enrichment in 0.01 % steps.
Every block and fluid in the chain carries hazard tags used by radiation, accident and damage systems:
| Tag | Meaning |
|---|---|
RADIOLOGICAL_EXTERNAL |
gamma/neutron source |
RADIOLOGICAL_INTERNAL |
dispersible radioactive material; spills go to the contamination map |
CHEMICAL_CORROSIVE |
H₂SO₄, HNO₃, HF — damage, corrodes containers made of non-resistant materials |
CHEMICAL_TOXIC |
UF₆/HF, F₂, NH₃, H₂S — poisoning, toxic cloud |
FLAMMABLE / EXPLOSIVE_MIX
|
H₂, kerosene |
PYROPHORIC |
uranium metal powder, fine UO₂, zirconium sponge, Mg |
FISSILE |
uranium above 1 % enrichment, any plutonium — criticality checks |
DECAY_HEAT |
spent fuel, high-level waste |
| # | Stage | Key blocks | Estimated player time | Unlocks |
|---|---|---|---|---|
| 1 | Exploration |
scintillation_radiometer, core_drill, assay_station
|
1–2 h | an ore body of grade G2 or better |
| 2 | Mining and ore preparation | Create drill, crushing_wheel, ball_mill, radiometric_sorter
|
2–4 h | — |
| 3 | Reagents |
acid_plant, electrolyzer, ammonia_synthesis_reactor, ostwald_converter
|
3–5 h | H₂SO₄, NH₃, HNO₃, H₂ |
| 4 | Hydrometallurgy |
leach_tank, thickener, ion_exchange_column / mixer_settler, precipitation_tank, rotary_calciner, tailings_dam
|
3–5 h | yellowcake |
| 5 | Refining, UO₂/UF₄, uranium metal |
dissolver, pulsed_column, denitration_reactor, reduction_furnace, hf_kiln, hydrofluorination_reactor, bomb_reduction_vessel
|
4–6 h | nuclear-grade U, T0 slugs; with acheson_furnace graphite → T0 reactor
|
| 6 | Zirconium |
chlorinator, hafnium_separation_column, kroll_reactor, pilger_mill
|
4–6 h | cladding; Hf for control rods |
| 7a | Natural UO₂ → T3 |
pellet_press, sintering_furnace, heavy water (gs_exchange_tower) |
6–10 h | T3 (CANDU) without enrichment |
| 7b | Fluorine and UF₆ |
fluorine_cell, fluorination_reactor, cold_trap, uf6_cylinder_48y
|
3–5 h | UF₆ |
| 8 | Enrichment |
gas_centrifuge (T-A → T-B → T-C), cascade_*
|
6–12 h + cascade run time | 2 % → T1; 3–5 % → T2a/T2b |
| 9 | Fuel fabrication |
defluorination_kiln, pellet_press, sintering_furnace, centerless_grinder, pellet_inspection_station, rod_loading_station, assembly_jig
|
4–6 h | T1/T2 fuel assemblies |
| 10 | Spent fuel | pool, refueling_machine, dry_cask, transport_cask
|
3–5 h | cooling (STORAGE) |
| 11 | Radiochemistry |
hot_cell, shearing_machine, dissolver, pulsed_column ×N, oxalate_precipitator, criticality_alarm
|
8–15 h | PuO₂, reprocessed U → MOX, T4 (post-release) |
| 12 | Waste |
vitrification_melter, cementation_mixer, repository_controller, copper_canister, bentonite_buffer
|
4–8 h | closing the cycle; advancement "Closed Cycle" |
flowchart LR
ORE[(Uranium ore)] --> MILL[Crushing and ball mill] --> LEACH[Leaching H2SO4] --> SX[Ion exchange / solvent extraction] --> YC[(Yellowcake U3O8)]
YC --> TBP[Dissolution + TBP extraction] --> UO3[UO3] --> UO2[UO2] --> UF4[(UF4)]
UF4 --> UMET[U metal] --> SLUG[T0 slugs]
UF4 --> UF6[(UF6)] --> CASC[Centrifuge cascade on Create shafts]
CASC --> LEU[(Enriched UF6)]
CASC --> DUF6[(Depleted UF6)]
LEU --> PEL[Pellets] --> ROD[Fuel rods + He] --> FA[(Fuel assembly)]
ZR[Zircon → Zr, Hf removed] --> ROD
SLUG --> R{{Reactor}}
FA --> R
R --> SNF[(Spent fuel)] --> POOL[Spent fuel pool] --> DRY[Dry storage]
POOL --> PUREX[PUREX]
PUREX --> PU[(PuO2)] --> MOX[MOX] --> FA
DUF6 --> MOX
PUREX --> HLW[(Liquid HLW)] --> VIT[Vitrification] --> GEO[Geological repository]
DRY --> GEO

| Ore block | Mineral | Deposit type (prototype) | In-game grade | By-products |
|---|---|---|---|---|
uraninite_ore, deepslate_uraninite_ore
|
uraninite / pitchblende, UO₂ | hydrothermal vein | 0.1–2 % U₃O₈ (median 0.4 %) | radiogenic Pb, As, Co; radiogenic helium |
coffinite_ore |
coffinite | sandstone roll-front (suitable for in-situ leaching) | 0.05–0.3 % (median 0.1 %) | Mo, Se, V |
carnotite_ore |
carnotite | near-surface sandstone | 0.1–0.5 % (median 0.2 %) | V₂O₅ 1–3 % (vanadium catalyst for sulfuric acid) |
monazite_sand |
monazite in placers | beach heavy-mineral sands | ThO₂ 6–8 % in concentrate; U₃O₈ 0.2–0.4 % | rare earths |
zircon_sand |
zircon, ZrSiO₄ | same placers | 1–5 % zircon in sand | Hf (must be removed for cladding; valuable for control rods) |
fluorite_ore |
fluorite, CaF₂ | vein | 30–80 % CaF₂ | — |
pyrite_ore |
pyrite, FeS₂ | disseminated | 20–60 % | source of SO₂ |
galena_ore |
galena, PbS | vein | 5–20 % Pb | silver |
bauxite_ore |
bauxite | lateritic, tropics | 40–60 % Al₂O₃ | — |
borax_ore |
borax | evaporite, deserts | 20–40 % | — |
thorite_ore |
thorite, ThSiO₄ | granite pegmatites | 1–5 % ThO₂ | U |
Thorium in release 1.0 is a material for post-release content and a source of background radiation (Tl-208, 2.614 MeV gamma); the thorium fuel chain is not implemented.
| Ore | Host | Y range | Biomes | Body shape | Size, blocks |
|---|---|---|---|---|---|
| uraninite | deepslate, tuff, granite | −64…−8, peak −40 | all Overworld; mountains ×1.5 | elongated vein along a "fracture", length 8–24 | 12–40 |
| coffinite | stone, sandstone | 0…48, peak 24 | desert, badlands, savanna ×2 | C-shaped roll-front lens 6×12×3 | 30–90 |
| carnotite | sandstone, terracotta | 50…90 | badlands ×3, desert | disseminated pockets | 3–8 |
| monazite, zircon sand | sand, gravel | 55…66 | beach, river, stony shore | 1-block layers under the surface | 8–30 |
| thorite | granite | −32…32 | mountains ×2 | pegmatite pocket | 2–5 |
Generation uses standard datapack features with NeoForge biome modifiers and can be disabled per ore (worldgen.<ore>.enabled).
You can see that a block is ore (pitch-black uraninite with a greasy luster, canary-yellow carnotite, black-brown coffinite in sandstone). You cannot see its grade, the U/Th ratio, or the halo — surrounding rock with sub-economic grade (0.01–0.05 %) that looks like ordinary stone. Grade is deterministic from the world seed, log-normally distributed (σ_ln = 0.9) on 3D simplex noise, clamped to 0.05–2 %. With worldgen.halo_drops, breaking halo rock yields raw_low_grade_uranium_ore for heap leaching.
| Grade class | % U₃O₈ | Typical use |
|---|---|---|
| G0 | 0.02–0.05 | halo, heap or in-situ leaching only |
| G1 | 0.05–0.10 | low grade |
| G2 | 0.10–0.25 | ordinary |
| G3 | 0.25–0.50 | rich |
| G4 | 0.50–1.00 | very rich |
| G5 | 1.00–2.00 | exceptional |
The cut-off grade is your decision. /pc assay economics <grade> shows the processing cost (acid, energy, tailings) so you can decide what goes to the mill and what goes to the dump.
| ID | Prototype | Shows | Error / lag |
|---|---|---|---|
scintillation_radiometer (item) |
SRP-68, NaI(Tl) | count rate, clicks | Poisson noise, 1 s time constant; 100 h battery |
gamma_spectrometer (item) |
field NaI(Tl) 3″×3″ | K / U / Th windows, U/Th ratio, grade estimate | ±15 % over 60 s |
core_drill (block, Create shaft) |
core drilling rig | extracts a core_sample down to 64 m |
the sample is real; it still has to be assayed |
assay_station (block) |
fluorimetry / XRF lab | exact grade ±2 %, U/Th, impurities | 60 physical s per sample, 200 W |
The spectrometer uses standard windows (K-40 at 1.461 MeV, Bi-214 at 1.764 MeV for uranium, Tl-208 at 2.614 MeV for thorium). The U/Th ratio tells monazite from uraninite — a thorium anomaly is useless for the uranium chain. Without an assay_station you only see the rock log from a core, not the grade.
The core drill speed follows rock breakage energy (granite ≈ 2·10⁸ J/m³): with 20 kW (20 SU) a 64 m hole takes about 40 real seconds. Radon accumulates in underground workings and feeds the radiation model.
Ore is mined with Create drills, crushed with crushing_wheel, ground in a ball_mill and optionally pre-sorted in a radiometric_sorter.
Heap leaching (grades G0–G1 and halo): a continuous heap_leach_liner base (a gap leaks solution into the ground and contaminates it), ore_heap blocks on top, a drip_irrigator feeding acid, pls_collector and pls_pond around the base. Recovery R(t) = 0.75·(1 − e^(−t/τ)), with τ growing with the square of particle size. 90 % recovery takes about 69 physical days ≈ 23 real hours, running in the background. Acid consumption: 15–40 kg H₂SO₄ per tonne of ore.
In-situ leaching (ISL) — only for coffinite_ore in permeable sandstone below the water table. isl_injection_well and isl_production_well are placed on the surface in a five-spot pattern (4 injectors, 1 producer, 25–50 m spacing). Concentration decays exponentially as the ore is swept. Injection must stay 1–3 % below production ("bleed"); otherwise solution escapes the wellfield (an excursion) and dissolved U and Ra contaminate nearby water. Monitor with isl_monitor_well.
ground ore ─► leach_tank ×N (H₂SO₄ + oxidant) ─► thickener ×3 (counter-current decantation) ─► pregnant solution
└─► tailings ─► tailings_neutralizer ─► tailings_dam
pregnant solution ─► ion_exchange_column or mixer_settler (amines) ─► eluate
─► precipitation_tank (NH₃ / H₂O₂ / NaOH) ─► ADU / UO₄
─► rotary_calciner 750–800 °C ─► yellowcake (≥ 85 % U₃O₈)
Acid leaching is the main route; carbonate (soda) leaching is used for carbonate-rich ores. Sulfuric acid comes from pyrite or from sulfur produced by the gas plant (sulfur_burner) — one of the cross-industry links (see Progression).
Tailings keep about 85 % of the ore's original radioactivity (Th-230, Ra-226 and the rest of the decay chain stay; only uranium leaves). The tailings_dam must be sealed with clay / tailings_liner. Water over the tailings suppresses radon; dry tailings emit radon and dust. Reclamation: radon flux through clay falls as e^(−x/0.31 m), so meeting the 0.74 Bq·m⁻²s⁻¹ limit needs 2 blocks of clay plus a block of vegetated soil. Lime neutralization with barium co-precipitation cuts radium in effluent 100–1000 times.

yellowcake ─► dissolver (HNO₃) ─► uranyl nitrate (≈ 300 g U/L)
─► pulsed_column (30 % TBP in kerosene: extraction, scrub, strip)
─► pure uranyl nitrate ─► evaporator ─► denitration_reactor 300–400 °C ─► UO₃ (orange oxide)
─► reduction_furnace, H₂, 600–650 °C ─► UO₂ (brown)
─► hydrofluorination_reactor, HF, 450–550 °C ─► UF₄ (green salt)
├─► bomb reduction with Mg ─► uranium metal (T0 slugs, `uranium_slug`)
└─► fluorination_reactor (flame tower), F₂ ─► UF₆ ─► cold_trap ─► uf6_cylinder_48y
HF comes from fluorite; fluorine from electrolysis of KF·2HF in a fluorine_cell.
| Property | Value |
|---|---|
| Triple point | 64.05 °C, 151.7 kPa |
| Sublimation at 1 atm | 56.5 °C |
| Vapor pressure at 25 °C | ≈ 15 kPa |
| Hydrolysis | UF₆ + 2 H₂O → UO₂F₂ + 4 HF — fast, exothermic, white cloud |
| Container | Prototype | UF₆ capacity | Enrichment limit | Use |
|---|---|---|---|---|
uf6_cylinder_48y |
ANSI N14.1 48Y | 12,501 kg | 4.5 % | natural and depleted UF₆ |
uf6_cylinder_30b |
30B | 2277 kg | 5.0 % | LEU product |
uf6_cylinder_5a |
5A | 24.95 kg | up to 20 % in game | HALEU |
Rules: fill ≤ 62 % of volume as solid (liquid UF₆ expands about 40 % when heated — overfilling ruptures the cylinder above the triple point); withdrawal only through a uf6_autoclave (heating to 90–110 °C); a dropped or punctured cylinder releases UF₆ at a rate limited by sublimation; a cylinder refuses enrichment above its type limit. Each kilogram of released UF₆ produces 0.227 kg HF and 0.875 kg UO₂F₂. For natural and low-enriched UF₆, chemical toxicity (uranium to the kidneys, HF) dominates over radiological dose.

A gas centrifuge is a thin-walled rotor spinning in a vacuum casing. The elementary separation factor comes from the Boltzmann distribution in the centrifugal field, and maximum separative power from the Dirac limit, proportional to the fourth power of wall speed. Everything depends on rotor strength: burst speed √(σ/ρ) does not depend on radius.
| Parameter | T-A: aluminium 7075 | T-B: maraging steel | T-C: carbon fiber (CFRP) |
|---|---|---|---|
| Rotor item | centrifuge_rotor_aluminum |
centrifuge_rotor_maraging |
centrifuge_rotor_cfrp |
| Burst speed | 450 m/s | 500 m/s | 866 m/s |
| Nominal wall speed | 350 m/s | 430 m/s | 650 m/s |
| Separation factor α | 1.121 | 1.188 | 1.482 |
| Separative power, SWU/physical year | 3.88 | 11.37 | 72.5 |
| Rotor kinetic energy | 0.49 MJ | 1.39 MJ | 2.12 MJ |
| Specific energy | 200 kWh/SWU | 100 kWh/SWU | 50 kWh/SWU |
The gas_centrifuge is a 1×1×2 block with a built-in speed multiplier on a Create shaft. Rotors accumulate damage; run them too fast and they fail.
| Block | Role |
|---|---|
gas_centrifuge |
machine; the rotor is inserted as an item (component rotor_state: tier, damage, hours) |
cascade_header |
stage header with feed / light / heavy lines; machines touching one continuous header form a stage |
cascade_interstage_pipe |
light fraction of stage s → feed of s+1; heavy fraction of s+1 → feed of s |
cascade_feed_station |
feed point; owner of the CentrifugeCascade object and the pc_cascade peripheral |
cascade_product_station |
product take-off into uf6_cylinder_30b / 5a via cold_trap
|
cascade_tails_station |
tails into uf6_cylinder_48y
|
cascade_isolation_valve |
fast isolation valve on a header (0.2 s) |
The cascade must be a linear chain (no branches, one feed station, no loops). The operator sets feed and product flow; a steady-state solver runs at 1 Hz. In cold biomes, UF₆ desublimates in headers below about 9 °C: without trace_heater (50 W/m) the header gradually clogs, visible as rising header pressure.
Cascade crash. When a rotor fails, its energy is released; the casing contains fragments, but neighbors within 2 blocks take damage, and the gas shock in the header slows every machine in the stage. Without fast isolation the stage collapses in 3–10 s, then neighboring stages through the interstage pipes — a cascade accident, as in real plants. cascade_isolation_valve closes at 1.5× nominal header pressure in 0.2 s, if installed and not blocked by Lua. The pc_cascade peripheral emits a cascade_crash event. Released UF₆ forms an HF cloud.
Depleted UF₆ (tails 0.20–0.30 %, default 0.25 %) is stored in 48Y cylinders — 8 kg of tails per kg of 4.4 % product. Uses: depleted_uranium_ingot (shielding denser than lead), the MOX matrix, or re-enrichment of tails. Cylinders stored outdoors corrode.
Feed 0.711 %, tails 0.25 %:
| Product enrichment | Feed per kg product | SWU per kg product |
|---|---|---|
| 2.0 % | 3.80 kg | 1.915 |
| 3.0 % | 5.97 kg | 3.811 |
| 4.4 % | 9.00 kg | 6.662 |
| 20 % | 42.8 kg | 41.58 |
| Rotor tier | SWU per real hour (multiplier 16) | Machine-hours per kg of 4.4 % | Shaft power per machine |
|---|---|---|---|
| T-A aluminium | 0.510 | 13.06 | 102 kW |
| T-B maraging steel | 1.494 | 4.46 | 149 kW |
| T-C CFRP | 9.533 | 0.699 | 477 kW |
Calibration: a 100-machine T-C cascade produces a starting T2a core (≈ 2.4 t U at 4.4 %, about 16,000 SWU) in 16.8 real hours, drawing 47.7 MW (47,700 SU) from Create shafts. The bottleneck is instantaneous power before you have a reactor. Alternatives: a smaller cascade and more time; the T3 (CANDU) branch with natural uranium and heavy water; or T1 at 2 % (5745 SWU) with a 40-machine T-B cascade in 96 h at 6 MW, within reach of Create steam engines. The full-size PR-300 reference core needs about 82,500 SWU — a deliberate megaproject.

defluorination_kiln, two routes:
- Dry route (IDR) — main: UF₆ + steam → UO₂F₂ → UO₂ with H₂ at 600–700 °C. 0.504 kg of HF per kg U is returned to hydrofluorination — a closed fluoride loop. Residual fluorine above 100 µg/g corrodes cladding from the inside.
- Wet route (ADU) — historical, available earlier; the powder presses slightly worse (−2 % pellet density).
Enriched UO₂ powder is limited to 50 kg U per container at ≤ 5 % (fissile.powder_batch_limit_kg_u). Powder flooded by firefighting water is a classic criticality scenario.
pellet_press, sintering_furnace, centerless_grinder (±12 µm), then pellet_inspection_station. Each check can be switched off; a skipped check lets defects through and raises the fuel rod failure probability:
| Check | Method | Criterion | Consequence of a missed defect |
|---|---|---|---|
| Density | hydrostatic weighing | 0.945–0.965 of theoretical | densification in reactor, larger gap, fuel overheating; or swelling |
| Enrichment | gamma spectrometry, 185.7 keV line of U-235 | ±0.05 % absolute | power peak in the assembly |
| Hydrogen | hot extraction | ≤ 1.3 µg H/g UO₂ | internal cladding hydriding — ×20 failure chance |
| Geometry | laser micrometer | ±12 µm | jamming during rod loading |
| Chips | machine vision | none | pellet-cladding interaction — ×3 failure chance during power maneuvers |
Pellet trays stored outside a dry_storage_cabinet in humid biomes pick up moisture.
Hafnium absorbs thermal neutrons 560 times more than zirconium (104 b vs. 0.185 b). Natural zircon has about 2 % Hf, which makes the alloy absorb 6.7 times more than pure Zr. Nuclear grade is Hf ≤ 100 µg/g.
| Stage | Process | Block |
|---|---|---|
| Sand beneficiation | gravity, magnetic and electrostatic separation | Create fans/belts + mineral_separator
|
| Carbochlorination | ZrSiO₄ + 4 C + 4 Cl₂ → ZrCl₄ + SiCl₄ + 4 CO, 1000–1100 °C |
chlorinator (Cl₂ from chlor_alkali_cell) |
| Hafnium removal | fractional crystallization of K₂ZrF₆, ≈ 16 recrystallizations for 2 % → 100 ppm | hafnium_separation_column |
| Kroll reduction | ZrCl₄ + 2 Mg → Zr + 2 MgCl₂, 800–900 °C under Ar | kroll_reactor |
| Alloy | Zircaloy-4 (Zr–1.5Sn–0.2Fe–0.1Cr) or E110 (Zr–1Nb) | vacuum_arc_furnace |
| Tube | pilger rolling, 3–4 passes |
pilger_mill (Create) |
| Inspection | ultrasound, eddy current | ultrasonic_tester |
By-product: hafnium (hafnium_ingot) for control rods. The cleaner the cladding, the more hafnium for rods. Zirconium sponge is pyrophoric.
rod_loading_station loads the pellet stack, inserts a plenum spring, fills with helium at 2.0 MPa (chain.rod_he_fill_pa), and rod_welder seals the end plugs, followed by a helium leak test. Helium comes from the gas plant, or as radiogenic helium collected while crushing uraninite (gas_collector over a crushing_wheel; about 12 L per kg U).
assembly_jig is a multiblock fixture 1–4 blocks tall (= active length in meters):
AssemblyType |
Prototype | Rods | Pellet Ø, mm | Cladding | Enrichment | kg U per m | Tier |
|---|---|---|---|---|---|---|---|
T0_SLUG_CARTRIDGE |
X-10 | U metal slugs in Al cans | — | aluminium | natural | 10.6 | T0 |
T1_CHANNEL_BUNDLE |
RBMK-like | 18 | 11.5 | E110 | 1.8–2.4 % | 17.1 | T1 |
T2A_HEX |
VVER | 312 | 7.57 | E110 | 3–5 % | ≈ 124 | T2a |
T2A_SQ |
PWR 17×17 | 264 | 8.19 | Zircaloy-4 | 3–5 % | 127 | T2a |
T2B_BWR |
BWR 10×10 | 92 | 8.67 | Zircaloy-2 | 2–4 % | 50 | T2b |
T3_CANDU37 |
CANDU 37-element | 37 | 12.15 | Zircaloy-4 | natural | 39.6 | T3 |
MOX_HEX, MOX_SQ
|
MOX | as T2A | as T2A | as T2A | Pu 7–9 % in depleted U | as T2A | T2a/T4 |
A fuel_assembly item carries promptcritical:fuel_spec (immutable fabrication data) and promptcritical:fuel_state (burnup, nuclide inventory, cladding state). Rod failure probability per cycle starts at 10⁻⁵ per rod and is multiplied by fabrication defects (hydrogen ×20, skipped weld inspection ×10, chips ×3, density out of spec ×2, fluorine ×2). A 312-rod assembly without defects has a 0.3 % chance of a leaker; with a skipped hydrogen check, 6 %.
-
Nuclear graphite (
moderator_block_graphite): petroleum or pitch coke + pitch binder → forming → baking → impregnation → graphitization at 2800–3000 °C in theacheson_furnace(≈ 4 kWh/kg). Boron is removed with chlorine. Each ppm of boron adds +25 % to graphite absorption; unpurified graphite (2–10 ppm) cannot make T0 critical. -
Heavy water (
heavy_water, T3): electrolysis cascade (≈ 205 MWh per kg D₂O) or the Girdler sulfide process ings_exchange_towerpairs (1/20 of the energy, but uses lethal H₂S from the gas plant), finished by vacuum distillation. -
Control rod absorbers: B₄C (from borax, made in the
acheson_furnace), hafnium, Ag–In–Cd 80/15/5, dysprosium titanate.boric_acid_solutionfor T2a boron control and spent fuel pools.

Unloading uses the refueling_machine under water: an assembly is never raised so that less than 2.5 m of water covers it (pool.min_transfer_cover_m; the interlock can only be bypassed with protection disabled, and that is logged). Dropping an assembly is a fuel handling accident: some rods fail and release Kr-85, Xe-133 and I-131. On unloading, fuel_state records the shutdown time and prior power for decay heat and the radiation source term.
| Block | Role |
|---|---|
fuel_pool_liner |
stainless steel liner; a missing block leaks 1 m³/h of contaminated water into the ground |
fuel_pool_rack |
1 assembly per block; _open and _borated (B₄C/Al plates) variants |
fuel_pool_cooling_port |
cooling loop connection; pool water is radioactive, so only the mod's pipes up to the heat exchanger |
pool_heat_exchanger |
heat exchanger on service water |
pool_cleanup_filter |
ion-exchange filter; accumulates activity and becomes intermediate-level waste |
pool_gate |
gate between pool and transfer canal |
pool_boron_sampler |
boron meter (10 physical minutes analysis delay) |
Peripheral: pc_fuel_pool. Tags: pool<N>.temperature, pool<N>.level, pool<N>.cover, pool<N>.boron, pool<N>.heat_load, pool<N>.cooling.flow.
Example: a 600 m³ pool with 1 MW of decay heat loses cooling at 40 °C. It reaches 100 °C in 35 real minutes; after boiling starts, the water boils down to 3 m above the fuel in 1.9 real hours. Then dose rate in the hall rises, and uncovered fuel overheats.
Racks must stay at k_eff ≤ 0.95 with design boron (2000 ppm) and k_eff < 1 in clean water. Diluting the pool with the "wrong" water from a Create pipe is a real class of event (boron dilution); k_eff ≥ 1 triggers a criticality excursion at the rack.
storage.k_storage = 8766: one real hour = one physical year. Five years of cooling = five real hours ("let it sit while you build the radiochemistry plant"). A thousand years of disposal = 41.7 real days: a bad repository shows its problems within a server's lifetime, a good one does not.
Fuel ages in STORAGE time only under proper storage conditions; otherwise it ages in SLOW time:
| Location | STORAGE conditions |
|---|---|
fuel_pool_rack |
pool below 60 °C, ≥ 3.0 m of water over fuel, boron ≥ 0.9 × design for open racks |
dry_cask |
cladding below 400 °C, ≥ 75 % of vents open |
hlw_tank |
cooling and purge running |
| repository | always |
| player inventory, chest, ground | never |
dry_cask is a 3×3×5 multiblock: welded steel canister, 0.7 m concrete overpack with steel, and ventilation channels. Loading procedure: EMPTY_IN_POOL → LOADED_WET (heat ≤ 35 kW) → LID_ON → DRAINING (lifting out exposes the player) → VACUUM_DRYING (residual water < 0.1 %, otherwise ×5 failure chance) → HE_BACKFILL (0.2 MPa) → WELDED → STORED. 35 kW gives about 300 °C cladding; blocking half the vents (blocks, snow, water) pushes it to 580 °C, out of STORAGE and towards cladding failure.
transport_cask weighs 100 t (Slowness IV in inventory; move it with Create contraptions or trains). IAEA limits: ≤ 2 mSv/h on the surface, ≤ 0.1 mSv/h at 2 m; the cask refuses to close if exceeded. Drop tests as gameplay: a fall above 9 m has a 5 % chance to breach the cask, above 30 m 50 %; more than 30 s in lava, 20 %.

Typical spent fuel per tonne of initial heavy metal (45 GW·d/t, 5 years cooling): ≈ 941 kg U (0.8 % U-235, 0.55 % U-236), ≈ 11.5 kg Pu, ≈ 46 kg fission products (including ≈ 1.5 kg Cs-137), ≈ 1.3 kg minor actinides. In game, these come from the nuclide inventory.
All spent fuel work happens in a hot_cell: heavy concrete walls, lead glass hot_cell_window, master_slave_manipulator. Irradiated items emit radiation; opening a machine GUI outside the hot cell exposes the player.
| Stage | Process | Block |
|---|---|---|
| Shearing | assembly cut into 3–5 cm pieces on a Create shaft | shearing_machine |
| Dissolution | 7–10 M HNO₃, 95–100 °C |
dissolver (geometrically safe) |
| Off-gas | iodine on silver zeolite, NOₓ absorption, Kr-85 to the stack |
offgas_treatment, iodine_filter_agz, vent_stack
|
| Hulls | insoluble Zr cladding and nozzles (Co-60, Ni-63) |
hulls_drum (intermediate-level waste) |
| Clarification | removal of insoluble metallic particles | clarifier |
- First cycle: U(VI) and Pu(IV) are extracted into TBP; ≥ 99.9 % of fission products stay in the aqueous raffinate (high-level waste).
- Partition: U(IV) with hydrazine reduces Pu(IV) to Pu(III), which goes back to the aqueous phase.
- Uranium and plutonium purification cycles, overall decontamination factor 10⁶–10⁸.
- Plutonium is precipitated as oxalate in a geometrically safe
oxalate_precipitatorand calcined topuo2_powder(oxalic acid is made from sugar and nitric acid).
The solvent degrades under radiation; above 5 % degradation plutonium is retained in the organic phase — hidden plutonium buildup in the solvent is a criticality factor.
Am-241 ingrowth. Pu-241 (14.3 years) decays to Am-241 with a 59.5 keV gamma, so stored PuO₂ gets "hotter". MOX should be made within 2–3 physical years (2–3 real hours in STORAGE), or the plutonium must be purified again.
MOX (MIMAS process): master blend UO₂ + 30 % PuO₂ in a depleted-uranium matrix, diluted to 7–9 % Pu, pressed and sintered as usual. The assembly_jig passes the full nuclide vector to the reactor lattice model and shows the resulting k∞ ("design calculation"). All operations happen in a glovebox (alpha contamination, neutron background from Pu-240, Pu-238 heat at 0.57 W/g).
Reprocessed uranium contains U-236 (a neutron absorber requiring extra enrichment) and traces of U-232, whose daughter Tl-208 emits a 2.614 MeV gamma. U-232 concentrates in the cascade product, so reprocessed-uranium fuel needs shielding.
Double contingency: an accident requires two independent unlikely failures. Controls available as blocks:
| Control | In game |
|---|---|
| Geometry | geometrically safe equipment: annular_tank, slab_tank, small-diameter pipe vessels. Safety is computed, not declared |
| Mass | fissile mass limits per batch/vessel; fissile_batch_counter tracks item movement (tag fissile.<area>.mass) |
| Concentration | g/L control for solutions (analysis delay) |
| Moderation | no water in dry powder areas — water firefighting in a MOX area is a violation |
| Absorbers | borosilicate raschig_rings, soluble gadolinium |
| Alarm |
criticality_alarm (CAAS): 3 detectors, 2-of-3 logic, siren, pc_rad_monitor event |
Reference minimum critical values (water reflected, optimally moderated): U-235 solution ≈ 0.82 kg, infinite cylinder ≈ 13.7 cm, slab ≈ 4.4 cm, ≈ 11.6 g/L; Pu-239 ≈ 0.51 kg, cylinder ≈ 15.4 cm, ≈ 7.2 g/L.
The SolutionCriticality model uses one-group diffusion theory. If a vessel goes prompt critical, the first spike is 10¹⁵ fissions per liter (calibrated on the 1999 JCO accident), followed by a quasi-steady boiling phase that lasts until geometry or composition changes. Unshielded dose at 1 m is about 8·10⁻¹⁶ Sv per fission — 4·10¹⁶ fissions give 32 Sv. You see a blue flash; part of the solution boils out. Blocks are not destroyed — a solution excursion is not an explosion.
| Scenario | In-game condition | Consequence |
|---|---|---|
| Red oil | TBP carried into the evaporator (> 0.5 vol %) above 130 °C |
vessel explosion, release |
| Extraction fire | spilled kerosene/dodecane + ignition | fire, aerosol |
| HLW tank explosion |
hlw_tank without cooling dries out, nitrate-acetate salts above 600 K |
explosion, large-scale contamination |
| Hydrogen in HLW tanks | radiolysis; without purge H₂ exceeds 4 % | explosive mixture; 100 kW of decay heat needs ≥ 10 m³/h of purge air |
| Criticality excursion | see above | dose, contamination |
hlw_tank is a stainless tank with cooling coils, a Create agitator and a purge; about 90 % of spent fuel heat goes to the raffinate. Tags: hlw<N>.temperature, hlw<N>.level, hlw<N>.h2.fraction.

Classes are computed for any item or container with a nuclide inventory or contamination:
| Class | Beta-gamma, Bq/kg | Alpha, Bq/kg | Heat | Route |
|---|---|---|---|---|
| VLLW | < 10⁶ | < 10⁵ | — | near-surface trench |
| LLW | 10⁶–10⁷ | 10⁵–10⁶ | — | compaction → near-surface repository |
| ILW | 10⁷–10¹⁰ | 10⁶–10⁹ | < 2 kW/m³ | cementation → near-surface or intermediate depth |
| HLW | > 10¹⁰ | > 10⁹ | ≥ 2 kW/m³ | vitrification → geological disposal |
Waste items get a promptcritical:waste_class component. Dropping one on the ground creates an orphan source.
| Process | Input | Output | Block |
|---|---|---|---|
| Compaction | LLW (rags, protective gear, filters) |
waste_drum, ×5 volume reduction |
waste_compactor (Create press) |
| Cementation | ILW sludge, hulls, resins |
cemented_waste_drum (200 L) |
cementation_mixer; portland_cement from cement_kiln (or blast furnace slag) |
| Bituminization | ILW salts |
bitumen_waste_drum — cheap but flammable above 200 °C |
bitumenizer |
| Vitrification | liquid HLW + sand, borax, soda |
hlw_glass_canister (400 kg glass, CSD-V prototype) at 1100–1150 °C |
vitrification_melter |
Without offgas_treatment, vitrification releases Cs and RuO₄. A glass canister from 5-year-cooled fuel produces about 1.5–2 kW of heat.
The multi-barrier system follows the Swedish KBS-3 concept:
| Barrier | Block / item | Model |
|---|---|---|
| 1. Waste form | glass / UO₂ / cement | dissolution: glass 10⁻⁵/year, UO₂ 10⁻⁶/year, cement 10⁻³/year |
| 2. Container |
copper_canister (5 cm Cu + cast iron insert), steel_overpack, waste_drum
|
failure time: copper 10⁵ years, steel 10³, drum in soil 30 |
| 3. Buffer |
bentonite_buffer (compacted bentonite, 1 block) |
diffusion delay |
| 4. Host rock | surrounding blocks | groundwater advection with sorption retardation |
Bentonite is made from clay and tuff in a mineral_separator.
Site requirements, checked by repository_controller: depth ≥ 80 m (waste.repository_min_depth_m); host rock deepslate or tuff; ≥ 16 blocks from water, cave air or aquifers; no lava within 16 blocks. Violations do not forbid disposal — they make the model worse. You are free to bury waste badly.
Migration is computed analytically per package: a path search (up to 64 blocks) to the nearest exit (water, cave, surface), groundwater speed from block permeability, retardation per nuclide group from sorption coefficients. After container failure, activity reaches the exit delayed by travel time and reduced by decay, and enters the contamination map.
| Block | Hydraulic conductivity K, m/s |
|---|---|
bentonite_buffer |
10⁻¹³ |
| concrete | 10⁻¹¹ |
| deepslate, clay | 10⁻¹⁰ |
| tuff | 10⁻⁹ |
| stone | 10⁻⁸ |
| sandstone, dirt | 10⁻⁶ |
| sand | 10⁻⁴ |
| gravel | 10⁻² |
- Good site: copper canister, 1 block of bentonite, 50 m of deepslate. I-129 (no sorption) needs about 7900 years after the canister fails at 10⁵ years — about 12 real years. Never, in practice.
- Bad site: a cement drum in gravel 10 m from a river. The drum fails after 30 years (30 real hours), Cs-137 arrives almost instantly in STORAGE time, and about 1.5 real days after burial the river starts carrying Cs-137 downstream.
- Reactor-Physics — how fuel composition becomes reactivity, burnup and decay heat
- Radiation-Safety — shielding, dose, contamination
- Accidents — UF₆ releases, fuel handling accidents, pool loss of cooling
- Isotopes-and-RTG — Pu-238, Am-241 and other isotopes from the cycle
- Progression — cross-industry inputs (sulfur, helium, TBP, chlorine, graphite)
- Petrochemistry, Oil-and-Gas, Coal-and-Metallurgy
- Create-Integration — centrifuges, mills and casks on Create shafts and contraptions
Prompt Critical · © 2026 denfry · Repository · Report an issue
Start here
Design
Nuclear
Industries
Control and automation
World and server
Development