Compare commits

..
6 Commits
Author SHA1 Message Date
flan 036facab29 roadmap: generic vessels + runtime contents (Noita-flask model)
Hooch reframed per user directive: not a bespoke item but FP_Hooch the substance,
in generic vessels whose contents are runtime state -- fill, ferment, pour, drink,
mix. Staged: runtime substance -> drink-any-fluid -> contraband content tag ->
pour+mix -> ferment-model overhaul (age+dilution+sealed/open+temperature+spoil,
mirroring CompRottable). Any fluid drinkable with different consequences; blood is
a substance; any drink can breed addiction at a per-fluid rarity, modified by
mental health + circumstances.
2026-07-15 03:48:54 +00:00
flan fcfb32fff7 roadmap: secure-zone guard frisk + age/storage potency model
- Secure-zone checkpoints frisk guards too -> the counter-play to a bent warden
  smuggling contraband in. Wires corruption <-> secure zones <-> the search loop.
- Potency = age + storage (sealed/open), never container size. Topping up dilutes
  age (volume-weighted), so a shared bucket stays fresh while a hidden jar ages to
  full potency -- "a jar of old piss and a bucket of fresh" both make sense.
2026-07-15 03:18:13 +00:00
flan 78fe129911 roadmap: capture the expanded substance + warden-personality vision
Foul Play "finish substances" grew into a substance-cocktail system, staged so
each ships green:
- Hooch: fermentable, incendiary flame-splash firebomb (no splash-code change --
  just a flame damageDef through the existing GenExplosion path), also drinkable.
- Ferment in ANY liquid-holding furniture (toilet, barrel, tub, sink, vat),
  capability-detected by recognizable identity + known vanilla defs, no DBH
  dependency. Hooch requires a site; piss can use one but still brews from body.
- Mixing: a vessel's contents become a runtime blend of SubstanceDefs and the
  splash applies all effects together; defaults to the single substance unmixed.

Contraband warden-personality/corruption (queued under Discipline): search
intensity by trait + circumstance, per-warden item forgiveness, and bent wardens
who smuggle contraband IN -- the corruption supply route that feeds a gang.
2026-07-15 03:13:27 +00:00
flan 5a8b4becac roadmap: intake shipped Harmony-free (poll-based, not a SetGuestStatus patch) 2026-07-15 03:03:31 +00:00
flan dbd6ea0e03 roadmap: institutionalization & recidivism are ours, on our own axis
Corrected an over-correction. In a suite named Institution these are the
namesake, and our substrate builds them on an axis Prisoner Realism has no engine
for, so it is complementary, not a rebuild:

- Institutionalization -> prisonization, and NOT a new system: the existing
  Propensity.Nurture reads the existing CriminalRecord.reform field (signed:
  harsh regime prisonizes, rehabilitative reforms). One field, additive. When PR
  is present we soft-read its hediff as one more input -- no patch, no dependency.
- Recidivism -> we own the reintegrated who STAY and reoffend inside the colony
  (wiring gap D); PR owns the departed who return as raiders. Different
  population, no overlap.

Also records the governing constraint "defer the depth, never the payoff": the
propensity -> contraband -> detection spine is fully ours and self-complete; only
the response side (Discipline, Parole) needs its own minimal effect so nothing
dangles when PR is absent.
2026-07-15 02:50:38 +00:00
flan f90da721a4 Re-cut roadmap after Prisoner Realism deep scan
Mapped Prisoner Realism (11.3k subs, good) feature-by-feature. It owns 20
prisoner-behavior systems, several of which were on our build list. Under the
standing "keep good incumbents" rule:

- DELETE our reintegration+recidivism module. PR's Recidivism is complete and
  good. Parole keeps only the ideology-driven release decision (self-complete);
  PR supplies the return outcome when present.
- RE-SCOPE Classification to a pure router (reads record + propensity, assigns a
  tier). PR's Solitary owns the isolation toll.
- RE-SCOPE Gangs to contraband economies. PR's Ringleader owns mood contagion.
- NARROW the escape tool to the wall-cut path for ward patients and low-skill
  pawns PR's break/lockpick system never moves.

Sharpens Institution's uncontested core: hidden-contraband + search, propensity
across all pawns, Ward, Foul Play, classification-as-router, and policing free
colonists (the crime loop turned on your own colony).
2026-07-15 02:16:58 +00:00
+192 -15
View File
@@ -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