Power System Design¶
Document Type: Design Document Version: 0.1 (Draft) Status: In Progress Last Updated: 2026-08-25 Vault destination:
01_Design DocumentsAmends:04_Factory & Resource System Design(Power System section) Related:[06_Vertical Layers & Core Power System](<./06_Vertical Layers & Core Power System.md>)·[08_Research Tree Design](<./08_Research Tree Design.md>)·[17_HUD Panel Flap](<./17_HUD Panel Flap.md>)·[24_Module System Design](<./24_Module System Design.md>)·[06_Outpost/02_Power Systems](<../06_Outpost/02_Power Systems.md>)
1. Summary¶
Power in Auto Warz mirrors a real electrical grid in three tiers: generation, transmission, distribution. The intent is to semi-teach genuine power engineering concepts through gameplay consequence, matching the approach already used in Outpost Mode's power system.
The player meets each concept at the moment it solves a real problem, never as a lecture.
1a. Units and Scale¶
1a.1 The two units¶
PU is a rate, not a quantity. This distinction is the source of the one unit error already in the vault and it must not be repeated.
| Unit | Is | Used for |
|---|---|---|
| PU | Power. A rate. | Generator output, building draw, conduit capacity, transformer rating |
| PU·s | Energy. A rate held for a time. | Accumulator storage, fuel energy content |
A Smelter drawing 30 PU for ten seconds consumes 300 PU·s. An Accumulator rated 500 PU·s can cover a 100 PU deficit for five seconds, or a 20 PU deficit for twenty-five.
⚠️
04_Factory & Resource System Designdescribes the Accumulator as storing 500 PU. The number is right and the unit is wrong: it is 500 PU·s. Corrected there. Anything reading it as a rate will build an accumulator that discharges forever.
Neither unit maps to a real watt or joule, and deliberately so. They are game units, and the scale below is what gives them meaning.
1a.2 The scale is anchored on the Coal Generator¶
Every generation figure in §5 is expressed as a multiple of the Coal Generator, which is the reference source at 100 PU.
Anchoring on the Coal Generator rather than on an abstract unit means the whole generation side can be rebalanced by moving one number, and every relative relationship survives the move. It is also the source the player meets first with a real fuel cost, so it is the one their intuition is calibrated against.
1a.3 Two knobs, and what each does¶
Balance on the generation side is controlled by exactly two PowerTuning values. They are deliberately orthogonal: one changes how much power exists, the other changes what that power costs in logistics.
| Knob | Default | Raising it means | Leaves unchanged |
|---|---|---|---|
generation_scale |
1.0 | Every source outputs more, and burns proportionally more fuel. Pure "how much power exists". | Energy per item. The fuel burden per PU is identical |
fuel_density_scale |
1.0 | Each fuel item carries more energy, so generators burn fewer items for the same output. Pure "how heavy is fuel logistics". | Total power available |
source output PU = base_output x generation_scale
fuel items per sec = (base_output x generation_scale)
/ (base_energy_per_item x fuel_density_scale)
Why two rather than one: power scarcity and fuel-belt burden are separate feelings, and a single knob welds them together. Halving generation_scale makes power tight and halves the belt load, which is the opposite of the intended pressure. Halving fuel_density_scale instead leaves power exactly as tight and doubles the belts, which is the pressure §3.3 is built on.
Building draw is not scaled by either knob. Draws live per-building in .tres and are the fixed side of the equation; pressure is set by moving generation against them.
1a.4 What one belt is worth¶
The most useful number in the system, because it is the one the player actually plans around:
One Basic Belt of coal, fully saturated, sustains 200 PU.
At default scale a Coal Generator burns 0.5 coal/sec for 100 PU, and a Basic Belt moves 1 item/sec, so one belt feeds exactly two generators. Fast Belt feeds four (400 PU), Express Belt eight (800 PU).
This is the number that makes §3.3's choice concrete. A distant mining outpost drawing 400 PU either gets a transmission line, or gets a dedicated Fast Belt of coal running to it forever.
2. Hard Constraints¶
2.1 Research is path-choice, not a timeline¶
The research system gives the player a limited pool of credits to spend on the direction they choose. It is not an early/mid/late gate. A player may prioritise transmission early, or never take it at all.
Therefore: the power system must be complete and winnable using distribution alone. Transmission is an efficiency and reach upgrade, never a required rung. Any design that assumes the player has transformers is invalid.
2.2 Distribution loss is load-dependent, not distance-gated¶
Distribution does lose power over distance, but the loss scales with how much load the circuit is carrying, not with a fixed range limit.
This is physically correct. Voltage drop is current × resistance, so a heavier load on the same conductor sags the voltage further, and the far end of the line falls below usable voltage first. This is real distribution engineering and it is the concept the tier teaches.
Why this shape is right for pacing: - Early game: a handful of buildings draws little current, so reach is generous. No friction, nothing to think about. - As the factory grows: load rises, reach contracts, and the outer edge begins to brown out. - The discovery moment emerges from the player's own success, not from a wall. Nothing gates them; they outgrow their grid.
This replaces the earlier "zero loss, hard maximum run length" model.
2.3 Connection range is a backend value¶
04_Factory & Resource System Design describes buildings as having a "configurable connection range". This is a developer tuning value for playtest balancing, not a player-facing setting.
⚠️ The existing wording reads as a player control and must be relabelled, or it will be implemented as one.
3. The Three Tiers¶
| Real world | Auto Warz | Range | Loss | Status |
|---|---|---|---|---|
| Generation | Core Power Station, Fuel Generator, Solar Panel, Geothermal Tap | — | — | Already specced |
| Transmission | Transformers, transmission lines, Pylons | Long | Yes, voltage-dependent | New (Pylons exist for sky only) |
| Distribution | Power Poles + building-integrated transmitters | Load-dependent | Voltage drop, scales with circuit load | Transmitters exist, poles are new |
3.1 Distribution (baseline, always available)¶
- Every building has an integrated transmitter with a short range. Neighbouring buildings auto-connect.
- A compact starting factory therefore needs no player thought at all. No early friction.
- Power Poles extend distribution across a site, at the same voltage, with no loss.
- Distribution reach contracts as circuit load rises (§2.2). Poles extend the network, but they do not defeat voltage drop.
- Players can use distribution for long runs. It simply becomes lossy and unreliable as the factory grows, which is the intended lesson rather than a prohibition.
Change from existing spec:
04_Factory & Resource System Designcurrently states "There are no separate power poles." Poles now exist at the distribution tier. The integrated-transmitter model is retained alongside them, not replaced.
3.2 Transmission (research path)¶
The answer to "my ore field is too far to reach."
- Step-up transformer at the generation end, step-down transformer at the consumption end
- Transmission lines run between them, carried on Pylons
- Higher voltage tier = lower loss per tile, but requires a matched transformer pair
- Each transformer imposes a small fixed loss
3.3 Two valid answers, and why both work¶
When the edge of the factory starts browning out, the player has two legitimate strategies. Neither is the "correct" one.
| Strategy | Up-front cost | Ongoing cost |
|---|---|---|
| Research transmission | Transformers, pylons, lines. Built once. | Minimal |
| Local generators per cluster | Cheap, no research required | Fuel logistics forever. A belt to every generator, permanently. |
Solar sidesteps the fuel cost but delivers less and varies, so it is a partial answer rather than a free one.
This is what makes path-choice research work here (§2.1). A player who never touches the transmission branch is not locked out; they have chosen to move fuel instead of moving power, and they pay for that choice continuously in belt throughput and factory footprint.
3.4 The teaching moment¶
The player's factory grows, the far edge browns out, and they learn voltage drop by causing it. Stepping up voltage then makes distance affordable, which is the actual reason high-voltage transmission exists in the real world, learned by needing it.
3.5 Brownout reads on the base rings¶
Voltage drop hits the buildings furthest from the generator first, so the outer edge of the factory faults while the core stays healthy. On the base ring status system (07_Art Direction Style Bible §1.7b) that renders as a red perimeter closing inward, which diagnoses the problem at a glance with no panel needed.
Open items for this document are tracked in docs/open-items.md.
4. Transmission Loss Model¶
| Tier | Loss per tile | Transformer pair loss |
|---|---|---|
| Distribution (LV) | 0% | n/a |
| Transmission MV | 0.5% | 3% each |
| Transmission HV | 0.15% | 3% each |
Worked examples:
| Run length | MV total loss | HV total loss | Better choice |
|---|---|---|---|
| 20 tiles | 10% | 3% + 6% = 9% | Roughly equal |
| 60 tiles | 30% | 9% + 6% = 15% | HV |
| 100 tiles | 50% | 15% + 6% = 21% | HV clearly |
The crossover around 20 tiles is deliberate: it teaches that high voltage is not automatically better, only better over distance. That is the correct real-world lesson and it makes the choice a genuine decision rather than a straight upgrade.
These figures are now decided rather than placeholder. They were confirmed rather than replaced: the worked examples above depend on them, and the 20-tile crossover they produce is the teaching moment. What was missing was never these numbers but the distribution model beside them, which is §4c.
Distribution loses nothing per tile, and this is not a contradiction. Distribution's loss is voltage drop, which is a function of load and distance together (§4c), not a percentage skimmed per tile. Transmission's loss is a genuine per-tile percentage because the line is carrying power past everything rather than delivering along its length. Two tiers, two loss mechanisms, both real.
Open items for this document are tracked in docs/open-items.md.
4a. Brownout Shedding (RESOLVED)¶
⚠️ This will be a maddening bug if not designed for up front.
If a far building browns out, it stops drawing power. Circuit load falls. Reach recovers. The building powers back on. Load rises. It browns out again. This oscillates every tick and presents as flickering buildings.
Real grids solve this with hysteresis and staged load shedding. What follows is the specification.
4a.1 There are two brownouts, not one¶
The vault has described brownout two different ways, and both are correct because they are different failures with different cures. Conflating them is what makes this section hard.
| A — Grid deficit | B — Local undervoltage | |
|---|---|---|
| Cause | Supply is less than demand across the whole grid | Voltage drop over distance under load (§2.2) |
| Test | A quantity balance in PU | A ratio, delivered voltage against nominal |
| Who fails | Whoever the player ranked lowest | The electrically furthest buildings |
| Reads as | Chosen sacrifice | Red perimeter closing inward (§3.5) |
| Cure | More generation, or less draw | Poles, transformers, or a local generator |
Both can be true at once, and a building sheds if either condition fires. They are evaluated independently and restored independently.
Grid deficit does not sag voltage in this simulation. Physically it would, but modelling it would make priority meaningless: a uniform sag still reaches the perimeter first, so the outer ring would fail during a pure supply shortage no matter how the player ranked their buildings. Deficit is a quantity problem and is solved by quantity. Distance is a voltage problem and is solved by voltage.
4a.2 The rule that actually stops oscillation¶
Hysteresis is usually stated as recovery threshold above shutdown threshold, and 00_Canonical Design Facts §8 states it that way. That alone is not sufficient, and building only to it will still flicker.
Consider a building whose own draw is what breaks the circuit. It sheds. Its load leaves. Voltage climbs past the recovery threshold. It returns. Its load comes back. Voltage collapses. It sheds again. Every threshold test passed; the building still flickers, now at the stagger period rather than the tick rate, which is worse because it looks deliberate.
The governing rule: restore on the predicted state after restoring, never on the observed state before it.
A shed building may return only when the grid would still be healthy with it running. Both triggers use this same principle; they differ only in what is predicted.
This is what the original wording of this section meant by a margin of headroom, made precise.
4a.3 Trigger A — grid deficit¶
Evaluated per grid, per tick, in PU.
- Sheds when
supply < demandholds fordeficit_confirm_ticks, so a one-tick blip sheds nothing. - Sheds the smallest set of lowest-priority buildings that brings
supply >= demand * shed_target_margin. - Restores a building of draw
donly whensupply - demand >= d * restore_headroom_factor, held continuously forrestore_dwell_ticks.
restore_headroom_factor is strictly greater than shed_target_margin. That gap is the hysteresis for trigger A: a building that returns leaves the grid with margin to spare, so the deficit does not immediately re-open.
4a.4 Trigger B — local undervoltage¶
Evaluated per building, per tick, as delivered voltage over nominal.
- Sheds when
v < shutdown_threshold. - Restores when
v >= recovery_thresholdheld forrestore_dwell_ticks, and the predictedvwith this building drawing again would stay at or aboveshutdown_thresholdby therestore_voltage_headroommargin.
The building's own contribution to circuit load is known, so the post-restore voltage is computable rather than guessed. The predictive half is not optional: the threshold gap alone leaves the single-building case in §4a.2 unfixed.
The shape of the load-to-voltage curve that produces
vis not decided here. That is OI-082. This section specifies what is done withv, not howvis derived.
4a.5 Staging¶
Shedding is staged, and a stage is sized to the measured deficit rather than fixed.
A stage sheds enough to close the gap in §4a.3, then waits shed_stagger_ticks and re-measures before shedding again. Sizing to the measurement matters in both directions:
- One building per stage is too slow. A generator starved of fuel can open a deficit of hundreds of PU. Shedding one building per stage leaves the grid collapsed for seconds while it walks down the priority list.
- Shedding everything at once is too much. It drops fifty buildings where four would have done, and the grid is then left with a large surplus that immediately begins restoring, which is the oscillation again at a larger scale.
Restoration is never sized. It returns one building per restore_stagger_ticks, re-testing the headroom condition each time. The asymmetry is deliberate.
Shed fast, restore slowly. Shedding late browns out the whole grid; restoring eagerly flickers. Real under-frequency load shedding sheds within a second and restores over minutes, for this reason.
4a.6 Order, and how ties break¶
Shed order is ascending power priority (1 sheds first), from the priority system in [04_Factory & Resource System Design](<./04_Factory & Resource System Design.md>) -> Power Priority System. Within one priority band:
- Greatest electrical distance from the source sheds first. Those buildings already carry the lowest
v, so this is physically right, and it makes trigger A produce the same inward-closing perimeter the player has already learned from trigger B (§3.5). One visual language for both failures. - Then by stable building id. The simulation is authoritative-host, so cross-machine float agreement is not required, but a reproducible order is: unordered iteration would shed different buildings on each run of the same factory, and make any report of the bug unreproducible.
Restore order is the exact reverse: highest priority first, nearest first.
4a.7 Accumulators¶
Accumulator discharge counts as supply in §4a.3, so a grid holding charge sags later than one without. It must not be allowed to turn a steady deficit into a flicker.
An accumulator's output counts toward the restore headroom test only if it can sustain that output for the whole
restore_dwell_tickswindow at its current charge. Otherwise a nearly-empty accumulator covers a building's return, empties, and the building sheds again, which is the oscillation with an extra step in it.
Accumulators charge only from genuine surplus, never from the headroom reserved by restore_headroom_factor. Charging from that margin would consume the buffer that keeps restored buildings running.
4a.8 Worked example¶
A grid generating 100 PU against 130 PU of draw, no accumulators. Values from §4b.
| Step | State |
|---|---|
| Deficit confirmed after 4 ticks | supply 100, demand 130 |
| Target | demand must fall to 100 / 1.05 = 95.2 PU, so shed at least 34.8 |
| Stage 1 walks up the priority order | 3 Research Labs (2 each) + 1 Smelter (30) = 36 PU shed |
| Settled | demand 94, and 100 >= 94 * 1.05 = 98.7 ✔ |
One stage, 0.2 s. Now the grid tries to give buildings back:
| Candidate | Test | Result |
|---|---|---|
| Lab, draw 2 | spare 6, need 2 * 1.10 = 2.2 |
✔ returns after the 1 s dwell |
| Lab, draw 2 | spare 4, need 2.2 | ✔ returns |
| Lab, draw 2 | spare 2, need 2.2 | ✘ stays shed |
| Smelter, draw 30 | spare 2, need 33 | ✘ stays shed |
It settles and stays settled. Nothing flickers, and the grid stops one lab short of the edge rather than sitting exactly on it, which is the headroom factor doing its job.
4b. Backend Tuning Values¶
Every balance number in this document is a backend tuning value, not a hardcoded constant. They will all be adjusted during playtest and must live in a single tuning resource.
Scale (§1a.3). The two knobs that rebalance the whole generation side.
| Value | Identifier | Setting | Effect |
|---|---|---|---|
| Generation scale | generation_scale |
1.0 | All outputs and fuel rates together. How much power exists |
| Fuel density scale | fuel_density_scale |
1.0 | Energy per fuel item. How heavy fuel logistics are |
Distribution (§4c). One coefficient governs the entire tier.
| Value | Identifier | Setting | Why this number |
|---|---|---|---|
| Voltage drop coefficient | drop_coefficient |
0.000025 | Gives radius x load = 16 000 PU·tiles at the shed threshold: unlimited reach for a starter base, 20 tiles at 800 PU |
| Transmitter radius | transmitter_radius |
8 tiles | A compact base self-connects with no player thought (§3.1) |
| Power Pole radius | pole_radius |
16 tiles | Twice a transmitter, so a pole is worth placing |
| Power module bonus | power_module_radius_bonus |
+8 tiles | A relay for the price of a module slot (§8) |
Transmission (§4). Decided, not placeholder.
| Value | Setting |
|---|---|
| MV loss per tile | 0.5% |
| HV loss per tile | 0.15% |
| Transformer loss, each | 3% |
Storage (§5.5).
| Value | Identifier | Setting |
|---|---|---|
| Capacity | accumulator_capacity |
500 PU·s |
| Charge and discharge cap | accumulator_max_rate |
100 PU |
| Round-trip efficiency | accumulator_round_trip |
0.90 |
Usage (§9).
| Value | Setting |
|---|---|
| Machine Mk output multipliers | 1.00 / 1.50 / 2.25 |
| Machine Mk draw multipliers | 1.00 / 1.65 / 2.72 |
| Base Mk draw surcharge | +0% / +5% / +12% |
| Efficiency module reduction | 15% each, multiplicative |
Generation (§5.1). Per-source output and fuel rate live in the source table, expressed as multiples of the Coal Generator reference so that generation_scale moves all of them coherently.
Shedding values (§4a). These are decided, not placeholders. At 20 TPS.
| Value | Identifier | Setting | Why this number |
|---|---|---|---|
| Deficit confirm | deficit_confirm_ticks |
4 (0.2 s) | Long enough to ignore a one-tick blip, short enough that a real deficit is acted on before the player notices |
| Shed target margin | shed_target_margin |
1.05 | Shedding to exactly break-even leaves the grid on the edge, where the next building placed re-opens the deficit |
| Restore headroom factor | restore_headroom_factor |
1.10 | Strictly above shed_target_margin. The gap between the two is the hysteresis for trigger A |
| Shutdown threshold | shutdown_threshold |
0.60 | Below 60% of nominal a building cannot run. Real induction motors stall well before this |
| Recovery threshold | recovery_threshold |
0.75 | Needs three quarters of nominal to come back |
| Hysteresis margin | — | 0.15, derived | recovery_threshold - shutdown_threshold. Derived, never stored. Storing all three invites the three drifting out of agreement, and the invariant is what matters |
| Restore voltage headroom | restore_voltage_headroom |
0.05 | The predictive margin in §4a.4. Post-restore v must clear shutdown_threshold by this much |
| Shed stagger | shed_stagger_ticks |
4 (0.2 s) | Re-measure between stages. Fast, because the grid is degraded while it waits |
| Restore stagger | restore_stagger_ticks |
20 (1.0 s) | Five times the shed interval. Shed fast, restore slowly (§4a.5) |
| Restore dwell | restore_dwell_ticks |
20 (1.0 s) | The recovery condition must hold continuously, so a transient spike restores nothing |
The invariant, and the one thing not to tune past:
recovery_threshold > shutdown_thresholdandrestore_headroom_factor > shed_target_margin. Either equality reintroduces the oscillation in §4a. APowerTuningresource should assert both on load rather than trusting whoever edits it next.Recommend a single
PowerTuningresource so all of these are adjustable without touching simulation code.
4c. Distribution Reach — the Load/Distance Model¶
This is the model §2.2 describes in words and §4a consumes as v. It is the mechanical heart of the distribution tier.
4c.1 Connection is not reach¶
Two different questions are easy to conflate, and the implementation must keep them apart.
| Connection | Reach | |
|---|---|---|
| Asks | Am I on this grid at all? | Does usable power actually arrive? |
| Nature | Topological, a fixed radius | Electrical, contracts with load |
| Set by | Transmitter and pole radii (§4c.4) | The formula below |
| Failing looks like | Not connected, no grid | On the grid, browning out |
A building can be firmly connected and still receive nothing. That is not a bug; it is the entire lesson of §3.4.
4c.2 The formula¶
Real voltage drop is current × resistance. Current scales with load, resistance with distance, so drop scales with load × distance. The simulation uses that directly:
circuit_load_pu— total draw on the grid this tickdistance_tiles— path distance through the network to the nearest generator, not straight-line, and not to the largest generatordrop_coefficient— 0.000025, the single tuning value governing the whole tier
4c.3 What that means in play¶
Rearranging at the shed threshold (v = 0.60, §4b) gives the number worth remembering:
usable radius × circuit load = 16 000 PU·tiles
One constant describes the entire distribution tier. The grid does not have a range; it has a budget, and the player spends it on either size or draw.
| Circuit load | Usable radius | Reads as |
|---|---|---|
| 85 PU (starter base) | 188 tiles | Effectively unlimited. No friction, nothing to think about (§3.1) |
| 200 PU | 80 tiles | Still generous |
| 400 PU | 40 tiles | The edge starts to matter |
| 800 PU | 20 tiles | Outer ring browns out. The discovery moment (§3.4) |
| 1600 PU | 10 tiles | Distribution alone is no longer viable |
The curve does the pacing on its own. Nothing gates the player and no threshold is announced; they simply outgrow their grid, exactly as §2.2 requires. The contraction is also quadratic in felt terms — doubling the factory halves the radius, so the wall arrives faster than the player expects, which is what makes it memorable.
Power Poles extend the network, not the budget. A pole adds connection radius (§4c.4) and so adds path distance; it does nothing to drop_coefficient. Chaining poles outward from a heavily loaded grid reaches further into worse voltage, which is correct and is the lesson §3.1 states.
4c.4 Connection radii¶
Topological only. These decide grid membership, and are the values OI-079 was holding.
| Source | Radius | Notes |
|---|---|---|
| Integrated transmitter | 8 tiles | Every building. A compact base self-connects with no player thought |
| Power Pole | 16 tiles | The distribution-tier building. Same voltage, no added loss |
| Power module | +8 tiles | Turns any building into a relay (§8). Costs a module slot |
4c.5 Multiple generators¶
Distance is measured to the nearest generator on the grid. Spreading generation is therefore a legitimate answer to voltage drop, and a cheap one — which is intended, because it is the same "local generation" strategy §3.3 already names, arrived at from the other direction.
A player who scatters small generators through the factory has effectively bought reach with fuel logistics. A player who centralises and runs transmission has bought it with research and buildings. §3.3's two answers hold here.
5. Generation Sources¶
Sources are differentiated on four axes, not on output alone. A source that is merely "bigger" creates no decision.
- Fuel burden — none, solid (belt), or fluid (pipe)
- Variability — constant, day/night cycle, or location-dependent
- Planet suitability — ties directly to the nine planet types and their seeded ratings
- Byproducts — waste, heat, or cooling requirements
5.1 Source Table¶
All outputs at generation_scale = 1.0. × is the multiple of the Coal Generator reference (§1a.2).
| # | Source | Output | × | Fuel | Rate | Variability | Favoured planets |
|---|---|---|---|---|---|---|---|
| 1 | Biomass Burner | 40 PU | 0.4 | raw_biomass (belt) |
0.4 /sec | Constant | Terrestrial, Ocean |
| 2 | Coal Generator | 100 PU | 1.0 | raw_coal (belt) |
0.5 /sec | Constant | Carbon, Terrestrial |
| 3 | Fuel Generator | 250 PU | 2.5 | fld_fuel (pipe) |
0.5 /sec | Constant | Any |
| 4 | Solar Panel | 50 PU peak | 0.5 | None | — | Day/night | Terrestrial, Hot Jupiter, Super-Earth |
| 5 | Wind Turbine | 60 PU base | 0.6 | None | — | Location | Hot Jupiter, Terrestrial |
| 6 | Geothermal Tap | 300 PU | 3.0 | None | — | Constant, pool-limited | Lava, Chthonian |
| 7 | Nuclear Reactor | 600 PU | 6.0 | Uranium (belt) + coolant (pipe) | 0.05 /sec + 2.0 /sec | Constant | Ocean, any with uranium |
| 8 | Core Power Station | CER-derived, 40–2240 PU | 0.4–22 | None | — | Constant | Chthonian, Lava |
| 9 | Interplanetary Power | — | — | — | — | — | §5.3, not designed |
Sources 1–4 keep the figures already decided in [04_Factory & Resource System Design](<./04_Factory & Resource System Design.md>) -> Power Buildings. Sources 5–8 were TBD there and are set here; that table now points at this one.
The ladder is deliberate. Each step up buys more power per building, and charges for it in a different currency:
| Step | Buys | Costs |
|---|---|---|
| Biomass → Coal | 2.5× the power, 2× the energy per item | A coal patch, so a real mining outpost |
| Coal → Fuel | 2.5× again | The whole refining chain, and pipes instead of belts |
| Fuel → Geothermal | 1.2×, and no fuel at all | Planet type. Useless off Lava and Chthonian |
| Geothermal → Nuclear | 2×, densest fuel in the game | Uranium chain, continuous coolant, and waste you must store |
| Anything → Core | Up to 22× | One per planet, and deep excavation to reach it |
5.1a Fuel economics¶
Energy content per item, derived from output ÷ rate. This is the number that ranks fuels, and it is what fuel_density_scale moves.
| Fuel | Energy | Relative | One Basic Belt sustains |
|---|---|---|---|
raw_biomass |
100 PU·s | 0.5× | 100 PU (2.5 Burners) |
raw_coal |
200 PU·s | 1.0× | 200 PU (2 Generators) |
fld_fuel |
500 PU·s | 2.5× | 500 PU (2 Generators) (pipe, not belt) |
| Uranium | 12 000 PU·s | 60× | 12 000 PU |
Biomass is deliberately half of coal. It is the starter fuel and it teaches the fuel-logistics burden immediately (§5.1, source 1) by being visibly wasteful. The upgrade to coal halves the belt load for the same power, which is the lesson landing.
Uranium is 60× coal, and that is the point. A Nuclear Reactor burns 3 uranium a minute. The uranium is never the logistics problem; the coolant is — 2.0 /sec continuous, which is a dedicated pipe that can never stop.
Coolant loss stops the reactor. A Nuclear Reactor starved of coolant does not brown out, it scrams: output drops to zero within one tick and the reactor cannot restart until coolant has flowed continuously for 30 seconds. This is the one hard shutdown in the power system and it exists so that nuclear's 6× output carries a matching failure mode. It is not brownout shedding and does not use §4a.
5.1b Solar — the day/night curve¶
Output follows the day/night cycle continuously rather than switching. Peak 50 PU at solar noon, zero at night, cosine-shaped through dawn and dusk.
| Phase | Fraction of peak |
|---|---|
| Night | 0 |
| Dawn / dusk ramp | 0 → 1 on a cosine |
| Day | up to 1.0 at noon |
Solar cannot stand alone, and is not meant to. A grid on solar alone dies every night, which is what makes the Accumulator (§5.5) a partner building rather than an optional one. Sizing the bank is the actual design puzzle: the numbers in §5.5 mean a 50 PU night load needs 13 Accumulators to cross a two-minute night.
Useless on Rogue (no star). Sky levels do not improve solar; only Wind and the Sky Radar scale with altitude ([06_Vertical Layers & Core Power System](<./06_Vertical Layers & Core Power System.md>)).
5.1c Wind, geothermal and core — already specified¶
These three have their numbers set elsewhere. This section supplies only the base output they multiply.
Wind Turbine — 60 PU base, multiplied by altitude and planet, per [06_Vertical Layers & Core Power System](<./06_Vertical Layers & Core Power System.md>):
| Surface | Sky L1 | Sky L2 | Sky L3+ | |
|---|---|---|---|---|
| Multiplier | 70% | 90% | 110% | 130% |
| Output | 42 PU | 54 PU | 66 PU | 78 PU |
Rogue 0% (no atmosphere), Ocean 80% (calm). A Sky L3 turbine at 78 PU approaches a Coal Generator with no fuel at all, which is the reward for building upward.
Geothermal Tap — 300 PU, depth-scaled on the same formula as Core Power, drawing the planet's Geothermal Energy Pool. Unlimited taps per planet, but they share one finite pool, so the second tap on a small pool is worth less than the first. That shared pool is the balance, not the building count.
Core Power Station — CER-derived. One per planet, depth-gated. [06_Vertical Layers & Core Power System](<./06_Vertical Layers & Core Power System.md>) gives the formula: 20% of CER at Level 1, 35% at 2, 55% at 3, 80% at 4, against a seeded CER of 200–2800 PU by planet type. That is 40 PU on a poor Rogue at Level 1 — less than a Coal Generator — to 2240 PU on a rich Chthonian at Level 4, which is twenty-two Coal Generators in one building with no fuel.
The Core Power Station is the only source whose output is unknown until the planet is generated. That is the point of Core Energy Rating, and it is why planet choice is strategic rather than cosmetic (§5.2).
5.2 Why planet type matters¶
The nine planet types already carry seeded Core Energy Ratings. Extending that logic to every source turns planet selection into a strategic decision rather than flavour:
| Planet | Power character |
|---|---|
| Rogue | No star, lowest CER (100–250 PU). Solar dead. Must go nuclear or core. Genuinely hard mode. |
| Lava | Highest geothermal pool, high CER (1200–1800). Geothermal paradise. |
| Chthonian | Highest CER (1800–2800). Core Power Station is exceptional here. |
| Ocean | Low CER (200–400) but water-rich. Nuclear cooling is easy. Good wind. |
| Carbon | Coal-rich, moderate CER (600–900). Classic industrial start. |
| Terrestrial | Balanced, everything works moderately. The tutorial planet. |
Open items for this document are tracked in docs/open-items.md.
5.3 Interplanetary Power — NOT DESIGNED¶
Raised as a goal, not yet specified. Three candidate approaches:
| Approach | Notes |
|---|---|
| Charged Accumulators as cargo | Ship charged Accumulators between planets on existing transport ships. Reuses systems already planned. Power becomes a tradeable good. |
| Orbital solar + beamed power | A receiver station on the surface. Visually spectacular, mechanically a new system. |
| Direct transfer link | Late-game structure linking two planets' grids. Simplest to state, hardest to justify physically. |
⚠️ Scope warning. Interplanetary power touches the Trade Station, transport ships, and the shared persistent galaxy. It risks the same problem the Quantum Silo had: trivialising a planned logistics layer. Recommend filing to 00_Ideas rather than scoping now.
5.4 Scope reality¶
Sources 1, 2 and 7 (Biomass, Coal, Nuclear) are new buildings. Wind Turbine already exists (§5.1).
Sources 1, 2 and 7 additionally require, in Nuclear's case, a uranium chain, a cooling-water requirement, and a waste disposal problem.
That is a meaningful expansion. 02_Risk Register rates scope creep Critical. Consider which of these are genuinely needed for Early Access versus which can follow.
5.5 Storage — Accumulators¶
Capacity 500 PU·s. Charge and discharge both capped at 100 PU. Round-trip efficiency 90%.
| Value | Setting | Why |
|---|---|---|
accumulator_capacity |
500 PU·s | The figure already in 04_Factory, with the unit corrected (§1a.1) |
accumulator_max_rate |
100 PU | One Coal Generator. An accumulator standing in for a generator is the right mental model |
accumulator_round_trip |
0.90 | 10% lost across a charge/discharge cycle |
A full Accumulator covers a 100 PU deficit for 5 seconds, or a 20 PU deficit for 25 seconds. That is short on purpose: accumulators are a buffer, not a power source.
Why the 10% loss. Without it, an accumulator bank is free arbitrage and the optimal factory always has one. The loss means storing power is a service you pay for, so accumulators appear where they solve something — smoothing solar, absorbing a demand spike — rather than everywhere.
5.5a Sizing for solar¶
The honest number, because §5.1 promises accumulators smooth the day/night cycle and a player will try it:
bank size = night load x night duration / (capacity x round_trip)
= 50 PU x 120 s / (500 x 0.9)
~ 13 Accumulators
Thirteen buildings to carry 50 PU through one night, against one Coal Generator that does it with a belt. Solar plus storage is a large footprint traded against zero fuel logistics, which is a real decision rather than a trap, but the player should be able to see the cost before committing to it. The Power tab ([17_HUD Panel Flap](<./17_HUD Panel Flap.md>) Tab 2) already shows time-to-failure, which is exactly this calculation running live.
5.5b Interaction with shedding¶
Covered by §4a.7 and repeated here only as a pointer: accumulator output counts toward the §4a restore-headroom test only if the current charge can sustain it for the whole dwell window, and accumulators charge only from genuine surplus, never from reserved headroom.
6. Grid Formation¶
Regions connected only by distribution remain separate grids until deliberately linked by transmission.
This is what makes the existing HUD tooling meaningful. 17_HUD Panel Flap Tab 2 already specifies per-grid surplus and deficit, top three consumers per grid, estimated time to failure, click-to-highlight grid footprint, and merge/split toast notifications.
Note: under the previous model (every building an auto-connecting transmitter, no poles, no transmission tier) any contiguous factory formed a single grid, so multi-grid tooling described a situation the mechanic largely prevented. The three-tier model resolves that.
7. Already Specified Elsewhere (do not redesign)¶
| Feature | Location |
|---|---|
| Per-tick production/consumption summing, cascade shutdown | 04_Factory & Resource System Design |
| Power priority system (1–5 scale, research-gated, default order) | 04_Factory & Resource System Design |
| Accumulator discharge covering shortfalls | 04_Factory & Resource System Design |
| Core Energy Rating, seeded per planet, depth-scaled unlock | 06_Vertical Layers & Core Power System |
| Geothermal Energy Pool and depth scaling | 06_Vertical Layers & Core Power System |
| Power Conduits (vertical, cross-level, throughput-capped) | 06_Vertical Layers & Core Power System |
| Power Pylons (sky levels) | 06_Vertical Layers & Core Power System |
| Research Branch 2 (Fuel, Solar, Core, Geothermal paths) | 08_Research Tree Design |
| Power HUD tab, per-grid breakdown, merge/split toasts | 17_HUD Panel Flap |
8. Interaction With This Session's Decisions¶
| Decision | Interaction |
|---|---|
| Power module | No longer a "roof-mounted pole". It is a range extender on the building's integrated transmitter, turning any building into a distribution relay without a dedicated pole. 04_Factory already anticipated relay buildings. |
| Ports | Power does not use ports. Ports carry ITEM and FLUID only. Unchanged. |
| Base ring status | No power is a fault state: ring floods red, body cyan goes dark. See 07_Art Direction Style Bible §1.7b. |
| Efficiency module | Reduces building power draw. Interacts directly with grid balance. |
| Base Mk / Machine Mk | RESOLVED: yes, both increase power draw. See §8a. |
8a. Mk Levels and Power Draw (RESOLVED)¶
Both upgrade tracks increase power draw.
8a.1 Machine Mk¶
Higher Machine Mk is faster, processes more at a time, and unlocks additional recipes.
| Scaling | Effect |
|---|---|
| Output | Increases with Mk |
| Power draw | Increases with Mk, slightly faster than output |
Why superlinear draw: if draw scaled exactly with output, upgrading would be energy-neutral and purely free density. Making draw rise slightly faster means a Mk3 machine produces more per tile but costs more per unit produced. That has three good consequences:
- Efficiency modules become genuinely valuable rather than a marginal pick
- Power stays a real constraint on scaling, so growth has to be earned
- It feeds the pollution loop — more draw means more generation means more smog (
26_Pollution, Waste & Organic Systems Design§2)
Open items for this document are tracked in docs/open-items.md.
8a.2 Base Mk¶
Base Mk also draws power, scaling with port throughput.
Why it must cost something: moving more material faster is not free in reality, and mechanically, if Base Mk were free every player would max it on every building and the choice would disappear. The draw is small relative to Machine Mk, since the base is infrastructure rather than a process.
8a.3 Mk is a build requirement, not a research node¶
Mk levels are not researched. Recipes are.
The Mk level simply indicates what level a building is. A recipe unlocked by research may require a building at a given Mk to run it, exactly as a better assembler is a prerequisite rather than a research subject.
Research unlocks RECIPE
↓
Recipe requires a Mk-N building to run
↓
Player upgrades the building to Mk-N
This removes the path-choice concern. The research branch gates the recipe directly; the Mk requirement is only a material cost on top. No recipe can be stranded behind an Mk the player cannot reach, because Mk is obtainable regardless of research path.
Open items for this document are tracked in docs/open-items.md.
8a.4 How Mk upgrades are obtained¶
Not yet decided. Candidate approaches:
| Approach | Notes |
|---|---|
| Upgrade kits as craftable items | Apply to a placed building to raise it a level. Fits the existing Module Crafter. Because the base is universal, one Base Upgrade Kit works on any building. |
| Separate building recipes per Mk | Factorio-style (Assembling Machine 1/2/3). Conflicts with the same-mesh-plus-tabs approach, which assumes in-place upgrade. |
| In-place upgrade paid from carry inventory | No item, just a material cost and a Genesis task |
Recommendation: upgrade kits. With universal kits the whole system needs only four items — Base Mk2, Base Mk3, Machine Mk2, Machine Mk3 — rather than per-building recipes across forty-seven buildings.
8b. Transformers Use the Standard Base¶
Transformers are not special-cased. Like every other building they sit on the universal donut base. They simply have all ports set to DISABLED.
- Visually they read as flush cover plates on all sides, which correctly communicates "nothing connects here"
- Transformers consume no items and no fluids; they only transform voltage
- No exception to the universal base rule, and no new geometry required
This keeps the rule from 23_Port System Design intact: every building has a base, and port state describes what connects.
8c. Transmission Line Clearance¶
Transmission lines run at height. Whether they block depends on what is underneath.
| Building height | Effect |
|---|---|
| Below line clearance | Line passes overhead. No conflict. Belts, pipes and low buildings run freely underneath. |
| At or above line clearance | Blocks. The line cannot be routed through. |
This creates genuine routing decisions without making transmission hostile to factory layout, and it gives tall buildings a real spatial cost beyond footprint.
Open items for this document are tracked in docs/open-items.md.
RESOLVED: the clearance rule applies to horizontal transmission lines only. Power Pylons run vertically from surface to sky and are unaffected. See
Vertical Transport & Cross-Level Power§2.4. Open items for this document are tracked indocs/open-items.md. CONFIRMED: underground is unaffected. Conduits and Pylons are the only vertical power paths, and they run at distribution voltage. High-voltage transmission is horizontal only, so no underground transformers are needed.
8d. Shared Power Code with Outpost Mode (RESOLVED)¶
Share the solver. Do not share the content layer.
| Layer | Shared? | Reason |
|---|---|---|
| Grid solver — nodes, edges, load summing, loss calculation, staged shedding with hysteresis | Yes | Genuinely the same problem at both scales. Writing it twice guarantees divergent bugs. |
| Content — Outpost's breakers, per-storey distribution panels, building basements | No | Storey scale, not planet scale |
| Content — main game's pylons, CER, geothermal pools, planet types | No | Planet scale, not storey scale |
Deciding this before either is built is far cheaper than merging two implementations later.
Open items for this document are tracked in docs/open-items.md, area power.
9. The Usage Side¶
Generation and distribution are only half the system. This section sets what the factory does with the power once it arrives.
9.1 Mk scaling — the numbers behind §8a¶
§8a establishes that both tracks raise draw, and that Machine Mk draw rises slightly faster than output. These are the multipliers that implement it.
Machine Mk — applied to the building's base output and base draw:
| Level | Output × | Draw × | Draw per unit produced |
|---|---|---|---|
| Mk1 | 1.00 | 1.00 | 1.00 |
| Mk2 | 1.50 | 1.65 | 1.10 |
| Mk3 | 2.25 | 2.72 | 1.21 |
A Mk3 machine produces 2.25× as much on one footprint and pays 21% more energy per unit for it. That is the "slightly faster" of §8a.1, made concrete: enough to make Efficiency modules worth a slot, never enough to make upgrading a mistake.
Base Mk — applied as a surcharge on the machine's draw, since the base is infrastructure rather than process (§8a.2):
| Level | Draw surcharge |
|---|---|
| Base Mk1 | +0% |
| Base Mk2 | +5% |
| Base Mk3 | +12% |
A fully upgraded Mk3/Mk3 Smelter therefore draws 30 × 2.72 × 1.12 = 91 PU, against 30 PU at Mk1/Mk1. Tripling a Smelter's throughput triples its power bill and then some, which is what keeps power a constraint on scaling rather than a one-time cost.
9.2 Efficiency modules¶
Each Efficiency module reduces the building's draw by 15%, multiplicatively.
| Modules | Draw multiplier | Reduction |
|---|---|---|
| 1 | 0.85 | −15% |
| 2 | 0.72 | −28% |
| 3 | 0.61 | −39% |
| 6 | 0.38 | −62% |
Multiplicative stacking is the balance. It never reaches zero, diminishing returns are automatic, and no cap has to be invented and explained. A building running six Efficiency modules has spent every roof slot ([24_Module System Design](<./24_Module System Design.md>) §2.2) and does nothing else — the cost is opportunity, not a rule.
Against §9.1: one Efficiency module almost exactly cancels the per-unit energy penalty of a Mk3 machine - 1.21 falls to 1.03, against 1.00 at Mk1. That relationship is deliberate, and it is why the reduction is 15% rather than a rounder number. The player who upgrades and fits one module is back at Mk1 energy efficiency with Mk3 throughput, which is a satisfying place to arrive rather than a place to start. A second module takes them to 0.87, better than Mk1 ever was, at the cost of another slot.
9.3 Environmental building draw¶
Setting the two figures OI-101 was holding, sized against their role rather than invented:
| Building | Draw | Reasoning |
|---|---|---|
| Incinerator | 20 PU | Between a Mining Drill and a Refinery. Deliberate disposal should cost real power, since 00_Canonical Design Facts §7a makes it the alternative to open dumping. Partially offset by its own heat recovery |
| Air Scrubber | 12 PU | Cheaper than incineration, and continuous. Cleaning is meant to be affordable enough to run permanently, or nobody will |
Both feed the pollution loop in the intended direction: more draw means more generation means more smog, so cleaning up costs you some of the thing you are cleaning ([26_Pollution, Waste & Organic Systems Design](<./26_Pollution, Waste & Organic Systems Design.md>) §2, and the lossy-loop rule in 00_Canonical Design Facts §12b).
9.4 Priority, and what it does not do¶
The 1–5 priority scale is specified in [04_Factory & Resource System Design](<./04_Factory & Resource System Design.md>) -> Power Priority System and is consumed by §4a.6 as the shed ordering. Two points belong here:
- Priority orders shedding. It does not allocate power. There is no partial supply: a building runs at full draw or is shed. Fractional power would make every rate in the factory a moving target and every production figure unreadable.
- Priority is grid-local. A priority-1 building on a healthy grid is never shed to help a struggling grid, because grids are only linked by transmission or a rated conduit, never merged (§6).
The field does not exist on BuildingDefinition yet. That is OI-319.
9.5 Under-voltage is a distinct signal¶
Answering OI-086. 00_Canonical Design Facts §5 assigns amber to logistics faults and red to power, and the Style Bible makes rhythm the channel that separates states within a colour (07_Art Direction Style Bible §1.7b). Under-voltage is a power fault, so it is red — but it must not share a signal with deficit shedding, because the two have different cures:
| Signal | Cause | What the player should do |
|---|---|---|
| Red, slow pulse | Shed for grid deficit (§4a.3) | Build generation, or lower priority elsewhere |
| Red, double blink | Under-voltage at distance (§4a.4) | Transmission, a pole run, or a local generator |
| Red, solid | No grid connection at all | Connect it |
Three power states, one colour, three rhythms. A player reading a red perimeter closing inward (§3.5) sees double-blink and knows it is a distance problem before opening any panel; a scatter of slow-pulse buildings across the whole factory says the grid is simply short.
This is why §4a.1 keeps the two triggers separate. If deficit and under-voltage shared a state, the base ring would say "power problem" and the player would have to open the Power tab to learn which of two unrelated fixes applies. Separating them at the simulation level is what makes one glance sufficient.
10. Revision History¶
| Version | Date | Changes |
|---|---|---|
| 0.1 | 2026-08-25 | Initial draft. Three-tier model, loss mechanics, poles reintroduced, research-as-path-choice constraint. |
| 0.2 | 2026-08-29 | Brownout shedding fully specified (OI-005). §4a rewritten from a warning into a specification and renamed Brownout Shedding (RESOLVED). Separates the two failures the vault had been describing under one name - grid deficit (a quantity) and local undervoltage (a ratio) - as independent triggers with independent restoration. Establishes that hysteresis alone does not stop the flicker and that restoration must test the predicted post-restore state. Adds stage sizing, shed and restore ordering with tie-breaks, and the accumulator rules. §4b gains the eleven decided values with reasoning and the invariant a PowerTuning resource must assert. Raised OI-317, OI-318 and OI-319. |
| 0.3 | 2026-08-29 | End-to-end numeric pass: generation through to usage. New §1a Units and Scale (PU is a rate, PU·s is energy; the Coal Generator at 100 PU is the reference; two orthogonal knobs, generation_scale and fuel_density_scale). New §4c Distribution Reach, giving radius x load = 16 000 PU·tiles and separating connection from reach. §5.1 rewritten with real output and fuel figures for all nine sources, plus §5.1a fuel economics, §5.1b the solar curve and §5.1c the already-specified three. New §5.5 Accumulators. New §9 The Usage Side: Mk multipliers, Efficiency modules, environmental draw, priority, and the under-voltage signal. §4 renamed and confirmed as decided. §4b restructured into grouped tables. Closes OI-079, OI-082, OI-086, OI-101 and OI-104. |