Fold Ward into the single Institution install as its psychiatric-care layer. package.sh now builds Ward clean and vendors Ward.dll plus its defs and textures alongside the other layers, and the settings shim gains a Ward (psychiatric care) checkbox that writes the shared InstitutionSettings.ward flag. Re-assembling also carries in Justice's now-shipping policing defs (the constable work type and crime thoughts), so the aggregate finally bundles colony crime and the weighed arrest as well. README updated to five layers over one Core with policing shipped and Ward folded in; adds the changelog, the Workshop preview, and the preview generator.
87 lines
4.2 KiB
C#
87 lines
4.2 KiB
C#
using UnityEngine;
|
|
using Verse;
|
|
|
|
namespace InstitutionSuite
|
|
{
|
|
/// <summary>
|
|
/// The single player-facing mod. It bundles the Institution feature layers -- Contraband,
|
|
/// Justice, Gangs, Ward -- 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.Gap();
|
|
l.CheckboxLabeled("Ward (psychiatric care)",
|
|
ref settings.ward,
|
|
"Commit a prisoner for treatment instead of punishment: sustained counselling in a proper ward reduces the disorder that broke them and builds a recovery track toward discharge. Neglect a committed patient and they deteriorate. Uses Harmony.");
|
|
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;
|
|
public bool ward = 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;
|
|
Contraband.InstitutionSettings.ward = ward;
|
|
}
|
|
|
|
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);
|
|
Scribe_Values.Look(ref ward, "ward", true);
|
|
base.ExposeData();
|
|
}
|
|
}
|
|
}
|