Re-package with the enforcement layer; refresh the stale ROADMAP; sync wiki
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -33,4 +33,33 @@
|
|||||||
</stages>
|
</stages>
|
||||||
</HediffDef>
|
</HediffDef>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The solitary status: a marker that the prisoner is serving a discipline term. It gates the warden
|
||||||
|
from re-disciplining while it lasts (roughly two days, decaying), carries the on-edge cost of
|
||||||
|
isolation, and shows on the inspect pane. The mood hit itself is the Institution_Disciplined memory.
|
||||||
|
-->
|
||||||
|
<HediffDef>
|
||||||
|
<defName>Institution_InSolitary</defName>
|
||||||
|
<label>in solitary</label>
|
||||||
|
<description>Held in solitary confinement, privileges revoked, as discipline. Isolation grates: they are closer to the edge, and they will not forget it.</description>
|
||||||
|
<hediffClass>HediffWithComps</hediffClass>
|
||||||
|
<defaultLabelColor>(0.7, 0.5, 0.5)</defaultLabelColor>
|
||||||
|
<scenarioCanAdd>false</scenarioCanAdd>
|
||||||
|
<maxSeverity>1.0</maxSeverity>
|
||||||
|
<isBad>true</isBad>
|
||||||
|
<comps>
|
||||||
|
<li Class="HediffCompProperties_SeverityPerDay">
|
||||||
|
<severityPerDay>-0.5</severityPerDay>
|
||||||
|
</li>
|
||||||
|
</comps>
|
||||||
|
<stages>
|
||||||
|
<li>
|
||||||
|
<minSeverity>0</minSeverity>
|
||||||
|
<statOffsets>
|
||||||
|
<MentalBreakThreshold>0.05</MentalBreakThreshold>
|
||||||
|
</statOffsets>
|
||||||
|
</li>
|
||||||
|
</stages>
|
||||||
|
</HediffDef>
|
||||||
|
|
||||||
</Defs>
|
</Defs>
|
||||||
|
|||||||
@@ -17,4 +17,11 @@
|
|||||||
<casualInterruptible>false</casualInterruptible>
|
<casualInterruptible>false</casualInterruptible>
|
||||||
</JobDef>
|
</JobDef>
|
||||||
|
|
||||||
|
<JobDef>
|
||||||
|
<defName>Institution_DisciplineJob</defName>
|
||||||
|
<driverClass>Contraband.JobDriver_Discipline</driverClass>
|
||||||
|
<reportString>disciplining TargetA.</reportString>
|
||||||
|
<casualInterruptible>false</casualInterruptible>
|
||||||
|
</JobDef>
|
||||||
|
|
||||||
</Defs>
|
</Defs>
|
||||||
|
|||||||
@@ -27,4 +27,16 @@
|
|||||||
<allowInClassicIdeoMode>true</allowInClassicIdeoMode>
|
<allowInClassicIdeoMode>true</allowInClassicIdeoMode>
|
||||||
</PrisonerInteractionModeDef>
|
</PrisonerInteractionModeDef>
|
||||||
|
|
||||||
|
<!-- Punishment-as-order: solitary / privilege revocation. Harsh, so it holds order but hardens the
|
||||||
|
punished (reform falls). Non-exclusive, and it fires at most once per term (see the workgiver). -->
|
||||||
|
<PrisonerInteractionModeDef>
|
||||||
|
<defName>Institution_Discipline</defName>
|
||||||
|
<label>discipline</label>
|
||||||
|
<listOrder>130</listOrder>
|
||||||
|
<isNonExclusiveInteraction>true</isNonExclusiveInteraction>
|
||||||
|
<mustBeAwake>false</mustBeAwake>
|
||||||
|
<allowOnWildMan>false</allowOnWildMan>
|
||||||
|
<allowInClassicIdeoMode>true</allowInClassicIdeoMode>
|
||||||
|
</PrisonerInteractionModeDef>
|
||||||
|
|
||||||
</Defs>
|
</Defs>
|
||||||
|
|||||||
@@ -43,4 +43,34 @@
|
|||||||
</stages>
|
</stages>
|
||||||
</ThoughtDef>
|
</ThoughtDef>
|
||||||
|
|
||||||
|
<ThoughtDef>
|
||||||
|
<defName>Institution_Disciplined</defName>
|
||||||
|
<thoughtClass>Thought_Memory</thoughtClass>
|
||||||
|
<durationDays>3</durationDays>
|
||||||
|
<stackLimit>3</stackLimit>
|
||||||
|
<stages>
|
||||||
|
<li>
|
||||||
|
<label>disciplined</label>
|
||||||
|
<description>They threw me in solitary. I will not forget it.</description>
|
||||||
|
<baseMoodEffect>-8</baseMoodEffect>
|
||||||
|
</li>
|
||||||
|
</stages>
|
||||||
|
</ThoughtDef>
|
||||||
|
|
||||||
|
<!-- Regime: caged with a dangerous cellmate. A short memory refreshed while the danger persists
|
||||||
|
and fading once segregated, so it tracks housing rather than piling up. -->
|
||||||
|
<ThoughtDef>
|
||||||
|
<defName>Institution_Unsafe</defName>
|
||||||
|
<thoughtClass>Thought_Memory</thoughtClass>
|
||||||
|
<durationDays>0.5</durationDays>
|
||||||
|
<stackLimit>2</stackLimit>
|
||||||
|
<stages>
|
||||||
|
<li>
|
||||||
|
<label>unsafe cellmate</label>
|
||||||
|
<description>There's a dangerous one caged in here with me. I sleep with one eye open.</description>
|
||||||
|
<baseMoodEffect>-5</baseMoodEffect>
|
||||||
|
</li>
|
||||||
|
</stages>
|
||||||
|
</ThoughtDef>
|
||||||
|
|
||||||
</Defs>
|
</Defs>
|
||||||
|
|||||||
@@ -33,4 +33,17 @@
|
|||||||
</requiredCapacities>
|
</requiredCapacities>
|
||||||
</WorkGiverDef>
|
</WorkGiverDef>
|
||||||
|
|
||||||
|
<WorkGiverDef>
|
||||||
|
<defName>Institution_WardenDiscipline</defName>
|
||||||
|
<label>discipline prisoner</label>
|
||||||
|
<giverClass>Contraband.WorkGiver_Warden_Discipline</giverClass>
|
||||||
|
<workType>Warden</workType>
|
||||||
|
<verb>discipline</verb>
|
||||||
|
<gerund>disciplining</gerund>
|
||||||
|
<priorityInType>75</priorityInType>
|
||||||
|
<requiredCapacities>
|
||||||
|
<li>Moving</li>
|
||||||
|
</requiredCapacities>
|
||||||
|
</WorkGiverDef>
|
||||||
|
|
||||||
</Defs>
|
</Defs>
|
||||||
|
|||||||
+26
-17
@@ -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**;
|
policing, and justice that put them there. Each mod is a separate install on a shared **Core**;
|
||||||
together they form one system.
|
together they form one system.
|
||||||
|
|
||||||
> **Status (2026-07-15): shipped as a four-mod split.** The monolith split along its seams — the
|
> **Status (2026-07-15): shipped as a five-layer suite behind one install.** The monolith split into
|
||||||
> substrate became **Institution: Core** (propensity, criminal record, secured context), the
|
> **Core** (propensity, criminal record, secured context, the shared treatment engine), **Contraband**
|
||||||
> corrections systems became **Institution: Justice** (classification, deterrence, discipline,
|
> (the physical smuggling loop), **Justice** (classification, deterrence, discipline, parole, regime,
|
||||||
> parole, regime), the gang layer became **Institution: Gangs**, and **Institution: Contraband** is
|
> and **policing** — colony crime → a weighed arrest), **Gangs** (contraband economies), and **Ward**
|
||||||
> now the physical smuggling loop. **Foul Play** stands alone and bridges in. See the
|
> (psychiatric care), folded in from a former standalone sister mod. All five bundle into the single
|
||||||
> [README](README.md) for the current mod table and dependencies. The design sections further down
|
> **Institution** mod with a toggle each while staying separate repos; **Foul Play** stands alone and
|
||||||
> predate the split in how they *group* modules, but the mechanics and the north star are unchanged;
|
> bridges in. See the [README](README.md) for the current mod table.
|
||||||
> a policing/cops layer (pre-arrest) is where **Justice** grows next.
|
>
|
||||||
|
> 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
|
## North star
|
||||||
|
|
||||||
@@ -100,17 +106,20 @@ which PR then *enriches* when present. The test of a healthy deferral: with PR a
|
|||||||
|
|
||||||
## Suite modules
|
## 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 |
|
| **Core** | propensity, criminal record, secured context, the shared treatment engine, the deterrence seam | **shipped** |
|
||||||
| **Institution: Contraband** | conceal / improvise / search / confiscate / intake / escape / secure-areas | building |
|
| **Contraband** | conceal / improvise / search / confiscate / intake / escape / secure-areas / corruption | **shipped** |
|
||||||
| **Institution: Ward** | involuntary psychiatric commitment — the third pawn state | built |
|
| **Justice** | policing (crime → witnesses → investigate → weighed arrest), classification, deterrence feedback, discipline, parole, rehabilitation, regime | **shipped** |
|
||||||
| **Institution: Regime** | daily schedule (vanilla Restrict) + modest needs + visitation, for every secured context | planned |
|
| **Gangs** | prisoner & colony gangs, rivalries, contraband networks | **shipped** |
|
||||||
| **Institution: Justice** | the crime loop (commit → discover → investigate → attribute → arrest), policing officer, parole/discharge/manumission | planned |
|
| **Ward** | involuntary psychiatric care — the third pawn state, on Core's treatment engine | **shipped** (folded in) |
|
||||||
| **Institution: Discipline** | security classification / segregation, punishment-as-order, corruption | planned |
|
| **Foul Play** | throw a container of something off a body; vessels + substances + Piss Nuke flagship | **shipped** (standalone, bridges in) |
|
||||||
| **Institution: Gangs** | prisoner & colony gangs, rivalries, contraband networks | planned |
|
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
## 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):
|
`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
|
The **grade** shows for every held pawn (classification's information pillar); *in solitary* while a
|
||||||
when it is far enough from ordinary to matter — *Colony order: low (28%) — crime pays here* / *high
|
discipline term runs; the **rehabilitation** line for a pawn set to reform. And because the colony's
|
||||||
(71%) — order holds*.
|
**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*.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user