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,118 @@
|
||||
# Institution: Ward
|
||||
|
||||
**Involuntary psychiatric commitment for RimWorld 1.6 — the third pawn state, neither free nor guilty.**
|
||||
|
||||
> **The psychiatric-care layer of the [Institution](https://git.onetick.ninja/flan/rimworld-institution)
|
||||
> suite.** Ward runs on Core's shared treatment engine and ships bundled in the single Institution
|
||||
> install with a toggle of its own; it still installs standalone (needing only Institution: Core and
|
||||
> Harmony). Once a separate sister mod, now folded in.
|
||||
|
||||
RimWorld gives a person exactly two places to stand: **colonist**, or **prisoner**. There is no
|
||||
third state for someone who is neither free nor guilty. Out of the box you cannot commit anyone. A
|
||||
colonist breaks, wanders off, punches a wall, recovers on their own, and goes back to hauling steel
|
||||
as though nothing happened. Mental breaks are episodic and amnesiac — nothing persists, nothing is
|
||||
*done* about them.
|
||||
|
||||
Ward adds the missing state, and the room to put it in. A colonist you arrest can be set to
|
||||
**psychiatric care**. Wardens counsel them at a **treatment station**. A room with prisoner beds
|
||||
and a treatment station is a **psychiatric ward**, not a prison cell. Treatment lowers the patient's
|
||||
mental-break threshold while it lasts — and it decays, so it has to be *sustained*. A ward you don't
|
||||
staff is worse than no ward at all.
|
||||
|
||||
---
|
||||
|
||||
## The third state, without a fourth enum slot
|
||||
|
||||
The reason "commit a colonist" isn't a stock feature is a single compiled fact. `RimWorld.GuestStatus`
|
||||
is a three-value enum:
|
||||
|
||||
```
|
||||
Guest = 0
|
||||
Prisoner = 1
|
||||
Slave = 2
|
||||
```
|
||||
|
||||
A mod **cannot add a fourth value** to a compiled enum. That one constraint drives every design
|
||||
decision in Ward — and in the rest of the ecosystem. It is why *Hospitality* carries dozens of
|
||||
Harmony patches to maintain a pawn who is in your colony but is not your colonist: the enum has no
|
||||
slot for one, so it runs a shadow guest system and defends it by patching bed validity, allowed
|
||||
areas, the work JobGiver and the mental-state handler.
|
||||
|
||||
**Ward doesn't pay that tax.** A committed pawn *is* a prisoner, in vanilla's own sense of the word —
|
||||
arresting your own colonist already performs the colonist→prisoner transition. Ward only adds a new
|
||||
**mode** to hold them under, and `PrisonerInteractionModeDef` is a **Def, not an enum**. Adding one
|
||||
is XML plus, at most, a worker class. This is not a trick; it is the established pattern. *Prison
|
||||
Labor* already ships seven custom interaction modes of its own.
|
||||
|
||||
So the *state itself* costs **zero patches** — it is all defs:
|
||||
|
||||
| Extension point | What Ward adds | Patches needed |
|
||||
|---|---|---|
|
||||
| `PrisonerInteractionModeDef` | `Ward_PsychiatricCare` (non-exclusive) | 0 |
|
||||
| `RoomRoleDef` (`workerClass` is public) | `Ward_PsychWard` | 0 |
|
||||
| `WorkGiverDef` (`giverClass`) | `Ward_WardenPsychiatricCare` | 0 |
|
||||
| `JobDef`, `HediffDef`, `ThoughtDef`, `ThingDef` | treatment, recovery, neglect, the station | 0 |
|
||||
|
||||
Ward *does* use Harmony where a patch is the cleaner tool (a patient's inspect line, and more), so it
|
||||
is not a zero-patch mod. Its compatibility is about **which** methods it avoids: it touches none of
|
||||
the contested methods the popular psych/prison mods fight over, and never prefixes
|
||||
`MentalStateHandler.TryStartMentalState`. The full argument — which mods it was verified against and
|
||||
why it can't collide with them — is on **The Compat Harness** page.
|
||||
|
||||
---
|
||||
|
||||
## Riding the prisoner rail (why the suite cares)
|
||||
|
||||
The design choice that makes Ward *cheap* also makes it *interesting* inside the wider Institution
|
||||
suite. A committed patient is a genuine vanilla prisoner. That means they are a **secure context** in
|
||||
exactly the sense the rest of the suite understands: a pawn who is held, searchable, and capable of
|
||||
concealing and improvising contraband. A patient in a psych ward can hoard a shiv or brew something
|
||||
foul in a smuggled vessel for **free**, because the contraband, search, corruption and gang systems
|
||||
were written against "held pawn," and a ward patient satisfies that predicate without Ward writing a
|
||||
line of integration code.
|
||||
|
||||
The ward is a prison cell that happens to also be a ward. `Room.isPrisonCell` is a cached field
|
||||
written only when the room's shape changes — it is **not** derived from the room's role — so
|
||||
re-labelling a cell as a ward cannot break containment, food delivery, or prison breaks. The compat
|
||||
harness asserts exactly this: a built ward is both `roleIsWard = True` **and** `stillPrisonCellAsWard
|
||||
= True`. The two claims pull against each other, and both have to hold.
|
||||
|
||||
---
|
||||
|
||||
## Wiki index
|
||||
|
||||
| Page | What's on it |
|
||||
|---|---|
|
||||
| **Home** (this page) | What Ward is, the third-state problem, the suite |
|
||||
| **Commitment** | How commitment works in play: the mode, station, room role, work giver, job, hediff, thoughts, neglect, and how it stacks with recruitment — with every real def name and number |
|
||||
| **The Compat Harness** | The in-game test tool this repo carries: booting real headless RimWorld with the whole suite + the most-subscribed Workshop mods (~24 active), the dependency-ordered build, the `WARDTEST` / `PNTEST` / `CBTEST` / `FPBRIDGE` assertion families, and how to run it |
|
||||
|
||||
---
|
||||
|
||||
## Part of the Institution suite
|
||||
|
||||
A set of RimWorld 1.6 mods about what an institution does to the people inside it. Each mod stands
|
||||
alone as an install; together they interlock into one system — colonists and prisoners drift toward
|
||||
crime on a spectrum of nature × nurture, and a policing/justice layer discovers, catches, punishes,
|
||||
reforms, or paroles them. Ward's psychiatric ward is a secure context where a committed patient can
|
||||
conceal and improvise contraband exactly as a prisoner can, because they ride the same prisoner rail.
|
||||
|
||||
| Mod | What it is |
|
||||
|---|---|
|
||||
| **Institution: Ward** (this) | Involuntary psychiatric commitment — the third pawn state, neither free nor guilty. Also carries the suite's in-game compat harness. |
|
||||
| **Institution: Core** | The shared engine — propensity (nature × nurture), the criminal record, secured context. |
|
||||
| **Institution: Contraband** | The physical smuggling loop — conceal, improvise shivs, dig Prison-Architect tunnels, warden search, warden corruption. |
|
||||
| **Institution: Justice** | Corrections & policing — classification, deterrence, discipline, parole, regime. |
|
||||
| **Institution: Gangs** | Gangs as contraband economies — joining, smuggling networks, rivalry, fights-as-crime. Also the home of the suite's cross-module `CBTEST` integration test. |
|
||||
| **Foul Play** | The vessel + substance + throw framework, and the "Piss Nuke" flagship; bridges to Core + Contraband when both are present. |
|
||||
|
||||
Reference sibling mods by name — the mods are separate repositories and cross-repo links break.
|
||||
|
||||
---
|
||||
|
||||
## AI disclosure
|
||||
|
||||
This mod was developed with substantial assistance from Claude (Anthropic), including the
|
||||
compatibility analysis, the def and C# implementation, and the test harness. This disclosure lives
|
||||
in the repository (About.xml, README, and here); it is deliberately not repeated as commit-message
|
||||
attribution.
|
||||
Reference in New Issue
Block a user