Wiki: player-facing rewrite of every layer + add a scenario FAQ, linked from Home

This commit is contained in:
flan
2026-07-16 02:18:25 +00:00
parent ff703271ba
commit 8250dcb369
32 changed files with 1654 additions and 2510 deletions
+52 -84
View File
@@ -4,29 +4,29 @@
You already build a minimum wing and a max block. You already put the psychopath behind steel and the
teenage pickpocket behind a wooden door. Classification does not replace those walls, cells and locks —
it answers the question vanilla never does: **who belongs where.** It reads the one shared
`CriminalRecord` every module writes to and turns it into a single verdict, so the crime system, the
search, the escape and the classifier all agree on how dangerous a pawn is, because they read the same
number.
it answers the question vanilla never does: **who belongs where.** It reads the one shared record every
part of the suite writes to and turns it into a single verdict, so the crime system, the search, the
escape and the classifier all agree on how dangerous a pawn is, because they read the same number.
Grade drives everything downstream: search frequency, privileges, escape risk, and — critically —
parole eligibility ([Parole](Parole.md) gates on grade).
> The isolation *toll* of a max/solitary placement is Prisoner Realism's (good) sim. Justice only
> The isolation *toll* of a max/solitary placement is Prisoner Realism's (good) sim. Corrections only
> decides the placement.
---
## The tiers
`SecurityGrade` is four bands, low to high — the tiers players already build, named:
Every held pawn falls into one of four security grades, low to high — the tiers you already build,
named:
| Grade | Risk score | Reading |
|---|---|---|
| **Minimum** | `< 0.35` | Barely a disposition, clean record. Open dorm, light watch. |
| **Medium** | `0.35 – 0.79` | A real record or a real nature. Proper cell, routine search. The parole ceiling. |
| **Maximum** | `0.80 – 1.49` | Repeat offender or proven flight risk. Steel, solitary door, frequent search. |
| **Supermax** | `≥ 1.5` | The headline cases. Escapes plus crimes plus a dark nature. Never let them near a wall. |
| **Minimum** | below 0.35 | Barely a disposition, clean record. Open dorm, light watch. |
| **Medium** | 0.35 – 0.79 | A real record or a real nature. Proper cell, routine search. The parole ceiling. |
| **Maximum** | 0.80 – 1.49 | Repeat offender or proven flight risk. Steel, solitary door, frequent search. |
| **Supermax** | 1.5 and up | The headline cases. Escapes plus crimes plus a dark nature. Never let them near a wall. |
Note the ceiling at **Medium**: [Parole](Parole.md) will only consider a pawn graded Medium or below.
Grade is therefore not just a placement hint — it is the gate a pawn has to fall back through before
@@ -36,34 +36,27 @@ they can be released.
## The risk score
Risk is a `0..~3` number: baseline disposition plus everything on the record, minus reform earned.
Risk is a number from 0 to about 3: baseline disposition, plus everything on the record, minus reform
earned. Each thing a prisoner has done adds a fixed amount:
```
risk = Nature(pawn) * 0.5 // who they are, before they have done anything
+ escapeAttempts * 0.35 // a proven flight risk is the headline
+ crimesCommitted * 0.20
+ timesCaught * 0.15
+ contrabandMade * 0.10
- max(0, reform) * 0.4 // genuine reform earns a downgrade
risk = max(0, risk) // never negative
```
| Term | Weight | Why this weight |
| What it counts | Adds to risk | Why this weight |
|---|---|---|
| `Nature` (0..1) | `× 0.5` | Disposition alone can carry a pawn to Medium (Nature 0.7+), but never past it on its own. Character is a suspicion, not a conviction. |
| `escapeAttempts` | `× 0.35` | The heaviest per-event term. A pawn who *runs* is the one who ends up armed in your base. One attempt is worth nearly two crimes. |
| `crimesCommitted` | `× 0.20` | The staple. Steady, cumulative. |
| `timesCaught` | `× 0.15` | Caught contraband is worse than merely suspected. |
| `contrabandMade` | `× 0.10` | The lightest term — making a shiv is common; escaping with one is not. |
| `reform` (if > 0) | `− 0.4` | The only term that can *lower* the grade. At most −0.4 (reform capped at 1.0). |
| **Nature** (0 to 1) | nature × 0.5 | Disposition alone can carry a pawn to Medium (nature 0.7+), but never past it on its own. Character is a suspicion, not a conviction. |
| **Each escape attempt** | +0.35 | The heaviest per-event term. A pawn who *runs* is the one who ends up armed in your base. One attempt is worth nearly two crimes. |
| **Each crime committed** | +0.20 | The staple. Steady, cumulative. |
| **Each time caught** | +0.15 | Caught contraband is worse than merely suspected. |
| **Each contraband item made** | +0.10 | The lightest term — making a shiv is common; escaping with one is not. |
| **Reform earned** | up to −0.4 | The only thing that *lowers* the grade. At most −0.4, since reform caps at 1.0. |
The total is never allowed below zero.
Two facts fall out of the numbers, and both matter for how you play:
- **`timesSearched` is not in the formula.** Searching a pawn does not make them more dangerous —
only *finding* something (`timesCaught`) does. Search freely; it costs the prisoner no grade.
- **Reform can shift at most 0.4 of risk.** At `reform = 1.0`, the downgrade is `−0.4`. So a pawn
whose record *without reform* already totals `≥ 1.2` can never fall to Medium (`< 0.8`) no matter
how thoroughly they reform — and therefore can **never be paroled**. A prolific offender is a
- **Searching a prisoner does not raise their risk.** Only *finding* something does — a search that
turns up nothing costs the prisoner no grade. Search freely.
- **Reform can shift at most 0.4 of risk.** At full reform (1.0), the downgrade is −0.4. So a pawn
whose record *without reform* already totals 1.2 or more can never fall to Medium (below 0.8) no
matter how thoroughly they reform — and therefore can **never be paroled**. A prolific offender is a
life sentence. You will hold them, work them, or execute them; you will not release them. This is a
deliberate property of the weights, not an accident.
@@ -71,45 +64,34 @@ Two facts fall out of the numbers, and both matter for how you play:
## Worked example — grading a record
**Bram**, an Abrasive raider. Nature = `0.05 + 0.15 = 0.20`. He has three crimes, one escape attempt,
was caught twice, made two shivs, and has not been reformed (`reform = 0`).
**Bram**, an Abrasive raider, has a nature of 0.20. He has three crimes, one escape attempt, was caught
twice, made two shivs, and has not been reformed. Add it up:
```
risk = 0.20 * 0.5 = 0.100 (nature)
+ 1 * 0.35 = 0.350 (escape — the headline)
+ 3 * 0.20 = 0.600 (crimes)
+ 2 * 0.15 = 0.300 (caught)
+ 2 * 0.10 = 0.200 (contraband)
- 0 * 0.4 = 0.000 (no reform)
─────────
total = 1.550 → ≥ 1.5 → SUPERMAX
```
| Source | Contribution |
|---|---|
| nature 0.20 × 0.5 | 0.100 |
| 1 escape × 0.35 | 0.350 (the headline) |
| 3 crimes × 0.20 | 0.600 |
| caught twice × 0.15 | 0.300 |
| 2 shivs × 0.10 | 0.200 |
| no reform | 0.000 |
| **total** | **1.550** → Supermax |
Now treat him. Say patient handling and good conduct lift him to `reform = 0.40`:
Now treat him. Say patient handling and good conduct lift his reform to 0.40. That subtracts
0.40 × 0.4 = 0.16, dropping his risk to **1.39 → Maximum.** He falls a band.
```
risk = 1.550 - (0.40 * 0.4) = 1.550 - 0.160 = 1.390 → MAXIMUM
```
But notice: his reform-*less* risk is 1.55, well above 1.2. Even at perfect reform (1.0) he lands at
1.55 − 0.40 = 1.15 — still Maximum. **Bram is beyond parole for the rest of his life.** His record
decided that, not his disposition.
He drops a band. But notice: his reform-less risk is `1.55`, well above `1.2`. Even at perfect
`reform = 1.0` he lands at `1.55 − 0.40 = 1.15` — still Maximum. **Bram is beyond parole for the rest
of his life.** His record decided that, not his disposition.
Contrast **Cass**, a Kind pickpocket whose gentle nature floors her nature term at 0. She has one
crime, was caught once, no escapes, no contraband, no reform yet. Her risk is
(1 × 0.20) + (1 × 0.15) = **0.35 → Medium**, exactly on the line.
Contrast **Cass**, a Kind pickpocket. Nature = `clamp01(0.05 − 0.30) = 0`. One crime, caught once, no
escape, no contraband, `reform = 0`.
```
risk = 0 + 0 + (1*0.20) + (1*0.15) + 0 - 0 = 0.350 → MEDIUM (exactly on the line)
```
Give Cass the standard treatment to `reform = 0.30`:
```
risk = 0.350 - (0.30 * 0.4) = 0.350 - 0.120 = 0.230 → MINIMUM
```
Cass is now Minimum, and — being Medium-or-below with `reform ≥ 0.30` — **paroleable**. Same
institution, two futures, and the record told you which was which before you had to guess.
Give Cass the standard treatment up to reform 0.30. That subtracts 0.30 × 0.4 = 0.12, dropping her to
**0.23 → Minimum.** Cass is now Minimum, and — being Medium-or-below with reform at least 0.30 —
**paroleable.** Same institution, two futures, and the record told you which was which before you had
to guess.
---
@@ -117,31 +99,17 @@ institution, two futures, and the record told you which was which before you had
- **Segregate by grade, not by vibe.** Sort your cells to the four bands and put a pawn where their
score, not your hunch, says. The whole suite reads the record; you can too.
- **Escapes are the alarm.** One escape attempt (`+0.35`) will jump a middling pawn a band. If a pawn
- **Escapes are the alarm.** One escape attempt (+0.35) will jump a middling pawn a band. If a pawn
crosses into Maximum after a break attempt, believe it — treat them as the flight risk the number
says they are.
- **A clean nature is not a clean record.** A Kind pawn who has escaped twice still grades Maximum;
disposition is only half the score.
- **Watch the parole ceiling.** If you intend to release someone, keep their reform-less risk under
`1.2` — mostly that means limiting how deep their record gets *before* you start treating them. A
pawn you let rack up escapes and catches has sentenced themselves.
1.2 — mostly that means limiting how deep their record gets *before* you start treating them. A pawn
you let rack up escapes and catches has sentenced themselves.
- **Reform is the only lever that lowers a grade.** See [Discipline & Reform](Discipline-and-Reform.md)
for how to move it, and [Parole](Parole.md) for where the grade gate lands.
---
## For modders
```csharp
SecurityGrade grade = Classification.Grade(pawn); // the verdict
float score = Classification.Risk(pawn); // the raw 0..~3 number
```
Both are pure reads — `Risk` uses `GameComponent_CriminalRecords.PeekFor` and never creates a record.
`SecurityGrade` is an ordered enum (`Minimum < Medium < Maximum < Supermax`), so `grade <= Medium`
comparisons work as written. The type lives in the `Contraband` namespace (Justice was extracted from
Institution: Contraband and kept the shared namespace).
---
*Part of the **Institution** suite for RimWorld 1.6: Core · Contraband · Policing · Corrections · Gangs · Ward.*
+55 -88
View File
@@ -2,62 +2,57 @@
*Punishment as an action, with a self-complete payoff — and the seat of institutionalization.*
> This page is the **maths** — what a disciplinary act does to reform and order. What *drives* it in
> This page is the **numbers** — what a disciplinary act does to reform and order. What *drives* it in
> play (a warden's rehabilitation sessions, and neglect that hardens) is [Rehabilitation](Rehabilitation.md).
Punishment in Justice does two things at once, on two different axes:
Punishment does two things at once, on two different axes:
1. **It deters the colony.** Order seen to be done raises the climate of order for everyone —
`RecordPunishment`, `+0.12`. See [Deterrence](Deterrence.md).
2. **It reshapes the punished.** A harsh hand *prisonizes* — the pawn hardens, `reform` falls, their
disposition climbs for good. A corrective hand *rehabilitates* — `reform` rises, their disposition
1. **It deters the colony.** Order seen to be done raises the climate of order for everyone: any act of
discipline adds **+0.12** to the colony's order. See [Deterrence](Deterrence.md).
2. **It reshapes the punished.** A harsh hand *prisonizes* — the pawn hardens, reform falls, their
disposition climbs for good. A corrective hand *rehabilitates* — reform rises, their disposition
cools for good.
Both effects are Justice's own, so discipline is never inert. Prisoner Realism owns the passive *toll*
of isolation (a good sim of how solitary *feels*); Justice owns the *order* it produces and the
persistent *shift* it leaves on the pawn. When both mods are present, PR's solitary deterioration
Both effects belong to Corrections, so discipline is never inert. Prisoner Realism owns the passive
*toll* of isolation (a good sim of how solitary *feels*); Corrections owns the *order* it produces and
the persistent *shift* it leaves on the pawn. When both mods are present, PR's solitary deterioration
deepens the felt experience on top — it does not replace this.
---
## The two hands
```
Discipline.Punish(pawn, harsh):
Justice.RecordPunishment(pawn.Map) // +0.12 colony climate (Deterrence)
reform = Clamp(reform + (harsh ? -0.15 : +0.10), -1, +1) // the persistent shift
```
Every disciplinary act moves the prisoner's **reform** score, in one of two directions:
| Call | Reform delta | Meaning |
| The hand | Reform change | Meaning |
|---|---|---|
| `Punish(pawn, harsh: true)` | **−0.15** | Beatings, deprivation, the hard hand. Hardens — "prisonization." |
| `Punish(pawn, harsh: false)` | **+0.10** | Correction, structure, rewarded good conduct. Rehabilitates. |
| **Harsh** | **−0.15** | Beatings, deprivation, the hard hand. Hardens — "prisonization." |
| **Corrective** | **+0.10** | Correction, structure, rewarded good conduct. Rehabilitates. |
`reform` lives on the shared record, clamped to `[−1, +1]`:
Either way, the act also adds **+0.12** to the colony's order — the colony sees order done, whoever it
was done to.
| `reform` | Reading |
Reform lives on the shared record, clamped between −1 and +1:
| Reform | Reading |
|---|---|
| `+1.0` | Fully rehabilitated |
| `0.0` | Untouched — as they came in |
| `−1.0` | Fully hardened, institutionalized |
| **+1.0** | Fully rehabilitated |
| **0.0** | Untouched — as they came in |
| **−1.0** | Fully hardened, institutionalized |
Note the asymmetry the other way from Deterrence: **harsh (−0.15) moves faster than gentle (+0.10).**
It takes three corrective acts to build `+0.30` of reform; two harsh acts to tear down `−0.30`. Damage
is quicker than repair — as it should be.
Note the asymmetry: **harsh (−0.15) moves faster than gentle (+0.10).** It takes three corrective acts
to build +0.30 of reform; two harsh acts to tear down −0.30. Damage is quicker than repair — as it
should be.
---
## How reform becomes disposition
Reform is not a status effect or a mood buff. It is read straight back into `Propensity.Nurture` (in
Core), where it multiplies a pawn's whole disposition:
Reform is not a status effect or a mood buff. It feeds straight back into a pawn's **disposition** —
Core's underlying "would they act out?" multiplier — scaling their whole disposition up or down and
keeping it there. The size of that scaling is set entirely by reform:
```
if reform != 0:
Nurture *= Clamp(1 - reform * 0.5, 0.4, 2)
```
| `reform` | Nurture factor | Effect |
| Reform | Disposition factor | Effect |
|---|---|---|
| −1.00 (hardened) | **1.500** | +50% more disposed — permanently |
| −0.30 | 1.150 | +15% |
@@ -67,78 +62,50 @@ if reform != 0:
| +0.30 (parole threshold) | 0.850 | −15% |
| +1.00 (rehabilitated) | **0.500** | −50% less disposed — permanently |
Given reform is clamped to `[−1, +1]`, the factor spans `0.5×` to `1.5×`; the `0.4`/`2` clamp is a
safety rail that reform alone never reaches. **This is the whole trick.** Institutionalization and
recidivism are not a parallel mechanic bolted on the side — they are *one number the propensity engine
already reads*. A hardened pawn is not flagged "recidivist"; they simply carry a `−reform` that makes
every "would they?" roll for the rest of their life come up hot. Discipline and Parole are what *move*
reform; Nurture only *reads* it — which is how institutionalization becomes Justice's without a second
system.
Because reform is clamped between −1 and +1, the factor spans 0.5× to 1.5×. **This is the whole
trick.** Institutionalization and recidivism are not a parallel mechanic bolted on the side — they are
*one number the disposition already reads*. A hardened pawn is not flagged "recidivist"; they simply
carry a negative reform that makes every "would they?" roll for the rest of their life come up hot.
Discipline and Parole are what *move* reform; disposition only *reads* it — which is how
institutionalization emerges without a second system.
---
## Worked example — two sentences
Take a fresh prisoner, `reform = 0`, badly kept: mood `0.30`, held. From Core, before reform, their
Nurture is already `1 × 1.6 (mood) × 1.4 (held & unhappy) = 2.24`, and say the colony sits at baseline
so `DeterrenceFactor = 1.05`, giving Nurture `≈ 2.35`.
Take a fresh prisoner with reform 0, badly kept: mood 0.30, held. Before any reform, their disposition
is already running hot — a bad mood (×1.6) and a held-and-unhappy cell (×1.4) combine, and with the
colony at baseline the pawn sits around **2.35× disposition**.
**The hard hand.** You beat them into line — three harsh punishments:
```
reform: 0 → -0.15 → -0.30 → -0.45
Nurture factor at reform -0.45 = 1 - (-0.45 * 0.5) = 1.225
```
Their disposition is now `2.35 × 1.225 ≈ 2.88` — **+22% hotter than when they arrived**, forever,
independent of mood. You have made them more criminal, not less. This is prisonization: the sentence
itself became the cause. (You did buy `+0.36` of colony climate along the way — order today, at the
cost of the pawn's tomorrow.)
**The hard hand.** You beat them into line — three harsh punishments take reform to −0.45. At that
reform the disposition factor is 1.225, so their disposition is now 2.35 × 1.225 ≈ **2.88 — +22% hotter
than when they arrived**, forever, independent of mood. You have made them more criminal, not less.
This is prisonization: the sentence itself became the cause. (You did buy +0.36 of colony order along
the way — order today, at the cost of the pawn's tomorrow.)
**The corrective hand.** Instead you structure and reward — three gentle punishments *and* you fix
their conditions (recreation, decent cell) so mood recovers to `0.55`:
```
reform: 0 → +0.10 → +0.20 → +0.30
mood 0.55 → no mood multiplier, not held-&-unhappy → those factors drop out
Nurture factor at reform +0.30 = 1 - (0.30 * 0.5) = 0.85
```
Now Nurture is roughly `1 × 0.85 × 1.05 (deterrence) ≈ 0.89` — **below neutral.** The same pawn who
would have been `2.88` disposed is now `0.89`. And at `reform = 0.30` with a low enough grade they
have crossed the [Parole](Parole.md) threshold. Same institution, opposite outcomes — decided by which
hand you used.
their conditions (recreation, decent cell) so mood recovers to 0.55. Reform rises to +0.30, and the
recovered mood drops the "badly kept" and "held-and-unhappy" penalties entirely. The disposition factor
at +0.30 reform is 0.85, so their disposition is now roughly **0.89 — below neutral.** The same pawn who
would have been 2.88 disposed is now 0.89. And at reform 0.30 with a low enough grade they have crossed
the [Parole](Parole.md) threshold. Same institution, opposite outcomes — decided by which hand you used.
---
## How to play with discipline
- **Harsh is a lever, not a punishment button.** It buys colony order *now* (`+0.12` climate) at the
price of the pawn's disposition *forever* (`−0.15` reform → hotter Nurture). Use it when you need the
deterrence and never intend to release the pawn — a Supermax lifer you are only ever going to hold.
- **Gentle is how anyone gets out.** Parole needs `reform ≥ 0.30`; only the corrective hand builds it.
Three gentle acts is the floor.
- **Damage compounds; repair is slow.** `−0.15` vs `+0.10` means a pawn you brutalize early is
expensive to bring back — and a hardened pawn commits more crime, which sinks the climate, which
makes *everyone* worse. Don't harden pawns you might want later.
- **Harsh is a lever, not a punishment button.** It buys colony order *now* (+0.12) at the price of the
pawn's disposition *forever* (−0.15 reform → hotter disposition). Use it when you need the deterrence
and never intend to release the pawn — a Supermax lifer you are only ever going to hold.
- **Gentle is how anyone gets out.** Parole needs reform 0.30 or higher; only the corrective hand
builds it. Three gentle acts is the floor.
- **Damage compounds; repair is slow.** −0.15 vs +0.10 means a pawn you brutalize early is expensive to
bring back — and a hardened pawn commits more crime, which sinks the climate, which makes *everyone*
worse. Don't harden pawns you might want later.
- **Conditions and discipline stack.** Reform shifts disposition permanently; mood, neglect and
deterrence shift it live (see [Regime](Regime.md) and [Deterrence](Deterrence.md)). A reformed pawn
in a well-run wing is calm on two axes at once.
---
## For modders
```csharp
Discipline.Punish(pawn, harsh: true); // -0.15 reform, +0.12 climate
Discipline.Punish(pawn, harsh: false); // +0.10 reform, +0.12 climate
```
`Punish` uses `GameComponent_CriminalRecords.For` (creates the record if absent) and clamps `reform`
to `[−1, +1]`. It always fires `RecordPunishment` on the pawn's map, so *any* act of discipline moves
the colony climate regardless of which hand you use — the colony sees order done, whoever it was done
to. The class lives in the `Contraband` namespace (shared since the extraction from Contraband).
---
*Part of the **Institution** suite for RimWorld 1.6: Core · Contraband · Policing · Corrections · Gangs · Ward.*
+15 -14
View File
@@ -5,9 +5,9 @@
Vanilla RimWorld's prisoners are interchangeable mood-boxes; a "maximum security" wing is a decoration
the sim never acknowledges, and a warden's work never changes who a pawn becomes. **Corrections turns
the shared record into a regime you run** — it grades every held pawn from what they have actually done,
moves a *reform* score that decides whether a sentence hardens or heals, gates release on it, and gives
prisoners the recreation need vanilla flatly denies them.
the prison into a regime you run** — it grades every held pawn from what they have actually done,
tracks a *reform* score that decides whether a sentence hardens or heals a prisoner, gates release on
it, and gives prisoners the recreation need vanilla flatly denies them.
---
@@ -15,31 +15,32 @@ prisoners the recreation need vanilla flatly denies them.
| Page | What it covers |
|---|---|
| **[Classification](Classification.md)** | Grades held pawns `Minimum`..`Supermax` from a risk score over the record; wall-mounted security markers grade a whole wing; misplacement flags. |
| **[Classification](Classification.md)** | Grades held pawns Minimum..Supermax from a risk score over their record; wall-mounted security markers grade a whole wing; misplacement alerts. |
| **[Discipline & Reform](Discipline-and-Reform.md)** | Punishment moves the reform score — harden ("prisonized") vs. rehabilitate. The seat of institutionalization and recidivism. |
| **[Rehabilitation](Rehabilitation.md)** | The warden work that drives the arc: a rehabilitate mode + counselling sessions move reform and colony order, a parole alert + release, neglect that hardens. |
| **[Parole](Parole.md)** | Release a reformed, low-grade prisoner as a free colonist; with Ideology, the execution stance sets the bar. Nested, primed for a future parole panel. |
| **[Rehabilitation](Rehabilitation.md)** | The warden work that drives the arc: counselling sessions move reform and colony order, a parole alert and release, neglect that hardens. |
| **[Parole](Parole.md)** | Release a reformed, low-grade prisoner as a free colonist; with Ideology, your execution stance sets the bar. |
| **[Regime](Regime.md)** | Prisoner recreation (Yard/Lockup schedule via Prison Labor's timetable), visitation, cell-safety. |
---
## The one shared record
## One shared record
Corrections keeps no per-pawn crime state of its own. It reads and writes the single `CriminalRecord`
that **Institution: Core** holds — the same record Contraband, Policing, and the gang systems read.
Corrections authors the `reform` / `pardoned` columns via Discipline and Parole, and grades and gates
over all the counters its siblings feed. Reform and rehabilitation run on Core's shared **treatment
engine**, the same one Ward's psychiatric care uses.
Corrections keeps no crime history of its own. Every held pawn carries a single record that
**Institution: Core** maintains — the same record Contraband, Policing, and the gang systems all read
and write. Discipline and Parole write the *reform* and *pardon* onto it; classification grades and the
release gate read back over every counter its siblings feed in. Reform and rehabilitation run on Core's
shared treatment system, the same one Ward's psychiatric care uses — so a prisoner's whole arc, from
first crime to parole, is one continuous history rather than a pile of separate flags.
---
## Requirements & load order
- **RimWorld 1.6**
- **Institution: Core** — required (the propensity/record/treatment engine)
- **Institution: Core** — required (the disposition, record, and treatment systems)
- **Institution: Policing** — required (the shared climate of order: discipline and rehab nudge it, the
inspect pane reads it)
- **Harmony** — required (Regime's prisoner-recreation patch)
- **Harmony** — required (Regime's prisoner-recreation feature)
- Load **after** Core, Policing, and Harmony.
---
+48 -86
View File
@@ -2,78 +2,62 @@
*Release, driven by what the pawn has become.*
> This page is the release **decision** (`CanRelease`). The warden work that acts on it — the
> "Ready for parole" alert and the release job that frees a parolee back into the colony — is
> [Rehabilitation](Rehabilitation.md).
> This page is the release **decision**. The warden work that acts on it — the "Ready for parole" alert
> and the release that frees a parolee back into the colony — is [Rehabilitation](Rehabilitation.md).
Parole is the end of the arc, and it is deliberately a *decision*, not a mechanic that rebuilds the
game's release flow. It asks one question — **is this pawn ready?** — and answers it from two things
already on the record: the reform the sentence earned (or failed to earn), and the grade the record
warrants. Both are self-complete reads; nothing here re-simulates a pawn's future.
warrants.
> The *return* outcome — a grateful ally, a vengeful raider — is Prisoner Realism's Recidivism, a good
> sim Justice does not rebuild. Justice's mirror is the parolee who **stays** and may reoffend,
> carrying their record into the colony (a Justice follow-up).
> sim Corrections does not rebuild. Corrections' mirror is the parolee who **stays** and may reoffend,
> carrying their record into the colony.
---
## The gate
```
CanRelease(pawn):
rec = record for pawn (peek, no create)
if rec == null: return true // nothing on record to hold them
if rec.pardoned: return false // already released
return rec.reform >= 0.30
&& Classification.Grade(pawn) <= SecurityGrade.Medium
```
Three conditions, all of which must hold:
A prisoner can be paroled only when **all three** of these hold:
| Condition | Threshold | Why |
|---|---|---|
| Not already pardoned | `pardoned == false` | Release is a one-way flag; you can't re-parole. |
| Genuinely reformed | `reform ≥ 0.30` | Proof the sentence *healed* rather than hardened. Three corrective acts minimum. |
| Low enough grade | `Grade ≤ Medium` (risk `< 0.8`) | Reform of attitude is not enough — the *record* must have cooled to something you'd let out. |
| Not already pardoned | never released before | Release is one-way; you can't re-parole. |
| Genuinely reformed | reform 0.30 or higher | Proof the sentence *healed* rather than hardened. Three corrective acts minimum. |
| Low enough grade | grade Medium or below (risk under 0.8) | Reform of attitude is not enough — the *record* must have cooled to something you'd let out. |
A pawn with **no record at all** is releasable trivially (there is nothing to hold them). Everyone
else has to earn all three.
A pawn with **no record at all** is releasable trivially (there is nothing to hold them). Everyone else
has to earn all three.
The grade gate and the reform gate interact in a way worth internalizing. Because reform subtracts at
most `0.4` from risk ([Classification](Classification.md)), a pawn whose reform-*less* risk is `≥ 1.2`
most 0.4 from risk ([Classification](Classification.md)), a pawn whose reform-*less* risk is 1.2 or more
can never reach Medium — so **no amount of reform will ever parole a prolific offender.** Parole is for
pawns whose record stayed shallow enough that treatment can pull them back under the ceiling. Let a
pawn rack up escapes and catches and you have quietly converted them into a lifer, whatever their
attitude.
pawns whose record stayed shallow enough that treatment can pull them back under the ceiling. Let a pawn
rack up escapes and catches and you have quietly converted them into a lifer, whatever their attitude.
---
## Release
```
Release(pawn):
record.pardoned = true
```
`Release` sets one flag: `pardoned`. Vanilla does the actual freeing; the flag is Justice's memory
that this pawn was let out after genuine reform, so reintegration can grant a clean slate and
`CanRelease` won't offer them twice. A modest faction-goodwill / relationship nudge for a well-handled
release is the immediate payoff, wired when the release job lands.
Releasing a parolee marks a **pardon** on their record. Vanilla does the actual freeing; the pardon is
Corrections' memory that this pawn was let out after genuine reform, so reintegration can grant a clean
slate and the pawn won't be offered for parole twice. A modest faction-goodwill / relationship nudge for
a well-handled release is the immediate payoff.
---
## The whole arc
The pawn moves through every Justice module in turn, and each one writes the record the next one reads:
The pawn moves through every stage in turn, and each one writes the record the next one reads:
| Stage | Module | What moves | Record touched |
| Stage | Where it lives | What moves | What's recorded |
|---|---|---|---|
| 1. Crime | [Deterrence](Deterrence.md) | Climate `−0.08`; the colony runs hot | `crimesCommitted++`, `lastCrimeTick` |
| 2. Caught & held | [Classification](Classification.md) | A grade is assigned from the record | reads all counters |
| 3. Discipline | [Discipline](Discipline-and-Reform.md) | `reform` moves ±; climate `+0.12` | `reform` |
| 4. Reform | [Discipline](Discipline-and-Reform.md) → Core | Disposition cools as reform rises | `reform` (read by Nurture) |
| 5. Regrade | [Classification](Classification.md) | Reform subtracts risk; grade falls | reads `reform` |
| 6. **Parole** | this page | Gate opens when reform ≥ 0.30 **and** grade ≤ Medium | reads `reform`, `pardoned`; sets `pardoned` |
| 1. Crime | [Deterrence](Deterrence.md) | Climate −0.08; the colony runs hot | a crime, and when it happened |
| 2. Caught & held | [Classification](Classification.md) | A grade is assigned from the record | reads every counter |
| 3. Discipline | [Discipline](Discipline-and-Reform.md) | Reform moves ±; climate +0.12 | reform |
| 4. Reform | [Discipline](Discipline-and-Reform.md) → Core | Disposition cools as reform rises | reform (read by disposition) |
| 5. Regrade | [Classification](Classification.md) | Reform subtracts risk; grade falls | reads reform |
| 6. **Parole** | this page | Gate opens at reform 0.30 **and** grade Medium or below | reads reform and pardon; sets pardon |
It is a loop, not a line: the crime that opens stage 1 also cools the colony's climate, which the *next*
pawn's disposition reads — so one pawn's whole sentence is faintly present in every other pawn's odds.
@@ -82,46 +66,37 @@ pawn's disposition reads — so one pawn's whole sentence is faintly present in
## Worked example — a sentence that ends in release
**Cass**, a Kind pickpocket. Nature `= clamp01(0.05 − 0.30) = 0`. She arrives with one crime, caught
once, no escapes, no contraband, `reform = 0`.
**Cass**, a Kind pickpocket whose gentle nature floors her nature term at 0. She arrives with one crime,
caught once, no escapes, no contraband, no reform yet. Her risk is (1 × 0.20) + (1 × 0.15) = **0.35 →
Medium.** She is already Medium-or-below, so the *grade* gate is met — but her reform is 0, so she is not
yet releasable.
```
Grade at intake:
risk = 0 + 0 + (1*0.20) + (1*0.15) + 0 - 0 = 0.35 → MEDIUM
CanRelease? reform 0 < 0.30 → NO
```
You give her the corrective hand three times (structure, rewarded conduct) and fix her cell so she
isn't stewing. Reform rises to 0.30, which subtracts 0.30 × 0.4 = 0.12 from her risk, dropping her to
**0.23 → Minimum.** Now all three gates are met — reform at least 0.30, Minimum is below Medium, and
she's never been pardoned — so **Cass is paroleable.** Pardon her and she walks.
She is already Medium-or-below, so the *grade* gate is met — but her `reform` is `0`. You give her the
corrective hand three times (structure, rewarded conduct), and fix her cell so she isn't stewing:
```
reform: 0 → +0.10 → +0.20 → +0.30
Grade now: risk = 0.35 - (0.30 * 0.4) = 0.23 → MINIMUM
CanRelease? reform 0.30 ≥ 0.30 AND Minimum ≤ Medium AND not pardoned → YES
```
`Release(Cass)` sets `pardoned = true`. She walks. Contrast **Bram** from the Classification page,
whose reform-less risk of `1.55` keeps him at Maximum even at `reform = 1.0` — `CanRelease` returns
`false` for Bram forever, because the grade gate never opens. Two prisoners, the same treatment, and
the record decides which one you can ever let go.
Contrast **Bram** from the Classification page, whose reform-less risk of 1.55 keeps him at Maximum even
at full reform — the grade gate never opens for him, so he can never be paroled. Two prisoners, the same
treatment, and the record decides which one you can ever let go.
---
## A note on record cleanup
A pawn whose record is `IsBlank` — no crimes, no escapes, no contraband, no catches, `reform == 0`,
not pardoned — is dropped on save/load (Core prunes blank and dead-pawn records). A *pardoned* pawn is
therefore **not** blank and their record persists: the pardon is remembered. This is why a released
parolee who stays and reoffends still carries their history — Justice does not forget that they were
A pawn with a completely empty record — no crimes, no escapes, no contraband, no catches, no reform, no
pardon — is forgotten on save/load (Core prunes blank and dead-pawn records). A *pardoned* pawn is
therefore **not** empty, and their record persists: the pardon is remembered. This is why a released
parolee who stays and reoffends still carries their history — Corrections does not forget that they were
once let out.
---
## Ideology-flavoured thresholds
Precepts layer on top of this baseline, not under it: an execution-favouring ideoligion paroles
rarely, a lenient one readily. `CanRelease` is the substrate-native baseline those precepts modulate —
the floor beneath the flavour, so the decision is coherent whether or not Ideology is installed.
Precepts layer on top of this baseline, not under it: an execution-favouring ideoligion paroles rarely,
a lenient one readily. The gate above is the baseline those precepts modulate — the floor beneath the
flavour, so the decision is coherent whether or not Ideology is installed.
---
@@ -129,25 +104,12 @@ the floor beneath the flavour, so the decision is coherent whether or not Ideolo
- **Parole is earned, not granted.** You cannot release your way out of a deep record. Decide early
whether a pawn is a keep-or-release case and treat (gently) the ones you mean to free.
- **`reform ≥ 0.30` is three gentle acts, minimum.** Nothing faster reaches it. Start early.
- **Keep the record shallow if you want the option.** Every escape (`+0.35`) and catch (`+0.15`) you
let accumulate pushes a pawn toward the unparoleable side of the `1.2` line.
- **A parolee who stays is a Justice case, not a farewell.** They carry their record; if conditions
- **Reform 0.30 is three gentle acts, minimum.** Nothing faster reaches it. Start early.
- **Keep the record shallow if you want the option.** Every escape (+0.35) and catch (+0.15) you let
accumulate pushes a pawn toward the unparoleable side of the 1.2 line.
- **A parolee who stays is a Corrections case, not a farewell.** They carry their record; if conditions
sour, their disposition (still reading their history) can put them back on it.
---
## For modders
```csharp
if (Parole.CanRelease(pawn)) // pure read: reform, grade, pardon
Parole.Release(pawn); // sets pardoned = true
```
`CanRelease` peeks (never creates a record) and treats a missing record as releasable. `Release` uses
`For` (creates if absent) and is idempotent — a second call is a no-op once `pardoned` is set. Both
live in the `Contraband` namespace (shared since Justice's extraction from Contraband).
---
*Part of the **Institution** suite for RimWorld 1.6: Core · Contraband · Policing · Corrections · Gangs · Ward.*
+34 -75
View File
@@ -3,93 +3,62 @@
*The daily life of the held — and the one lever vanilla withholds.*
Most of what a prison regime needs, vanilla already gives you. The schedule is the Restrict tab. The
mood-driven disposition already flows through `Propensity.Nurture` — a neglected prisoner runs hotter
with no new machinery. So Regime does not rebuild any of that. It adds the single thing vanilla flatly
refuses to model: **recreation.**
mood-driven disposition already flows through the colony's underlying systems — a neglected prisoner
runs hotter with no new machinery. So Regime does not rebuild any of that. It adds the single thing
vanilla flatly refuses to model: **recreation.**
---
## What vanilla does, and what Regime flips
Vanilla denies prisoners the **Joy** (recreation) need outright — the need is flagged `colonistsOnly`
and `neverOnPrisoner`, so it simply never appears on a prisoner. A caged pawn has no recreation bar,
cannot take joy from anything, and never suffers for its absence.
Vanilla denies prisoners the **Joy** (recreation) need outright — the need is flagged colonists-only, so
it simply never appears on a prisoner. A caged pawn has no recreation bar, cannot take joy from
anything, and never suffers for its absence.
Regime flips exactly that one bit on, via a small Harmony postfix — the same approach the good, popular
**Prisoner Recreation** mod takes:
```csharp
[HarmonyPatch(typeof(Pawn_NeedsTracker), "ShouldHaveNeed")]
static class Patch_PrisonerRecreation
{
static void Postfix(NeedDef nd, Pawn ___pawn, ref bool __result)
{
if (__result || nd?.defName != "Joy") return; // only touch Joy, only when vanilla said no
if (___pawn?.RaceProps?.Humanlike == true
&& ___pawn.IsPrisonerOfColony)
__result = true; // humanlike prisoners get the need
}
}
```
Three guards, in order:
1. **`__result` already true** — vanilla or another patch already granted the need. Do nothing. This
is what makes the patch *additive*: it only ever turns a `false` into `true`, never the reverse.
2. **`nd.defName != "Joy"`** — this patch is about recreation and nothing else. Every other need is
left exactly as vanilla decided.
3. **humanlike prisoner-of-colony** — animals, guests, slaves and colonists are untouched; only a
humanlike prisoner of *your* colony gains the need.
Regime flips exactly that one bit on — the same approach the good, popular **Prisoner Recreation** mod
takes. It grants the recreation need to **humanlike prisoners of your colony** and nothing else: animals,
guests, slaves and colonists are untouched, only the recreation need is affected, and it only ever
*adds* the need where vanilla withheld it — it never removes a need another mod granted.
That is the entire mechanism. Enabling recreation is trivial — once the need exists, vanilla does all
the rest (joy sources, the recreation bar, the mood effects of a full or empty one). The *value* is
not the plumbing; it is what an empty bar now costs.
the rest (joy sources, the recreation bar, the mood effects of a full or empty one). The *value* is not
the plumbing; it is what an empty bar now costs.
---
## Why a need you can neglect is the point
Giving prisoners recreation is not a mercy toggle — it is a **lever with two ends**, and the down end
is the one that matters to the suite. Once a prisoner *has* the Joy need, they can be **starved** of
it, and vanilla's own machinery then does the work:
Giving prisoners recreation is not a mercy toggle — it is a **lever with two ends**, and the down end is
the one that matters to the suite. Once a prisoner *has* the Joy need, they can be **starved** of it, and
vanilla's own machinery then does the work: no recreation lowers Joy, which lowers mood, and a low mood
raises the pawn's disposition — their odds on every "would they?" roll.
```
no recreation → Joy falls → mood falls → Propensity.Nurture rises → higher propensity
```
Every one of those steps already exists. Regime only opens the first door; mood is wired to disposition
in Core, so a prisoner who gets no yard time stews, their mood sinks, and their disposition climbs.
From [Deterrence](Deterrence.md) and [Discipline & Reform](Discipline-and-Reform.md) you already know
disposition is the multiplier the whole system keys off; Regime is what lets *neglect* feed it.
Every one of those arrows already exists. Regime only opens the first door; mood is wired to
disposition in Core, so a prisoner who gets no yard time stews, their mood sinks, and their Nurture —
and with it their odds on every "would they?" roll — climbs. From [Deterrence](Deterrence.md) and
[Discipline & Reform](Discipline-and-Reform.md) you already know Nurture is the multiplier the whole
system keys off; Regime is what lets *neglect* feed it.
Concretely, a prisoner's mood pushes their disposition into these brackets:
Concretely, in Core's `Nurture`:
| Prisoner condition | Nurture contribution |
| Prisoner condition | Disposition contribution |
|---|---|
| Mood `< 0.20` (recreation-starved, at the floor of despair) | `× 2.5` |
| Mood `< 0.35` (badly kept) | `× 1.6` |
| Held **and** mood `< 0.40` (a badly run cell) | additional `× 1.4` |
| Mood below 0.20 (recreation-starved, at the floor of despair) | ×2.5 |
| Mood below 0.35 (badly kept) | ×1.6 |
| Held **and** mood below 0.40 (a badly run cell) | an additional ×1.4 |
A prisoner you give no recreation is a prisoner you are pushing up those brackets. Regime turns "I
didn't bother building a rec room" from a non-event into a disposition cost you pay on every roll.
---
## Idempotent with Prisoner Recreation
## Works alongside Prisoner Recreation
If you also run the **Prisoner Recreation** mod, nothing breaks. Both mods do the same thing — force
`ShouldHaveNeed` to return `true` for prisoner Joy — and because Regime's postfix only acts when
`__result` is still `false`, the two are simply *two postfixes that force the same `true`*. Whichever
runs first grants the need; the second sees it already granted and returns immediately. Running both is
harmless. Running either alone is sufficient. There is no double-need, no conflict, no load-order
sensitivity between them.
If you also run the **Prisoner Recreation** mod, nothing breaks. Both mods do the same thing — grant the
recreation need to prisoners — and because Regime only acts when the need isn't already granted,
whichever runs first grants it and the other sees it already done. Running both is harmless. Running
either alone is sufficient. There is no double-need, no conflict, no load-order sensitivity between them.
Regime announces itself at startup so you can confirm it loaded:
```
[Institution: Justice] Regime: prisoner recreation enabled.
```
Regime prints a short startup message so you can confirm it loaded and prisoner recreation is enabled.
---
@@ -97,8 +66,8 @@ Regime announces itself at startup so you can confirm it loaded:
Yard time, safety needs, and visitation are *content* on this foundation, not new machinery. Each of
them is just another thing that moves a prisoner's mood — and mood is already wired to disposition — so
they need only defs and jobs, not new systems. When they land, they will make a well-run regime feel
richer; the mechanical spine is already here in this one postfix.
they build on the same spine that this one recreation change put in place. When they land, they make a
well-run regime feel richer without adding new systems underneath.
---
@@ -108,7 +77,7 @@ richer; the mechanical spine is already here in this one postfix.
their disposition sits near baseline. A cheap horseshoe pin or chess table earns its keep in crimes
that don't happen.
- **Neglect is a choice with a number.** Leaving prisoners with nothing to do isn't neutral — it drives
mood into the `×1.6` and `×2.5` Nurture brackets, and a hotter prisoner reoffends, which cools your
mood into the ×1.6 and ×2.5 disposition brackets, and a hotter prisoner reoffends, which cools your
colony's climate of order, which heats *everyone*. The rec room is deterrence you build once.
- **Recreation and reform stack.** Regime cools disposition *live* (through mood); reform cools it
*permanently* (through [Discipline & Reform](Discipline-and-Reform.md)). A reformed prisoner in a
@@ -117,14 +86,4 @@ richer; the mechanical spine is already here in this one postfix.
---
## For modders
Harmony ID `flan.institution.justice`, a single postfix on `Pawn_NeedsTracker.ShouldHaveNeed`. It is
the suite's *only* Harmony-using code — Contraband dropped its Harmony dependency after Justice was
split out. The patch class lives in the `Contraband` namespace (shared across the suite since the
extraction). The postfix is strictly additive (`false → true` only), so it is safe to stack with any
other mod that grants prisoner needs.
---
*Part of the **Institution** suite for RimWorld 1.6: Core · Contraband · Policing · Corrections · Gangs · Ward.*
+64 -69
View File
@@ -1,112 +1,108 @@
# Rehabilitation — the post-arrest loop, wired
# Rehabilitation
*The warden work that finally drives discipline, reform, and parole. Source in
`Source/Justice/Corrections/`.*
*The warden work that drives discipline, reform, and parole.*
Classification, discipline, deterrence, and parole always had their **maths** — a grade over the
record, a reform score punishment moves, an order climate, a release decision. What they lacked was a
**trigger**: nothing in play called them. Reform never moved, so classification never re-graded and
parole never fired; the only thing that raised the colony's order was a punishment nothing invoked.
The post-arrest half of the loop was real code with no way to run it.
Classification, discipline, deterrence, and parole set the rules — a grade over the record, a reform
score punishment moves, an order climate, a release decision. Rehabilitation is what a warden actually
*does* day to day to move a prisoner through them. Without it, reform sits still, classification never
re-grades, and parole never fires; with it, the whole post-arrest arc comes alive.
Rehabilitation is that trigger. It gives corrections the same treatment Ward gave psychiatric care —
a **prisoner interaction mode**, **warden jobs**, an **alert**, and an inspect readout — so a warden
actually reforms a prisoner over time and paroles them when they have turned a corner.
It gives corrections the same shape Ward gives psychiatric care — a **prisoner interaction mode**,
**warden work**, an **alert**, and an **inspect readout** — so a warden reforms a prisoner over time and
paroles them when they have turned a corner.
---
## The two modes
Both are non-exclusive prisoner interaction modes (the shape Prison Labor and Ward use), so they
Both are non-exclusive prisoner interaction modes (the same kind Prison Labor and Ward use), so they
stack with each other and with recruit / reduce-resistance.
| Mode | What a warden does | Result |
|---|---|---|
| **Rehabilitate** | Runs counselling sessions on the prisoner | Reform rises, the reform track fills, colony order rises |
| **Rehabilitate** | Runs counselling sessions on the prisoner | Reform rises, the reform bar fills, colony order rises |
| **Parole when reformed** | Releases the prisoner **once they are eligible** | A paroled colonist, back in the colony |
Set **Rehabilitate** alone to run the programme and parole by hand when the alert fires; set **both**
for a hands-off "reform, then release" pipeline. A prisoner flagged for parole who is *not yet*
eligible is simply not acted on — the warden waits.
for a hands-off "reform, then release" pipeline. A prisoner flagged for parole who is *not yet* eligible
is simply not acted on — the warden waits.
---
## A rehabilitation session
A warden walks to the prisoner and counsels them for ~1250 ticks (about 20 in-game minutes), Social
being the active skill. On completion (never on interruption — the credit is a follow-on toil), one
session does three things, in `CorrectionsUtility.RunReformSession`:
A warden walks to the prisoner and counsels them for about 20 in-game minutes, with Social as the
active skill. On completion (never on interruption — you only earn credit for a finished session), one
session does three things:
1. **Corrective discipline** — `Discipline.Punish(prisoner, harsh: false)`: reform **+0.10**, and the
punishment is recorded, which raises the colony's **order** by `+0.12`. This is the deterrence-up
half that punishment alone never triggered — visible corrective justice deters everyone else.
2. **The reform track** — `TreatmentProgram.AdvanceRecovery` advances `Institution_Reforming` on
Core's shared treatment engine, by `0.34 × cell quality × skill`. It is the visible progress bar,
and it **decays** (`−0.08/day`), so rehabilitation has to be *sustained*.
1. **Corrective discipline** — a gentle disciplinary act: reform **+0.10**, and it raises the colony's
**order** by **+0.12**. This is the deterrence-up half that punishment alone never triggered —
visible corrective justice deters everyone else.
2. **The reform bar** — the visible progress bar fills, by **0.34 × cell quality × skill** per session,
and it **decays −0.08/day**, so rehabilitation has to be *sustained*.
3. **A memory** — the prisoner feels counselled (a small mood lift).
| Input | Range | Source |
| Input | Range | Depends on |
|---|---|---|
| skill factor | `0.5 … 1.0` | warden's Social level |
| cell quality | `0.5 … 1.5` | `TreatmentProgram.FacilityQuality` (room impressiveness) |
| reform / session | `+0.10` | `Discipline.Punish` (fixed) |
| order / session | `+0.12` | `Justice.RecordPunishment` |
| skill factor | 0.5 … 1.0 | the warden's Social level |
| cell quality | 0.5 … 1.5 | the cell's impressiveness |
| reform per session | +0.10 | fixed |
| order per session | +0.12 | fixed |
Reform reaches the parole bar (`≥ 0.30`) in roughly **three completed sessions**, faster than a bad
cell or a poor counsellor fills the visible track — so the "Ready for parole" alert keys off the real
gate (`Parole.CanRelease`), not the bar.
Reform reaches the parole bar (0.30) in roughly **three completed sessions** — faster than a bad cell or
a poor counsellor fills the visible bar. So the "Ready for parole" alert keys off the real gate, not the
bar you see filling.
---
## Neglect — the teeth
A prisoner you flag for rehabilitation and then never attend **hardens**, exactly as a ward you don't
staff does. `MapComponent_ReformNeglect` measures the days since the last real session; past **two
days** of neglect, reform falls `−0.15/day` and they resent it (a mood hit). The hardening lowers
reform *directly*, not through `Discipline.Punish` — neglect is passive prisonization, not an act of
visible justice, so unlike a session it must **not** raise the colony's order.
staff does. Once more than **two days** pass since the last real session, reform falls **−0.15/day** and
they resent it (a mood hit). This hardening lowers reform *directly*, not as an act of visible justice —
neglect is passive prisonization, so unlike a session it does **not** raise the colony's order.
Attend the prisoner and the clock resets; flag them and walk away and they slide back toward the
record that put them in. "A reform programme you don't staff is worse than none."
Attend the prisoner and the clock resets; flag them and walk away and they slide back toward the record
that put them in. "A reform programme you don't staff is worse than none."
---
## Parole — the release that stays
When a rehabilitated prisoner clears `Parole.CanRelease` — reform `≥ 0.30`, security grade
`≤ Medium`, not already pardoned — the **Ready for parole** alert names them. A warden set to Parole
then processes the release (`CorrectionsUtility.ReleaseOnParole`):
When a rehabilitated prisoner clears the parole gate — reform 0.30 or higher, security grade Medium or
below, not already pardoned — the **Ready for parole** alert names them. A warden set to Parole then
processes the release:
- marks the **pardon** on the record;
- clears the prisoner hold so a former colonist is a **free colonist again** — a parolee who *stays*
in the colony carrying their record, not vanilla's release that ejects them from the map;
- clears the prisoner hold so a former prisoner becomes a **free colonist again** — a parolee who
*stays* in the colony carrying their record, not vanilla's release that ejects them from the map;
- a grateful memory, and a small **+0.03** to order (a lawful release is visible justice too).
The parolee keeps their `CriminalRecord`, so if they reoffend the [policing](Policing.md) loop catches
them again — recidivism, closing back onto the start.
The parolee keeps their record, so if they reoffend the [policing](Policing.md) loop catches 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.
**Discipline** and a warden puts them in **solitary**: harsh discipline *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 blocks 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:
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.
- **Wing-routing.** A wall-mounted **security marker** grades the cell block it stands in
(`Minimum`..`Supermax`, set with a gizmo). One marker covers a *whole block* — a prisoner takes the
grade of the nearest marker in range, so you tag a corridor once rather than cluttering every cell. A
(Minimum..Supermax, set with a gizmo). One marker covers a *whole block* — a prisoner takes the grade
of the nearest marker in range, so you tag a corridor once rather than cluttering every cell. A
**"Dangerous prisoner unsecured" alert** then flags any prisoner held in a wing too weak for their
grade, and the inspect pane shows their wing and a `MISPLACED` warning — move them to a stronger
grade, and the inspect pane shows their wing and a **MISPLACED** warning — move them to a stronger
wing. An ungraded wing falls back to flagging an unsegregated Maximum/Supermax pawn.
- **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,
@@ -117,9 +113,9 @@ Classification always computed a **security grade** (`Minimum`..`Supermax`); now
Beyond punishment and reform, the held have a **daily life**:
- **Yard / Lockup schedule.** Two timetable blocks set a held pawn's day: **Yard** allows recreation
(with the prisoner Joy need Regime enables, they head out to a rec area), **Lockup** confines them to
the cell and stews their mood. The timetable itself is **Prison Labor's** — this reads it when PL is
present and is inert without it, so PL stays compatible: read, never fought.
(with the prisoner recreation need Regime enables, they head out to a rec area), **Lockup** confines
them to the cell and stews their mood. The timetable itself is **Prison Labor's** — Corrections reads
it when PL is present and does nothing without it, so PL stays compatible.
- **Visitors.** A prisoner or ward patient with family or a bond gets **visitors** — a friendly party
walks in under the game's own visitor AI and congregates by their cell, and the break from isolation
lifts their mood. Thematically strongest for a ward patient whose family comes to see them.
@@ -128,28 +124,27 @@ Beyond punishment and reform, the held have a **daily life**:
## Seeing it
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):
Every colony prisoner's inspect pane now carries the corrections readout:
> *Security grade: Maximum* · *In solitary* · *Rehabilitation: reforming (40%) — neglected (3d)* ·
> *reformed — ready for parole*
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*.
The **grade** shows for every held pawn; *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*.
---
## What this closes
With rehabilitation wired, the whole post-arrest arc runs in play: **discipline** moves reform,
**classification** re-grades as reform rises, **deterrence** climbs on visible justice (not just
falls on crime), **parole** releases the reformed, and Core's **treatment engine** carries the reform
track the same way it carries Ward's recovery. The loop closes back onto disposition — catching,
reforming, and releasing one pawn moves the climate every other pawn is judged against.
With rehabilitation in play, the whole post-arrest arc runs: **discipline** moves reform,
**classification** re-grades as reform rises, **deterrence** climbs on visible justice (not just falls
on crime), **parole** releases the reformed, and Core's **treatment** carries the reform bar the same
way it carries Ward's recovery. The loop closes back onto disposition — catching, reforming, and
releasing one pawn moves the climate every other pawn is judged against.
Gated by `InstitutionSettings.justice`, like the rest of the corrections layer.
The whole corrections layer can be toggled off in the mod's settings, like the rest of the suite.
---