railroader-setons-special-s.../README.md
seton a1fcf01125 Initial commit: S3 - Seton's Special Sauce v0.2.0
Consolidates two standalone Railroader mods into one UMM "everything mod"
with an optional-module framework. Modules are disabled by default and
toggled per-module from the S3 settings page.

Core framework:
- IModule contract plus ModuleRegistry, with each module owning a Harmony
  instance scoped by its id so only enabled modules patch the game
- Per-module flat JSON settings (SettingsStore). On this Mono runtime
  JsonUtility silently drops nested custom-class fields, so settings stay flat
- Foldout-per-module settings panel plus a detector that offers to disable the
  old standalone mods if they are still installed

Modules (moved over to parity, verified in-game):
- Physics Optimizer (was RailroaderPhysicsOverhaul): LOD fast-path and
  auto-freeze, profiler overlay, debug car tinting, /rpf console commands
- Map Popout (was RRPopout): native map detach window. Pure-UMM install that
  drops the winhttp proxy and LoadLibrary's RRPopout.dll from the mod folder.
  Native Win32 + D3D11 + Dear ImGui engine included. Fixes a latent break where
  the now-private MapBuilder.UpdateForZoom() is reached via Traverse.

Build: dotnet for the managed assembly (netstandard2.1) and CMake for the
native DLL. build-local.ps1 installs into the game, build-release.ps1 packages
the UMM drag-install zip.
2026-06-17 14:17:41 -04:00

54 lines
2.4 KiB
Markdown

# S³ - Seton's Special Sauce
An umbrella "everything mod" for [Railroader](https://store.steampowered.com/app/1638770/Railroader/),
built on [Unity Mod Manager](https://www.nexusmods.com/site/mods/21).
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 Popout | Detaches the in-game map into a separate resizable window for a second monitor. Optional MapEnhancer integration. |
Both are disabled by default - You must enable them per-module from the S³ settings page, a game restart is required for this to take effect.
More modules will follow - S³ is designed to grow.
## 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`](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
```