Why ORTS Should Not Attempt to Solve Asset Identity or Filename Collisions at Runtime
This issue comes up regularly, so I want to present a clear architectural argument for why asset‑identity problems cannot be solved inside the simulator and why attempting to do so would create more problems than it fixes.
1. By the time ORTS loads a route, all filenames are already fixed
When ORTS starts loading a route, it sees only the final installed directory tree:
ROUTE/
SHAPES/
TEXTURES/
WORLD/
At this point:
- filenames are already chosen
- world files already reference those filenames
- shapes already reference their texture filenames
The simulator has no opportunity to intervene without rewriting the user’s installed content.
2. ORTS has no access to the original source assets
To resolve a collision, ORTS would need to know:
- which asset the route author intended
- whether two files with the same name are identical or different
- whether the user has multiple versions of the same filename
- whether a mismatch is an error or intentional
The simulator has no visibility into any of this. It sees only the files that exist in the route folder. Without access to the original sources, ORTS cannot make correct decisions.
3. Runtime renaming is unsafe and breaks compatibility
To fix a collision at runtime, ORTS would need to:
- rename shapes
- rename textures
- rewrite .S files
- rewrite .SD files
- rewrite world files
- update any references in consists or scenery
Doing this dynamically would break:
- MSTS compatibility
- saved games
- multiplayer determinism
- repeatability of bug reports
- consistency across users
A simulator cannot safely rewrite its own data files while loading them.
4. ORTS cannot guess intent
If two assets share a filename, ORTS has no way to know:
- which one is correct
- which one the author used
- whether the route was packaged incorrectly
- whether the user has conflicting add‑ons
Guessing would produce nondeterministic behavior, which is unacceptable for a simulator.
5. Runtime fixes violate the principle of deterministic installs
A core requirement for a simulator is that:
- the same route
- installed on two different machines
- produces the same results
If ORTS tries to “fix” things dynamically, then:
- different users may get different filenames
- multiplayer sessions may desync
- debugging becomes impossible
- route authors lose control over their own content
Determinism must be preserved.
6. The correct layer to solve this problem is above the simulator
Asset identity and collision resolution belong in:
- packaging tools
- installers
- development workflows
These tools can:
- compute hashes
- detect collisions
- rename assets
- rewrite shapes
- update world files
- ensure the route is self‑contained and MSTS‑compatible
By the time ORTS loads the route, all of this must already be done.
7. ORTS should remain a simulator, not an asset‑management system
The simulator’s job is to:
- load the files that exist
- trust the filenames that are present
- behave consistently with MSTS
Trying to turn ORTS into a dynamic asset‑resolver would:
- expand its scope dramatically
- introduce instability
- break compatibility
- create nondeterministic behavior
- complicate maintenance
This is not the right layer for the problem.
Conclusion
ORTS cannot solve asset‑identity or filename‑collision problems at runtime because it lacks the information, the authority, and the safety guarantees to do so.
ORTS should not try, because doing so would break compatibility, determinism, and the simulator’s core design principles.
The correct solution is:
- identity and collision resolution during packaging
- verification and aliasing during installation
- stable filenames at runtime
This keeps ORTS predictable, compatible, and focused on simulation — not on repairing content on the fly






Comment