Shadows of Doubt
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
3 weeks ago
Downloads
482
Size
153KB

TheControlRoomFix

TheControlRoomFix

BepInEx IL2CPP plugin for Shadows of Doubt. TheControlRoomFix adds a Micro Cruncher, blueprints and a single resident-files drawer to every Control Room. It works on existing saves and new cities.

Surveillance feeds fill in after several in-game hours, as in vanilla. If you fast-travel into a building, walk around the area for a moment; recording may not start until the surroundings have loaded. Some cameras may stay offline, as in vanilla.

Some buildings have no cameras by vanilla design.

Version 1.0.0 is a gameplay release: those surfaces worked in playtest. It does not fill missing employees.

Playtest (authoritative for 1.0.0)

On the same completely broken test city used throughout development, T A checked 7/7 Control Rooms:

  • Computers and blueprints were present.
  • Management login worked and was enough to use surveillance.
  • Most rooms had a file cabinet with some resident folders (vanilla-like, not a complete every-resident roster).

A later check on a fresh 9x6 city and on existing saves confirmed feeds record away from the player and survive save/reload.

Employee login and filling empty jobs are out of scope. That belongs to a separate BACK TO WORK! mod so the two plugins do not fight.

What the plugin does

The plugin uses Harmony (runtime method patching) and BepInEx (Unity plugin loader) on IL2CPP (Unity's compiled scripting backend). After MurderController.OnStartGame it:

  • Exempts the ControlRoom room class from the erroneous skipIfNoAddressInhabitants gate (new interiors can spawn functional clusters).
  • Repairs already-serialized broken Control Rooms with vanilla placement APIs when no Micro Cruncher is present (RepairExistingControlRooms, default on).
  • Prefers a Toolbox desk preset that defines a Micro Cruncher when DeskAgainstWall would otherwise place a desk with none.
  • Places one filing cabinet cluster per Control Room (tall if possible, otherwise short), not both.
  • Always limits resident folders to one drawer per Control Room: extra ResidentRoster drawers are emptied so the same files are not copied into every drawer. Optionally (CompleteResidentRosters, default off) adds every building inhabitant to that one keeper drawer.
  • Logs furniture/interactable counts when the debug pipeline dump is on (diagnostics from the 0.7.1 probe remain; they are not a claim that rooms are empty).

City Hall duplicate-company work stays disabled and is out of the 1.0.0 bar.

This plugin must not invent or fill missing employees.

Install

  1. Install BepInExPack IL2CPP (Thunderstore: common BepInEx mod listing).
  2. Place ControlRoomFix.dll in BepInEx/plugins/ControlRoomFix.
  3. Load a city (back up first). Rooms that already have a Micro Cruncher are left alone (idempotent repair).

The plugin DLL filename stays ControlRoomFix.dll.

Config

The config file name is unchanged: BepInEx/config/sod.controlroomfix.cfg.

  • CompleteResidentRosters (default false): when true, the one remaining drawer can list every building inhabitant. Leave false for vanilla-like "some folders." Extra drawers are emptied either way.
  • DumpInteractablePipeline (default false, debug only): log vanilla furniture/interactable APIs and before/after repair counts.

If an older config still has CompleteResidentRosters = true or DumpInteractablePipeline = true, edit those keys by hand. The file on disk wins over the plugin defaults.

City analyzer (Python)

Diagnostic tooling for procedural-generation defects in city files (.cit). Python 3.9+; no runtime dependencies.

python3 sod_city_analyzer.py "/path/to/City.cit"
python3 sod_city_analyzer.py "/path/to/City.cit" --json

The analyzer can flag Control Rooms missing desks/computers/plans, City Hall issues, and company-roster IDs that point at missing citizens. That last check is detection only, not a job-fill patch.

Known gaps (documented, not blocking 1.0.0 gameplay)

  • Employee login / empty jobs: BACK TO WORK!, not this mod.
  • Not every cabinet has every resident; vanilla-like is the bar.
  • City Hall: experimental, off.

Build (local, needs game Dynamic Link Libraries)

SOD_BEPINEX_DIR=<BepInEx directory>
SOD_INTEROP_DIR=<BepInEx/interop directory>
dotnet build src/ControlRoomFix/ControlRoomFix.csproj --configuration Release
python3 tools/build_package.py --configuration Release

Cloud agents cannot compile against proprietary game DLLs.

Support

If TheControlRoomFix improved your cases, you can support development here:

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.