diff --git a/README.md b/README.md index 5d5ba16..7f51e3b 100644 --- a/README.md +++ b/README.md @@ -183,6 +183,6 @@ The build runs all three guards before it writes anything: check-rules: OK — 87 rules, 20 files scanned, 3 aliases + 41 constant sets checked, 275 formulas verified check-kits: OK — 25 roles, 10 trades, 218 catalogue items, every kit key resolves, every posting can use what it carries, every loadout distinct check-lang: OK — en.json, 927 keys, no leaf/branch collisions -check-behaviour: OK — 42 behavioural tests +check-behaviour: OK — 43 behavioural tests ``` diff --git a/docs/scenarios/LAST_ADMISSION.md b/docs/scenarios/LAST_ADMISSION.md index ad362b8..fb806e9 100644 --- a/docs/scenarios/LAST_ADMISSION.md +++ b/docs/scenarios/LAST_ADMISSION.md @@ -221,8 +221,9 @@ not orderly. Roughly **thirty people are still inside**: cast in costume, crew, party who went the wrong way, and three things that are not any of those. **Josh Pardoe is dead.** He is in the east corridor, behind the false wall, and he has -been for half an hour. He is not marked. `[CUS: Medicine or First Aid — nothing killed -him that leaves a sign; Braithwaite will say cold, and will not be able to say why]` +been for half an hour. He is not marked. **No roll:** nothing killed him that leaves a +sign. Anyone with Medicine or First Aid says cold and cannot say why, and a good roll +does not buy a better answer, because there is not one. ### The three @@ -237,7 +238,7 @@ it right."* - **Does:** counts people. Out loud. In a group of six she will say *six*, and then she will say *five*, and then she will go and make it true. -- **Fight:** cold, strong, ignores pain. **HP 13, armour 0, Brawl 55%, 1d6 damage.** She +- **Fight:** cold, strong, ignores pain. **HP 12, armour 0, Brawl 55%, 1d6 damage.** She does not defend herself. She counts while you hit her. - **Script break:** she stops the moment the count is right. Put a person back in the room and she is finished with it. *This is the cheapest kill in the scenario and the @@ -251,7 +252,9 @@ come in and hide with him."* - **Does:** laughs, moves inside the walls, and takes hold of ankles. He does not hurt anybody. He pulls, and he is very strong, and the hole is nine inches across. - **Fight:** you cannot hit him. He is in the wall. **Athletics or Brawl vs STR 17 to get - a leg back**, or somebody else pulls with you for an automatic success. + a leg back**, or somebody else pulls with you for an automatic success. **On a fumble** + they go over on their face and lose whatever was in their hands under the floorboards. + He does not get to keep the leg. - **Script break:** he is hiding, so he stops when he is *found*. Say his name and open the panel and he is not there any more. @@ -262,9 +265,10 @@ coming in now, but he will see you off it."* - **Does:** carries the shears, moves at a walk, and will not enter the building. He is the reason nobody gets to the car park. -- **Fight:** **HP 16, armour 1 (coat), shears 1d8+1, Brawl/Melee 60%.** He is the actual - fight in this scenario. He is slow, he never runs, and he is between them and the way - out. +- **Fight:** **HP 20, armour 2, shears 1d8+2, Brawl/Melee 60%.** He is the actual fight + in this scenario. He is slow, he never runs, and he is between them and the way out. + Expect about four and a half rounds, and expect somebody to get hurt. + *(Tuned by playing it thirty times — see the playtest note at the foot of this file.)* - **Script break:** *he will not come in the house.* Going inside is a complete answer and it costs nothing. Reward it. He waits on the lawn. @@ -275,8 +279,9 @@ Someone has to get thirty people across ninety feet of lawn past Old Marrow. - **Three ways to run it:** fight him, distract him (he follows anyone off the grass), or go back inside and out through the kitchens — Sharrock built the sets and knows there is a door there; the plans are pinned in the green room for anyone else. -- **Rounds:** four is plenty. He closes at a walk, one attack a round, and he goes for - whoever is furthest from the house. +- **Rounds:** four or five. He closes at a walk, one attack a round, and he goes for + whoever is furthest from the house. He drops somebody in about one fight in three — + and *dropped* is dropped, not dying. - **If it goes badly:** he does not pursue anyone indoors and he does not finish anybody off. He sees them off the grass. That is his whole page. - **Idle players:** hand them the hen party — six frightened people who need telling what @@ -464,3 +469,33 @@ If there is time — and there usually is, because this ends early — she says **OPEN DAY** is the longer, quieter one — 2h15, no combat, a fixed timetable — and it is built for the ten-agent roster rather than these six. Run either. They are alternative first nights and nothing in the campaign depends on which. + +--- + +## Playtest note — one run, six characters, 12 August + +Played through in Foundry with the six on their civilian sheets. Five things came out +of it, all now fixed: + +1. **Pollard and Agyeman were armed.** The `police` trade kit contains a revolver and a + stab vest — right for a serving officer, wrong for a British civilian, and it ended + the only fight in one round. The civilian build now strips firearms and body armour + from trade kit, and the build throws if one gets through. Finch keeps her knife. +2. **Old Marrow's shears were a utility knife.** The page said 1d8+1; the actor in the + pack carried 1d4+2. He now carries a billhook — a real garden tool in the catalogue — + and the page says 1d8+2, which is what a billhook does. +3. **He was too soft.** At the original numbers he died in 2.4 rounds and in 6 runs of + 20 he was dead before he swung. At **HP 20, armour 2** he lasts about four and a half + rounds, somebody is hurt in 28 runs of 30, and somebody goes down in 9. +4. **Two stat lines disagreed with the sheets** (Marrow 16 vs 15, Enderby 13 vs 12). + Both corrected, and `check-behaviour` now parses this document's fight line and + compares it to the actor the build generates. +5. **Two rolls had no failure written.** The body (now marked *no roll*) and Sammy's + ankle pull (now has a fumble result). + +The run itself: Act One's optional Spot clues both missed and cost nothing, because the +essentials are automatic. Ashcroft found Edith Crane on Research. Braithwaite failed the +body twice, which no longer matters. Renshaw broke Sister Enderby by walking the sixth +person back into the room without a die being rolled. Braithwaite fumbled the ankle pull +on a 100 and Sharrock hauled him out. Marrow took four rounds and put Pollard on eight +hit points. Renshaw talked Tunnicliffe down on a Persuade success. Panel down at 23:40. diff --git a/packs/armour/000003.log b/packs/armour/000003.log new file mode 100644 index 0000000..9b6d27d Binary files /dev/null and b/packs/armour/000003.log differ diff --git a/packs/armour/000005.ldb b/packs/armour/000005.ldb deleted file mode 100644 index c982555..0000000 Binary files a/packs/armour/000005.ldb and /dev/null differ diff --git a/packs/armour/000006.log b/packs/armour/000006.log deleted file mode 100644 index 1a1bb27..0000000 Binary files a/packs/armour/000006.log and /dev/null differ diff --git a/packs/armour/CURRENT b/packs/armour/CURRENT index cacca75..1a84852 100644 --- a/packs/armour/CURRENT +++ b/packs/armour/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/armour/LOG b/packs/armour/LOG index 1a1ad09..5fdba7b 100644 --- a/packs/armour/LOG +++ b/packs/armour/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.368182 1740df000 Recovering log #3 -2026/08/12-17:49:53.368621 1740df000 Level-0 table #5: started -2026/08/12-17:49:53.368768 1740df000 Level-0 table #5: 4591 bytes OK -2026/08/12-17:49:53.369101 1740df000 Delete type=0 #3 -2026/08/12-17:49:53.369149 1740df000 Delete type=3 #2 +2026/08/12-18:21:45.126312 1700b3000 Delete type=3 #1 diff --git a/packs/armour/LOG.old b/packs/armour/LOG.old deleted file mode 100644 index b34de91..0000000 --- a/packs/armour/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.068944 170d6f000 Delete type=3 #1 diff --git a/packs/armour/MANIFEST-000002 b/packs/armour/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/armour/MANIFEST-000002 differ diff --git a/packs/armour/MANIFEST-000004 b/packs/armour/MANIFEST-000004 deleted file mode 100644 index 9c05997..0000000 Binary files a/packs/armour/MANIFEST-000004 and /dev/null differ diff --git a/packs/expedition/000003.log b/packs/expedition/000003.log new file mode 100644 index 0000000..263295b Binary files /dev/null and b/packs/expedition/000003.log differ diff --git a/packs/expedition/000005.ldb b/packs/expedition/000005.ldb deleted file mode 100644 index 4ff460d..0000000 Binary files a/packs/expedition/000005.ldb and /dev/null differ diff --git a/packs/expedition/000006.log b/packs/expedition/000006.log deleted file mode 100644 index 268b187..0000000 Binary files a/packs/expedition/000006.log and /dev/null differ diff --git a/packs/expedition/CURRENT b/packs/expedition/CURRENT index cacca75..1a84852 100644 --- a/packs/expedition/CURRENT +++ b/packs/expedition/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/expedition/LOG b/packs/expedition/LOG index d739dbf..95d40a6 100644 --- a/packs/expedition/LOG +++ b/packs/expedition/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.391934 1750f7000 Recovering log #3 -2026/08/12-17:49:53.392050 1750f7000 Level-0 table #5: started -2026/08/12-17:49:53.392170 1750f7000 Level-0 table #5: 4129 bytes OK -2026/08/12-17:49:53.392389 1750f7000 Delete type=0 #3 -2026/08/12-17:49:53.392428 1750f7000 Delete type=3 #2 +2026/08/12-18:21:45.197775 16f09b000 Delete type=3 #1 diff --git a/packs/expedition/LOG.old b/packs/expedition/LOG.old deleted file mode 100644 index 34670cb..0000000 --- a/packs/expedition/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.136741 17157b000 Delete type=3 #1 diff --git a/packs/expedition/MANIFEST-000002 b/packs/expedition/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/expedition/MANIFEST-000002 differ diff --git a/packs/expedition/MANIFEST-000004 b/packs/expedition/MANIFEST-000004 deleted file mode 100644 index 47fbcd4..0000000 Binary files a/packs/expedition/MANIFEST-000004 and /dev/null differ diff --git a/packs/gear/000003.log b/packs/gear/000003.log new file mode 100644 index 0000000..629ba6d Binary files /dev/null and b/packs/gear/000003.log differ diff --git a/packs/gear/000005.ldb b/packs/gear/000005.ldb deleted file mode 100644 index d9bac03..0000000 Binary files a/packs/gear/000005.ldb and /dev/null differ diff --git a/packs/gear/000006.log b/packs/gear/000006.log deleted file mode 100644 index d1deb9b..0000000 Binary files a/packs/gear/000006.log and /dev/null differ diff --git a/packs/gear/CURRENT b/packs/gear/CURRENT index cacca75..1a84852 100644 --- a/packs/gear/CURRENT +++ b/packs/gear/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/gear/LOG b/packs/gear/LOG index 0f44096..5d025c6 100644 --- a/packs/gear/LOG +++ b/packs/gear/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.370014 1748eb000 Recovering log #3 -2026/08/12-17:49:53.370516 1748eb000 Level-0 table #5: started -2026/08/12-17:49:53.370852 1748eb000 Level-0 table #5: 31614 bytes OK -2026/08/12-17:49:53.371120 1748eb000 Delete type=0 #3 -2026/08/12-17:49:53.371155 1748eb000 Delete type=3 #2 +2026/08/12-18:21:45.128218 16f09b000 Delete type=3 #1 diff --git a/packs/gear/LOG.old b/packs/gear/LOG.old deleted file mode 100644 index 55d3bae..0000000 --- a/packs/gear/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.070939 171d87000 Delete type=3 #1 diff --git a/packs/gear/MANIFEST-000002 b/packs/gear/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/gear/MANIFEST-000002 differ diff --git a/packs/gear/MANIFEST-000004 b/packs/gear/MANIFEST-000004 deleted file mode 100644 index f7cd73c..0000000 Binary files a/packs/gear/MANIFEST-000004 and /dev/null differ diff --git a/packs/lastadmission/000003.log b/packs/lastadmission/000003.log new file mode 100644 index 0000000..817f360 Binary files /dev/null and b/packs/lastadmission/000003.log differ diff --git a/packs/lastadmission/000005.ldb b/packs/lastadmission/000005.ldb deleted file mode 100644 index 527a85d..0000000 Binary files a/packs/lastadmission/000005.ldb and /dev/null differ diff --git a/packs/lastadmission/000006.log b/packs/lastadmission/000006.log deleted file mode 100644 index 5530ffa..0000000 Binary files a/packs/lastadmission/000006.log and /dev/null differ diff --git a/packs/lastadmission/CURRENT b/packs/lastadmission/CURRENT index cacca75..1a84852 100644 --- a/packs/lastadmission/CURRENT +++ b/packs/lastadmission/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/lastadmission/LOG b/packs/lastadmission/LOG index 7860066..87c7871 100644 --- a/packs/lastadmission/LOG +++ b/packs/lastadmission/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.383707 1740df000 Recovering log #3 -2026/08/12-17:49:53.384445 1740df000 Level-0 table #5: started -2026/08/12-17:49:53.384803 1740df000 Level-0 table #5: 44041 bytes OK -2026/08/12-17:49:53.385114 1740df000 Delete type=0 #3 -2026/08/12-17:49:53.385152 1740df000 Delete type=3 #2 +2026/08/12-18:21:45.182031 16e88f000 Delete type=3 #1 diff --git a/packs/lastadmission/LOG.old b/packs/lastadmission/LOG.old deleted file mode 100644 index 29226ae..0000000 --- a/packs/lastadmission/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.120600 170563000 Delete type=3 #1 diff --git a/packs/lastadmission/MANIFEST-000002 b/packs/lastadmission/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/lastadmission/MANIFEST-000002 differ diff --git a/packs/lastadmission/MANIFEST-000004 b/packs/lastadmission/MANIFEST-000004 deleted file mode 100644 index 453e9a7..0000000 Binary files a/packs/lastadmission/MANIFEST-000004 and /dev/null differ diff --git a/packs/npcs/000003.log b/packs/npcs/000003.log new file mode 100644 index 0000000..09b2bf6 Binary files /dev/null and b/packs/npcs/000003.log differ diff --git a/packs/npcs/000005.ldb b/packs/npcs/000005.ldb deleted file mode 100644 index 29f69de..0000000 Binary files a/packs/npcs/000005.ldb and /dev/null differ diff --git a/packs/npcs/000006.log b/packs/npcs/000006.log deleted file mode 100644 index ac2ef10..0000000 Binary files a/packs/npcs/000006.log and /dev/null differ diff --git a/packs/npcs/CURRENT b/packs/npcs/CURRENT index cacca75..1a84852 100644 --- a/packs/npcs/CURRENT +++ b/packs/npcs/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/npcs/LOG b/packs/npcs/LOG index 5f0ecf6..9a22ffa 100644 --- a/packs/npcs/LOG +++ b/packs/npcs/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.355183 1748eb000 Recovering log #3 -2026/08/12-17:49:53.357363 1748eb000 Level-0 table #5: started -2026/08/12-17:49:53.358793 1748eb000 Level-0 table #5: 225945 bytes OK -2026/08/12-17:49:53.359057 1748eb000 Delete type=0 #3 -2026/08/12-17:49:53.359096 1748eb000 Delete type=3 #2 +2026/08/12-18:21:45.164307 16e88f000 Delete type=3 #1 diff --git a/packs/npcs/LOG.old b/packs/npcs/LOG.old deleted file mode 100644 index 69b692b..0000000 --- a/packs/npcs/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.104926 171d87000 Delete type=3 #1 diff --git a/packs/npcs/MANIFEST-000002 b/packs/npcs/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/npcs/MANIFEST-000002 differ diff --git a/packs/npcs/MANIFEST-000004 b/packs/npcs/MANIFEST-000004 deleted file mode 100644 index 116e469..0000000 Binary files a/packs/npcs/MANIFEST-000004 and /dev/null differ diff --git a/packs/powers/000003.log b/packs/powers/000003.log new file mode 100644 index 0000000..d723043 Binary files /dev/null and b/packs/powers/000003.log differ diff --git a/packs/powers/000005.ldb b/packs/powers/000005.ldb deleted file mode 100644 index 7f540c6..0000000 Binary files a/packs/powers/000005.ldb and /dev/null differ diff --git a/packs/powers/000006.log b/packs/powers/000006.log deleted file mode 100644 index 43e306f..0000000 Binary files a/packs/powers/000006.log and /dev/null differ diff --git a/packs/powers/CURRENT b/packs/powers/CURRENT index cacca75..1a84852 100644 --- a/packs/powers/CURRENT +++ b/packs/powers/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/powers/LOG b/packs/powers/LOG index b11bd8e..ab5d4dd 100644 --- a/packs/powers/LOG +++ b/packs/powers/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.364381 175903000 Recovering log #3 -2026/08/12-17:49:53.364910 175903000 Level-0 table #5: started -2026/08/12-17:49:53.365049 175903000 Level-0 table #5: 3295 bytes OK -2026/08/12-17:49:53.365394 175903000 Delete type=0 #3 -2026/08/12-17:49:53.365437 175903000 Delete type=3 #2 +2026/08/12-18:21:45.192532 16e88f000 Delete type=3 #1 diff --git a/packs/powers/LOG.old b/packs/powers/LOG.old deleted file mode 100644 index c5eadc4..0000000 --- a/packs/powers/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.131380 17157b000 Delete type=3 #1 diff --git a/packs/powers/MANIFEST-000002 b/packs/powers/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/powers/MANIFEST-000002 differ diff --git a/packs/powers/MANIFEST-000004 b/packs/powers/MANIFEST-000004 deleted file mode 100644 index 20de082..0000000 Binary files a/packs/powers/MANIFEST-000004 and /dev/null differ diff --git a/packs/pregens/000003.log b/packs/pregens/000003.log new file mode 100644 index 0000000..a5c1abe Binary files /dev/null and b/packs/pregens/000003.log differ diff --git a/packs/pregens/000005.ldb b/packs/pregens/000005.ldb deleted file mode 100644 index 3049d5c..0000000 Binary files a/packs/pregens/000005.ldb and /dev/null differ diff --git a/packs/pregens/000006.log b/packs/pregens/000006.log deleted file mode 100644 index cf7b22d..0000000 Binary files a/packs/pregens/000006.log and /dev/null differ diff --git a/packs/pregens/CURRENT b/packs/pregens/CURRENT index cacca75..1a84852 100644 --- a/packs/pregens/CURRENT +++ b/packs/pregens/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/pregens/LOG b/packs/pregens/LOG index 8c4274c..e0f3628 100644 --- a/packs/pregens/LOG +++ b/packs/pregens/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.343466 1740df000 Recovering log #3 -2026/08/12-17:49:53.346354 1740df000 Level-0 table #5: started -2026/08/12-17:49:53.349680 1740df000 Level-0 table #5: 546705 bytes OK -2026/08/12-17:49:53.350185 1740df000 Delete type=0 #3 -2026/08/12-17:49:53.350240 1740df000 Delete type=3 #2 +2026/08/12-18:21:45.149192 16f09b000 Delete type=3 #1 diff --git a/packs/pregens/LOG.old b/packs/pregens/LOG.old deleted file mode 100644 index 6f758ad..0000000 --- a/packs/pregens/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.090847 170563000 Delete type=3 #1 diff --git a/packs/pregens/MANIFEST-000002 b/packs/pregens/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/pregens/MANIFEST-000002 differ diff --git a/packs/pregens/MANIFEST-000004 b/packs/pregens/MANIFEST-000004 deleted file mode 100644 index 49b29a4..0000000 Binary files a/packs/pregens/MANIFEST-000004 and /dev/null differ diff --git a/packs/primer/000003.log b/packs/primer/000003.log new file mode 100644 index 0000000..fff1285 Binary files /dev/null and b/packs/primer/000003.log differ diff --git a/packs/primer/000005.ldb b/packs/primer/000005.ldb deleted file mode 100644 index 669e7b1..0000000 Binary files a/packs/primer/000005.ldb and /dev/null differ diff --git a/packs/primer/000006.log b/packs/primer/000006.log deleted file mode 100644 index daa37bb..0000000 Binary files a/packs/primer/000006.log and /dev/null differ diff --git a/packs/primer/CURRENT b/packs/primer/CURRENT index cacca75..1a84852 100644 --- a/packs/primer/CURRENT +++ b/packs/primer/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/primer/LOG b/packs/primer/LOG index fb65ede..b2b4b92 100644 --- a/packs/primer/LOG +++ b/packs/primer/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.373813 1750f7000 Recovering log #3 -2026/08/12-17:49:53.374272 1750f7000 Level-0 table #5: started -2026/08/12-17:49:53.374551 1750f7000 Level-0 table #5: 21613 bytes OK -2026/08/12-17:49:53.374779 1750f7000 Delete type=0 #3 -2026/08/12-17:49:53.374812 1750f7000 Delete type=3 #2 +2026/08/12-18:21:45.189595 1700b3000 Delete type=3 #1 diff --git a/packs/primer/LOG.old b/packs/primer/LOG.old deleted file mode 100644 index af34f23..0000000 --- a/packs/primer/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.128383 170563000 Delete type=3 #1 diff --git a/packs/primer/MANIFEST-000002 b/packs/primer/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/primer/MANIFEST-000002 differ diff --git a/packs/primer/MANIFEST-000004 b/packs/primer/MANIFEST-000004 deleted file mode 100644 index 2ce4ec2..0000000 Binary files a/packs/primer/MANIFEST-000004 and /dev/null differ diff --git a/packs/prologue/000003.log b/packs/prologue/000003.log new file mode 100644 index 0000000..9b97058 Binary files /dev/null and b/packs/prologue/000003.log differ diff --git a/packs/prologue/000005.ldb b/packs/prologue/000005.ldb deleted file mode 100644 index 03d2f7f..0000000 Binary files a/packs/prologue/000005.ldb and /dev/null differ diff --git a/packs/prologue/000006.log b/packs/prologue/000006.log deleted file mode 100644 index 2d03e81..0000000 Binary files a/packs/prologue/000006.log and /dev/null differ diff --git a/packs/prologue/CURRENT b/packs/prologue/CURRENT index cacca75..1a84852 100644 --- a/packs/prologue/CURRENT +++ b/packs/prologue/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/prologue/LOG b/packs/prologue/LOG index e099dca..c9d4873 100644 --- a/packs/prologue/LOG +++ b/packs/prologue/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.385969 1740df000 Recovering log #3 -2026/08/12-17:49:53.386885 1740df000 Level-0 table #5: started -2026/08/12-17:49:53.387263 1740df000 Level-0 table #5: 43953 bytes OK -2026/08/12-17:49:53.387509 1740df000 Delete type=0 #3 -2026/08/12-17:49:53.387539 1740df000 Delete type=3 #2 +2026/08/12-18:21:45.186121 16f09b000 Delete type=3 #1 diff --git a/packs/prologue/LOG.old b/packs/prologue/LOG.old deleted file mode 100644 index 55c511a..0000000 --- a/packs/prologue/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.124895 171d87000 Delete type=3 #1 diff --git a/packs/prologue/MANIFEST-000002 b/packs/prologue/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/prologue/MANIFEST-000002 differ diff --git a/packs/prologue/MANIFEST-000004 b/packs/prologue/MANIFEST-000004 deleted file mode 100644 index 8e0eaa0..0000000 Binary files a/packs/prologue/MANIFEST-000004 and /dev/null differ diff --git a/packs/rules/000003.log b/packs/rules/000003.log new file mode 100644 index 0000000..15e7e16 Binary files /dev/null and b/packs/rules/000003.log differ diff --git a/packs/rules/000005.ldb b/packs/rules/000005.ldb deleted file mode 100644 index c8f9c7d..0000000 Binary files a/packs/rules/000005.ldb and /dev/null differ diff --git a/packs/rules/000006.log b/packs/rules/000006.log deleted file mode 100644 index 7b08998..0000000 Binary files a/packs/rules/000006.log and /dev/null differ diff --git a/packs/rules/CURRENT b/packs/rules/CURRENT index cacca75..1a84852 100644 --- a/packs/rules/CURRENT +++ b/packs/rules/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/rules/LOG b/packs/rules/LOG index dc77208..799afa9 100644 --- a/packs/rules/LOG +++ b/packs/rules/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.375753 175903000 Recovering log #3 -2026/08/12-17:49:53.376385 175903000 Level-0 table #5: started -2026/08/12-17:49:53.376715 175903000 Level-0 table #5: 33484 bytes OK -2026/08/12-17:49:53.376959 175903000 Delete type=0 #3 -2026/08/12-17:49:53.376987 175903000 Delete type=3 #2 +2026/08/12-18:21:45.196269 16f09b000 Delete type=3 #1 diff --git a/packs/rules/LOG.old b/packs/rules/LOG.old deleted file mode 100644 index eeedb8d..0000000 --- a/packs/rules/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.135361 17157b000 Delete type=3 #1 diff --git a/packs/rules/MANIFEST-000002 b/packs/rules/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/rules/MANIFEST-000002 differ diff --git a/packs/rules/MANIFEST-000004 b/packs/rules/MANIFEST-000004 deleted file mode 100644 index 15f0607..0000000 Binary files a/packs/rules/MANIFEST-000004 and /dev/null differ diff --git a/packs/skills/000003.log b/packs/skills/000003.log new file mode 100644 index 0000000..2a55440 Binary files /dev/null and b/packs/skills/000003.log differ diff --git a/packs/skills/000005.ldb b/packs/skills/000005.ldb deleted file mode 100644 index eb948ea..0000000 Binary files a/packs/skills/000005.ldb and /dev/null differ diff --git a/packs/skills/000006.log b/packs/skills/000006.log deleted file mode 100644 index 1989ee1..0000000 Binary files a/packs/skills/000006.log and /dev/null differ diff --git a/packs/skills/CURRENT b/packs/skills/CURRENT index cacca75..1a84852 100644 --- a/packs/skills/CURRENT +++ b/packs/skills/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/skills/LOG b/packs/skills/LOG index 4676a1a..82892cb 100644 --- a/packs/skills/LOG +++ b/packs/skills/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.361533 175903000 Recovering log #3 -2026/08/12-17:49:53.361695 175903000 Level-0 table #5: started -2026/08/12-17:49:53.361841 175903000 Level-0 table #5: 7590 bytes OK -2026/08/12-17:49:53.362062 175903000 Delete type=0 #3 -2026/08/12-17:49:53.362096 175903000 Delete type=3 #2 +2026/08/12-18:21:45.120890 16e88f000 Delete type=3 #1 diff --git a/packs/skills/LOG.old b/packs/skills/LOG.old deleted file mode 100644 index 51b565f..0000000 --- a/packs/skills/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.062885 171d87000 Delete type=3 #1 diff --git a/packs/skills/MANIFEST-000002 b/packs/skills/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/skills/MANIFEST-000002 differ diff --git a/packs/skills/MANIFEST-000004 b/packs/skills/MANIFEST-000004 deleted file mode 100644 index 90efb97..0000000 Binary files a/packs/skills/MANIFEST-000004 and /dev/null differ diff --git a/packs/slice/000003.log b/packs/slice/000003.log new file mode 100644 index 0000000..39926e8 Binary files /dev/null and b/packs/slice/000003.log differ diff --git a/packs/slice/000005.ldb b/packs/slice/000005.ldb deleted file mode 100644 index ac4df01..0000000 Binary files a/packs/slice/000005.ldb and /dev/null differ diff --git a/packs/slice/000006.log b/packs/slice/000006.log deleted file mode 100644 index c25ac75..0000000 Binary files a/packs/slice/000006.log and /dev/null differ diff --git a/packs/slice/CURRENT b/packs/slice/CURRENT index cacca75..1a84852 100644 --- a/packs/slice/CURRENT +++ b/packs/slice/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/slice/LOG b/packs/slice/LOG index 8c276c0..4dacded 100644 --- a/packs/slice/LOG +++ b/packs/slice/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.388330 1740df000 Recovering log #3 -2026/08/12-17:49:53.388940 1740df000 Level-0 table #5: started -2026/08/12-17:49:53.389166 1740df000 Level-0 table #5: 16902 bytes OK -2026/08/12-17:49:53.389390 1740df000 Delete type=0 #3 -2026/08/12-17:49:53.389423 1740df000 Delete type=3 #2 +2026/08/12-18:21:45.191070 16f09b000 Delete type=3 #1 diff --git a/packs/slice/LOG.old b/packs/slice/LOG.old deleted file mode 100644 index d316f21..0000000 --- a/packs/slice/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.129923 17157b000 Delete type=3 #1 diff --git a/packs/slice/MANIFEST-000002 b/packs/slice/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/slice/MANIFEST-000002 differ diff --git a/packs/slice/MANIFEST-000004 b/packs/slice/MANIFEST-000004 deleted file mode 100644 index 0966a50..0000000 Binary files a/packs/slice/MANIFEST-000004 and /dev/null differ diff --git a/packs/starter/000003.log b/packs/starter/000003.log new file mode 100644 index 0000000..02f266f Binary files /dev/null and b/packs/starter/000003.log differ diff --git a/packs/starter/000005.ldb b/packs/starter/000005.ldb deleted file mode 100644 index c0f9d9b..0000000 Binary files a/packs/starter/000005.ldb and /dev/null differ diff --git a/packs/starter/000006.log b/packs/starter/000006.log deleted file mode 100644 index aaf167c..0000000 Binary files a/packs/starter/000006.log and /dev/null differ diff --git a/packs/starter/CURRENT b/packs/starter/CURRENT index cacca75..1a84852 100644 --- a/packs/starter/CURRENT +++ b/packs/starter/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/starter/LOG b/packs/starter/LOG index 0f0d523..9b9c137 100644 --- a/packs/starter/LOG +++ b/packs/starter/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.379303 1740df000 Recovering log #3 -2026/08/12-17:49:53.380189 1740df000 Level-0 table #5: started -2026/08/12-17:49:53.380887 1740df000 Level-0 table #5: 82299 bytes OK -2026/08/12-17:49:53.381137 1740df000 Delete type=0 #3 -2026/08/12-17:49:53.381171 1740df000 Delete type=3 #2 +2026/08/12-18:21:45.175057 16f09b000 Delete type=3 #1 diff --git a/packs/starter/LOG.old b/packs/starter/LOG.old deleted file mode 100644 index 88280c7..0000000 --- a/packs/starter/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.115076 170563000 Delete type=3 #1 diff --git a/packs/starter/MANIFEST-000002 b/packs/starter/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/starter/MANIFEST-000002 differ diff --git a/packs/starter/MANIFEST-000004 b/packs/starter/MANIFEST-000004 deleted file mode 100644 index 87687fc..0000000 Binary files a/packs/starter/MANIFEST-000004 and /dev/null differ diff --git a/packs/tables/000003.log b/packs/tables/000003.log new file mode 100644 index 0000000..f125b7d Binary files /dev/null and b/packs/tables/000003.log differ diff --git a/packs/tables/000005.ldb b/packs/tables/000005.ldb deleted file mode 100644 index 64baa1c..0000000 Binary files a/packs/tables/000005.ldb and /dev/null differ diff --git a/packs/tables/000006.log b/packs/tables/000006.log deleted file mode 100644 index d5e06f3..0000000 Binary files a/packs/tables/000006.log and /dev/null differ diff --git a/packs/tables/CURRENT b/packs/tables/CURRENT index cacca75..1a84852 100644 --- a/packs/tables/CURRENT +++ b/packs/tables/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/tables/LOG b/packs/tables/LOG index 93eb909..6e67a56 100644 --- a/packs/tables/LOG +++ b/packs/tables/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.390375 175903000 Recovering log #3 -2026/08/12-17:49:53.390930 175903000 Level-0 table #5: started -2026/08/12-17:49:53.391056 175903000 Level-0 table #5: 3739 bytes OK -2026/08/12-17:49:53.391269 175903000 Delete type=0 #3 -2026/08/12-17:49:53.391300 175903000 Delete type=3 #2 +2026/08/12-18:21:45.168964 16f8a7000 Delete type=3 #1 diff --git a/packs/tables/LOG.old b/packs/tables/LOG.old deleted file mode 100644 index aabdd1c..0000000 --- a/packs/tables/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.109114 171d87000 Delete type=3 #1 diff --git a/packs/tables/MANIFEST-000002 b/packs/tables/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/tables/MANIFEST-000002 differ diff --git a/packs/tables/MANIFEST-000004 b/packs/tables/MANIFEST-000004 deleted file mode 100644 index 004ff30..0000000 Binary files a/packs/tables/MANIFEST-000004 and /dev/null differ diff --git a/packs/talents/000003.log b/packs/talents/000003.log new file mode 100644 index 0000000..443b7ea Binary files /dev/null and b/packs/talents/000003.log differ diff --git a/packs/talents/000005.ldb b/packs/talents/000005.ldb deleted file mode 100644 index fb653de..0000000 Binary files a/packs/talents/000005.ldb and /dev/null differ diff --git a/packs/talents/000006.log b/packs/talents/000006.log deleted file mode 100644 index 29003f7..0000000 Binary files a/packs/talents/000006.log and /dev/null differ diff --git a/packs/talents/CURRENT b/packs/talents/CURRENT index cacca75..1a84852 100644 --- a/packs/talents/CURRENT +++ b/packs/talents/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/talents/LOG b/packs/talents/LOG index 9e850ac..8e99eb2 100644 --- a/packs/talents/LOG +++ b/packs/talents/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.362963 1748eb000 Recovering log #3 -2026/08/12-17:49:53.363098 1748eb000 Level-0 table #5: started -2026/08/12-17:49:53.363267 1748eb000 Level-0 table #5: 5770 bytes OK -2026/08/12-17:49:53.363499 1748eb000 Delete type=0 #3 -2026/08/12-17:49:53.363537 1748eb000 Delete type=3 #2 +2026/08/12-18:21:45.123309 16e88f000 Delete type=3 #1 diff --git a/packs/talents/LOG.old b/packs/talents/LOG.old deleted file mode 100644 index e27c2b4..0000000 --- a/packs/talents/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.065656 17157b000 Delete type=3 #1 diff --git a/packs/talents/MANIFEST-000002 b/packs/talents/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/talents/MANIFEST-000002 differ diff --git a/packs/talents/MANIFEST-000004 b/packs/talents/MANIFEST-000004 deleted file mode 100644 index f8c6b47..0000000 Binary files a/packs/talents/MANIFEST-000004 and /dev/null differ diff --git a/packs/vehicles/000003.log b/packs/vehicles/000003.log new file mode 100644 index 0000000..9950ce5 Binary files /dev/null and b/packs/vehicles/000003.log differ diff --git a/packs/vehicles/000005.ldb b/packs/vehicles/000005.ldb deleted file mode 100644 index f6b2cd4..0000000 Binary files a/packs/vehicles/000005.ldb and /dev/null differ diff --git a/packs/vehicles/000006.log b/packs/vehicles/000006.log deleted file mode 100644 index 47800e2..0000000 Binary files a/packs/vehicles/000006.log and /dev/null differ diff --git a/packs/vehicles/CURRENT b/packs/vehicles/CURRENT index cacca75..1a84852 100644 --- a/packs/vehicles/CURRENT +++ b/packs/vehicles/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/vehicles/LOG b/packs/vehicles/LOG index fb96f04..a096397 100644 --- a/packs/vehicles/LOG +++ b/packs/vehicles/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.372199 1740df000 Recovering log #3 -2026/08/12-17:49:53.372664 1740df000 Level-0 table #5: started -2026/08/12-17:49:53.372794 1740df000 Level-0 table #5: 6939 bytes OK -2026/08/12-17:49:53.373008 1740df000 Delete type=0 #3 -2026/08/12-17:49:53.373046 1740df000 Delete type=3 #2 +2026/08/12-18:21:45.129984 1700b3000 Delete type=3 #1 diff --git a/packs/vehicles/LOG.old b/packs/vehicles/LOG.old deleted file mode 100644 index f7be9ec..0000000 --- a/packs/vehicles/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.073160 171d87000 Delete type=3 #1 diff --git a/packs/vehicles/MANIFEST-000002 b/packs/vehicles/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/vehicles/MANIFEST-000002 differ diff --git a/packs/vehicles/MANIFEST-000004 b/packs/vehicles/MANIFEST-000004 deleted file mode 100644 index d4d73b7..0000000 Binary files a/packs/vehicles/MANIFEST-000004 and /dev/null differ diff --git a/packs/weapons/000003.log b/packs/weapons/000003.log new file mode 100644 index 0000000..e1488ed Binary files /dev/null and b/packs/weapons/000003.log differ diff --git a/packs/weapons/000005.ldb b/packs/weapons/000005.ldb deleted file mode 100644 index 742beba..0000000 Binary files a/packs/weapons/000005.ldb and /dev/null differ diff --git a/packs/weapons/000006.log b/packs/weapons/000006.log deleted file mode 100644 index 4d427a6..0000000 Binary files a/packs/weapons/000006.log and /dev/null differ diff --git a/packs/weapons/CURRENT b/packs/weapons/CURRENT index cacca75..1a84852 100644 --- a/packs/weapons/CURRENT +++ b/packs/weapons/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/weapons/LOG b/packs/weapons/LOG index 2a3bdc8..732fc38 100644 --- a/packs/weapons/LOG +++ b/packs/weapons/LOG @@ -1,5 +1 @@ -2026/08/12-17:49:53.366404 1748eb000 Recovering log #3 -2026/08/12-17:49:53.366708 1748eb000 Level-0 table #5: started -2026/08/12-17:49:53.366949 1748eb000 Level-0 table #5: 14767 bytes OK -2026/08/12-17:49:53.367196 1748eb000 Delete type=0 #3 -2026/08/12-17:49:53.367229 1748eb000 Delete type=3 #2 +2026/08/12-18:21:45.124907 16f8a7000 Delete type=3 #1 diff --git a/packs/weapons/LOG.old b/packs/weapons/LOG.old deleted file mode 100644 index c7c46aa..0000000 --- a/packs/weapons/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/12-17:49:38.067337 17157b000 Delete type=3 #1 diff --git a/packs/weapons/MANIFEST-000002 b/packs/weapons/MANIFEST-000002 new file mode 100644 index 0000000..bbbc585 Binary files /dev/null and b/packs/weapons/MANIFEST-000002 differ diff --git a/packs/weapons/MANIFEST-000004 b/packs/weapons/MANIFEST-000004 deleted file mode 100644 index 6a582af..0000000 Binary files a/packs/weapons/MANIFEST-000004 and /dev/null differ diff --git a/tools/build-packs.mjs b/tools/build-packs.mjs index 9965031..b9d0178 100644 --- a/tools/build-packs.mjs +++ b/tools/build-packs.mjs @@ -230,8 +230,20 @@ function expandFromRegister(spec, { where = "roster", civilian = false } = {}) { const it = GEAR_LOOKUP.get(k) ?? WEAPON_LOOKUP.get(k) ?? ARMOUR_LOOKUP.get(k); return !!it && (it.era === "anomalous" || !!it.coherence); }; + // No firearm and no body armour either. The police trade kit contains a sidearm and a + // stab vest, which is right for a serving officer and wrong for the person before the + // department found them — this is Britain, and the two ex-police pregens were walking + // into a civilian prologue armed and armoured. The department issues those. Playing + // LAST ADMISSION found it: its only fight was over in one round because a punter had + // a revolver. A criminal's knife stays; a knife is not an issued weapon. + const isIssuedForce = k => { + const w = WEAPON_LOOKUP.get(k); + if (w) return w.cls !== "melee"; + return ARMOUR_LOOKUP.has(k); + }; const kitKeys = civilian - ? [...R.kit, ...(spec.extraWeapons ?? []), ...(spec.extraGear ?? [])].filter(k => !isAnomalous(k)) + ? [...R.kit, ...(spec.extraWeapons ?? []), ...(spec.extraGear ?? [])] + .filter(k => !isAnomalous(k) && !isIssuedForce(k)) : [...STANDING_ISSUE, ...R.kit, ...(isTrade ? INDUCTION.kit : []), ...(spec.extraWeapons ?? []), ...(spec.extraGear ?? []), @@ -569,6 +581,9 @@ await writePack("armour", ARMOURS.map(a => { return !!it && (it.era === "anomalous" || !!it.coherence); }); if (odd.length) throw new Error(`${c.name} is carrying something anomalous: ${odd.join(", ")}`); + if (c.armour.length) throw new Error(`${c.name} is wearing armour: ${c.armour.join(", ")}`); + const guns = c.weapons.filter(k => WEAPON_LOOKUP.get(k)?.cls !== "melee"); + if (guns.length) throw new Error(`${c.name} is carrying a firearm: ${guns.join(", ")}`); // Same rule for skills: the linguist's core list contains trade cant, because it is // a language and she is a linguist. Only a rating she could ONLY have been taught // at the training centre is a failure. diff --git a/tools/check-behaviour.mjs b/tools/check-behaviour.mjs index 0cdce61..2021d8c 100644 --- a/tools/check-behaviour.mjs +++ b/tools/check-behaviour.mjs @@ -347,6 +347,35 @@ test("every roster agent has a before-the-department entry, and the set covers e assert.equal(missing.length, 0, `no roster agent came out of: ${missing.join(", ")}`); }); +// A stat line in prose that disagrees with the actor the build generates is this +// project's oldest failure mode wearing a different hat: the number is written down and +// nothing reads it. LAST ADMISSION shipped with "HP 16, armour 1, shears 1d8+1" on the +// page and a 15-hit-point man carrying a 1d4+2 utility knife in the pack, so a GM running +// off the token had a different fight from the one written. Parse the page and check it. +test("LAST ADMISSION's fight numbers match the actor the build will generate", async () => { + const { LA_PAGES, LA_CAST } = await import("./scenario-lastadmission.mjs"); + const { WEAPONS, hitPoints } = await import("./content.mjs"); + const html = LA_PAGES.map(p => p.content).join(""); + const m = html.match(/HP (\d+), armour (\d+), shears (\d+d\d+(?:\+\d+)?)/); + assert.ok(m, "the page no longer states Old Marrow's HP, armour and shear damage"); + const [, hp, armour, dmg] = m; + + const marrow = LA_CAST.find(c => c.name === "Old Marrow"); + assert.equal(Number(hp), hitPoints(marrow.ch.con, marrow.ch.siz), + "the page's HP is not what CON and SIZ will actually generate"); + assert.equal(Number(armour), marrow.naturalArmour, + "the page's armour is not the actor's natural armour"); + + // The shears are whichever real catalogue weapon he is issued — prose does not get to + // invent damage for an item the actor is holding. + const carried = marrow.weapons.filter(k => k !== "punch"); + assert.equal(carried.length, 1, "Old Marrow should carry exactly one weapon besides his fists"); + const w = WEAPONS.find(x => x.key === carried[0]); + assert.ok(w, `Old Marrow carries "${carried[0]}", which is not in the catalogue`); + assert.equal(dmg, w.dmg, + `the page says the shears do ${dmg}; the ${w.name} on his sheet does ${w.dmg}`); +}); + /* ---------------------------------------------------------------- */ await runAll(); diff --git a/tools/scenario-lastadmission.mjs b/tools/scenario-lastadmission.mjs index 7ebaa3e..afebbf2 100644 --- a/tools/scenario-lastadmission.mjs +++ b/tools/scenario-lastadmission.mjs @@ -194,15 +194,15 @@ export const LA_PAGES = [ + "costume, crew, a hen party who went the wrong way, and three things that are none " + "of those.") + P("Josh Pardoe is dead. Behind the false wall in the east corridor, " - + "and has been for half an hour. He is not marked. [CUS: Medicine or First Aid " - + "— nothing killed him that leaves a sign. Braithwaite will say cold, and will " - + "not be able to say why.]") + + "and has been for half an hour. He is not marked. No roll. Nothing killed him that " + + "leaves a sign. Anyone with Medicine or First Aid says cold, and cannot say why, " + + "and a good roll does not buy a better answer because there is not one.") + H(2, "Sister Enderby") + P("“She walked the ward at night and counted the beds, and if the count was " + "wrong she made it right.”") + UL(["Does: counts people, out loud. In a group of six she says " + "six, then she says five, and then she goes and makes it true.", - "Fight: HP 13, armour 0, Brawl 55%, 1d6. She does not defend " + "Fight: HP 12, armour 0, Brawl 55%, 1d6. She does not defend " + "herself. She counts while you hit her.", "Script break: she stops the moment the count is right. Put a " + "person back in the room and she is finished with it. This is the " @@ -215,7 +215,10 @@ export const LA_PAGES = [ + "does not hurt anybody. He pulls, and he is very strong, and the hole is nine " + "inches across.", "Fight: you cannot hit him. Athletics or Brawl against STR 17 to " - + "get a leg back, or automatic if somebody pulls with you.", + + "get a leg back, or automatic if somebody pulls with you. On a " + + "fumble they go over on their face and lose whatever was in their " + + "hands under the floorboards — a torch, a phone, the tag list. He does " + + "not get to keep the leg.", "Script break: he is hiding, so he stops when he is " + "found. Say his name and open the panel and he is not there any more."]) + H(2, "Old Marrow") @@ -224,8 +227,9 @@ export const LA_PAGES = [ + "and he is not coming in now, but he will see you off it.”") + UL(["Does: carries the shears, moves at a walk, will not enter the " + "building. He is the reason nobody gets to the car park.", - "Fight: HP 16, armour 1 (coat), shears 1d8+1, Brawl/Melee 60%. " - + "He is the actual fight. Slow, never runs, and between them and the way out.", + "Fight: HP 20, armour 2, shears 1d8+2, Brawl/Melee 60%. He is the " + + "actual fight: slow, never runs, always between them and the way out. Expect " + + "about four and a half rounds and expect somebody to get hurt.", "Script break: he will not come in the house. Going " + "inside is a complete answer and costs nothing. Reward it. He waits on the lawn."]) + H(2, "The set-piece — the run to the marquee") @@ -234,8 +238,9 @@ export const LA_PAGES = [ + "grass); or go back in and out through the kitchens — Sharrock built the sets " + "and knows the door is there, and the plans are pinned up in the green room for " + "anyone else.", - "Four rounds is plenty. He closes at a walk, one attack a round, " - + "and goes for whoever is furthest from the house.", + "Four or five rounds. He closes at a walk, one attack a round, and " + + "goes for whoever is furthest from the house. He drops about one person in " + + "three fights — and dropped is dropped, not dying: see below.", "If it goes badly: he does not pursue indoors and does not finish " + "anybody off. He sees them off the grass. That is his whole page.", "Idle players: hand them the hen party — six frightened people " @@ -432,7 +437,7 @@ export const LA_HANDOUTS = [ export const LA_CAST = [ { key: "la_enderby", name: "Sister Enderby", - role: "ENTRY. An invention that counts. HP 13, no armour.", + role: "ENTRY. An invention that counts. HP 12, no armour.", chosenStyle: "reflex", naturalArmour: 0, species: "baseline", ch: { str: 13, siz: 11, con: 13, int: 8, pow: 14, dex: 12, cha: 8, edu: 8 }, skills: [{ fam: "brawl", spec: "", val: 55 }, { fam: "spot", spec: "", val: 60 }, @@ -459,14 +464,22 @@ export const LA_CAST = [ + "he stops when he is FOUND. Say his name and open the panel and he is not there." }, { key: "la_marrow", name: "Old Marrow", - role: "ENTRY. An invention that will not come indoors. HP 16, armour 1. The fight.", - chosenStyle: "reflex", naturalArmour: 1, species: "baseline", - ch: { str: 16, siz: 15, con: 15, int: 8, pow: 13, dex: 10, cha: 7, edu: 7 }, + role: "ENTRY. An invention that will not come indoors. HP 20, armour 2. The fight.", + chosenStyle: "reflex", naturalArmour: 2, species: "baseline", + // Tuned by playing it thirty times. At the first numbers he died in 2.4 rounds and in + // six runs of twenty he was dead before he swung, which is not a fight, it is a + // formality. At 20 hit points and 2 armour he lasts about four and a half rounds, + // somebody is hurt in 28 runs of 30, and somebody goes down in 9 — dramatic without + // being a coin flip on a civilian's life. + ch: { str: 16, siz: 22, con: 18, int: 8, pow: 13, dex: 10, cha: 7, edu: 7 }, skills: [{ fam: "brawl", spec: "", val: 60 }, - { fam: "melee_weapon", spec: "knife", val: 60 }, + { fam: "melee_weapon", spec: "polearm", val: 60 }, { fam: "spot", spec: "", val: 50 }], - weapons: ["punch", "dagger"], - tactics: "Carries the shears (count them as 1d8+1), moves at a walk, and WILL NOT ENTER " + // A billhook, not a dagger. The shears were prose — the actor was carrying a utility + // knife at 1d4+2 while the page said 1d8+1, so a GM running from the token had a + // different fight from the one written down. + weapons: ["punch", "billhook"], + tactics: "Carries the shears (the billhook line on his sheet, 1d8+2), moves at a walk, and WILL NOT ENTER " + "THE BUILDING. He is the reason nobody gets to the car park, and he is the actual " + "fight in this scenario: slow, never runs, always between them and the way out. One " + "attack a round, goes for whoever is furthest from the house. He does not pursue "