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.
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
# 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).*
|
||||
Reference in New Issue
Block a user