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.
80 lines
3.7 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|