diff --git a/README.md b/README.md index 024d0e0..95c9d9c 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,63 @@ -# The Institution suite +# Institution — Prison Architect in RimWorld -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. +**Every pawn has a criminal propensity on a spectrum — nature (traits) × nurture (mood, mistreatment, +treatment) — and the colony can police it. Catching and punishing one pawn changes the disposition of +the rest.** -## The thesis +Institution is the whole suite in **one install**, with a **checkbox per layer** in the mod settings +(all on by default). It turns RimWorld's forgotten rap sheet into a living justice system — police, +prison, parole — mirroring the real separation of powers. -> Every pawn has a criminal propensity on a spectrum — **nature** (traits) × **nurture** -> (circumstance, mood, treatment) — and the colony can **police** it. +## 📖 Documentation — [**read the Wiki**](https://git.onetick.ninja/flan/institution/wiki) -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 **[Institution Wiki](https://git.onetick.ninja/flan/institution/wiki)** is the full guide: the +gameplay loop, every layer, and how the pieces feed each other. Start at the +**[Wiki home](https://git.onetick.ninja/flan/institution/wiki)**, then dive into any layer below. -## Documentation +## The six layers -The **complete suite wiki lives in this repo** — [**Wiki/Home.md**](Wiki/Home.md) is the front door: -the full gameplay loop, all five layers, and per-layer deep dives, aggregated in one place under -[`Wiki/`](Wiki/) (`core/`, `contraband/`, `justice/`, `gangs/`, `ward/`). Each layer repo carries its -own copy for a standalone install; [`Tools/sync-wiki.sh`](Tools/sync-wiki.sh) refreshes the -aggregated view here. +Turn any off in **Options → Mod Settings** and it goes inert immediately. All build on a shared +**Core** engine that ships inside — no separate dependency. -## The mods +| Layer | In play | Wiki | +|---|---|---| +| **Core** | The engine every layer agrees on: propensity, the criminal record, the treatment engine. Invisible on its own. | [Core](https://git.onetick.ninja/flan/institution/wiki/core/Home) | +| **Contraband** | Prisoners conceal what they walked in with, whittle shivs from their cell's furniture, and dig tunnels under the wall. Wardens search the likeliest prisoner first — and a bent warden looks the other way. | [Contraband](https://git.onetick.ninja/flan/institution/wiki/contraband/Home) | +| **Policing** | Your own colonists offend on the spectrum. Witnesses and a constable name the culprit; a weighed arrest can end in a cell or a resisted breakout. A climate of order feeds back into everyone — plus riots when it collapses. | [Policing](https://git.onetick.ninja/flan/institution/wiki/policing/Home) | +| **Corrections** | Classification grades every prisoner by what they've done (a wall marker grades a whole wing). Discipline hardens or reforms; parole frees the reformed; regime gives them recreation, yard time, and visits. | [Corrections](https://git.onetick.ninja/flan/institution/wiki/corrections/Home) | +| **Gangs** | Disposed prisoners band together and move contraband among themselves. Rival gangs fight — inside the wire or out — and the fight is a crime. A well-run colony grows few gangs. | [Gangs](https://git.onetick.ninja/flan/institution/wiki/gangs/Home) | +| **Ward** | Commit a prisoner for **psychiatric treatment** instead of punishment: counselling reduces the disorder that broke them and builds a recovery track toward discharge. Neglect them and they deteriorate. | [Ward](https://git.onetick.ninja/flan/institution/wiki/ward/Home) | -| 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 loop -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. +Disposition → Crime → Detection → **Arrest** → Contraband / Gangs → Corrections → Parole — and back to +the start: reforming or punishing one pawn moves the colony's climate of order, which bends who else +decides that crime pays here. (A future **Judiciary** layer — a court that tries and sentences — is +reserved to sit between arrest and prison.) -## Principles +## Install -- **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. +**Steam Workshop:** subscribe, and enable **Harmony** + **Institution** in the mod list. *(Workshop link +coming with the 0.1.0 upload.)* -## The plan +**Or drop it straight onto your machine** (auto-detects the Steam Mods folder on Linux/Mac): -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). +```bash +D=$(ls -d ~/Library/Application\ Support/Steam/steamapps/common/RimWorld/RimWorldMac.app/Mods \ + ~/.steam/steam/steamapps/common/RimWorld/Mods \ + ~/.local/share/Steam/steamapps/common/RimWorld/Mods 2>/dev/null | head -1) +git clone --depth 1 https://git.onetick.ninja/flan/institution.git "$D/Institution" +``` -## Compatibility +Update later with `git -C "$D/Institution" pull`. -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. +## Requires -## CI +**RimWorld 1.6** and **[Harmony](https://steamcommunity.com/sharedfiles/filedetails/?id=2009463077)**. +Pairs with the standalone **Foul Play** (a vessel/substance framework), which bridges in when both are +present. -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. +--- +**License:** CC BY-NC-SA 4.0 · **Version:** 0.1.0 · Attribution in [NOTICE](NOTICE). +Modding or curious how it fits together? The design notes live in [ROADMAP.md](ROADMAP.md).