Wiki/Home.md is the suite's front door; every layer's wiki now mirrors here under Wiki/<layer>/ (core, contraband, justice, gangs, ward), so the whole suite reads in one place with the index linking to the local pages. The layer repos stay canonical -- Tools/sync-wiki.sh refreshes the aggregated copy on demand. The README's main page points to it.
142 lines
6.9 KiB
Markdown
142 lines
6.9 KiB
Markdown
# Corruption
|
||
|
||
*A search is only as thorough as the warden running it, and a warden is a person with their own
|
||
diligence and their own price.*
|
||
|
||
The counter to contraband is the [warden search](Warden-Search.md) — but a search is not a machine.
|
||
It is a human being with traits and a mood, and Contraband models that human being on **two axes,
|
||
both read off the same vanilla traits, mood, and relationships — no new stat to maintain**:
|
||
|
||
| Axis | Question | Effect on a search |
|
||
|---|---|---|
|
||
| **Diligence** | How hard do they look? | multiplies the find chance |
|
||
| **Corruption** | How bent are they? | a flat chance to look away — and a route *into* the prison |
|
||
|
||
This is *"what turns 'the game vs the player' into 'the player's own guards, each with an angle.'"*
|
||
The prisoner you can control. The guard you assigned to watch them, you cannot.
|
||
|
||
## Diligence — how hard they look
|
||
|
||
`WardenDisposition.Diligence(warden)` returns 0..1 and multiplies the whole find chance in
|
||
`JobDriver_SearchPawn`. A lax or miserable warden misses things a dutiful one would turn up.
|
||
|
||
```
|
||
d = 0.55 // baseline
|
||
d += 0.1 × degreeOf(Industriousness) // Lazy lowers, Industrious raises (per degree)
|
||
d += 0.15 if Abrasive // no qualms turning a cell over
|
||
d -= 0.20 if Kind // a gentle hand
|
||
d += 0.10 if Psychopath // does not care how it feels
|
||
d ×= Lerp(0.6, 1.1, mood) // a miserable warden phones it in
|
||
d = clamp01(d)
|
||
```
|
||
|
||
| Trait / factor | Δ Diligence | Reasoning |
|
||
|---|---|---|
|
||
| Industrious | +0.1 per degree | a hard worker searches hard |
|
||
| Lazy | −0.1 per degree | a lazy one frisks gently |
|
||
| Abrasive | +0.15 | happy to toss a cell |
|
||
| Psychopath | +0.10 | thoroughness without squeamishness |
|
||
| Kind | −0.20 | reluctant to be rough |
|
||
| Mood | ×0.6 (miserable) .. ×1.1 (content) | morale is thoroughness |
|
||
|
||
## Corruption — their price
|
||
|
||
`WardenDisposition.Corruption(warden)` returns 0..1. In a search, a bent warden gets a flat chance
|
||
to **look away** on each item they would otherwise have a shot at finding:
|
||
|
||
```
|
||
lookAwayChance = Corruption(warden) × 0.6 // rolled per hidden item, before the find roll
|
||
```
|
||
|
||
```
|
||
c = 0.04 // baseline — most guards are mostly honest
|
||
c += 0.40 if Greedy // has a price
|
||
c += 0.15 if Kind // bends the rules out of sympathy
|
||
c -= 0.10 if Ascetic // wants nothing, cannot be bought
|
||
c -= 0.05 if Abrasive
|
||
c ×= Lerp(1.6, 0.7, mood) // a desperate, miserable warden is more temptable
|
||
c = clamp01(c)
|
||
```
|
||
|
||
| Trait / factor | Δ Corruption | Reasoning |
|
||
|---|---|---|
|
||
| Greedy | +0.40 | the classic bent guard — everyone has a number |
|
||
| Kind | +0.15 | looks the other way out of sympathy, not money |
|
||
| Ascetic | −0.10 | wants nothing, so cannot be bought |
|
||
| Abrasive | −0.05 | too surly to do anyone a favour |
|
||
| Mood | ×1.6 (miserable) .. ×0.7 (content) | a happy guard is harder to tempt |
|
||
|
||
## The Kind warden is a double liability
|
||
|
||
Read the two formulas together and one trait jumps out. **Kind** *lowers* Diligence (−0.20) **and**
|
||
*raises* Corruption (+0.15). The gentle guard both frisks softly and bends the rules out of pity —
|
||
the worst warden you can put on a contraband detail, and the least obvious one, because "kind" reads
|
||
as a virtue everywhere else in the game. Meanwhile **mood** cuts the same way on both axes: a
|
||
miserable warden looks *less* hard and is *more* temptable. A depressed guard is a sieve at both
|
||
ends.
|
||
|
||
## Worked examples
|
||
|
||
Find chance for a hidden item is `baseFind × Diligence`, with a separate `lookAway = Corruption ×
|
||
0.6` chance to ignore it entirely. Assume a mid-skill warden whose raw find chance on a shiv is
|
||
around 0.30 before disposition:
|
||
|
||
| Warden | Diligence | Corruption | Look-away/item | Net on a 0.30 shiv |
|
||
|---|---|---|---|---|
|
||
| Neutral, content | ~0.61 | ~0.03 | ~2% | thorough-ish: ~0.18 find |
|
||
| Abrasive + Psychopath, content | ~0.88 | ~0.02 | ~1% | a nightmare for prisoners: ~0.26 find |
|
||
| Greedy, content | ~0.61 | ~0.31 | ~18% | looks capable, pockets bribes |
|
||
| Greedy, **miserable** | ~0.37 | ~0.62 | ~37% | ignores contraband over a third of the time |
|
||
| Kind + **miserable** | ~0.25 | ~0.27 | ~16% | a sieve at both ends: ~0.07 find |
|
||
|
||
(Numbers rounded; mood taken as content ≈ 100% or miserable ≈ 20%.) The takeaway is that **who you
|
||
assign to search matters as much as whether you search at all.** A greedy, miserable warden is not a
|
||
guard — he is a supply line you are paying to pretend otherwise.
|
||
|
||
## The bent warden as a supply route *in*
|
||
|
||
Corruption is not only "looks away." The `Corruption.Smuggle` primitive is the reaching-*in* half — a
|
||
guard who slips a prisoner contraband through the very same `Conceal` door a smuggler or a gangmate
|
||
uses:
|
||
|
||
```csharp
|
||
ThingDef Corruption.Smuggle(warden, prisoner, tracker)
|
||
// picks a random OnBody-hideable contraband and Conceal()s it onto the prisoner; returns the def
|
||
```
|
||
|
||
Only what can ride on a body gets slipped across a handshake (`OnBody`). The method is the **act
|
||
itself**; the caller decides *who* and *when*, gated on `WardenDisposition.Corruption`. In Contraband
|
||
on its own, this primitive is exposed but not yet wired to an in-game trigger — it is the seam
|
||
**Institution: Gangs** drives when a gang's outside members pay a bent warden to make a delivery, and
|
||
the thing a planned secure-zone checkpoint that frisks *guards* is meant to catch. Search-side
|
||
corruption (looking away) is fully live today; reach-in corruption is the hook the rest of the suite
|
||
plugs into. See [Compatibility](Compatibility.md).
|
||
|
||
## How to play with it
|
||
|
||
- **Vet your wardens.** A Greedy or Kind pawn on prison duty is a liability the trait tooltip won't
|
||
warn you about. Ascetic and Industrious make the best searchers; Psychopath and Abrasive are
|
||
brutally effective if you can stomach them.
|
||
- **Watch mood.** A prison-duty warden in a slump is failing at both jobs — searching *and* not
|
||
smuggling. Keep your guards content or rotate them out.
|
||
- **Redundancy beats brilliance.** Because each search is one shot per prisoner per day and even a
|
||
good warden misses a well-hidden shiv, a *second* diligent warden over time matters more than a
|
||
single perfect search.
|
||
|
||
## Quick reference
|
||
|
||
| Constant | Value | Meaning |
|
||
|---|---|---|
|
||
| Diligence baseline | 0.55 | before traits and mood |
|
||
| Corruption baseline | 0.04 | most guards are mostly honest |
|
||
| Diligence mood scale | ×0.6 .. ×1.1 | miserable → content |
|
||
| Corruption mood scale | ×1.6 .. ×0.7 | miserable → content |
|
||
| Look-away multiplier | ×0.6 | applied to Corruption, per item |
|
||
| Smuggle payload | `OnBody` contraband only | what fits in a handshake |
|
||
|
||
---
|
||
|
||
*Part of the **Institution** suite — Core · Contraband · Justice · Gangs, alongside Foul Play and
|
||
Ward. Each stands alone; together they interlock.*
|
||
*Developed with substantial assistance from Claude (Anthropic).*
|