Commit Graph
9 Commits
Author SHA1 Message Date
slaguru666andClaude Opus 5 c595bf5a33 Tidy the compendium, and release 1.0.0
Three things were untidy, and one of them was a stale declaration of exactly the
kind this project keeps producing.

  - packFolders named ten packs of seventeen. Talents, the Quiet Arts, the
    primer, the rules and all three scenarios were sitting loose in the sidebar
    because the declaration was written when there were ten packs and never
    revisited. It now covers all seventeen in four subfolders under one parent
    — Scenarios, Characters, Equipment, Rules & reference — and the build
    asserts the folder list and the pack list are the same set, so it cannot
    drift again.

  - Labels were off-pattern in three places ("Transport", and the two prologues
    reading "Custodians: Prologue — X"). Everything is "The Custodians · X".

  - Thirty-six pregens in one flat list. The pack now carries three compendium
    folders — Duty roster (16), Before the department (16), Original pregens
    (4) — and every actor is filed. Nothing unfiled.

Worth knowing, and verified against Foundry's own source rather than guessed:
packFolders only assigns a pack that has NO existing entry in the world's
core.compendiumConfiguration, and the routine only runs when the set of active
packs changes. So a world that already has this system installed keeps whatever
layout it had; the new one applies to a new world. The local world was brought
into line by writing the configuration directly.

Version 1.0.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 18:29:44 +01:00
slaguru666andClaude Opus 5 d063b3c016 Add LAST ADMISSION, a two-hour haunted-house prologue
OPEN DAY was too complex for a first night: a fixed timetable the GM narrates
minute by minute, three things that must be left unresolved, ten serial approach
scenes, and no combat. This is the replacement opener — same premise engine,
a third of the moving parts, and something to hit.

A cheap scare attraction on the last night of its six-week run, in a real empty
hall, with paying public still inside. Three of the ghosts on the poster were
invented in an afternoon by a marketing agency, printed on the tickets and the
wall panel and the call sheets, and performed forty times a night to twelve
thousand people who agreed to believe them for eighteen pounds each. They are
in the building now. They are not ghosts, they are entries, and they have
exactly as much inside them as was written down — a page each, which they do,
and nothing else. That makes them simple to run and simple to stop: hurt them,
or break the script. Both work; the script is faster and cheaper, and a table
that finds it should feel clever.

The fourth name on the panel was copied off a memorial in the parish church
because the layout needed four. Edith Crane was real, died in a real fire here
in 1963, and nobody wrote her a page because nobody had to. She never attacks,
cannot be hurt, and will not speak until she is asked her name. She wants her
name off a poster. The night ends on whether it comes down tonight or on Monday
— and Monday is two performances away.

Written for the second intake specifically, on their civilian sheets, with each
one's job as their way in: Renshaw is IN the show and knows the running order,
Ferriby wired it, Sharrock built the sets, Pollard is on the door, Braithwaite
and Ashcroft paid to get in. Each shortcuts a different part of the middle and
none of them is required.

Art: eight plates commissioned, seven kept. The wall panel plate was cut after
two attempts both produced three frames instead of four — a picture that
contradicts a count the scenario turns on is worse than no picture, so the panel
is a handout the GM shows rather than describes. The freed green-room plate went
onto the Act One page, where the call sheet is.

OPEN DAY stays in the repo as the longer, quieter alternative; both scenarios
say plainly which is which and that nothing depends on the choice.

Verified in Foundry: the adventure imports, six cast, seven GM pages, five
handouts, plates load.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 17:50:52 +01:00
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
slaguru666andClaude Opus 5 7f8355f0d0 Add the player primer and cheat sheet, and brand every journal
Ten pages a player reads before session one, in their own compendium at OBSERVER
ownership: nine of setting, one cheat sheet.

The draft called the organisation "the Bureau"; everything else in the game calls it
the department or the agency, so that is what it is called. Thin areas filled rather
than padded: the seven character principles as a list, the real Coherence band table
instead of a paragraph describing one, and "what continuity is not" pulled out of the
middle of a page because it is the most important sentence for a new player.

The cheat sheet's numbers are computed from rules.mjs and lang/en.json at build time.
A hand-typed one would have been the sixth time this project shipped a number that
disagreed with the code, and the one the players were holding.

R-250: the design tokens were never on :root. Journals rendered as default parchment,
and four things were wrong in sequence — v14's hook is renderJournalEntrySheet; its
`element` is the node, so `[0]` returns the first CHILD and put the class on a header
button; there is no .journal-page-content in v14; and then the real one: with the
selector matching, font-size, line-height and padding all applied while every colour
did not, because the palette is declared on .ringbrp-sheet/.ringbrp-chat/.ringbrp-window
and never on :root. A journal inherited no tokens, so every var() silently became
nothing. A rule that HALF applies is not a specificity problem — I spent three attempts
treating it as one, including a version bump on a cache theory that was wrong.

Branded: primer, rulebook, starter GM text and handouts. Scoped by flag, so other
modules' journals are untouched. Version 0.9.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 10:19:41 +01:00
slaguru666andClaude Opus 5 d9bce12c27 Replace the starter with BLACK PLATFORM, and make the dialogs ask questions
The starter is now an action case: a train running through a station whose rails were
lifted in 1976, two engineers aboard, eleven minutes until it returns. Descend, take the
platform, board, rescue, fight forward along a moving train, stop it.

Simpler than PAPER WINDOW on purpose — one clue scene, no social subsystem — which also
means it cannot reproduce R-248, because there are no groups or standings to leave
unwired.

Every agent can fight, deliberately: floors of firearm 42%, melee 40%, Brawl 40%,
Dodge 40% so nobody is a spectator on their first evening. Floors only RAISE, so a
posting already better stays better — Callum's shield lands at 53, not the floor's 45.

The builder now handles combat floors, extra weapons issued for a case, and a scenario
with NO Borrowed Authority at all; the last was assumed to exist and would have thrown.
Two new tests: every floor names a real skill, and every agent clears the fighting
floors the handout promises.

Sixty-two dialog strings reworded. They were naming mechanics at people: "Situational
modifier %" is now "Anything else helping or hurting? (%)", "Target cover" is "Is the
target behind anything?", "Difficult (÷2)" is "Difficult — half your skill". Labels ask
the question; hints say what it does to the number; notifications say what to do next
rather than what went wrong.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 00:08:07 +01:00
slaguru666andClaude Opus 5 49c2e9fc7b Add PAPER WINDOW as the starter scenario Adventure
The six-player introductory case ships as a Foundry Adventure in a new `starter` pack,
because a scenario that arrives as nine loose documents a GM has to assemble is a
scenario that gets read rather than run.

One import brings in: the GM scenario in twelve pages; the seven player handouts as
their own journal at OBSERVER ownership so they can be revealed one at a time without
the GM editing permissions first, while the GM text stays hidden; the six pregens built
through the same buildActor path the shipped pregens use, so they arrive with full skill
lists, kit, hit points and linked tokens; the cast, including the Cancellation Man; the
Borrowed Authority as a real credential with scope, Trust 2 and its three red flags; and
the case file already at Containment 8 / Resources 8 / Clearance 6 with its four phases
loaded at the stated difficulties and modifiers.

Pregen ratings are fixed at mid-band rather than rolled — a pregen that varies between
installs is not a pregen. The expansion from posting or trade into a sheet reuses the
register and the induction rule rather than restating them, so the starter cannot drift
from the generator.

Verified by importing it: no errors, the roster resolves through stable keys, handouts
arrive player-visible, Nia has the team's highest Tradecraft as the text requires,
Callum's shield is slung so raising it is still a decision, the three probationers show
the trade/induction split, and phase one runs out of the box.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:25:10 +01:00
slaguru666andClaude Opus 5 2e10ecced9 Fire modes, fitted sights and lamps, and a tab rail
Selectable fire, with the modifiers on the choice
  Every weapon has carried a fireMode since the packs were first built and nothing
  read it: a musket could rip a ten-round burst and "rapid" bought a weapon nothing.
  FIRE_MODE now gates the burst rules and carries its own attack modifier — slow +10%
  and then you work for the next one, fast a second shot at -20% to both, rapid
  bursts, beam +5% and it can be held on the target for damage instead of hits. The
  gate lives in burstAttack too, so no macro can route round it. `fast` was on five
  catalogue weapons and was not in the system's list of modes at all, so re-saving one
  of them silently blanked it; the list is derived from the rule now.

  burstAttack shipped complete and was reachable from nothing. It is the resolution
  path the selector chooses, and takes the dialog's whole stack rather than charging
  the player twice for the same burst.

Sights and lamps that apply themselves
  A sight is graded by range band, so a telescopic sight is a -10% liability inside
  ten metres and worth +20% at extreme, and it only counts if it fits. The band is
  already known when the modifier is wanted, so nothing is selected and nothing is
  forgotten. The dark costs something now; a carried lamp buys it back to dim, never
  to daylight, and the card says it shows them exactly where you are. A migration
  fits gear that predates the fields, matched on the stamped key rather than by name.

The damage card
  The last card still wearing Foundry's stock dice styling — it posted a bare Roll and
  let the core template dress it. It renders through the module's own card now, with
  the Roll still on the message so dice stay inspectable.

A rail instead of a strip
  Eight tabs across an 820px sheet compressed to 11px type. They run down the side
  now, one line each, with counts as badges; the sheet is 152px wider to pay for it.

Also fixed: any weapon with a Coherence cost could not be attacked with AT ALL — the
handler re-read the weapon after an await, when currentTarget is already null, and the
attack died on a TypeError with nothing shown. And the duplicate-rule guard failed an
honest table because FIRE_MODE and speedBands share two key names; it wants a majority
now, and prints partial overlaps rather than swallowing them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 08:56:04 +01:00
slaguru666andClaude Opus 5 1734612c06 v0.7.0 — vehicles, Borrowed Authority, and a door for the case generator
Since 0.6.1:

- VEHICLES as their own Item type: crew, seats, cargo, hull, armour, range,
  terrain and the skill that works them, with speed as a band. 14 of them, from
  the pool car and the Custodian van to a sealed crawler and the carriage that is
  already parked outside wherever you were going to go.
- STORES roughly doubled to 118 gear items across four eras — standing issue and
  paperwork, transport stores, and the forward stores Registry will not hand a
  probationary officer. Catalogue now 175 items, 231 icons.
- Agents leave creation properly equipped: standing issue, the posting's kit,
  what seniority adds, and one personal effect that is theirs and not the
  department's.
- All 25 postings now describe themselves in the creation dialog.
- BORROWED AUTHORITY, the access subsystem. No hacking skill and nothing to break
  into: access is a named credential with a scope, a Trust that erodes, and red
  flags describing how its real owner behaves. Inside scope there is no roll. Two
  tiers beyond is impossible at any skill. Coherence widens a record, and pushing
  one past what its Trust will carry merges your file with theirs.
- Defences graded by level, and damage now rolls at the level a blow landed at.
- Dodge's DEX x 2 base is finally evaluated; it read 0% for most postings.
- Brawl is a fallback rather than a peer of the weapon in hand.
- check-lang guard: one key that was both a value and a branch silently
  un-localised the entire system.
- The case generator is reachable from the Actor Directory, and no longer puts
  every character in the world on a new case.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 20:23:52 +01:00
slaguru666andClaude Opus 5 d0144f744e The Custodians v0.6.1 — full system
A Foundry VTT game system: Basic Roleplaying d100 in a drab British agency that
deals with crossings, where reality keeps a record of what belongs where and can be
made to get it wrong.

Contents:
- rules.mjs as the single authority for every rule formula, with 40 rules and 132
  spot-checked values. Nothing may restate a formula it defines.
- 25 postings, each with a key characteristic, trained skills, talents and its own
  kit; a 175-item catalogue across four eras; 231 generated icons.
- Reaction Lanes initiative, re-rolled every round including the first.
- Coherence, and the Quiet Arts, which only ever arrive from a crossing gone wrong.
- Graded defences: only a critical stops a critical.
- Borrowed Authority — access as a record rather than a hacking roll.
- A case generator, and a rules journal generated from rules.mjs so the book cannot
  drift from the code.

Built compendia are committed so a remote Foundry needs only the files.
node_modules is not; `npm install` restores it for rebuilding content.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:09:07 +01:00