Files
institution/Wiki/justice/Parole.md
T
flan 3530100ed5 Aggregate the whole suite wiki onto the Institution page
Wiki/Home.md is the suite's front door; every layer's wiki now mirrors here
under Wiki/<layer>/ (core, contraband, justice, gangs, ward), so the whole
suite reads in one place with the index linking to the local pages. The
layer repos stay canonical -- Tools/sync-wiki.sh refreshes the aggregated
copy on demand. The README's main page points to it.
2026-07-15 20:30:38 +00:00

6.7 KiB
Raw Blame History

Parole

Release, driven by what the pawn has become.

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.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 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).