Wiki: player-facing rewrite of every layer + add a scenario FAQ, linked from Home
This commit is contained in:
@@ -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.*
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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.*
|
||||
|
||||
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user