Files
RingBRP/tools/scenario-openday.mjs
T
slaguru666andClaude Opus 5 f185c92088 Add OPEN DAY, the recruitment prologue
Ten civilians, one decommissioned telephone exchange, and eleven minutes during
which the building went back to being on the street it was built on. Nothing
attacks anybody. Nothing wants anything. That is the horror, and it is the whole
design.

The premise was already in the pregens. Wren Finch's biography said she was
inside a building "on the night it stopped being on the street it was on", and
Soraya Rahimi's said she talked a caller down on air "for eleven minutes, and
the recording does not play back the same way twice". Those are two views of one
afternoon, so the scenario is built at the intersection and the other eight
"How they found her/him" lines are the same afternoon from eight more jobs.
Nothing in the prologue contradicts a sheet, because the sheets came first.

The reconciliation pass, which is most of the work:

  - Finch's line said "night". The open day is an afternoon. One word changed on
    the pregen, and both are true. Her line also says she was the only witness
    who could describe the inside, so she is the one who goes into number 11 —
    written into the location note rather than left to chance.
  - Rahimi's line says she was ON AIR. So the disconnected telephone that rings
    at 15:45 is patched through to her outside broadcast, which makes the canon
    line and the scene the same event instead of two coincidences.
  - Okonkwo carries two men out; Nkemdirim's patient has a forearm that healed
    crooked over a break he took six minutes ago. Both seams needed an injury in
    Act Two and there was none, so 15:50 and 15:51 now have one.
  - Sandoval's forty minutes of traffic sit inside an eleven-minute window. That
    is the anomaly, so it is on the handout in those words.
  - "Prine" collided with an NPC already in the world. The engineer is Kearsley.

Structure: 2h15 against the house 3h30, stated in the design intent, because a
prologue exists to make the first real case land. No combat, no antagonist, no
Coherence — the last one is thematic, not a simplification: Coherence is what it
costs to keep looking once you know what you are looking at, and these ten do
not know yet. The Briefing is the first time the word is said aloud.

Ships as docs/scenarios/OPEN_DAY.md (the full GM document) and a Foundry
Adventure in a new `prologue` pack: 8 GM pages, 7 handouts, 5 NPCs, and ten
generated plates. The PCs are the "(before)" pregens already in the Pregens
pack — a second copy here would give a GM two sets of the same ten people and
no way to know which one their notes were on.

Verified in Foundry: the adventure imports, both journals render branded, the
countdown table reads as a table, and all ten plates load.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 17:03:49 +01:00

612 lines
43 KiB
JavaScript

/**
* OPEN DAY — the prologue, as data.
*
* The recruitment scenario. Ten civilians who all had a working reason to be in the
* same decommissioned telephone exchange on the afternoon it went back to being on the
* street it was built on. Nothing attacks them. Nothing wants anything. Eleven minutes
* pass on a timetable they cannot alter, and afterwards each of them writes down what
* they saw, accurately, and does not cross any of it out. That is the recruiting test,
* and they have already passed it.
*
* Shipped as a Foundry ADVENTURE like BLACK PLATFORM, but a much smaller one: no case
* file, no contact groups, no Borrowed Authority, no combat and no expedition. It has
* GM pages, handouts a GM can reveal one at a time, and five NPCs. The player characters
* are the ten "(before)" pregens already in the Pregens compendium — duplicating them
* here would give a GM two copies of the same ten people and no way to tell which set
* their notes were on.
*
* The full GM document lives at docs/scenarios/OPEN_DAY.md. These pages are the running
* text: what a GM reads at the table, in the order they need it.
*/
const P = s => `<p>${s}</p>`;
const H = (n, s) => `<h${n}>${s}</h${n}>`;
const UL = xs => `<ul>${xs.map(x => `<li>${x}</li>`).join("")}</ul>`;
const OL = xs => `<ol>${xs.map(x => `<li>${x}</li>`).join("")}</ol>`;
const TABLE = (head, rows) =>
`<table><thead><tr>${head.map(h => `<th>${h}</th>`).join("")}</tr></thead><tbody>`
+ rows.map(r => `<tr>${r.map(c => `<td>${c}</td>`).join("")}</tr>`).join("")
+ `</tbody></table>`;
const READ = s => `<blockquote class="rb-readaloud">${s}</blockquote>`;
const ART = (id, alt) =>
`<figure class="rb-plate"><img src="systems/ringbrp/art/scenes/${id}.webp" alt="${alt}"/></figure>`;
/* ---------------------------------------------------------------- */
/* GM pages */
/* ---------------------------------------------------------------- */
export const OPENDAY_PAGES = [
{ name: "1 · Run this first", content:
P("<strong>OPEN DAY</strong> is the prologue. Two and a quarter hours, four to six "
+ "players, and it is played with the <strong>&ldquo;(before)&rdquo;</strong> pregens "
+ "from the Pregens compendium &mdash; the same ten people as the duty roster, as "
+ "civilians, before any of this.")
+ READ("For eleven minutes the building was on a different street. You were inside it.")
+ H(2, "The four things that make this work")
+ OL([
"<strong>Nothing is hostile.</strong> There is no antagonist and no combat. Every "
+ "figure in Act Two is busy, polite or preoccupied. The moment you make something "
+ "menacing you are running a different and worse scenario.",
"<strong>Say the time.</strong> Out loud, every row of the countdown. "
+ "<em>&ldquo;Fifteen forty-four.&rdquo;</em> That is the entire engine of Act Two.",
"<strong>Let them succeed.</strong> Every attempt to intervene works &mdash; they "
+ "get the door shut, they get the fuse out, they get hold of his sleeve &mdash; "
+ "and the next minute happens anyway. Never let them fail instead. Failing is "
+ "comforting, because failing implies succeeding would have helped.",
"<strong>Nobody loses Coherence.</strong> Not a point. Do not roll for it and do "
+ "not say the word until the Briefing."
])
+ H(2, "Why no Coherence")
+ P("Coherence is not damage from seeing something. It is what it costs to keep "
+ "looking <em>once you know what you are looking at</em>. These ten do not know. "
+ "They have the perfect armour of the uninitiated: they think they are having a "
+ "strange afternoon. It pays off the first time they lose a point on a real case.")
+ H(2, "Shape")
+ TABLE(["Section", "Time", "Ends when"], [
["Introduction &mdash; Trestle Table", "15 min", "everyone has signed the clipboard aloud"],
["Act One &mdash; The Open Day", "35 min", "everyone is in the frame room at 15:41"],
["Act Two &mdash; Eleven Minutes", "45 min", "daylight, buses, twenty-eight people"],
["Act Three &mdash; The Approach", "25 min", "every PC has been approached alone"],
["Epilogue &mdash; The Briefing", "15 min", "the one true thing has been said"]
])
+ P("<strong>Hard rule: at 1:35 on the clock, go to Act Three regardless.</strong>")
},
{ name: "2 · What actually happened (GM truth)", content:
P("Marchbank Exchange was built in 1938 as a municipal automatic telephone exchange. "
+ "Its entrance faced <strong>Cattle Lane</strong>. In 1971 the borough drove "
+ "<strong>Sail Street</strong> through the block, demolished Cattle Lane end to end, "
+ "and re-addressed the Exchange to its side elevation. The Post Office never fully "
+ "re-addressed the <em>equipment</em>.")
+ P("For twenty-three years the selector racks went on stating, ten thousand times a "
+ "night, in the only language a machine has, that this building stood on Cattle Lane.")
+ P("<strong>Reality keeps a record of what belongs where.</strong> A machine that "
+ "argues with that record ten thousand times a night for twenty-three years is not "
+ "a haunting. It is a submission. When the last circuit was pulled in 1994 the "
+ "argument did not resolve. It went quiet.")
+ P("At <strong>15:41</strong> a retired engineer put power to a restored demonstration "
+ "panel so the public could hear a call connect. It connected. It also re-energised "
+ "a selector that still held the old routing. For <strong>eleven minutes</strong> "
+ "the record was contested and the address reverted. At <strong>15:52</strong> the "
+ "fuse failed and the record snapped back.")
+ H(2, "Three things did not come back right")
+ OL([
"<strong>The head count is one over.</strong> Twenty-seven in, twenty-eight out, "
+ "and every name on the out-sheet is also on the in-sheet. The department calls "
+ "the difference <strong>the Eleventh</strong> and has no better answer than that.",
"<strong>Douglas Kearsley did not come out.</strong> He went to the far end of the "
+ "frame room at 15:49 to pull the fuse himself, and he pulled it, because the fuse "
+ "is out. He is on the Cattle Lane side and has been for eleven minutes ever since.",
"<strong>The records disagree.</strong> A broadcast tape, a relay log, a sample "
+ "sheet, a measured survey, clinical notes, a pocket notebook, a witness "
+ "statement. Each internally consistent. No two consistent with each other."
])
+ H(2, "Why anybody came")
+ P("Registry keeps a standing watch on address discrepancies, which is duller than it "
+ "sounds and is most of what Registry does. Between 15:41 and 15:52 the historical "
+ "address database was queried nine times from a trunk decommissioned in 1994. The "
+ "flag was raised on the Monday. A recruiting officer was in Nettlefold by Thursday.")
+ H(2, "Why these ten")
+ P("Not because they saw it &mdash; ninety people saw something. Because they "
+ "<strong>wrote it down accurately, kept the record when it was inconvenient, and "
+ "raised it a second time when nobody answered the first</strong>. That is the whole "
+ "recruiting criterion and the department has never found a better one.")
+ P("<strong>Every &ldquo;(before)&rdquo; pregen's biography ends with a line "
+ "beginning <em>How they found her</em> or <em>How they found him</em>. Those ten "
+ "lines are ten views of this one afternoon.</strong> Act Three is the department "
+ "reading them back.")
},
{ name: "3 · Introduction — Trestle Table", content:
ART("od_01_frontage", "Marchbank Exchange, Sail Street")
+ READ("Bunting, a tea urn, and a folding table on the pavement with a clipboard on "
+ "it. The building behind it is municipal brick, 1938, four storeys of frosted "
+ "window and one good brass door. A woman in a council fleece asks you to print "
+ "your name, and underneath it, the reason for your visit.")
+ P("<strong>Make them say their name aloud as they write it.</strong> That is the "
+ "head count, and it is a clue nobody notices.")
+ H(2, "What the players know")
+ UL(["Nettlefold. Saturday 27 September. Ten past two.",
"Marchbank Exchange, Sail Street: a decommissioned telephone exchange sold for "
+ "flats. Strip-out starts Monday.",
"The civic society got one open day out of the developer. This is it.",
"Tours every half hour. The last goes down at half past three.",
"Everyone has a working reason to be here. Nobody is here because they are brave."])
+ H(2, "Why each of them is in the building")
+ TABLE(["PC", "Reason"], [
["Marta Holloway", "booked for a twinning delegation the council invited and forgot to brief"],
["Ben Okonkwo", "on site since seven, propping the second-floor opening before Monday"],
["Rey Sandoval", "the OB link needs a clear shot to the mast; the roof is the only place it works"],
["Arun Bhattacharya", "contaminated-land sampling in the battery room"],
["Soraya Rahimi", "outside broadcast, live at four, cable through the side door"],
["Dr Chidi Nkemdirim", "volunteer first-aid cover, bored, on a stacking chair by the urn"],
["Marek Kowalczyk", "measured survey for the conversion, three days of drawings that will not close"],
["Wren Finch", "the side door has been on the latch since Thursday and there is copper downstairs"],
["Joseph Agyeman", "off duty, with a grandchild, because the leaflet came through the door"],
["Prof. &Aring;ke Lindqvist", "giving the three o'clock talk: <em>Streets That Were</em>"]
])
+ H(2, "Atmosphere")
+ UL(["<strong>Sound:</strong> the urn, the traffic, and under both a mains hum you "
+ "stop noticing and then notice again.",
"<strong>Smell:</strong> hot dust, floor polish, and an unheated building in September.",
"<strong>Light:</strong> frosted glass. Everything is the colour of weak tea."])
},
{ name: "4 · Act One — The Open Day", content:
P("<strong>Goal:</strong> make the building ordinary and likeable, get every PC into "
+ "the frame room by 15:41, and plant two facts &mdash; <strong>the building used to "
+ "face a different street</strong>, and <strong>the machine still says so</strong>.")
+ P("Tea, bunting, and six small competent jobs in parallel. Nothing is wrong. That is "
+ "the entire act.")
+ H(2, "The public hall")
+ ART("od_02_hall", "The former operators' room")
+ UL(["A long room with a parquet floor worn into two grooves where the operators' "
+ "chairs ran, forty years of them, end to end.",
"Display boards, the tea urn, a first-aid box on a stacking chair, and a black "
+ "bakelite telephone with its cable cut, put out for children to pick up.",
"<strong>Hidden:</strong> one board photograph, 1968, shows the brass door with "
+ "<strong>CATTLE LANE</strong> on the fanlight. <em>[CUS: Spot]</em>"])
+ H(2, "The frame room")
+ ART("od_03_frame", "The frame room")
+ UL(["Ten aisles of steel racks floor to ceiling, each a wall of relays and jumper "
+ "wire in cotton sleeving, cream and red and green. It is the most beautiful "
+ "thing any of them have seen this year and none of them expected that.",
"Kearsley, who will explain anything to anyone. The restored demonstration panel "
+ "at aisle one with its fuse carrier and a hand-lettered card. A tag list on a nail.",
"<strong>Hidden:</strong> every rack end carries the routing prefix "
+ "<strong>CTL</strong>. <em>[CUS: Knowledge or Repair (Electronics) — it is the "
+ "old address block]</em>"])
+ H(2, "The battery room")
+ ART("od_04_battery", "The battery room")
+ UL(["Two hundred glass cells on tarred timber staging, all empty, all faintly sweet "
+ "with acid. The floor slopes to a central drain.",
"A stencilled notice: <strong>NO NAKED LIGHTS &mdash; MARCHBANK EXCHANGE, 4 "
+ "CATTLE LANE</strong>. <strong>This carries an essential clue. Never cut this room.</strong>",
"<strong>Hidden:</strong> the drain is not on the drainage drawing. "
+ "<em>[CUS: Engineering (Field Systems)]</em>"])
+ H(2, "The roof, and the yard")
+ ART("od_05_roof", "The roof and the mast")
+ UL(["<strong>Roof:</strong> felt, gravel, a lattice mast with one live dish the "
+ "network never took down, and Nettlefold from above &mdash; a ring road, a "
+ "retail park, and the shape of a street that is not there any more, still "
+ "legible in the backs of the houses. <em>[CUS: Computer Use — the dish is "
+ "aligned on a bearing with nothing at the end of it]</em>",
"<strong>Yard:</strong> a skip, and a steel door on the latch with the hasp "
+ "taped over because the OB cable runs through it. <em>[CUS: Spot — two layers "
+ "of tape, different ages. Somebody else taped it first.]</em>",
"<strong>Cut these two first, in this order</strong>, if the clock is going."])
+ H(2, "Clue trail")
+ TABLE(["#", "Clue", "How found", "Type"], [
["1", "The address was 4 Cattle Lane", "<strong>Automatic</strong> in either basement room, or at the talk", "Essential"],
["2", "Every rack end is prefixed CTL", "<strong>Automatic</strong> if Kearsley is asked anything at all", "Essential"],
["3", "Cattle Lane was demolished in 1971 in a fortnight", "<strong>Automatic</strong> on any question about the street", "Essential"],
["4", "1968 photo: same door, different street", "[CUS: Spot]", "Optional"],
["5", "The leaflet map's frontage is wrong by four metres", "[CUS: Spot]", "Optional"],
["6", "The dish is aligned on nothing", "[CUS: Computer Use]", "Optional"],
["7", "Two layers of tape on the hasp", "[CUS: Spot]", "Optional"]
])
+ P("<strong>Fallbacks.</strong> Clue 1: Odame says it at the urn while looking for her "
+ "glasses &mdash; <em>&ldquo;Four Cattle Lane, this was.&rdquo;</em> Clue 2: Kearsley "
+ "raises it himself, unprompted, twice, as an old man's grievance. Clue 3: the "
+ "display boards carry the 1971 compulsory purchase notice at readable size.")
+ H(2, "Pacing note")
+ P("At 0:50 &mdash; <strong>fast-track:</strong> Kearsley claps his hands once, says "
+ "<em>&ldquo;Right &mdash; who wants to hear it connect?&rdquo;</em>, and puts his "
+ "thumb on the fuse carrier. Start the clock at 15:41.")
},
{ name: "5 · Act Two — Eleven Minutes (the countdown)", content:
P("<strong>Read the minute aloud. Say the time.</strong> Advance a row roughly every "
+ "three or four minutes of real time, faster if the table is quiet, and "
+ "<strong>always</strong> advance when someone tries to stop it.")
+ TABLE(["Time", "What happens"], [
["<strong>15:41</strong>", "The panel takes power. Every light goes one shade warmer. Every watch, phone and wall clock in the frame room reads 15:41, including the ones that were wrong."],
["<strong>15:42</strong>", "The traffic noise from Sail Street stops. It is replaced by different noise: a diesel idling, a handcart, and &mdash; far off and quite clear &mdash; cattle."],
["<strong>15:43</strong>", "The front door is open. Beyond it is a narrow lane of soot-black brick with a cooper's yard on the corner. Two members of the public step out onto it, pleasantly, as if the tour continues."],
["<strong>15:44</strong>", "The frame room has one more rack than the survey says. It is at the far end, and it is running."],
["<strong>15:45</strong>", "A telephone rings in the operators' room. It is not connected to anything. It rings until answered &mdash; and whoever answers is live on air, because the OB desk has patched it through. There is a frightened person on the line calling from inside this building."],
["<strong>15:46</strong>", "A well-dressed man asks a PC, courteously and in a language of your choosing, for directions to <strong>11 Cattle Lane</strong>. He is patient. He will wait for an answer."],
["<strong>15:47</strong>", "A man in a 1971 donkey jacket walks the length of the frame aisle with a tag list, checking racks. He does not see anyone. He is not frightening. He is working."],
["<strong>15:48</strong>", "Councillor Odame takes a head count in the hall, because that is what you do. She counts twice. She gets twenty-eight both times."],
["<strong>15:49</strong>", "Kearsley says, to nobody in particular, <em>&ldquo;Well, that's not right, is it,&rdquo;</em> and walks to the far end of the frame room to pull the fuse."],
["<strong>15:50</strong>", "The lights fail from the far end backwards, rack by rack, towards the door. Two members of the public go down hard on the basement stairs in the dark. Somebody has to carry them."],
["<strong>15:51</strong>", "A child on the tour asks, clearly, in the dark: <em>&ldquo;Where's the man gone?&rdquo;</em> One of the two men on the stairs has a forearm already knitted crooked, over an old break, from a fall he had six minutes ago."],
["<strong>15:52</strong>", "Daylight. Sail Street. Buses. Twenty-eight people on the pavement, and Douglas Kearsley is not one of them."]
])
+ H(2, "If they try to stop it")
+ P("They can. Any of it. Pull the fuse at 15:44, drag Kearsley back at 15:49, hold the "
+ "front door shut at 15:43. <strong>It does not change the timetable.</strong> The "
+ "lights still fail from the far end backwards. He is still not on the pavement at "
+ "15:52. Let them succeed at the action and fail at the outcome, and do not explain "
+ "why &mdash; the Briefing does that, in one sentence, twelve weeks later.")
+ H(2, "Cattle Lane")
+ ART("od_07_lane", "Cattle Lane, through the open door")
+ UL(["Four metres wide, black brick, greasy cobbles, a cooper's yard on the corner "
+ "with the hoops stacked. Late afternoon there too, but a different one: colder, "
+ "and the light comes from the other end.",
"<strong>Anyone who steps out can step back in. Always.</strong> Show it rather "
+ "than promise it: the first PC out gets pulled back by their coat and nothing "
+ "bad happens, and everyone relaxes. That is the trap this scenario sets and "
+ "never springs.",
"<strong>11 Cattle Lane.</strong> Wren Finch's biography says she was the only "
+ "witness who could describe the inside, so if she is dealt she is the one who "
+ "goes in. Inside: a hallway, a hall stand, and a door at the end that is the "
+ "frame room door from the other side. They come back into the frame room. "
+ "<strong>Nothing happens to them.</strong> Note it and never mention it again. "
+ "<em>No roll resolves this.</em>"])
+ H(2, "The far end")
+ ART("od_08_farend", "Aisle eleven, 15:49")
+ P("Aisle eleven, which the survey says is aisle ten, running warm and loud with a "
+ "rack in it that Kowalczyk has measured and does not have. A fuse carrier, and "
+ "Douglas Kearsley reaching for it with his pen still in his top pocket. He pulls "
+ "it. Whoever is with him is holding his sleeve or is not; either way, at 15:52 "
+ "they are on the pavement and he is not, and their hand is closed on nothing.")
+ H(2, "Pacing note")
+ P("At <strong>1:35</strong>, go to Act Three regardless. <strong>Fast-track:</strong> "
+ "cut to 15:52 mid-sentence. <em>&ldquo;Daylight. Buses. Somebody's radio. You are "
+ "standing on Sail Street and it has been eleven minutes and there are twenty-eight "
+ "of you.&rdquo;</em>")
+ P("Undelivered revelations fold into the Briefing &mdash; <strong>except the extra "
+ "man and the head count</strong>. If the table missed those, let them stay missed "
+ "and hand over the head-count sheet at the very end of the Briefing with no "
+ "comment. It is a better ending than an explanation.")
},
{ name: "6 · Act Three — The Approach", content:
ART("od_09_ferrand", "Mrs Ivy Ferrand")
+ P("<strong>Goal:</strong> each PC, alone, in their own working life, four to eleven "
+ "weeks later, is approached by somebody who has read what they wrote. No new "
+ "information. Confirmation and consequence.")
+ P("Run each approach as a <strong>two-to-three minute solo scene in front of the "
+ "whole table</strong>. Do not go round asking for reactions; play the scene, end "
+ "it, move on. This is the only part of the scenario where the spotlight is "
+ "deliberately serial, and it works because every player is watching somebody get "
+ "read. <strong>Give handout 6 to the first player approached.</strong>")
+ H(2, "The approaches")
+ TABLE(["PC", "Where", "She opens with", "The offer"], [
["Marta Holloway", "the interpreters' room at the magistrates' court, between listings", "&ldquo;You wrote down what the gentleman asked for, and then you wrote down what the room did while he asked it. Nobody had asked you to hear either.&rdquo;", "work where what you heard matters more than what was said"],
["Ben Okonkwo", "the site canteen, half seven, everyone else outside", "&ldquo;You carried two men out and your statement runs to four hundred words and none of them is <em>I think</em>.&rdquo;", "people who go in and come out and can say which"],
["Rey Sandoval", "the foot of a mast, in the rain, while she waits for him to come down", "&ldquo;Forty minutes of traffic from a site that came out in 1994, and you kept the file. Your employer's IT policy says destroy.&rdquo;", "somebody has to watch the things that are still transmitting"],
["Arun Bhattacharya", "the laboratory, ten past six, the only two people in it", "&ldquo;You raised it in writing. Then you raised it again. Nobody has ever thanked you for that. I'm not going to either.&rdquo;", "a registry, and everything in it read by somebody who notices"],
["Soraya Rahimi", "the station car park after the mid-morning show", "&ldquo;Eleven minutes of your tape, and it plays differently every time. You still filed it.&rdquo;", "talking to people on the worst day of their lives, on purpose"],
["Dr Chidi Nkemdirim", "the relatives' room, empty, at the end of a shift", "&ldquo;Your notes describe an injury healing in the wrong direction, in the correct clinical language, without one hedge. Your consultant amended them. You didn't.&rdquo;", "be the doctor for people this happens to"],
["Marek Kowalczyk", "a pub near the office he has not gone into yet", "&ldquo;You measured the same wall three times and put all three figures on the drawing. Your practice made you take two off.&rdquo;", "buildings that are wrong, measured properly"],
["Wren Finch", "an interview room, and she asks the officer to leave", "&ldquo;You are the only person alive who has been inside number eleven. You could have said nothing at all and walked out of here.&rdquo;", "the caution goes away; the skills do not"],
["Joseph Agyeman", "his own front room, on a Sunday, by appointment", "&ldquo;A file with no crime number, worked on your own time, and you got further than you were meant to. Somebody has retired on less.&rdquo;", "statements nobody else will take"],
["Prof. &Aring;ke Lindqvist", "his room in the department, among the boxes, after the last tutorial", "&ldquo;You gave an answer that was too specific. Everyone assumed you'd read it somewhere. You hadn't.&rdquo;", "an answer, eventually, to the only question he has cared about"]
])
+ H(2, "The choices")
+ UL(["<strong>Sign.</strong> Six weeks' induction, a warrant card, and the rest of it.",
"<strong>Ask for time.</strong> She gives it. Genuinely.",
"<strong>Refuse.</strong> A card with a number and no name, and <em>&ldquo;That's "
+ "not a door that closes.&rdquo;</em>",
"<strong>The compromise the table will invent:</strong> <em>&ldquo;I'll tell you "
+ "what I know, but I won't join.&rdquo;</em> She accepts, takes an excellent "
+ "statement, thanks them properly, and comes back in the spring."])
+ H(2, "If somebody gets aggressive")
+ P("Nobody threatens Mrs Ferrand successfully. She does not escalate, does not call "
+ "anyone, and does not leave. She waits. If a PC walks out, she is outside their "
+ "place of work the next morning with two teas and the head-count sheet, and she "
+ "puts it on the wall of the bus shelter and lets them read it. <strong>That "
+ "works.</strong> It was always going to. She has done this two hundred times.")
+ P("<strong>Pressure line</strong>, at the first sign of group debate: <em>&ldquo;Mrs "
+ "Ferrand looks at the clock behind the bar. 'I've one more today,' she says, 'and "
+ "they're in Carlisle.'&rdquo;</em>")
},
{ name: "7 · Epilogue — The Briefing", content:
ART("od_10_briefing", "The briefing room")
+ P("A first-floor room above a closed register office. Stacking chairs, a projector on "
+ "a trolley, a jug of water and a plate of biscuits nobody touches. There are eleven "
+ "chairs out and however many of them there are. <strong>Nobody mentions it.</strong>")
+ H(2, "Deliver in this order")
+ OL([
"<strong>Who we are.</strong> <em>&ldquo;We're a department. We have a statutory "
+ "basis, a budget line, and nobody in this room's grade would surprise you. We are "
+ "not secret. We are uninteresting, which is much better.&rdquo;</em>",
"<strong>What we do.</strong> <em>&ldquo;We attend when a place stops agreeing "
+ "about where it is, and we get it to agree again, and we take a statement.&rdquo;</em>",
"<strong>The one true thing.</strong> Say it slowly, once, and do not elaborate.",
"<strong>Their own words, read back.</strong> Two lines from each PC's own "
+ "biography, aloud, without comment. <strong>This is the emotional beat of the "
+ "scenario.</strong> Use the actual text off their sheets.",
"<strong>Kearsley.</strong> Asked or not asked.",
"<strong>Coherence</strong> &mdash; the first use of the word in the whole scenario.",
"<strong>The anchor.</strong> Each is asked to bring one object of no value that is "
+ "unambiguously theirs. <strong>This is where each pregen's <em>Anchor:</em> line "
+ "on their agent sheet gets chosen, at the table, in their own words.</strong>",
"<strong>Form CS/1</strong> &mdash; one page, a signature block, and a pen already "
+ "on the table."
])
+ H(2, "The one true thing (read aloud)")
+ READ("Reality keeps a record of what belongs where. It is a very good record. It is "
+ "not a perfect one, and it can be made to get it wrong &mdash; usually by something "
+ "patient and stupid saying the same wrong thing for a very long time. That building "
+ "spent twenty-three years telling the truth about an address that had stopped being "
+ "true. On the twenty-seventh of September, for eleven minutes, it was believed.")
+ H(2, "After the reading back")
+ READ("Every one of you wrote what you saw. None of you wrote the same thing. All of "
+ "you are correct. Do sit with that.")
+ H(2, "Kearsley")
+ READ("Mr Kearsley pulled the fuse. That is why you are all here and not still in "
+ "there. We have not recovered him. I am not going to tell you we are going to. I "
+ "will tell you that the file is open, and that it is mine.")
+ H(2, "Coherence")
+ READ("You will find that knowing costs something. It did not cost you anything that "
+ "afternoon, because you did not know. That is over now.")
+ H(2, "Outcomes")
+ TABLE(["Outcome", "What happens"], [
["<strong>Signed</strong>", "six weeks' induction; the &ldquo;(before)&rdquo; sheet is retired and the agent sheet issued. Go to BLACK PLATFORM."],
["<strong>Not yet</strong>", "they are at the briefing anyway, as a guest, in the eleventh chair. They sign in the spring, off-screen, at the same rank. <strong>Costs them nothing mechanically.</strong>"],
["<strong>Refused outright</strong>", "their agent sheet exists in the compendium and can be picked up at any later session with no explanation required. The card is still in the drawer."],
["<strong>The whole table refuses</strong>", "Bewley thanks them, collects the forms and leaves. Two years later every one of them gets a Christmas card with no message. Start the campaign there instead."]
])
+ H(2, "Closing (read aloud, adapt to outcome)")
+ READ("The stacking chairs go back on the trolley. Somebody has to carry the projector "
+ "down. Outside it is the same wet Tuesday it was when you came in, and Sail Street "
+ "is still Sail Street, and the Exchange is flats now &mdash; they went up quickly in "
+ "the end. There is a card in your wallet with a telephone number on it and no name, "
+ "and there will be for the rest of your life. You will find, in about a year, that "
+ "you have stopped saying <em>eleven minutes</em> out loud. You will still know "
+ "exactly how long eleven minutes is.")
},
{ name: "8 · Cast, and what not to resolve", content:
TABLE(["NPC", "Essence", "Key line"], [
["<strong>Douglas Kearsley</strong>, 71", "retired exchange engineer with one afternoon to be understood", "&ldquo;They moved the street. They never told the machine.&rdquo;"],
["<strong>Cllr Hazel Odame</strong>", "civic society chair fighting for a listing", "&ldquo;They took the whole lane. Both sides. In a fortnight.&rdquo;"],
["<strong>Tony Vasey</strong>", "site manager who wants Monday to start", "&ldquo;Half three, and then I'm locking it.&rdquo;"],
["<strong>The man asking directions</strong>", "a courteous stranger, 15:46", "&ldquo;Three along, on the left &mdash; but you'd know better than me, you're local.&rdquo;"],
["<strong>The man in the donkey jacket</strong>", "an engineer on his rounds, 15:47", "<em>(says nothing; does not see you)</em>"],
["<strong>Mrs Ivy Ferrand</strong>", "recruiting officer who has read everything you wrote", "&ldquo;You wrote it down twice. Most people cross it out the second time.&rdquo;"],
["<strong>Mr Bewley</strong>", "Registry; signs things", "&ldquo;All of you are correct. Do sit with that.&rdquo;"],
["<strong>The Eleventh</strong>", "the difference between 27 and 28", "<em>(never appears, never resolved)</em>"]
])
+ H(2, "Do not resolve")
+ UL(["<strong>The Eleventh.</strong> Twenty-seven in, twenty-eight out. There is no answer.",
"<strong>11 Cattle Lane.</strong> A hallway, a hall stand, and a door back into "
+ "the frame room. Nothing happens.",
"<strong>The man in the donkey jacket.</strong> Warm, solid, busy, and not "
+ "sharing the room with you."])
+ P("<strong>Three unresolved things is exactly the right number.</strong> A fourth is "
+ "untidy. Two is a mystery the table will try to solve.")
+ H(2, "What Mrs Ferrand will not answer")
+ P("Where Kearsley is. Who the twenty-eighth person was. What she works for. To each "
+ "of them: <em>&ldquo;I'm not able to tell you that today.&rdquo;</em> "
+ "<strong>Not</strong> <em>&ldquo;I don't know.&rdquo;</em> She is scrupulous about "
+ "the difference and a sharp PC will notice.")
+ H(2, "If a player asks whether they could have saved him")
+ P("<em>&ldquo;Yes.&rdquo;</em> Then move on. Bewley answers it properly twelve weeks "
+ "later, and the answer is that the fuse came out either way. Do not pre-empt him.")
+ H(2, "The thread this leaves")
+ P("The flats went up quickly. <strong>Marchbank House, Sail Street</strong>, "
+ "twenty-two units, and the developer kept the brass door because the planners "
+ "insisted. Nine years later a resident of flat 11 reports, politely and repeatedly, "
+ "that her hallway is four metres longer at night &mdash; and Registry's address "
+ "watch flags the building, because somebody has been querying the historical "
+ "address database from inside it. Nine queries. Eleven minutes. Whoever is doing it "
+ "knows which flat to ask for, and Mr Bewley's file is still open, and it is still his.")
}
];
/* ---------------------------------------------------------------- */
/* Player handouts */
/* ---------------------------------------------------------------- */
export const OPENDAY_HANDOUTS = [
{ name: "1 · Open day leaflet", content:
P("<strong>NETTLEFOLD CIVIC SOCIETY</strong><br>"
+ "<strong>MARCHBANK EXCHANGE &mdash; OPEN DAY</strong><br>"
+ "Saturday 27 September &middot; 2 p.m. to half past four &middot; Sail Street")
+ P("<em>Before the builders come.</em> Your last chance to see inside the borough's "
+ "automatic telephone exchange, opened 1938, closed 1994, and shortly to be "
+ "twenty-two apartments.")
+ UL(["Guided tours every half hour. Last tour 3.30 p.m.",
"The frame room and battery room, by kind permission of the developer.",
"3 p.m. &mdash; <em>Streets That Were: Nettlefold's Lost Lanes</em>",
"Refreshments. Please sign in and out at the table."])
+ P("<em>Support the listing. Sign the petition. Ask me about the fanlight.</em><br>"
+ "&mdash; H. Odame, Chair")
},
{ name: "2 · Head-count sheet", content:
P("<strong>MARCHBANK EXCHANGE &mdash; VISITOR RECORD</strong><br>"
+ "Saturday 27 September &middot; sheet 3 of 3")
+ TABLE(["", "IN", "OUT"], [
["Sheet 1", "11", "11"],
["Sheet 2", "9", "9"],
["Sheet 3", "7", "8"],
["<strong>TOTAL</strong>", "<strong>27</strong>", "<strong>28</strong>"]
])
+ P("<em>Every name in the OUT column also appears in the IN column.</em>")
+ P("<em>Counted twice. H.O.</em>")
},
{ name: "3 · Transcript — outside broadcast", content:
P("<strong>NETTLEFOLD SOUND &middot; AFTERNOON SHOW &middot; OB INSERT</strong><br>"
+ "<strong>DURATION:</strong> 11 min 00 sec &middot; <strong>NOT FOR RE-BROADCAST</strong>")
+ P("<code>15:41:00</code> &mdash; OB line opens early. Presenter continues.<br>"
+ "<code>15:45:12</code> &mdash; incoming call patched to air.<br>"
+ "<code>15:45:20</code> &mdash; CALLER: <em>&ldquo;&mdash; is anyone there? I can hear "
+ "you. I can hear you in the wall.&rdquo;</em><br>"
+ "<code>15:45:31</code> &mdash; PRESENTER: <em>&ldquo;I'm here. Tell me where you "
+ "are.&rdquo;</em><br>"
+ "<code>15:52:00</code> &mdash; line drops. Insert ends.")
+ P("<strong>Engineering note.</strong> Reviewed four times. The eleven minutes are on "
+ "the tape. The eleven minutes are not the same on any two reviews. The caller says "
+ "something different each time. The presenter's replies do not change.")
},
{ name: "4 · Relay log", content:
P("<strong>LINK LOG &mdash; NETTLEFOLD / MARCHBANK ROOF DISH</strong>")
+ P("<code>15:41 SESSION OPEN &mdash; PEER MARCHBANK/CTL</code><br>"
+ "<code>15:41 PEER STATUS: DECOMMISSIONED 1994</code><br>"
+ "<code>15:41 &mdash; 15:52 CARRIED 00:40:07</code><br>"
+ "<code>15:44 QUERY ADDR-HIST x9</code><br>"
+ "<code>15:52 SESSION CLOSE</code>")
+ P("<strong>Forty minutes and seven seconds of traffic inside an eleven-minute "
+ "window.</strong> The log is not corrupt. Every packet is timestamped, sequential, "
+ "and inside the window.")
+ P("<em>Retention policy: destroy after 30 days. Not destroyed.</em>")
},
{ name: "5 · Measured survey — north wall", content:
P("<strong>MARCHBANK EXCHANGE &mdash; CONVERSION &middot; MEASURED SURVEY</strong><br>"
+ "Basement, frame room, north wall. Tape and disto, both.")
+ TABLE(["Pass", "Time", "Length"], [
["1", "14:55", "31.40 m"],
["2", "15:44", "34.90 m"],
["3", "16:20", "31.40 m"]
])
+ P("<strong>All three figures are on the drawing.</strong> Pass 2 accommodates one "
+ "further rack bay at the east end. There is no further rack bay at the east end.")
+ P("<em>Practice comment: &ldquo;Take 2 off.&rdquo; Not taken off.</em>")
},
{ name: "6 · The letter", content:
P("<em>One page. No letterhead. No department named. Good paper.</em>")
+ P("Dear &mdash;,")
+ P("I have read your account of the afternoon of the twenty-seventh of September at "
+ "Marchbank Exchange, Sail Street, Nettlefold, together with the accounts of eleven "
+ "other people who were present.")
+ P("Yours is not the longest. It is the only one that has not been amended.")
+ P("I should like a quarter of an hour of your time, at your place of work, at your "
+ "convenience. I am not selling anything, I am not from the press, and I am not "
+ "acting for the developer or the insurers.")
+ P("I am not able to tell you today what happened in that building. I am able to tell "
+ "you that somebody knows, that it was not your fault, and that Mr Kearsley did the "
+ "right thing.")
+ P("Yours sincerely,<br><strong>I. Ferrand</strong><br><em>(a telephone number, "
+ "handwritten)</em>")
},
{ name: "7 · Form CS/1", content:
P("<strong>FORM CS/1</strong> &mdash; DECLARATION AND UNDERTAKING<br>"
+ "<em>To be signed once. Retained by Registry. A copy is not issued.</em>")
+ OL([
"I understand that I am being told a true thing about the world, and that I will "
+ "not be able to stop knowing it.",
"I will keep a record. I will keep it accurately. I will not amend it to make it "
+ "easier to read, or to make myself easier to believe.",
"I will raise a discrepancy the first time. I will raise it the second time.",
"I understand that the department will not always be able to tell me where "
+ "somebody has gone, and that this is not the same as not looking.",
"I will nominate one object of no value which is unambiguously mine, and I will "
+ "carry it."
])
+ P("Signed &hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip; "
+ "Date &hellip;&hellip;&hellip;&hellip;&hellip;&hellip;")
+ P("Countersigned &hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip; "
+ "<em>for Registry</em>")
+ P("<strong>5.</strong> <em>An anchor is not a keepsake. Choose something you would "
+ "not be sorry to lose, and then be sorry to lose it.</em>")
}
];
/* ---------------------------------------------------------------- */
/* Cast */
/* ---------------------------------------------------------------- */
export const OPENDAY_CAST = [
{ key: "od_kearsley", name: "Douglas Kearsley",
role: "CIVILIAN. Retired exchange engineer, 71. Does not come out.",
chosenStyle: "deliberate", naturalArmour: 0, species: "baseline",
ch: { str: 9, siz: 11, con: 10, int: 15, pow: 13, dex: 10, cha: 13, edu: 14 },
skills: [{ fam: "repair", spec: "electronics", val: 80 },
{ fam: "knowledge", spec: "", val: 65 },
{ fam: "insight", spec: "", val: 45 }],
weapons: ["punch"],
tactics: "A good jacket over a work shirt and a pen in the top pocket that he uses. "
+ "Delighted, uncomplicated, genuinely good company. He wants one thing: to be "
+ "understood about the machine before he dies. At 15:49 he notices the extra rack, "
+ "says \"Well, that's not right, is it,\" and goes to deal with it himself, at once, "
+ "without drama, because that is the job. HE IS NOT SACRIFICING HIMSELF — he does "
+ "not know he is doing anything. If a PC tries to go instead he lets them come and "
+ "gets there first, because he knows the aisle in the dark. NO ROLL RESOLVES "
+ "ANYTHING HE DOES AFTER 15:49." },
{ key: "od_odame", name: "Councillor Hazel Odame",
role: "CIVILIAN. Civic society chair. Takes the head count.",
chosenStyle: "deliberate", naturalArmour: 0, species: "baseline",
ch: { str: 10, siz: 11, con: 11, int: 14, pow: 13, dex: 10, cha: 15, edu: 15 },
skills: [{ fam: "persuade", spec: "", val: 60 },
{ fam: "status", spec: "", val: 70 },
{ fam: "knowledge", spec: "", val: 55 }],
weapons: ["punch"],
tactics: "A lanyard, a folder, and reading glasses pushed up into her hair that she "
+ "will spend the afternoon looking for. Wants the building listed; failing that, a "
+ "decent photograph in the Advertiser. Knows the borough history cold, including "
+ "that the Cattle Lane households were rehoused eleven miles away. Brisk, warm, and "
+ "absolutely will not be told the day should stop. At 15:48 she counts, because that "
+ "is what you do, and gets twenty-eight twice." },
{ key: "od_vasey", name: "Tony Vasey",
role: "CIVILIAN. Site manager. Wants Monday to start.",
chosenStyle: "reflex", naturalArmour: 0, species: "baseline",
ch: { str: 13, siz: 13, con: 12, int: 11, pow: 10, dex: 11, cha: 12, edu: 11 },
skills: [{ fam: "fast_talk", spec: "", val: 55 },
{ fam: "status", spec: "", val: 45 },
{ fam: "engineering", spec: "field_systems", val: 35 }],
weapons: ["punch"],
tactics: "A good coat over a hard hat he does not need indoors, and a phone he keeps "
+ "checking. Not unkind, entirely uninterested. The frame room was meant to be sealed "
+ "today and Kearsley talked him round. He is the one who says \"he'll have gone "
+ "home\" at 16:00, and means it." },
{ key: "od_ferrand", name: "Mrs Ivy Ferrand",
role: "DEPARTMENT. Recruiting officer. Act Three.",
chosenStyle: "deliberate", naturalArmour: 0, species: "baseline",
ch: { str: 10, siz: 11, con: 12, int: 16, pow: 15, dex: 11, cha: 16, edu: 15 },
skills: [{ fam: "persuade", spec: "", val: 75 },
{ fam: "insight", spec: "", val: 80 },
{ fam: "status", spec: "", val: 60 },
{ fam: "tradecraft", spec: "", val: 65 }],
weapons: ["punch"],
tactics: "Fifties, a raincoat over something sensible, and a small hard case she puts "
+ "on the floor beside her chair and never opens. Orders tea and does not drink it. "
+ "Kind, unhurried, completely immovable. She has read the written record including "
+ "the private part; she was not in the building and says so plainly. She will not "
+ "say crossing, coherence or department. To anything she cannot answer: \"I'm not "
+ "able to tell you that today\" — never \"I don't know,\" and she is scrupulous "
+ "about the difference. NO ROLL RESOLVES HER SCENES. She is not rolling against the "
+ "players and they cannot roll her away." },
{ key: "od_bewley", name: "Mr Bewley",
role: "DEPARTMENT. Registry. Signs things. The briefing.",
chosenStyle: "deliberate", naturalArmour: 0, species: "baseline",
ch: { str: 10, siz: 12, con: 11, int: 16, pow: 14, dex: 10, cha: 13, edu: 16 },
skills: [{ fam: "knowledge", spec: "", val: 70 },
{ fam: "research", spec: "", val: 70 },
{ fam: "insight", spec: "", val: 60 },
{ fam: "anomaly_lore", spec: "", val: 65 }],
weapons: ["punch"],
tactics: "Grey, unremarkable, and wearing a very good watch that he checks exactly "
+ "once. Courteous, dry, faintly apologetic about the building, the chairs and the "
+ "biscuits. He wants them to understand the one true thing before they sign, because "
+ "people who sign without understanding it do not last and the paperwork is "
+ "dreadful. Kearsley's file is open and it is his. NOTHING IN HIS SCENE IS ROLLED." }
];