From 075be5c1dee3295e09127e15c230525eedba01f6 Mon Sep 17 00:00:00 2001 From: slaguru666 Date: Wed, 5 Aug 2026 16:41:10 +0100 Subject: [PATCH] Town and Forest: two new kernels, not just two new packs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Barrow and Castle share a kernel — a dead claimant whose appetite outlived them. A market or a river has no corpse in it, so the other two families needed the kernel to generalise, and it does: something wanted a thing, and something was done to keep it that way. Only who "something" is changes. TOWN, on village geometry. The appetite belongs to the place and the claimants are offices — a Corporation, a Watch Committee, a Guild of Mercers. It wants to be prosperous, respectable, safe or necessary, and it priced people out, chartered them away or struck them from the rolls to stay that way. Motifs: ledger, appearances, vigilance, thoroughfare. FOREST, on forest geometry. The appetite belongs to the wood, and the claimants are its own names for itself. It wants to be entered, fed, spread or left uncounted, and it took people, grew through them, or let them wander. Motifs: paths, tithe, reclaiming, trackless. Settlements also needed their own naming rule. A barrow is named for its occupant; a town is not — it has a name and the claimant merely runs it. Packs declare placeNameStyle, so "The Town of Watch Committee" is now Cold Harrow, run by the Watch Committee. Three of fifteen requested themes are done. The remaining twelve are the same job repeated rather than a design question, since all three kernels now exist. Co-Authored-By: Claude Opus 5 --- core/content/barrow.json | 3 +- core/content/castle.json | 3 +- core/content/forest.json | 1176 ++++++++++++++++ core/content/index.json | 12 + core/content/town.json | 1190 +++++++++++++++++ core/skeleton.mjs | 8 +- foundry-module/module.json | 2 +- .../module/core/content/barrow.json | 27 +- .../module/core/content/castle.json | 3 +- .../module/core/content/forest.json | 1176 ++++++++++++++++ foundry-module/module/core/content/index.json | 12 + foundry-module/module/core/content/town.json | 1190 +++++++++++++++++ foundry-module/module/core/skeleton.mjs | 8 +- 13 files changed, 4793 insertions(+), 17 deletions(-) create mode 100644 core/content/forest.json create mode 100644 core/content/town.json create mode 100644 foundry-module/module/core/content/forest.json create mode 100644 foundry-module/module/core/content/town.json diff --git a/core/content/barrow.json b/core/content/barrow.json index 5239a0f..ce36ac7 100644 --- a/core/content/barrow.json +++ b/core/content/barrow.json @@ -2154,5 +2154,6 @@ "lingering": "stayed in one place longer than it takes to search it", "disturbed": "struck or moved something that had not moved in centuries" }, - "_globalPoolsNote": "decisions/temptations/features below are FALLBACKS ONLY. Real content is motif-scoped under motifs.." + "_globalPoolsNote": "decisions/temptations/features below are FALLBACKS ONLY. Real content is motif-scoped under motifs..", + "placeNameStyle": "claimant" } \ No newline at end of file diff --git a/core/content/castle.json b/core/content/castle.json index efddf2c..c3281d5 100644 --- a/core/content/castle.json +++ b/core/content/castle.json @@ -1169,5 +1169,6 @@ } ] } - } + }, + "placeNameStyle": "claimant" } \ No newline at end of file diff --git a/core/content/forest.json b/core/content/forest.json new file mode 100644 index 0000000..6c37bbb --- /dev/null +++ b/core/content/forest.json @@ -0,0 +1,1176 @@ +{ + "id": "forest", + "label": "Forest", + "forgeStageType": "forest", + "schema": 1, + "_model": "The wild kernel: the APPETITE belongs to the place itself. A wood wants to be entered, fed, spread, or left uncounted, and the ACCOMMODATION is what it did to whoever was here — took them, grew through them, let them wander. Claimants are the wood's own names for itself.", + "facetProgression": { + "approach": "institution", + "complication": "ritual", + "turn": "demand", + "descent": "wound", + "threshold": "anchor", + "ending": "demand" + }, + "claimants": [ + "Green Man", + "Antlered Thing", + "Lady of Thorns", + "First Tree", + "Wood's Own", + "Charcoal-Burner", + "Hunt That Does Not End" + ], + "appetites": [ + { + "id": "entered", + "want": "to be walked into and never out of", + "lack": "walked out of", + "purpose": "nobody would ever find the far side", + "motif": "paths", + "prize": "lantern", + "conscript": "the travellers", + "asks": "\"Which way did you think you were going?\"", + "appeasement": { + "move": "walk in deliberately, and say aloud that you mean to", + "attribute": "Poise", + "successes": 2, + "why": "someone came in on purpose", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "fed", + "want": "to be given something at the edge", + "lack": "unfed", + "purpose": "nobody would ever pass without paying", + "motif": "tithe", + "prize": "bowl", + "conscript": "the offerings", + "asks": "\"What have you brought me?\"", + "appeasement": { + "move": "leave something of value at a root, without asking anything", + "attribute": "Flair", + "successes": 2, + "why": "the wood has been given something", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "spreading", + "want": "to grow over everything that was ever cleared", + "lack": "held back", + "purpose": "nothing would ever stay cut", + "motif": "reclaiming", + "prize": "axe", + "conscript": "the woodsmen", + "asks": "\"Why do you cut me?\"", + "appeasement": { + "move": "let something of yours be taken and grown over", + "attribute": "Poise", + "successes": 2, + "why": "the wood has taken back a little more", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "uncounted", + "want": "never to be mapped or measured", + "lack": "surveyed", + "purpose": "nobody would ever say how big it is", + "motif": "trackless", + "prize": "chain", + "conscript": "the surveyors", + "asks": "\"Do you know where you are?\"", + "appeasement": { + "move": "admit aloud that you are lost, and mean it", + "attribute": "Wits", + "successes": 2, + "why": "nobody can say where they are", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + } + ], + "accommodations": [ + { + "id": "took", + "text": "took {conscript} one at a time and did not give them back", + "cruelty": 3, + "fits": [ + "entered", + "fed", + "uncounted" + ] + }, + { + "id": "grewthrough", + "text": "grew through {conscript} until there was more wood than not", + "cruelty": 3, + "fits": [ + "spreading", + "fed", + "entered" + ] + }, + { + "id": "wandered", + "text": "let {conscript} wander until they stopped wanting to leave", + "cruelty": 2, + "fits": [ + "entered", + "uncounted", + "spreading" + ] + }, + { + "id": "traded", + "text": "took {conscript} for a season and returned something else", + "cruelty": 2, + "fits": [ + "fed", + "entered", + "uncounted" + ] + }, + { + "id": "edged", + "text": "kept {conscript} at the treeline, facing out, as a warning", + "cruelty": 3, + "fits": [ + "spreading", + "fed", + "uncounted" + ] + }, + { + "id": "rooted", + "text": "let {conscript} put down roots where they stood", + "cruelty": 1, + "fits": [ + "spreading", + "entered", + "fed" + ] + } + ], + "prizes": { + "lantern": { + "label": "the lantern that still shows the way out", + "function": "the only thing here that knows a direction" + }, + "bowl": { + "label": "the bowl the offerings were left in", + "function": "the only place the wood has ever been satisfied" + }, + "axe": { + "label": "the axe that held the treeline for a century", + "function": "the only thing that ever cut and stayed cut" + }, + "chain": { + "label": "a surveyor's chain, complete", + "function": "the only honest measurement anyone took" + } + }, + "placeNames": { + "first": [ + "The Wood of the", + "The Green of the", + "Under the", + "The Thicket of the", + "The Old Wood of the" + ] + }, + "areaNames": { + "approach": [ + "The Treeline", + "The Ride", + "The Verge", + "The Coppice Edge", + "The Old Track" + ], + "complication": [ + "The Coppice", + "The Charcoal Burns", + "The Deer Lawn", + "The Hollow Way", + "The Bramble Break" + ], + "turn": [ + "The Clearing", + "The Standing Stones", + "The Green Ride", + "The Crossways", + "The Sunken Glade" + ], + "descent": [ + "The Deep Wood", + "The Blackthorn", + "The Fallen Ground", + "The Wet Wood", + "The Root Hollow" + ], + "threshold": [ + "The Grove", + "The Ring of Oaks", + "The Last Clearing", + "The Thorn Gate", + "The Still Place" + ], + "ending": [ + "The First Tree", + "The Heart of the Wood", + "Where the Green Man Waits", + "The Oldest Clearing" + ] + }, + "factions": [ + { + "id": "taken", + "name": "the Taken", + "kind": "undead", + "essence": "still walking the paths they were lost on", + "handledBy": "courtesy" + }, + { + "id": "foresters", + "name": "charcoal-burners", + "kind": "living", + "essence": "working a wood that is working on them", + "handledBy": "trade" + }, + { + "id": "hunt", + "name": "the Hunt", + "kind": "beast", + "essence": "running something down, and has been for a long time", + "handledBy": "standing still" + }, + { + "id": "thorns", + "name": "what grew over the rest", + "kind": "beast", + "essence": "neither knows nor cares who came through", + "handledBy": "force" + } + ], + "triggerGlossary": { + "announced": "came in by the ride, singing or talking, as travellers do", + "seenTwice": "passed the same tree twice, or were watched from two sides", + "loud": "an axe, a shout, a horn — the wood minds all three", + "lingering": "stopped moving long enough for the wood to catch up", + "disturbed": "cut, broke or took something growing" + }, + "rosters": { + "skirmish": { + "line": "a Bat Swarm and 2 Giant Rats in the leaf-litter", + "foes": [ + { + "n": 1, + "name": "Bat Swarm", + "atk": 3, + "def": 3, + "grit": 1, + "nerve": 2, + "note": "disperses to nothing and re-forms" + }, + { + "n": 2, + "name": "Giant Rat", + "atk": 2, + "def": 2, + "grit": 1, + "nerve": 2, + "note": "flees from fire" + } + ], + "harmedBy": "anything; fire scatters all of it", + "avoid": "stand still and they pass around you" + }, + "fight": { + "line": "2 Dire Wolves", + "foes": [ + { + "n": 2, + "name": "Dire Wolf", + "atk": 4, + "def": 3, + "grit": 5, + "nerve": 3, + "note": "circles; takes the one who runs" + } + ], + "harmedBy": "anything", + "avoid": "nobody runs and they will not commit" + }, + "battle": { + "line": "1 Troll under the roots and 2 Dire Wolves", + "foes": [ + { + "n": 1, + "name": "Troll", + "atk": 5, + "def": 3, + "grit": 12, + "nerve": 4, + "note": "regrows unless the wound is burned" + }, + { + "n": 2, + "name": "Dire Wolf", + "atk": 4, + "def": 3, + "grit": 5, + "nerve": 3, + "note": "circles" + } + ], + "harmedBy": "anything, but the Troll only stays down if fire closes the wound", + "avoid": "it is territorial and will not follow past the treeline" + }, + "nightmare": { + "line": "the Hunt: 1 Wraith mounted, 1 Troll and 4 Dire Wolves", + "foes": [ + { + "n": 1, + "name": "Wraith", + "atk": 5, + "def": 3, + "grit": 10, + "nerve": 5, + "note": "INCORPOREAL — chill touch ignores armour, drains 1 max Grit" + }, + { + "n": 1, + "name": "Troll", + "atk": 5, + "def": 3, + "grit": 12, + "nerve": 4, + "note": "regrows unless burned" + }, + { + "n": 4, + "name": "Dire Wolf", + "atk": 4, + "def": 3, + "grit": 5, + "nerve": 3, + "note": "runs down anything that flees" + } + ], + "harmedBy": "blessed, silvered or magical weapons for the Wraith ONLY; fire for the Troll; anything for the wolves", + "avoid": "the Hunt passes over anyone standing perfectly still — say so before initiative" + } + }, + "motifs": { + "paths": { + "danger": "straying", + "dangerLine": "the wood is still taking people in, and it is patient about it", + "trigger": "lingering", + "facets": { + "institution": [ + "a ride cut straight for a mile and going nowhere", + "waymarks nailed to trees, all of them facing inward", + "a stile into the wood with no stile out" + ], + "ritual": [ + "boots left in a row at the treeline, toes pointing in", + "a path swept clear of leaf-fall by nothing at all", + "a lantern lit at dusk on a post with no road" + ], + "demand": [ + "a path that widens invitingly wherever you slow down", + "a clearing you keep arriving at from different directions", + "a track that is easier walking than the way back" + ], + "wound": [ + "one boot, worn through, a long way from any road", + "waymarks prised off and stacked at a root", + "a track worn deep by someone walking it for years" + ], + "anchor": [ + "a lantern still burning on a post at a crossway", + "a walking-staff planted upright, worn to the grain", + "a map-case, empty, hanging on a branch" + ] + }, + "features": [ + "a fresh blaze cut into bark, this season", + "a campfire cold but recent, with nobody's gear taken", + "a hat on a branch at head height", + "a path that was not there when you looked before", + "a coat folded neatly at a root", + "cart-ruts leading in and none leading out" + ], + "decisions": [ + { + "cue": "two paths, one plainly easier walking than the other", + "cost": "the wood made one of them easy on purpose", + "resolve": { + "roll": "Wits 2", + "success": "you read the leaf-fall and take the true path, losing no time", + "failure": "you take the easy path and it costs a Turn more than it should", + "orElse": "take the hard path deliberately: one Turn, but you know where you are" + } + }, + { + "cue": "a lantern burning on a post at a crossway", + "cost": "carrying it means the wood can see you coming", + "resolve": { + "roll": "Poise 2", + "success": "you take it and it shows the way — the party does not stray this delve", + "failure": "you take it and something starts walking toward the light", + "orElse": "leave it burning: no guidance, and no attention" + } + }, + { + "cue": "waymarks prised off and stacked at a root", + "cost": "resetting them is a service to whoever comes next", + "resolve": { + "roll": "Brawn 2", + "success": "you reset them and the Taken are grateful — they will guide you once", + "failure": "you are seen doing it and the wood closes a path behind you", + "orElse": "leave them stacked; you are not the wood's problem to solve" + } + }, + { + "cue": "a stranger's coat folded at a root, still dry", + "cost": "taking it is theft from someone probably still walking", + "resolve": { + "roll": "Wits 2", + "success": "you find the mark inside and learn who is still on these paths", + "failure": "you take it and something begins following at coat-distance", + "orElse": "leave it folded; you will pass it again" + } + }, + { + "cue": "a clearing you have now arrived at twice", + "cost": "the third time will not be a coincidence", + "resolve": { + "roll": "Wits 2", + "success": "you break the loop by leaving a mark and walking off it", + "failure": "you arrive a third time: lose a Turn and roll the clock", + "orElse": "walk out in a straight line whatever the ground does: one Turn, hard going" + } + }, + { + "cue": "a track worn deep by long use, going the wrong way", + "cost": "following it finds whoever wore it", + "resolve": { + "roll": "Poise 2", + "success": "you follow it and find them, and they can still be spoken to", + "failure": "you follow it and join it — the party walks it a Turn before noticing", + "orElse": "ignore it; the walker keeps walking" + } + } + ], + "situations": [ + { + "occupant": "one of the Taken", + "doing": "walking a path it has walked for a very long time", + "onArrival": "it falls into step beside you without a word", + "because": "it was never told it could stop", + "offer": "tell it the way out and it will show you a shortcut in return" + }, + { + "occupant": "a lantern on a post", + "doing": "burning steadily with nothing to burn", + "onArrival": "the flame turns toward you as you approach", + "because": "it was lit for someone who never came", + "offer": "carry it and the paths behave for one area" + }, + { + "occupant": "a living charcoal-burner", + "doing": "recutting a blaze the wood keeps growing over", + "onArrival": "they nod and keep working", + "because": "the marks must be kept or the burn cannot be found", + "offer": "help them cut and they will mark your route out" + }, + { + "occupant": "two of the Taken", + "doing": "standing at a fork, each facing a different way", + "onArrival": "they both turn to you to settle it", + "because": "they disagreed once and have not moved since", + "offer": "choose a path for them and both will walk it with you" + }, + { + "occupant": "the path", + "doing": "widening ahead of you into easy walking", + "onArrival": "the going becomes noticeably pleasant", + "because": "the wood is being welcoming", + "offer": "refuse the easy way aloud and the wood respects it" + }, + { + "occupant": "a walking-staff", + "doing": "standing upright where it was planted", + "onArrival": "the leaves around it are undisturbed", + "because": "whoever planted it meant to come back", + "offer": "take it up and the wood counts you a traveller, not a trespasser" + } + ], + "temptations": [ + { + "id": "lantern", + "cue": "a lantern that burns without fuel", + "benefit": "the party never loses its way", + "useCost": { + "bane": 1 + }, + "standingDrawback": "everything in the wood knows where you are" + }, + { + "id": "waymark", + "cue": "a waymark prised off a tree", + "benefit": "once, make a path lead where you say", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the path you displaced has to go somewhere" + }, + { + "id": "staff", + "cue": "a walking-staff worn to the grain", + "benefit": "once, walk out of anywhere in a straight line", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you cannot stop walking while you hold it" + }, + { + "id": "bootlace", + "cue": "a boot-lace from the row at the treeline", + "benefit": "once, retrace your steps exactly, however far", + "useCost": { + "bane": 2 + }, + "standingDrawback": "you retrace someone else's too", + "acceptanceCost": { + "vice": "Pride" + } + }, + { + "id": "mapcase", + "cue": "an empty map-case, oiled", + "benefit": "once, know the way to somewhere you have never been", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the wood learns where you wanted to go" + } + ] + }, + "tithe": { + "danger": "debt", + "dangerLine": "the wood is owed something, and it remembers who has not paid", + "trigger": "disturbed", + "facets": { + "institution": [ + "a stone at the treeline worn hollow by things set down on it", + "offerings nailed to a trunk at every height", + "a bowl at a root, never quite empty" + ], + "ritual": [ + "bread left out, untouched but not stale", + "a first cut of every coppice stacked and unburned", + "a horn sounded at the edge before anyone enters" + ], + "demand": [ + "a root grown across the path at exactly waist height", + "a hollow in a trunk at the height of an outstretched hand", + "a clearing where everything you carry feels heavier" + ], + "wound": [ + "offerings taken back, and the trees around them dead", + "a bowl smashed and the pieces kept in place", + "a treeline that has moved a field's width since the wall was built" + ], + "anchor": [ + "the offering-bowl itself, at the oldest root", + "a stone table with a hollow worn in the centre", + "a hoard of small given things in a hollow trunk" + ] + }, + "features": [ + "a fresh offering, still wet", + "a hollow tree stuffed with things nobody wanted", + "bread on a stone, untouched and not old", + "a coin pressed into bark and grown half over", + "a dead animal laid out deliberately, not eaten", + "a stack of first-cuttings, unburned" + ], + "decisions": [ + { + "cue": "a bowl at a root that is not quite empty", + "cost": "leaving something is cheap; taking something is not", + "resolve": { + "roll": "Flair 2", + "success": "you leave something well-chosen and the wood eases — no clock roll in this area", + "failure": "you leave something worthless and it is noticed: +1 Bane", + "orElse": "leave nothing and walk on; the wood keeps count" + } + }, + { + "cue": "a hollow trunk full of small given things", + "cost": "one of them is exactly what you need", + "resolve": { + "roll": "Wits 2", + "success": "you take one and leave one, and the exchange is accepted", + "failure": "you take without leaving, and the wood follows you the rest of the delve", + "orElse": "take nothing: the need goes unmet" + } + }, + { + "cue": "a root grown across the path at waist height", + "cost": "stepping over is trespass; going under is submission", + "resolve": { + "roll": "Poise 2", + "success": "you go under, which the wood counts as courtesy, and it lets you by", + "failure": "you step over and the wood treats you as a woodsman from here", + "orElse": "cut it: loud, roll the clock, and the wood remembers the cut" + } + }, + { + "cue": "a dead animal laid out deliberately at a crossway", + "cost": "it was left for something that has not come", + "resolve": { + "roll": "Wits 2", + "success": "you read what it was left for, and what that thing wants instead", + "failure": "you disturb it and whatever it was for arrives hungry", + "orElse": "leave it and go round: one Turn" + } + }, + { + "cue": "bread on a stone, fresh, in a wood with nobody in it", + "cost": "eating it accepts the wood's hospitality", + "resolve": { + "roll": "Poise 2", + "success": "you eat and are a guest — the Taken will not touch you this delve", + "failure": "you eat and are fed by the wood, which means you belong to it: +1 Bane", + "orElse": "do not eat; you stay hungry and free" + } + }, + { + "cue": "a coin pressed into bark and half grown over", + "cost": "prising it out takes back an offering", + "resolve": { + "roll": "Brawn 2", + "success": "you free it cleanly and the tree does not seem to mind", + "failure": "the bark tears and the wood takes something of yours instead", + "orElse": "leave it; it will be gone entirely in another century" + } + } + ], + "situations": [ + { + "occupant": "a living family", + "doing": "leaving bread on a stone and backing away from it", + "onArrival": "they gesture at you to be quiet, and to wait", + "because": "the tithe must be left and not watched", + "offer": "wait with them and they will share what the wood accepts" + }, + { + "occupant": "the offering-bowl", + "doing": "filling with rainwater that is not rain", + "onArrival": "the surface stills as you approach", + "because": "the bowl must not be empty", + "offer": "put something in it and the wood grants you one passage unmolested" + }, + { + "occupant": "one of the Taken", + "doing": "carrying an armful of small things toward a hollow trunk", + "onArrival": "it offers you the armful to hold", + "because": "the offerings must be collected and never are", + "offer": "help it carry and it will let you keep one" + }, + { + "occupant": "a charcoal-burner", + "doing": "stacking a first-cutting that will not be burned", + "onArrival": "they hand you an axe, handle first", + "because": "the first cut is owed and they cannot bring themselves to burn it", + "offer": "burn it for them and the wood counts the debt paid" + }, + { + "occupant": "the trees", + "doing": "closing a little around a stone with nothing on it", + "onArrival": "the gap you came through narrows", + "because": "something was due and was not left", + "offer": "leave anything at all and the gap opens" + }, + { + "occupant": "a horn", + "doing": "sounding at the treeline behind you", + "onArrival": "the note holds far longer than a horn should", + "because": "nobody announced themselves on the way in", + "offer": "answer it — shout back — and the wood treats you as expected" + } + ], + "temptations": [ + { + "id": "bowl", + "cue": "a shallow bowl worn smooth at the rim", + "benefit": "leave anything in it and the wood is satisfied, once", + "useCost": { + "bane": 1 + }, + "standingDrawback": "it must be filled again before you leave the wood" + }, + { + "id": "givenring", + "cue": "a ring from the hollow trunk, someone's offering", + "benefit": "once, be owed a favour by something in the wood", + "useCost": { + "bane": 1 + }, + "standingDrawback": "whoever gave it originally still wants it" + }, + { + "id": "firstcut", + "cue": "a bundle of first-cutting, unburned", + "benefit": "once, burn it to buy safe passage for a scene", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the smoke tells the wood exactly where you are" + }, + { + "id": "stonebread", + "cue": "bread from the offering-stone, still soft", + "benefit": "eat it and nothing in the wood will touch you", + "useCost": { + "bane": 2 + }, + "standingDrawback": "you are fed by the wood, and it counts you as its own", + "acceptanceCost": { + "vice": "Greed" + } + }, + { + "id": "barkcoin", + "cue": "a coin half grown into bark", + "benefit": "once, pay a debt you have not the means to pay", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the tree it came from is looking for it" + } + ] + }, + "reclaiming": { + "danger": "encroachment", + "dangerLine": "the wood is taking the ground back, and it does not stop while you watch", + "trigger": "lingering", + "facets": { + "institution": [ + "a field wall with trees growing out of the top of it", + "furrows still visible under twenty years of bramble", + "a gate standing on its own with wood on both sides" + ], + "ritual": [ + "coppice stools cut on a rotation nobody is keeping", + "a hedge laid by hands, thirty years ago, still holding", + "boundary trees marked and the marks grown shut" + ], + "demand": [ + "a clearing that is smaller than it was this morning", + "saplings standing in a doorway in a line", + "a path narrowing behind you as you walk it" + ], + "wound": [ + "a plough left in a furrow with a tree through it", + "a cottage with the roof gone and an oak in the hearth", + "an orchard gone feral, the grafts thrown off" + ], + "anchor": [ + "an axe in a stump, handle still sound", + "a hedging bill hung on a nail in a wall that is now a tree", + "a ring of stumps cut clean, and nothing regrown" + ] + }, + "features": [ + "a wall pushed over from the wood side, recently", + "a sapling in a doorway, this year's growth", + "a plough share polished by roots", + "a fence post with a living branch", + "a chimney standing alone in a thicket", + "a wheel-rut with a tree in the middle of it" + ], + "decisions": [ + { + "cue": "a clearing that is measurably smaller than the map says", + "cost": "the wood will not stop while you are watching it", + "resolve": { + "roll": "Wits 2", + "success": "you mark the edge and can tell how fast it is moving, which is useful", + "failure": "you lose the edge and the clearing closes a little around you", + "orElse": "move through fast and do not measure: one Turn, no knowledge" + } + }, + { + "cue": "an axe standing in a stump, handle sound", + "cost": "using it is a declaration; leaving it is a concession", + "resolve": { + "roll": "Brawn 2", + "success": "you cut what needs cutting and the ground stays open behind you", + "failure": "the cut does not take and the wood closes the way you came: lose a Turn", + "orElse": "leave the axe; the way narrows but nothing is provoked" + } + }, + { + "cue": "a cottage with an oak growing in the hearth", + "cost": "what is inside was never cleared out", + "resolve": { + "roll": "Wits 2", + "success": "you get in and out through the roots, and find what was left", + "failure": "the roots shift and the doorway closes: +1 Bane and a Turn to dig out", + "orElse": "leave it; whatever is inside stays inside" + } + }, + { + "cue": "a hedge laid by human hands, still holding, blocking the way", + "cost": "breaking it undoes a good piece of work", + "resolve": { + "roll": "Poise 2", + "success": "you find the layer's gap and pass without breaking a stem", + "failure": "you force through and the hedge is ruined: the wood counts it", + "orElse": "go round the hedge: two Turns" + } + }, + { + "cue": "saplings standing in a doorway in a deliberate line", + "cost": "pulling them is easy and will be noticed", + "resolve": { + "roll": "Brawn 2", + "success": "you pull them cleanly and replant them outside — the wood accepts the trade", + "failure": "you pull them and drop them: the wood takes something of yours in exchange", + "orElse": "step over them; the doorway is half closed and you are half through" + } + }, + { + "cue": "an orchard gone feral, and one tree still bearing", + "cost": "the fruit is good and it is not yours", + "resolve": { + "roll": "Flair 2", + "success": "you take fruit in a way the orchard permits, and are the better for it", + "failure": "you take too much and the orchard remembers the hand", + "orElse": "take none: you go hungry and unremarked" + } + } + ], + "situations": [ + { + "occupant": "a living farmer", + "doing": "cutting back a hedge that grew again behind them", + "onArrival": "they do not look up, and ask if you have a bill-hook", + "because": "the hedge must be kept and cannot be", + "offer": "cut with them and they will tell you where the old road ran" + }, + { + "occupant": "saplings", + "doing": "standing in a doorway in a straight line", + "onArrival": "the line shifts, very slightly, as you look at it", + "because": "the doorway is being closed", + "offer": "step through and say aloud that you are passing, and they let you" + }, + { + "occupant": "one of the Taken", + "doing": "laying a hedge with hands that are mostly root", + "onArrival": "it holds out a stem for you to bend", + "because": "the work was begun and must be finished", + "offer": "bend the stem and it will lay you a gap through anything" + }, + { + "occupant": "the clearing", + "doing": "closing by a hand's breadth while you stand in it", + "onArrival": "the light changes", + "because": "nothing cleared is permitted to stay cleared", + "offer": "cut one sapling and the clearing holds for the delve" + }, + { + "occupant": "an old orchard", + "doing": "dropping fruit in front of you as you pass", + "onArrival": "the fruit lands and does not roll", + "because": "the trees were tended once and remember it", + "offer": "eat, and the orchard will show you where the house was" + }, + { + "occupant": "two charcoal-burners", + "doing": "arguing over a coppice stool cut out of rotation", + "onArrival": "they appeal to you as a third opinion", + "because": "the rotation was lost and the wood is taking the difference", + "offer": "settle it and they will burn a path for you" + } + ], + "temptations": [ + { + "id": "axe", + "cue": "an axe with a sound handle", + "benefit": "once, cut a way through anything growing", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the wood counts every cut you make and settles later" + }, + { + "id": "hedgingbill", + "cue": "a hedging bill, oiled", + "benefit": "once, close a way behind you that nothing follows through", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the way stays shut for you too" + }, + { + "id": "graft", + "cue": "a graft from the last bearing tree", + "benefit": "once, make something grow where it should not", + "useCost": { + "bane": 1 + }, + "standingDrawback": "whatever you grow is the wood's, not yours" + }, + { + "id": "boundarystone", + "cue": "a boundary stone the wood has not yet swallowed", + "benefit": "once, hold a piece of ground against the wood for a scene", + "useCost": { + "bane": 2 + }, + "standingDrawback": "the wood takes twice that ground afterwards", + "acceptanceCost": { + "vice": "Greed" + } + }, + { + "id": "plough", + "cue": "an iron share off a buried plough", + "benefit": "once, break new ground and have it stay broken", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the wood knows there is iron in the party" + } + ] + }, + "trackless": { + "danger": "measurement", + "dangerLine": "the wood will not be counted, and it notices anyone trying", + "trigger": "seenTwice", + "facets": { + "institution": [ + "survey pegs driven in rows and every one at a different angle", + "a chain hung in a tree, complete, at head height", + "cairns built to mark a line that does not run straight" + ], + "ritual": [ + "a perambulation walked yearly and never finishing", + "a tally cut into a post, the count restarting", + "a rope measured out and coiled and measured again" + ], + "demand": [ + "ground that is longer walking than looking", + "a stand of trees that is not the same number twice", + "a distance that changes depending which way you go" + ], + "wound": [ + "a map torn into strips and nailed to six trees", + "a surveyor's theodolite smashed against its own tripod", + "a chain snapped and the links scattered along a mile" + ], + "anchor": [ + "a surveyor's chain, complete and coiled", + "a field-book with the last page filled in a shaking hand", + "a cairn with a brass plate under the top stone" + ] + }, + "features": [ + "survey pegs pulled and re-driven wrongly", + "a tally-post with the count started over", + "a rope coiled at a root, measured and unmeasured", + "a cairn built this season", + "a page of a field-book pinned to bark", + "chain-links scattered in a line through the leaf-litter" + ], + "decisions": [ + { + "cue": "a surveyor's chain hung complete in a tree", + "cost": "measuring anything here is the one thing the wood minds", + "resolve": { + "roll": "Wits 2", + "success": "you measure one distance honestly and it holds — you can trust that route", + "failure": "the measurement comes out different twice and you lose a Turn to it", + "orElse": "leave the chain hanging: no measurements, no offence" + } + }, + { + "cue": "a field-book with the last entry in a shaking hand", + "cost": "reading it tells you what the surveyor found", + "resolve": { + "roll": "Wits 1", + "success": "you read it and learn one true thing about the wood's shape", + "failure": "you read it aloud, and the wood hears itself described: +1 Bane", + "orElse": "leave it; the finding stays lost" + } + }, + { + "cue": "cairns marking a line that does not run straight", + "cost": "following the cairns is following someone else's error", + "resolve": { + "roll": "Wits 2", + "success": "you spot where the line was corrected and follow the true one", + "failure": "you follow the error and arrive somewhere you did not intend", + "orElse": "ignore the cairns entirely: one Turn, your own reckoning" + } + }, + { + "cue": "a stand of trees you have counted twice and got two answers", + "cost": "counting a third time is a challenge", + "resolve": { + "roll": "Poise 2", + "success": "you accept aloud that it cannot be counted, and the stand lets you through", + "failure": "you insist on a number and the stand does not open: lose a Turn", + "orElse": "do not count; walk through without looking too hard" + } + }, + { + "cue": "a map torn into strips and nailed to six trees", + "cost": "assembling it is possible and slow", + "resolve": { + "roll": "Wits 2", + "success": "you assemble enough of it to know where the far side is", + "failure": "you assemble it wrongly and are confidently mistaken for a Turn", + "orElse": "take one strip and go: you know a fragment, and no more" + } + }, + { + "cue": "a perambulation the Taken are still walking, and a gap in the line", + "cost": "joining the walk means walking it to the end", + "resolve": { + "roll": "Poise 2", + "success": "you join, walk one leg, and are let out at a place you chose", + "failure": "you join and the walk does not end where you hoped: lose a Turn", + "orElse": "let them pass: they nod, and the wood notes that you did not join" + } + } + ], + "situations": [ + { + "occupant": "a surveyor", + "doing": "measuring the same distance for the fourth time", + "onArrival": "it asks you to hold the far end of a chain", + "because": "the survey must close and has never closed", + "offer": "hold the chain and it will tell you the one distance it trusts" + }, + { + "occupant": "the trees", + "doing": "standing in a number that is not the same twice", + "onArrival": "the count you began comes out differently", + "because": "the wood will not be enumerated", + "offer": "stop counting aloud and the stand opens" + }, + { + "occupant": "one of the Taken", + "doing": "walking a perambulation with a gap in the line where someone dropped out", + "onArrival": "it beckons you into the gap", + "because": "the bounds must be walked by a full company", + "offer": "walk one leg with them and they will set you down wherever you name" + }, + { + "occupant": "a living cartographer", + "doing": "tearing up their own map, carefully, into strips", + "onArrival": "they offer you a strip without explanation", + "because": "the map was wrong and they would rather it were nowhere", + "offer": "take the strip and it shows one true thing" + }, + { + "occupant": "a cairn", + "doing": "standing where no cairn was a moment ago", + "onArrival": "the top stone is warm", + "because": "the line must be marked and the line keeps moving", + "offer": "add a stone and the cairns lead you somewhere useful, once" + }, + { + "occupant": "a tally-post", + "doing": "carrying a count that has restarted many times", + "onArrival": "the fresh cut is very fresh", + "because": "something is still counting and cannot finish", + "offer": "cut the next tally yourself and the wood accepts the number" + } + ], + "temptations": [ + { + "id": "chain", + "cue": "a surveyor's chain, complete", + "benefit": "once, know a true distance in the wood", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the wood knows you measured it" + }, + { + "id": "fieldbook", + "cue": "a field-book with one honest page", + "benefit": "once, know exactly where you are", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you cannot be lost, and the wood dislikes that" + }, + { + "id": "brassplate", + "cue": "a brass plate from under a cairn", + "benefit": "once, fix a place so it stays where it is", + "useCost": { + "bane": 1 + }, + "standingDrawback": "everything around that place moves instead" + }, + { + "id": "mapstrip", + "cue": "a strip of a torn map", + "benefit": "once, find the far side of anything", + "useCost": { + "bane": 2 + }, + "standingDrawback": "the rest of the map wants to be reassembled", + "acceptanceCost": { + "vice": "Pride" + } + }, + { + "id": "tallypost", + "cue": "a section of tally-post", + "benefit": "once, make a count come out the same twice", + "useCost": { + "bane": 1 + }, + "standingDrawback": "something begins counting you" + } + ] + } + }, + "placeNameStyle": "claimant" +} \ No newline at end of file diff --git a/core/content/index.json b/core/content/index.json index 65af274..9d363ae 100644 --- a/core/content/index.json +++ b/core/content/index.json @@ -12,6 +12,18 @@ "label": "Castle", "geometry": "barrow", "motifs": 4 + }, + { + "id": "forest", + "label": "Forest", + "geometry": "forest", + "motifs": 4 + }, + { + "id": "town", + "label": "Town", + "geometry": "village", + "motifs": 4 } ] } \ No newline at end of file diff --git a/core/content/town.json b/core/content/town.json new file mode 100644 index 0000000..01923f9 --- /dev/null +++ b/core/content/town.json @@ -0,0 +1,1190 @@ +{ + "id": "town", + "label": "Town", + "forgeStageType": "village", + "schema": 1, + "_model": "The settlement kernel: the APPETITE belongs to the place, not to a buried person. A town wants to be prosperous, respectable, safe or necessary, and its ACCOMMODATION is what a corporation does to keep it that way — price people out, charter them away, wall them off. Claimants are offices, not corpses.", + "facetProgression": { + "approach": "institution", + "complication": "ritual", + "turn": "demand", + "descent": "wound", + "threshold": "anchor", + "ending": "demand" + }, + "claimants": [ + "Guild of Mercers", + "Corporation", + "Watch Committee", + "Burgesses", + "Mayor-for-Life", + "Market Court", + "Company of Wool" + ], + "appetites": [ + { + "id": "prosperous", + "want": "never to be poor again", + "lack": "poor", + "purpose": "the money would never leave", + "motif": "ledger", + "prize": "charter", + "conscript": "the debtors", + "asks": "\"Who is paying for this?\"", + "appeasement": { + "move": "pay a debt that is not yours, in public", + "attribute": "Poise", + "successes": 2, + "why": "the books balance again", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "respectable", + "want": "never to be shamed", + "lack": "shamed", + "purpose": "nothing unseemly would ever be visible", + "motif": "appearances", + "prize": "portrait", + "conscript": "the shameful", + "asks": "\"What will people say?\"", + "appeasement": { + "move": "compliment the town on how well it is kept, in the street", + "attribute": "Flair", + "successes": 2, + "why": "the town is admired again", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "safe", + "want": "never to be sacked again", + "lack": "threatened", + "purpose": "nothing would ever get in", + "motif": "vigilance", + "prize": "keys", + "conscript": "the strangers", + "asks": "\"Who let you in?\"", + "appeasement": { + "move": "submit to being searched, without complaint", + "attribute": "Poise", + "successes": 2, + "why": "a stranger has been checked, properly", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "necessary", + "want": "never to be bypassed", + "lack": "bypassed", + "purpose": "the road would always come through here", + "motif": "thoroughfare", + "prize": "milestone", + "conscript": "the carters", + "asks": "\"Where do you think you are going?\"", + "appeasement": { + "move": "ask the town for directions, and take them", + "attribute": "Wits", + "successes": 2, + "why": "the town was needed for something", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + } + ], + "accommodations": [ + { + "id": "priced", + "text": "priced {conscript} out until they left of their own accord", + "cruelty": 2, + "fits": [ + "prosperous", + "respectable", + "necessary" + ] + }, + { + "id": "chartered", + "text": "chartered {conscript} away to another town entirely", + "cruelty": 2, + "fits": [ + "prosperous", + "respectable", + "safe" + ] + }, + { + "id": "walled", + "text": "walled {conscript} outside the gates and did not open them", + "cruelty": 3, + "fits": [ + "safe", + "respectable", + "prosperous" + ] + }, + { + "id": "indentured", + "text": "indentured {conscript} to the corporation for three generations", + "cruelty": 3, + "fits": [ + "prosperous", + "necessary" + ] + }, + { + "id": "struck", + "text": "struck {conscript} from the rolls, so the town could say they had never been here", + "cruelty": 3, + "fits": [ + "respectable", + "safe", + "necessary" + ] + }, + { + "id": "housed", + "text": "housed {conscript} where they could not be seen from the square", + "cruelty": 1, + "fits": [ + "respectable", + "safe", + "prosperous" + ] + } + ], + "prizes": { + "charter": { + "label": "the charter that made the town rich", + "function": "the only proof the privilege was ever granted" + }, + "portrait": { + "label": "the town's official portrait of itself", + "function": "the version everyone agreed to remember" + }, + "keys": { + "label": "the keys to the gates, all four", + "function": "the only things the walls answer to" + }, + "milestone": { + "label": "the milestone that says all roads pass here", + "function": "the reason anyone ever came" + } + }, + "placeNames": { + "first": [ + "Market", + "Nether", + "Old", + "Kings", + "Salt", + "Stone", + "Bridge", + "Cold" + ], + "second": [ + "Harrow", + "Weld", + "Combe", + "Barrow", + "Stanton", + "Marden", + "Fordwich", + "Thrale", + "Winbury", + "Cawley" + ] + }, + "areaNames": { + "approach": [ + "The Toll Road", + "The North Gate", + "The Bridge", + "The Weighbridge", + "The Outskirts" + ], + "complication": [ + "The Market Square", + "The Shambles", + "The Wool Hall", + "The Almshouse Row", + "The Cornmarket" + ], + "turn": [ + "The Guildhall", + "The Counting House", + "The Assembly Rooms", + "The Exchange", + "The Session House" + ], + "descent": [ + "The Undercrofts", + "The Debtors' Yard", + "The Tanneries", + "The Back Lanes", + "The Drain" + ], + "threshold": [ + "The Mayor's Parlour", + "The Muniment Chest", + "The Strongroom", + "The Charter Room", + "The Private Office" + ], + "ending": [ + "The Council Chamber", + "The High Table", + "The Mayor's Seat", + "The Corporation Assembled" + ] + }, + "factions": [ + { + "id": "corporation", + "name": "the Corporation", + "kind": "undead", + "essence": "still meeting, still minuting, still deciding", + "handledBy": "courtesy" + }, + { + "id": "debtors", + "name": "the debtors", + "kind": "living", + "essence": "owed on and owing, and still here", + "handledBy": "trade" + }, + { + "id": "watch", + "name": "the Watch", + "kind": "undead", + "essence": "checking papers nobody has issued for centuries", + "handledBy": "proof of right" + }, + { + "id": "outsiders", + "name": "what came in anyway", + "kind": "beast", + "essence": "never read the charter", + "handledBy": "force" + } + ], + "triggerGlossary": { + "announced": "came in by the main gate and paid the toll, publicly", + "seenTwice": "noticed by two different windows, or a window and a watchman", + "loud": "a raised voice in a public place — the town minds that", + "lingering": "stood about in the square long enough to be asked your business", + "disturbed": "moved something the Corporation had placed" + }, + "rosters": { + "skirmish": { + "line": "3 Bandits in watchmen's coats", + "foes": [ + { + "n": 3, + "name": "Bandit", + "atk": 3, + "def": 3, + "grit": 2, + "nerve": 2, + "note": "asks for your papers first" + } + ], + "harmedBy": "anything", + "avoid": "produce any document with a seal and they will accept it" + }, + "fight": { + "line": "4 Bandits and a Hobgoblin Soldier as sergeant", + "foes": [ + { + "n": 1, + "name": "Hobgoblin Soldier", + "atk": 4, + "def": 3, + "grit": 5, + "nerve": 3, + "note": "the others hold while he lasts" + }, + { + "n": 4, + "name": "Bandit", + "atk": 3, + "def": 3, + "grit": 2, + "nerve": 2, + "note": "breaks when the sergeant falls" + } + ], + "harmedBy": "anything", + "avoid": "drop the sergeant and the rest are Nerve 2" + }, + "battle": { + "line": "1 Necromancer of the Corporation and 4 Skeletons", + "foes": [ + { + "n": 1, + "name": "Necromancer", + "atk": 4, + "def": 3, + "grit": 6, + "nerve": 4, + "note": "raises one Skeleton per round from the paupers' ground" + }, + { + "n": 4, + "name": "Skeleton", + "atk": 3, + "def": 2, + "grit": 1, + "nerve": 5, + "note": "fearless" + } + ], + "harmedBy": "anything — but the Skeletons keep coming until the Necromancer stops", + "avoid": "he is a clerk and will take a bribe, in coin, publicly" + }, + "nightmare": { + "line": "1 Wraith of the Mayor, 1 Necromancer and 5 Skeletons", + "foes": [ + { + "n": 1, + "name": "Wraith", + "atk": 5, + "def": 3, + "grit": 10, + "nerve": 5, + "note": "INCORPOREAL — chill touch ignores armour, drains 1 max Grit" + }, + { + "n": 1, + "name": "Necromancer", + "atk": 4, + "def": 3, + "grit": 6, + "nerve": 4, + "note": "keeps raising" + }, + { + "n": 5, + "name": "Skeleton", + "atk": 3, + "def": 2, + "grit": 1, + "nerve": 5, + "note": "fearless" + } + ], + "harmedBy": "blessed, silvered or magical weapons for the Wraith ONLY; anything for the rest", + "avoid": "do not run this without an appeasement route open" + } + }, + "motifs": { + "ledger": { + "danger": "debt", + "dangerLine": "the town is still owed, and it keeps very good records", + "trigger": "lingering", + "facets": { + "institution": [ + "a debt-board in the square, names chalked and re-chalked", + "weights and measures chained to a bench, all of them shaved", + "a counting house with the shutters open at every hour" + ], + "ritual": [ + "a market bell rung at an hour when nobody trades", + "accounts read aloud to an empty hall, quarterly", + "coins counted into a box that is already full" + ], + "demand": [ + "a table set for a settlement, two chairs, one occupied", + "a room where a price is named before you ask", + "a hand out, palm up, at every doorway" + ], + "wound": [ + "a ledger with a page cut out and the stub still in", + "houses emptied for arrears and never re-let", + "a debtor's stone worn hollow by kneeling" + ], + "anchor": [ + "a charter under glass, the seal intact", + "a strongbox with one document and no coin", + "a tally-stick split and both halves kept" + ] + }, + "features": [ + "fresh chalk on a debt-board, this week's hand", + "a shop cleared out overnight and the door left open", + "coin scattered and not picked up, which never happens here", + "a stall taken down in a hurry, the frame still standing", + "a ledger left open at a page somebody wanted found", + "a lock changed on a door that was never locked" + ], + "decisions": [ + { + "cue": "a debt-board with a name you could pay off, or add to", + "cost": "paying is public and generous; adding is quiet and cruel", + "resolve": { + "roll": "Poise 2", + "success": "you pay in the square and the Corporation counts you a benefactor", + "failure": "your coin is refused as insufficient, publicly: +1 Bane", + "orElse": "walk past the board; nothing changes and nothing is owed" + } + }, + { + "cue": "a toll demanded at a gate by nobody in particular", + "cost": "the toll is real even if the collector is not", + "resolve": { + "roll": "Wits 2", + "success": "you work out the correct toll from the board and pay exactly it — the gate opens", + "failure": "you overpay and are marked as someone with money: every price rises for you", + "orElse": "go round to the weighbridge: two Turns, no toll" + } + }, + { + "cue": "a set of shaved weights and a merchant about to use them", + "cost": "exposing the fraud makes an enemy of the guild", + "resolve": { + "roll": "Flair 2", + "success": "you expose it in a way that flatters the Corporation's honesty and gain their favour", + "failure": "you expose it clumsily and the guild closes ranks: +1 Bane", + "orElse": "say nothing; the merchant remembers your discretion" + } + }, + { + "cue": "a strongbox that opens to whoever holds the charter", + "cost": "you do not hold the charter", + "resolve": { + "roll": "Wits 2", + "success": "you find the charter's copy in the muniment chest and the box opens", + "failure": "the box holds and the attempt is entered in a ledger somewhere", + "orElse": "break it: loud, roll the clock, contents damaged" + } + }, + { + "cue": "a debtor offering information for the price of their arrears", + "cost": "their information is good; their arrears are not small", + "resolve": { + "roll": "Poise 2", + "success": "you settle the debt at a discount and get the whole of what they know", + "failure": "you pay in full and they tell you half", + "orElse": "refuse: they tell you nothing and follow you at a distance" + } + }, + { + "cue": "a tally-stick, split, with the other half somewhere in the town", + "cost": "matching it proves a claim worth having", + "resolve": { + "roll": "Wits 2", + "success": "you match it against the counting-house half and hold a claim the town honours", + "failure": "you match it wrongly and hold a claim on nothing: +1 Bane", + "orElse": "leave it: no claim, no obligation" + } + } + ], + "situations": [ + { + "occupant": "a clerk of the Corporation", + "doing": "chalking a debt-board that has no room left", + "onArrival": "it asks whether you have come to settle", + "because": "the accounts must balance and never have", + "offer": "settle any debt at all and the whole board is wiped, which it badly wants" + }, + { + "occupant": "two living debtors", + "doing": "dividing a purse that is plainly not theirs", + "onArrival": "they stop and offer you a share", + "because": "they were paid to leave and could not", + "offer": "take the share and they will tell you who paid them" + }, + { + "occupant": "the Weighmaster", + "doing": "testing weights that are every one of them short", + "onArrival": "it hands you a weight and asks your honest opinion", + "because": "the measures must be certified and cannot be", + "offer": "certify them anyway and every trader in the town owes you" + }, + { + "occupant": "a market bell", + "doing": "ringing an hour when no trade is permitted", + "onArrival": "the square begins, very slowly, to fill", + "because": "the hour was never struck from the calendar", + "offer": "trade something, anything, and the market recognises you as a burgess" + }, + { + "occupant": "the Chamberlain", + "doing": "counting coin into a box that is already full", + "onArrival": "it does not look up, and asks you to hold the lid", + "because": "the count has never once come out right", + "offer": "hold the lid and it will tell you which house the shortfall went to" + }, + { + "occupant": "a living creditor", + "doing": "waiting outside a door with a writ and no bailiff", + "onArrival": "they ask if you are going in anyway", + "because": "the writ cannot be served without an officer", + "offer": "serve it for them and they hand you what is behind the door" + } + ], + "temptations": [ + { + "id": "charterseal", + "cue": "a seal matrix for the town's charter", + "benefit": "doors that check privilege open for you", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the Corporation expects you at its next meeting" + }, + { + "id": "tallystick", + "cue": "half a split tally-stick", + "benefit": "once, prove a debt is owed to you and be believed", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the other half is out there and its holder is looking" + }, + { + "id": "shavedweight", + "cue": "a weight, subtly light", + "benefit": "once, make a trade come out in your favour", + "useCost": { + "bane": 1 + }, + "standingDrawback": "traders begin to check everything you hand them" + }, + { + "id": "writ", + "cue": "a writ of distraint, unserved, name blank", + "benefit": "name someone and the Watch will detain them once", + "useCost": { + "bane": 2 + }, + "standingDrawback": "your own name is on the reverse in the same clerk's hand", + "acceptanceCost": { + "vice": "Greed" + } + }, + { + "id": "keytocounting", + "cue": "a small key to a counting-house drawer", + "benefit": "one locked box per scene opens", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the Corporation notices what has been opened" + } + ] + }, + "appearances": { + "danger": "scandal", + "dangerLine": "the town is being looked at, and it has arranged itself accordingly", + "trigger": "seenTwice", + "facets": { + "institution": [ + "a square where every frontage is painted and every back is not", + "shutters on the side of the street the road can see", + "a fine hall with a fine door and no rooms behind it" + ], + "ritual": [ + "a procession route swept daily, and only that route", + "a mayor's portrait unveiled every year to the same crowd", + "best clothes laid out in every house, for a visit that never comes" + ], + "demand": [ + "a street arranged so a visitor is always in view", + "a mirror set at the end of the square, facing in", + "a bench positioned for being seen sitting on" + ], + "wound": [ + "a row of houses with the fronts kept and the backs collapsed", + "a name painted over on a shopfront, badly", + "a portrait with one figure scraped out of the group" + ], + "anchor": [ + "the town's own portrait of itself, framed and lit", + "a visitor's book with one page and many signatures", + "a plan of the town as it would like to be" + ] + }, + "features": [ + "fresh paint on one side of a street only", + "a curtain drawn across an alley mouth", + "a scandal-sheet trodden into the mud, still legible", + "a shopfront boarded and painted to look occupied", + "chairs set out in the square for an audience", + "a signboard taken down and the hooks left" + ], + "decisions": [ + { + "cue": "an alley the town would rather you did not walk down", + "cost": "walking it sees what the frontage hides", + "resolve": { + "roll": "Wits 2", + "success": "you go down and back unobserved, and learn what the town is covering", + "failure": "you are seen coming out of it: +1 Bane and the Corporation cools toward you", + "orElse": "stay on the swept route: one Turn longer, no offence given" + } + }, + { + "cue": "a scandal-sheet naming somebody still influential here", + "cost": "reading it aloud is a weapon; pocketing it is leverage", + "resolve": { + "roll": "Flair 2", + "success": "you use it to open a door that flattery alone would not", + "failure": "you are seen holding it and become the story: +1 Bane", + "orElse": "burn it: the town relaxes and thanks you without saying so" + } + }, + { + "cue": "a group portrait with one figure scraped out", + "cost": "asking who it was is a rude question here", + "resolve": { + "roll": "Poise 2", + "success": "you ask it delicately enough to be answered honestly", + "failure": "you ask badly and the room closes: the next encounter starts hostile", + "orElse": "do not ask; the gap goes unexplained and you are liked for it" + } + }, + { + "cue": "a procession forming that expects you to join or stand aside", + "cost": "joining is endorsement; standing aside is comment", + "resolve": { + "roll": "Flair 2", + "success": "you join well and the town takes you for a person of standing", + "failure": "you join badly and are laughed at: +1 Bane", + "orElse": "stand aside respectfully: neutral, and you lose one Turn" + } + }, + { + "cue": "a house-front with no house behind it, and a way through", + "cost": "the way through is real; the pretence is what matters", + "resolve": { + "roll": "Brawn 2", + "success": "you slip through without bringing the frontage down", + "failure": "the frontage comes down, publicly: roll the clock", + "orElse": "go round the block: one Turn" + } + }, + { + "cue": "a visitor's book open at a blank page", + "cost": "signing puts you on the record, favourably or otherwise", + "resolve": { + "roll": "Flair 1", + "success": "you sign in a way that flatters the town and doors open", + "failure": "you sign plainly and the town judges the hand: +1 Bane", + "orElse": "leave it unsigned; you remain a stranger and are treated as one" + } + } + ], + "situations": [ + { + "occupant": "two of the Corporation", + "doing": "painting a frontage that is already perfect", + "onArrival": "they ask you to stand back and judge the colour", + "because": "the street must look well from the road", + "offer": "approve the colour warmly and they will let you behind it" + }, + { + "occupant": "a portrait-painter", + "doing": "scraping a figure out of a group portrait", + "onArrival": "it pauses, brush up, and asks whether you know the face", + "because": "the town resolved that person had never been here", + "offer": "name the face and it will tell you what they did" + }, + { + "occupant": "the Beadle", + "doing": "sweeping a route that is already clean", + "onArrival": "it sweeps around you rather than asking you to move", + "because": "the route must be ready and the visit never comes", + "offer": "tell it the visitor has arrived and it will escort you anywhere" + }, + { + "occupant": "a living journalist", + "doing": "copying a notice down before it is taken away", + "onArrival": "they pocket the paper and smile at you carefully", + "because": "the story is real and the town is faster than they are", + "offer": "offer to distract the Beadle and they will share what they have" + }, + { + "occupant": "the Mayor", + "doing": "rehearsing a welcome to an empty square", + "onArrival": "it welcomes you instead, warmly and at length", + "because": "the speech has never once been given", + "offer": "let it finish and the town treats you as its guest of honour" + }, + { + "occupant": "three of the town", + "doing": "standing in their best clothes at their doors", + "onArrival": "they nod as you pass, and keep standing", + "because": "word went round that someone important was coming", + "offer": "be that someone and every door on the street opens" + } + ], + "temptations": [ + { + "id": "townportrait", + "cue": "a small copy of the town's own portrait", + "benefit": "show it and be taken for a person of standing", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you are expected to behave like one, publicly" + }, + { + "id": "visitorsbook", + "cue": "a page torn from the visitor's book", + "benefit": "once, be remembered as having been welcome here", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the page is missed, and the Corporation asks after it" + }, + { + "id": "scandalsheet", + "cue": "a scandal-sheet, folded small", + "benefit": "once, make one person here do as you ask", + "useCost": { + "bane": 2 + }, + "standingDrawback": "they will tell others what you are holding", + "acceptanceCost": { + "vice": "Greed" + } + }, + { + "id": "bestcoat", + "cue": "a good coat, cut for the square", + "benefit": "the Watch does not stop you", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you cannot be seen in the back lanes wearing it" + }, + { + "id": "paintpot", + "cue": "a pot of the town's own paint", + "benefit": "once, make something look sound that is not", + "useCost": { + "bane": 1 + }, + "standingDrawback": "whatever you painted will fail at the worst moment" + } + ] + }, + "vigilance": { + "danger": "suspicion", + "dangerLine": "the town is still watching the road, and you came down it", + "trigger": "announced", + "facets": { + "institution": [ + "a gate that is shut at an hour nobody remembers agreeing", + "watch-boxes at every corner, all of them occupied", + "a wall built higher on the side facing the road" + ], + "ritual": [ + "papers demanded at a gate that has no gatekeeper", + "a curfew bell rung to an empty street", + "a roll of strangers read out nightly" + ], + "demand": [ + "a room you must be searched to leave", + "a bench where you are asked to wait and be looked at", + "a window arranged so the square can see who calls" + ], + "wound": [ + "a gate barred from inside with the bar broken anyway", + "a list of strangers with every name struck through", + "a house burned deliberately, alone in its row" + ], + "anchor": [ + "four gate-keys on one ring, hung where all can see", + "a strangers' book with the last entry unfinished", + "a bar for a gate, oiled, never used" + ] + }, + "features": [ + "a gate barred at midday, with no reason given", + "shutters closed on one house only", + "a watch-box with the brazier still warm", + "chalk marks on doors, recent, in a code", + "a barricade half-built across a lane", + "a dog kennel, empty, chain snapped" + ], + "decisions": [ + { + "cue": "a watchman demanding papers you do not have", + "cost": "any document with a seal will do, if given confidently", + "resolve": { + "roll": "Poise 2", + "success": "you produce something and it is accepted; the Watch passes you through", + "failure": "your papers are refused and you are entered in the strangers' book: +1 Bane", + "orElse": "go over the wall by the tannery: one Turn and a Brawn roll" + } + }, + { + "cue": "a gate shut against the hour, and a wicket beside it", + "cost": "the wicket admits one person at a time", + "resolve": { + "roll": "Wits 2", + "success": "you work out the wicket's trick and the party passes one by one, unremarked", + "failure": "the wicket sticks and the noise brings the Watch: roll the clock", + "orElse": "wait for the gate to open on the bell: two Turns" + } + }, + { + "cue": "a search you can submit to, or refuse", + "cost": "submitting means showing what you carry", + "resolve": { + "roll": "Poise 2", + "success": "you submit and the Watch counts you honest — no further checks this delve", + "failure": "you refuse and are followed for the rest of the delve", + "orElse": "let them search only one of you: partial trust, one Turn" + } + }, + { + "cue": "chalk marks on doors in a code the Watch uses", + "cost": "reading it tells you which houses are being watched", + "resolve": { + "roll": "Wits 2", + "success": "you read the code and know which doors are safe to knock at", + "failure": "you copy a mark wrongly onto yourselves without realising", + "orElse": "ignore the marks; knock and find out" + } + }, + { + "cue": "a curfew bell about to ring", + "cost": "being on the street after it is an offence here", + "resolve": { + "roll": "Flair 2", + "success": "you talk your way into a doorway before it rings and are sheltered", + "failure": "you are caught out after curfew: +1 Bane and the Watch escorts you", + "orElse": "run for the gate: one Turn, loud, roll the clock" + } + }, + { + "cue": "a strangers' book with your description already in it", + "cost": "somebody entered you before you arrived", + "resolve": { + "roll": "Wits 2", + "success": "you find who wrote it and what else they wrote", + "failure": "you alter the entry and the alteration is noticed: +1 Bane", + "orElse": "leave it; the Watch has your description and uses it" + } + } + ], + "situations": [ + { + "occupant": "a watchman", + "doing": "checking papers nobody has carried for a century", + "onArrival": "it puts out a hand and waits", + "because": "the order to stand the watch was never rescinded", + "offer": "hand it anything with a seal and it will wave you through and salute" + }, + { + "occupant": "the Constable", + "doing": "reading a roll of strangers aloud in an empty street", + "onArrival": "it reaches a blank and looks up at you", + "because": "the roll must be complete before the gate may open", + "offer": "give it names — any names — and the gate opens" + }, + { + "occupant": "two living smugglers", + "doing": "waiting for the curfew bell before moving a crate", + "onArrival": "they put a finger to their lips and shrug", + "because": "the Watch is predictable and they are patient", + "offer": "help them shift it and they show you the way through the wall" + }, + { + "occupant": "a gate", + "doing": "closing itself, slowly, on no schedule you can see", + "onArrival": "the bar begins to slide across", + "because": "the hour was set by a council that no longer sits", + "offer": "hold the bar and it will stay open behind you" + }, + { + "occupant": "the Searcher", + "doing": "turning out a bag that keeps refilling", + "onArrival": "it asks you to empty your pockets, apologetically", + "because": "the search must be thorough and never is", + "offer": "let it search you properly and the Watch leaves you alone thereafter" + }, + { + "occupant": "three of the Watch", + "doing": "standing at a corner, facing outward", + "onArrival": "they part to let you through without being asked", + "because": "something is expected from the road and it is not you", + "offer": "ask what they are watching for and they will tell you exactly" + } + ], + "temptations": [ + { + "id": "gatekeys", + "cue": "one of the four gate-keys", + "benefit": "one gate per scene opens for you", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the Watch counts the keys nightly and one is missing" + }, + { + "id": "papers", + "cue": "a set of papers with a good seal and a blank name", + "benefit": "pass any check in the town without a roll", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you must answer to the name you wrote" + }, + { + "id": "watchcode", + "cue": "a scrap listing the chalk-code", + "benefit": "once, know exactly which house is watched", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you begin marking doors yourself without noticing" + }, + { + "id": "curfewbell", + "cue": "a hand-bell from a watch-box", + "benefit": "ring it and the street empties for one scene", + "useCost": { + "bane": 2 + }, + "standingDrawback": "the Watch comes to see who rang", + "acceptanceCost": { + "vice": "Pride" + } + }, + { + "id": "strangersbook", + "cue": "a page of the strangers' book", + "benefit": "once, prove you were here all along", + "useCost": { + "bane": 1 + }, + "standingDrawback": "someone else's alibi is now missing" + } + ] + }, + "thoroughfare": { + "danger": "passage", + "dangerLine": "the town needs the road to come through it, and will arrange that", + "trigger": "lingering", + "facets": { + "institution": [ + "milestones all pointing here, some of them moved", + "a bridge that is the only bridge for a day's ride", + "roads that all bend, slightly, toward the square" + ], + "ritual": [ + "a toll taken at a bar that swings on nothing", + "carts waved through by a hand at a window", + "a road swept before a coach that never comes" + ], + "demand": [ + "a market you must cross to get anywhere at all", + "a square with one exit visible and three not", + "a street that returns you to where you started" + ], + "wound": [ + "a rival town's milestone, broken and kept", + "a road washed out and never repaired, deliberately", + "a bypass surveyed, staked, and the stakes pulled up" + ], + "anchor": [ + "the milestone that says all roads pass here", + "a map with one road drawn heavier than the rest", + "a bridge-toll board, the figures freshly cut" + ] + }, + "features": [ + "a signpost turned to point the wrong way", + "a road newly blocked with a felled tree", + "cart-ruts that stop in the middle of a field", + "a bridge plank taken up and laid beside the gap", + "survey stakes pulled up and stacked", + "a milestone with the distance recut" + ], + "decisions": [ + { + "cue": "a signpost that has plainly been turned", + "cost": "following it goes somewhere the town wants you to go", + "resolve": { + "roll": "Wits 2", + "success": "you read the wear on the post and work out the true direction", + "failure": "you follow it and lose a Turn, arriving where the town intended", + "orElse": "ask a local: they will tell you truly, and the town will know you asked" + } + }, + { + "cue": "a toll-bar across the only bridge", + "cost": "the toll is small; the record of paying it is not", + "resolve": { + "roll": "Poise 2", + "success": "you pay and are entered as legitimate traffic — the town stops obstructing you", + "failure": "you argue the toll and the bar stays down: lose a Turn, +1 Bane", + "orElse": "ford it downstream: one Turn, everything gets wet" + } + }, + { + "cue": "a market you must cross, and it does not want you to cross quickly", + "cost": "the crowd is the obstacle and it is deliberate", + "resolve": { + "roll": "Flair 2", + "success": "you move through by seeming to belong, and are not delayed", + "failure": "you are drawn into three transactions and lose a Turn", + "orElse": "go round by the back lanes: one Turn, and you are noticed doing it" + } + }, + { + "cue": "survey stakes for a bypass, pulled up and stacked", + "cost": "replanting them is a declaration of war on the town", + "resolve": { + "roll": "Brawn 2", + "success": "you replant enough to matter and the surveyors' ghosts owe you", + "failure": "you are seen at it: the Corporation treats you as hostile from here", + "orElse": "leave them stacked; the bypass stays unbuilt" + } + }, + { + "cue": "a square with three exits and only one that leaves", + "cost": "the other two return you here", + "resolve": { + "roll": "Wits 2", + "success": "you spot which street the ruts actually leave by", + "failure": "you take a returning street: lose a Turn and roll the clock", + "orElse": "follow a cart out: whichever way it goes, one Turn" + } + }, + { + "cue": "a milestone recut to move the town closer to everywhere", + "cost": "correcting it is honest and unwelcome", + "resolve": { + "roll": "Wits 1", + "success": "you read the older cut beneath and know the true distances", + "failure": "you accept the new figures and misjudge your time: lose a Turn", + "orElse": "take the milestone at its word and hurry" + } + } + ], + "situations": [ + { + "occupant": "the Tollkeeper", + "doing": "raising a bar that hangs on nothing at all", + "onArrival": "it names a toll and waits, hand out", + "because": "the bridge must be paid for and the bridge is gone", + "offer": "pay anything and it will tell you the true road" + }, + { + "occupant": "a carter", + "doing": "arguing with a signpost that has been turned", + "onArrival": "they appeal to you as a witness", + "because": "they have been round this way three times", + "offer": "settle the argument and they will carry you a stage" + }, + { + "occupant": "the Surveyor", + "doing": "staking out a bypass that the town keeps pulling up", + "onArrival": "it hands you the mallet without looking", + "because": "the survey must be completed and never is", + "offer": "drive one stake and it will show you the shortest way through" + }, + { + "occupant": "two of the Corporation", + "doing": "recutting a milestone, closer", + "onArrival": "they stand in front of the figures as you approach", + "because": "the distances must favour the town", + "offer": "admire the work and they will tell you the real distance, privately" + }, + { + "occupant": "a crowd", + "doing": "filling a square that was empty a moment ago", + "onArrival": "it closes gently around you and does not let you hurry", + "because": "the market must be busy when strangers pass", + "offer": "buy something and the crowd opens" + }, + { + "occupant": "the Bridge", + "doing": "holding itself up on a span that is not there", + "onArrival": "the planks settle as you step on", + "because": "the crossing must exist because the charter says so", + "offer": "cross confidently and it holds; hesitate and it does not" + } + ], + "temptations": [ + { + "id": "milestone", + "cue": "a milestone small enough to carry", + "benefit": "once, make a journey shorter than it is", + "useCost": { + "bane": 1 + }, + "standingDrawback": "distances you did not carry get longer" + }, + { + "id": "tollboard", + "cue": "a toll-board with the figures cut", + "benefit": "once, demand passage and be given it", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you are expected to keep the bridge in repair" + }, + { + "id": "roadmap", + "cue": "a map with one road drawn heavier", + "benefit": "never lose your way in the town", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you cannot see the roads it leaves out" + }, + { + "id": "bar", + "cue": "a length of toll-bar, iron-shod", + "benefit": "once, close a way behind you that nothing can pass", + "useCost": { + "bane": 2 + }, + "standingDrawback": "whatever you shut out waits at that spot", + "acceptanceCost": { + "vice": "Pride" + } + }, + { + "id": "carterswhip", + "cue": "a carter's whip, worn to the handle", + "benefit": "once, make anything give way and let you through", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the town treats you as traffic, not a guest" + } + ] + } + }, + "placeNameStyle": "own" +} \ No newline at end of file diff --git a/core/skeleton.mjs b/core/skeleton.mjs index 28e7ebe..48b1d36 100644 --- a/core/skeleton.mjs +++ b/core/skeleton.mjs @@ -64,6 +64,7 @@ export function generateSkeleton({ pack, areas = 6, ending = 'authored', rng }) const transgression = `The ${claimant} ${fill(accommodation.text, { conscript: appetite.conscript })}, ` + `so that ${appetite.purpose}.`; + // The bottom problem is the claimant itself — a person in a tomb, an office in a town. const bottomProblem = { label: `The ${claimant}`, @@ -79,8 +80,11 @@ export function generateSkeleton({ pack, areas = 6, ending = 'authored', rng }) }; const secondary = r.derive('faction2').pick(pack.factions.filter(f => f.id !== primary.id)); - // Named for its occupant. Drawing the name separately produced tombs named after strangers. - const placeName = `${r.derive('place').pick(pack.placeNames.first)} ${claimant}`; + // A barrow or keep is named for its occupant — drawing that separately produced tombs named + // after strangers. A settlement is not: it has its own name and the claimant merely runs it. + const placeName = pack.placeNameStyle === 'own' + ? `${r.derive('place1').pick(pack.placeNames.first)} ${r.derive('place2').pick(pack.placeNames.second)}` + : `${r.derive('place').pick(pack.placeNames.first)} ${claimant}`; // ---- the foreshadow chain ---------------------------------------------- const progression = pack.facetProgression ?? {}; diff --git a/foundry-module/module.json b/foundry-module/module.json index e5b55ed..76f694e 100644 --- a/foundry-module/module.json +++ b/foundry-module/module.json @@ -2,7 +2,7 @@ "id": "vanity-delve", "title": "DELVE — a dungeon layer for VANITY", "description": "Generates a coherent delve and sequences VANITY's Forge to stage it, one area at a time.", - "version": "0.2.0", + "version": "0.3.0", "compatibility": { "minimum": "13", "verified": "14.365" diff --git a/foundry-module/module/core/content/barrow.json b/foundry-module/module/core/content/barrow.json index b1c72d3..ce36ac7 100644 --- a/foundry-module/module/core/content/barrow.json +++ b/foundry-module/module/core/content/barrow.json @@ -25,7 +25,8 @@ "bane": 1 }, "repeatable": true - } + }, + "asks": "\"How do I look?\"" }, { "id": "remembered", @@ -47,7 +48,8 @@ "bane": 1 }, "repeatable": true - } + }, + "asks": "\"Say my name.\"" }, { "id": "obeyed", @@ -69,7 +71,8 @@ "bane": 1 }, "repeatable": true - } + }, + "asks": "\"Do as you are told.\"" }, { "id": "young", @@ -91,7 +94,8 @@ "bane": 1 }, "repeatable": true - } + }, + "asks": "\"Tell me I have not changed.\"" }, { "id": "envied", @@ -113,7 +117,8 @@ "bane": 1 }, "repeatable": true - } + }, + "asks": "\"What did you bring me?\"" }, { "id": "attended", @@ -135,7 +140,8 @@ "bane": 1 }, "repeatable": true - } + }, + "asks": "\"You are not leaving.\"" }, { "id": "forgiven", @@ -157,7 +163,8 @@ "bane": 1 }, "repeatable": true - } + }, + "asks": "\"Tell me it was not a sin.\"" }, { "id": "first", @@ -179,7 +186,8 @@ "bane": 1 }, "repeatable": true - } + }, + "asks": "\"Who goes first?\"" } ], "accommodations": [ @@ -2146,5 +2154,6 @@ "lingering": "stayed in one place longer than it takes to search it", "disturbed": "struck or moved something that had not moved in centuries" }, - "_globalPoolsNote": "decisions/temptations/features below are FALLBACKS ONLY. Real content is motif-scoped under motifs.." + "_globalPoolsNote": "decisions/temptations/features below are FALLBACKS ONLY. Real content is motif-scoped under motifs..", + "placeNameStyle": "claimant" } \ No newline at end of file diff --git a/foundry-module/module/core/content/castle.json b/foundry-module/module/core/content/castle.json index efddf2c..c3281d5 100644 --- a/foundry-module/module/core/content/castle.json +++ b/foundry-module/module/core/content/castle.json @@ -1169,5 +1169,6 @@ } ] } - } + }, + "placeNameStyle": "claimant" } \ No newline at end of file diff --git a/foundry-module/module/core/content/forest.json b/foundry-module/module/core/content/forest.json new file mode 100644 index 0000000..6c37bbb --- /dev/null +++ b/foundry-module/module/core/content/forest.json @@ -0,0 +1,1176 @@ +{ + "id": "forest", + "label": "Forest", + "forgeStageType": "forest", + "schema": 1, + "_model": "The wild kernel: the APPETITE belongs to the place itself. A wood wants to be entered, fed, spread, or left uncounted, and the ACCOMMODATION is what it did to whoever was here — took them, grew through them, let them wander. Claimants are the wood's own names for itself.", + "facetProgression": { + "approach": "institution", + "complication": "ritual", + "turn": "demand", + "descent": "wound", + "threshold": "anchor", + "ending": "demand" + }, + "claimants": [ + "Green Man", + "Antlered Thing", + "Lady of Thorns", + "First Tree", + "Wood's Own", + "Charcoal-Burner", + "Hunt That Does Not End" + ], + "appetites": [ + { + "id": "entered", + "want": "to be walked into and never out of", + "lack": "walked out of", + "purpose": "nobody would ever find the far side", + "motif": "paths", + "prize": "lantern", + "conscript": "the travellers", + "asks": "\"Which way did you think you were going?\"", + "appeasement": { + "move": "walk in deliberately, and say aloud that you mean to", + "attribute": "Poise", + "successes": 2, + "why": "someone came in on purpose", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "fed", + "want": "to be given something at the edge", + "lack": "unfed", + "purpose": "nobody would ever pass without paying", + "motif": "tithe", + "prize": "bowl", + "conscript": "the offerings", + "asks": "\"What have you brought me?\"", + "appeasement": { + "move": "leave something of value at a root, without asking anything", + "attribute": "Flair", + "successes": 2, + "why": "the wood has been given something", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "spreading", + "want": "to grow over everything that was ever cleared", + "lack": "held back", + "purpose": "nothing would ever stay cut", + "motif": "reclaiming", + "prize": "axe", + "conscript": "the woodsmen", + "asks": "\"Why do you cut me?\"", + "appeasement": { + "move": "let something of yours be taken and grown over", + "attribute": "Poise", + "successes": 2, + "why": "the wood has taken back a little more", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "uncounted", + "want": "never to be mapped or measured", + "lack": "surveyed", + "purpose": "nobody would ever say how big it is", + "motif": "trackless", + "prize": "chain", + "conscript": "the surveyors", + "asks": "\"Do you know where you are?\"", + "appeasement": { + "move": "admit aloud that you are lost, and mean it", + "attribute": "Wits", + "successes": 2, + "why": "nobody can say where they are", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + } + ], + "accommodations": [ + { + "id": "took", + "text": "took {conscript} one at a time and did not give them back", + "cruelty": 3, + "fits": [ + "entered", + "fed", + "uncounted" + ] + }, + { + "id": "grewthrough", + "text": "grew through {conscript} until there was more wood than not", + "cruelty": 3, + "fits": [ + "spreading", + "fed", + "entered" + ] + }, + { + "id": "wandered", + "text": "let {conscript} wander until they stopped wanting to leave", + "cruelty": 2, + "fits": [ + "entered", + "uncounted", + "spreading" + ] + }, + { + "id": "traded", + "text": "took {conscript} for a season and returned something else", + "cruelty": 2, + "fits": [ + "fed", + "entered", + "uncounted" + ] + }, + { + "id": "edged", + "text": "kept {conscript} at the treeline, facing out, as a warning", + "cruelty": 3, + "fits": [ + "spreading", + "fed", + "uncounted" + ] + }, + { + "id": "rooted", + "text": "let {conscript} put down roots where they stood", + "cruelty": 1, + "fits": [ + "spreading", + "entered", + "fed" + ] + } + ], + "prizes": { + "lantern": { + "label": "the lantern that still shows the way out", + "function": "the only thing here that knows a direction" + }, + "bowl": { + "label": "the bowl the offerings were left in", + "function": "the only place the wood has ever been satisfied" + }, + "axe": { + "label": "the axe that held the treeline for a century", + "function": "the only thing that ever cut and stayed cut" + }, + "chain": { + "label": "a surveyor's chain, complete", + "function": "the only honest measurement anyone took" + } + }, + "placeNames": { + "first": [ + "The Wood of the", + "The Green of the", + "Under the", + "The Thicket of the", + "The Old Wood of the" + ] + }, + "areaNames": { + "approach": [ + "The Treeline", + "The Ride", + "The Verge", + "The Coppice Edge", + "The Old Track" + ], + "complication": [ + "The Coppice", + "The Charcoal Burns", + "The Deer Lawn", + "The Hollow Way", + "The Bramble Break" + ], + "turn": [ + "The Clearing", + "The Standing Stones", + "The Green Ride", + "The Crossways", + "The Sunken Glade" + ], + "descent": [ + "The Deep Wood", + "The Blackthorn", + "The Fallen Ground", + "The Wet Wood", + "The Root Hollow" + ], + "threshold": [ + "The Grove", + "The Ring of Oaks", + "The Last Clearing", + "The Thorn Gate", + "The Still Place" + ], + "ending": [ + "The First Tree", + "The Heart of the Wood", + "Where the Green Man Waits", + "The Oldest Clearing" + ] + }, + "factions": [ + { + "id": "taken", + "name": "the Taken", + "kind": "undead", + "essence": "still walking the paths they were lost on", + "handledBy": "courtesy" + }, + { + "id": "foresters", + "name": "charcoal-burners", + "kind": "living", + "essence": "working a wood that is working on them", + "handledBy": "trade" + }, + { + "id": "hunt", + "name": "the Hunt", + "kind": "beast", + "essence": "running something down, and has been for a long time", + "handledBy": "standing still" + }, + { + "id": "thorns", + "name": "what grew over the rest", + "kind": "beast", + "essence": "neither knows nor cares who came through", + "handledBy": "force" + } + ], + "triggerGlossary": { + "announced": "came in by the ride, singing or talking, as travellers do", + "seenTwice": "passed the same tree twice, or were watched from two sides", + "loud": "an axe, a shout, a horn — the wood minds all three", + "lingering": "stopped moving long enough for the wood to catch up", + "disturbed": "cut, broke or took something growing" + }, + "rosters": { + "skirmish": { + "line": "a Bat Swarm and 2 Giant Rats in the leaf-litter", + "foes": [ + { + "n": 1, + "name": "Bat Swarm", + "atk": 3, + "def": 3, + "grit": 1, + "nerve": 2, + "note": "disperses to nothing and re-forms" + }, + { + "n": 2, + "name": "Giant Rat", + "atk": 2, + "def": 2, + "grit": 1, + "nerve": 2, + "note": "flees from fire" + } + ], + "harmedBy": "anything; fire scatters all of it", + "avoid": "stand still and they pass around you" + }, + "fight": { + "line": "2 Dire Wolves", + "foes": [ + { + "n": 2, + "name": "Dire Wolf", + "atk": 4, + "def": 3, + "grit": 5, + "nerve": 3, + "note": "circles; takes the one who runs" + } + ], + "harmedBy": "anything", + "avoid": "nobody runs and they will not commit" + }, + "battle": { + "line": "1 Troll under the roots and 2 Dire Wolves", + "foes": [ + { + "n": 1, + "name": "Troll", + "atk": 5, + "def": 3, + "grit": 12, + "nerve": 4, + "note": "regrows unless the wound is burned" + }, + { + "n": 2, + "name": "Dire Wolf", + "atk": 4, + "def": 3, + "grit": 5, + "nerve": 3, + "note": "circles" + } + ], + "harmedBy": "anything, but the Troll only stays down if fire closes the wound", + "avoid": "it is territorial and will not follow past the treeline" + }, + "nightmare": { + "line": "the Hunt: 1 Wraith mounted, 1 Troll and 4 Dire Wolves", + "foes": [ + { + "n": 1, + "name": "Wraith", + "atk": 5, + "def": 3, + "grit": 10, + "nerve": 5, + "note": "INCORPOREAL — chill touch ignores armour, drains 1 max Grit" + }, + { + "n": 1, + "name": "Troll", + "atk": 5, + "def": 3, + "grit": 12, + "nerve": 4, + "note": "regrows unless burned" + }, + { + "n": 4, + "name": "Dire Wolf", + "atk": 4, + "def": 3, + "grit": 5, + "nerve": 3, + "note": "runs down anything that flees" + } + ], + "harmedBy": "blessed, silvered or magical weapons for the Wraith ONLY; fire for the Troll; anything for the wolves", + "avoid": "the Hunt passes over anyone standing perfectly still — say so before initiative" + } + }, + "motifs": { + "paths": { + "danger": "straying", + "dangerLine": "the wood is still taking people in, and it is patient about it", + "trigger": "lingering", + "facets": { + "institution": [ + "a ride cut straight for a mile and going nowhere", + "waymarks nailed to trees, all of them facing inward", + "a stile into the wood with no stile out" + ], + "ritual": [ + "boots left in a row at the treeline, toes pointing in", + "a path swept clear of leaf-fall by nothing at all", + "a lantern lit at dusk on a post with no road" + ], + "demand": [ + "a path that widens invitingly wherever you slow down", + "a clearing you keep arriving at from different directions", + "a track that is easier walking than the way back" + ], + "wound": [ + "one boot, worn through, a long way from any road", + "waymarks prised off and stacked at a root", + "a track worn deep by someone walking it for years" + ], + "anchor": [ + "a lantern still burning on a post at a crossway", + "a walking-staff planted upright, worn to the grain", + "a map-case, empty, hanging on a branch" + ] + }, + "features": [ + "a fresh blaze cut into bark, this season", + "a campfire cold but recent, with nobody's gear taken", + "a hat on a branch at head height", + "a path that was not there when you looked before", + "a coat folded neatly at a root", + "cart-ruts leading in and none leading out" + ], + "decisions": [ + { + "cue": "two paths, one plainly easier walking than the other", + "cost": "the wood made one of them easy on purpose", + "resolve": { + "roll": "Wits 2", + "success": "you read the leaf-fall and take the true path, losing no time", + "failure": "you take the easy path and it costs a Turn more than it should", + "orElse": "take the hard path deliberately: one Turn, but you know where you are" + } + }, + { + "cue": "a lantern burning on a post at a crossway", + "cost": "carrying it means the wood can see you coming", + "resolve": { + "roll": "Poise 2", + "success": "you take it and it shows the way — the party does not stray this delve", + "failure": "you take it and something starts walking toward the light", + "orElse": "leave it burning: no guidance, and no attention" + } + }, + { + "cue": "waymarks prised off and stacked at a root", + "cost": "resetting them is a service to whoever comes next", + "resolve": { + "roll": "Brawn 2", + "success": "you reset them and the Taken are grateful — they will guide you once", + "failure": "you are seen doing it and the wood closes a path behind you", + "orElse": "leave them stacked; you are not the wood's problem to solve" + } + }, + { + "cue": "a stranger's coat folded at a root, still dry", + "cost": "taking it is theft from someone probably still walking", + "resolve": { + "roll": "Wits 2", + "success": "you find the mark inside and learn who is still on these paths", + "failure": "you take it and something begins following at coat-distance", + "orElse": "leave it folded; you will pass it again" + } + }, + { + "cue": "a clearing you have now arrived at twice", + "cost": "the third time will not be a coincidence", + "resolve": { + "roll": "Wits 2", + "success": "you break the loop by leaving a mark and walking off it", + "failure": "you arrive a third time: lose a Turn and roll the clock", + "orElse": "walk out in a straight line whatever the ground does: one Turn, hard going" + } + }, + { + "cue": "a track worn deep by long use, going the wrong way", + "cost": "following it finds whoever wore it", + "resolve": { + "roll": "Poise 2", + "success": "you follow it and find them, and they can still be spoken to", + "failure": "you follow it and join it — the party walks it a Turn before noticing", + "orElse": "ignore it; the walker keeps walking" + } + } + ], + "situations": [ + { + "occupant": "one of the Taken", + "doing": "walking a path it has walked for a very long time", + "onArrival": "it falls into step beside you without a word", + "because": "it was never told it could stop", + "offer": "tell it the way out and it will show you a shortcut in return" + }, + { + "occupant": "a lantern on a post", + "doing": "burning steadily with nothing to burn", + "onArrival": "the flame turns toward you as you approach", + "because": "it was lit for someone who never came", + "offer": "carry it and the paths behave for one area" + }, + { + "occupant": "a living charcoal-burner", + "doing": "recutting a blaze the wood keeps growing over", + "onArrival": "they nod and keep working", + "because": "the marks must be kept or the burn cannot be found", + "offer": "help them cut and they will mark your route out" + }, + { + "occupant": "two of the Taken", + "doing": "standing at a fork, each facing a different way", + "onArrival": "they both turn to you to settle it", + "because": "they disagreed once and have not moved since", + "offer": "choose a path for them and both will walk it with you" + }, + { + "occupant": "the path", + "doing": "widening ahead of you into easy walking", + "onArrival": "the going becomes noticeably pleasant", + "because": "the wood is being welcoming", + "offer": "refuse the easy way aloud and the wood respects it" + }, + { + "occupant": "a walking-staff", + "doing": "standing upright where it was planted", + "onArrival": "the leaves around it are undisturbed", + "because": "whoever planted it meant to come back", + "offer": "take it up and the wood counts you a traveller, not a trespasser" + } + ], + "temptations": [ + { + "id": "lantern", + "cue": "a lantern that burns without fuel", + "benefit": "the party never loses its way", + "useCost": { + "bane": 1 + }, + "standingDrawback": "everything in the wood knows where you are" + }, + { + "id": "waymark", + "cue": "a waymark prised off a tree", + "benefit": "once, make a path lead where you say", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the path you displaced has to go somewhere" + }, + { + "id": "staff", + "cue": "a walking-staff worn to the grain", + "benefit": "once, walk out of anywhere in a straight line", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you cannot stop walking while you hold it" + }, + { + "id": "bootlace", + "cue": "a boot-lace from the row at the treeline", + "benefit": "once, retrace your steps exactly, however far", + "useCost": { + "bane": 2 + }, + "standingDrawback": "you retrace someone else's too", + "acceptanceCost": { + "vice": "Pride" + } + }, + { + "id": "mapcase", + "cue": "an empty map-case, oiled", + "benefit": "once, know the way to somewhere you have never been", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the wood learns where you wanted to go" + } + ] + }, + "tithe": { + "danger": "debt", + "dangerLine": "the wood is owed something, and it remembers who has not paid", + "trigger": "disturbed", + "facets": { + "institution": [ + "a stone at the treeline worn hollow by things set down on it", + "offerings nailed to a trunk at every height", + "a bowl at a root, never quite empty" + ], + "ritual": [ + "bread left out, untouched but not stale", + "a first cut of every coppice stacked and unburned", + "a horn sounded at the edge before anyone enters" + ], + "demand": [ + "a root grown across the path at exactly waist height", + "a hollow in a trunk at the height of an outstretched hand", + "a clearing where everything you carry feels heavier" + ], + "wound": [ + "offerings taken back, and the trees around them dead", + "a bowl smashed and the pieces kept in place", + "a treeline that has moved a field's width since the wall was built" + ], + "anchor": [ + "the offering-bowl itself, at the oldest root", + "a stone table with a hollow worn in the centre", + "a hoard of small given things in a hollow trunk" + ] + }, + "features": [ + "a fresh offering, still wet", + "a hollow tree stuffed with things nobody wanted", + "bread on a stone, untouched and not old", + "a coin pressed into bark and grown half over", + "a dead animal laid out deliberately, not eaten", + "a stack of first-cuttings, unburned" + ], + "decisions": [ + { + "cue": "a bowl at a root that is not quite empty", + "cost": "leaving something is cheap; taking something is not", + "resolve": { + "roll": "Flair 2", + "success": "you leave something well-chosen and the wood eases — no clock roll in this area", + "failure": "you leave something worthless and it is noticed: +1 Bane", + "orElse": "leave nothing and walk on; the wood keeps count" + } + }, + { + "cue": "a hollow trunk full of small given things", + "cost": "one of them is exactly what you need", + "resolve": { + "roll": "Wits 2", + "success": "you take one and leave one, and the exchange is accepted", + "failure": "you take without leaving, and the wood follows you the rest of the delve", + "orElse": "take nothing: the need goes unmet" + } + }, + { + "cue": "a root grown across the path at waist height", + "cost": "stepping over is trespass; going under is submission", + "resolve": { + "roll": "Poise 2", + "success": "you go under, which the wood counts as courtesy, and it lets you by", + "failure": "you step over and the wood treats you as a woodsman from here", + "orElse": "cut it: loud, roll the clock, and the wood remembers the cut" + } + }, + { + "cue": "a dead animal laid out deliberately at a crossway", + "cost": "it was left for something that has not come", + "resolve": { + "roll": "Wits 2", + "success": "you read what it was left for, and what that thing wants instead", + "failure": "you disturb it and whatever it was for arrives hungry", + "orElse": "leave it and go round: one Turn" + } + }, + { + "cue": "bread on a stone, fresh, in a wood with nobody in it", + "cost": "eating it accepts the wood's hospitality", + "resolve": { + "roll": "Poise 2", + "success": "you eat and are a guest — the Taken will not touch you this delve", + "failure": "you eat and are fed by the wood, which means you belong to it: +1 Bane", + "orElse": "do not eat; you stay hungry and free" + } + }, + { + "cue": "a coin pressed into bark and half grown over", + "cost": "prising it out takes back an offering", + "resolve": { + "roll": "Brawn 2", + "success": "you free it cleanly and the tree does not seem to mind", + "failure": "the bark tears and the wood takes something of yours instead", + "orElse": "leave it; it will be gone entirely in another century" + } + } + ], + "situations": [ + { + "occupant": "a living family", + "doing": "leaving bread on a stone and backing away from it", + "onArrival": "they gesture at you to be quiet, and to wait", + "because": "the tithe must be left and not watched", + "offer": "wait with them and they will share what the wood accepts" + }, + { + "occupant": "the offering-bowl", + "doing": "filling with rainwater that is not rain", + "onArrival": "the surface stills as you approach", + "because": "the bowl must not be empty", + "offer": "put something in it and the wood grants you one passage unmolested" + }, + { + "occupant": "one of the Taken", + "doing": "carrying an armful of small things toward a hollow trunk", + "onArrival": "it offers you the armful to hold", + "because": "the offerings must be collected and never are", + "offer": "help it carry and it will let you keep one" + }, + { + "occupant": "a charcoal-burner", + "doing": "stacking a first-cutting that will not be burned", + "onArrival": "they hand you an axe, handle first", + "because": "the first cut is owed and they cannot bring themselves to burn it", + "offer": "burn it for them and the wood counts the debt paid" + }, + { + "occupant": "the trees", + "doing": "closing a little around a stone with nothing on it", + "onArrival": "the gap you came through narrows", + "because": "something was due and was not left", + "offer": "leave anything at all and the gap opens" + }, + { + "occupant": "a horn", + "doing": "sounding at the treeline behind you", + "onArrival": "the note holds far longer than a horn should", + "because": "nobody announced themselves on the way in", + "offer": "answer it — shout back — and the wood treats you as expected" + } + ], + "temptations": [ + { + "id": "bowl", + "cue": "a shallow bowl worn smooth at the rim", + "benefit": "leave anything in it and the wood is satisfied, once", + "useCost": { + "bane": 1 + }, + "standingDrawback": "it must be filled again before you leave the wood" + }, + { + "id": "givenring", + "cue": "a ring from the hollow trunk, someone's offering", + "benefit": "once, be owed a favour by something in the wood", + "useCost": { + "bane": 1 + }, + "standingDrawback": "whoever gave it originally still wants it" + }, + { + "id": "firstcut", + "cue": "a bundle of first-cutting, unburned", + "benefit": "once, burn it to buy safe passage for a scene", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the smoke tells the wood exactly where you are" + }, + { + "id": "stonebread", + "cue": "bread from the offering-stone, still soft", + "benefit": "eat it and nothing in the wood will touch you", + "useCost": { + "bane": 2 + }, + "standingDrawback": "you are fed by the wood, and it counts you as its own", + "acceptanceCost": { + "vice": "Greed" + } + }, + { + "id": "barkcoin", + "cue": "a coin half grown into bark", + "benefit": "once, pay a debt you have not the means to pay", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the tree it came from is looking for it" + } + ] + }, + "reclaiming": { + "danger": "encroachment", + "dangerLine": "the wood is taking the ground back, and it does not stop while you watch", + "trigger": "lingering", + "facets": { + "institution": [ + "a field wall with trees growing out of the top of it", + "furrows still visible under twenty years of bramble", + "a gate standing on its own with wood on both sides" + ], + "ritual": [ + "coppice stools cut on a rotation nobody is keeping", + "a hedge laid by hands, thirty years ago, still holding", + "boundary trees marked and the marks grown shut" + ], + "demand": [ + "a clearing that is smaller than it was this morning", + "saplings standing in a doorway in a line", + "a path narrowing behind you as you walk it" + ], + "wound": [ + "a plough left in a furrow with a tree through it", + "a cottage with the roof gone and an oak in the hearth", + "an orchard gone feral, the grafts thrown off" + ], + "anchor": [ + "an axe in a stump, handle still sound", + "a hedging bill hung on a nail in a wall that is now a tree", + "a ring of stumps cut clean, and nothing regrown" + ] + }, + "features": [ + "a wall pushed over from the wood side, recently", + "a sapling in a doorway, this year's growth", + "a plough share polished by roots", + "a fence post with a living branch", + "a chimney standing alone in a thicket", + "a wheel-rut with a tree in the middle of it" + ], + "decisions": [ + { + "cue": "a clearing that is measurably smaller than the map says", + "cost": "the wood will not stop while you are watching it", + "resolve": { + "roll": "Wits 2", + "success": "you mark the edge and can tell how fast it is moving, which is useful", + "failure": "you lose the edge and the clearing closes a little around you", + "orElse": "move through fast and do not measure: one Turn, no knowledge" + } + }, + { + "cue": "an axe standing in a stump, handle sound", + "cost": "using it is a declaration; leaving it is a concession", + "resolve": { + "roll": "Brawn 2", + "success": "you cut what needs cutting and the ground stays open behind you", + "failure": "the cut does not take and the wood closes the way you came: lose a Turn", + "orElse": "leave the axe; the way narrows but nothing is provoked" + } + }, + { + "cue": "a cottage with an oak growing in the hearth", + "cost": "what is inside was never cleared out", + "resolve": { + "roll": "Wits 2", + "success": "you get in and out through the roots, and find what was left", + "failure": "the roots shift and the doorway closes: +1 Bane and a Turn to dig out", + "orElse": "leave it; whatever is inside stays inside" + } + }, + { + "cue": "a hedge laid by human hands, still holding, blocking the way", + "cost": "breaking it undoes a good piece of work", + "resolve": { + "roll": "Poise 2", + "success": "you find the layer's gap and pass without breaking a stem", + "failure": "you force through and the hedge is ruined: the wood counts it", + "orElse": "go round the hedge: two Turns" + } + }, + { + "cue": "saplings standing in a doorway in a deliberate line", + "cost": "pulling them is easy and will be noticed", + "resolve": { + "roll": "Brawn 2", + "success": "you pull them cleanly and replant them outside — the wood accepts the trade", + "failure": "you pull them and drop them: the wood takes something of yours in exchange", + "orElse": "step over them; the doorway is half closed and you are half through" + } + }, + { + "cue": "an orchard gone feral, and one tree still bearing", + "cost": "the fruit is good and it is not yours", + "resolve": { + "roll": "Flair 2", + "success": "you take fruit in a way the orchard permits, and are the better for it", + "failure": "you take too much and the orchard remembers the hand", + "orElse": "take none: you go hungry and unremarked" + } + } + ], + "situations": [ + { + "occupant": "a living farmer", + "doing": "cutting back a hedge that grew again behind them", + "onArrival": "they do not look up, and ask if you have a bill-hook", + "because": "the hedge must be kept and cannot be", + "offer": "cut with them and they will tell you where the old road ran" + }, + { + "occupant": "saplings", + "doing": "standing in a doorway in a straight line", + "onArrival": "the line shifts, very slightly, as you look at it", + "because": "the doorway is being closed", + "offer": "step through and say aloud that you are passing, and they let you" + }, + { + "occupant": "one of the Taken", + "doing": "laying a hedge with hands that are mostly root", + "onArrival": "it holds out a stem for you to bend", + "because": "the work was begun and must be finished", + "offer": "bend the stem and it will lay you a gap through anything" + }, + { + "occupant": "the clearing", + "doing": "closing by a hand's breadth while you stand in it", + "onArrival": "the light changes", + "because": "nothing cleared is permitted to stay cleared", + "offer": "cut one sapling and the clearing holds for the delve" + }, + { + "occupant": "an old orchard", + "doing": "dropping fruit in front of you as you pass", + "onArrival": "the fruit lands and does not roll", + "because": "the trees were tended once and remember it", + "offer": "eat, and the orchard will show you where the house was" + }, + { + "occupant": "two charcoal-burners", + "doing": "arguing over a coppice stool cut out of rotation", + "onArrival": "they appeal to you as a third opinion", + "because": "the rotation was lost and the wood is taking the difference", + "offer": "settle it and they will burn a path for you" + } + ], + "temptations": [ + { + "id": "axe", + "cue": "an axe with a sound handle", + "benefit": "once, cut a way through anything growing", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the wood counts every cut you make and settles later" + }, + { + "id": "hedgingbill", + "cue": "a hedging bill, oiled", + "benefit": "once, close a way behind you that nothing follows through", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the way stays shut for you too" + }, + { + "id": "graft", + "cue": "a graft from the last bearing tree", + "benefit": "once, make something grow where it should not", + "useCost": { + "bane": 1 + }, + "standingDrawback": "whatever you grow is the wood's, not yours" + }, + { + "id": "boundarystone", + "cue": "a boundary stone the wood has not yet swallowed", + "benefit": "once, hold a piece of ground against the wood for a scene", + "useCost": { + "bane": 2 + }, + "standingDrawback": "the wood takes twice that ground afterwards", + "acceptanceCost": { + "vice": "Greed" + } + }, + { + "id": "plough", + "cue": "an iron share off a buried plough", + "benefit": "once, break new ground and have it stay broken", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the wood knows there is iron in the party" + } + ] + }, + "trackless": { + "danger": "measurement", + "dangerLine": "the wood will not be counted, and it notices anyone trying", + "trigger": "seenTwice", + "facets": { + "institution": [ + "survey pegs driven in rows and every one at a different angle", + "a chain hung in a tree, complete, at head height", + "cairns built to mark a line that does not run straight" + ], + "ritual": [ + "a perambulation walked yearly and never finishing", + "a tally cut into a post, the count restarting", + "a rope measured out and coiled and measured again" + ], + "demand": [ + "ground that is longer walking than looking", + "a stand of trees that is not the same number twice", + "a distance that changes depending which way you go" + ], + "wound": [ + "a map torn into strips and nailed to six trees", + "a surveyor's theodolite smashed against its own tripod", + "a chain snapped and the links scattered along a mile" + ], + "anchor": [ + "a surveyor's chain, complete and coiled", + "a field-book with the last page filled in a shaking hand", + "a cairn with a brass plate under the top stone" + ] + }, + "features": [ + "survey pegs pulled and re-driven wrongly", + "a tally-post with the count started over", + "a rope coiled at a root, measured and unmeasured", + "a cairn built this season", + "a page of a field-book pinned to bark", + "chain-links scattered in a line through the leaf-litter" + ], + "decisions": [ + { + "cue": "a surveyor's chain hung complete in a tree", + "cost": "measuring anything here is the one thing the wood minds", + "resolve": { + "roll": "Wits 2", + "success": "you measure one distance honestly and it holds — you can trust that route", + "failure": "the measurement comes out different twice and you lose a Turn to it", + "orElse": "leave the chain hanging: no measurements, no offence" + } + }, + { + "cue": "a field-book with the last entry in a shaking hand", + "cost": "reading it tells you what the surveyor found", + "resolve": { + "roll": "Wits 1", + "success": "you read it and learn one true thing about the wood's shape", + "failure": "you read it aloud, and the wood hears itself described: +1 Bane", + "orElse": "leave it; the finding stays lost" + } + }, + { + "cue": "cairns marking a line that does not run straight", + "cost": "following the cairns is following someone else's error", + "resolve": { + "roll": "Wits 2", + "success": "you spot where the line was corrected and follow the true one", + "failure": "you follow the error and arrive somewhere you did not intend", + "orElse": "ignore the cairns entirely: one Turn, your own reckoning" + } + }, + { + "cue": "a stand of trees you have counted twice and got two answers", + "cost": "counting a third time is a challenge", + "resolve": { + "roll": "Poise 2", + "success": "you accept aloud that it cannot be counted, and the stand lets you through", + "failure": "you insist on a number and the stand does not open: lose a Turn", + "orElse": "do not count; walk through without looking too hard" + } + }, + { + "cue": "a map torn into strips and nailed to six trees", + "cost": "assembling it is possible and slow", + "resolve": { + "roll": "Wits 2", + "success": "you assemble enough of it to know where the far side is", + "failure": "you assemble it wrongly and are confidently mistaken for a Turn", + "orElse": "take one strip and go: you know a fragment, and no more" + } + }, + { + "cue": "a perambulation the Taken are still walking, and a gap in the line", + "cost": "joining the walk means walking it to the end", + "resolve": { + "roll": "Poise 2", + "success": "you join, walk one leg, and are let out at a place you chose", + "failure": "you join and the walk does not end where you hoped: lose a Turn", + "orElse": "let them pass: they nod, and the wood notes that you did not join" + } + } + ], + "situations": [ + { + "occupant": "a surveyor", + "doing": "measuring the same distance for the fourth time", + "onArrival": "it asks you to hold the far end of a chain", + "because": "the survey must close and has never closed", + "offer": "hold the chain and it will tell you the one distance it trusts" + }, + { + "occupant": "the trees", + "doing": "standing in a number that is not the same twice", + "onArrival": "the count you began comes out differently", + "because": "the wood will not be enumerated", + "offer": "stop counting aloud and the stand opens" + }, + { + "occupant": "one of the Taken", + "doing": "walking a perambulation with a gap in the line where someone dropped out", + "onArrival": "it beckons you into the gap", + "because": "the bounds must be walked by a full company", + "offer": "walk one leg with them and they will set you down wherever you name" + }, + { + "occupant": "a living cartographer", + "doing": "tearing up their own map, carefully, into strips", + "onArrival": "they offer you a strip without explanation", + "because": "the map was wrong and they would rather it were nowhere", + "offer": "take the strip and it shows one true thing" + }, + { + "occupant": "a cairn", + "doing": "standing where no cairn was a moment ago", + "onArrival": "the top stone is warm", + "because": "the line must be marked and the line keeps moving", + "offer": "add a stone and the cairns lead you somewhere useful, once" + }, + { + "occupant": "a tally-post", + "doing": "carrying a count that has restarted many times", + "onArrival": "the fresh cut is very fresh", + "because": "something is still counting and cannot finish", + "offer": "cut the next tally yourself and the wood accepts the number" + } + ], + "temptations": [ + { + "id": "chain", + "cue": "a surveyor's chain, complete", + "benefit": "once, know a true distance in the wood", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the wood knows you measured it" + }, + { + "id": "fieldbook", + "cue": "a field-book with one honest page", + "benefit": "once, know exactly where you are", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you cannot be lost, and the wood dislikes that" + }, + { + "id": "brassplate", + "cue": "a brass plate from under a cairn", + "benefit": "once, fix a place so it stays where it is", + "useCost": { + "bane": 1 + }, + "standingDrawback": "everything around that place moves instead" + }, + { + "id": "mapstrip", + "cue": "a strip of a torn map", + "benefit": "once, find the far side of anything", + "useCost": { + "bane": 2 + }, + "standingDrawback": "the rest of the map wants to be reassembled", + "acceptanceCost": { + "vice": "Pride" + } + }, + { + "id": "tallypost", + "cue": "a section of tally-post", + "benefit": "once, make a count come out the same twice", + "useCost": { + "bane": 1 + }, + "standingDrawback": "something begins counting you" + } + ] + } + }, + "placeNameStyle": "claimant" +} \ No newline at end of file diff --git a/foundry-module/module/core/content/index.json b/foundry-module/module/core/content/index.json index 65af274..9d363ae 100644 --- a/foundry-module/module/core/content/index.json +++ b/foundry-module/module/core/content/index.json @@ -12,6 +12,18 @@ "label": "Castle", "geometry": "barrow", "motifs": 4 + }, + { + "id": "forest", + "label": "Forest", + "geometry": "forest", + "motifs": 4 + }, + { + "id": "town", + "label": "Town", + "geometry": "village", + "motifs": 4 } ] } \ No newline at end of file diff --git a/foundry-module/module/core/content/town.json b/foundry-module/module/core/content/town.json new file mode 100644 index 0000000..01923f9 --- /dev/null +++ b/foundry-module/module/core/content/town.json @@ -0,0 +1,1190 @@ +{ + "id": "town", + "label": "Town", + "forgeStageType": "village", + "schema": 1, + "_model": "The settlement kernel: the APPETITE belongs to the place, not to a buried person. A town wants to be prosperous, respectable, safe or necessary, and its ACCOMMODATION is what a corporation does to keep it that way — price people out, charter them away, wall them off. Claimants are offices, not corpses.", + "facetProgression": { + "approach": "institution", + "complication": "ritual", + "turn": "demand", + "descent": "wound", + "threshold": "anchor", + "ending": "demand" + }, + "claimants": [ + "Guild of Mercers", + "Corporation", + "Watch Committee", + "Burgesses", + "Mayor-for-Life", + "Market Court", + "Company of Wool" + ], + "appetites": [ + { + "id": "prosperous", + "want": "never to be poor again", + "lack": "poor", + "purpose": "the money would never leave", + "motif": "ledger", + "prize": "charter", + "conscript": "the debtors", + "asks": "\"Who is paying for this?\"", + "appeasement": { + "move": "pay a debt that is not yours, in public", + "attribute": "Poise", + "successes": 2, + "why": "the books balance again", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "respectable", + "want": "never to be shamed", + "lack": "shamed", + "purpose": "nothing unseemly would ever be visible", + "motif": "appearances", + "prize": "portrait", + "conscript": "the shameful", + "asks": "\"What will people say?\"", + "appeasement": { + "move": "compliment the town on how well it is kept, in the street", + "attribute": "Flair", + "successes": 2, + "why": "the town is admired again", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "safe", + "want": "never to be sacked again", + "lack": "threatened", + "purpose": "nothing would ever get in", + "motif": "vigilance", + "prize": "keys", + "conscript": "the strangers", + "asks": "\"Who let you in?\"", + "appeasement": { + "move": "submit to being searched, without complaint", + "attribute": "Poise", + "successes": 2, + "why": "a stranger has been checked, properly", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + }, + { + "id": "necessary", + "want": "never to be bypassed", + "lack": "bypassed", + "purpose": "the road would always come through here", + "motif": "thoroughfare", + "prize": "milestone", + "conscript": "the carters", + "asks": "\"Where do you think you are going?\"", + "appeasement": { + "move": "ask the town for directions, and take them", + "attribute": "Wits", + "successes": 2, + "why": "the town was needed for something", + "gain": { + "vanity": 1 + }, + "cost": { + "bane": 1 + }, + "repeatable": true + } + } + ], + "accommodations": [ + { + "id": "priced", + "text": "priced {conscript} out until they left of their own accord", + "cruelty": 2, + "fits": [ + "prosperous", + "respectable", + "necessary" + ] + }, + { + "id": "chartered", + "text": "chartered {conscript} away to another town entirely", + "cruelty": 2, + "fits": [ + "prosperous", + "respectable", + "safe" + ] + }, + { + "id": "walled", + "text": "walled {conscript} outside the gates and did not open them", + "cruelty": 3, + "fits": [ + "safe", + "respectable", + "prosperous" + ] + }, + { + "id": "indentured", + "text": "indentured {conscript} to the corporation for three generations", + "cruelty": 3, + "fits": [ + "prosperous", + "necessary" + ] + }, + { + "id": "struck", + "text": "struck {conscript} from the rolls, so the town could say they had never been here", + "cruelty": 3, + "fits": [ + "respectable", + "safe", + "necessary" + ] + }, + { + "id": "housed", + "text": "housed {conscript} where they could not be seen from the square", + "cruelty": 1, + "fits": [ + "respectable", + "safe", + "prosperous" + ] + } + ], + "prizes": { + "charter": { + "label": "the charter that made the town rich", + "function": "the only proof the privilege was ever granted" + }, + "portrait": { + "label": "the town's official portrait of itself", + "function": "the version everyone agreed to remember" + }, + "keys": { + "label": "the keys to the gates, all four", + "function": "the only things the walls answer to" + }, + "milestone": { + "label": "the milestone that says all roads pass here", + "function": "the reason anyone ever came" + } + }, + "placeNames": { + "first": [ + "Market", + "Nether", + "Old", + "Kings", + "Salt", + "Stone", + "Bridge", + "Cold" + ], + "second": [ + "Harrow", + "Weld", + "Combe", + "Barrow", + "Stanton", + "Marden", + "Fordwich", + "Thrale", + "Winbury", + "Cawley" + ] + }, + "areaNames": { + "approach": [ + "The Toll Road", + "The North Gate", + "The Bridge", + "The Weighbridge", + "The Outskirts" + ], + "complication": [ + "The Market Square", + "The Shambles", + "The Wool Hall", + "The Almshouse Row", + "The Cornmarket" + ], + "turn": [ + "The Guildhall", + "The Counting House", + "The Assembly Rooms", + "The Exchange", + "The Session House" + ], + "descent": [ + "The Undercrofts", + "The Debtors' Yard", + "The Tanneries", + "The Back Lanes", + "The Drain" + ], + "threshold": [ + "The Mayor's Parlour", + "The Muniment Chest", + "The Strongroom", + "The Charter Room", + "The Private Office" + ], + "ending": [ + "The Council Chamber", + "The High Table", + "The Mayor's Seat", + "The Corporation Assembled" + ] + }, + "factions": [ + { + "id": "corporation", + "name": "the Corporation", + "kind": "undead", + "essence": "still meeting, still minuting, still deciding", + "handledBy": "courtesy" + }, + { + "id": "debtors", + "name": "the debtors", + "kind": "living", + "essence": "owed on and owing, and still here", + "handledBy": "trade" + }, + { + "id": "watch", + "name": "the Watch", + "kind": "undead", + "essence": "checking papers nobody has issued for centuries", + "handledBy": "proof of right" + }, + { + "id": "outsiders", + "name": "what came in anyway", + "kind": "beast", + "essence": "never read the charter", + "handledBy": "force" + } + ], + "triggerGlossary": { + "announced": "came in by the main gate and paid the toll, publicly", + "seenTwice": "noticed by two different windows, or a window and a watchman", + "loud": "a raised voice in a public place — the town minds that", + "lingering": "stood about in the square long enough to be asked your business", + "disturbed": "moved something the Corporation had placed" + }, + "rosters": { + "skirmish": { + "line": "3 Bandits in watchmen's coats", + "foes": [ + { + "n": 3, + "name": "Bandit", + "atk": 3, + "def": 3, + "grit": 2, + "nerve": 2, + "note": "asks for your papers first" + } + ], + "harmedBy": "anything", + "avoid": "produce any document with a seal and they will accept it" + }, + "fight": { + "line": "4 Bandits and a Hobgoblin Soldier as sergeant", + "foes": [ + { + "n": 1, + "name": "Hobgoblin Soldier", + "atk": 4, + "def": 3, + "grit": 5, + "nerve": 3, + "note": "the others hold while he lasts" + }, + { + "n": 4, + "name": "Bandit", + "atk": 3, + "def": 3, + "grit": 2, + "nerve": 2, + "note": "breaks when the sergeant falls" + } + ], + "harmedBy": "anything", + "avoid": "drop the sergeant and the rest are Nerve 2" + }, + "battle": { + "line": "1 Necromancer of the Corporation and 4 Skeletons", + "foes": [ + { + "n": 1, + "name": "Necromancer", + "atk": 4, + "def": 3, + "grit": 6, + "nerve": 4, + "note": "raises one Skeleton per round from the paupers' ground" + }, + { + "n": 4, + "name": "Skeleton", + "atk": 3, + "def": 2, + "grit": 1, + "nerve": 5, + "note": "fearless" + } + ], + "harmedBy": "anything — but the Skeletons keep coming until the Necromancer stops", + "avoid": "he is a clerk and will take a bribe, in coin, publicly" + }, + "nightmare": { + "line": "1 Wraith of the Mayor, 1 Necromancer and 5 Skeletons", + "foes": [ + { + "n": 1, + "name": "Wraith", + "atk": 5, + "def": 3, + "grit": 10, + "nerve": 5, + "note": "INCORPOREAL — chill touch ignores armour, drains 1 max Grit" + }, + { + "n": 1, + "name": "Necromancer", + "atk": 4, + "def": 3, + "grit": 6, + "nerve": 4, + "note": "keeps raising" + }, + { + "n": 5, + "name": "Skeleton", + "atk": 3, + "def": 2, + "grit": 1, + "nerve": 5, + "note": "fearless" + } + ], + "harmedBy": "blessed, silvered or magical weapons for the Wraith ONLY; anything for the rest", + "avoid": "do not run this without an appeasement route open" + } + }, + "motifs": { + "ledger": { + "danger": "debt", + "dangerLine": "the town is still owed, and it keeps very good records", + "trigger": "lingering", + "facets": { + "institution": [ + "a debt-board in the square, names chalked and re-chalked", + "weights and measures chained to a bench, all of them shaved", + "a counting house with the shutters open at every hour" + ], + "ritual": [ + "a market bell rung at an hour when nobody trades", + "accounts read aloud to an empty hall, quarterly", + "coins counted into a box that is already full" + ], + "demand": [ + "a table set for a settlement, two chairs, one occupied", + "a room where a price is named before you ask", + "a hand out, palm up, at every doorway" + ], + "wound": [ + "a ledger with a page cut out and the stub still in", + "houses emptied for arrears and never re-let", + "a debtor's stone worn hollow by kneeling" + ], + "anchor": [ + "a charter under glass, the seal intact", + "a strongbox with one document and no coin", + "a tally-stick split and both halves kept" + ] + }, + "features": [ + "fresh chalk on a debt-board, this week's hand", + "a shop cleared out overnight and the door left open", + "coin scattered and not picked up, which never happens here", + "a stall taken down in a hurry, the frame still standing", + "a ledger left open at a page somebody wanted found", + "a lock changed on a door that was never locked" + ], + "decisions": [ + { + "cue": "a debt-board with a name you could pay off, or add to", + "cost": "paying is public and generous; adding is quiet and cruel", + "resolve": { + "roll": "Poise 2", + "success": "you pay in the square and the Corporation counts you a benefactor", + "failure": "your coin is refused as insufficient, publicly: +1 Bane", + "orElse": "walk past the board; nothing changes and nothing is owed" + } + }, + { + "cue": "a toll demanded at a gate by nobody in particular", + "cost": "the toll is real even if the collector is not", + "resolve": { + "roll": "Wits 2", + "success": "you work out the correct toll from the board and pay exactly it — the gate opens", + "failure": "you overpay and are marked as someone with money: every price rises for you", + "orElse": "go round to the weighbridge: two Turns, no toll" + } + }, + { + "cue": "a set of shaved weights and a merchant about to use them", + "cost": "exposing the fraud makes an enemy of the guild", + "resolve": { + "roll": "Flair 2", + "success": "you expose it in a way that flatters the Corporation's honesty and gain their favour", + "failure": "you expose it clumsily and the guild closes ranks: +1 Bane", + "orElse": "say nothing; the merchant remembers your discretion" + } + }, + { + "cue": "a strongbox that opens to whoever holds the charter", + "cost": "you do not hold the charter", + "resolve": { + "roll": "Wits 2", + "success": "you find the charter's copy in the muniment chest and the box opens", + "failure": "the box holds and the attempt is entered in a ledger somewhere", + "orElse": "break it: loud, roll the clock, contents damaged" + } + }, + { + "cue": "a debtor offering information for the price of their arrears", + "cost": "their information is good; their arrears are not small", + "resolve": { + "roll": "Poise 2", + "success": "you settle the debt at a discount and get the whole of what they know", + "failure": "you pay in full and they tell you half", + "orElse": "refuse: they tell you nothing and follow you at a distance" + } + }, + { + "cue": "a tally-stick, split, with the other half somewhere in the town", + "cost": "matching it proves a claim worth having", + "resolve": { + "roll": "Wits 2", + "success": "you match it against the counting-house half and hold a claim the town honours", + "failure": "you match it wrongly and hold a claim on nothing: +1 Bane", + "orElse": "leave it: no claim, no obligation" + } + } + ], + "situations": [ + { + "occupant": "a clerk of the Corporation", + "doing": "chalking a debt-board that has no room left", + "onArrival": "it asks whether you have come to settle", + "because": "the accounts must balance and never have", + "offer": "settle any debt at all and the whole board is wiped, which it badly wants" + }, + { + "occupant": "two living debtors", + "doing": "dividing a purse that is plainly not theirs", + "onArrival": "they stop and offer you a share", + "because": "they were paid to leave and could not", + "offer": "take the share and they will tell you who paid them" + }, + { + "occupant": "the Weighmaster", + "doing": "testing weights that are every one of them short", + "onArrival": "it hands you a weight and asks your honest opinion", + "because": "the measures must be certified and cannot be", + "offer": "certify them anyway and every trader in the town owes you" + }, + { + "occupant": "a market bell", + "doing": "ringing an hour when no trade is permitted", + "onArrival": "the square begins, very slowly, to fill", + "because": "the hour was never struck from the calendar", + "offer": "trade something, anything, and the market recognises you as a burgess" + }, + { + "occupant": "the Chamberlain", + "doing": "counting coin into a box that is already full", + "onArrival": "it does not look up, and asks you to hold the lid", + "because": "the count has never once come out right", + "offer": "hold the lid and it will tell you which house the shortfall went to" + }, + { + "occupant": "a living creditor", + "doing": "waiting outside a door with a writ and no bailiff", + "onArrival": "they ask if you are going in anyway", + "because": "the writ cannot be served without an officer", + "offer": "serve it for them and they hand you what is behind the door" + } + ], + "temptations": [ + { + "id": "charterseal", + "cue": "a seal matrix for the town's charter", + "benefit": "doors that check privilege open for you", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the Corporation expects you at its next meeting" + }, + { + "id": "tallystick", + "cue": "half a split tally-stick", + "benefit": "once, prove a debt is owed to you and be believed", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the other half is out there and its holder is looking" + }, + { + "id": "shavedweight", + "cue": "a weight, subtly light", + "benefit": "once, make a trade come out in your favour", + "useCost": { + "bane": 1 + }, + "standingDrawback": "traders begin to check everything you hand them" + }, + { + "id": "writ", + "cue": "a writ of distraint, unserved, name blank", + "benefit": "name someone and the Watch will detain them once", + "useCost": { + "bane": 2 + }, + "standingDrawback": "your own name is on the reverse in the same clerk's hand", + "acceptanceCost": { + "vice": "Greed" + } + }, + { + "id": "keytocounting", + "cue": "a small key to a counting-house drawer", + "benefit": "one locked box per scene opens", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the Corporation notices what has been opened" + } + ] + }, + "appearances": { + "danger": "scandal", + "dangerLine": "the town is being looked at, and it has arranged itself accordingly", + "trigger": "seenTwice", + "facets": { + "institution": [ + "a square where every frontage is painted and every back is not", + "shutters on the side of the street the road can see", + "a fine hall with a fine door and no rooms behind it" + ], + "ritual": [ + "a procession route swept daily, and only that route", + "a mayor's portrait unveiled every year to the same crowd", + "best clothes laid out in every house, for a visit that never comes" + ], + "demand": [ + "a street arranged so a visitor is always in view", + "a mirror set at the end of the square, facing in", + "a bench positioned for being seen sitting on" + ], + "wound": [ + "a row of houses with the fronts kept and the backs collapsed", + "a name painted over on a shopfront, badly", + "a portrait with one figure scraped out of the group" + ], + "anchor": [ + "the town's own portrait of itself, framed and lit", + "a visitor's book with one page and many signatures", + "a plan of the town as it would like to be" + ] + }, + "features": [ + "fresh paint on one side of a street only", + "a curtain drawn across an alley mouth", + "a scandal-sheet trodden into the mud, still legible", + "a shopfront boarded and painted to look occupied", + "chairs set out in the square for an audience", + "a signboard taken down and the hooks left" + ], + "decisions": [ + { + "cue": "an alley the town would rather you did not walk down", + "cost": "walking it sees what the frontage hides", + "resolve": { + "roll": "Wits 2", + "success": "you go down and back unobserved, and learn what the town is covering", + "failure": "you are seen coming out of it: +1 Bane and the Corporation cools toward you", + "orElse": "stay on the swept route: one Turn longer, no offence given" + } + }, + { + "cue": "a scandal-sheet naming somebody still influential here", + "cost": "reading it aloud is a weapon; pocketing it is leverage", + "resolve": { + "roll": "Flair 2", + "success": "you use it to open a door that flattery alone would not", + "failure": "you are seen holding it and become the story: +1 Bane", + "orElse": "burn it: the town relaxes and thanks you without saying so" + } + }, + { + "cue": "a group portrait with one figure scraped out", + "cost": "asking who it was is a rude question here", + "resolve": { + "roll": "Poise 2", + "success": "you ask it delicately enough to be answered honestly", + "failure": "you ask badly and the room closes: the next encounter starts hostile", + "orElse": "do not ask; the gap goes unexplained and you are liked for it" + } + }, + { + "cue": "a procession forming that expects you to join or stand aside", + "cost": "joining is endorsement; standing aside is comment", + "resolve": { + "roll": "Flair 2", + "success": "you join well and the town takes you for a person of standing", + "failure": "you join badly and are laughed at: +1 Bane", + "orElse": "stand aside respectfully: neutral, and you lose one Turn" + } + }, + { + "cue": "a house-front with no house behind it, and a way through", + "cost": "the way through is real; the pretence is what matters", + "resolve": { + "roll": "Brawn 2", + "success": "you slip through without bringing the frontage down", + "failure": "the frontage comes down, publicly: roll the clock", + "orElse": "go round the block: one Turn" + } + }, + { + "cue": "a visitor's book open at a blank page", + "cost": "signing puts you on the record, favourably or otherwise", + "resolve": { + "roll": "Flair 1", + "success": "you sign in a way that flatters the town and doors open", + "failure": "you sign plainly and the town judges the hand: +1 Bane", + "orElse": "leave it unsigned; you remain a stranger and are treated as one" + } + } + ], + "situations": [ + { + "occupant": "two of the Corporation", + "doing": "painting a frontage that is already perfect", + "onArrival": "they ask you to stand back and judge the colour", + "because": "the street must look well from the road", + "offer": "approve the colour warmly and they will let you behind it" + }, + { + "occupant": "a portrait-painter", + "doing": "scraping a figure out of a group portrait", + "onArrival": "it pauses, brush up, and asks whether you know the face", + "because": "the town resolved that person had never been here", + "offer": "name the face and it will tell you what they did" + }, + { + "occupant": "the Beadle", + "doing": "sweeping a route that is already clean", + "onArrival": "it sweeps around you rather than asking you to move", + "because": "the route must be ready and the visit never comes", + "offer": "tell it the visitor has arrived and it will escort you anywhere" + }, + { + "occupant": "a living journalist", + "doing": "copying a notice down before it is taken away", + "onArrival": "they pocket the paper and smile at you carefully", + "because": "the story is real and the town is faster than they are", + "offer": "offer to distract the Beadle and they will share what they have" + }, + { + "occupant": "the Mayor", + "doing": "rehearsing a welcome to an empty square", + "onArrival": "it welcomes you instead, warmly and at length", + "because": "the speech has never once been given", + "offer": "let it finish and the town treats you as its guest of honour" + }, + { + "occupant": "three of the town", + "doing": "standing in their best clothes at their doors", + "onArrival": "they nod as you pass, and keep standing", + "because": "word went round that someone important was coming", + "offer": "be that someone and every door on the street opens" + } + ], + "temptations": [ + { + "id": "townportrait", + "cue": "a small copy of the town's own portrait", + "benefit": "show it and be taken for a person of standing", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you are expected to behave like one, publicly" + }, + { + "id": "visitorsbook", + "cue": "a page torn from the visitor's book", + "benefit": "once, be remembered as having been welcome here", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the page is missed, and the Corporation asks after it" + }, + { + "id": "scandalsheet", + "cue": "a scandal-sheet, folded small", + "benefit": "once, make one person here do as you ask", + "useCost": { + "bane": 2 + }, + "standingDrawback": "they will tell others what you are holding", + "acceptanceCost": { + "vice": "Greed" + } + }, + { + "id": "bestcoat", + "cue": "a good coat, cut for the square", + "benefit": "the Watch does not stop you", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you cannot be seen in the back lanes wearing it" + }, + { + "id": "paintpot", + "cue": "a pot of the town's own paint", + "benefit": "once, make something look sound that is not", + "useCost": { + "bane": 1 + }, + "standingDrawback": "whatever you painted will fail at the worst moment" + } + ] + }, + "vigilance": { + "danger": "suspicion", + "dangerLine": "the town is still watching the road, and you came down it", + "trigger": "announced", + "facets": { + "institution": [ + "a gate that is shut at an hour nobody remembers agreeing", + "watch-boxes at every corner, all of them occupied", + "a wall built higher on the side facing the road" + ], + "ritual": [ + "papers demanded at a gate that has no gatekeeper", + "a curfew bell rung to an empty street", + "a roll of strangers read out nightly" + ], + "demand": [ + "a room you must be searched to leave", + "a bench where you are asked to wait and be looked at", + "a window arranged so the square can see who calls" + ], + "wound": [ + "a gate barred from inside with the bar broken anyway", + "a list of strangers with every name struck through", + "a house burned deliberately, alone in its row" + ], + "anchor": [ + "four gate-keys on one ring, hung where all can see", + "a strangers' book with the last entry unfinished", + "a bar for a gate, oiled, never used" + ] + }, + "features": [ + "a gate barred at midday, with no reason given", + "shutters closed on one house only", + "a watch-box with the brazier still warm", + "chalk marks on doors, recent, in a code", + "a barricade half-built across a lane", + "a dog kennel, empty, chain snapped" + ], + "decisions": [ + { + "cue": "a watchman demanding papers you do not have", + "cost": "any document with a seal will do, if given confidently", + "resolve": { + "roll": "Poise 2", + "success": "you produce something and it is accepted; the Watch passes you through", + "failure": "your papers are refused and you are entered in the strangers' book: +1 Bane", + "orElse": "go over the wall by the tannery: one Turn and a Brawn roll" + } + }, + { + "cue": "a gate shut against the hour, and a wicket beside it", + "cost": "the wicket admits one person at a time", + "resolve": { + "roll": "Wits 2", + "success": "you work out the wicket's trick and the party passes one by one, unremarked", + "failure": "the wicket sticks and the noise brings the Watch: roll the clock", + "orElse": "wait for the gate to open on the bell: two Turns" + } + }, + { + "cue": "a search you can submit to, or refuse", + "cost": "submitting means showing what you carry", + "resolve": { + "roll": "Poise 2", + "success": "you submit and the Watch counts you honest — no further checks this delve", + "failure": "you refuse and are followed for the rest of the delve", + "orElse": "let them search only one of you: partial trust, one Turn" + } + }, + { + "cue": "chalk marks on doors in a code the Watch uses", + "cost": "reading it tells you which houses are being watched", + "resolve": { + "roll": "Wits 2", + "success": "you read the code and know which doors are safe to knock at", + "failure": "you copy a mark wrongly onto yourselves without realising", + "orElse": "ignore the marks; knock and find out" + } + }, + { + "cue": "a curfew bell about to ring", + "cost": "being on the street after it is an offence here", + "resolve": { + "roll": "Flair 2", + "success": "you talk your way into a doorway before it rings and are sheltered", + "failure": "you are caught out after curfew: +1 Bane and the Watch escorts you", + "orElse": "run for the gate: one Turn, loud, roll the clock" + } + }, + { + "cue": "a strangers' book with your description already in it", + "cost": "somebody entered you before you arrived", + "resolve": { + "roll": "Wits 2", + "success": "you find who wrote it and what else they wrote", + "failure": "you alter the entry and the alteration is noticed: +1 Bane", + "orElse": "leave it; the Watch has your description and uses it" + } + } + ], + "situations": [ + { + "occupant": "a watchman", + "doing": "checking papers nobody has carried for a century", + "onArrival": "it puts out a hand and waits", + "because": "the order to stand the watch was never rescinded", + "offer": "hand it anything with a seal and it will wave you through and salute" + }, + { + "occupant": "the Constable", + "doing": "reading a roll of strangers aloud in an empty street", + "onArrival": "it reaches a blank and looks up at you", + "because": "the roll must be complete before the gate may open", + "offer": "give it names — any names — and the gate opens" + }, + { + "occupant": "two living smugglers", + "doing": "waiting for the curfew bell before moving a crate", + "onArrival": "they put a finger to their lips and shrug", + "because": "the Watch is predictable and they are patient", + "offer": "help them shift it and they show you the way through the wall" + }, + { + "occupant": "a gate", + "doing": "closing itself, slowly, on no schedule you can see", + "onArrival": "the bar begins to slide across", + "because": "the hour was set by a council that no longer sits", + "offer": "hold the bar and it will stay open behind you" + }, + { + "occupant": "the Searcher", + "doing": "turning out a bag that keeps refilling", + "onArrival": "it asks you to empty your pockets, apologetically", + "because": "the search must be thorough and never is", + "offer": "let it search you properly and the Watch leaves you alone thereafter" + }, + { + "occupant": "three of the Watch", + "doing": "standing at a corner, facing outward", + "onArrival": "they part to let you through without being asked", + "because": "something is expected from the road and it is not you", + "offer": "ask what they are watching for and they will tell you exactly" + } + ], + "temptations": [ + { + "id": "gatekeys", + "cue": "one of the four gate-keys", + "benefit": "one gate per scene opens for you", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the Watch counts the keys nightly and one is missing" + }, + { + "id": "papers", + "cue": "a set of papers with a good seal and a blank name", + "benefit": "pass any check in the town without a roll", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you must answer to the name you wrote" + }, + { + "id": "watchcode", + "cue": "a scrap listing the chalk-code", + "benefit": "once, know exactly which house is watched", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you begin marking doors yourself without noticing" + }, + { + "id": "curfewbell", + "cue": "a hand-bell from a watch-box", + "benefit": "ring it and the street empties for one scene", + "useCost": { + "bane": 2 + }, + "standingDrawback": "the Watch comes to see who rang", + "acceptanceCost": { + "vice": "Pride" + } + }, + { + "id": "strangersbook", + "cue": "a page of the strangers' book", + "benefit": "once, prove you were here all along", + "useCost": { + "bane": 1 + }, + "standingDrawback": "someone else's alibi is now missing" + } + ] + }, + "thoroughfare": { + "danger": "passage", + "dangerLine": "the town needs the road to come through it, and will arrange that", + "trigger": "lingering", + "facets": { + "institution": [ + "milestones all pointing here, some of them moved", + "a bridge that is the only bridge for a day's ride", + "roads that all bend, slightly, toward the square" + ], + "ritual": [ + "a toll taken at a bar that swings on nothing", + "carts waved through by a hand at a window", + "a road swept before a coach that never comes" + ], + "demand": [ + "a market you must cross to get anywhere at all", + "a square with one exit visible and three not", + "a street that returns you to where you started" + ], + "wound": [ + "a rival town's milestone, broken and kept", + "a road washed out and never repaired, deliberately", + "a bypass surveyed, staked, and the stakes pulled up" + ], + "anchor": [ + "the milestone that says all roads pass here", + "a map with one road drawn heavier than the rest", + "a bridge-toll board, the figures freshly cut" + ] + }, + "features": [ + "a signpost turned to point the wrong way", + "a road newly blocked with a felled tree", + "cart-ruts that stop in the middle of a field", + "a bridge plank taken up and laid beside the gap", + "survey stakes pulled up and stacked", + "a milestone with the distance recut" + ], + "decisions": [ + { + "cue": "a signpost that has plainly been turned", + "cost": "following it goes somewhere the town wants you to go", + "resolve": { + "roll": "Wits 2", + "success": "you read the wear on the post and work out the true direction", + "failure": "you follow it and lose a Turn, arriving where the town intended", + "orElse": "ask a local: they will tell you truly, and the town will know you asked" + } + }, + { + "cue": "a toll-bar across the only bridge", + "cost": "the toll is small; the record of paying it is not", + "resolve": { + "roll": "Poise 2", + "success": "you pay and are entered as legitimate traffic — the town stops obstructing you", + "failure": "you argue the toll and the bar stays down: lose a Turn, +1 Bane", + "orElse": "ford it downstream: one Turn, everything gets wet" + } + }, + { + "cue": "a market you must cross, and it does not want you to cross quickly", + "cost": "the crowd is the obstacle and it is deliberate", + "resolve": { + "roll": "Flair 2", + "success": "you move through by seeming to belong, and are not delayed", + "failure": "you are drawn into three transactions and lose a Turn", + "orElse": "go round by the back lanes: one Turn, and you are noticed doing it" + } + }, + { + "cue": "survey stakes for a bypass, pulled up and stacked", + "cost": "replanting them is a declaration of war on the town", + "resolve": { + "roll": "Brawn 2", + "success": "you replant enough to matter and the surveyors' ghosts owe you", + "failure": "you are seen at it: the Corporation treats you as hostile from here", + "orElse": "leave them stacked; the bypass stays unbuilt" + } + }, + { + "cue": "a square with three exits and only one that leaves", + "cost": "the other two return you here", + "resolve": { + "roll": "Wits 2", + "success": "you spot which street the ruts actually leave by", + "failure": "you take a returning street: lose a Turn and roll the clock", + "orElse": "follow a cart out: whichever way it goes, one Turn" + } + }, + { + "cue": "a milestone recut to move the town closer to everywhere", + "cost": "correcting it is honest and unwelcome", + "resolve": { + "roll": "Wits 1", + "success": "you read the older cut beneath and know the true distances", + "failure": "you accept the new figures and misjudge your time: lose a Turn", + "orElse": "take the milestone at its word and hurry" + } + } + ], + "situations": [ + { + "occupant": "the Tollkeeper", + "doing": "raising a bar that hangs on nothing at all", + "onArrival": "it names a toll and waits, hand out", + "because": "the bridge must be paid for and the bridge is gone", + "offer": "pay anything and it will tell you the true road" + }, + { + "occupant": "a carter", + "doing": "arguing with a signpost that has been turned", + "onArrival": "they appeal to you as a witness", + "because": "they have been round this way three times", + "offer": "settle the argument and they will carry you a stage" + }, + { + "occupant": "the Surveyor", + "doing": "staking out a bypass that the town keeps pulling up", + "onArrival": "it hands you the mallet without looking", + "because": "the survey must be completed and never is", + "offer": "drive one stake and it will show you the shortest way through" + }, + { + "occupant": "two of the Corporation", + "doing": "recutting a milestone, closer", + "onArrival": "they stand in front of the figures as you approach", + "because": "the distances must favour the town", + "offer": "admire the work and they will tell you the real distance, privately" + }, + { + "occupant": "a crowd", + "doing": "filling a square that was empty a moment ago", + "onArrival": "it closes gently around you and does not let you hurry", + "because": "the market must be busy when strangers pass", + "offer": "buy something and the crowd opens" + }, + { + "occupant": "the Bridge", + "doing": "holding itself up on a span that is not there", + "onArrival": "the planks settle as you step on", + "because": "the crossing must exist because the charter says so", + "offer": "cross confidently and it holds; hesitate and it does not" + } + ], + "temptations": [ + { + "id": "milestone", + "cue": "a milestone small enough to carry", + "benefit": "once, make a journey shorter than it is", + "useCost": { + "bane": 1 + }, + "standingDrawback": "distances you did not carry get longer" + }, + { + "id": "tollboard", + "cue": "a toll-board with the figures cut", + "benefit": "once, demand passage and be given it", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you are expected to keep the bridge in repair" + }, + { + "id": "roadmap", + "cue": "a map with one road drawn heavier", + "benefit": "never lose your way in the town", + "useCost": { + "bane": 1 + }, + "standingDrawback": "you cannot see the roads it leaves out" + }, + { + "id": "bar", + "cue": "a length of toll-bar, iron-shod", + "benefit": "once, close a way behind you that nothing can pass", + "useCost": { + "bane": 2 + }, + "standingDrawback": "whatever you shut out waits at that spot", + "acceptanceCost": { + "vice": "Pride" + } + }, + { + "id": "carterswhip", + "cue": "a carter's whip, worn to the handle", + "benefit": "once, make anything give way and let you through", + "useCost": { + "bane": 1 + }, + "standingDrawback": "the town treats you as traffic, not a guest" + } + ] + } + }, + "placeNameStyle": "own" +} \ No newline at end of file diff --git a/foundry-module/module/core/skeleton.mjs b/foundry-module/module/core/skeleton.mjs index 28e7ebe..48b1d36 100644 --- a/foundry-module/module/core/skeleton.mjs +++ b/foundry-module/module/core/skeleton.mjs @@ -64,6 +64,7 @@ export function generateSkeleton({ pack, areas = 6, ending = 'authored', rng }) const transgression = `The ${claimant} ${fill(accommodation.text, { conscript: appetite.conscript })}, ` + `so that ${appetite.purpose}.`; + // The bottom problem is the claimant itself — a person in a tomb, an office in a town. const bottomProblem = { label: `The ${claimant}`, @@ -79,8 +80,11 @@ export function generateSkeleton({ pack, areas = 6, ending = 'authored', rng }) }; const secondary = r.derive('faction2').pick(pack.factions.filter(f => f.id !== primary.id)); - // Named for its occupant. Drawing the name separately produced tombs named after strangers. - const placeName = `${r.derive('place').pick(pack.placeNames.first)} ${claimant}`; + // A barrow or keep is named for its occupant — drawing that separately produced tombs named + // after strangers. A settlement is not: it has its own name and the claimant merely runs it. + const placeName = pack.placeNameStyle === 'own' + ? `${r.derive('place1').pick(pack.placeNames.first)} ${r.derive('place2').pick(pack.placeNames.second)}` + : `${r.derive('place').pick(pack.placeNames.first)} ${claimant}`; // ---- the foreshadow chain ---------------------------------------------- const progression = pack.facetProgression ?? {};