-
Notifications
You must be signed in to change notification settings - Fork 0
Migrating From Legacy Mods
FUSE replaces the legacy Railroader modding stack. This guide covers moving an existing install — Railloader, Strange Customs, ConfusingSupplements, For Your Convenience, or Alina's Map Mod — over to FUSE packages.
If you are setting up a fresh install with no legacy mods, you do not need this page. See GETTING_STARTED.md.
FUSE can host compatible RailLoader plugins and translate supported legacy data in memory. Converting a data mod to native FUSE is still recommended for authors because it produces validation and conversion reports, but players do not have to convert every compatible package before testing it.
What carries over:
| Legacy content | Status under FUSE |
|---|---|
| Track / route JSON | Converted, one FUSE data file per source JSON |
| Horn / whistle / bell packs | Converted, audio files copied |
| Strange Customs asset packs | Installed directly; FUSE discovers supported legacy asset packs |
| Alina map-tile packages | Installed directly; FUSE's Alina compatibility reads the tile data |
| World scenery, scene clones, map masks, splines | Converted |
| Industries, loaders, stations, team/repair tracks | Converted |
| Progression sections and delivery phases | Converted |
What does not carry over:
- Unknown arbitrary script behavior. The converter cannot translate DLL logic. FUSE independently implements the legacy host APIs used by supported RailLoader plugins, but a plugin using an unimplemented API is isolated and reported instead of being silently converted.
- Rolling stock, locomotive, and car mods, except audio definitions.
- Signals.
- Three-way switches — Railroader does not support them as standard graph switches, so legacy content authoring one has an authoring problem that predates FUSE.
Do not run a legacy route and its converted FUSE equivalent at the same time.
Both stacks will try to own the same object ids, and you get duplicate track,
duplicate industries, or duplicate buildings. /fuse.conflicts reports exactly
this situation, and it is the single most common self-inflicted problem when
migrating.
The same applies to the loaders themselves. FUSE detects a leftover
Railloader.dll, Railloader.Injector.dll, or Railloader.Interchange.dll in
the install and warns about it, both on disk and among loaded assemblies. Take
the warning seriously — it means two loaders are live at once.
Loading both is supported only as a deliberate conflict test.
Back up your saves and your entire Mods folder before touching anything. This is
the step people skip and regret.
List your legacy mods and sort them into three groups:
- Convertible data mods (routes, scenery, industries, supported audio JSON) — these convert.
- Direct-install data (asset packs and Alina map tiles) — install the original package through the FUSE installer; do not run it through the converter.
-
Script mods (
.dlllogic) — these do not convert; check whether a FUSE-native equivalent exists. - Rolling stock — out of scope except audio.
Point the converter at each legacy mod folder. The drag-and-drop route:
.\FUSE-Converter.exeOr the .NET CLI, which converts and validates in one pass:
fuse-convert "C:\Path\To\LegacyMod" --out "C:\Steam\steamapps\common\Railroader\Mods" --format all--batch converts an entire folder of legacy mods at once. Full options are in
FUSE_CONVERTER.md.
Every converted package gets conversion-report.json and conversion-report.md.
Failed or direct-install inputs write their reports under the output root's
_conversion-reports folder so the report cannot be mistaken for a package.
Read them. The converter classifies each source concept rather than silently
dropping it:
| Outcome | What it means for you |
|---|---|
converted |
Maps directly to FUSE. Nothing to do. |
repaired |
Invalid legacy data was fixed. Worth a look, but generally fine. |
preserved |
Kept in the package but without full runtime behavior yet. |
dependency-required |
Works once you install the named dependency. |
unresolved |
A reference could not be resolved — needs manual repair. |
unsupported |
FUSE intentionally does not support this. Named in the report. |
error |
Conversion failed. Do not ship or rely on this package. |
Warnings do not automatically mean a package is broken. They mean the conversion needs a look before you call it verified.
The lossy areas that most often need manual verification: legacy formulaic
formula values, progression interchangeTransfers, unknown spline or object
handlers, unknown industry component types, and script binaries.
Once the converted package is in place, remove or disable the legacy original. Both cannot be active.
Remove the legacy loader itself only after every data mod you care about has been converted and verified — you may want to go back.
Converted route packages frequently depend on asset packs. Install them as real
asset packs. Do not work around a missing asset by aliasing it to a different
name; if the correct pack exists, install it. /fuse.assets lists what FUSE
actually found.
Load a map and check:
/fuse.report
/fuse.loaded
/fuse.conflicts
A clean migration shows zero faults and zero conflicts. Then look at the world — location list, progression visibility, and terrain masks are the things that look wrong in ways a report will not catch.
The legacy loader. FUSE reads Railloader's package metadata directly, including
RailLoadPriority, RailLoadAfter, and RailLoadBefore for load ordering, so
ordering relationships you already established carry across.
Remove Railloader.dll, Railloader.Injector.dll, and
Railloader.Interchange.dll once you have migrated —
FUSE warns while they remain.
Asset packs install directly and remain available to native or converted route
packages. Mixin files convert through the mixinto mechanism; a missing mixinto
requirement skips only that fragment rather than faulting the whole stack.
Data content converts. Any script-driven behavior does not — check the conversion
report for what was classified unsupported.
Map content converts. As with any route, do not run the legacy version alongside the converted one.
Reconvert a package when:
- The FUSE converter version changes.
- The schema version changes.
- A converter repair changed from warning-only to an actual runtime fix.
- The legacy package was updated or redownloaded.
Restore your backup — that is what it is for. Then narrow the problem down to a single package by disabling packages until the symptom disappears, and file a report with the conversion report for that one package attached.
TROUBLESHOOTING.md maps symptoms to the diagnostic command that explains them.
- FUSE_CONVERTER.md — full converter reference
- GETTING_STARTED.md — installing FUSE itself
- KNOWN_ISSUES.md — known legacy interaction problems
Mirrored from docs/MIGRATION_FROM_LEGACY.md — edit there, not here.