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.
54 lines
2.4 KiB
Markdown
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
|
|
```
|