# Fire economy: a steam...

About this model

# Fire economy: a steam locomotive worked by one player

## What the game is, in one paragraph

Mobile management game. The player is a single crew member walking up and down a train, one node at a time, doing chores with two inputs (Up / Down) at whichever node they stand at. The locomotive at the front is a resource chain they keep running: coal → fire → pressure → the notch the engine delivers. Every second spent keeping the engine going is a second not spent on the passenger and cargo cars further back. **The design goal of the fire economy is to set how much of each minute the engine takes from the player**, and to make driving hard cost more attention than driving gently. Nothing in the engine can fail outright. Neglect only lowers what the engine can deliver (a "ceiling"), and work at the tender can always build it back up.

## Units and scales

- **Notch scale (0–3, forward).** The throttle, the fire band and the pressure band all use the same 0–3 scale. The throttle also has reverse (−1, −2), which isn't needed here. - **Bands.** Most pools run 0–100. Their band is read off cut points at 25 / 50 / 75 % (band 0 / 1 / 2 / 3). - **Time.** Continuous, ticked every frame at `dt`. A step of 0.1 s or less is fine for modelling.

## Pools (stocks)

| Pool | Capacity | Notes | |---|---|---| | Tender coal | 144 units of coal | Stock. Refilled only at stations. Bands: Stocked ≥40 %, Working ≥15 %, Dregs 0, Reserve =0 | | Grate coal | 6 stokes | A count: coal on the shovel, waiting to be thrown in | | Firebox bed | 100 bed-units | Coal that is actually burning | | Ash pan | 100 ash-units | Bands: Clean 25, Light 25–49, Heavy 50–74, Choked ≥75 | | Heat | 100 | Floor of 5 (the fire is "banked" there and never goes out). Fire band = heat band | | Pressure | 100 | Pressure band = pressure band cut points | | Boiler water | 100 | Caps pressure: 20 % → band 0 max, 20 % → 1, 40 % → 2, 60 % → 3 | | Injector reservoir | 40 | Header tank between the pump and the boiler/brake | | Brake tank | 100 | The other place the injector can send water (descents) | | Tender water | 400 | Stock, refilled at stations, same four bands as coal |

## Player actions (sources / transfers, each costs time)

| Action | Node | Duration | Effect | |---|---|---|---| | Charge | Tender (coal) | 0.5 s | Draws min(6, tender coal) units from the tender. Puts stokes on the grate by the tender's band *before* the draw: Stocked 6 · Working 3 · Dregs 2 · Reserve 1 (the reserve always gives at least 1, forever) | | Dump ash | Tender (coal) | 0.4 s | Removes 10 ash from the pan | | Open / shut door | Firebox | 0.3 s each | Stoking needs the door open. While it's open, heat drains a flat 4.0/s | | Stoke | Firebox | 0.8 s | 1 grate stoke → +20 bed | | Prime + stroke | Tender (water) | 0.35 s + 0.35 s | Pump: moves water from tender water to the reservoir. The yield goes up the more the pump is primed (2.0 / 4.8 / 8.4 / 12.8 / 18.0 per stroke at prime levels 1–5). The prime level drops by 0.5/s whatever the player is doing | | Injector on/off, destination | Injector | 0.2 s | Moves the reservoir into the boiler OR the brake tank at a fixed 0.66/s | | Throttle notch | Cab | 0.15 s | Sets the notch the driver asks for (0–3) |

**Walking.** Every node-to-node edge takes 0.6 s. The train runs Cab 0, Brake 1, Injector 2, Firebox 3, Coupling 4, Tender-coal 5, Tender-water 6. Duty is measured from the cab: a visit costs 2 × edges × 0.6 s plus the action times. So a trip to the coal tender costs 6.0 s of walking before any work is done.

## Converters (automatic, every tick, in this order)

1. **Burn:** `burn = 0.02 × bed × pan_headroom` bed-units/s, taken out of the bed. `pan_headroom = clamp((100 − ash) / 25, 0, 1)`, so burning slows over the last quarter of the pan and stops when it's full. 2. **Heat gain** = `burn × 1.1`. **Ash gain** = `burn × 0.20`. 3. **Heat decay** = `0.0167 × heat × ash_multiplier + door_drain`, clamped at the floor of 5. ash_multiplier by ash band: Clean 1.0 · Light 2.2 · Heavy 4.4 · Choked 4.4. 4. **Fire band** = band(heat). 5. **Injector:** reservoir → boiler or brake tank at 0.66/s, if the feed is on. Water fed into a full tank spills and is lost. 6. **Pressure ceiling** = f(boiler water), from the table above. 7. **Pressure:** `dP/dt = 0.55 × (fire band − delivered notch)`, clamped to the ceiling. The **safety valve** opens above 92: it vents 3.0 pressure/s and 0.8 boiler water/s. 8. **Pressure band** = band(pressure). 9. **Delivered notch** = min(throttle notch, pressure band). This is what actually moves the train. 10. **Boiler drain** = `0.30 × delivered notch` water/s. 11. **Brake tank drain** = `0.50 × brake notch`/s (on descents only).

**Disturbance (optional second layer).** Rough running moves the same two pools in opposite directions. It spills grate coal (0.25 / 0.75 / 1.5 stokes/s by magnitude) and shakes ash out of the pan (1 / 3 / 6 ash/s by magnitude). Hard driving therefore shifts the coal-tender visits from dumping towards charging.

## Equilibria the design depends on (these are tests, not inputs)

- **Ash ceiling.** With the bed held at 100, the fire settles in band 3 on a clean pan, band 2 on light, band 1 on heavy, and at the banked floor when choked. (Heat gain 2.2/s; equilibrium heat = 2.2 / (0.0167 × multiplier) → 132 capped to 100, 60, 30, then the floor.) - **Injector vs notch.** With the feed on the boiler, the boiler fills at notches 0, 1 and 2 (+0.66, +0.36, +0.06/s) and falls slowly at notch 3 (−0.24/s). There is deliberately no notch where it balances. - **Open door.** No equilibrium at any bed depth: a 4.0/s drain against a maximum 2.2/s gain. A door left open always runs the fire down to the floor. - **Headline figure 1:** *seconds of one notch of overdraw from a full boiler* = 25 / 0.55 ≈ **45 s**. This sets how long a climb can be. - **Headline figure 2:** *seconds of full brake before the brake ceiling drops* = 25 / (0.5 × 4) = **12.5 s**. This sets how long a descent can be.

## The driving profiles to simulate

Hold each profile steady. The player does exactly the chores needed to keep it there and nothing more.

| Profile | Throttle | Brake | Feed | |---|---|---|---| | Crawl, level | 1 | off | boiler | | Cruise, level | 2 | off | boiler | | Express, level | 3 | off | boiler | | Climb (needs one more notch than the fire gives) | 3, fire held at 2 | off | boiler | | Descent, held | 0 | 2 | brake | | Station stop | 0 | 2 | off |

## What I want out of the model

Report results in player units, not raw rates:

- **Autonomy per pool:** seconds until the pool needs the player. - **Visits per minute** to each node (firebox, coal tender, water tender, injector). - **Engine duty:** seconds per minute spent walking and doing engine chores. - **Free time** = 60 − duty, in seconds per minute.

**Targets:**

- Free time is never negative in any profile. - Free time is at least 20 s/min in the three level profiles. - Crawling should cost much less attention than express. Ash should be almost free at notch 1 and a real tax at notch 3. - A full tender of coal and water should last a leg of a few minutes at cruise, with more trips but no stranding once it's in the dregs.

**Questions I'd like the model to help answer:**

1. Are `burn_k`, `heat_per_bed`, `decay_k` and the ash multipliers a good set, or is there a simpler set that still reproduces the ash-ceiling table? 2. What capacities (grate 6, bed 100, pan 100, reservoir 40) give the free-time targets above without making any chore feel trivial? 3. How sensitive is free time to the walk time (0.6 s per edge) compared with the action durations? 4. How long does a full tender (144 coal, 400 water) last in each profile? 5. How long does it take to rebuild from everything empty (pan choked, bed empty, boiler empty, tender on reserve) to delivering notch 3?

"# Fire economy: a steam..." is a public Machinations diagram shared in the Community by Andy Michael, with 47 components.

It was created in October 2026 and last edited in October 2026.

Open the diagram in the Machinations app and press Play to watch the resources move, adjust its values to test how the system responds, or remix it to make an editable copy in My diagrams.