STANDING ORDER v1.0: the rewrite

The agents now cross into Bellhouse on a diplomatic brief to bring its people
home. A thousand people (118 of the 1974 intake, 881 born below) run the Seat
like a 1970s council, kept down by ninety-day renewals from "Centre", which
is Mr Smith, planted in THROUGH TRAIN. His experiment is procedural and
quiet: a bulletin response, a crèche lullaby, a shared dream, the children's
drawings, a steered establishment. Act One is the briefing, the moor and the
crossing into Enquiries. Act Two is the site, and the detention the Controller
orders on Centre's circular, measured and cited. Act Three is Annex D: at a
thousand the Seat broadcasts an Address that enrols whoever hears it, and the
table must silence it before or while they release the Seat under clause 4.

Same site, people and plates. Two cast actors (the wardens, Teague). New
handouts SO-H05 (Centre's circular) and SO-H06 (terms of engagement). The
section map's key is relabelled (issue 2). Status is honest: v0.7's five desk
passes tested a different plot, and this needs its own.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
slaguru666
2026-09-16 11:15:38 +01:00
co-authored by Claude Opus 5
parent 514e0c903e
commit c3ac694ed9
7 changed files with 862 additions and 816 deletions
+17 -13
View File
@@ -147,23 +147,27 @@
<text x="1240" y="1246" class="keyb">BELOW</text>
<g class="key">
<text x="92" y="1296">1 · Wetherlaw farm — ash in the yard for four years</text>
<text x="92" y="1340">2 · The ash edge — straight 400 m, then a right angle</text>
<text x="92" y="1384">3 · Ventilation head — painted, and warm to the hand</text>
<text x="92" y="1428">4 · Postal pipe — 4-inch pneumatic, sealed 1974</text>
<text x="92" y="1472">5 · Service adit — 400 m of 1962 concrete, lit</text>
<text x="92" y="1296">1 · Wetherlaw farm — coal soot in the yard</text>
<text x="92" y="1340">2 · The soot edge — straight 400 m, then a right angle</text>
<text x="92" y="1384">3 · Vent head — warm, smells of a coal fire; the crossing</text>
<text x="92" y="1428">4 · Postal pipe — 4-inch pneumatic; Centre answers</text>
<text x="92" y="1472">5 · The adit — backfilled 1975</text>
<text x="1240" y="1296">6 · Blast door and lobby — never locked</text>
<text x="1240" y="1340">7 · Control Room — the map, the tannoy, the desk</text>
<text x="1240" y="1384">8 · Registry — fifty-two years of files</text>
<text x="1240" y="1428">9 · Sick bay</text>
<text x="1240" y="1472">10 · Crèche and school</text>
<text x="1240" y="1516">11 · Pipe room — the outgoing tray</text>
<text x="1240" y="1560">12 · Plant floor — generators and the relay</text>
<text x="1240" y="1290">6 · Lobby and Enquiries — no form for visitors</text>
<text x="1240" y="1328">7 · Control Room and studio — the tannoy, the safe</text>
<text x="1240" y="1366">8 · Registry — the Order and the Establishment</text>
<text x="1240" y="1404">9 · Sick bay and maternity</text>
<text x="1240" y="1442">10 · Crèche and school</text>
<text x="1240" y="1480">11 · Pipe room — Centre's in-tray</text>
<text x="1240" y="1518">12 · Plant floor — boilers, coal face, transmitter</text>
<text x="1240" y="1556">13 · Vigil hall *</text>
<text x="1240" y="1594">14 · Allotments and Buffer Depot *</text>
<text x="1240" y="1632">15 · The Sump *</text>
<text x="720" y="1584" class="note">* pit galleries, not drawn</text>
</g>
<!-- reference box, house convention -->
<rect x="92" y="1516" width="600" height="86" class="thin"/>
<text x="112" y="1550" class="note">SO-H04 · SECTION · STANDING ORDER</text>
<text x="112" y="1584" class="note">ISSUE 1 · NOT TO BE REMOVED FROM THE SEAT</text>
<text x="112" y="1584" class="note">ISSUE 2 · NOT TO BE REMOVED FROM THE SEAT</text>
</svg>

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 182 KiB

File diff suppressed because it is too large Load Diff
+13 -7
View File
@@ -10,6 +10,10 @@ regeneration is possible; per house convention the prompt is part of the documen
and the **quarantine unit** — are bestiary entries and their prompts live in
`BESTIARY_ART.md`, not here. Everything in this sheet is new work.
**v1.0 (16 September 2026) reused every plate.** The rewrite kept the site, the people and
the art; only the uses below changed. **Mr Smith must never be drawn** — a face is the one
thing the case says nobody can recall — and no prompt for him belongs in this sheet.
---
## Art direction for this scenario
@@ -64,12 +68,12 @@ regenerate it** — a picture that contradicts a clue is worse than no picture.
|---|---|
| `so_01_cover.webp` | Cover plate |
| `so_02_wetherlaw.webp` | Act One — the farmyard |
| `so_03_ash_edge.webp` | Act One — clue 2, the surveyed line |
| `so_04_adit.webp` | Act One — the service adit portal |
| `so_03_ash_edge.webp` | Act One — clue 3, the soot edge (the file keeps its old name) |
| `so_04_adit.webp` | Act One — the adit mouth, backfilled; the crossing is above it |
| `so_05_corridor.webp` | Act Two — arrival below |
| `so_06_control_room.webp` | Act Two / Three — the broadcast and the signing |
| `so_07_registry.webp` | Act Two — the stacks, and the thing counting in them |
| `so_08_creche.webp` | Act Two — the school, and the cost of ending 1 |
| `so_06_control_room.webp` | Act Two / Three — the bulletin, Centre's file, the studio |
| `so_07_registry.webp` | Act Two — the Establishment, and the thing counting in the stacks |
| `so_08_creche.webp` | Act Two — the school, the drawings, the intercom |
**Shared prefix.** Every plate prompt begins with this and it is not optional:
@@ -171,8 +175,10 @@ trusting the exit code.
## Not generated — draw these
**The Bellhouse section drawing.** A cutaway of the site with the seven Act Two locations
numbered, and a key below the drawing. **This must be hand-built SVG and must not be
**The Bellhouse section drawing.** A cutaway of the site with the Seat's locations
numbered, and a key below the drawing. Issue 2 (v1.0) relabels the key for the rewrite and
lists three pit-gallery locations as *not drawn*; re-render with
`rsvg-convert -w 2400 -h 1700` then `cwebp -q 88`. **This must be hand-built SVG and must not be
prompted.** Midjourney will not hold legible text or accurate geography, and this drawing's
whole job is labels. Two rules from AFTERIMAGE v3.1: numbered callouts with a key beneath
rather than labels sprayed across the plan, and **the drawing says only what the site says**
Binary file not shown.
+23 -14
View File
@@ -1023,13 +1023,20 @@ function cullandScene() {
+ `${showJournal.pages.length} plates to show`);
}
// STANDING ORDER — the three-act crossing case. Journals, plates and the section map;
// no cast actors, because nobody in it has a stat block. The GM pages are read from the
// STANDING ORDER — the three-act crossing case. Journals, plates, the section map, and
// the two cast actors the Act Two detention needs. The GM pages are read from the
// scenario document itself at build time (see scenario-standingorder.mjs). Played on
// the duty-roster sheets in the Pregens pack.
{
const SO = await import("./scenario-standingorder.mjs");
const castDocs = [];
for (const spec of SO.SO_CAST) {
const { actorDoc, itemDocs } = buildActor(spec, "npc");
actorDoc.items = itemDocs;
castDocs.push(actorDoc);
}
const showJournal = imageJournal("STANDING ORDER — Show the players", "so_show", SO.SO_PLATES);
const facesJournal = imageJournal("STANDING ORDER — The people", "so_faces", SO.SO_FACES);
const gmJournal = journalDoc("STANDING ORDER — Run the case", "so_gm", SO.SO_PAGES);
@@ -1057,18 +1064,20 @@ function cullandScene() {
_id: advId,
name: "STANDING ORDER — The Bellhouse Seat",
img: IC("journal") ?? ICON.journal,
caption: "A three-act crossing case. A seat of government, and a war that never came.",
caption: "A three-act crossing case. A thousand people underground, and the man who writes to them.",
description:
"<p><em>Two hundred and six people went underground in 1974 to govern the country "
+ "after the war. There was no war.</em></p>"
+ "<p>They have been governing it for fifty-two years, the order that put them there "
+ "renews itself every ninety days, and the next renewal is on Thursday. The site's "
+ "record now counts more people than the region it governs, and the record is about "
+ "to make the region match.</p>"
+ "<p>Three acts, 3h00 of play in a 3h15 slot. Nobody below is a monster, and the last "
+ "act is a decision rather than a fight. Played on the duty-roster sheets from the "
+ "Pregens compendium.</p>",
actors: [],
"<p><em>A thousand people are waiting under Sheldon Moor for the all-clear from a war "
+ "that never happened. Every ninety days, somebody writes to tell them to keep "
+ "waiting. It is not the government.</em></p>"
+ "<p>The agents cross into a sealed 1974 Regional Seat of Government that has run "
+ "itself like a council for fifty-two years. The brief is to bring its people home, "
+ "diplomatically. The Seat does not trust newcomers, its Controller has been told to "
+ "count them, and on Thursday it will surface and speak to the region in words that "
+ "are not the government's.</p>"
+ "<p>Three acts, 3h00 of play in a 3h15 slot. One detention, one broadcast, and the "
+ "second appearance of Mr Smith. Played on the duty-roster sheets from the Pregens "
+ "compendium.</p>",
actors: castDocs,
items: [],
journal: [
{ ...gmJournal.doc, pages: gmJournal.pages },
@@ -1081,7 +1090,7 @@ function cullandScene() {
};
await writePack("standingorder", [[`!adventures!${advId}`, adventure]]);
console.log(` standing STANDING ORDER — ${SO.SO_PAGES.length} GM pages, `
console.log(` standing STANDING ORDER — ${castDocs.length} cast, ${SO.SO_PAGES.length} GM pages, `
+ `${SO.SO_HANDOUTS.length} handouts, ${showJournal.pages.length} plates, `
+ `${facesJournal.pages.length} faces`);
}
+48 -6
View File
@@ -8,8 +8,10 @@
* house format uses and throws on nothing — an unknown construct comes through as a
* paragraph, which is visible in the journal rather than silently dropped.
*
* No cast actors: nobody in this case has a stat block. The people below are not meant
* to be fought, and the three creatures are the bestiary's own.
* Two cast actors, and only two: the wardens the Controller sends in Act Two, and the man
* who leads them. Everybody else below is there to be talked to, and the three creatures
* are the bestiary's own. The detention fight is measured by tools/detention-tables.mjs
* against the declared cast, and the document cites that artifact.
*/
import { readFileSync } from "node:fs";
import path from "node:path";
@@ -117,8 +119,8 @@ const section = re => {
they are what a stand-in GM needs before anything else. */
const tagline = MD.split("\n## ")[0].split("\n").filter(l => /^>/.test(l)).join("\n");
const notObvious = section(/^STATUS\b/).body.split(/^### /m)
.find(b => b.startsWith("The three things"));
if (!notObvious) throw new Error(`${SOURCE}: STATUS has lost "The three things that are not obvious"`);
.find(b => /^The .*things that are not obvious/.test(b));
if (!notObvious) throw new Error(`${SOURCE}: STATUS has lost "The things that are not obvious"`);
const ART = (id, alt) =>
`<figure class="rb-plate"><img src="systems/ringbrp/art/scenes/${id}.webp" alt="${alt}"/></figure>`;
@@ -159,8 +161,8 @@ export const SO_HANDOUTS = section(/^Handouts\b/).body.split(/^### /m).slice(1).
export const SO_PLATES = [
{ name: "1 · Sheldon Moor — the vent head", src: "art/scenes/so_01_cover.webp" },
{ name: "2 · Wetherlaw farm", src: "art/scenes/so_02_wetherlaw.webp" },
{ name: "3 · The ash edge", src: "art/scenes/so_03_ash_edge.webp" },
{ name: "4 · The service adit", src: "art/scenes/so_04_adit.webp" },
{ name: "3 · The soot edge", src: "art/scenes/so_03_ash_edge.webp" },
{ name: "4 · The adit mouth", src: "art/scenes/so_04_adit.webp" },
{ name: "5 · Bellhouse — the corridor", src: "art/scenes/so_05_corridor.webp" },
{ name: "6 · The Control Room", src: "art/scenes/so_06_control_room.webp" },
{ name: "7 · The Registry", src: "art/scenes/so_07_registry.webp" },
@@ -168,6 +170,46 @@ export const SO_PLATES = [
{ name: "9 · Bellhouse — section", src: "art/maps/bellhouse-section.webp" }
];
/* The detention detail. Truncheons, not firearms: the Seat's armoury is locked and the
Controller holds the key, and the order that sends them says DETAIN. Tactics are written
for the GM; the harness does not model restraint, so its figures are the ceiling. */
export const SO_CAST = [
{ key: "so_warden", name: "Bellhouse warden",
role: "ACT TWO. One of the site's eleven police, born below. Use for all of them.",
chosenStyle: "reflex", naturalArmour: 0, species: "baseline",
ch: { str: 13, siz: 13, con: 13, int: 10, pow: 11, dex: 12, cha: 10, edu: 10 },
skills: [{ fam: "melee_weapon", spec: "club", val: 50 },
{ fam: "brawl", spec: "", val: 50 },
{ fam: "dodge", spec: "", val: 30 },
{ fam: "spot", spec: "", val: 45 }],
weapons: ["punch", "cudgel"],
tactics: "A wooden truncheon, issued 1974 and oiled every Friday since. They have "
+ "arrested drunks and a man who stole from the Allotments; they have never fought anybody "
+ "who fights back. They come in pairs, ask once, and take hold of arms. THEY ARE "
+ "DETAINING, NOT KILLING: a warden stops hitting an agent who is down and puts the "
+ "cuffs on instead. A warden who is hurt badly steps back and calls for Teague. If an "
+ "agent draws a firearm, every warden in sight stops and stares, because nobody below "
+ "has seen one used, and the next thing they do is run for the Controller." },
{ key: "so_teague", name: "Warden Michael Teague",
role: "ACT TWO. Head of the site's police. The man sent to fetch them.",
chosenStyle: "reflex", naturalArmour: 0, species: "baseline",
ch: { str: 14, siz: 14, con: 14, int: 12, pow: 13, dex: 13, cha: 12, edu: 12 },
skills: [{ fam: "melee_weapon", spec: "club", val: 60 },
{ fam: "brawl", spec: "", val: 60 },
{ fam: "dodge", spec: "", val: 40 },
{ fam: "insight", spec: "", val: 50 },
{ fam: "spot", spec: "", val: 55 }],
weapons: ["punch", "cudgel"],
tactics: "The only man below who has decided the surface is a lie. He leads the "
+ "detail himself because he will not send anybody where he would not go. His "
+ "service pistol is in the armoury and he leaves it there on purpose. He asks them to "
+ "come quietly, twice. SCRIPT BREAK: his daughter Nell, nine, is in the creche; an "
+ "agent who names her puts a father in the corridor instead of a warden, and he "
+ "stands the detail down." }
];
/* The people, for showing. Joan Wetherlaw has no portrait yet — see STANDING_ORDER_ART. */
export const SO_FACES = [
{ name: "Controller Edwin Sowerby", src: "art/portraits/so_sowerby.webp" },