diff --git a/lore/vocabulary.yaml b/lore/vocabulary.yaml index 1f992e9..b638b18 100644 --- a/lore/vocabulary.yaml +++ b/lore/vocabulary.yaml @@ -141,7 +141,7 @@ locations: - Bridgefoot Square inn: - - The Broken Compass + - The Willowing Pig - The Crooked Lantern - The Mended Drum - The Dusty Heel @@ -151,22 +151,21 @@ locations: - The Ember & Stone village: - - Cinder Ford - - Greymoss Crossing - - Tallow's End - - Ashwick - - Breckfen - - Moldvale - - Harrow's Gate - - Dunford - - Saltmere - - Edgemarsh + - Mardsville + - Barristown + - Veldra's Maw + - Mardonar City + - Wildwood Forest road: - - the Pilgrim's Switchback - - the Ridge Road - - the Goat Track - - the Sheercliff Path - - the High Drove - - the Ironway - - the Mossback Trail + - the King's Road + - the Vampires Trail + - 3 Heads Crossing + - Gloaming Pass + + forest: + - Wildwood Forest + - The Whispering Woods + - The Gloaming Thicket + - The Shadowgrove + - The Eldertree Vale diff --git a/specs/mawfang-pursuit.yaml b/specs/mawfang-pursuit.yaml index 5074cff..fe07239 100644 --- a/specs/mawfang-pursuit.yaml +++ b/specs/mawfang-pursuit.yaml @@ -1,5 +1,10 @@ encounterId: "mawfang-pursuit-001" title: "Unwelcome Guests" + +# Group encounters (Feature D) — solo scene, explicit for documentation. +# Default would be 1; explicit value documents the author's intent. +minPlayers: 2 + tone: "tense" setting: diff --git a/specs/old-friend-bad-timing.yaml b/specs/old-friend-bad-timing.yaml index 298b859..a777399 100644 --- a/specs/old-friend-bad-timing.yaml +++ b/specs/old-friend-bad-timing.yaml @@ -25,6 +25,10 @@ encounterId: "old-friend-bad-timing" title: "Old Friend, Bad Timing" +# Group encounters (Feature D) — solo scene, explicit for documentation. +# Default would be 1; explicit value documents the author's intent. +minPlayers: 3 + setting: location: "Lonespear Tavern — Barristown's harbor quarter" mood: > diff --git a/specs/the-clock-maker.yaml b/specs/the-clock-maker.yaml index b8ab24e..42febd7 100644 --- a/specs/the-clock-maker.yaml +++ b/specs/the-clock-maker.yaml @@ -18,6 +18,10 @@ title: "The Clock Maker" # tone — LLM READS (narration flavor) + BOT ENFORCES (drop-notice string). tone: "grim" +# Group encounters (Feature D) — solo scene, explicit for documentation. +# Default would be 1; explicit value documents the author's intent. +minPlayers: 1 + # setting — LLM READS. Three strings grounding the scene. setting: # location — where the scene happens. One line. @@ -147,6 +151,38 @@ skillChecks: it alone — the party must find the right action first; this is the resolution roll once they have. + # The returning customer's 15-minute deadline (see Hale / persona) is a + # narrative urgency cue by default. If the LLM wants it as a real + # engine-driven timer (Feature A), it may emit skill_check_emit with + # durationSeconds: 900 against calm_returning_customer — the timeout + # path then becomes bot-enforced auto-fail, not a narration-only beat. + # Spec-author opt-in; not required. + +# Passive skill reveals (Feature B) — bot-applied at encounter start, +# group-visible, attributed to the qualifying player. threshold is a passive +# DC (integer); revealText is outcome prose only — no dice results (the bot +# owns dice). Thresholds gate roughly half the party, consistent with the PRD +# Feature B tone for the clock-maker's "something is wrong" entry point. +passiveReveals: + - skill: "Perception" + threshold: 13 + revealText: > + Notices the clocks in the shop are not keeping the same time. Three of + them are five minutes apart, and a fourth has stopped — but its second + hand is still moving. + + - skill: "Insight" + threshold: 14 + revealText: > + Reads something rehearsed in the clock-maker's warmth. He is performing + friendliness the way a stage magician performs ease with the deck. + + - skill: "Investigation" + threshold: 12 + revealText: > + Spots a thin line of dust on the shelf where a clock once sat. The empty + place is the size of a pocket-watch. The shop keeps no receipts. + # randomizable — BOT ENFORCES. Fields that vary per run. Name draws bind to # npc.nameKey (fresh names each run); cursed_ware seeds the specific ware. # source: vocabulary + category route name draws to the vocabulary namespace. @@ -180,6 +216,9 @@ tools: - goal_register # LLM emits to add an off-rails goal mid-encounter. - foundry_lookup # LLM emits to surface a linked player's live Foundry stats. - foundry_reward # LLM emits to award XP/items via the Foundry relay. + # NOTE: skill_check_group_emit (Feature C) is intentionally absent. The + # clock-maker is a solo scene (minPlayers: 1); there is no group to check + # against. The timed-check opt-in on break_curse_note uses the solo emit. # dmNotes — LLM READS. Author framing for the DM's intent (stakes, feel, # escalation). Not rules the LLM mechanically follows. @@ -196,5 +235,21 @@ dmNotes: > return a lethal clock; use them to break the dithering and raise the stakes. Their fifteen-minute deadline is urgency to narrate, not a real-time timer. + NEW CAPABILITIES (group-encounters feature set, 2026-06-20): + The opening beat of the clock-maker scene is a "something is wrong" + pre-roll moment; lean on the three passiveReveals above (Perception, + Insight, Investigation) to surface clues in the opening lines without + waiting for the LLM-emitted checks. Bot applies them automatically at + encounter start, group-visible, attributed to the qualifying player — + the LLM should weave their revealText into the scene as it unfolds, + not announce them as a list. + + For the returning customer's deadline: the original framing is "urgency + to narrate, not a real-time timer," and that remains the default. The + LLM may, at its discretion, opt into the new timed-skill-check path + (durationSeconds: 900 on calm_returning_customer) if the table wants + the deadline to be engine-enforced rather than narrative-pace. The + spec does not require it; it gives the LLM permission. + # xpReward — BOT ENFORCES. Flat XP to all participants on resolution. xpReward: 50 \ No newline at end of file