A steam locomotive fuelled by real coal, wood or solid fuel plus water pumped straight into its tank. Fuel and water are consumed gradually to build up steam pressure over time (fire, steam and water gauges in a boiler panel on the locomotive's window); pressure caps your top speed, and it decays if you let the fire or the water run dry. No water on board means no pressure, no matter how much fuel is loaded. Coal and solid fuel give the full speed ceiling; wood is slower but cleaner. Slower than diesel overall. Third step of the steam -> diesel -> electric train progression ladder. Locomotive art from Steam Locomotive (steamtrain-redux-redux) by IonShield (Unlicense/public domain). Framework based on fluidTrains by ksmonkey123 (MIT).
Mods introducing new content into the game.
Version: 0.5.4
Date: 2026-07-17
Changes:
- Boiler panel now sits flush against the right edge of the train window (which the game
always docks to the left of the screen), so it reads as part of the locomotive GUI. True
attachment via the engine's relative-GUI anchor floats loose for train windows -- the same
issue RET hit, which it solved via the equipment-grid window that steam locomotives don't
have -- so the panel is placed by geometry instead.
- Title updated to "(2.0 + SE)" following in-game compatibility confirmation with Space
Exploration, Combat Mechanics Overhaul, RET and Diesel Locomotive Continued.
Note: control-stage only -- a save reload is enough.
Version: 0.5.3
Date: 2026-07-17
Changes:
- Boiler panel is now pinned to the right edge of the screen (adapts to display resolution and
UI scale) instead of the loose-floating relative anchor. The entity-description sidebar it
would ideally live in is vanilla GUI and sealed to mods.
- The steam gauge now reads in psi: 300 psi = full pressure, and the bar turns green in the
200-300 psi "working pressure" band (real late-era passenger boiler figures).
Note: control-stage only -- a save reload is enough.
Version: 0.5.2
Date: 2026-07-17
Crash fix:
- Fixed: inserting rocket/nuclear fuel for the second time crashed ("count must be positive")
-- the dare handler reused the refund helper with a zero count just to find the responsible
player. Player-finding is its own function now, and the refund helper guards zero counts.
Note: control-stage only -- a save reload is enough.
Version: 0.5.1
Date: 2026-07-17
Crash fix:
- Fixed: opening the steam locomotive GUI crashed ("Invalid name 'value': LuaGuiElement
contains a property or method with the same name") -- a boiler-panel label was named after a
built-in GUI property. Renamed. The crash location confirms the panel anchor itself works.
Note: control-stage only -- a save reload is enough.
Version: 0.5.0
Date: 2026-07-17
Major Changes:
- Full boiler simulation (Lucas's design): fuel heats the FIRE (climbs in ~10s, dies in ~20s),
a hot enough fire (50%+) boils water into STEAM pressure, and pressure sets your top speed.
WATER now drains realistically: a small standing boil-off while the boiler is hot (~9 minutes
per full tank parked) plus a draw that scales with speed (~4-5 minutes at full tilt) --
replacing the old flat drain.
- New boiler panel docked to the locomotive's own window: fire (orange), steam (grey) and
water (blue) bars with live values. The floating text readout is gone. (The panel cannot sit
inside the vanilla fuel section itself -- entity GUIs are sealed to mods -- docking to the
window edge is the engine's maximum.)
- Daredevil fuels: rocket and nuclear fuel can't be hidden from the fuel tooltips (they share
vanilla's chemical category), so instead... the first attempt on a save is refunded with a
warning. The second attempt is honoured. You were warned.
Bugfixes:
- Squeak, final form: v0.4.0 still ground the brakes during the seconds the LAST fuel item kept
burning after the slot emptied (slow creep + rapid brake stutter, wheels desynced from the
body). The speed cap now applies only while the fire is lit AND water is present -- during
any runout the train simply coasts, and the last shovelful burns out freely.
Note: control-stage only -- no prototype changes. Updated descriptions appear after the next
full game launch.
Version: 0.4.0
Date: 2026-07-16
Major Changes:
- The pressure gauge is now a floating readout ("Steam 42%") above the locomotive, visible
whenever pressure is above zero. The slot-based gauge is gone for good: Factorio 2.0 fuel
inventories silently reject items the burner can't burn (which is why the v0.3.1 gauge slot
showed empty), and making the gauge burnable again would bring back engine phantom burns.
- The burner is a single ordinary fuel slot -- the confusing second window is gone.
- Solid fuel is now accepted alongside coal and wood: same speed ceiling as coal, three times
the burn time per item (12MJ vs 4MJ), plus vanilla's solid-fuel acceleration bonus. It
arrives via the oil tree, keeping steam relevant into the mid-game without threatening
diesel's overall edge. Rocket fuel is still rejected.
Bugfixes:
- Squeaky-brakes fix (root cause, third attempt lucky): the per-tick speed clamp kept
rewriting train.speed for the entire ~30-second pressure decay while a train coasted after
running out of fuel or water -- a continuous scripted braking grind. The clamp now only
applies while the engine actually has combustion energy; a powerless train can't accelerate
past the cap anyway, so friction does the slowing with no scripted speed writes at all.
- All temporary "[steamTrains DEBUG]" chat prints removed (alerts and mining refunds were
verified working in the v0.3.1 round; the map/GUI alert icons remain).
Note: PROTOTYPE changes (burner size, gauge item/category removed) -- FULL GAME RESTART
required. Leftover gauge items in old saves purge themselves on load.
Version: 0.3.1
Date: 2026-07-16
Bugfixes (from first v0.3.0 playtest):
- Fixed: the dry-boiler squeak survived v0.3.0 -- the engine was igniting the GAUGE items in
slot 2 (they still carried a burner-valid fuel category), one 1J phantom burn per tick under
a held movement key. The gauge's category is no longer a burner fuel category at all, so the
engine can never consider it as fuel. The pressure readout is still written by script
(set_stack forces slot contents regardless of categories), with a loud one-time debug print
if that write ever fails.
- Added a slot-2 safety net: any non-gauge item found in the gauge slot is moved to the fuel
slot (if free) or handed back to a player.
Debug (TEMPORARY, will be removed once verified):
- Chat prints on alert state changes, on mining-buffer contents, and on rake-out stash refunds,
to pin down the reported "no water alert not visible" and "mining refunded nothing" issues.
Note: PROTOTYPE change (burner fuel categories) -- FULL GAME RESTART required. The invisible
raked-out fuel while the boiler is dry is by design ("the fire is raked out"); the vanilla
flashing no-fuel icon in that state is expected -- the firebox really is empty. Fuel reappears
the moment water is pumped in.
Version: 0.3.0
Date: 2026-07-16
Major Changes:
- Water is no longer an item in the burner at all. It lives purely in the framework's tank
(Fluid_Trains_Continued 2.0.2, new fluid_in_burner mode) and persists while the train moves.
This fixes the root cause of a whole class of v0.2.x bugs: the ENGINE could pick the fake 1J
water item (and the gauge item) as fuel -- slot filters only restrict players and inserters,
never the engine -- causing phantom burns, "has fuel" with only water, and the residual
stutter/squeak.
- Burner is now 2 slots: slot 1 real coal/wood (burned natively), slot 2 the pressure gauge.
- Combustion gate: with no water the fire dies and slot-1 fuel is "raked out" into internal
storage, so the engine is genuinely powerless -- pressing W does nothing (no squeak, no fuel
wasted, no speed fights). The fuel pops straight back into the slot the moment water returns,
and is refunded on mining/destruction.
- Removed the v0.2.1/0.2.2 rider-throttle override entirely: it re-created the stuck-W bug
(scripted riding_state sticks until the player re-presses a key). The pressure speed cap is
now a simple direct clamp only.
Minor Changes:
- Rejected fuels (solid/rocket fuel share the chemical category) are handed back to the player
with the GUI open or the nearest player, instead of being spilled on the ground.
- "No water"/"No fuel" alerts are re-asserted every ~10 seconds and shown to players who join
mid-game (they were previously only set at the moment the state changed).
- The hidden wheel-animation entity is now explicitly non-selectable, non-blueprintable and
non-deconstructable.
Note: PROTOTYPE changes this round (burner layout) -- a FULL GAME RESTART is required, not just a
save reload. Requires Fluid_Trains_Continued 2.0.2. Any water in an old save's boiler slot is
vented on upgrade (at most one tank); pump it back in once.
Version: 0.2.2
Date: 2026-07-16
Crash fix:
- Fixed: v0.2.1's rider-throttle fix crashed instantly on any train speed change
("LuaTrain :: riding_state is read only"). Checked the actual Factorio 2.0.28
API docs rather than relying on secondhand summaries: LuaTrain's own
riding_state is read-only; the writable one lives on the PLAYER (or any car
entity), described as "current riding state of this car, or of the car this
player is riding in". The throttle override now writes player.riding_state
for whichever connected player is riding somewhere in the train, instead of
train.riding_state. Same coast-not-brake behaviour as intended in v0.2.1,
just pointed at the right object this time.
Note: control-stage only, no prototype changes -- a save reload is enough, no
full restart needed for this round.
Version: 0.2.1
Date: 2026-07-16
Bugfixes (from first v0.2.0 playtest):
- Fixed: coal/wood burned far too fast. The soft speed clamp was only resetting
train.speed AFTER the engine had already drawn full accelerate-power trying to
reach the locomotive's much higher physical top speed, every single tick. Now
train.riding_state is coasted (not braked) the instant speed reaches the current
pressure cap while the rider is still holding the accelerator, so the engine
stops requesting power in the first place instead of wasting it and getting
reset. Only applies while a player is actually riding (confirmed against the
Factorio API/forums: there is no riding_state to override for a driverless/
automatic train); the direct speed clamp remains as a backstop for those.
- Fixed: the same root cause was still causing the reported stutter/squeak when
holding the movement key with no fuel (pressure/cap = 0) -- with the throttle
coasted instead of re-applied every tick, the train never actually starts
moving in that case, so there's nothing to snap back.
- Fixed: the locomotive still looked "fuelled" when it only had water and no
coal/wood -- the vanilla out-of-fuel indicator looks at the whole 3-slot
burner and stayed satisfied as long as any slot had anything in it. Replaced
with our own two-state on-map alert: a water-drop icon when there's no water
(checked first -- no water means no pressure regardless of fuel), a coal icon
when there's water but no real fuel loaded or burning.
- Fixed: mining the locomotive dropped its unspent coal/wood on the ground
(which could then be lost to decay/pollution) instead of going to the mining
player's inventory. The framework's own pre-mine handler wipes the whole
burner before mining completes on every single mine, so our refund fallback
was firing every time -- it now inserts straight into the mining player's
inventory, only spilling to the ground as overflow if their inventory is full.
Note: control-stage only, no prototype changes -- a save reload is enough, no
full restart needed for this round.
Version: 0.2.0
Date: 2026-07-16
Major redesign (per playtesting feedback -- the v0.1.x model never felt right):
- Removed the entire fake "steam charge" item mechanic. Coal/wood now sit directly
in the burner's fuel slot as REAL items and are burned natively by the vanilla
engine -- no more instant one-shot conversion of a whole stack into a charge item,
no more lump-sum water drain the moment fuel converted, no more special-cased
refund logic for mining/dragging (ordinary vanilla behaviour just works now, since
there's nothing fake in that slot any more).
- New continuous "pressure" system: a 0-100 value per locomotive rises gradually
while both water and fuel are present, and decays gradually once either runs out.
Your speed is capped to a fraction of the ceiling equal to your current pressure
percentage -- fuel and water are properly consumed over time to sustain it, not
spent in one shot.
- New third fuel slot: a locked, always-visible "steam gauge" item whose stack count
IS the current pressure percentage (0-100) -- pure read-out, never player-editable.
The native red burner bar is still meaningful: it's the vanilla engine genuinely
burning your real fuel.
- Removed the old hard train.speed=0 safety net (it caused the same stuttering/
squeaking as a past Diesel Locomotive issue by fighting the player's held-down
throttle every tick). Replaced with a continuous soft cap that only trims speed
when it exceeds the current pressure-scaled ceiling -- never forces a hard stop.
- When water runs out, native combustion is explicitly paused (not wasted): real
fuel already loaded is preserved rather than burned for nothing.
- Water is now spent gradually while actively stoked, not in a lump per fuel stack.
Note: this version changes prototype-level data (fuel_inventory_size, fuel_categories,
item/category definitions) -- a full game restart is required, a save reload is not
enough.
Version: 0.1.2
Date: 2026-07-16
Bugfixes:
- Fixed: fake steam-charge items were deleted with zero refund whenever they left
the burner (drag to inventory, mining) -- only unconverted raw reserve material
was ever refunded before. Every removal path now converts the fake charge back
into the real coal/wood it represents instead of destroying it.
- Fixed: the framework's own pre-mine handler wipes a registered locomotive's
entire burner inventory (both slots) before our own mining handlers run, which
could destroy a live, unspent charge item with no refund. A per-tick snapshot
(independent of the burner's live contents) now survives that wipe.
Balance:
- max_power halved to 300kW (vanilla locomotive is 600kW) for noticeably slower
acceleration, on top of the existing lower speed ceiling. Placeholder, easy to
retune.
Safety net:
- Added a hard train.speed=0 enforcement whenever no charge is present in the
fuel slot, regardless of what the vanilla engine's fuel selection does
internally with the near-worthless water bookkeeping item.
Version: 0.1.1
Date: 2026-07-16
Bugfixes:
- Fixed: coal would power the train with zero water once a different fuel type
(e.g. wood) was already queued in the hidden reserve -- the conversion logic
returned early and left the coal sitting in the burner as ordinary valid fuel,
which the vanilla engine burned directly. Now any fuel-type switch spills the
old reserve back onto the ground and picks up the new fuel properly.
- Fixed: solid fuel and rocket fuel were technically acceptable in the fuel slot
(they share vanilla's "chemical" category with coal/wood). Anything that isn't
literally coal or wood is now spilled straight back rather than left to burn.
- Fixed: /steamTrains-probe crashed on locomotives with no active fuel due to an
unsafe string concatenation reading currently_burning; rewritten defensively.
- Slot 1 (water) is now filter-locked to the framework's internal item, so it
can no longer accept anything else even manually -- also fixes the "both
slots look like real fuel inputs" confusion, since slot 1 now visibly behaves
differently from slot 2.
Version: 0.1.0
Date: 2026-07-15
Info:
- Initial version. Steam locomotive: real coal/wood burner slot + water via the
Fluid_Trains_Continued framework (pump/proxy tank/tender). Script converts burnt
item + available water into hidden steam-charge fuel items (coal = full speed and
strong acceleration, wood = ~0.8 speed, weaker, less energy, cleaner burning).
No water on board means no steam regardless of fuel loaded.
- Locomotive graphics and animated-wheel technique from "Steam Locomotive"
(steamtrain-redux-redux) by IonShield, The Unlicense (public domain).
- Balance referenced against "Steam Lokomotive" (dr-br-24) by GoTo_53 (MIT) --
stats only, no code or art reused.
- Unlocked at railway technology (additive; vanilla locomotive untouched -- the
startup-setting replacement is a later phase).
- Not yet in-game tested.