Maglev NetWorK


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.

Content
a month ago
2.1
49
Transportation Logistics Trains

Changelog

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).