From c05d488b9d40797b496f9db82687e5abf2876b4a Mon Sep 17 00:00:00 2001 From: slaguru666 <111923774+slaguru666@users.noreply.github.com> Date: Tue, 18 Aug 2026 22:34:23 +0100 Subject: [PATCH] Play THROUGH TRAIN end to end; fix three scenes the dice could not reach MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ran the whole case with five agents — briefing, kit swap, Mercy Draw, the crossing, Cordera, the water tower, the four minutes, the locomotive, the brakes, the register. It completed, and it exposed one serious defect and two smaller ones. All three are the same shape: the scenario put dice in front of things the fiction says should simply happen. 1. THE ENDING WAS UNREACHABLE. Convincing Kell to stop was gated on Persuade or Status. Only THREE of the ten duty-roster agents have either trained — the Field Lead has Persuade 15 and Status 15. Three separate attempts on him all failed and the scenario had no way to end; I narrated it as working because otherwise there was no ending, which is exactly the improvisation a scenario is supposed to prevent. It now takes NO ROLL if the party can tell Kell one true thing about his own train — the coal, the four minutes, the north bench. He has waited a hundred and forty-five years for somebody who knows what is wrong to say so. Only a party that knows nothing rolls, at average, and a failure costs a pass rather than the ending. 2. THE PAPERS NEEDED PERSUADE. Showing one side the other's document is the move the scenario is proudest of, and it sat behind Persuade at −30%: 15% became 1%. Both men WANT their paper read — Merritt is proud of his letter, Ambrose's whole grievance is that nobody has looked at his writ. No roll, between passes. 3. THE BOARDING SORTED ITSELF BADLY. Athletics runs 25–60% across the roster. Putting all five on the water tower left the doctor and the Registry officer missing twice each, carried across on the department's plank, passengers in their own set-piece, two passes gone. The text now names which route suits whom before they choose. What worked, and is worth recording: the automatic clues absorbed two failed rolls in Act One without the trail stalling; Standing Order 9 caught Okonkwo checking a wristwatch in an 1881 street and cost a Coherence and a clock tick; the fumble-is-a-fall rule fired on a 100 at the tower for five damage; the exposure table held — one hit across the whole fight, on the agent who left cover to work on Doyle; and the reset landed exactly as intended, with Doyle standing up at the top of the car and Nkemdirim's hit staying where it was. Version 1.4.1. Co-Authored-By: Claude Opus 5 --- docs/scenarios/THROUGH_TRAIN.md | 28 ++++++++++++++++++++++++++-- packs/armour/LOG | 2 +- packs/expedition/LOG | 2 +- packs/gear/LOG | 2 +- packs/lastadmission/LOG | 2 +- packs/npcs/LOG | 2 +- packs/powers/LOG | 2 +- packs/pregens/LOG | 2 +- packs/primer/LOG | 2 +- packs/prologue/LOG | 2 +- packs/rules/LOG | 2 +- packs/skills/LOG | 2 +- packs/slice/LOG | 2 +- packs/starter/LOG | 2 +- packs/tables/LOG | 2 +- packs/talents/LOG | 2 +- packs/throughtrain/000003.log | Bin 303508 -> 305334 bytes packs/throughtrain/LOG | 2 +- packs/vehicles/LOG | 2 +- packs/weapons/LOG | 2 +- system.json | 2 +- tools/scenario-throughtrain.mjs | 30 +++++++++++++++++++++++++++--- 22 files changed, 72 insertions(+), 24 deletions(-) diff --git a/docs/scenarios/THROUGH_TRAIN.md b/docs/scenarios/THROUGH_TRAIN.md index 7ba0c0d..469e3fa 100644 --- a/docs/scenarios/THROUGH_TRAIN.md +++ b/docs/scenarios/THROUGH_TRAIN.md @@ -327,6 +327,13 @@ miles an hour, for perhaps forty seconds. **The wagon is easier than the tower, and the tower is easier than the horses.** A party that spends an hour arranging the wagon has bought an easy roll and should get one. +**Say which route suits whom, out loud, before they choose.** Athletics on a duty-roster +sheet runs from about 25% to 60%, and the split is not subtle: the Containment officer and +the criminal take the tower, the Field Lead can, and **the doctor and the Registry officer +should be on the wagon**. Playtested by putting all five on the tower: two missed twice, +had to be carried across on the department's plank, and became passengers in their own +set-piece — at a cost of two passes on the clock. + **Everybody has to get on.** A failed attempt gets the next pass, forty minutes later, and the clock moves — not a full stop. @@ -420,6 +427,14 @@ eleven weeks of unpaid wages. **Both genuine. Neither man has seen the other's.** An agent holding both has the whole truth: the company sold the same money twice, then put nine armed men on a train with it. +**NO ROLL IS NEEDED TO SEE EITHER PAPER.** Between passes Merritt shows his letter to +anybody who asks — he is proud of it, it is his authority, and he has had a hundred and +forty-five years with nobody to show it to. Ambrose shows the writ to anybody not +currently shooting at him, because having it read is the entire thing he wants. **Do not +put Persuade in front of this.** Playtested with a real team, the Field Lead's Persuade +was 15% and fell to 1% under the crowd penalty — which turned the scene the scenario is +proudest of into an impossible roll. + **It does not stop the fight.** Merritt will not stand down for a judge he has never heard of while being shot at, and Ambrose has eleven weeks of nothing behind him. @@ -427,8 +442,17 @@ of while being shot at, and Ambrose has eleven weeks of nothing behind him. **Kell will stop the train if a person he believes has authority tells him to, out loud, to his face.** He has waited a hundred and forty-five years to be told. Not on a note, not -shouted from the tender. `[CUS: Persuade or Status — easier if they can tell him something -true about what is happening to his train]` +shouted from the tender. Getting there means the gap between the cars — `[CUS: Athletics]`. + +**Convincing him takes NO ROLL if they can tell him one true thing about his own train.** +That the coal has not run out. That it is the same four minutes. That the line was never +on the north bench. Any of it. The moment somebody who knows what is wrong says so, he +asks them to say when. + +**Only a party that can tell him nothing has to roll** — Persuade or Status at average, and +a failure means he wants another pass to think. **Do not gate the ending on Persuade.** +Seven of the ten duty-roster agents have neither Persuade nor Status trained; playtested, +three separate attempts on Kell all failed and the scenario had no way to end. **When the brakes go on, the loop lets go.** Four minutes finish for the first time since 1881. Doyle and Ambrose do not get up. They never did. diff --git a/packs/armour/LOG b/packs/armour/LOG index 9a99415..8db4b6e 100644 --- a/packs/armour/LOG +++ b/packs/armour/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.827938 1733f3000 Delete type=3 #1 +2026/08/18-22:33:57.943149 172caf000 Delete type=3 #1 diff --git a/packs/expedition/LOG b/packs/expedition/LOG index c17463e..dfc10b6 100644 --- a/packs/expedition/LOG +++ b/packs/expedition/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.907283 17440b000 Delete type=3 #1 +2026/08/18-22:33:58.022518 1734bb000 Delete type=3 #1 diff --git a/packs/gear/LOG b/packs/gear/LOG index 5621d9a..a4bfc12 100644 --- a/packs/gear/LOG +++ b/packs/gear/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.829899 1733f3000 Delete type=3 #1 +2026/08/18-22:33:57.945208 1734bb000 Delete type=3 #1 diff --git a/packs/lastadmission/LOG b/packs/lastadmission/LOG index 98b25c3..282daf6 100644 --- a/packs/lastadmission/LOG +++ b/packs/lastadmission/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.888124 173bff000 Delete type=3 #1 +2026/08/18-22:33:58.004571 1734bb000 Delete type=3 #1 diff --git a/packs/npcs/LOG b/packs/npcs/LOG index a41a7f1..297cd1b 100644 --- a/packs/npcs/LOG +++ b/packs/npcs/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.864834 17440b000 Delete type=3 #1 +2026/08/18-22:33:57.981172 172caf000 Delete type=3 #1 diff --git a/packs/powers/LOG b/packs/powers/LOG index 2be2255..655cb56 100644 --- a/packs/powers/LOG +++ b/packs/powers/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.900790 172be7000 Delete type=3 #1 +2026/08/18-22:33:58.016291 1734bb000 Delete type=3 #1 diff --git a/packs/pregens/LOG b/packs/pregens/LOG index 86e8dd5..0809de6 100644 --- a/packs/pregens/LOG +++ b/packs/pregens/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.850438 173bff000 Delete type=3 #1 +2026/08/18-22:33:57.966535 1724a3000 Delete type=3 #1 diff --git a/packs/primer/LOG b/packs/primer/LOG index 938d5e0..1386535 100644 --- a/packs/primer/LOG +++ b/packs/primer/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.897004 173bff000 Delete type=3 #1 +2026/08/18-22:33:58.012415 172caf000 Delete type=3 #1 diff --git a/packs/prologue/LOG b/packs/prologue/LOG index 8aa540e..1f19595 100644 --- a/packs/prologue/LOG +++ b/packs/prologue/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.892598 17440b000 Delete type=3 #1 +2026/08/18-22:33:58.008698 1724a3000 Delete type=3 #1 diff --git a/packs/rules/LOG b/packs/rules/LOG index 37e3785..83ba50a 100644 --- a/packs/rules/LOG +++ b/packs/rules/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.905375 172be7000 Delete type=3 #1 +2026/08/18-22:33:58.020906 1734bb000 Delete type=3 #1 diff --git a/packs/skills/LOG b/packs/skills/LOG index 6a1c466..0d48a23 100644 --- a/packs/skills/LOG +++ b/packs/skills/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.821741 1733f3000 Delete type=3 #1 +2026/08/18-22:33:57.937187 172caf000 Delete type=3 #1 diff --git a/packs/slice/LOG b/packs/slice/LOG index 7b03d9e..4245f39 100644 --- a/packs/slice/LOG +++ b/packs/slice/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.898927 173bff000 Delete type=3 #1 +2026/08/18-22:33:58.014433 1724a3000 Delete type=3 #1 diff --git a/packs/starter/LOG b/packs/starter/LOG index 5f920d7..e4678e4 100644 --- a/packs/starter/LOG +++ b/packs/starter/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.875126 17440b000 Delete type=3 #1 +2026/08/18-22:33:57.991862 1734bb000 Delete type=3 #1 diff --git a/packs/tables/LOG b/packs/tables/LOG index b96aadc..7f0a424 100644 --- a/packs/tables/LOG +++ b/packs/tables/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.869175 173bff000 Delete type=3 #1 +2026/08/18-22:33:57.985971 1724a3000 Delete type=3 #1 diff --git a/packs/talents/LOG b/packs/talents/LOG index 67d9fa4..53e4c33 100644 --- a/packs/talents/LOG +++ b/packs/talents/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.824182 1733f3000 Delete type=3 #1 +2026/08/18-22:33:57.939923 1734bb000 Delete type=3 #1 diff --git a/packs/throughtrain/000003.log b/packs/throughtrain/000003.log index 17dbebcc55fff63aae78260bb6e19b6a5e71c4fd..eb837ac527fe3f81db877892b9ad75216bfaca75 100644 GIT binary patch delta 1897 zcmZ8i&x;&I6ehbZNk9lhJs3T_L^kHoJG!nBNtT5rJCYx3cGy`_2!b`;HPe;pu4<~P zx6^uPJ>=p|5auTM59le5c+JU!VEzF0BzRHKe?Y%i^CP>$E)-q$zW3hueecbekI#Si zQDbhKm7R5*+)_I619ENP@SnHBWo%z$yLfb zd@)5#_&~X-(wGKvXsjfk$%c~57$-YhuQ_jx9&OW(&vNNi;>c(clvci3x5jyC$z@V{ zvXyo;w5A|2V9YnJu8}wN*6V9=OG2lNORmh7C*?>Rk17T}m)F9@4WqqKx{%tF84gtf z+(l4gRiU)V$%}C)54g3oaR_`z$vmY!DN;&=jziGaylBptn#8x}DcFG=DO@+pEG{z@ z5C)PP}j9xb0palkA@8b~Q9ywD?Q z9jVZYvSeya?u_*7rILx9o}=i4D{FW6>0p0vk8btpZnwMJ-KE2Q>UX=;y>)oAdqBON zUiV<~%kQf%<}tl1QK^SonW-IR&<;Le+0ls5&A_DWEu7uh(d8l)F1t>s5D!bZEoC~C zkMYl+I9^mfGr(+SYT<1ra3dz){JDCut(DJUkARC5oR(v~>CjFwfaTz#P)g7WF#j(E z8Q5J(Wi9y38-8wPnt9}hu_f#8LvnvVRchvsMzKRG0(442IC&b!g$LT@&zO z1nPn7iuniMuzv6^FqAtsILGW0S`(ZMUX}uta1T!%4DEaE0p2NLMq@IlnpM+IrsR`U1WYIxGQblQ;Q-fTRT{U?= zeg9@OSveI?s2e>$Irmj`2Is$SN3UE03$ob0cjLYOwPPCrYa?VFiSonA*Plc$42%Y| zN#IWvVQw8QT&Kc#V8sZSlpBL4m_3wgE3P+8S6Crz7B;ZASPjQ0J(Zo!#CF6}(lZ1)@JV7BmzpuVC>) z3M_3@-_`;iM`K6@#(0x(D$YBeX+C%TNZ{v#`;|Inp}_4TBie#Ds1MHdd2|Ni6bv)^8croTRjE}fp-dk{T0z3^%D@x}iD D?Kz$P delta 220 zcmdmXQE19xA(o_7?;cEK(PdhAsL{C9n6cHEX{#~w+5apxnGNz=Sy-eMwi_$4cxY_D z=EKs?G`-rNMR~gHeP#}q)I5dc{JgTvyyVQhbcKw}Ts;Mw)Lgr0=g?p)g@Dwe;?l&F zRE7K^h2WCJlG0*@M-5XH67y0NGD{RPixpB6i!)P;rho8f5i=>y&rL1K0GU!!RGO-g zn3P{yqEMcZ2v(SpSWu9f2bRnS+ENTulbD$oJALB>7Lo0DgIJVxx3f2}D6zBm$sCF7 NRb<(&+0N3d2mrK=PcHxf diff --git a/packs/throughtrain/LOG b/packs/throughtrain/LOG index ea37b47..9bee691 100644 --- a/packs/throughtrain/LOG +++ b/packs/throughtrain/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.883078 17440b000 Delete type=3 #1 +2026/08/18-22:33:57.999339 1724a3000 Delete type=3 #1 diff --git a/packs/vehicles/LOG b/packs/vehicles/LOG index 982bbd1..e2d518c 100644 --- a/packs/vehicles/LOG +++ b/packs/vehicles/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.831806 173bff000 Delete type=3 #1 +2026/08/18-22:33:57.947467 173cc7000 Delete type=3 #1 diff --git a/packs/weapons/LOG b/packs/weapons/LOG index bddb3c1..faac8c1 100644 --- a/packs/weapons/LOG +++ b/packs/weapons/LOG @@ -1 +1 @@ -2026/08/18-22:27:29.825886 173bff000 Delete type=3 #1 +2026/08/18-22:33:57.941521 172caf000 Delete type=3 #1 diff --git a/system.json b/system.json index 3544748..d8e36bc 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "id": "ringbrp", "title": "The Custodians", "description": "A Basic Roleplaying game of agents who cross the crossing to contain what should not be there — and who come back a little less from here each time.", - "version": "1.4.0", + "version": "1.4.1", "compatibility": { "minimum": 13, "verified": "14.364" diff --git a/tools/scenario-throughtrain.mjs b/tools/scenario-throughtrain.mjs index e446ce2..6019e83 100644 --- a/tools/scenario-throughtrain.mjs +++ b/tools/scenario-throughtrain.mjs @@ -372,6 +372,13 @@ export const TT_PAGES = [ + P("The wagon is easier than the tower and the tower is easier than the " + "horses. A party that spends an hour arranging the wagon has bought itself " + "an easy roll and should get one — that is what the hour was for.") + + P("Say which route suits whom, out loud, before they choose. " + + "Athletics on a duty-roster sheet runs from about 25% to 60%, and the split is not " + + "subtle: the Containment officer and the criminal take the tower, the Field Lead " + + "can, and the doctor and the Registry officer should be on the wagon. " + + "Playtested by putting all five on the tower: two of them missed twice and had to be " + + "carried by the department's plank, which cost two passes on the clock and made " + + "them passengers in their own set-piece.") + P("Everybody has to get on. Anyone left behind is out of the scenario " + "and watching from the bench, so give a failed attempt a second chance on the next " + "pass rather than a full stop. The train comes round again in about forty minutes, " @@ -486,6 +493,14 @@ export const TT_PAGES = [ + P("Both are genuine. Neither man has seen the other's. An agent who " + "gets both in the same hand has the whole truth of it: the company sold the same " + "money twice, and then put four men and five men on the same train with it.") + + P("NO ROLL IS NEEDED TO SEE EITHER PAPER. Between passes, Merritt " + + "shows his letter to anybody who asks — he is proud of it, it is his " + + "authority, and he has had a hundred and forty-five years with nobody to show it " + + "to. Ambrose shows the writ to anybody who is not currently shooting at him, " + + "because having it read is the entire thing he wants. Do not put Persuade " + + "in front of this. Playtested with a real team, the Field Lead's Persuade " + + "was 15% and fell to 1% under the crowd penalty, which turned the scene the " + + "scenario is proudest of into an impossible roll.") + P("It does not stop the fight. Merritt will not stand down for a " + "piece of paper from a judge he has never heard of while men are shooting at him, " + "and Ambrose has eleven weeks of nothing behind him. Showing them changes " @@ -495,9 +510,18 @@ export const TT_PAGES = [ + "him to, out loud, to his face. He has been waiting a hundred and forty-five " + "years to be told. He will not do it on a note and he will not do it for a shout " + "from the tender.") - + P("Getting to him means crossing the tender during or between the four minutes, and " - + "then convincing him. [CUS: Persuade or Status — and it is easier if they can " - + "tell him something true about what is happening to his train]") + + P("Getting to him means crossing the tender, in the gap between the cars, during or " + + "between the four minutes. [CUS: Athletics for the gap]") + + P("Convincing him takes NO ROLL if they can tell him one true thing about his " + + "own train. That the coal has not run out. That it is the same four " + + "minutes. That the line was never on the north bench. Any of it. He has been " + + "waiting a hundred and forty-five years for somebody who knows what is wrong to " + + "come and say so, and the moment they do he will ask them to say when.") + + P("Only a party that can tell him nothing has to roll, and then it " + + "is Persuade or Status at average, and a failure means he wants another pass to " + + "think. Do not gate the ending on Persuade. Seven of the ten duty-roster " + + "agents have neither Persuade nor Status trained; playtested, three separate " + + "attempts on Kell all failed and the scenario had no way to end.") + P("When the brakes go on, the loop lets go. Four minutes finish for " + "the first time since 1881, and everyone aboard walks forward into their own lives. " + "Doyle and Ambrose do not get up. They never did.")