Wiki: player-facing rewrite of every layer + add a scenario FAQ, linked from Home
This commit is contained in:
@@ -3,48 +3,33 @@
|
||||
*Gangs grow out of who pawns **already are** — and the counter-play is to keep the wrong pawns apart.*
|
||||
|
||||
A gang in this mod is never invented from nowhere. It crystallises along the bonds a colony already
|
||||
contains: shared faction, shared faith, or real friendship. This page covers the formation rule — what
|
||||
`SharesAffiliation` checks and why the *same room* requirement matters — and then the segregation
|
||||
counter-play that turns those same bonds against the network.
|
||||
contains: shared faction, shared faith, or real friendship. This page covers the formation rule — which
|
||||
bonds count and why the *same room* requirement matters — and then the segregation counter-play that
|
||||
turns those same bonds against the network.
|
||||
|
||||
## The formation rule
|
||||
|
||||
On each 5000-tick check, the gang component walks the eligible `crew` (every spawned humanlike that
|
||||
currently meets the `Nature × Nurture ≥ 0.9` join bar) and tries to pair each unaffiliated member with
|
||||
a mate:
|
||||
|
||||
```
|
||||
mate = a pawn q in crew such that:
|
||||
q != p
|
||||
AND q.GetRoom() == p.GetRoom() -- same room, right now
|
||||
AND SharesAffiliation(p, q) -- a bond they already have
|
||||
if mate exists: Enlist(p, mate)
|
||||
```
|
||||
On each 5000-tick pass, the game walks everyone currently over the join bar (Nature × Nurture ≥ 0.9)
|
||||
and tries to pair each unaffiliated pawn with a mate. A pawn pairs up with someone who is, at that
|
||||
moment, **in the same room** *and* someone they **already share a bond with**.
|
||||
|
||||
Two conditions, both required: they must be **in the same room** at the moment of the check, **and**
|
||||
they must **share an affiliation**. A disposed pawn does not fall in with a stranger across the map; it
|
||||
falls in with someone it is standing next to *and* already connected to.
|
||||
|
||||
`Enlist` then binds them: if either already runs with a gang, the other joins that gang; otherwise a
|
||||
fresh gang id is minted. So gangs accrete — a new member pairing with an existing member is absorbed
|
||||
Pairing binds them together: if either already runs with a gang, the other joins that gang; otherwise a
|
||||
fresh gang is founded. So gangs accrete — a new member pairing with an existing member is absorbed
|
||||
into the existing crew rather than starting a rival one.
|
||||
|
||||
### What counts as an affiliation
|
||||
|
||||
```
|
||||
SharesAffiliation(a, b) is true if ANY of:
|
||||
a.Faction != null AND a.Faction == b.Faction -- same faction
|
||||
Ideology active AND a.Ideo == b.Ideo (both non-null) -- same ideoligion
|
||||
a.relations.OpinionOf(b) >= 20 -- a genuine friendship
|
||||
```
|
||||
|
||||
| Bond | Condition | Notes |
|
||||
|---|---|---|
|
||||
| **Same faction** | `a.Faction == b.Faction` (non-null) | your colonists share one; captured raiders share theirs |
|
||||
| **Same ideoligion** | `a.Ideo == b.Ideo`, only if the Ideology DLC is active | guarded by `ModsConfig.IdeologyActive` |
|
||||
| **Friendship** | `OpinionOf(b) >= 20` | a real positive relationship, not mere acquaintance |
|
||||
| **Same faction** | both belong to the same (non-empty) faction | your colonists share one; captured raiders share theirs |
|
||||
| **Same ideoligion** | both follow the same ideoligion, only if the Ideology DLC is active | needs Ideology enabled |
|
||||
| **Friendship** | an opinion of at least **+20** of each other | a real positive relationship, not mere acquaintance |
|
||||
|
||||
The design intent, from the source:
|
||||
The design intent:
|
||||
|
||||
> Gangs grow out of who pawns ALREADY are, not out of nowhere — so a prisoner's gang on the outside is
|
||||
> their old faction/friends, and rival factions run as rival gangs.
|
||||
@@ -57,9 +42,9 @@ random groupings over the top.
|
||||
|
||||
Follow the rule to its conclusion. Two captured raiders from **different** hostile factions each share
|
||||
an affiliation with *their own* side but not with each other. Housed in the same wing, each pairs up
|
||||
along its own faction line — and now you have **two gangs**. By the definition on the
|
||||
[Rivalry and Fights](Rivalry-and-Fights.md) page, members of two different gangs are automatically
|
||||
**rivals**, and rival-gang violence between them is booked as a crime.
|
||||
along its own faction line — and now you have **two gangs**. As the
|
||||
[Rivalry and Fights](Rivalry-and-Fights.md) page explains, members of two different gangs are
|
||||
automatically **rivals**, and rival-gang violence between them is booked as a crime.
|
||||
|
||||
So the affiliation rule and the rivalry rule are two ends of one idea: **who bands together** and **who
|
||||
is opposed** both derive from pre-existing loyalties. Mix hostile factions or clashing ideoligions in
|
||||
@@ -70,39 +55,31 @@ them. This is a housing decision with mechanical teeth.
|
||||
|
||||
Here is where the formation rule and the network rule meet, and where the rest of the suite earns its
|
||||
keep. A gang can only *do* anything — resupply itself — if its members can **reach** each other.
|
||||
`MoveWithin` requires `SameGang` **and**, for two co-located pawns, a walkable path
|
||||
(`CanReach(..., Touch, Danger.Deadly)`). Break the path and you break the network:
|
||||
Passing contraband requires two things: the pawns must be in the same gang, **and** two pawns both on
|
||||
the map must have a walkable path between them. Break the path and you break the network.
|
||||
|
||||
```
|
||||
MoveWithin(from, to):
|
||||
...
|
||||
if from.Spawned && to.Spawned && !from.CanReach(to, Touch, Deadly):
|
||||
return false -- kept apart: the segregation counter-play
|
||||
```
|
||||
|
||||
The source calls this out as the intended answer to the whole mod:
|
||||
The design calls this out as the intended answer to the whole mod:
|
||||
|
||||
> The counter-play is the rest of the suite: Classification SEGREGATES rivals into different wings, and
|
||||
> a network whose members cannot REACH each other is starved.
|
||||
|
||||
**Classification** lives in **Institution: Justice**. It grades pawns by risk and lets you sort them
|
||||
into separate, walled wings. Two gangmates graded into different wings, with no walkable route between
|
||||
them, fail the reach gate on every network pass. The gang still *exists* on the membership map — they
|
||||
are still the same crew, still rivals of the other crew — but it can no longer pass a shiv from a
|
||||
holder to a have-not. **A network that cannot reach itself is a network that cannot supply itself.**
|
||||
them, fail the reach test on every network pass. The gang still *exists* — they are still the same crew,
|
||||
still rivals of the other crew — but it can no longer pass a shiv from a holder to a have-not. **A
|
||||
network that cannot reach itself is a network that cannot supply itself.**
|
||||
|
||||
This is the elegant part of the design: the very bonds that formed the gang (`SharesAffiliation`) tell
|
||||
you *who to keep apart*, and the reach requirement (`CanReach`) makes keeping them apart actually
|
||||
starve the supply chain. You do not disband a gang; you **partition the graph** until its edges carry
|
||||
nothing.
|
||||
This is the elegant part of the design: the very bonds that formed the gang tell you *who to keep
|
||||
apart*, and the reach requirement makes keeping them apart actually starve the supply chain. You do not
|
||||
disband a gang; you **cut it off from itself** until nothing can move along it.
|
||||
|
||||
## How to play it
|
||||
|
||||
- **Read affiliations before you house pawns.** Same-faction and same-ideoligion prisoners will band
|
||||
together; hostile factions in one wing will form *rival* gangs and fight. Sort deliberately.
|
||||
- **Segregate by Classification, not by hope.** Putting rivals in "different areas" is not enough — the
|
||||
reach test cares about a *walkable path*. A shared corridor is a supply line. Use genuinely separate,
|
||||
walled wings.
|
||||
- **Segregate by Classification, not by hope.** Putting rivals in "different areas" is not enough —
|
||||
resupply only needs a *walkable path* between two gangmates. A shared corridor is a supply line. Use
|
||||
genuinely separate, walled wings.
|
||||
- **Starve, don't chase.** You will rarely delete a gang outright. The durable win is to keep its
|
||||
members unable to reach one another so the network dries up, while keeping mood and deterrence high so
|
||||
few pawns cross the join bar in the first place (see [Joining](Joining.md)).
|
||||
@@ -112,4 +89,3 @@ nothing.
|
||||
|
||||
---
|
||||
*Part of the **Institution** suite — Core · Contraband · Justice · Gangs (this). Each mod stands alone; together they are one system.*
|
||||
**
|
||||
|
||||
Reference in New Issue
Block a user