From d186d29238089533376e617fffb9ae0bde5ea241 Mon Sep 17 00:00:00 2001 From: slaguru666 <111923774+slaguru666@users.noreply.github.com> Date: Tue, 22 Sep 2026 22:28:27 +0100 Subject: [PATCH] NPC kit: creature tiers draw kit too, and their armour stacks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Anomalous and Apex now draw weapons, armour and gear from the posting on top of the natural attacks they already carry. Their hide stays, and locationArmourFor adds worn pieces to it, so Apex · Containment stands at 17 torso armour: 7 hide, 7 breaching suit, 3 riot shield raised. Mean damage across the 61 weapons is 6.9 and the heaviest ordinary one means 9.0, so nothing but the Unmaker reliably breaks it. Chosen deliberately with that number in hand. The spec records the counterplay already in the rules — the shield only counts raised, and exposedHideFor halves hide on a grounded creature outside the vital — and obliges Phase 5 to simulate both tiers standing and grounded rather than assert a lethality band. Co-Authored-By: Claude Opus 5 --- docs/NPC_KIT_PLAN.md | 49 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/docs/NPC_KIT_PLAN.md b/docs/NPC_KIT_PLAN.md index b2d1960..8a61996 100644 --- a/docs/NPC_KIT_PLAN.md +++ b/docs/NPC_KIT_PLAN.md @@ -89,18 +89,19 @@ draw: { weapons: 1, armour: 1, gear: 3 } | Trained | 1 | 1 | 3 | | | Armed | 1 | 1 | 3 | | | Dangerous | 2 | 1 | 4 | a primary and a sidearm | -| Anomalous | — | — | — | natural attacks; draws no issued kit | -| Apex | — | — | — | as above | +| Anomalous | 1 | 1 | 3 | keeps its natural attacks as well | +| Apex | 2 | 2 | 4 | keeps its natural attacks as well | Weapons are taken in the order the posting lists them, because kits are authored primary first. Gear is drawn at random from the posting's gear so that four guards off one statblock are not four identical guards. -**Creature tiers draw nothing.** A revenant does not sign for a riot shield. Anomalous and -Apex keep the `attacks` they have and keep `naturalArmour`. This is a judgement call and -the one most likely to be wrong: the dialog lets a posting and a threat tier be chosen -independently, so "Apex · Containment" is selectable and will produce a creature with -Containment's *skills* and none of its kit. Say the word if you want kit on those too. +**Creature tiers draw too, and their armour stacks on their hide.** A revenant of a +Containment officer is still wearing what it died in. Anomalous and Apex keep the +`attacks` they already have — the grasp, the Unmaker — and gain the posting's weapons on +top, each with the skill that weapon names. + +The consequence is in Part 4 and it is large. It was chosen with the number in hand. --- @@ -133,7 +134,39 @@ Issued armour is created equipped, like `buildActor` does it. `naturalArmour` drops to 0 for the four human tiers, because the number was standing in for the item and keeping both would armour every NPC twice. It stays for Anomalous and -Apex, which is what it was for. +Apex, which is what it was for — and for those two it now **stacks with drawn armour**, +because `locationArmourFor` adds every piece covering a location to the body's own: + +```js +export function locationArmourFor(base, pieces, kind) { + let n = Number(base) || 0; + for (const p of pieces ?? []) { + if (armourCoversKind(p?.coverage, kind)) n += Number(p?.points) || 0; + } + return n; +} +``` + +**Apex · Containment therefore stands at 17 armour on the torso** — 7 hide, 7 breaching +suit, 3 riot shield raised. The mean damage of the 61 weapons in the catalogue is 6.9, +and the heaviest ordinary one, the anti-materiel rifle, means 9.0. Nothing but the +Unmaker (1d10+30) reliably breaks that. This is deliberate: an Apex wearing a posting's +armour is meant to be a thing you cannot shoot down. + +The counterplay is already in the rules and should be written into the tactics note of +any such NPC, because a GM who does not know it has an unkillable object rather than a +fight: + +- The shield's 3 counts only while **raised**, which costs a hand and −20 to its own + shooting (`SHIELD.ranged`). Make it shoot and it lowers. +- `exposedHideFor` **halves hide on a grounded creature** everywhere except the vital. + Grounded, the same Apex is 3 + 7 + 3 = 13 on the limbs. +- Armour is by location. `breach_suit` does not cover everything, and `armourFrom` + already reports per location which pieces reached it. + +**Obligation:** Phase 5 runs `tools/simulate.mjs` against Apex · Containment and +Anomalous · Containment, standing and grounded, and the wipe rates go in the review entry. +A number this far out of band is not allowed to be an assertion. **This changes how hard generated NPCs are to hurt**, in both directions — a Trained NPC goes from a flat 1 to whatever a stab vest stops by location, which is more in the chest