7.0 KiB
Parole
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.
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.
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).
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:
| 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. |
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), a pawn whose reform-less risk is ≥ 1.2
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.
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.
The whole arc
The pawn moves through every Justice module in turn, and each one writes the record the next one reads:
| Stage | Module | What moves | Record touched |
|---|---|---|---|
| 1. Crime | Deterrence | Climate −0.08; the colony runs hot |
crimesCommitted++, lastCrimeTick |
| 2. Caught & held | Classification | A grade is assigned from the record | reads all counters |
| 3. Discipline | Discipline | reform moves ±; climate +0.12 |
reform |
| 4. Reform | Discipline → Core | Disposition cools as reform rises | reform (read by Nurture) |
| 5. Regrade | Classification | 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 |
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.
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.
Grade at intake:
risk = 0 + 0 + (1*0.20) + (1*0.15) + 0 - 0 = 0.35 → MEDIUM
CanRelease? reform 0 < 0.30 → NO
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.
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
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.
How to play with parole
- 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.30is 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 the1.2line. - A parolee who stays is a Justice 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
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 · Justice · Gangs. Developed with substantial assistance from Claude (Anthropic).