diff --git a/Assemblies/Institution.dll b/Assemblies/Institution.dll index 59e0e96..2bccee5 100644 Binary files a/Assemblies/Institution.dll and b/Assemblies/Institution.dll differ diff --git a/Assemblies/InstitutionGangs.dll b/Assemblies/InstitutionGangs.dll index 48e6870..6d3705b 100644 Binary files a/Assemblies/InstitutionGangs.dll and b/Assemblies/InstitutionGangs.dll differ diff --git a/Assemblies/InstitutionJustice.dll b/Assemblies/InstitutionJustice.dll index c9cf8ea..2ec6852 100644 Binary files a/Assemblies/InstitutionJustice.dll and b/Assemblies/InstitutionJustice.dll differ diff --git a/Assemblies/Ward.dll b/Assemblies/Ward.dll index 71e801f..afc0709 100644 Binary files a/Assemblies/Ward.dll and b/Assemblies/Ward.dll differ diff --git a/Defs/HediffDefs/Hediffs_Corrections.xml b/Defs/HediffDefs/Hediffs_Corrections.xml index c8cea54..16155da 100644 --- a/Defs/HediffDefs/Hediffs_Corrections.xml +++ b/Defs/HediffDefs/Hediffs_Corrections.xml @@ -33,4 +33,33 @@ + + + Institution_InSolitary + + Held in solitary confinement, privileges revoked, as discipline. Isolation grates: they are closer to the edge, and they will not forget it. + HediffWithComps + (0.7, 0.5, 0.5) + false + 1.0 + true + +
  • + -0.5 +
  • +
    + +
  • + 0 + + 0.05 + +
  • +
    +
    + diff --git a/Defs/JobDefs/Jobs_Corrections.xml b/Defs/JobDefs/Jobs_Corrections.xml index 35bc74b..6272258 100644 --- a/Defs/JobDefs/Jobs_Corrections.xml +++ b/Defs/JobDefs/Jobs_Corrections.xml @@ -17,4 +17,11 @@ false + + Institution_DisciplineJob + Contraband.JobDriver_Discipline + disciplining TargetA. + false + + diff --git a/Defs/PrisonerInteractionModeDefs/PrisonerInteractionModes_Justice.xml b/Defs/PrisonerInteractionModeDefs/PrisonerInteractionModes_Justice.xml index c8b6b31..46e0640 100644 --- a/Defs/PrisonerInteractionModeDefs/PrisonerInteractionModes_Justice.xml +++ b/Defs/PrisonerInteractionModeDefs/PrisonerInteractionModes_Justice.xml @@ -27,4 +27,16 @@ true + + + Institution_Discipline + + 130 + true + false + false + true + + diff --git a/Defs/ThoughtDefs/Thoughts_Corrections.xml b/Defs/ThoughtDefs/Thoughts_Corrections.xml index d2c04ef..c1f1c4a 100644 --- a/Defs/ThoughtDefs/Thoughts_Corrections.xml +++ b/Defs/ThoughtDefs/Thoughts_Corrections.xml @@ -43,4 +43,34 @@ + + Institution_Disciplined + Thought_Memory + 3 + 3 + +
  • + + They threw me in solitary. I will not forget it. + -8 +
  • +
    +
    + + + + Institution_Unsafe + Thought_Memory + 0.5 + 2 + +
  • + + There's a dangerous one caged in here with me. I sleep with one eye open. + -5 +
  • +
    +
    + diff --git a/Defs/WorkGiverDefs/WorkGivers_Corrections.xml b/Defs/WorkGiverDefs/WorkGivers_Corrections.xml index 31163e2..6d6f2e6 100644 --- a/Defs/WorkGiverDefs/WorkGivers_Corrections.xml +++ b/Defs/WorkGiverDefs/WorkGivers_Corrections.xml @@ -33,4 +33,17 @@ + + Institution_WardenDiscipline + + Contraband.WorkGiver_Warden_Discipline + Warden + discipline + disciplining + 75 + +
  • Moving
  • +
    +
    + diff --git a/ROADMAP.md b/ROADMAP.md index 7699991..5e02dec 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -4,14 +4,20 @@ A set of RimWorld mods about **what an institution does to the people inside it* policing, and justice that put them there. Each mod is a separate install on a shared **Core**; together they form one system. -> **Status (2026-07-15): shipped as a four-mod split.** The monolith split along its seams — the -> substrate became **Institution: Core** (propensity, criminal record, secured context), the -> corrections systems became **Institution: Justice** (classification, deterrence, discipline, -> parole, regime), the gang layer became **Institution: Gangs**, and **Institution: Contraband** is -> now the physical smuggling loop. **Foul Play** stands alone and bridges in. See the -> [README](README.md) for the current mod table and dependencies. The design sections further down -> predate the split in how they *group* modules, but the mechanics and the north star are unchanged; -> a policing/cops layer (pre-arrest) is where **Justice** grows next. +> **Status (2026-07-15): shipped as a five-layer suite behind one install.** The monolith split into +> **Core** (propensity, criminal record, secured context, the shared treatment engine), **Contraband** +> (the physical smuggling loop), **Justice** (classification, deterrence, discipline, parole, regime, +> and **policing** — colony crime → a weighed arrest), **Gangs** (contraband economies), and **Ward** +> (psychiatric care), folded in from a former standalone sister mod. All five bundle into the single +> **Institution** mod with a toggle each while staying separate repos; **Foul Play** stands alone and +> bridges in. See the [README](README.md) for the current mod table. +> +> The pre-arrest loop (crime → witnesses → investigate → weighed arrest) and the post-arrest +> corrections arc (rehabilitate → parole, discipline-as-order, classification enforcement, on the +> shared treatment engine) are **wired and harness-verified**. What remains is **Regime depth** +> (schedule / needs / visitation), **ideology-flavoured** release, and — above all — real +> **playtesting** to tune the numbers, none of which are play-tested yet. The design sections below +> predate the split in how they *group* modules, but the mechanics and north star are unchanged. ## North star @@ -100,17 +106,20 @@ which PR then *enriches* when present. The test of a healthy deferral: with PR a ## Suite modules -| Mod | Scope | Status | +| Layer (repo) | Scope | Status | |---|---|---| -| **Foul Play** | throw a container of something off a body; vessels + substances + Piss Nuke flagship | built | -| **Institution: Contraband** | conceal / improvise / search / confiscate / intake / escape / secure-areas | building | -| **Institution: Ward** | involuntary psychiatric commitment — the third pawn state | built | -| **Institution: Regime** | daily schedule (vanilla Restrict) + modest needs + visitation, for every secured context | planned | -| **Institution: Justice** | the crime loop (commit → discover → investigate → attribute → arrest), policing officer, parole/discharge/manumission | planned | -| **Institution: Discipline** | security classification / segregation, punishment-as-order, corruption | planned | -| **Institution: Gangs** | prisoner & colony gangs, rivalries, contraband networks | planned | +| **Core** | propensity, criminal record, secured context, the shared treatment engine, the deterrence seam | **shipped** | +| **Contraband** | conceal / improvise / search / confiscate / intake / escape / secure-areas / corruption | **shipped** | +| **Justice** | policing (crime → witnesses → investigate → weighed arrest), classification, deterrence feedback, discipline, parole, rehabilitation, regime | **shipped** | +| **Gangs** | prisoner & colony gangs, rivalries, contraband networks | **shipped** | +| **Ward** | involuntary psychiatric care — the third pawn state, on Core's treatment engine | **shipped** (folded in) | +| **Foul Play** | throw a container of something off a body; vessels + substances + Piss Nuke flagship | **shipped** (standalone, bridges in) | -Seven mods is the ceiling. Prefer folding a slot into an existing module over minting a new one. +The seven-mod plan became **five layers over Core**: **Regime** and **Discipline** folded into +**Justice** rather than minting separate mods. Sub-features still open inside Justice/Regime: +classification **wing-routing** (the grade and a misplacement alert ship, but there is no graded-wing +assignment UI), **Regime depth** (Yard/Lockup schedule blocks, a Safety need, Visitation), and +**ideology-flavoured** parole — none of it playtested. --- diff --git a/Wiki/justice/Rehabilitation.md b/Wiki/justice/Rehabilitation.md index 0f9c761..9f68a0a 100644 --- a/Wiki/justice/Rehabilitation.md +++ b/Wiki/justice/Rehabilitation.md @@ -87,16 +87,42 @@ them again — recidivism, closing back onto the start. --- +## Discipline — the other lever + +Rehabilitation is the carrot; **discipline** is the stick, and its opposite. Set a prisoner to +**Discipline** and a warden puts them in **solitary**: harsh discipline (`Discipline.Punish`) *hardens* +them — reform falls — yet raises the colony's order (visible harsh justice deters the rest), and it +stings: a mood hit and an on-edge *in solitary* status. It fires at most once per term (the status +gates re-discipline for about two days), so it holds order without cratering reform in a single day. +The tension is the point: lean on discipline to keep order and you make the punished harder to reform. + +## Classification enforcement + +Classification always computed a **security grade** (`Minimum`..`Supermax`); now it is actionable: + +- **The grade shows** on every prisoner's inspect pane — the game tells you who is dangerous instead of + leaving you to guess. +- A **"Dangerous prisoner unsecured" alert** fires when a Maximum/Supermax pawn is held in the open or + sharing a cell — the misplacement flag, without a wing-grading UI. It clears once they have a secure, + solo cell. +- **Cell safety:** a prisoner caged with a dangerous one suffers a mood penalty. Segregate your + dangerous prisoners, or their cellmates pay for it — the grade made to matter on the *housing* side, + not only at parole. + +--- + ## Seeing it -A rehabilitated prisoner's inspect pane shows the state directly (a Harmony postfix on +Every colony prisoner's inspect pane now carries the corrections readout (a Harmony postfix on `Pawn.GetInspectString`, via Justice's existing Regime patch — not a contested method): -> *Rehabilitation: reforming (40%)* · *reformed — ready for parole* · *— neglected (3d)* +> *Security grade: Maximum* · *In solitary* · *Rehabilitation: reforming (40%) — neglected (3d)* · +> *reformed — ready for parole* -And because the colony's **order climate** otherwise has no readout at all, the same line surfaces it -when it is far enough from ordinary to matter — *Colony order: low (28%) — crime pays here* / *high -(71%) — order holds*. +The **grade** shows for every held pawn (classification's information pillar); *in solitary* while a +discipline term runs; the **rehabilitation** line for a pawn set to reform. And because the colony's +**order climate** otherwise has no readout at all, the same pane surfaces it when it is far enough from +ordinary to matter — *Colony order: low (28%) — crime pays here* / *high (71%) — order holds*. ---