Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
036facab29 | ||
|
|
fcfb32fff7 | ||
|
|
78fe129911 | ||
|
|
5a8b4becac | ||
|
|
dbd6ea0e03 | ||
|
|
f90da721a4 |
+192
-15
@@ -72,6 +72,18 @@ afterthoughts.
|
||||
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
|
||||
|
||||
| Mod | Scope | Status |
|
||||
@@ -203,33 +215,137 @@ ideology-driven *decision*, not another timer.
|
||||
- **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.
|
||||
- **Corruption.** Wardens/guards take bribes, smuggle, or look away — a guard-integrity stat. Seeds
|
||||
the bent-warden contraband supply route already in Contraband's plan.
|
||||
- **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
|
||||
## Gangs — as contraband economies (NOT mood)
|
||||
|
||||
Untouched by any mod. Prisoners (and colonists) form gangs / factions with rivalries that drive
|
||||
violence and run contraband networks. Ties to disposition (who joins), contraband (what they move),
|
||||
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. Without it the whole
|
||||
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** — gives Ward and good behaviour a payoff; ideology-driven.
|
||||
5. **Classification**, then **punishment-orders**, then **corruption**.
|
||||
6. **Gangs** — last; needs the rest in place.
|
||||
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](https://git.onetick.ninja/flan/rimworld-contraband).
|
||||
|
||||
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 `SubstanceDef`s
|
||||
(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.
|
||||
|
||||
**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 consequences** — `SubstanceDef.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** — transfer contents (substance + age); a blend is a list; splash
|
||||
and drink apply every constituent's effect.
|
||||
5. **Fermentation-model overhaul** — age + top-up dilution + sealed/open + temperature (mirror
|
||||
`CompRottable`) + spoil threshold; applies to every vessel, piss included.
|
||||
|
||||
**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
|
||||
@@ -283,17 +399,78 @@ 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.
|
||||
- **Release-outcome / recidivism** — build a modest self-complete version (reformed → less return;
|
||||
abused → returns hostile). Prisoner Realism's deeper recidivism coexists; we don't require it.
|
||||
- **Solitary/isolation consequence** — a light version of our own so Discipline is self-complete;
|
||||
Realism's deeper toll coexists.
|
||||
- **Escape** is already self-complete: vanilla mental-break breaks + our disposition-driven arming
|
||||
+ our patient tunnel. Realism's lockpick/ringleaders are enhancements on top, not gaps we leave.
|
||||
- **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
|
||||
|
||||
Reference in New Issue
Block a user