Skip to content

Power System Design

Document Type: Design Document Version: 0.1 (Draft) Status: In Progress Last Updated: 2026-08-25 Vault destination: 01_Design Documents Amends: 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 Design describes 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 Design currently 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 < demand holds for deficit_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 d only when supply - demand >= d * restore_headroom_factor, held continuously for restore_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_threshold held for restore_dwell_ticks, and the predicted v with this building drawing again would stay at or above shutdown_threshold by the restore_voltage_headroom margin.

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 v is not decided here. That is OI-082. This section specifies what is done with v, not how v is 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:

  1. 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.
  2. 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_ticks window 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_threshold and restore_headroom_factor > shed_target_margin. Either equality reintroduces the oscillation in §4a. A PowerTuning resource should assert both on load rather than trusting whoever edits it next.

Recommend a single PowerTuning resource 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:

v = 1 - drop_coefficient * circuit_load_pu * distance_tiles
  • circuit_load_pu — total draw on the grid this tick
  • distance_tiles — path distance through the network to the nearest generator, not straight-line, and not to the largest generator
  • drop_coefficient0.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.

  1. Fuel burden — none, solid (belt), or fluid (pipe)
  2. Variability — constant, day/night cycle, or location-dependent
  3. Planet suitability — ties directly to the nine planet types and their seeded ratings
  4. 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:

  1. Efficiency modules become genuinely valuable rather than a marginal pick
  2. Power stays a real constraint on scaling, so growth has to be earned
  3. 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 in docs/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.