Ran the starter end to end. It closed, and it found four defects in what I shipped an hour earlier — all in the scenario data, all silent. R-247: the Borrowed Authority did not work. I wrote scope "operate", which is not one of the five scope tiers; an unrecognised scope ranks 0 and every action came back "impossible" with no error. The first scene of the starter is the Borrowed Authority tutorial. Fixed, guarded in check-kits, and covered by a test that documents the failure mode. R-248: the contact subsystem was unreachable in the scenario built around it. The case file carried a standing for the Returned Clerks and no GROUP ITEM; resolveContact returns null without one, so READ, SIGNAL and OFFER did nothing. Groups are data now, and a test asserts every standing on a shipped case file has a group behind it. R-249: legs wrote `kindId` where resolveLegDialog reads `leg.kind`. It worked only because the terrain text happens to begin with "Extraction". Not a defect: phase four went Difficult because Resources hit 0 and destitution makes every remaining phase Difficult. Best beat in the session. All four phases failed and the case still closed — Containment 8 to 2, Resources 8 to 0 — which is what the scenario is built to survive. Two of six closing requirements succeeded and the settlement still completed. The Cancellation Man opened with a critical against a raised riot shield and went through 10 points of armour, teaching the shield and graded-defence lessons in one roll. Also documented: nobody on the starter team can aim the return, because only the Anchor Officer trains Transposition. The extraction page now says to narrate it rather than roll six dice that will all fail. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
755 lines
49 KiB
JavaScript
755 lines
49 KiB
JavaScript
/**
|
||
* PAPER WINDOW — the starter scenario, as data.
|
||
*
|
||
* Shipped as a Foundry ADVENTURE so the whole thing imports in one click: the GM
|
||
* text, the seven player handouts as separate pages a GM can reveal one at a time,
|
||
* the six pregens with their scenario functions and complications already written
|
||
* into their biographies, the cast, the case file with its tracks and phases already
|
||
* set, and the Borrowed Authority as a real item rather than a paragraph.
|
||
*
|
||
* The handouts are their own journal with default ownership OBSERVER, because a
|
||
* handout a GM has to copy out of the scenario text is a handout that does not get
|
||
* used. The GM journal stays hidden.
|
||
*/
|
||
|
||
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>`;
|
||
|
||
/* ---------------------------------------------------------------- */
|
||
/* The GM scenario */
|
||
/* ---------------------------------------------------------------- */
|
||
|
||
export const STARTER_PAGES = [
|
||
|
||
{ name: "1 · Run this first", content:
|
||
P("<strong>PAPER WINDOW</strong> is a six-player introductory case for The Custodians. "
|
||
+ "Four to five hours. Classification <strong>Near</strong>. Bureaucratic horror, "
|
||
+ "investigation, negotiation and one containable fight.")
|
||
+ P("<em>It teaches the game while it is being played.</em> Do not explain the "
|
||
+ "subsystems in the briefing. Introduce each one the first time the agents need it.")
|
||
+ TABLE(["Scene", "Introduces"], [
|
||
["Briefing", "the agency, the case tracks, cover and objectives"],
|
||
["The cordon", "ordinary skill rolls and Borrowed Authority"],
|
||
["The dead-letter cage", "investigation, fail-forward clues and the case clock"],
|
||
["Window Six", "crossing and Coherence"],
|
||
["The night shift", "READ, SIGNAL, OFFER and Standing"],
|
||
["The Cancellation Man", "reaction lanes, cover, graded defences, armour, First Aid"],
|
||
["Closing the register", "specialist teamwork, Containment and a real choice"],
|
||
["Coming home", "extraction, return rolls, debrief and experience"]
|
||
])
|
||
+ P("<strong>There is no clue that must be found and no roll that must succeed.</strong> "
|
||
+ "A failed roll changes the cost, the danger or the clarity of the information. It "
|
||
+ "never stops the scenario.")
|
||
+ H(2, "The six-player spotlight rule")
|
||
+ P("Every major scene names a <strong>spotlight agent</strong>. That player frames the "
|
||
+ "first approach. Others assist, supply dossier items, handle consequences or propose "
|
||
+ "alternatives. <strong>Do not solve another player's specialist scene with the Field "
|
||
+ "Lead's phase roll.</strong> The purpose of a six-player starter is six protagonists, "
|
||
+ "not six people present.")
|
||
},
|
||
|
||
{ name: "2 · The briefing", content:
|
||
READ("At 08:12 yesterday, six brown envelopes were delivered in Coventry. They bear "
|
||
+ "valid first-class postage, a 1987 postmark and the cancellation mark of Rookery Heath "
|
||
+ "Delivery Office, which closed in 1998.<br><br>"
|
||
+ "Each envelope was addressed to a living person. Within an hour of opening one, the "
|
||
+ "recipient disappeared from government databases. By evening, employers, banks and "
|
||
+ "close relatives had begun forgetting them. The people themselves remain physically "
|
||
+ "present.<br><br>"
|
||
+ "One recipient, Lorna Vale, went to the closed delivery office shortly after midnight. "
|
||
+ "She has not returned. At 03:17 the office's disconnected landline called the Cabinet "
|
||
+ "Office switchboard. A woman asked whether the Department would be making its last "
|
||
+ "collection.<br><br>"
|
||
+ "The building is scheduled for demolition at sixteen hundred today.")
|
||
+ H(2, "Orders")
|
||
+ OL(["Enter Rookery Heath Delivery Office under the supplied cover.",
|
||
"Recover Lorna Vale and the six original letters.",
|
||
"Identify the source of the cancellation mark.",
|
||
"Stop further deliveries.",
|
||
"Leave no publicly intelligible incident."])
|
||
+ P("<strong>Cover:</strong> licensed asbestos and records-remediation team acting for "
|
||
+ "the demolition contractor.")
|
||
+ P("<strong>The brief omits:</strong> the agency attended the same building after a fire "
|
||
+ "in 1987. The file has been deliberately removed from the current case papers.")
|
||
+ H(2, "Starting state")
|
||
+ P("<strong>Containment 8 · Resources 8 · Clearance 6</strong> · Last Collection 0/4 · "
|
||
+ "all agents at Coherence 10. The case file in this adventure is already set to these.")
|
||
+ P("The six letters count as <strong>one secured exhibit</strong> once collected.")
|
||
},
|
||
|
||
{ name: "3 · The truth", content:
|
||
P("In 1987, Rookery Heath briefly overlapped a Near world in which the building was not "
|
||
+ "a postal depot but the <strong>Civil Continuity Registry</strong>. In that world a "
|
||
+ "person's civic existence depended on a deliverable name and address held in the "
|
||
+ "nightly register.")
|
||
+ P("The overlap happened during a fire. For eleven minutes both offices processed the "
|
||
+ "same mail. <strong>Three hundred and seventeen people acquired valid entries in "
|
||
+ "both worlds.</strong>")
|
||
+ P("Custodian <strong>Malcolm Rusk</strong> contained it by declaring Window Six, the "
|
||
+ "disputed register and the entire other office to be an <em>undelivered agency "
|
||
+ "consignment</em>, and sealing the declaration in the dead-letter cage. As long as "
|
||
+ "the building remained an unresolved delivery, the crossing stayed closed.")
|
||
+ P("Demolition workers broke the exterior seal three days ago. The Registry's night "
|
||
+ "shift resumed where it stopped in 1987. Its staff have spent thirty-nine years "
|
||
+ "waiting to be relieved, and their automatic system has begun delivering notices "
|
||
+ "that reconcile the disputed citizens by deleting one version from the record.")
|
||
+ P("<strong>There are two Lorna Vales.</strong> Both are forty-two, both have a complete "
|
||
+ "childhood, family and employment history. Neither is the original: the overlap "
|
||
+ "produced two equally valid continuations of the same infant recorded in 1987.")
|
||
+ P("The Registry staff are <em>not invaders</em>. They want a recognised authority to "
|
||
+ "take custody of the disputed folio so they can close their shift. The briefed "
|
||
+ "solution — destroying the other register — works, and erases 317 people who are as "
|
||
+ "real as anyone on the team.")
|
||
+ P("<strong>The clean solution</strong> is to accept the folio into agency custody as a "
|
||
+ "<em>pending inter-jurisdictional register</em>, using the original case number, a "
|
||
+ "working franking mechanism, the Registry's master stamp, a medical certification "
|
||
+ "that the duplicates are living persons, and a serving officer's signature. "
|
||
+ "<strong>It requires every member of the six-person team.</strong>")
|
||
},
|
||
|
||
{ name: "4 · Pressure — the Last Collection", content:
|
||
P("Advance the clock when a phase fumbles; when the team argues twenty minutes without "
|
||
+ "acting; when a loud weapon is fired in the mundane building; when the Borrowed "
|
||
+ "Authority is burned; when the team violates the clerks' taboo <em>after learning it</em>; "
|
||
+ "or when passive investigation needs turning into a decision.")
|
||
+ P("<strong>Do not advance it merely because the players are investigating carefully.</strong>")
|
||
+ TABLE(["Clock", "Event"], [
|
||
["<strong>1 — Sorting</strong>",
|
||
"The dead conveyor starts. Every letter in the building rotates so its address faces Window Six."],
|
||
["<strong>2 — Forwarded</strong>",
|
||
"One affected recipient's spouse can no longer remember their face. <strong>Containment −1.</strong>"],
|
||
["<strong>3 — At the gate</strong>",
|
||
"The demolition manager arrives with workers and police support. The cover has about thirty minutes left. <strong>Clearance −1</strong> if the team demands overt agency intervention."],
|
||
["<strong>4 — Last Collection</strong>",
|
||
"Every disputed notice is delivered at once. Window Six locks open, the two offices begin occupying the same space, and the demolition crew witnesses it. <strong>Containment −3.</strong> The clean settlement is still possible; all remaining specialist tasks become Difficult."]
|
||
])
|
||
+ P("If the clock would pass 4, reduce Clearance or Containment instead, according to "
|
||
+ "whether the cause was disobedience or public exposure.")
|
||
},
|
||
|
||
{ name: "5 · Phase one — the demolition cordon", content:
|
||
P("A low concrete building behind temporary fencing. Half the red sign has been removed, "
|
||
+ "leaving <strong>DELIVE OFF</strong> over the entrance. Rainwater lies everywhere "
|
||
+ "except on the front step.")
|
||
+ P("<strong>Gareth Moss</strong>, site manager, is competent, worried about his schedule "
|
||
+ "and eager to transfer responsibility. He has opened no letter. He accepts Imogen "
|
||
+ "Price's credential if the team behaves like a survey crew.")
|
||
+ H(2, "Teach: Borrowed Authority")
|
||
+ P("Ask the group how they use the identity without breaking its red flags. Signing in "
|
||
+ "satisfies the first. A six-person team satisfies the second. Photographing each "
|
||
+ "opened door satisfies the third <em>and</em> creates useful evidence.")
|
||
+ P("Routine entry costs 1 Trust and needs no roll. Demanding that demolition stop is a "
|
||
+ "stretch, or Clearance spent on overt agency authority.")
|
||
+ H(2, "Field Lead spotlight — choose the posture")
|
||
+ UL(["<strong>Quiet:</strong> demolition continues outside. +20% Stealth inside; Last "
|
||
+ "Collection advances if the crew reaches Window Six.",
|
||
"<strong>Official:</strong> spend 1 Clearance to suspend demolition two hours. No "
|
||
+ "public clock pressure, but the agency knows the team went beyond the brief.",
|
||
"<strong>Borrowed:</strong> stretch Price's scope for a temporary asbestos exclusion. "
|
||
+ "Success buys two hours free; failure buys thirty minutes; a fumble burns the credential."])
|
||
+ H(2, "What Gareth gives without a roll")
|
||
+ P("If treated as a professional rather than a witness to be managed:")
|
||
+ UL(["The cage door was found open three days ago, although its lock was rusted shut.",
|
||
"Lorna Vale entered using a staff key bearing the old crown logo.",
|
||
"A landline rings inside every day at 15:42.",
|
||
"The demolition plan contains no Window Six."])
|
||
},
|
||
|
||
{ name: "6 · Phase two — the dead-letter cage", content:
|
||
P("Sorting frames, sacks hardened by damp, a secure wire cage. Electricity disconnected. "
|
||
+ "The fluorescent lights come on when nobody is looking directly at them.")
|
||
+ P("Give the group the plan and ask where everyone goes. Keep all six active by cutting "
|
||
+ "between simultaneous searches.")
|
||
+ P("<strong>Every discovery is automatic when the agents search the right place.</strong> "
|
||
+ "A success adds interpretation or advantage; a failure gives the clue with a cost; a "
|
||
+ "fumble also advances Last Collection.")
|
||
+ H(2, "A · The 1987 agency carbon — Registry or Research")
|
||
+ P("In the manager's desk, a carbon headed <strong>R-143 / UNDELIVERABLE MATERIAL</strong>.")
|
||
+ UL(["<strong>Success:</strong> “pending collection” is the containment, not "
|
||
+ "ordinary wording. Record <strong>case number R-143</strong> for the clean ending.",
|
||
"<strong>Failure:</strong> found and read, but removing it tears the line with the "
|
||
+ "signing officer's name. <strong>Resources −1</strong> to authenticate later.",
|
||
"<strong>Special/critical:</strong> the page numbers jump from 14 to 22. The agency "
|
||
+ "knew, and removed the intervening report."])
|
||
+ H(2, "B · The six letters — Doctor")
|
||
+ P("Five wait in numbered pigeonholes; the sixth is opened and addressed to Lorna Vale. "
|
||
+ "The ink contains human proteins. The paper fibres carry the addressee's own "
|
||
+ "mitochondrial markers.")
|
||
+ UL(["<strong>Success:</strong> these are not messages <em>about</em> the recipients, they "
|
||
+ "are partial physical records <em>of</em> them. Destroying one may injure or erase "
|
||
+ "its addressee. <strong>+20%</strong> when certifying the disputed people later.",
|
||
"<strong>Failure:</strong> same conclusion, after a sample makes one recipient briefly "
|
||
+ "lose their surname. <strong>Witnessed paradox: −1 Coherence</strong> to the doctor.",
|
||
"<strong>Critical:</strong> the doctor's own future death notice is medically genuine "
|
||
+ "and has not yet been written."])
|
||
+ H(2, "C · Window Six — Engineer")
|
||
+ P("Behind a sorting frame, a service window absent from the building plan. Roller shutter "
|
||
+ "painted shut. The brass franking machine beside it has no power connection and is warm.")
|
||
+ UL(["<strong>Success:</strong> the window is a regulator whose state is expressed through "
|
||
+ "postal procedure, and it is repairable. Record <strong>franker diagnosed</strong>: "
|
||
+ "+20% on the later repair.",
|
||
"<strong>Failure:</strong> learns how it works by opening the shutter two centimetres. "
|
||
+ "Everyone hears rain falling upward. <strong>Containment −1.</strong>",
|
||
"<strong>Fumble:</strong> as failure, and the machine stamps the engineer's hand with "
|
||
+ "tomorrow's date. Witnessed paradox."])
|
||
+ H(2, "D · The master key and the impossible fingerprints — Criminal")
|
||
+ P("Two mechanisms: an ordinary warded lock, and a bolt that moves only while the landline "
|
||
+ "is ringing. Sleight of Hand opens the first. The second yields to calling the "
|
||
+ "disconnected number from the agency handset, waiting for 15:42, or Gareth's staff key.")
|
||
+ UL(["<strong>Success:</strong> in without marking the lock, and the old crown staff key.",
|
||
"<strong>Failure:</strong> in, with visible damage — 1 Trust or 1 Clearance to suppress it.",
|
||
"<strong>Fumble:</strong> the cage closes with the criminal inside as the landline rings. "
|
||
+ "They may answer. A woman says, <em>“Collection is overdue, Mr Roake.”</em> "
|
||
+ "Advance Last Collection."])
|
||
+ P("Inside the cage are the criminal's fingerprints under the identity <strong>Arthur "
|
||
+ "Roake, postal porter, deceased 19 September 1987</strong>.")
|
||
+ H(2, "Opening Window Six")
|
||
+ P("The disconnected telephone rings once. A woman asks: <em>“Collection or delivery?”</em>")
|
||
+ P("<strong>“Collection”</strong> opens the shutter safely. <strong>“Delivery”</strong> "
|
||
+ "opens it violently and advances Last Collection. Any careful reading of R-143 shows the "
|
||
+ "consignment is <em>pending collection</em>.")
|
||
+ P("Mark the case <strong>Across</strong>. Going out is a decision, not a roll — the "
|
||
+ "Transposition roll happens coming home. The mundane shutter closes behind the last "
|
||
+ "agent and can still be opened from either side.")
|
||
},
|
||
|
||
{ name: "7 · Phase three — the night shift", content:
|
||
P("The Near office is clean, warm and fully staffed. Six clerks in 1987 uniforms work "
|
||
+ "beneath green lamps. None has aged. Pneumatic tubes carry sealed envelopes into a "
|
||
+ "ceiling with no space above it.")
|
||
+ P("At Window Six stands <strong>Evelyn Vale</strong>, night supervisor. Behind her is "
|
||
+ "<strong>Lorna Vale</strong>, the missing recipient — and <em>another</em> Lorna Vale "
|
||
+ "in Registry uniform. They are physically identical.")
|
||
+ P("Seeing the two Lornas is a <strong>witnessed paradox</strong>. It is not meeting "
|
||
+ "yourself unless an agent meets their own duplicate.")
|
||
+ H(2, "READ")
|
||
+ P("Insight, Anthropology or relevant professional observation. Facts in order:")
|
||
+ OL(["<strong>Taboo:</strong> never open, read aloud or name the addressee of mail that is "
|
||
+ "not yours. A sealed identity belongs to its recipient.",
|
||
"<strong>Desire:</strong> they want a recognised authority to relieve them and receipt "
|
||
+ "the disputed folio. Thirty-nine years on the same shift.",
|
||
"<strong>Critical extra:</strong> they are frightened of the Cancellation Man, which is "
|
||
+ "not a person but the procedure that destroys records that cannot be reconciled."])
|
||
+ H(2, "SIGNAL")
|
||
+ P("They speak English; the difficulty is procedural. A correct signal gives name, "
|
||
+ "department and case reference <em>from the public side of the counter</em>: "
|
||
+ "<em>“Amira Bell, Departmental Custody, attending R-143 for collection.”</em>")
|
||
+ UL(["With R-143 — <strong>Easy</strong>.",
|
||
"Without it — <strong>Average</strong>.",
|
||
"From behind the counter — <strong>Difficult</strong>, and it violates their working boundary."])
|
||
+ H(2, "OFFER")
|
||
+ P("A signed receipt and a promise to take the folio into recognised custody, passed "
|
||
+ "through Window Six in exchange for it.")
|
||
+ UL(["Correct form — <strong>Easy</strong> Bargain.",
|
||
"A promise to “look into it” — <strong>Average</strong>.",
|
||
"Demanding surrender or threatening destruction — <strong>Difficult</strong>."])
|
||
+ P("At <strong>+2 or better</strong> Evelyn explains the clean closure and releases the "
|
||
+ "folio once the six requirements are met. At <strong>+1</strong> she explains only that "
|
||
+ "the register needs custody and certification. At <strong>0</strong> she permits "
|
||
+ "inspection but will not release it. At <strong>negative</strong>, she activates the "
|
||
+ "Cancellation Man.")
|
||
+ H(2, "The two Lornas")
|
||
+ P("Same childhood until the 1987 fire, different lives after. The mundane Lorna has a "
|
||
+ "partner and works for the council. Registry Lorna has worked this shift for "
|
||
+ "thirty-nine subjective years and remembers a daughter born in the Near world.")
|
||
+ P("Neither wants the other erased. Asked which is real, each answers: "
|
||
+ "<em>“Both, until you file otherwise.”</em>")
|
||
+ P("Any successful Medicine or Biology roll establishes that both are living humans and "
|
||
+ "neither is a constructed copy. Failure leaves it medically apparent but costs the "
|
||
+ "later certification its +20%.")
|
||
},
|
||
|
||
{ name: "8 · The Cancellation Man", content:
|
||
P("<strong>Trigger</strong> when the team tries to remove or destroy the folio without an "
|
||
+ "agreement; when someone knowingly violates the taboo; when Standing reaches −1; or when "
|
||
+ "the table needs the promised physical tutorial before the final act.")
|
||
+ P("The lights extinguish from the back of the room toward the team. A tall figure unfolds "
|
||
+ "from returned envelopes, red twine and black cancellation ink. <strong>Every address "
|
||
+ "on it belongs to someone currently in the room.</strong>")
|
||
+ P("It wants the <strong>disputed folio</strong>, not casualties. It moves toward the "
|
||
+ "carrier and ignores other agents unless they obstruct it.")
|
||
+ H(2, "In Foundry")
|
||
+ P("Use the <strong>Cancellation Man</strong> actor in this adventure, or any Dangerous "
|
||
+ "adversary. It withdraws at 2 hit points, when restrained, or when presented with a "
|
||
+ "properly bagged and receipted folio. For a gentler first session, drop its attack by "
|
||
+ "10% and start it a full move away.")
|
||
+ H(2, "Terrain")
|
||
+ UL(["Sorting frames — solid partial cover.",
|
||
"The service counter — blocks movement, not attacks.",
|
||
"Closing a wire cage around it — one action, and Sleight of Hand, Repair (Mechanical) or Athletics.",
|
||
"The Containment Officer can interpose a raised riot shield between it and the carrier."])
|
||
+ H(2, "Teach combat in this order")
|
||
+ OL(["Roll reaction lanes.",
|
||
"Ask each player for movement and one significant action.",
|
||
"Explain range, cover or shield modifiers only when they apply.",
|
||
"When attacked, demonstrate Dodge or Parry and the escalating defence penalty.",
|
||
"If a wound penetrates, resolve location, armour and any Major Wound.",
|
||
"Give the doctor an immediate First Aid decision if anyone bleeds or goes down."])
|
||
+ H(2, "Nonviolent containment — always available")
|
||
+ UL(["Bag the folio and attach a provisional receipt: Bargain or Status, Average. Chain of "
|
||
+ "Custody is exactly this expertise.",
|
||
"Lock it in the dead-letter cage: the criminal works the lock, Containment holds it off.",
|
||
"Repair the franking machine and stamp the receipt early: the engineer acts, another agent covers."])
|
||
+ P("<strong>Killing it is temporary.</strong> It reforms at the next clock advance. "
|
||
+ "Containing it teaches the intended lesson: violence buys time, procedure closes the case.")
|
||
},
|
||
|
||
{ name: "9 · Phase four — closing the register", content:
|
||
P("Put six blank lines on the table, one per contribution. Tell the players the case can "
|
||
+ "now be closed. Do not prescribe which ending.")
|
||
+ H(2, "The clean settlement")
|
||
+ P("Enter the folio into agency custody as <strong>R-143-A, Pending Inter-Jurisdictional "
|
||
+ "Register</strong>. This decides nothing about which world owns the 317 names. It "
|
||
+ "establishes a third recognised custodian and lets the Registry close its shift without "
|
||
+ "deleting anyone.")
|
||
+ TABLE(["#", "Requirement", "Who", "Roll", "On failure"], [
|
||
["1", "Establish authority", "Field Lead", "Spend 1 Clearance, or Status/Tradecraft to justify it",
|
||
"The Clearance is spent anyway. Fumble also marks the lead for internal investigation."],
|
||
["2", "Hold containment", "Containment", "Athletics, Shield or a practical plan",
|
||
"<strong>Containment −1</strong>; the work continues. A critical prevents the next clock advance."],
|
||
["3", "Write the settlement", "Settlements", "Bargain, Persuade or Knowledge — Easy at impression +2",
|
||
"A future obligation: the Registry staff are technically seconded, and may later demand pay, pension and extraction."],
|
||
["4", "Certify the living", "Doctor", "Medicine, +20% if the letters and both Lornas were examined",
|
||
"Still certified, but the doctor is personally responsible for reviewing all 317 cases."],
|
||
["5", "Repair and frank", "Engineer", "Repair (Electronics) or Engineering, +20% if diagnosed",
|
||
"<strong>Resources −1</strong>. Fumble works but dates the receipt one year in the future — a campaign hook."],
|
||
["6", "Recover the master stamp", "Criminal", "Sleight of Hand, from the public side of the counter",
|
||
"Obtained, but the drawer breaks: impression −1. Fumble opens a second drawer holding an undelivered letter addressed to the criminal."]
|
||
])
|
||
+ P("When all six are on the form, the Field Lead reads the case number aloud and Evelyn "
|
||
+ "stamps the other copy. <strong>Every clock in the Near office moves from 15:42 to "
|
||
+ "15:43.</strong>")
|
||
+ P("The clerks put on coats. Some cry. None of them knows what weather waits outside. The "
|
||
+ "Near Lorna asks the mundane Lorna whether she would like to meet her daughter. It is "
|
||
+ "not a trick and does not have to be resolved tonight.")
|
||
+ P("<strong>Result:</strong> Containment +1; Clearance −1 if the team openly defied orders; "
|
||
+ "Standing with the Returned Clerks +1. All six affected recipients begin returning to "
|
||
+ "records over the next day.")
|
||
+ H(2, "The other endings")
|
||
+ UL(["<strong>Destroy the Near register.</strong> The agency's implied preference. The six "
|
||
+ "mundane recipients are restored; the Registry staff, Near Lorna and 311 others become "
|
||
+ "unrecorded and then physically absent. Watching it is a witnessed paradox; doing it "
|
||
+ "knowingly is also broke local law. Containment +2, Clearance +1. At debrief nobody "
|
||
+ "uses the word “people” unless a player does first.",
|
||
"<strong>Let the Registry supersede our record.</strong> The mundane six are progressively "
|
||
+ "forgotten and their Near counterparts take their addresses, jobs and relationships. The "
|
||
+ "team recovers Lorna — the other Lorna. Containment unchanged, Clearance −2. Grave, and "
|
||
+ "not a game over.",
|
||
"<strong>Seal it again.</strong> Recreate Rusk's 1987 containment. Containment +1; the case "
|
||
+ "is <em>contained, not closed</em>; the clock resets to 1 and starts again when the "
|
||
+ "building is next disturbed. Somebody must stop the demolition permanently.",
|
||
"<strong>Fail to choose.</strong> At Last Collection 4 the buildings overlap and the crew "
|
||
+ "sees the Registry. The team can still escape. Close on sirens arriving at a building "
|
||
+ "that officially employs everyone standing outside it."])
|
||
},
|
||
|
||
{ name: "10 · Extraction and debrief", content:
|
||
P("Use the normal return procedure in every ending. A clean settlement leaves the "
|
||
+ "window clock at zero and adds no case-specific penalty.")
|
||
+ UL(["Another agent may aim the return for someone else — the team's best Transposition.",
|
||
"Failure gets an agent home <em>near</em> the target; it never strands them.",
|
||
"A fumble costs Coherence and may grant a Quiet Art.",
|
||
"PAPER WINDOW is Near: no classification penalty."])
|
||
+ P("<strong>This team has no Anchor Officer, and that is deliberate.</strong> "
|
||
+ "Transposition is trained by exactly one posting in the register, and none of "
|
||
+ "these six has it: every one of them aims the return at the printed 1%. "
|
||
+ "<em>Do not roll six dice to discover that.</em> Narrate it: they all get home, "
|
||
+ "and none of them gets home neatly — wrong street, wrong hour, one of them in the "
|
||
+ "wrong coat. Roll only if an agent has a reason to want a clean arrival, or if the "
|
||
+ "window clock has moved and you want the fumble on the table.")
|
||
+ P("It is worth saying out loud at the debrief that the department sent six people to "
|
||
+ "a crossing and no anchor. That is the campaign, not an oversight.")
|
||
+ P("When everyone is home, close the case and resolve experience.")
|
||
+ H(2, "Debrief — ask each player one")
|
||
+ OL(["<strong>Field Lead:</strong> at what moment did this stop being the case in your orders?",
|
||
"<strong>Containment:</strong> what did you protect that the department would rather was destroyed?",
|
||
"<strong>Settlements:</strong> which sentence in the agreement do you expect to regret?",
|
||
"<strong>Doctor:</strong> are the two Lornas the same person? Answer medically, then answer honestly.",
|
||
"<strong>Engineer:</strong> did you repair Window Six, or teach it a new procedure?",
|
||
"<strong>Criminal:</strong> what was written on the letter you left sealed?"])
|
||
+ READ("Whose name did you knowingly leave off the form?")
|
||
+ P("On a clean settlement each agent recovers the normal debrief Coherence. If the team "
|
||
+ "destroyed or superseded a register, ask the question <em>before</em> recovery.")
|
||
},
|
||
|
||
{ name: "11 · GM quick reference", content:
|
||
H(2, "Cast")
|
||
+ TABLE(["Who", "Wants", "Lies about"], [
|
||
["<strong>Gareth Moss</strong>, site manager",
|
||
"a signed instruction and someone else liable for the delay",
|
||
"claiming he never looked through Window Six"],
|
||
["<strong>Lorna Vale</strong>, mundane",
|
||
"her life and the truth, both", "having no curiosity about the other Lorna's daughter"],
|
||
["<strong>Lorna Vale</strong>, Registry clerk",
|
||
"the shift to end without taking her existence with it",
|
||
"never having sent a letter to the mundane world before"],
|
||
["<strong>Evelyn Vale</strong>, night supervisor",
|
||
"a valid receipt, more than rescue",
|
||
"nothing — but she answers only the question procedurally put to her"],
|
||
["<strong>The Cancellation Man</strong>",
|
||
"unresolved records deleted or returned",
|
||
"it cannot bargain, but it obeys valid packaging and receipts"]
|
||
])
|
||
+ H(2, "Clue map")
|
||
+ TABLE(["Conclusion", "Evidence routes"], [
|
||
["The agency knew", "R-143 carbon; missing page numbers; the lead's impossible cover employment"],
|
||
["Window Six is the crossing", "engineer's diagnosis; absent building plan; upward rain"],
|
||
["Letters rewrite people", "doctor's analysis; recipients forgotten; Registry explanation"],
|
||
["The clerks are trapped, not invading", "READ; frozen clocks; relief rota; Evelyn's offer"],
|
||
["Both Lornas are real", "medical exam; separate post-1987 memories; the disputed folio"],
|
||
["Clean closure is possible", "R-143 wording; contact at +1/+2; repaired franking mechanism"]
|
||
])
|
||
+ H(2, "Fail-forward costs")
|
||
+ P("When uncertain, charge one of these rather than withholding information — and never "
|
||
+ "more than one major cost for a single failed roll unless it is a fumble.")
|
||
+ UL(["Resources −1", "Containment −1", "Clearance −1", "Advance Last Collection",
|
||
"Apply a listed Coherence occurrence", "Reduce impression by 1",
|
||
"Attach a future obligation to the successful outcome"])
|
||
+ H(2, "Time management")
|
||
+ TABLE(["Real time", "Target position"], [
|
||
["0:00–0:20", "Briefing and character introductions"],
|
||
["0:20–1:00", "Cordon and Borrowed Authority"],
|
||
["1:00–2:00", "Investigation and Window Six"],
|
||
["2:00–3:00", "Contact and the two Lornas"],
|
||
["3:00–3:40", "The Cancellation Man"],
|
||
["3:40–4:30", "Closure, extraction and debrief"]
|
||
])
|
||
+ P("Short on time: let the cage open automatically when the telephone rings, and run the "
|
||
+ "Cancellation Man as a three-round containment challenge rather than combat to zero.")
|
||
+ H(2, "Spotlight checklist")
|
||
+ UL(["Lead chose the posture and signed the outcome.",
|
||
"Containment raised the shield, protected someone or secured the folio.",
|
||
"Settlements completed READ/SIGNAL/OFFER or drafted the receipt.",
|
||
"Doctor examined the letters or the Lornas, and had a First Aid opportunity.",
|
||
"Engineer diagnosed and repaired Window Six.",
|
||
"Criminal entered the cage and recovered the master stamp."])
|
||
+ P("If a box is still empty approaching the final scene, move that contribution into that "
|
||
+ "player's path.")
|
||
},
|
||
|
||
{ name: "12 · Continuing the campaign", content:
|
||
P("On the clean ending the agency holds the <strong>R-143-A Disputed Folio</strong>. It "
|
||
+ "generates cases without imposing a metaplot:")
|
||
+ UL(["A name appears in the folio before the team meets its owner.",
|
||
"The future date from a fumbled repair arrives.",
|
||
"The Returned Clerks submit thirty-nine years of back-pay claims.",
|
||
"Near Lorna asks the team to extract her daughter.",
|
||
"A senior officer orders the folio destroyed, and supplies perfect paperwork.",
|
||
"Malcolm Rusk signs a new collection receipt, having died in 1994."])
|
||
+ P("<strong>Precedent:</strong> R-143-A recognises duplicate civic identities as living "
|
||
+ "persons pending adjudication. <strong>Trust</strong> 3 on a clean settlement, 1 if "
|
||
+ "merely resealed. <strong>Red flag:</strong> every invocation adds another name to the "
|
||
+ "folio. <strong>Unresolved:</strong> the agency accepted custody and never promised a "
|
||
+ "decision date.")
|
||
+ READ("A firearm can stop the thing coming down the corridor, but only a correctly worded "
|
||
+ "record can make the corridor stop existing.")
|
||
}
|
||
];
|
||
|
||
/* ---------------------------------------------------------------- */
|
||
/* Player handouts — their own journal, visible to players */
|
||
/* ---------------------------------------------------------------- */
|
||
|
||
export const STARTER_HANDOUTS = [
|
||
|
||
{ name: "1 · Operational brief", content:
|
||
P("<strong>DEPARTMENTAL CUSTODY SERVICE</strong><br>"
|
||
+ "<strong>CASE:</strong> PW-01 / ROOKERY HEATH<br>"
|
||
+ "<strong>CLASSIFICATION:</strong> NEAR / LOCAL AUTHORITY EXPOSURE<br>"
|
||
+ "<strong>REPORT:</strong> 08:30, Gate 2, Rookery Heath Delivery Office, Coventry")
|
||
+ H(2, "Situation")
|
||
+ P("Six letters bearing valid 1987 postmarks were delivered yesterday from an office "
|
||
+ "closed in 1998. Opening a letter causes the addressee to disappear progressively "
|
||
+ "from public and private records.")
|
||
+ P("One recipient, <strong>Lorna Vale</strong>, entered the delivery office at 00:41 and "
|
||
+ "has not returned.")
|
||
+ P("The disconnected office landline called the Cabinet Office at 03:17. The caller asked "
|
||
+ "whether the Department would be making its <strong>last collection</strong>.")
|
||
+ P("Demolition is scheduled for 16:00.")
|
||
+ H(2, "Orders")
|
||
+ OL(["Enter under asbestos and records-remediation cover.",
|
||
"Recover Lorna Vale and the six original letters.",
|
||
"Identify the cancellation source.",
|
||
"Stop further deliveries.",
|
||
"Leave no publicly intelligible incident."])
|
||
+ H(2, "Starting state")
|
||
+ P("<strong>Containment 8 · Resources 8 · Clearance 6</strong>")
|
||
},
|
||
|
||
{ name: "2 · Borrowed Authority — Imogen Price", content:
|
||
P("<strong>IMOGEN PRICE</strong><br>Senior Asbestos Surveyor<br>"
|
||
+ "Halcyon Environmental Compliance Ltd")
|
||
+ P("<strong>Scope:</strong> routine site inspection<br><strong>Trust:</strong> 2")
|
||
+ H(2, "Observed working habits")
|
||
+ UL(["Signs in at every controlled site.",
|
||
"Never conducts an inspection alone.",
|
||
"Photographs every opened door."])
|
||
+ P("Inside scope the credential works. One tier beyond scope requires a stretch. "
|
||
+ "<strong>A fumble burns it.</strong>")
|
||
},
|
||
|
||
{ name: "3 · Recovered carbon copy", content:
|
||
P("<strong>DEPARTMENTAL CUSTODY SERVICE</strong><br>"
|
||
+ "<strong>R-143 / UNDELIVERABLE MATERIAL</strong><br><strong>19 SEPTEMBER 1987</strong>")
|
||
+ P("Window Six and contents entered into temporary agency custody, pending collection.")
|
||
+ P("Consignment must not be:")
|
||
+ UL(["opened;", "destroyed;", "redirected; or", "returned to sender."])
|
||
+ P("Status remains <strong>PENDING COLLECTION</strong> until receipted by a serving officer.")
|
||
+ P("<em>Pages attached: 14, 22.</em>")
|
||
},
|
||
|
||
{ name: "4 · The opened letter", content:
|
||
P("<strong>CIVIL CONTINUITY REGISTRY</strong><br><strong>NOTICE OF REDIRECTION</strong>")
|
||
+ P("Dear Ms Lorna Vale,")
|
||
+ P("The Registry regrets that the name and civic person presently delivered to:")
|
||
+ P("<strong>14 MERE ROAD, COVENTRY</strong>")
|
||
+ P("has previously and continuously been delivered to:")
|
||
+ P("<strong>14 MERE ROAD, COVENTRY</strong>")
|
||
+ P("This duplication cannot continue after the Last Collection.")
|
||
+ P("Unless an authorised custodian accepts the disputed entry, one delivery will be "
|
||
+ "cancelled without further notice.")
|
||
+ P("<em>Please do not destroy this notice. This notice contains material belonging to "
|
||
+ "the addressee.</em>")
|
||
},
|
||
|
||
{ name: "5 · Window Six procedure card", content:
|
||
H(2, "WINDOW SIX")
|
||
+ OL(["State <strong>COLLECTION</strong> or <strong>DELIVERY</strong>.",
|
||
"Give name, department and case reference.",
|
||
"Remain on the public side of the counter.",
|
||
"Do not open or read mail not addressed to you.",
|
||
"Every consignment removed requires a receipt.",
|
||
"The master copy receives the crown date stamp."])
|
||
+ P("<strong>UNRECEIPTED MATERIAL WILL BE CANCELLED.</strong>")
|
||
},
|
||
|
||
{ name: "6 · R-143-A receipt", content:
|
||
P("<strong>DEPARTMENTAL CUSTODY SERVICE</strong><br>"
|
||
+ "<strong>R-143-A / PENDING INTER-JURISDICTIONAL REGISTER</strong>")
|
||
+ P("The undersigned accept temporary custody of the disputed folio and the living civic "
|
||
+ "identities recorded within it, without determining final ownership, origin or "
|
||
+ "jurisdiction.")
|
||
+ TABLE(["Requirement", "Name / finding", "Signature"], [
|
||
["Serving officer accepting responsibility", "", ""],
|
||
["Containment established", "", ""],
|
||
["Terms agreed with transferring authority", "", ""],
|
||
["Living status medically certified", "", ""],
|
||
["Window Six repaired and current date applied", "", ""],
|
||
["Crown master stamp recovered", "", ""]
|
||
])
|
||
+ P("<strong>Case status:</strong> pending adjudication<br>"
|
||
+ "<strong>Collection date:</strong> ______________<br>"
|
||
+ "<strong>Crown stamp:</strong> ______________")
|
||
},
|
||
|
||
{ name: "7 · Debrief slip", content:
|
||
P("Complete one sentence before speaking to the debriefing officer.")
|
||
+ UL(["The case stopped matching our orders when ____________________.",
|
||
"The person or thing I protected was ____________________.",
|
||
"The fact I would remove from the official report is ____________________.",
|
||
"The name we knowingly left off the form was ____________________."])
|
||
}
|
||
];
|
||
|
||
/* ---------------------------------------------------------------- */
|
||
/* The team, the cast, the case file and the credential */
|
||
/* ---------------------------------------------------------------- */
|
||
|
||
/**
|
||
* The six pregens. Built through the same buildActor path the shipped pregens use, so
|
||
* they arrive with skills, kit, hit points and a token exactly like any other agent.
|
||
* Ratings are fixed rather than rolled so every table gets the same starter.
|
||
*/
|
||
export const STARTER_TEAM = [
|
||
{ key: "pw_nia", name: "Nia Mercer", role: "lead", rank: "Field Officer",
|
||
chosenStyle: "reflex", species: "baseline", age: { chronological: 36, physiological: 36 },
|
||
ch: { str: 11, siz: 12, con: 13, int: 14, pow: 13, dex: 15, cha: 13, edu: 12 },
|
||
talents: ["first_through", "read_room"],
|
||
spotlight: "Keep the operation coherent, lead the case phases and sign for the final decision.",
|
||
complication: "Nia's cover identity says she worked a Christmas shift at this office in 1987. She was born in 1989.",
|
||
note: "Give Nia the highest Tradecraft on the team. Being in charge means deciding who acts, not making every roll." },
|
||
|
||
{ key: "pw_callum", name: "Callum Pike", role: "heavy", rank: "Field Officer",
|
||
chosenStyle: "reflex", species: "baseline", age: { chronological: 34, physiological: 34 },
|
||
ch: { str: 16, siz: 15, con: 15, int: 11, pow: 11, dex: 13, cha: 10, edu: 10 },
|
||
talents: ["hard_landing", "first_through"],
|
||
spotlight: "Hold the corridor, protect the folio carrier and restrain rather than destroy.",
|
||
complication: "The Cancellation Man wears Callum's handwriting on several of its envelopes.",
|
||
note: "Callum starts with the riot shield SLUNG. Raising it is a real decision: torso and arms improve, and his own shooting takes -20%." },
|
||
|
||
{ key: "pw_amira", name: "Amira Bell", role: "settlements", rank: "Field Officer",
|
||
chosenStyle: "deliberate", species: "baseline", age: { chronological: 41, physiological: 41 },
|
||
ch: { str: 10, siz: 11, con: 12, int: 15, pow: 14, dex: 11, cha: 16, edu: 15 },
|
||
talents: ["read_room", "debriefer"],
|
||
spotlight: "Understand what the clerks need and make an arrangement reality will accept.",
|
||
complication: "Amira knows the agency can lawfully abandon everyone on the other side. Her orders strongly imply that it should.",
|
||
note: "Amira runs READ, SIGNAL and OFFER. The correct offer is a receipt, not a bribe." },
|
||
|
||
{ key: "pw_elin", name: "Dr Elin Shaw", trade: "doctor", rank: "Probationary",
|
||
chosenStyle: "deliberate", species: "baseline", age: { chronological: 31, physiological: 31 },
|
||
ch: { str: 10, siz: 11, con: 11, int: 16, pow: 12, dex: 12, cha: 13, edu: 17 },
|
||
talents: ["triage", "unblinking"],
|
||
spotlight: "Establish that both Lorna Vales are living people, treat injuries and certify the disputed names.",
|
||
complication: "One delivered letter is a correctly formatted notice of Elin's death, dated nine years from now.",
|
||
note: "A proper doctor and a new Custodian. Her Medicine is excellent and her induction — Tradecraft, Anomaly Lore, Dodge, Pistol — is not." },
|
||
|
||
{ key: "pw_owen", name: "Owen Dey", trade: "engineer", rank: "Probationary",
|
||
chosenStyle: "reflex", species: "baseline", age: { chronological: 29, physiological: 29 },
|
||
ch: { str: 12, siz: 12, con: 12, int: 17, pow: 11, dex: 14, cha: 10, edu: 15 },
|
||
talents: ["hard_landing", "requisition"],
|
||
spotlight: "Diagnose Window Six, repair its franking mechanism and keep the crossing stable.",
|
||
complication: "The mechanism has been repaired before, using Owen's preferred soldering pattern.",
|
||
note: "Diagnosing the franker early gives +20% on the repair that closes the case." },
|
||
|
||
{ key: "pw_sennen", name: "Sennen Roake", trade: "criminal", rank: "Probationary",
|
||
chosenStyle: "reflex", species: "baseline", age: { chronological: 27, physiological: 27 },
|
||
ch: { str: 11, siz: 10, con: 12, int: 13, pow: 11, dex: 17, cha: 14, edu: 9 },
|
||
talents: ["cover_work", "clean_scene"],
|
||
spotlight: "Enter the cage without breaking its rules and recover the master date stamp.",
|
||
complication: "The mundane police database recognises Sennen's fingerprints under the name of a postal worker who died in the 1987 fire.",
|
||
note: "The cage is the tutorial for doing a criminal thing procedurally: the drawer opens from the public side, and that matters." }
|
||
];
|
||
|
||
/** The cast, as statblocks a GM can drag onto a scene. */
|
||
export const STARTER_CAST = [
|
||
{ key: "pw_evelyn", name: "Evelyn Vale", role: "FOLKLORE. Night supervisor, Civil Continuity Registry",
|
||
chosenStyle: "deliberate", naturalArmour: 0, species: "baseline",
|
||
ch: { str: 10, siz: 11, con: 12, int: 15, pow: 16, dex: 11, cha: 15, edu: 16 },
|
||
skills: [{ fam: "insight", spec: "", val: 75 }, { fam: "status", spec: "", val: 70 },
|
||
{ fam: "bargain", spec: "", val: 65 }, { fam: "knowledge", spec: "", val: 70 },
|
||
{ fam: "listen", spec: "", val: 60 }, { fam: "persuade", spec: "", val: 55 }],
|
||
weapons: ["punch"],
|
||
tactics: "Formal, tired and exact. She wants a valid receipt more than she wants rescue, and she has wanted it for thirty-nine years. She does not lie; she answers only the question procedurally put to her, which is not the same thing and the players will notice. POWER: THE COUNTER. Anything said from behind her counter by somebody who does not work there is treated as unsaid — no roll, no argument. Agents who work this out can use it deliberately." },
|
||
|
||
{ key: "pw_lorna_m", name: "Lorna Vale (mundane)", role: "FOLKLORE. Council payroll officer, forty-two",
|
||
chosenStyle: "reflex", naturalArmour: 0, species: "baseline",
|
||
ch: { str: 10, siz: 11, con: 11, int: 12, pow: 11, dex: 11, cha: 12, edu: 12 },
|
||
skills: [{ fam: "knowledge", spec: "", val: 45 }, { fam: "insight", spec: "", val: 40 },
|
||
{ fam: "status", spec: "", val: 35 }, { fam: "listen", spec: "", val: 40 }],
|
||
weapons: ["punch"],
|
||
tactics: "Angry about being treated as evidence. Wants her life AND the truth, and will not accept being handed either one instead of the other. She lies when she says she has no curiosity about the other Lorna's daughter." },
|
||
|
||
{ key: "pw_lorna_r", name: "Lorna Vale (Registry)", role: "FOLKLORE. Registry clerk, thirty-nine years on one shift",
|
||
chosenStyle: "reflex", naturalArmour: 0, species: "baseline",
|
||
ch: { str: 10, siz: 11, con: 11, int: 12, pow: 13, dex: 11, cha: 12, edu: 13 },
|
||
skills: [{ fam: "knowledge", spec: "", val: 55 }, { fam: "insight", spec: "", val: 50 },
|
||
{ fam: "listen", spec: "", val: 45 }, { fam: "research", spec: "", val: 50 }],
|
||
weapons: ["punch"],
|
||
tactics: "Wants the shift to end without taking her existence with it. Remembers a daughter born in the Near world. She lies when she says she has never sent a letter to the mundane world before. Asked which Lorna is real, either will answer: \"Both, until you file otherwise.\"" },
|
||
|
||
{ key: "pw_gareth", name: "Gareth Moss", role: "FOLKLORE. Demolition site manager",
|
||
chosenStyle: "reflex", naturalArmour: 0, species: "baseline",
|
||
ch: { str: 13, siz: 13, con: 13, int: 12, pow: 10, dex: 11, cha: 12, edu: 11 },
|
||
skills: [{ fam: "repair", spec: "mechanical", val: 55 }, { fam: "status", spec: "", val: 40 },
|
||
{ fam: "spot", spec: "", val: 40 }, { fam: "bargain", spec: "", val: 45 }],
|
||
weapons: ["punch"],
|
||
tactics: "Practical, not obstructive. Wants a signed instruction and somebody else liable for the delay. Treat him as a professional and he gives up everything he knows without a roll. He lies exactly once: when he says he never looked through Window Six." },
|
||
|
||
{ key: "pw_cancellation", name: "The Cancellation Man", role: "HORROR. A process with a body",
|
||
chosenStyle: "reflex", naturalArmour: 4, species: "baseline",
|
||
ch: { str: 16, siz: 14, con: 16, int: 8, pow: 17, dex: 14, cha: 3, edu: 5 },
|
||
skills: [{ fam: "brawl", spec: "", val: 65 }, { fam: "dodge", spec: "", val: 45 },
|
||
{ fam: "stealth", spec: "", val: 60 }, { fam: "spot", spec: "", val: 70 },
|
||
{ fam: "athletics", spec: "", val: 55 }],
|
||
weapons: ["grasp"],
|
||
tactics: "It unfolds from returned envelopes, red twine and black cancellation ink, and every address on it belongs to somebody in the room. It wants the DISPUTED FOLIO, not casualties: it moves to the carrier and ignores anyone who does not obstruct it. Rename its attack the CANCELLATION STAMP. POWER: UNRECEIPTED. Anything it takes that has no receipt attached is gone — not destroyed, never delivered. It withdraws at 2 hit points, when restrained, or the moment it is handed a properly bagged and receipted folio. Killing it is temporary; it reforms at the next clock advance. That is the lesson." }
|
||
];
|
||
|
||
/** The credential, as a real item rather than a paragraph in the brief. */
|
||
export const STARTER_AUTHORITY = {
|
||
key: "pw_price",
|
||
name: "Imogen Price — Senior Asbestos Surveyor",
|
||
holderName: "Imogen Price",
|
||
holderRole: "Senior Asbestos Surveyor",
|
||
issuer: "Halcyon Environmental Compliance Ltd",
|
||
scope: "routine",
|
||
scopeNote: "Routine site inspection at a controlled demolition site.",
|
||
trust: 2,
|
||
redFlags: [
|
||
"Price signs in at every controlled site.",
|
||
"Price never conducts an inspection alone.",
|
||
"Price photographs every opened door."
|
||
],
|
||
description:
|
||
"<p>Inside its scope this works and costs 1 Trust: a surveyor walking a condemned "
|
||
+ "building is not intrusion, it is Tuesday.</p>"
|
||
+ "<p>Entering the sealed records cage or altering the demolition schedule is <strong>one "
|
||
+ "tier beyond</strong> — roll, at −20% for each red flag broken.</p>"
|
||
+ "<p><strong>A fumble burns it:</strong> the real Imogen Price telephones the site manager.</p>"
|
||
};
|
||
|
||
/**
|
||
* The groups the team can talk to, as DATA rather than as something the pack builder
|
||
* invents. `resolveContact` looks up a group ITEM on the case file and returns null
|
||
* without one — a standing record alone leaves READ, SIGNAL and OFFER silently switched
|
||
* off, which is how this scenario first shipped, with the contact scene as its
|
||
* centrepiece. The pairing is asserted in check-behaviour against this file.
|
||
*/
|
||
export const STARTER_GROUPS = [{
|
||
groupId: "returned_clerks",
|
||
name: "The Returned Clerks",
|
||
population: 6,
|
||
npcTemplateId: "pw_evelyn",
|
||
description:
|
||
"<p>Six clerks in 1987 uniforms under green lamps, none of them aged. They have been "
|
||
+ "on the same shift for thirty-nine years, and they are not invaders — they are "
|
||
+ "waiting to be relieved.</p>",
|
||
taboos: [
|
||
{ id: "sealed_mail",
|
||
text: "Never open, read aloud or name the addressee of mail that is not yours. A sealed identity belongs to its recipient.",
|
||
penaltyIfViolated: -30 },
|
||
{ id: "the_counter",
|
||
text: "The public side of the counter is the public side. Speaking from behind it is not rudeness — it is not speaking at all.",
|
||
penaltyIfViolated: -20 }
|
||
],
|
||
desires: [
|
||
{ id: "relief",
|
||
text: "To be relieved. A recognised authority to receipt the disputed folio so the shift can close.",
|
||
offerBonusStep: "easy" }
|
||
],
|
||
correctOfferForm:
|
||
"A signed receipt taking the disputed folio into recognised custody, passed through "
|
||
+ "Window Six from the public side of the counter, quoting case R-143.",
|
||
rewardsByStanding: {
|
||
"1": [{ id: "pw1_explain",
|
||
text: "Evelyn explains that the register needs custody and certification, and what that means.",
|
||
effect: { type: "reveal", note: "The folio needs a custodian, a medical certification that the duplicates are living persons, and a current date stamp." } }],
|
||
"2": [{ id: "pw2_folio",
|
||
text: "Evelyn explains the clean closure and will release the folio once the six requirements are met.",
|
||
effect: { type: "reveal", note: "R-143-A: a pending inter-jurisdictional register. Six signatures, one per agent." } },
|
||
{ id: "pw2_stamp",
|
||
text: "She says which drawer holds the crown master stamp, and that it opens from the public side.",
|
||
effect: { type: "skillBonus", skillFamilyId: "sleight_of_hand", value: 20, phases: [3] } }],
|
||
"3": [{ id: "pw3_help",
|
||
text: "The night shift helps. Two clerks hold the folio steady while the engineer works.",
|
||
effect: { type: "waiveCost", phase: 3 } }]
|
||
}
|
||
}];
|
||
|
||
/** The case file, already set to the scenario's opening state. */
|
||
export const STARTER_CASE = {
|
||
key: "pw_case",
|
||
name: "PW-01 · Rookery Heath",
|
||
containment: 8, resources: 8, clearance: 6,
|
||
destination: "Rookery Heath Delivery Office, Coventry",
|
||
notes:
|
||
"<p><strong>Last Collection clock 0 / 4.</strong> Advance it on a fumbled phase, twenty "
|
||
+ "minutes of argument without action, a loud weapon fired in the mundane building, the "
|
||
+ "credential burned, or the clerks' taboo violated after it has been learned.</p>"
|
||
+ "<p>Not for careful investigation. Never for careful investigation.</p>",
|
||
standings: ["returned_clerks"],
|
||
legs: [
|
||
{ label: "Approach — the demolition cordon", kindId: "approach", difficulty: "average", mod: 0 },
|
||
{ label: "Investigation — the dead-letter cage", kindId: "cordon", difficulty: "average", mod: -5 },
|
||
{ label: "Containment — the night shift", kindId: "containment", difficulty: "difficult", mod: 0 },
|
||
{ label: "Extraction — closing the register", kindId: "extraction", difficulty: "average", mod: -15 }
|
||
]
|
||
};
|