Fold Ward into the single Institution install as its psychiatric-care layer. package.sh now builds Ward clean and vendors Ward.dll plus its defs and textures alongside the other layers, and the settings shim gains a Ward (psychiatric care) checkbox that writes the shared InstitutionSettings.ward flag. Re-assembling also carries in Justice's now-shipping policing defs (the constable work type and crime thoughts), so the aggregate finally bundles colony crime and the weighed arrest as well. README updated to five layers over one Core with policing shipped and Ward folded in; adds the changelog, the Workshop preview, and the preview generator.
72 lines
5.1 KiB
Markdown
72 lines
5.1 KiB
Markdown
# The Institution suite
|
||
|
||
A set of RimWorld 1.6 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 built on a small
|
||
shared **Core**; together they form one system.
|
||
|
||
## The thesis
|
||
|
||
> Every pawn has a criminal propensity on a spectrum — **nature** (traits) × **nurture**
|
||
> (circumstance, mood, treatment) — and the colony can **police** it.
|
||
|
||
The suite is the two halves of that: colonists commit crimes and a policing layer catches them
|
||
(pre-arrest), and prison / contraband / wards / secure areas hold and reform them (post-arrest).
|
||
Arrest is the hinge. Nothing hard-codes "prisoner" — every held-person system keys off a
|
||
**secured context**: prisoner, ward patient, slave, or secure-area occupant.
|
||
|
||
## The mods
|
||
|
||
| Mod | What it is | Needs | Status |
|
||
|---|---|---|---|
|
||
| [Institution: Core](https://git.onetick.ninja/flan/rimworld-core) | the shared engine — **propensity** (nature × nurture), the **criminal record**, the **secured-context** predicate. Invisible on its own | — | shipping |
|
||
| [Institution: Contraband](https://git.onetick.ninja/flan/rimworld-contraband) | the physical smuggling loop — conceal / improvise shivs / Prison-Architect tunnels / warden search / corruption | Core | shipping |
|
||
| [Institution: Justice](https://git.onetick.ninja/flan/rimworld-justice) | corrections & **policing** — classification, deterrence, discipline & reform, parole, regime, and colony crime → witnesses → a weighed arrest | Core, Harmony | shipping |
|
||
| [Institution: Gangs](https://git.onetick.ninja/flan/rimworld-gangs) | gangs as **contraband economies** — joining by disposition, smuggling networks, rivalry, fights-as-crime | Core, Contraband, Justice | shipping |
|
||
| [Institution: Ward](https://git.onetick.ninja/flan/rimworld-ward) | involuntary **psychiatric care** — a prisoner committed for treatment, not punishment, on Core's shared treatment engine: counselling reduces the disorder, a recovery track leads to discharge, and neglect deteriorates. Folded into the suite as its psychiatric-care layer | Core, Harmony | shipping |
|
||
| [Foul Play](https://git.onetick.ninja/flan/rimworld-foulplay) | throw a container of something off a body; a Noita-flasks liquid framework (vessels + substances) with the **Piss Nuke** flagship; bridges to the suite | standalone | shipping |
|
||
|
||
The original monolith split along its natural seams in 2026-07: the substrate became **Core**, the
|
||
corrections/justice systems became **Justice**, and the gang layer became **Gangs**, leaving
|
||
**Contraband** as the physical smuggling loop. Regime (prisoner recreation) folded into Justice, which
|
||
now also ships **policing** (colony crime → witnesses → a weighed arrest). **Ward** — once a standalone
|
||
sister mod — is folded in as the psychiatric-care layer, consuming Core's shared treatment engine, so
|
||
the suite is now five layers over one Core, bundled into a single install with a toggle each.
|
||
|
||
## Principles
|
||
|
||
- **One shared engine, then build up.** The suite runs on a small **Core** (propensity, record,
|
||
secured context) so every mod agrees about who is dangerous instead of each guessing. Contraband
|
||
and Justice build on Core; Gangs, the capstone, needs Core + Contraband + Justice. Foul Play stands
|
||
fully alone and merely *bridges* to the suite when it is present. Cross-mod integrations that
|
||
aren't hard dependencies stay soft — features light up if a mod is present and the loop still
|
||
closes without it (e.g. Core's deterrence seam is neutral until Justice fills it).
|
||
- **Coexist, don't duplicate.** We test against the all-time most-subscribed Workshop mods and
|
||
never rebuild what a genuinely good mod already does well — judged by quality, not sub count.
|
||
- **Extend by capability, not by list.** New content registers via `IsWeapon` / `IsDrug` /
|
||
category, so modded items are covered without being named.
|
||
|
||
## The plan
|
||
|
||
The full design, module scope, build order, and prior-art verdicts are in
|
||
[ROADMAP.md](ROADMAP.md). Per-mod roadmaps live in each repo (e.g. Contraband's item build list).
|
||
|
||
## Compatibility
|
||
|
||
The in-game harness (`Tools/run-compat-test.sh` in the Ward repo) boots a real headless RimWorld
|
||
with the suite plus the popular psych/prison mods **and** the all-time most-subscribed mods loaded
|
||
at once, and fails on any error naming our code. Combat Extended gets its own dedicated pass. It
|
||
needs a licensed RimWorld + xvfb, so it is a LOCAL step, not CI.
|
||
|
||
## CI
|
||
|
||
Each code repo runs a Gitea Actions workflow (`.gitea/workflows/ci.yml`) on push: **lint def XML**
|
||
(catches malformed XML and relative-xpath silent no-ops) + **dotnet build** against the Krafs
|
||
RimWorld reference assemblies (no game install needed). Runs on the self-hosted `truenas-runner`
|
||
(host mode, label `ubuntu-latest`); .NET is provisioned per-run via `setup-dotnet`. Green across
|
||
Foul Play, Contraband, and Ward; the split-out **Core**, **Justice**, and **Gangs** build clean and
|
||
are exercised by the full-stack harness, with per-repo CI workflows still to be added.
|
||
|
||
## AI disclosure
|
||
|
||
Designed and built with substantial assistance from Claude (Anthropic).
|