Files
institution/Source/Institution/InstitutionMod.cs
T
flan bd96c2c516 Add the Policing settings toggle; re-vendor Core + Justice DLLs
A fourth checkbox (Policing, default on) drives colony crime independently, and
the re-vendored drop-in carries the flipped-on Core flag, the enrichments, and
prison riots.
2026-07-15 18:37:17 +00:00

80 lines
3.7 KiB
C#

using UnityEngine;
using Verse;
namespace InstitutionSuite
{
/// <summary>
/// The single player-facing mod. It bundles the Institution feature layers -- Contraband,
/// Justice, Gangs -- into one install with a checkbox per layer, and it owns NO gameplay code of
/// its own. All it does is read the player's choices and write them into Core's shared
/// <see cref="Contraband.InstitutionSettings"/>, which the feature assemblies (shipped alongside
/// in this same mod) read at their entry points.
///
/// This is the whole "merge": a thin settings shim on top of the unchanged, still-separate feature
/// DLLs. Everything defaults ON, so a fresh install is the full experience and the player opts out
/// of pieces they don't want. Pull this mod apart into its layers again and nothing here is missed
/// -- the features default their flags to true on their own.
/// </summary>
public class InstitutionMod : Mod
{
private readonly InstitutionModSettings settings;
public InstitutionMod(ModContentPack content) : base(content)
{
settings = GetSettings<InstitutionModSettings>();
settings.Apply(); // push the loaded choices into Core before the features' static ctors run
}
public override string SettingsCategory() => "Institution";
public override void DoSettingsWindowContents(Rect inRect)
{
Listing_Standard l = new Listing_Standard();
l.Begin(inRect);
l.CheckboxLabeled("Contraband",
ref settings.contraband,
"Concealment and intake, improvised shivs, Prison-Architect tunnels, warden search, and warden corruption.");
l.Gap();
l.CheckboxLabeled("Justice",
ref settings.justice,
"Classification, the deterrence feedback loop, discipline and reform, parole, and prisoner recreation (Regime).");
l.Gap();
l.CheckboxLabeled("Gangs",
ref settings.gangs,
"Gangs as contraband economies: joining by disposition, smuggling networks, rivalry, and fights-as-crime. Leans on Contraband and Justice.");
l.Gap();
l.CheckboxLabeled("Policing (colony crime)",
ref settings.policing,
"The pre-arrest layer: your own colonists commit crimes on a spectrum (rarer in small, tight colonies), witnesses and a constable's work name the culprit, and a weighed arrest can end in a cell -- or a resisted breakout. A big behavioural change; turn it off to keep the rest of Justice without colony crime.");
l.End();
settings.Apply(); // live: a toggle takes effect immediately for the gated behaviour
}
}
public class InstitutionModSettings : ModSettings
{
public bool contraband = true;
public bool justice = true;
public bool gangs = true;
public bool policing = true;
/// <summary>Mirror the choices into Core's shared flags that every feature reads.</summary>
public void Apply()
{
Contraband.InstitutionSettings.contraband = contraband;
Contraband.InstitutionSettings.justice = justice;
Contraband.InstitutionSettings.gangs = gangs;
Contraband.InstitutionSettings.policing = policing;
}
public override void ExposeData()
{
Scribe_Values.Look(ref contraband, "contraband", true);
Scribe_Values.Look(ref justice, "justice", true);
Scribe_Values.Look(ref gangs, "gangs", true);
Scribe_Values.Look(ref policing, "policing", true);
base.ExposeData();
}
}
}