A complete, separate maglev rail network: its own ground track, elevated track, ramps, support pylons, signals, locomotive and wagons, built with dedicated rail planners. No electricity or fuel needed - trains draw power from onboard void generators - but everything is expensive to build, requiring refined concrete, steel, solar panels and circuits. Extremely fast, extremely strong acceleration, and the track is indestructible so biters simply path around it.
Mods introducing new content into the game.
Version: 1.8.1
Date: 2026-10-12
Graphics:
- New locomotive design: long aerodynamic nose with a swept windscreen
and low headlamp bar at the front, full-shaped rear with a rounded
flat end, dark gangway door and red tail lamps. Side windows run
along the body, solar roof and fairings behind the cab. The cyan
livery stripe still follows the locomotive colour.
- Because the locomotive is no longer the same at both ends it now has
64 frames over the full 360 degrees (the wagons stay symmetric, 32
frames over 180 degrees). Headlamps light only the nose.
Bugfixes:
- Pylons: track no longer floats above the supports. The pylon sprite
was drawn about 1.4 tiles too low (its base flange hung below the
support's footprint), so its top stopped short of the deck. It is now
anchored on the footprint, the shaft is taller (reaches up under the
deck) and the drawing box is extended to match.
- Pylons now cast a ground shadow that joins the track's shadow.
Version: 1.4.7
Date: 2026-10-02
Graphics:
- All placeholder and concept art replaced. Every track piece, the
ramp, the three train cars and every icon (plus the technology
icon and mod thumbnail) were rendered from 3D models.
- Track bed: sleek whitish concrete deck, two ribbed levitation
guide beams with a glowing cyan inner strip, a recessed solar-cell
strip down the middle, expansion joints and a cyan edge light.
Ground track sits on a low plinth; elevated track is a deep box
girder with a cyan underline. Every piece has a soft ground shadow
(elevated track casts the long vanilla-style shadow).
- Track geometry now follows the game's real rail geometry (curved-A
and curved-B are the engine's R=13 arcs, the half-diagonal is the
true 1:2 line, and the pieces were checked to join end to end in
all 8 directions, left and right turns), so the bed lines up with
the rails and with the pylons.
- East/west (and north/south, NE/SW, SE/NW) straight and half-
diagonal pieces now share one sprite each, exactly like vanilla,
instead of eight separate files: 4 sprites per type and variant.
- The ramp has real art for all four facings, with the climb baked
in (low ground end, elevated end lifted 3 tiles like the elevated
track it joins) and viaduct arches. Only the 4 cardinal facings
exist now; the 4 diagonal files were never drawable (the ramp
cannot be placed diagonally).
- Locomotive, cargo wagon and fluid wagon: 32 orientation frames
instead of 8, so cars turn smoothly through curves instead of
snapping in 45-degree steps. Each car has a shadow, a night-time
glow layer and a hover-field glow; the locomotive's cyan livery
stripe follows the locomotive colour set in the train GUI and its
headlamps use their own light sprites.
- Removed the unused graphics/concept folder.
Bugfixes:
- Ramp art was shifted up by 3 tiles by mistake (the elevated-track
offset was applied to it as well). The ramp now carries its own
elevation in the art and is unshifted.
- Half-diagonal art was a 22.5-degree line; the real piece is a 1:2
slope (26.57 degrees) and its direction-to-lean mapping was wrong.
- Removed the duplicated 8-frame `sloped` train sheets, which made
the engine index frames that did not belong to the orientation.
Cars on a ramp now use their normal frames.
- Ramp drawing box extended so its raised end is not culled at the
screen edge.
Reviewed, found correct -- no change made:
- All recipes, technology, stats, control.lua and locale. A
prototype-by-prototype diff of every non-graphics field against
the previous data.lua shows no differences.
Bugfixes:
- Fixed the ramp: same undersized-canvas bug as the four piece types
fixed in 1.4.5, but deferred at the time because the ramp's real
length (~15.6 tiles, by far the longest single piece in the whole
family) needed its own dedicated size rather than inheriting
768x768. Now 1024x1024 at scale=0.5, with new art redrawn to
actually fill that length, plus a soft brightness gradient along
the piece as a placeholder hint at the ground-to-elevated climb
(an aesthetic choice, not a claim about which end vanilla itself
treats as "up" -- unverified either way).
Reviewed, found already correct -- no change made:
- control.lua: event-driven (on_built_entity / on_robot_built_entity
/ script_raised_built / script_raised_revive, all pre-filtered to
only the 7 train-car names that matter), not a per-tick poller --
no UPS concerns. One edge case worth knowing about, not fixed:
nearby_rail_networks() checks a 2-tile radius around a newly
built train car for nearby rail; a train positioned far enough
along an unusually long curve piece from that piece's own
position anchor could in principle go undetected. Low-severity
(the failure mode is "network separation silently isn't
enforced for that one build," not an incorrect refund) and
hasn't been reported as an actual problem, so left alone rather
than risk a speculative fix.
- Locomotive/cargo-wagon/fluid-wagon art and icons: dimensions
cross-checked against data.lua's declarations (2048x256 8-frame
sheets = 256x256 per frame, matching exactly) -- the gap-between-
cars bug mentioned in this file's own comments was already fixed
before this session.
- locale/en/locale.cfg: cross-referenced against every "maglev-*"
name data.lua actually creates -- item-name, item-description,
entity-name, recipe-name, technology-name/description all
present, nothing found displaying as a raw internal name.
- Recipes, technology prerequisites/cost, icons (all 64x64,
matching their icon_size declarations): read through fully,
nothing inconsistent found.
Investigated, inconclusive -- deliberately left unchanged:
- The support pylon's graphics_set.structure is still a flat
128x128 RotatedSprite with no `scale` set, the same pattern that
turned out to be wrong for every rail piece and the ramp. Tried
to confirm vanilla's real elevated-rail-pylon sprite dimensions
the same way the rail fix was confirmed (byte-for-byte against
Wube's own source) and couldn't get a clean number -- vanilla
loads it through a util.sprite_load() helper call whose expansion
wasn't accessible from here, rather than inline width/height like
the rail pictures were. Given the one prior render_layers retry
in this same file already shows what shipping an unconfirmed
guess on this codebase costs, this is flagged rather than
guessed at. If the pylon looks visibly undersized or mispositioned
in-game, that's the next concrete thing to fix, now with a known
starting point (RailSupportGraphicsSet.structure) rather than a
blind search.
Version: 1.4.6
Date: 2026-10-02
Bugfixes:
- Fixed elevated track rendering BELOW decoratives (trees etc.) that
it was built over. This is a retry of a fix a previous session
attempted and reverted after it reportedly broke elevated track
rendering/placing -- that attempt was never root-caused, so this
one is deliberately narrower and the reasoning is written out in
full in the code comment above rail_pictures() in data.lua.
Summary: with render_layers left at {} (all-default), EVERY
field -- including "metal", the only one this mod's simplified
art actually uses -- falls back to the GROUND rail convention
(rail-metal, numeric layer 100) even for the ELEVATED clones,
which sits below ordinary decoratives (~121-130). Elevated rails
are specifically meant to be buildable straight over trees/rocks/
buildings without clearing them first, so this was a near-
guaranteed visual problem, not an edge case. Elevated pieces now
explicitly set render_layers.metal = "elevated-rail-metal"
(numeric layer 137), matching vanilla's own real convention
exactly; ground pieces are untouched, since rail-metal (100) was
already correct for them. front_end/back_end were deliberately
NOT set (confirmed, this time, that RailPieceLayers has no
front_end/back_end sprite fields at all -- only
segment_visualisation_ending_front/back, which this mod's single-
"metals"-array approach never populates -- so those two
render_layers entries are guaranteed no-ops regardless of value).
Known limitations:
- This is a SECOND attempt at a fix that failed once before and was
never root-caused, so please test specifically: does the mod
still load, do elevated pieces still place normally, and does the
visual stacking actually look right now. Any one of those failing
differently from the other two would be a genuinely useful signal
for a next attempt.
- Support pylons were deliberately not touched this pass -- their
own render_layer is still whatever vanilla's rail-support
prototype defaults to, unchanged. If columns still visually
conflict with track after this fix, that's a separate, more
specific signal worth reporting on its own; this pass only had
strong enough evidence to act on the track's own layer.
- Still built and checked without a running copy of Factorio -- the
exact numeric render layer values (rail-metal=100, elevated-rail-
metal=137, ordinary objects ~121-130, elevated-object~141-143)
come from a community-maintained TypeScript type-definitions
package (typed-factorio) cross-checked against vanilla's own
elevated_rail_render_layers table in the real factorio-data
source, not from loading the game itself.
Version: 1.4.5
Date: 2026-10-01
Bugfixes:
- Fixed the actual cause of "rail connections on curves look janky"
(reported after an in-game check -- the thing 1.4.4's own
changelog flagged as unverified). It was not the connection
points or the curve's bend direction (both correct -- curved-rail-
a/b's collision geometry comes entirely from the untouched,
deep-copied vanilla prototype, never touched by this mod). It was
the art's declared canvas size: every piece type -- straight,
half-diagonal, curved-rail-a, curved-rail-b, and the ramp -- was
declared as a flat 256x256 sprite with no `scale` field (silently
defaulting to 1.0). Checked directly against vanilla's own source
(factorio-data/elevated-rails/prototypes/entity/elevated-rail-
pictures.lua on Wube's public GitHub repo -- the real
elevated_rail_pictures() function the base game itself uses to
build these same prototype types): every one of these pieces is
actually a 768x768 frame at scale=0.5. 256px at scale 1.0 covers
only 2/3 the real-world distance that 768px at scale 0.5 does --
barely noticeable on a straight piece, but a curve's art has to
visually span a bending footprint several tiles across, so the
undersized canvas is what actually produced the gap/misalignment:
the curve art was both too small and positioned nowhere near
where the (always-correct) connection points actually sit.
straight-rail, half-diagonal-rail, curved-rail-a and curved-rail-b
now declare the correct 768x768/scale=0.5, for both the ground and
elevated versions of each.
Graphics:
- All four fixed piece types' art regenerated from scratch at the
corrected 768x768 canvas: properly centered, properly proportioned,
same glowing twin-rail + tie-mark style as before. curved-rail-a
and curved-rail-b are now genuine circular-arc segments (checked
against a Factorio forum thread with real engine internals:
curved-rail-a is a true sin/cos arc, radius 13 tiles) instead of
the earlier small, off-center, sharply-bent fragments -- a gentle,
elegant sweep rather than a tight hook, with curved-rail-b drawn
slightly tighter than curved-rail-a so the two remain visually
distinguishable.
- The ramp was deliberately NOT touched this pass -- still 256,
still no scale, still as undersized as before. Vanilla's real
rail-ramp is a different, far more complex render pipeline
(ramp_render_layers, ~15 tiles long, 4 cardinal directions only,
not the simple 8-direction system this mod's rail_pictures()
approximates for the other four types) and needs its own
dedicated pass rather than inheriting this fix's parameters
unexamined. The reported issue was specifically about curves, so
this stayed in scope rather than risk a rushed, unverified ramp
change on top of everything else.
Known limitations (same honesty as 1.4.4's own list):
- Still built and checked without a running copy of Factorio: the
canvas/scale numbers are confirmed byte-for-byte against vanilla's
own published source, and a standalone script actually executes
data.lua's rail-cloning logic end to end, checks every direction
of every affected piece for the right width/height/scale, AND
reads each referenced PNG's real header to confirm the file on
disk truly is 768x768 (not just that data.lua claims it is) -- but
none of that is a substitute for an actual in-game look at how the
new curve art lines up along a real constructed curve.
- The curve SHAPE itself (exact sweep angle, exact radius) is a
good-faith approximation from published engine internals, not a
pixel-exact reproduction of Wube's own (proprietary, not publicly
documented) curve spline -- it should look right, but "looks
right" still needs an in-game confirmation.
- The ramp's own undersized-canvas problem (see above) is still
open.
Version: 1.4.4
Date: 2026-09-25
Bugfixes:
- Fixed large visible gaps between locomotives and wagons. The
rolling-stock sprite frame was 128x128px -- a 4x4 tile canvas at
default scale, smaller than a vanilla locomotive's own 5.2-tile
collision box -- so the train art had no room to reach vanilla's
joint_distance/connection_distance (4 / 3 tiles, unchanged here)
and was rendered shrunk-and-padded inside the frame. The frame is
now 256x256 (8x8 tiles) and the art fills it out to a proper
vanilla-scale length (locomotive ~7.2 tiles, wagons ~6.6 tiles,
slender ~1.6 tiles wide), closing the gap between cars down to a
small coupler-sized overlap instead of open track.
- Fixed curved-rail-a having completely blank (fully transparent)
artwork for 4 of its 8 directions (northeast/southeast/southwest/
northwest) -- those curves rendered as nothing at all.
- Fixed straight-rail's southeast/northwest frames being duplicates
of the northeast/southwest frames instead of mirrored the other
way, which made some straight track visibly lean the wrong way.
- Fixed curved-rail-a/curved-rail-b/half-diagonal-rail having
inconsistent, not-actually-rotated art across their 8 directions.
- Fixed curves bending the opposite way from correct after the
above rebuild: the 8 directions were a mathematically consistent
rotation series (nothing missing or duplicated), but the bend
direction chosen for the shape itself was backwards, uniformly,
across all 8. Mirrored the canonical curve shape left-right
before deriving the 8 rotations, which flips the bend direction
consistently without touching anything else.
Graphics:
- All rail placeholder art (straight, half-diagonal, curved-rail-a,
curved-rail-b, ramp) regenerated from scratch as one canonical
"north" image per piece, with the other 7 directions derived by
exact 45-degree rotation (mirrored first for the two curve types,
see above) -- a structural guarantee against any direction being
missing or mismatched, not just a visual touch-up. Style follows
the mod's own graphics/concept/ art (glowing twin-rail + tie-mark
language) instead of the shipped sprites' mixed wireframe/photo
look.
- Locomotive/cargo-wagon/fluid-wagon art replaced with a unified
flat schematic design (was a mix of 3 stock-photo angles + 5 empty
outline placeholders). All 8 directions are now real, elongated,
vanilla-proportioned, gap-closing art derived the same
rotation-safe way as the rail art, in a steel-and-cyan livery
matching the rest of the set.
Info:
- Version scheme bumped to 1.4.4.
Known issue / deferred:
- An earlier pass in this same version set render_layers.metal to
"elevated-rail-metal" for elevated track (and the ramp), to stop
trees/decoratives drawing over the track. That value is schema-
valid and matches vanilla's own elevated_rail_render_layers.metal
exactly, but elevated track stopped placing/rendering correctly
with it in testing, for a reason not yet isolated -- static
analysis of the prototype docs and vanilla source didn't turn up
why, and this can only really be diagnosed with an in-game round
trip. render_layers has been reverted to {} (the original,
known-working default) so building works again; trees/
decoratives drawing over elevated track is therefore still
present and unfixed pending that diagnosis.
Notes:
- The art is now final-quality rendered art (see Graphics above).
Two things still can only be confirmed by running the game: the
exact curve/ramp connection alignment (the geometry follows the
engine's own rail geometry and was verified offline by chaining
pieces end to end), and the elevated-track render_layers setting
(render_layers.metal = "elevated-rail-metal", unchanged from the
previous build; if elevated track ever misbehaves, set
ELEVATED_RENDER_LAYERS to {} in data.lua).