Files

38 KiB
Raw Permalink Blame History

The Institution suite — master roadmap

A set of RimWorld mods about what an institution does to the people inside it — and the crime, policing, and justice that put them there. Each mod is a separate install on a shared Core; together they form one system.

Status (2026-07-16): a six-layer suite behind one install, at 0.1.0. Along the separation of powers the suite is: Core (propensity, criminal record, secured context, the shared treatment engine, the deterrence seam), Contraband (the physical smuggling loop), Policing (colony crime → investigation → a weighed arrest → the deterrence feedback loop → riots), Corrections (classification, discipline & reform, parole, regime), Gangs (contraband economies), and Ward (psychiatric care). The former Justice module was split into Policing + Corrections and is deprecated/archived. All six bundle into the single Institution mod with a toggle each while staying separate repos; Foul Play stands alone and bridges in. See the README for the current mod table.

The full loop — crime → witnesses → investigate → weighed arrest → contraband/gangs → rehabilitate → parole, on the shared treatment engine — is wired and harness-verified (45/0), and two audit→zero passes plus a headless tuning run are behind it. The shared code namespace is now Institution (was Contraband). A future Judiciary layer (a court: charge → trial → sentence) is reserved as a Core sentence seam — no dead code added. What remains before a real release is, above all, playtesting to tune the numbers (they are still first guesses) and the Steam Workshop upload. The design sections below predate the split in how they group modules, but the mechanics and north star are unchanged.

North star

Every pawn has a criminal propensity on a spectrum — nature (traits) × nurture (circumstance, mood, treatment) — and the colony can police it.

The same seeded disposition engine that drives the piss spree (WouldFoulPeople = disposition × circumstance, fixed per pawn), generalized. The suite is the two halves of that:

  • Pre-arrest — colonists commit crimes on a spectrum; a policing layer discovers, investigates, and catches them. Arrest is the hinge.
  • Post-arrest — prison, contraband, improvised weapons, escape, wards, secure areas, the daily life of the held, and the path back out (parole / discharge / manumission).

The load-bearing principle: SECURED CONTEXT, not "prisoner"

Nothing hard-codes "prisoner." The subject of every held-person system is a secured context — a pawn held in a controlled space, subject to search, following a regime:

Context Members Authority Release path
Prison prisoners warden parole
Psych ward (Ward mod) committed patients orderly / warden discharge (when treated)
Slavery (Ideology) slaves overseer manumission (Ideology)
Secure area anyone inside a zone assigned guard leave the zone

A committed patient rides the vanilla prisoner rail (Ward's Ward_PsychiatricCare mode), so contraband, search, schedule, needs, and visitation already apply to ward patients for free — and to slaves via a small Ideology-gated extension. Every system below reads SecuredContextOf(pawn), never IsPrisonerOfColony directly. Build prisoner-first, against the predicate, and ward + slave + secure-area fall out without a rewrite.

Design tone: standards are low on the rim. Needs and expectations for the held are modest — a prisoner does not expect a spa. Don't over-model comfort; a little goes a long way.


System wiring — the four connections that make it a system, not a pipeline

A full-lifecycle audit (propensity → crime → policing → prison → release → back) found the gaps are not missing features — they are missing connections. Without these four, the suite is a linear pipeline of modules; with them, it is a living system. Build them as first-class, not afterthoughts.

  • A. A shared substrate (build FIRST). One implementation, in Contraband (the central framework), that every module reads and writes: a propensity stat (nature × nurture, the Disposition engine generalized). Cross-mod merge shipped 2026-07-15: Foul Play answers "how disposed is this pawn" through a Disposition.Source seam that defaults to its own light read; when Contraband is present, the bridge repoints it at Contraband's full nature×nurture, so the two mods never disagree about the same person (harness: FPBRIDGE propensity.merged = True). This is the substrate principle applied ACROSS mods, not just within one. Also the SecuredContextOf(pawn) predicate (prisoner/ward/slave/zone), and a per-pawn CriminalRecord (crimes committed, escapes, contraband made, reform progress). Without this, each module reinvents "how criminal is this pawn" and they disagree — the crime system thinks a pawn is dangerous while classification thinks they are docile. Everything downstream keys off the substrate.

  • B. Crime has real effects. Theft actually removes the goods; assault actually injures; sabotage actually damages the building; targets are chosen via vanilla relationships. Without real, detectable harm, crime is a flag with nothing for an investigation to find (no missing goods = no evidence).

  • C. Deterrence feedback closes the loop. Catching and punishing crime feeds back into the propensity engine: visible justice deters (others' propensity drops), unpunished crime spreads (propensity rises when it pays), visible cruelty radicalizes (over-harsh punishment breeds resentment → more crime). This is what makes policing govern rather than merely clean up, and it is the connection that turns the pipeline into a cycle.

  • D. Reintegration. A caught → imprisoned → reformed → released colonist carries their record back: distrust from those they wronged, or a genuine clean slate if truly reformed (ideology-flavoured). Closes the colonist-crime cycle instead of leaving it dangling.

A/B/C are load-bearing; D rounds it out. These are the wiring; everything in the module table below is the features that hang off it.

Design constraint (2026-07-15): defer the depth, never the payoff. The propensity → contraband → detection → record spine is entirely ours and is self-complete without any third-party mod — it is what the suite is about, and deferring PR's prisoner-behaviour sims (recidivism, riot, solitary-toll, institutionalization, mood-contagion) leaves no hole in it, because none of those sit on that spine. The one place the deferral could ring hollow solo is the RESPONSE side: Discipline and Parole. So each response action must carry its own minimal self-complete effect — parole gives an immediate faction-goodwill / relationship nudge; discipline revokes privileges with a modest mood/record consequence — rather than borrowing PR's deeper toll. That is not a rebuild of PR (no returning raiders, no 3-tier solitary): it is our own decision having an immediate payoff, which PR then enriches when present. The test of a healthy deferral: with PR absent the loop still closes (the decision has an effect); with PR present the effect gets deeper, never doubled.

Suite modules

Layer (repo) Scope Status
Core propensity, criminal record, secured context, the shared treatment engine, the deterrence seam shipped
Contraband conceal / improvise / search / confiscate / intake / escape / secure-areas / corruption shipped
Justice policing (crime → witnesses → investigate → weighed arrest), classification, deterrence feedback, discipline, parole, rehabilitation, regime shipped
Gangs prisoner & colony gangs, rivalries, contraband networks shipped
Ward involuntary psychiatric care — the third pawn state, on Core's treatment engine shipped (folded in)
Foul Play throw a container of something off a body; vessels + substances + Piss Nuke flagship shipped (standalone, bridges in)

The seven-mod plan became five layers over Core: Regime and Discipline folded into Justice rather than minting separate mods. Discipline-as-order, classification enforcement (grade readout, a dangerous-prisoner alert, and wing-routing — a wall-mounted security marker grades a whole cell block and flags a prisoner held in a wing too weak for them), cell safety, ideology-flavoured parole, visitation, and the Yard/Lockup schedule (via Prison Labor's prisoner timetable — read, never fought) all ship. The roadmap's feature list is complete. What remains is not features but playtesting — none of the suite is tuned by real play, and that is the single largest thing between here and a good release.


Regime — daily life of the held

Schedule (use vanilla, don't reinvent)

RimWorld already has Pawn_TimetableTracker + TimeAssignmentDef and the Restrict tab. Extend that to secured pawns rather than building a new regime UI. Prison Labor (1899474310, 176k) already puts force-to-work prisoners in the Restrict grid — build on that pattern, don't fight it.

  • Give secured pawns a timetable; surface it in the Restrict tab.
  • Two new TimeAssignmentDefs cover the prison-specific blocks vanilla lacks: Yard (go to a designated yard/commons — ties to Prison Commons) and Lockup (confined to cell). Eat/Sleep/ Work/Joy map to existing assignments.
  • A think-tree branch makes secured pawns honour their timetable (they already have a prisoner think-tree branch to hook).
  • Ward routine and slave work-schedule are the same machinery, different default timetables.

Needs (modest — standards are low)

Do NOT build a full Prison Architect needs sim. One or two low-stakes needs, keyed to the schedule:

  • Yard / open air — satisfied by the Yard block. Vanilla already has the Outdoors need; check whether it applies to secured pawns and lean on it before adding one.
  • Safety — a modest mood factor from feeling safe (few violent cellmates, guards present).
  • Recreation is already covered by Prisoner Recreation (815726158) — don't rebuild.

Keep the magnitudes small. A satisfied schedule = a quiet wing; neglect = the disposition engine tips more pawns over the edge (feeding contraband, breaks, gang recruitment).

Visitation

Off-map visitors and related pawns visit the held. A genuine greenfield gap — Hospitality is guests only and never touches prisons.

  • A visitation room role; scheduled visiting hours (a schedule block).
  • A prisoner/patient with family or faction ties gets visits; the warden/orderly supervises.
  • Feeds a modest Family/social mood boost. Thematically strongest for the ward — a committed patient's family visiting is exactly right — and it is a supply route for contraband (a visitor smuggles something in → Contraband's conceal system).

Justice — the crime loop (the missing middle)

The heart. Without discovery + investigation, "crime" is just a random bad event, not something you police. The loop:

commit → discover → investigate → attribute → arrest → (held) → release

  • Commit. A colonist acts on their propensity (nature: traits incl. VTE 2296404655 646k kleptomaniac/pyromaniac — integrate as inputs, don't rebuild; nurture: our stat). Crimes: theft, contraband possession, sabotage, arson, assault, at the serious end murder.
  • Discover. The colony learns a crime happened: missing goods, a body, damage, filth, or a witness. Discovery is not automatic — a crime in an unwatched place may go unnoticed.
  • Witnesses / informants. A colonist near the act may witness it → report, be intimidated into silence, or inform for favour. The cheap, characterful detection layer.
  • Investigate. A policing officer works the scene: evidence, opportunity, the stolen goods in someone's concealed stash (ties to Contraband search!), narrowing suspects.
  • Attribute. Evidence points to a pawn. Confidence, not certainty — wrongful accusation is a possible, dramatic failure.
  • Arrest. Vanilla's one law verb. The hinge into the held systems.

Policing officer

Guarding is owned (Guards For Me 1855885448, 88k — patrol/bodyguard, external threats only), the catching is not. Build the officer who investigates and arrests criminal colonists; lean on Guards For Me's guard role where present rather than reinventing patrol.

Parole / discharge / manumission — release, driven by IDEOLOGY

The payoff that makes Ward's treatment and good behaviour mean something. Release is not a flat timer — the colony's Ideology precepts decide the policy (MayRequire Ideology; a vanilla fallback for non-Ideology games):

  • A harsh / execution-favouring ideoligion rarely paroles (executes or works-to-death instead).
  • A rehabilitative / lenient ideoligion paroles readily on reform + good behaviour.
  • Parole (prisoner), discharge (ward patient, when treated — the Ward analog), manumission (slave, Ideology's own freeing) are one mechanism with three faces.
  • A released, reformed pawn has reduced recidivism — integrate with Prisoner Realism's recidivism (3760196312) rather than duplicate it: our reform lowers its return chance.

Sentencing timers exist (Prisoner Sentencing 3736998871) — defer to it; add only the ideology-driven decision, not another timer.


Discipline — control

  • Classification / segregation — make the wings players already build MEAN something. Players already hand-build min / medium / max / solitary blocks with zones, cells and locks. RimWorld just has no notion of who belongs where or whether they are correctly placed. We do not replace the building — we add the intelligence layer on top of it, and it becomes the router that connects the whole suite:

    • Grade (information). Each secured pawn gets a risk grade computed from disposition × traits × history (escape attempts, contraband made, guards attacked, murder on record). The player stops guessing who is dangerous — the game tells them "this one is max."
    • Assignment + misplacement flag (enforcement). Tag a wing's grade; the system routes prisoners to the matching wing and warns when a max-grade pawn sits in a min cell. Vanilla gives zero feedback here today.
    • Dynamic re-classification (dynamics). Grade moves with behaviour: an escape attempt or a shanking upgrades them; Ward treatment + good conduct + time downgrades them. This wires classification straight into the behaviour loop.
    • Grade gates the other systems (the payoff). Grade drives search frequency (Contraband — max = frisked often), privileges (Regime — yard/visitation/recreation restricted by grade), escape risk (a dangerous pawn in a weak cell escapes more), and reform eligibility (Justice).
    • The tension that makes it a decision. Over-classify (everyone in max/solitary) = safe but mood craters, reform fails, ideology frowns on cruelty, and warden-hours explode. Under-classify (everyone min) = cheap and happy but they walk out. Classifying correctly is the game; we supply the information and the consequences that make it one.

    No mod auto-classifies (manual wing-building is emergent player behaviour, not a mod), so the system is an uncontested gap even though the physical tiers are common.

  • Punishment as a player order. Issue solitary / lockdown / privilege-revocation as a discipline action. Distinct from Prisoner Realism's passive solitary toll — we add the order and its interface; defer the mood consequence to Realism where present.

  • Warden personality & corruption (expanded 2026-07-15). A search is only as thorough as the warden running it. Diligence is a function of the warden's personality (traits: a Kind or Lazy warden frisks gently; an Abrasive or dutiful one turns the cell over) and circumstance (mood, their relationship to the prisoner, how run-down the prison is). Three faces of the same guard-integrity axis, all reading the same warden→prisoner state:

    • Search intensity. Personality + circumstance scale find-chance and how often a warden bothers — the lax warden misses what the hard-ass finds. (Extends WorkGiver_Warden_Search + JobDriver_SearchPawn's find roll, which already take Social skill; add the warden's disposition.)
    • Forgiveness. A warden may deliberately overlook certain items — a sympathetic guard ignores a prisoner's smokeleaf, a jar of hooch, a family photo. Per-warden tolerance, per-item, so the same contraband survives one guard and not another.
    • Bent wardens smuggle IN. A corrupt/bribed/romantically-entangled warden becomes a supply route — they hand contraband TO a prisoner (the Conceal door already noted in Contraband as "a bent warden"). This is the corruption payoff and the thing that feeds a Gang's network.
    • Secure zones are the counter-play. A search-zone checkpoint frisks anyone passing through, guards included — so a bent warden carrying contraband in can be caught at the door. This wires corruption ↔ secure zones (the generalized secure-area search) ↔ the search loop: the same JobDriver_SearchPawn that turns over a prisoner turns over a guard at a checkpoint.

    Self-complete (reads vanilla traits/mood/relationships); no dependency. This is where the contraband loop stops being "the game vs. the player" and becomes "the player's own guards, who each have their own angle."


Gangs — as contraband economies (NOT mood)

Re-scoped 2026-07-15: Prisoner Realism's Ringleader already owns mood contagion from a dominant prisoner, and it is good — so we do not touch mood. Our gap is the contraband network: prisoners (and colonists) form factions that move contraband — a supply chain with a supplier, runners, and a tax, where segregating rivals (Classification) starves a network and a bent warden (Corruption) feeds one. Ties to disposition (who joins), contraband (what they move, the one system PR has nothing like), and classification (segregate rivals). The richest, latest module — build after the loop works.


Build order (fills the meta-gap: don't build it all at once)

  1. The crime loop core — discover + witnesses + investigate + attribute, applied to free colonists (the uncontested gap: vanilla+PR already handle prisoner arrest). Without it the whole crime thesis is inert. Build before individual crime types.
  2. Regime — schedule (vanilla Restrict) + one or two modest needs. Cheap, high-value, and it feeds the disposition engine (neglect → crime).
  3. Visitation — greenfield, thematically strong for the ward, doubles as a contraband route.
  4. Parole / discharge / manumission — the release decision, ideology-driven, PLUS its substrate-native payoffs: prisonization (the regime reshapes propensity over the sentence) and reintegrated-reoffending (a parolee who joins the colony carries their record and may reoffend). PR's departed-raider return layers on top when present. Gives Ward and good behaviour a real payoff.
  5. Classification (a router that reads the record + propensity and assigns a tier), then punishment-orders, then corruption.
  6. Gangs as contraband economies — last; needs the rest in place.

Deferred to Prisoner Realism on 2026-07-15 (it owns them, and it is good), as MECHANICS we do not rebuild: the isolation toll, mood-contagion gangs, and the departed-prisoner return. We still own the substrate-native, differently-axised versions of institutionalization (prisonization) and recidivism (reintegrated-reoffending) — the namesake themes — because only our propensity/record engine can.

Already in flight (Contraband/Foul Play): hooch, improvised weapons, fire-starter, escape tools, intake search, secure areas. See Contraband ROADMAP.

Intake shipped Harmony-free (2026-07-15): rather than the planned patch on the contested SetGuestStatus, it polls from the MapComponent tick that already visits every held pawn — a pawn not yet processed is one newly in custody. Keeps Contraband's zero-Harmony core intact and steers clear of the method Hospitality/Prison Labor already stack three patches on.

Foul Play — substance system, expanded (2026-07-15)

The chosen "finish substances" work grew into a full substance-cocktail system. Three parts, built on the existing SubstanceDef (data) + CompVessel (delivery) + CompFerment split:

  • Hooch. A fermentable substance whose harm is incendiary — set its damageDef to a flame def and the framework's own GenExplosion splash starts fires (a Molotov), no splash-code change. Fermentation makes a ripe (high-alcohol) hooch a stronger firebomb — the harm-vs-time axis, but running the other way. Also drinkable as alcohol (share vanilla Chemical_Alcohol if cheap).
  • Ferment in any liquid-holding furniture, not just toilets. Generalise to a capability: a fermentation SITE is any building that can hold liquid — a DBH toilet/tub/sink, a vanilla FermentingBarrel, a modded vat. Detected by recognizable identity (defName/label vocabulary: toilet, barrel, tub, sink, tank, vat, trough, cistern, latrine, urinal, basin) + known vanilla defs, dependency-free. Hooch requires a site (pruno needs a vessel); piss can use one for a bigger/faster batch but still brews from the body. Fits Foul Play's standing "works with all containers" rule.
  • Mixing — combine any substances. A vessel's contents become a blend of SubstanceDefs (piss + feces + semen + …), and SubstanceSplash applies each one's effects together — caustic + disease + humiliation in one throw. "Mix everything": the blend is a runtime list on the vessel, defaulting to the def's single substance when unmixed, so every existing vessel still works.

Universality principle (2026-07-15): Foul Play is for EVERY pawn; Contraband is the prison lens. Filling a vessel, fermenting it, throwing it, drinking it, and addicting to it are behaviours of any pawn — colonist, prisoner, slave, raider, visitor — gated by disposition (propensity), never by prisoner status. "Not just prisoners fill vessels; any pawn can and will." That is the propensity engine (already universal) driving substance behaviour, and it is the mechanics-level expression of the whole thesis: every pawn on a spectrum. The prisoner-only concept is concealment/search, which is Contraband's held-pawn overlay: a prisoner hides the vessel they filled as a secret; a free colonist just has it. So the prisoner gate lives ONLY on the conceal path (AcquireWorker), never on the fill/ferment/throw/drink behaviours. A universal "a disposed pawn fills a vessel" job is its own piece, separate from the contraband brew that hides the result.

Reframed 2026-07-15 (user directive): vessels are GENERIC, contents are RUNTIME. Hooch is not a bespoke item — it 1:1 models piss except it is flammable. A vessel is a generic container; what is in it (piss, hooch, feces, a blend) is instance state that can be filled, fermented, poured between vessels, drunk, and mixed. So there is no FP_Weapon_Hooch; there is FP_Hooch (a substance with a Flame damageDef) and a CompVessel whose substance is now runtime. Any fluid is drinkable with different consequences — a substance carries a drink outcome (hooch → alcohol, piss → sickness, feces → disease) alongside its throw outcome. Staged, each green, piss harness guarding throughout:

  1. Runtime substance on CompVessel — instance field (default = def's substance), scribed; throw/splash/label read it. Vessels become substance-agnostic. (Def names kept to avoid a breaking rename; label shows contents at runtime — "jar of hooch".)
  2. Drink any fluid, with different consequencesSubstanceDef.drinkOutcome; vessels ingestible, applying the current substance's consequence (hooch → alcohol high, piss → sickness, feces → gut rot, blood → nutrition + a disturbing thought / possible disease). Every fluid is a valid drink, just a worse or better idea. Blood is a substance too — a liquid like any other, drinkable and throwable. And any drink can breed addiction like a drug: each SubstanceDef carries an addiction rarity (hooch common, most fluids extremely rare), and the per-drink roll is modified by mental health + circumstances (a despairing, mistreated pawn addicts to things a content one never would) — same nature×nurture spine as propensity.
  3. Contraband content tag — a concealed vessel carries a generic content tag (Contraband stays ignorant of SubstanceDef; the bridge interprets it), so "a hidden jar of hooch" redeems correctly.
  4. Pour between vessels + mixing — a blend is a weighted amount-table; splash and drink apply every constituent scaled by its share. Container physics (user spec, 2026-07-15): vessels have a capacity; you can only mix into one with headroom, and a pour takes only up to that (a 50%-full jar of piss + cum poured in = 50/50, filled and no more). CompVessel.Pour moves liquid between carryable vessels in their current ratios, the destination reacting. STILL TO BUILD (the next layer): furniture containers hold liquid too (a DBH toilet, a barrel of wort) — but a fixed fixture cannot be tipped, so you dip a small vessel into it (fill the carryable from the fixture) rather than pour it out; and the one pawn action is pouring — a pawn-driven pour/dip job (uses the Pour primitive), which is what makes mixing happen in the world instead of only in code. This subsumes "ferment in a toilet": a fixture is just a big container you dip into.
  5. Fermentation-model overhaul — age + top-up dilution + sealed/open + temperature (mirror CompRottable) + spoil threshold; applies to every vessel, piss included. [SHIPPED]

Potency model (corrected 2026-07-15): age + storage, NOT container size. A liquid's potency is a function of how long it has fermented and how it is stored (a sealed vessel ripens and holds; an open one ferments differently and loses to evaporation) — never of how big the container is. Size already only drives fill-time and blast (VesselProfile), so CompFerment.Potency stays age-driven; the correction is that topping up dilutes age. A shared bucket/carboy that several prisoners keep using stays fresh (each fresh addition pulls the volume-weighted average age down), while a jar one prisoner fills once and hides ages to full potency. So "a jar of old piss and a bucket of fresh" both make sense — it is the usage pattern, not the vessel, that decides. Implementation: track age as a volume-weighted average, diluted on each add; sealed/open scales the ripen rate.

Temperature + spoilage (2026-07-15): mirror vanilla food rot. Fermentation is temperature-driven, exactly like meat — warm speeds it, a freezer nearly halts it, and past a point it spoils (goes from potent to ruined/maximally foul). Rather than invent this, reuse the vanilla mechanic: CompRottable already tracks temperature-weighted rot progress for food. The ferment model should lean on that same curve (or GenTemperature-driven accumulation) so "spoils like meat" is literally the meat code path — a prisoner's stash left in a hot cell turns fast, one in a cold one keeps. This makes the whole substance model a fermentation-model overhaul of CompFerment (age + dilution + sealed/open + temperature + spoil threshold), sequenced AFTER the hooch item ships, since it applies to every vessel — piss included — not just hooch.

Compatibility — the non-negotiable

The suite must load and run cleanly alongside the all-time most-subscribed Workshop mods, not just prison-adjacent ones — that is the load order most players actually run. The harness (Tools/run-compat-test.sh in the Ward repo) boots a real headless RimWorld with the suite plus this stack loaded at once and fails on any error naming our code.

Baseline stack (all 1.6, verified subs):

  • Frameworks: Harmony (3.2M) · HugsLib (2.5M) · Vanilla Expanded Framework (2.0M) · Humanoid Alien Races (1.1M).
  • Ubiquitous gameplay/AI: Pick Up And Haul (1.7M) · Common Sense (1.05M) · Simple Sidearms (954k) · Vanilla Furniture Expanded (1.08M) · EdB Prepare Carefully (1.67M).
  • UI (load-order neighbours): RimHUD (1.5M) · Allow Tool (1.36M) · Interaction Bubbles (1.15M) · Camera+ (997k).
  • Weapon/our-domain risk: Vanilla Weapons Expanded (985k) · VFE Furniture Security (865k) · Vanilla Brewing Expanded (589k) · Hospitality (798k).
  • Prison-adjacent (design overlap): Prison Labor · Prison Commons · Locks · Restraints · Custom Prisoner Interactions · Prisoner Realism · Prisoner Recreation · Dubs Bad Hygiene · Psychology · Rim Disorders · More Mental Breaks.

Combat Extended (387k, 1.6) gets its OWN dedicated pass, not the mixed stack: it overhauls verbs, projectiles, damage and armour — exactly our thrown-weapon surface — so an ambiguous failure in a 25-mod stack would be useless. Loading-clean-under-CE is a must-have; a tuned CE armour-penetration patch (MayRequire) is a strongly-recommended follow-up, not a release blocker.

How the suite earns this: zero-Harmony cores, Contraband optional via a LoadFolders bridge, every DLC/mod tie-in MayRequire-gated, and new content registered by capability (IsWeapon, IsDrug, category) rather than hard-coded lists — so modded weapons, drugs and races are covered without being named.

Self-complete, dependency-free — the standing rule

Two rules, and the second is the sharper one:

  1. Judge by QUALITY, not sub count. If an incumbent is actually good, keep it. A genuinely good mod — even a small one — is worth coexisting with rather than rebuilding: don't waste effort duplicating something done well (Prisoner Realism at 11k is a good deep sim → keep it). Only build our own where the incumbent is thin, absent, or mediocre on one of our crucial loops (Prisoner Recreation just flips vanilla Joy → trivially ours; the 334-sub crime mod is niche → the slot is open). Sub count is a hint, not the test.

  2. No hard dependencies. Every crucial loop is self-complete. The suite must be a whole, working system on its own. Third-party mods are coexistence targets that ENHANCE, never requirements. Where we integrate (Ideology precepts, Prisoner Realism's recidivism, Prison Labor's regime), it is always MayRequire-soft: the feature lights up if the mod is present and the loop still closes without it.

What this changes vs. a naive "defer to whoever got there first":

  • Recreation is ours to enable. Prisoner Recreation (38k) and Prisoner Realism (11k) ship no custom need — they just flip on the vanilla Joy need for prisoners. We do the same in our needs system: idempotent, coexists, zero dependency, no citing.
  • Recidivism → split by population, don't defer wholesale. (Revised twice: first "build modest", then "defer entirely", now corrected — see the namesake correction in the deep scan below.) PR's Recidivism handles the pawns who leave (released/escaped → return ally-or-raider by treatment); that is good and we do not rebuild it. We own the mirror: the paroled pawn who stays, joins the colony, and can reoffend inside it (their CriminalRecord + residual propensity → wiring gap D). Different population, no overlap. The release decision stays self-complete (ideology-driven); the reintegrated-reoffending is ours; the departed-return is PR's.
  • Solitary / isolation toll → DEFER to Prisoner Realism. PR's Solitary is a full 3-tier deterioration hediff with a Ringleader counterplay. Our Classification module does NOT reimplement the toll; it is a router — it reads the shared record + propensity and assigns the security tier (including whether to isolate). PR (or vanilla) then supplies the consequence of that assignment. Routing is the gap; the isolation sim is not.
  • Escape is self-complete: vanilla mental-break breaks + our disposition-driven arming + our contraband-tool wall-cut, which is scoped precisely to the pawns PR's break system does NOT move — chiefly ward patients (never "mood prisoners") and pawns too low-skill to pick a lock. PR owns the skilled-lockpick-a-DOOR-during-a-break path; we own the slow-file-through-a-WALL path for the calmly-committed. Complementary, not overlapping.

Genuinely leave alone (giant + redundant + not a gap in our loops): forced labor (Prison Labor 176k), hygiene (Dubs Bad Hygiene 632k), crime traits (Vanilla Traits Expanded 646k — we consume them as nature inputs), guest hosting (Hospitality 798k). Coexist with all; depend on none.

Prisoner Realism deep scan (2026-07-15) — the big incumbent, mapped feature-by-feature

Prisoner Realism (Steam 3760196312, 11,286 subs / 1,090 favs / 5-star, published 2026-07-07) is the one incumbent large enough to reshape our roadmap. It is a good mod (clean documented C#, multi-factor balance, defers to other mods where they overlap), so the standing rule says keep it and cut our overlaps. Its 20 features and our verdicts:

PR feature What it does Institution verdict
PrisonBreak rework MTB scaled by mood/relation/captor/strength Defer. Our arming rides vanilla/PR breaks.
No-mining / melee breakout strips sapper-dig; escapees bash doors Defer. Our wall-cut is a tool route, additive.
Keys / Lockpick skilled prisoner picks a DOOR, fast, no item Defer. We own file-through-a-WALL for non-break pawns.
Recidivism released/escaped return ally-or-raider by treatment Defer PR's mechanic; own the MIRROR — the reintegrated who STAY and reoffend (see below).
Institutionalized expectation/mood decay + reintegration struggle Defer the mood axis; own the PROPENSITY axis — prisonization (see below).
Solitary 3-tier isolation deterioration Defer the toll; Classification only routes to it.
Ringleader mood contagion from dominant prisoner Defer. Re-scopes our Gangs to contraband-networks.
Riot securely-caged-but-miserable → lash out Defer.
ArrestGrace / ArrestHere in-place arrest, no immediate bolt Defer. Our intake (keep-inventory + search) coexists.
Recreation flips on vanilla Joy for prisoners We enable the same idempotently (no citing).
Surrender, ForceFeed, RecruitOffer, Despair, Turrets, Cleaning, Carry, BedOwner, Surgery, Commons, AssistedBreak assorted prisoner-behavior sims Defer all; coexist.

Net effect: two modules re-scoped (Classification → pure router; Gangs → contraband economy, not mood) and the reintegration module re-founded on our substrate (see next). What remains is Institution's uncontested core: hidden-contraband + search, propensity across all pawns, Ward, Foul Play, classification-as-router, and the standout nobody touches — policing free colonists.

Namesake correction (2026-07-15): institutionalization & recidivism ARE ours — on a different axis

"Defer entirely" was an over-correction: in a suite named Institution, these are the namesake, and our substrate lets us build them on an axis PR structurally cannot, so it is complementary, not a rebuild. The rule: don't duplicate PR's mechanic; own the substrate-native version only we can.

  • Institutionalization → prisonization, and it is NOT a new system (2026-07-15). The lean form: Propensity.Nurture already raises criminal disposition for a badly-kept held pawn, dynamically. The only thing incarceration adds is PERMANENCE — an effect that outlasts the sentence — and we already have the field for it: CriminalRecord.reform (signed: harsh regime → negative/prisonized → propensity up; rehabilitative → positive/reformed → propensity down). So prisonization = have the EXISTING Nurture read that ONE existing field, which Discipline/Parole write. No parallel mechanic, no new stat. And we do not patch PR's institutionalization (that would make us depend on a one-week-old, fast-moving mod): when PR is present we soft-read its hediff as one more Nurture input (MayRequire, reflective, no patch) — the same additive-not-override posture as the tunnel.
  • Recidivism → the reintegrated who STAY (not the departed who leave). PR returns released/escaped pawns as allies-or-raiders. We own the mirror population: a paroled pawn who joins the colony carries their CriminalRecord + residual propensity and can reoffend inside your own walls — wiring gap D, closing the colonist-crime cycle. PR handles who left; we handle who stayed. No overlap.

These two are also the self-complete payoffs for Discipline and Parole (per the "defer the depth, never the payoff" constraint above): the regime you run visibly reshapes people, and a badly-reformed parolee bites you later — both work with PR absent, and PR's departed-raider return deepens it when present.

Prior-art sweeps done (2026-07-14/15)

Uncontested gaps, safe to build clean: contraband/search, improvised weapons, keep-inventory intake, secure-area search, nurture criminality stat, investigating officer, patient escape, visitation, classification, punishment-order, gangs, corruption. Partial (build the uncovered slice only): prisoner timetable, yard/safety/privacy needs, evidence/forensics investigation, active snitch/informant, reform-and-ideology-driven parole. The only prior art in the crime/parole space (Rimworld Law and Order, 334 subs) fails the popular bar, so that slot is open — build it without duplicating that niche mod exactly.

Architecture already honors rule 2

Zero hard dependencies anywhere: Foul Play stands alone, Contraband is optional to it (the LoadFolders bridge loads only when both are present), Ward stands alone, and every DLC/mod tie-in is MayRequire. No suite mod requires another suite mod or any third-party mod.