Compare commits
6
Commits
0f08132aa9
...
036facab29
| 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
|
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.
|
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
|
## Suite modules
|
||||||
|
|
||||||
| Mod | Scope | Status |
|
| 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
|
- **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
|
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.
|
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
|
- **Warden personality & corruption (expanded 2026-07-15).** A search is only as thorough as the
|
||||||
the bent-warden contraband supply route already in Contraband's plan.
|
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
|
Re-scoped 2026-07-15: Prisoner Realism's **Ringleader** already owns mood contagion from a dominant
|
||||||
violence and run contraband networks. Ties to disposition (who joins), contraband (what they move),
|
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.
|
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)
|
## 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.
|
crime thesis is inert. Build *before* individual crime types.
|
||||||
2. **Regime** — schedule (vanilla Restrict) + one or two modest needs. Cheap, high-value, and it
|
2. **Regime** — schedule (vanilla Restrict) + one or two modest needs. Cheap, high-value, and it
|
||||||
feeds the disposition engine (neglect → crime).
|
feeds the disposition engine (neglect → crime).
|
||||||
3. **Visitation** — greenfield, thematically strong for the ward, doubles as a contraband route.
|
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.
|
4. **Parole / discharge / manumission** — the *release decision*, ideology-driven, PLUS its
|
||||||
5. **Classification**, then **punishment-orders**, then **corruption**.
|
substrate-native payoffs: **prisonization** (the regime reshapes propensity over the sentence) and
|
||||||
6. **Gangs** — last; needs the rest in place.
|
**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,
|
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 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
|
## Compatibility — the non-negotiable
|
||||||
|
|
||||||
The suite must load and run cleanly alongside the **all-time most-subscribed Workshop mods**, not
|
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
|
- **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
|
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.
|
needs system: idempotent, coexists, zero dependency, no citing.
|
||||||
- **Release-outcome / recidivism** — build a modest self-complete version (reformed → less return;
|
- **Recidivism → split by population, don't defer wholesale.** (Revised twice: first "build modest",
|
||||||
abused → returns hostile). Prisoner Realism's deeper recidivism coexists; we don't require it.
|
then "defer entirely", now corrected — see the namesake correction in the deep scan below.) PR's
|
||||||
- **Solitary/isolation consequence** — a light version of our own so Discipline is self-complete;
|
Recidivism handles the pawns who **leave** (released/escaped → return ally-or-raider by treatment);
|
||||||
Realism's deeper toll coexists.
|
that is good and we do not rebuild it. We own the **mirror**: the paroled pawn who **stays**, joins
|
||||||
- **Escape** is already self-complete: vanilla mental-break breaks + our disposition-driven arming
|
the colony, and can reoffend inside it (their `CriminalRecord` + residual propensity → wiring gap D).
|
||||||
+ our patient tunnel. Realism's lockpick/ringleaders are enhancements on top, not gaps we leave.
|
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
|
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
|
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.
|
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)
|
### Prior-art sweeps done (2026-07-14/15)
|
||||||
|
|
||||||
Uncontested gaps, safe to build clean: contraband/search, improvised weapons, keep-inventory
|
Uncontested gaps, safe to build clean: contraband/search, improvised weapons, keep-inventory
|
||||||
|
|||||||
Reference in New Issue
Block a user