No description
Find a file
seton 4853015eff Profiler: new unified overlay module; absorb PhysicsOverlayGUI
Add a standalone Profiler module (S3.profiler.json, disabled by default)
that hosts the in-game frame-time overlay previously owned by Physics
Optimizer.  The overlay now adapts to whichever modules are enabled:

- Always shows: render + physics frame-time graph, timing report.
- Physics Optimizer section (if enabled): LOD fast-path and auto-freeze
  quick-toggles with live stats, debug car count line.
- Mesh LOD section (if enabled): total tracked cars, loco/freight split,
  per-LOD-level counts refreshed once per second.

PhysicsOptimizerModule retains only the Harmony patches and
CarDebugVisualizer; ShowOverlay/OverlayOpacity removed from PhysicsSettings.
MeshLodInjector gains GetLodStats() and GetLodLevel() for the overlay.
BBox material shader search now tries URP/Lit before Standard.
/rpf overlay toggle redirected to ProfilerOverlayGUI.Instance.
2026-06-25 19:06:46 -04:00
dist Map Module 0.2.5: icon culling, EOTD, gear menu icons, font fix 2026-06-22 18:46:12 -04:00
img track and industry labels on map; Mesh LOD module skeleton 2026-06-25 12:33:37 -04:00
native Map: fix T key teleport in overlay and popout; pass M through when module disabled 2026-06-25 18:16:49 -04:00
src Profiler: new unified overlay module; absorb PhysicsOverlayGUI 2026-06-25 19:06:46 -04:00
.gitignore Update .gitignore 2026-06-18 10:58:54 -04:00
Directory.Build.props Initial commit: S3 - Seton's Special Sauce v0.2.0 2026-06-17 14:17:41 -04:00
Info.json Add UMM auto-update repository manifest 2026-06-22 19:11:43 -04:00
README.md README: note 3-12 FPS improvement from icon culling 2026-06-22 18:53:18 -04:00
repository.json Fix release URL pattern in repository.json (no v prefix on tags) 2026-06-22 19:14:12 -04:00
S3 Logo - clean.png v0.2.2 - map module themes, custom colors, in-game overlay 2026-06-18 21:30:53 -04:00

S³ - Seton's Special Sauce

S3 - Seton's Special Sauce

An umbrella "everything mod" for Railroader, built on Unity Mod Manager.

S³ is a thin core that hosts independent, optional modules, each disabled by default. Open the S³ settings page in the UMM in-game menu and expand a module's foldout to enable and configure it. Module enable/disable applies on the next game launch.

I originally planned on releasing individual mods, but considering my workflow of just making what I want when I want it, I figured a unified platform for all my tweaks and additions would be more convenient for myself (one repo to manage) and the community.

Modules

Module What it does
Physics Optimizer Cuts CPU spent on train physics (LOD fast-path + auto-freeze), with a profiler overlay and debug car tinting. Console: /rpf
Map Module In-game map overlay and detachable popout window for a second monitor. Themes, custom colors, opacity controls, map rotation, and optional MapEnhancer integration.

Both are disabled by default; enable them per-module from the S³ settings page. A game restart is required for enable/disable to take effect. More modules will follow; S³ is designed to grow.


Map Module

Replaces the base-game map with a floating in-game overlay (toggle with M or your configured hotkey) and lets you pop it out into a detached resizable OS window for a second monitor. The toolbar, compass, and follow/jump menus are identical in both surfaces.

Settings

Configure everything from the S³ UMM settings page: hotkey, drag-to-cancel follow behavior, right-click to recenter on player, theme, three independent opacity controls (Window, Map Elements, Map Background), icon culling and EOTD settings, the detach button, and a full per-element custom color editor.

Most settings are also reachable directly from the gear menu on the map toolbar without opening UMM.

Map Module settings panel

Themes

Six themes built in: five named presets plus a Custom slot you tune with per-element hex input and live R/G/B/A sliders. Any preset can be copied into Custom as a starting point. Theme changes apply instantly without restarting.

S3 Dark
S3 Dark (default)
Railroader Classic
Railroader Classic
High Visibility
High Visibility
Night Mode
Night Mode
Retro Terminal
Retro Terminal
+ fully customizable

Transparency

The in-game overlay has three independent opacity controls. Window sets the chrome opacity (toolbar, compass, and frame), with an automatic minimum of 50% while the mouse is over the overlay so the controls stay reachable at any setting. Map Elements fades the map image independently. Map Background controls how transparent the empty space behind terrain is - turn it down and the game world shows through where there is no map content.

Opacity controls settings panel

Map Rotation

Rotate the map manually with the rotation control, or lock it to your player camera heading so it always faces the direction you're looking. Switch between free and locked at any time without losing your current view.

Icon Controls

Each car icon on the map is a live Canvas element. On a large session with many cars visible, the rendering cost adds up - testing showed a 3-12 FPS improvement when zoomed out over a busy portion of the map with culling enabled.

When zoomed out past a configurable threshold (default 40%), car icons fade out and only locomotive icons remain. Locomotives scale up automatically so they stay easy to spot. A separate option hides MU trailing units, keeping just the lead locomotive per consist. A blinking red EOTD dot marks the rear of each consist so you can still gauge train length at a glance.

All of these options are available from the gear menu Icons submenu on the map toolbar, or from the S³ UMM settings page.

Icon controls settings

Popout Window

Pop the map into a detached native OS window. Drag it to any monitor, resize it freely, and pin it always-on-top via the window's right-click title bar menu. Re-attach it back into the game overlay at any time from the settings panel without losing your position, zoom, or rotation.

Always on Top option in the popout window title bar menu

MapEnhancer Integration

S³ auto-detects any installed version of MapEnhancer at startup with no configuration required. If MapEnhancer is installed, the toolbar gear menu expands with follow controls and a settings panel. The Follow submenu lets you follow the player camera, the selected locomotive, or any consist picked from a live-updated list. Jump to Location is also available. The Settings panel gives you live control over all MapEnhancer rendering options without leaving the map: marker visibility toggles, scale sliders for flares, junctions, track lines, and crossings, and bulk switch reset buttons.

MapEnhancer gear menu showing follow submenu and settings panel

Both the original official builds and the community fork are supported. Features added by the community fork - turntable control, road crossing markers, passenger stop tracking, industry area colors, modded spawn points, and bulk switch reset - are grayed out when an older build is detected. All controls that the installed version supports remain fully functional.

Community build - all features available
Community build
Older official build - community features grayed out
Older build - community features grayed

Physics Optimizer

Reduces CPU time spent on train physics with two complementary strategies:

  • LOD Fast-Path: cars beyond a configurable distance switch to dead-reckoning, skipping expensive 3D constraint updates. A staggered resync keeps them accurate without a sudden full-update spike.
  • Auto Freeze: consists that are far away and nearly stopped skip the Verlet integration tick entirely, replacing the stock freeze heuristic with a tighter distance + speed threshold.

Locomotives can be excluded from either strategy. A console profiler overlay (/rpf) and debug car tinting (yellow = frozen, cyan = fast-path, magenta = full) let you verify the LOD and freeze behavior in your session.

Settings

Physics Optimizer settings

Performance

LOD fast-path and Auto Freeze together cut per-car physics cost from ~28.6 µs to ~10.5 µs (63% reduction) and FixedUpdate time from 6.7 ms to 3.8 ms on the same 156-car scene. Numbers from the built-in profiler overlay:

Before After
Profiler before, Physics Optimizer OFF Profiler after, Physics Optimizer ON
Physics Optimizer OFF (6.7 ms/frame) Physics Optimizer ON (3.8 ms/frame)

Migrating from the standalone mods

S³ replaces the separate Physics Optimizer (RailroaderPhysicsOverhaul) and PopOut Windows (RRPopout) mods. Uninstall those before installing S³. Settings do not carry over, so re-configure each module from the S³ settings page.

If these mods are detected you will be prompted to disable them in the S³ settings page.


Building

Requires the .NET SDK (dotnet). The native module additionally needs CMake + the MSVC toolchain.

  • Local test install: .\dist\build-local.ps1 builds and copies into the game's Mods\S3\ folder.
  • Release zip: .\dist\build-release.ps1 produces dist\SetonsSpecialSauce-<version>.zip for upload.

The game install path is set once in Directory.Build.props (GameDir); override per-build with /p:GameDir=... or the build script's -GameDir parameter.

Layout

src/            single managed assembly (S3.dll, netstandard2.1)
  Main.cs       UMM entry point
  Core/         module framework: IModule, registry, settings, settings panel
  Modules/      one folder per module
native/         shared Win32 + D3D11 + Dear ImGui external-window UI engine
dist/           build + packaging scripts