# 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](Classification.md)), 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](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` | 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 ```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 · Justice · Gangs. Developed with substantial assistance from Claude (Anthropic).*