Motif-scope the decisions and temptations

The review's sharpest finding was that the fiction cohered but the things in
the rooms did not belong to it: only the motif cue fragment was projected, while
decisions and temptations came from global pools. The output was a consistent
wrapper around generic room furniture.

Both now live under motifs.<id> — 6 decisions and 5 temptations each, 88
authored entries across 8 motifs. A `keeping` delve offers a flower that has not
wilted and a room you may search or leave exactly as you found it; a
`precedence` delve offers a corridor that will not let two walk abreast.

Two bugs surfaced while wiring it, both the same shape as one fixed earlier for
cue fragments: decisions and temptations were picked independently per area
rather than dealt, so a pool of 3 repeated a temptation in 75 of 80 test delves.
Both are now dealt without replacement.

Where a long delve outruns its motif pool, decisions top up from the generic
pool but temptations do not. A generic relic breaks the fiction; a repeated one
only looks thin.

Tests 11 -> 15: motif provenance for both pools, and no repeats at 6 and 9 areas.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-05 07:48:05 +01:00
co-authored by Claude Opus 5
parent 07148df8e6
commit ee1183e897
9 changed files with 850 additions and 123 deletions
+16 -4
View File
@@ -88,10 +88,22 @@ arrived at it by instinct. That convergence is the strongest evidence the model
Fragments are dealt without replacement, borrowing from a neighbouring facet before repeating. Fragments are dealt without replacement, borrowing from a neighbouring facet before repeating.
**Honest limit on "projected".** Only the motif cue fragment is projected from the appetite. The **The furniture is motif-scoped too.** Codex's review found that only the motif cue fragment was
second cue fragment, the decisions and the temptations still come from **global pools**, so the projected — decisions and temptations came from global pools, making the output "a consistent
current output is a projected wrapper around some generic room furniture. Making decisions and wrapper around generic room furniture". Both now live under `motifs.<id>`: **6 decisions and 5
temptations motif-scoped is the next content job. temptations per motif**, 88 authored entries across 8 motifs. A `keeping` delve offers a flower
that has not wilted, a lamp on three-century-old oil, and a room you may search or leave exactly
as you found it. A `precedence` delve offers a corridor that will not let two walk abreast.
Two rules the tests enforce:
- **Nothing repeats inside one delve.** Decisions and temptations are dealt without replacement,
not picked per area — picking independently repeated a temptation in 75 of 80 test delves.
- **Motif purity beats variety for temptations.** Decisions may top up from the generic pool if a
long delve outruns its motif; temptations may not. A generic relic breaks the fiction, while a
repeated one only looks thin.
**Remaining limit:** the second cue fragment still comes from a global `features` pool. That is
the last piece of generic furniture.
### The appeasement move ### The appeasement move
+1 -5
View File
@@ -20,17 +20,13 @@ const FACET_TRUTH = {
demandEnd: 'the question itself, asked directly', demandEnd: 'the question itself, asked directly',
}; };
export function buildArea({ skeleton, planned, pack, pressure, rng, baneBeat = null, feature, decision }) { export function buildArea({ skeleton, planned, pack, pressure, rng, baneBeat = null, feature, decision, temptation = null }) {
const r = rng.derive('area', String(planned.index)); const r = rng.derive('area', String(planned.index));
const fs = skeleton.foreshadow.find(f => f.index === planned.index) ?? {}; const fs = skeleton.foreshadow.find(f => f.index === planned.index) ?? {};
const names = pack.areaNames?.[planned.role] ?? pack.areaNames?.approach ?? ['Unnamed']; const names = pack.areaNames?.[planned.role] ?? pack.areaNames?.approach ?? ['Unnamed'];
// feature/decision are dealt by the caller without replacement across the delve — drawing them // feature/decision are dealt by the caller without replacement across the delve — drawing them
// per-area from pools of 8 and 6 made repeats near-certain inside a single delve. // per-area from pools of 8 and 6 made repeats near-certain inside a single delve.
const temptation = planned.hoard
? r.derive('temptation').pick(pack.temptations)
: null;
// Every area emits at least one attention trigger — draft 5 §9 weights triggers over the timer. // Every area emits at least one attention trigger — draft 5 §9 weights triggers over the timer.
const trigger = fs.facet === 'demand' ? skeleton.motif.trigger const trigger = fs.facet === 'demand' ? skeleton.motif.trigger
: r.derive('trigger').pick(['announced', 'loud', 'lingering', 'seenTwice', 'disturbed']); : r.derive('trigger').pick(['announced', 'loud', 'lingering', 'seenTwice', 'disturbed']);
+612 -9
View File
@@ -285,7 +285,83 @@
"a wardrobe of three hundred dresses in a room with no dust in it", "a wardrobe of three hundred dresses in a room with no dust in it",
"one thing under cloth, and the cloth is clean" "one thing under cloth, and the cloth is clean"
] ]
} },
"decisions": [
{
"cue": "a doorway you can only reach by crossing open floor, in full view",
"cost": "cross it and you are seen — roll the clock; go the long way and lose a Turn"
},
{
"cue": "a mirror blocking the passage, angled to catch whoever passes",
"cost": "cover it and something notices the dark; pass it and something notices you"
},
{
"cue": "a portrait that must be moved to open the way behind it",
"cost": "turn it to the wall and the Host takes offence; carry it and you are announced everywhere"
},
{
"cue": "a gallery lit end to end, and an unlit servants' crawl beside it",
"cost": "the gallery is quick and bright; the crawl costs a Turn and a Brawn roll"
},
{
"cue": "a shuttered window onto the next room, and a choice about opening it",
"cost": "looking through costs nothing; being seen looking costs a Bane"
},
{
"cue": "a room you must cross either quickly or quietly",
"cost": "quick is one Turn and a clock roll; quiet is two Turns and none"
}
],
"temptations": [
{
"id": "mask",
"cue": "a courtier's mask, gold leaf over lime-wood, the mouth fixed in a small smile",
"benefit": "the Host receives you as court, automatically",
"useCost": {
"bane": 1
},
"standingDrawback": "while worn you cannot be recognised by name — allies aiding you take −1 die"
},
{
"id": "glass",
"cue": "a hand-mirror that shows the room a moment behind",
"benefit": "once per scene, see what was just here",
"useCost": {
"bane": 1
},
"standingDrawback": "your reflection lags, and other people notice"
},
{
"id": "likeness",
"cue": "a small portrait of someone who is not you, painted beautifully",
"benefit": "show it and be taken for them, once",
"acceptanceCost": {
"vice": "Pride"
},
"useCost": {
"bane": 2
},
"standingDrawback": "they will eventually want it back"
},
{
"id": "veil",
"cue": "a mourning veil, fine enough to see through",
"benefit": "pass unremarked through the Host once",
"useCost": {
"bane": 1
},
"standingDrawback": "you see everyone as the barrow does — posed, waiting"
},
{
"id": "eyes",
"cue": "a pair of painted eyes cut from a portrait",
"benefit": "once, know exactly who is watching",
"useCost": {
"bane": 1
},
"standingDrawback": "they are watching you back"
}
]
}, },
"naming": { "naming": {
"danger": "recognition", "danger": "recognition",
@@ -317,7 +393,83 @@
"a seal cut with a name worn smooth by rubbing", "a seal cut with a name worn smooth by rubbing",
"a tally-stick longer than a person" "a tally-stick longer than a person"
] ]
} },
"decisions": [
{
"cue": "a door with a name cut into it, and a space beneath for a reply",
"cost": "answer with your own name and it opens — and it is written down"
},
{
"cue": "a roll of the dead, and one line you could strike out",
"cost": "striking a name frees something; it also puts you where the name was"
},
{
"cue": "someone's name called softly from two directions at once",
"cost": "answer either and the other stops calling"
},
{
"cue": "a lintel you must be announced under, or crawl beneath",
"cost": "announced costs a Bane; crawling costs your dignity and a Turn"
},
{
"cue": "a list of the dead with one name you recognise",
"cost": "saying it aloud helps; it also tells the barrow you are connected"
},
{
"cue": "two passages, and someone is being called down one of them",
"cost": "follow the voice and be expected; take the other and arrive unannounced"
}
],
"temptations": [
{
"id": "ledger",
"cue": "a book of names, one line left blank",
"benefit": "write a name and the Host obeys it once",
"acceptanceCost": {
"vice": "Pride"
},
"useCost": {
"bane": 2
},
"standingDrawback": "your own name is now in it"
},
{
"id": "nameplate",
"cue": "a plate cut with a name worn smooth by rubbing",
"benefit": "doors that check a name open for you",
"useCost": {
"bane": 1
},
"standingDrawback": "you answer to that name whether you mean to or not"
},
{
"id": "tally",
"cue": "a tally-stick longer than a person, one notch unfilled",
"benefit": "call in a debt the barrow owes — once",
"useCost": {
"bane": 1
},
"standingDrawback": "the stick keeps counting what you owe too"
},
{
"id": "seal",
"cue": "a wax seal bearing a name struck through",
"benefit": "once, be forgotten by something hunting you",
"useCost": {
"bane": 1
},
"standingDrawback": "your allies find your name hard to recall"
},
{
"id": "lintel",
"cue": "a chip of lintel-stone with three names on it",
"benefit": "once, summon one of the named dead to answer",
"useCost": {
"bane": 2
},
"standingDrawback": "they come whenever your name is said aloud"
}
]
}, },
"voices": { "voices": {
"danger": "obedience", "danger": "obedience",
@@ -349,7 +501,83 @@
"a staff of office propped where it was set down", "a staff of office propped where it was set down",
"a key that fits nothing here" "a key that fits nothing here"
] ]
} },
"decisions": [
{
"cue": "an order carved into the floor, still legible",
"cost": "obey it and the Host counts you as household; step over it and they do not"
},
{
"cue": "a speaking-tube that is warm, and asking a question down it",
"cost": "an answer comes back — and now something knows where you are"
},
{
"cue": "a bell-pull that would summon someone",
"cost": "ring it and help comes, and it is not the kind you wanted"
},
{
"cue": "two doors, and behind one a voice giving instructions to nobody",
"cost": "the quiet door is longer; the voice would tell you exactly where to go"
},
{
"cue": "an instruction you can obey, ignore, or countermand",
"cost": "countermanding it works once and marks you as someone who gives orders"
},
{
"cue": "a door that opens to a spoken password nobody living knows",
"cost": "guessing costs a Bane per attempt; the long way costs two Turns"
}
],
"temptations": [
{
"id": "signet",
"cue": "a signet, still warm, sized for a thumb",
"benefit": "doors that answer to rank open for you",
"useCost": {
"bane": 1
},
"standingDrawback": "the barrow's servants bring you their problems"
},
{
"id": "tube",
"cue": "a short length of speaking-tube, cut and carried",
"benefit": "ask one question and get one true answer",
"useCost": {
"bane": 1
},
"standingDrawback": "whatever answers can now hear you"
},
{
"id": "staff",
"cue": "a staff of office, propped where it was set down",
"benefit": "give one order the dead must follow",
"acceptanceCost": {
"vice": "Pride"
},
"useCost": {
"bane": 2
},
"standingDrawback": "you may not refuse an order given to you"
},
{
"id": "bell",
"cue": "a small bell from a servant's board",
"benefit": "ring it and one order is obeyed, by anything",
"useCost": {
"bane": 2
},
"standingDrawback": "it rings faintly when someone gives you an order"
},
{
"id": "wax",
"cue": "a plug of wax, moulded to a mouth",
"benefit": "once, refuse to hear a compulsion",
"useCost": {
"bane": 1
},
"standingDrawback": "you cannot hear warnings either"
}
]
}, },
"keeping": { "keeping": {
"danger": "preservation", "danger": "preservation",
@@ -381,7 +609,80 @@
"an hourglass that has never been turned", "an hourglass that has never been turned",
"a casket sized for something smaller than a body" "a casket sized for something smaller than a body"
] ]
} },
"decisions": [
{
"cue": "a room you can search, or leave exactly as you found it",
"cost": "searching disturbs a preservation three centuries old — roll the clock"
},
{
"cue": "a sealed jar, and a way on that needs what is inside",
"cost": "breaking the seal spends the year it holds, in front of you"
},
{
"cue": "a bed, made, and a body-shaped hollow that has not filled in",
"cost": "lie in it and you rest fully; you also stop, and the barrow prefers that"
},
{
"cue": "a door held shut by nothing but the fact it has never been opened",
"cost": "open it and something that had not changed, changes"
},
{
"cue": "a preserved thing blocking the way, which will not survive being moved",
"cost": "move it and something here ends; leave it and lose a Turn"
},
{
"cue": "food and water laid out, still good",
"cost": "eating restores you fully and the barrow adds you to what it keeps"
}
],
"temptations": [
{
"id": "jar",
"cue": "a sealed jar holding one good year",
"benefit": "open it to undo a wound entirely, once",
"useCost": {
"bane": 2
},
"standingDrawback": "the year is spent in front of everyone, visibly"
},
{
"id": "stillglass",
"cue": "a mirror showing the room a little younger",
"benefit": "once, refuse a condition — the glass takes it",
"useCost": {
"bane": 1
},
"standingDrawback": "the glass cracks a little each time, and so do you"
},
{
"id": "shoes",
"cue": "a child's shoes, unworn, in your size",
"benefit": "you do not tire; ignore fatigue for a scene",
"useCost": {
"bane": 1
},
"standingDrawback": "you have stopped ageing, and it shows in the wrong light"
},
{
"id": "lamp",
"cue": "a lamp still burning on three-century-old oil",
"benefit": "light that never gutters",
"useCost": {
"bane": 1
},
"standingDrawback": "nothing near it changes, including wounds you want to heal"
},
{
"id": "flower",
"cue": "a flower that has not wilted",
"benefit": "once, halt a condition where it stands",
"useCost": {
"bane": 1
},
"standingDrawback": "it also halts something you wanted to finish"
}
]
}, },
"display": { "display": {
"danger": "comparison", "danger": "comparison",
@@ -413,7 +714,83 @@
"a case holding one item and a great deal of space", "a case holding one item and a great deal of space",
"a lock polished more often than the thing it guards" "a lock polished more often than the thing it guards"
] ]
} },
"decisions": [
{
"cue": "an empty plinth, sized for something you are carrying",
"cost": "leave a thing and the Host approves; keep it and they compare you unfavourably"
},
{
"cue": "a case of trophies and one obviously missing",
"cost": "replacing it opens the next door; nothing else will"
},
{
"cue": "two ways on: one you must be invited down, one you may simply take",
"cost": "the invitation costs an act of admiration; taking it costs their good opinion"
},
{
"cue": "a gift left for you, unopened, with your description on it",
"cost": "opening it accepts the comparison; leaving it is a refusal, and noted"
},
{
"cue": "a comparison invited — your gear against theirs",
"cost": "engage and gain their favour; decline and be marked as beneath notice"
},
{
"cue": "a display you could improve, or rob",
"cost": "improving it opens the next door; robbing it opens all of them, badly"
}
],
"temptations": [
{
"id": "prize",
"cue": "the piece every rival was meant to want, still under glass",
"benefit": "+1 die whenever someone must be impressed",
"useCost": {
"bane": 1
},
"standingDrawback": "everyone who sees it wants it"
},
{
"id": "ribbon",
"cue": "a ribbon awarded to whoever conceded the point",
"benefit": "end one argument in your favour, once",
"useCost": {
"bane": 1
},
"standingDrawback": "you cannot decline a challenge while wearing it"
},
{
"id": "gift",
"cue": "a gift, unopened, addressed to no one in particular",
"benefit": "open it for exactly the thing you needed",
"acceptanceCost": {
"vice": "Greed"
},
"useCost": {
"bane": 2
},
"standingDrawback": "it was for someone, and they know"
},
{
"id": "case",
"cue": "a display case, small, with a good lock",
"benefit": "anything inside is beyond casual theft",
"useCost": {
"bane": 1
},
"standingDrawback": "whatever is in it is on show, always"
},
{
"id": "plinth",
"cue": "a plinth-plate engraved FINEST OF ITS KIND",
"benefit": "once, make a thing you carry undeniably the best",
"useCost": {
"bane": 1
},
"standingDrawback": "someone will want to test that"
}
]
}, },
"company": { "company": {
"danger": "attachment", "danger": "attachment",
@@ -445,7 +822,83 @@
"a chair kept empty and dusted", "a chair kept empty and dusted",
"a second cup, always out" "a second cup, always out"
] ]
} },
"decisions": [
{
"cue": "one of the dead follows you and will not be told otherwise",
"cost": "let it come and doors open; send it back and they close"
},
{
"cue": "a chair drawn out, and a place laid, and time to sit",
"cost": "sitting costs a Turn and buys the Host's goodwill entirely"
},
{
"cue": "a door that will only admit one of you at a time",
"cost": "splitting the party is exactly what this place wants"
},
{
"cue": "a hand, skeletal, held out to be taken",
"cost": "take it and you are not alone; you are also not alone later"
},
{
"cue": "a way on that only works if someone stays behind",
"cost": "whoever stays is not alone, and that is the problem"
},
{
"cue": "an invitation to stay the night, meant sincerely",
"cost": "accepting restores everything and costs a Turn and a Bane"
}
],
"temptations": [
{
"id": "keepsake",
"cue": "a keepsake still warm from being held",
"benefit": "once, someone comes when you call",
"useCost": {
"bane": 1
},
"standingDrawback": "something else comes too"
},
{
"id": "cup",
"cue": "a second cup, always set out",
"benefit": "share it and gain an ally among the dead for a scene",
"useCost": {
"bane": 1
},
"standingDrawback": "they expect to be included from now on"
},
{
"id": "hand",
"cue": "a skeletal hand that closes gently on yours",
"benefit": "you cannot be separated from the party by force",
"acceptanceCost": {
"vice": "Attachment"
},
"useCost": {
"bane": 2
},
"standingDrawback": "nor can you leave one behind"
},
{
"id": "chair",
"cue": "a folding chair, kept dusted",
"benefit": "set it down and something friendly sits",
"useCost": {
"bane": 1
},
"standingDrawback": "it follows you if you leave it"
},
{
"id": "coat",
"cue": "a coat from a full rack, still shaped to someone",
"benefit": "once, be treated as expected and welcome",
"useCost": {
"bane": 1
},
"standingDrawback": "you are expected to come back"
}
]
}, },
"confession": { "confession": {
"danger": "judgement", "danger": "judgement",
@@ -477,7 +930,80 @@
"a ledger of sins with the last page blank", "a ledger of sins with the last page blank",
"a box that has only ever been opened once" "a box that has only ever been opened once"
] ]
} },
"decisions": [
{
"cue": "a screen, a kneeler, and a question you can hear being asked",
"cost": "answer honestly and the way opens; lie and it opens anyway, differently"
},
{
"cue": "a scale, one pan holding a feather, the other empty",
"cost": "put something of yours in and it is weighed; walk past and you are not"
},
{
"cue": "a book of absolutions with room for one more",
"cost": "signing it forgives someone; it does not say who"
},
{
"cue": "a door that opens to whoever admits something first",
"cost": "whoever speaks pays; whoever stays silent owes"
},
{
"cue": "a question asked directly of one hero, by name",
"cost": "answering costs privacy; refusing costs the way forward"
},
{
"cue": "a penance offered instead of a fight",
"cost": "perform it and pass freely; it takes a Turn and it is humiliating"
}
],
"temptations": [
{
"id": "testament",
"cue": "a confession nobody ever heard, sealed",
"benefit": "read it aloud to unmake one accusation",
"useCost": {
"bane": 2
},
"standingDrawback": "the thing confessed to becomes yours to answer for"
},
{
"id": "feather",
"cue": "the feather from the scale, weightless",
"benefit": "once, be believed absolutely",
"useCost": {
"bane": 1
},
"standingDrawback": "you cannot lie while carrying it, even usefully"
},
{
"id": "kneeler",
"cue": "a fragment of stone worn through by knees",
"benefit": "once, take a condition from someone else",
"useCost": {
"bane": 1
},
"standingDrawback": "you keep every condition you take this way a little longer"
},
{
"id": "screen",
"cue": "a splinter from the confessional screen",
"benefit": "once, hear whether someone is lying",
"useCost": {
"bane": 1
},
"standingDrawback": "they can tell you are listening for it"
},
{
"id": "ash",
"cue": "a twist of ash from burned absolutions",
"benefit": "once, erase a wrong you did here",
"useCost": {
"bane": 2
},
"standingDrawback": "you cannot remember it either, and it mattered"
}
]
}, },
"precedence": { "precedence": {
"danger": "procession", "danger": "procession",
@@ -509,7 +1035,83 @@
"a staff of precedence, laid down", "a staff of precedence, laid down",
"a seat at the head of everything, occupied" "a seat at the head of everything, occupied"
] ]
} },
"decisions": [
{
"cue": "a corridor that will not let two walk abreast",
"cost": "whoever goes first meets whatever is there first"
},
{
"cue": "a queue of the dead, and a way to step round it",
"cost": "waiting costs two Turns; pushing in costs the Host's patience"
},
{
"cue": "a door that opens only for the foremost of a party",
"cost": "someone must be named first, aloud, and the others must accept it"
},
{
"cue": "banners in strict order, and one you could move",
"cost": "reordering them opens a way and insults everyone buried here"
},
{
"cue": "a stair where the order of descent is visibly recorded",
"cost": "whoever goes last is remembered as having gone last"
},
{
"cue": "a claim to settle: which of you the barrow should address",
"cost": "settling it opens the way; refusing to settle it does not"
}
],
"temptations": [
{
"id": "coronet",
"cue": "a small crown, sized for someone who never grew",
"benefit": "+1 die when others must defer to you",
"useCost": {
"bane": 1
},
"standingDrawback": "you must be addressed correctly or lose the benefit"
},
{
"id": "rankplate",
"cue": "a rank-plate prised off something and pocketed",
"benefit": "go first through any door the barrow guards",
"useCost": {
"bane": 1
},
"standingDrawback": "going first is now expected of you"
},
{
"id": "staffprec",
"cue": "a staff of precedence, laid down and not taken up",
"benefit": "once, decide the order of anything, and be obeyed",
"acceptanceCost": {
"vice": "Pride"
},
"useCost": {
"bane": 2
},
"standingDrawback": "you may never be second while you hold it"
},
{
"id": "herald",
"cue": "a herald's script with your name pencilled in",
"benefit": "once, be announced as whatever you claim",
"useCost": {
"bane": 1
},
"standingDrawback": "you must live up to it in front of the Host"
},
{
"id": "flagstone",
"cue": "a numbered flagstone, prised up, number one",
"benefit": "once, insist on going first and be obeyed",
"useCost": {
"bane": 1
},
"standingDrawback": "you go first into everything from now on"
}
]
} }
}, },
"placeNames": { "placeNames": {
@@ -839,5 +1441,6 @@
"loud": "a raised voice, a broken door, steel on stone", "loud": "a raised voice, a broken door, steel on stone",
"lingering": "stayed in one place longer than it takes to search it", "lingering": "stayed in one place longer than it takes to search it",
"disturbed": "struck or moved something that had not moved in centuries" "disturbed": "struck or moved something that had not moved in centuries"
} },
"_globalPoolsNote": "decisions/temptations below are FALLBACKS ONLY. Real content is motif-scoped under motifs.<id>.decisions/.temptations, so the furniture matches the fiction."
} }
+19 -4
View File
@@ -28,19 +28,34 @@ export function generateDelve(params = {}) {
const pressure = new Pressure({ areas, clock }); const pressure = new Pressure({ areas, clock });
// Deal features and decisions without replacement, cycling only if the delve outruns the pack. // Deal features and decisions without replacement, cycling only if the delve outruns the pack.
const deal = (list, n, tag) => { // Deal without replacement. If a delve outruns its motif pool, top up from the generic pool
// before ever repeating — a repeated decision reads as a bug, generic furniture only as thin.
const deal = (list, n, tag, overflow = []) => {
const r = rng.derive(tag); const r = rng.derive(tag);
const out = []; const out = [...r.shuffle(list)];
if (out.length < n) out.push(...r.shuffle(overflow.filter(x => !out.includes(x))));
while (out.length < n) out.push(...r.shuffle(list)); while (out.length < n) out.push(...r.shuffle(list));
return out.slice(0, n); return out.slice(0, n);
}; };
// Motif-scoped furniture. Global pools are a fallback only: drawing decisions and temptations
// globally made the output "a consistent wrapper around generic room furniture" — the fiction
// cohered but the things in the rooms did not belong to it.
const motifPack = pack.motifs?.[skeleton.motif.id] ?? {};
const decisionPool = motifPack.decisions?.length ? motifPack.decisions : (pack.decisions ?? []);
const features = deal(pack.features ?? [], plan.areas.length, 'features'); const features = deal(pack.features ?? [], plan.areas.length, 'features');
const decisions = deal(pack.decisions ?? [], plan.areas.length, 'decisions'); const decisions = deal(decisionPool, plan.areas.length, 'decisions', pack.decisions ?? []);
// Temptations are dealt across the areas that carry a hoard, for the same reason as decisions:
// picking independently per area from a pool of three repeated in 75 of 80 test delves.
const temptPool = motifPack.temptations?.length ? motifPack.temptations : (pack.temptations ?? []);
const hoardCount = plan.areas.filter(a => a.hoard).length;
const temptations = deal(temptPool, hoardCount, 'temptations'); // no generic overflow — see note
let tIdx = 0;
const built = plan.areas.map((planned, i) => { const built = plan.areas.map((planned, i) => {
const beat = baneBeatFor(planned, pressure, rng.derive('banebeat', String(planned.index))); const beat = baneBeatFor(planned, pressure, rng.derive('banebeat', String(planned.index)));
if (beat) pressure.bankBane('(offered)', beat, planned.index); if (beat) pressure.bankBane('(offered)', beat, planned.index);
const area = buildArea({ skeleton, planned, pack, pressure, rng, baneBeat: beat, feature: features[i], decision: decisions[i] }); const area = buildArea({ skeleton, planned, pack, pressure, rng, baneBeat: beat, feature: features[i], decision: decisions[i], temptation: planned.hoard ? temptations[tIdx++] : null });
area.fallback = fallbackRoute(area, skeleton); area.fallback = fallbackRoute(area, skeleton);
return area; return area;
}); });
+30
View File
@@ -54,5 +54,35 @@ for (let i = 0; i < 30; i++) {
} }
t('no repeated cue fragment inside one delve', repeats === 0, `${repeats}/30 had repeats`); t('no repeated cue fragment inside one delve', repeats === 0, `${repeats}/30 had repeats`);
// motif-scoping: the furniture must belong to the fiction, not a global pool
let offMotifDecisions = 0, offMotifTemptations = 0, checked = 0;
for (let i = 0; i < 40; i++) {
const d = generateDelve({ pack, seed: `scope-${i}`, areas: 6 });
const m = pack.motifs[d.skeleton.motif.id];
const okD = new Set((m.decisions ?? []).map(x => x.cue));
const okT = new Set((m.temptations ?? []).map(x => x.id));
for (const a of d.areas) {
checked++;
if (a.decision && !okD.has(a.decision.cue)) offMotifDecisions++;
if (a.temptation && !okT.has(a.temptation.id)) offMotifTemptations++;
}
}
t('decisions come from the delve\'s own motif', offMotifDecisions === 0, `${offMotifDecisions}/${checked} off-motif`);
t('temptations come from the delve\'s own motif', offMotifTemptations === 0, `${offMotifTemptations} off-motif`);
// no repeated decision or temptation inside one delve
let dupD = 0, dupT = 0;
for (let i = 0; i < 40; i++) {
for (const areas of [6, 9]) {
const d = generateDelve({ pack, seed: `dup-${i}`, areas });
const ds = d.areas.map(a => a.decision?.cue).filter(Boolean);
const ts = d.areas.map(a => a.temptation?.id).filter(Boolean);
if (new Set(ds).size !== ds.length) dupD++;
if (new Set(ts).size !== ts.length) dupT++;
}
}
t('no repeated decision inside one delve', dupD === 0, `${dupD}/80`);
t('no repeated temptation inside one delve', dupT === 0, `${dupT}/80`);
console.log(`\n${pass} passed, ${fail} failed`); console.log(`\n${pass} passed, ${fail} failed`);
process.exit(fail ? 1 : 0); process.exit(fail ? 1 : 0);
+116 -45
View File
@@ -18,11 +18,11 @@
"placeName": "The Cairn of the Patient Lord", "placeName": "The Cairn of the Patient Lord",
"knot": { "knot": {
"appetiteId": "first", "appetiteId": "first",
"accommodationId": "unmade", "accommodationId": "bound",
"claimant": "Patient Lord", "claimant": "Patient Lord",
"conscript": "a procession", "conscript": "a procession",
"transgression": "The Patient Lord had the faces struck from a procession, so that someone would always go behind them.", "transgression": "The Patient Lord bound a procession by oath they could not break, so that someone would always go behind them.",
"cruelty": 3 "cruelty": 2
}, },
"motif": { "motif": {
"id": "precedence", "id": "precedence",
@@ -41,6 +41,20 @@
"failureState": "is second now, and cannot bear it", "failureState": "is second now, and cannot bear it",
"handledBy": "giving them what they want, at a price" "handledBy": "giving them what they want, at a price"
}, },
"appeasement": {
"move": "stand aside and let it go ahead of you",
"attribute": "Poise",
"successes": 2,
"why": "it goes first",
"gain": {
"vanity": 1
},
"cost": {
"bane": 1
},
"repeatable": true,
"faction": "The Silent Host"
},
"factions": [ "factions": [
{ {
"id": "host", "id": "host",
@@ -113,10 +127,10 @@
"a stair too grand for the door it serves", "a stair too grand for the door it serves",
"a floor mosaic worn only along one path" "a floor mosaic worn only along one path"
], ],
"truth": "this is how the place was ordered, and it still is. The Patient Lord had the faces struck from a procession, so that someone would always go behind them.", "truth": "this is how the place was ordered, and it still is. The Patient Lord bound a procession by oath they could not break, so that someone would always go behind them.",
"decision": { "decision": {
"cue": "a member of the faction, alone and not yet hostile", "cue": "banners in strict order, and one you could move",
"cost": "talking costs time; not talking costs later" "cost": "reordering them opens a way and insults everyone buried here"
}, },
"encounter": null, "encounter": null,
"hoard": null, "hoard": null,
@@ -136,16 +150,16 @@
{ {
"index": 2, "index": 2,
"role": "complication", "role": "complication",
"name": "The Hall of Bows", "name": "The Lesser Vault",
"facet": "ritual", "facet": "ritual",
"cueFragments": [ "cueFragments": [
"banners in sequence, each house a place further back", "banners in sequence, each house a place further back",
"grave-goods stacked with obsessive neatness" "grave-goods stacked with obsessive neatness"
], ],
"truth": "the office is still being performed, for someone who is no longer served by it. The Patient Lord had the faces struck from a procession, so that someone would always go behind them.", "truth": "the office is still being performed, for someone who is no longer served by it. The Patient Lord bound a procession by oath they could not break, so that someone would always go behind them.",
"decision": { "decision": {
"cue": "two ways on: one narrow and dark, one wide and announced", "cue": "a corridor that will not let two walk abreast",
"cost": "the wide way is faster and the barrow hears it" "cost": "whoever goes first meets whatever is there first"
}, },
"encounter": null, "encounter": null,
"hoard": null, "hoard": null,
@@ -165,16 +179,16 @@
{ {
"index": 3, "index": 3,
"role": "complication", "role": "complication",
"name": "The Lesser Vault", "name": "The Waiting Room",
"facet": "ritual", "facet": "ritual",
"cueFragments": [ "cueFragments": [
"a herald's script with the order still marked", "a herald's script with the order still marked",
"an alcove emptied in a hurry" "an alcove emptied in a hurry"
], ],
"truth": "the office is still being performed, for someone who is no longer served by it. The Patient Lord had the faces struck from a procession, so that someone would always go behind them.", "truth": "the office is still being performed, for someone who is no longer served by it. The Patient Lord bound a procession by oath they could not break, so that someone would always go behind them.",
"decision": { "decision": {
"cue": "something valuable, awkward to carry", "cue": "a door that opens only for the foremost of a party",
"cost": "carrying it slows you and it is not yours" "cost": "someone must be named first, aloud, and the others must accept it"
}, },
"encounter": null, "encounter": null,
"hoard": null, "hoard": null,
@@ -200,24 +214,49 @@
"a door only one person may pass at a time, and only first", "a door only one person may pass at a time, and only first",
"a collapse that has opened a way the builders never meant" "a collapse that has opened a way the builders never meant"
], ],
"truth": "here the want is explicit — the place asks something of whoever enters. The Patient Lord had the faces struck from a procession, so that someone would always go behind them.", "truth": "here the want is explicit — the place asks something of whoever enters. The Patient Lord bound a procession by oath they could not break, so that someone would always go behind them.",
"decision": { "decision": {
"cue": "a sealed door, and a crack you could squeeze through", "cue": "a queue of the dead, and a way to step round it",
"cost": "the crack costs skin and a Bane on a failure" "cost": "waiting costs two Turns; pushing in costs the Host's patience"
}, },
"encounter": { "encounter": {
"heat": "fight", "heat": "fight",
"kind": "undead" "kind": "undead",
"roster": {
"line": "1 Ghoul and 2 Skeletons",
"foes": [
{
"n": 1,
"name": "Ghoul",
"atk": 4,
"def": 3,
"grit": 4,
"nerve": 5,
"note": "on a hit, a free Called Shot to freeze for a round"
},
{
"n": 2,
"name": "Skeleton",
"atk": 3,
"def": 2,
"grit": 1,
"nerve": 5,
"note": "fearless"
}
],
"harmedBy": "anything",
"avoid": "the Ghoul goes for court dress first — send someone plain"
}
}, },
"hoard": "cache", "hoard": "cache",
"temptation": { "temptation": {
"id": "coronet", "id": "flagstone",
"cue": "a small crown, sized for someone who never grew", "cue": "a numbered flagstone, prised up, number one",
"benefit": "+1 die when others must defer to you", "benefit": "once, insist on going first and be obeyed",
"useCost": { "useCost": {
"bane": 1 "bane": 1
}, },
"standingDrawback": "you must be addressed correctly or lose the benefit" "standingDrawback": "you go first into everything from now on"
}, },
"trigger": "announced", "trigger": "announced",
"baneBeat": "relicUse", "baneBeat": "relicUse",
@@ -240,21 +279,24 @@
"a procession that doubled back on itself", "a procession that doubled back on itself",
"a lamp still burning on oil that should be long gone" "a lamp still burning on oil that should be long gone"
], ],
"truth": "this is the damage the want did to those who had to satisfy it. The Patient Lord had the faces struck from a procession, so that someone would always go behind them.", "truth": "this is the damage the want did to those who had to satisfy it. The Patient Lord bound a procession by oath they could not break, so that someone would always go behind them.",
"decision": { "decision": {
"cue": "a shortcut down, through water", "cue": "a stair where the order of descent is visibly recorded",
"cost": "everything gets wet, including what burns" "cost": "whoever goes last is remembered as having gone last"
}, },
"encounter": null, "encounter": null,
"hoard": "pocket", "hoard": "pocket",
"temptation": { "temptation": {
"id": "glass", "id": "staffprec",
"cue": "a hand-mirror that shows the room a moment behind", "cue": "a staff of precedence, laid down and not taken up",
"benefit": "once per scene, see what was just here", "benefit": "once, decide the order of anything, and be obeyed",
"useCost": { "acceptanceCost": {
"bane": 1 "vice": "Pride"
}, },
"standingDrawback": "your reflection lags, and others notice" "useCost": {
"bane": 2
},
"standingDrawback": "you may never be second while you hold it"
}, },
"trigger": "seenTwice", "trigger": "seenTwice",
"baneBeat": "refusal", "baneBeat": "refusal",
@@ -271,33 +313,55 @@
{ {
"index": 6, "index": 6,
"role": "threshold", "role": "threshold",
"name": "The Antechamber Royal", "name": "The Last Door",
"facet": "anchor", "facet": "anchor",
"cueFragments": [ "cueFragments": [
"a seat at the head of everything, occupied", "a seat at the head of everything, occupied",
"a door that has been wedged open from the inside" "a door that has been wedged open from the inside"
], ],
"truth": "the thing the whole barrow is arranged around is close. The Patient Lord had the faces struck from a procession, so that someone would always go behind them.", "truth": "the thing the whole barrow is arranged around is close. The Patient Lord bound a procession by oath they could not break, so that someone would always go behind them.",
"decision": { "decision": {
"cue": "a way back, still open", "cue": "a claim to settle: which of you the barrow should address",
"cost": "leaving now means it will be worse when you return" "cost": "settling it opens the way; refusing to settle it does not"
}, },
"encounter": { "encounter": {
"heat": "battle", "heat": "battle",
"kind": "undead" "kind": "undead",
"roster": {
"line": "1 Wraith and 3 Skeletons",
"foes": [
{
"n": 1,
"name": "Wraith",
"atk": 5,
"def": 3,
"grit": 10,
"nerve": 5,
"note": "INCORPOREAL — chill touch ignores armour and drains 1 max Grit"
},
{
"n": 3,
"name": "Skeleton",
"atk": 3,
"def": 2,
"grit": 1,
"nerve": 5,
"note": "fearless"
}
],
"harmedBy": "blessed, silvered or magical weapons ONLY",
"avoid": "it will take an appeasement over a fight every time"
}
}, },
"hoard": "chest", "hoard": "chest",
"temptation": { "temptation": {
"id": "ledger", "id": "coronet",
"cue": "a book of names, one line left blank", "cue": "a small crown, sized for someone who never grew",
"benefit": "write a name and the Host obeys it once", "benefit": "+1 die when others must defer to you",
"acceptanceCost": {
"vice": "Pride"
},
"useCost": { "useCost": {
"bane": 2 "bane": 1
}, },
"standingDrawback": "your own name is now in it" "standingDrawback": "you must be addressed correctly or lose the benefit"
}, },
"trigger": "disturbed", "trigger": "disturbed",
"baneBeat": "relicUse", "baneBeat": "relicUse",
@@ -318,13 +382,20 @@
"mode": "authored", "mode": "authored",
"heat": null, "heat": null,
"hoard": null, "hoard": null,
"name": "The Gilded Audience", "name": "The Audience",
"cueFragments": [ "cueFragments": [
"a corridor that will not let two walk abreast" "a corridor that will not let two walk abreast"
], ],
"question": "\"Who goes first?\"", "question": "\"Who goes first?\"",
"authored": true "authored": true
}, },
"triggerGlossary": {
"announced": "entered somewhere grandly — the big doors, a shout, a herald",
"seenTwice": "reflected, echoed or witnessed twice over in one place",
"loud": "a raised voice, a broken door, steel on stone",
"lingering": "stayed in one place longer than it takes to search it",
"disturbed": "struck or moved something that had not moved in centuries"
},
"budget": { "budget": {
"plannedFights": 2, "plannedFights": 2,
"heatBase": "fight", "heatBase": "fight",
+17 -17
View File
@@ -52,7 +52,7 @@ On success it goes first, and The Silent Host will not open hostilities first.
**The clue is automatic:** a stair too grand for the door it serves — and it was done deliberately. **The clue is automatic:** a stair too grand for the door it serves — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a member of the faction, alone and not yet hostile — *talking costs time; not talking costs later* **The decision.** banners in strict order, and one you could move — *reordering them opens a way and insults everyone buried here*
**Attention trigger:** announced. **Attention trigger:** announced.
@@ -75,7 +75,7 @@ On success it goes first, and The Silent Host will not open hostilities first.
**The clue is automatic:** banners in sequence, each house a place further back — and it was done deliberately. **The clue is automatic:** banners in sequence, each house a place further back — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** two ways on: one narrow and dark, one wide and announced — *the wide way is faster and the barrow hears it* **The decision.** a corridor that will not let two walk abreast — *whoever goes first meets whatever is there first*
**Attention trigger:** loud. **Attention trigger:** loud.
@@ -98,7 +98,7 @@ On success it goes first, and The Silent Host will not open hostilities first.
**The clue is automatic:** a herald's script with the order still marked — and it was done deliberately. **The clue is automatic:** a herald's script with the order still marked — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** something valuable, awkward to carry — *carrying it slows you and it is not yours* **The decision.** a door that opens only for the foremost of a party — *someone must be named first, aloud, and the others must accept it*
**Attention trigger:** announced. **Attention trigger:** announced.
@@ -121,7 +121,7 @@ On success it goes first, and The Silent Host will not open hostilities first.
**The clue is automatic:** a door only one person may pass at a time, and only first — and it was done deliberately. **The clue is automatic:** a door only one person may pass at a time, and only first — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a sealed door, and a crack you could squeeze through — *the crack costs skin and a Bane on a failure* **The decision.** a queue of the dead, and a way to step round it — *waiting costs two Turns; pushing in costs the Host's patience*
**Encounter — fight.** 1 Ghoul and 2 Skeletons **Encounter — fight.** 1 Ghoul and 2 Skeletons
@@ -134,10 +134,10 @@ On success it goes first, and The Silent Host will not open hostilities first.
- **Avoidable:** the Ghoul goes for court dress first — send someone plain - **Avoidable:** the Ghoul goes for court dress first — send someone plain
- *Forge:* `forgeEncounter({heat:"fight", hoard:false, post:false, folderId})` - *Forge:* `forgeEncounter({heat:"fight", hoard:false, post:false, folderId})`
**Hoard.** Tier **cache**. **Hoard.** Tier **cache**.
**Temptation — coronet.** a small crown, sized for someone who never grew **Temptation — flagstone.** a numbered flagstone, prised up, number one
- *Benefit:* +1 die when others must defer to you - *Benefit:* once, insist on going first and be obeyed
- *Accept:* free · *Use:* **+1 Bane** on the tab - *Accept:* free · *Use:* **+1 Bane** on the tab
- *Standing:* you must be addressed correctly or lose the benefit - *Standing:* you go first into everything from now on
**Attention trigger:** announced. **Attention trigger:** announced.
**Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks. **Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks.
@@ -159,13 +159,13 @@ On success it goes first, and The Silent Host will not open hostilities first.
**The clue is automatic:** a procession that doubled back on itself — and it was done deliberately. **The clue is automatic:** a procession that doubled back on itself — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a shortcut down, through water — *everything gets wet, including what burns* **The decision.** a stair where the order of descent is visibly recorded — *whoever goes last is remembered as having gone last*
**Hoard.** Tier **pocket**. **Hoard.** Tier **pocket**.
**Temptation — glass.** a hand-mirror that shows the room a moment behind **Temptation — staffprec.** a staff of precedence, laid down and not taken up
- *Benefit:* once per scene, see what was just here - *Benefit:* once, decide the order of anything, and be obeyed
- *Accept:* free · *Use:* **+1 Bane** on the tab - *Accept:* take the Vice **Pride** · *Use:* **+2 Banes** on the tab
- *Standing:* your reflection lags, and others notice - *Standing:* you may never be second while you hold it
**Attention trigger:** seenTwice. **Attention trigger:** seenTwice.
**Bane beat — refusal.** Who: *whoever refuses the offer*. When: *once*. once only. Say it aloud when it banks. **Bane beat — refusal.** Who: *whoever refuses the offer*. When: *once*. once only. Say it aloud when it banks.
@@ -187,7 +187,7 @@ On success it goes first, and The Silent Host will not open hostilities first.
**The clue is automatic:** a seat at the head of everything, occupied — and it was done deliberately. **The clue is automatic:** a seat at the head of everything, occupied — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a way back, still open — *leaving now means it will be worse when you return* **The decision.** a claim to settle: which of you the barrow should address — *settling it opens the way; refusing to settle it does not*
**Encounter — battle.** 1 Wraith and 3 Skeletons **Encounter — battle.** 1 Wraith and 3 Skeletons
@@ -200,10 +200,10 @@ On success it goes first, and The Silent Host will not open hostilities first.
- **Avoidable:** it will take an appeasement over a fight every time - **Avoidable:** it will take an appeasement over a fight every time
- *Forge:* `forgeEncounter({heat:"battle", hoard:false, post:false, folderId})` - *Forge:* `forgeEncounter({heat:"battle", hoard:false, post:false, folderId})`
**Hoard.** Tier **chest**. **Hoard.** Tier **chest**.
**Temptation — ledger.** a book of names, one line left blank **Temptation — coronet.** a small crown, sized for someone who never grew
- *Benefit:* write a name and the Host obeys it once - *Benefit:* +1 die when others must defer to you
- *Accept:* take the Vice **Pride** · *Use:* **+2 Banes** on the tab - *Accept:* free · *Use:* **+1 Bane** on the tab
- *Standing:* your own name is now in it - *Standing:* you must be addressed correctly or lose the benefit
**Attention trigger:** disturbed. **Attention trigger:** disturbed.
**Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks. **Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks.
+20 -20
View File
@@ -52,7 +52,7 @@ On success it hears that nothing has aged, and The Silent Host will not open hos
**The clue is automatic:** lamps trimmed and filled, all of them — and it was done deliberately. **The clue is automatic:** lamps trimmed and filled, all of them — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** two ways on: one narrow and dark, one wide and announced — *the wide way is faster and the barrow hears it* **The decision.** a room you can search, or leave exactly as you found it — *searching disturbs a preservation three centuries old — roll the clock*
**Attention trigger:** disturbed. **Attention trigger:** disturbed.
@@ -75,7 +75,7 @@ On success it hears that nothing has aged, and The Silent Host will not open hos
**The clue is automatic:** a meal laid out, still warm, for people long past eating — and it was done deliberately. **The clue is automatic:** a meal laid out, still warm, for people long past eating — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** something valuable, awkward to carry — *carrying it slows you and it is not yours* **The decision.** a bed, made, and a body-shaped hollow that has not filled in — *lie in it and you rest fully; you also stop, and the barrow prefers that*
**Encounter — fight.** 1 Ghoul and 2 Skeletons **Encounter — fight.** 1 Ghoul and 2 Skeletons
@@ -88,10 +88,10 @@ On success it hears that nothing has aged, and The Silent Host will not open hos
- **Avoidable:** the Ghoul goes for court dress first — send someone plain - **Avoidable:** the Ghoul goes for court dress first — send someone plain
- *Forge:* `forgeEncounter({heat:"fight", hoard:false, post:false, folderId})` - *Forge:* `forgeEncounter({heat:"fight", hoard:false, post:false, folderId})`
**Hoard.** Tier **cache**. **Hoard.** Tier **cache**.
**Temptation — ring.** a signet, still warm **Temptation — flower.** a flower that has not wilted
- *Benefit:* doors that answer to rank open for you - *Benefit:* once, halt a condition where it stands
- *Accept:* free · *Use:* **+1 Bane** on the tab - *Accept:* free · *Use:* **+1 Bane** on the tab
- *Standing:* the barrow's servants bring you their problems - *Standing:* it also halts something you wanted to finish
**Attention trigger:** lingering. **Attention trigger:** lingering.
**Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks. **Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks.
@@ -113,7 +113,7 @@ On success it hears that nothing has aged, and The Silent Host will not open hos
**The clue is automatic:** a clock wound by somebody, recently — and it was done deliberately. **The clue is automatic:** a clock wound by somebody, recently — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a member of the faction, alone and not yet hostile — *talking costs time; not talking costs later* **The decision.** a door held shut by nothing but the fact it has never been opened — *open it and something that had not changed, changes*
**Encounter — fight.** 1 Ghoul and 2 Skeletons **Encounter — fight.** 1 Ghoul and 2 Skeletons
@@ -126,10 +126,10 @@ On success it hears that nothing has aged, and The Silent Host will not open hos
- **Avoidable:** the Ghoul goes for court dress first — send someone plain - **Avoidable:** the Ghoul goes for court dress first — send someone plain
- *Forge:* `forgeEncounter({heat:"fight", hoard:false, post:false, folderId})` - *Forge:* `forgeEncounter({heat:"fight", hoard:false, post:false, folderId})`
**Hoard.** Tier **cache**. **Hoard.** Tier **cache**.
**Temptation — ledger.** a book of names, one line left blank **Temptation — lamp.** a lamp still burning on three-century-old oil
- *Benefit:* write a name and the Host obeys it once - *Benefit:* light that never gutters
- *Accept:* take the Vice **Pride** · *Use:* **+2 Banes** on the tab - *Accept:* free · *Use:* **+1 Bane** on the tab
- *Standing:* your own name is now in it - *Standing:* nothing near it changes, including wounds you want to heal
**Attention trigger:** lingering. **Attention trigger:** lingering.
**Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks. **Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks.
@@ -151,13 +151,13 @@ On success it hears that nothing has aged, and The Silent Host will not open hos
**The clue is automatic:** a room that resets itself if you look away — and it was done deliberately. **The clue is automatic:** a room that resets itself if you look away — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a shortcut down, through water — *everything gets wet, including what burns* **The decision.** a preserved thing blocking the way, which will not survive being moved — *move it and something here ends; leave it and lose a Turn*
**Hoard.** Tier **pocket**. **Hoard.** Tier **pocket**.
**Temptation — glass.** a hand-mirror that shows the room a moment behind **Temptation — shoes.** a child's shoes, unworn, in your size
- *Benefit:* once per scene, see what was just here - *Benefit:* you do not tire; ignore fatigue for a scene
- *Accept:* free · *Use:* **+1 Bane** on the tab - *Accept:* free · *Use:* **+1 Bane** on the tab
- *Standing:* your reflection lags, and others notice - *Standing:* you have stopped ageing, and it shows in the wrong light
**Attention trigger:** lingering. **Attention trigger:** lingering.
**Bane beat — flattery.** Who: *whoever performs the appeasement*. When: *each time it is used*. repeatable. Say it aloud when it banks. **Bane beat — flattery.** Who: *whoever performs the appeasement*. When: *each time it is used*. repeatable. Say it aloud when it banks.
@@ -179,7 +179,7 @@ On success it hears that nothing has aged, and The Silent Host will not open hos
**The clue is automatic:** something kept so well it has forgotten how to end — and it was done deliberately. **The clue is automatic:** something kept so well it has forgotten how to end — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a sealed door, and a crack you could squeeze through — *the crack costs skin and a Bane on a failure* **The decision.** a sealed jar, and a way on that needs what is inside — *breaking the seal spends the year it holds, in front of you*
**Attention trigger:** seenTwice. **Attention trigger:** seenTwice.
@@ -202,7 +202,7 @@ On success it hears that nothing has aged, and The Silent Host will not open hos
**The clue is automatic:** a casket sized for something smaller than a body — and it was done deliberately. **The clue is automatic:** a casket sized for something smaller than a body — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a way back, still open — *leaving now means it will be worse when you return* **The decision.** food and water laid out, still good — *eating restores you fully and the barrow adds you to what it keeps*
**Encounter — battle.** 1 Wraith and 3 Skeletons **Encounter — battle.** 1 Wraith and 3 Skeletons
@@ -215,10 +215,10 @@ On success it hears that nothing has aged, and The Silent Host will not open hos
- **Avoidable:** it will take an appeasement over a fight every time - **Avoidable:** it will take an appeasement over a fight every time
- *Forge:* `forgeEncounter({heat:"battle", hoard:false, post:false, folderId})` - *Forge:* `forgeEncounter({heat:"battle", hoard:false, post:false, folderId})`
**Hoard.** Tier **chest**. **Hoard.** Tier **chest**.
**Temptation — ledger.** a book of names, one line left blank **Temptation — jar.** a sealed jar holding one good year
- *Benefit:* write a name and the Host obeys it once - *Benefit:* open it to undo a wound entirely, once
- *Accept:* take the Vice **Pride** · *Use:* **+2 Banes** on the tab - *Accept:* free · *Use:* **+2 Banes** on the tab
- *Standing:* your own name is now in it - *Standing:* the year is spent in front of everyone, visibly
**Attention trigger:** seenTwice. **Attention trigger:** seenTwice.
**Bane beat — refusal.** Who: *whoever refuses the offer*. When: *once*. once only. Say it aloud when it banks. **Bane beat — refusal.** Who: *whoever refuses the offer*. When: *once*. once only. Say it aloud when it banks.
+19 -19
View File
@@ -52,7 +52,7 @@ On success it is not alone, and The Silent Host will not open hostilities first.
**The clue is automatic:** a coat-rack, full — and it was done deliberately. **The clue is automatic:** a coat-rack, full — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a way back, still open — *leaving now means it will be worse when you return* **The decision.** an invitation to stay the night, meant sincerely — *accepting restores everything and costs a Turn and a Bane*
**Attention trigger:** lingering. **Attention trigger:** lingering.
@@ -75,13 +75,13 @@ On success it is not alone, and The Silent Host will not open hostilities first.
**The clue is automatic:** places set every evening for three hundred years — and it was done deliberately. **The clue is automatic:** places set every evening for three hundred years — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a shortcut down, through water — *everything gets wet, including what burns* **The decision.** a way on that only works if someone stays behind — *whoever stays is not alone, and that is the problem*
**Hoard.** Tier **pocket**. **Hoard.** Tier **pocket**.
**Temptation — coronet.** a small crown, sized for someone who never grew **Temptation — hand.** a skeletal hand that closes gently on yours
- *Benefit:* +1 die when others must defer to you - *Benefit:* you cannot be separated from the party by force
- *Accept:* free · *Use:* **+1 Bane** on the tab - *Accept:* take the Vice **Attachment** · *Use:* **+2 Banes** on the tab
- *Standing:* you must be addressed correctly or lose the benefit - *Standing:* nor can you leave one behind
**Attention trigger:** lingering. **Attention trigger:** lingering.
**Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks. **Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks.
@@ -103,7 +103,7 @@ On success it is not alone, and The Silent Host will not open hostilities first.
**The clue is automatic:** chairs drawn up in a circle, all facing one seat — and it was done deliberately. **The clue is automatic:** chairs drawn up in a circle, all facing one seat — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a member of the faction, alone and not yet hostile — *talking costs time; not talking costs later* **The decision.** a hand, skeletal, held out to be taken — *take it and you are not alone; you are also not alone later*
**Encounter — fight.** 1 Ghoul and 2 Skeletons **Encounter — fight.** 1 Ghoul and 2 Skeletons
@@ -116,10 +116,10 @@ On success it is not alone, and The Silent Host will not open hostilities first.
- **Avoidable:** the Ghoul goes for court dress first — send someone plain - **Avoidable:** the Ghoul goes for court dress first — send someone plain
- *Forge:* `forgeEncounter({heat:"fight", hoard:false, post:false, folderId})` - *Forge:* `forgeEncounter({heat:"fight", hoard:false, post:false, folderId})`
**Hoard.** Tier **cache**. **Hoard.** Tier **cache**.
**Temptation — mask.** a courtier's mask, gold leaf over lime-wood, the mouth fixed in a small smile **Temptation — chair.** a folding chair, kept dusted
- *Benefit:* the Host receives you as court - *Benefit:* set it down and something friendly sits
- *Accept:* free · *Use:* **+1 Bane** on the tab - *Accept:* free · *Use:* **+1 Bane** on the tab
- *Standing:* while worn you cannot be recognised by name - *Standing:* it follows you if you leave it
**Attention trigger:** seenTwice. **Attention trigger:** seenTwice.
**Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks. **Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks.
@@ -141,7 +141,7 @@ On success it is not alone, and The Silent Host will not open hostilities first.
**The clue is automatic:** a doorway with the hinges taken off — and it was done deliberately. **The clue is automatic:** a doorway with the hinges taken off — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** something valuable, awkward to carry — *carrying it slows you and it is not yours* **The decision.** a door that will only admit one of you at a time — *splitting the party is exactly what this place wants*
**Encounter — fight.** 1 Ghoul and 2 Skeletons **Encounter — fight.** 1 Ghoul and 2 Skeletons
@@ -154,10 +154,10 @@ On success it is not alone, and The Silent Host will not open hostilities first.
- **Avoidable:** the Ghoul goes for court dress first — send someone plain - **Avoidable:** the Ghoul goes for court dress first — send someone plain
- *Forge:* `forgeEncounter({heat:"fight", hoard:false, post:false, folderId})` - *Forge:* `forgeEncounter({heat:"fight", hoard:false, post:false, folderId})`
**Hoard.** Tier **cache**. **Hoard.** Tier **cache**.
**Temptation — mask.** a courtier's mask, gold leaf over lime-wood, the mouth fixed in a small smile **Temptation — coat.** a coat from a full rack, still shaped to someone
- *Benefit:* the Host receives you as court - *Benefit:* once, be treated as expected and welcome
- *Accept:* free · *Use:* **+1 Bane** on the tab - *Accept:* free · *Use:* **+1 Bane** on the tab
- *Standing:* while worn you cannot be recognised by name - *Standing:* you are expected to come back
**Attention trigger:** lingering. **Attention trigger:** lingering.
**Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks. **Bane beat — relicUse.** Who: *whoever spends the relic*. When: *each use*. repeatable. Say it aloud when it banks.
@@ -179,7 +179,7 @@ On success it is not alone, and The Silent Host will not open hostilities first.
**The clue is automatic:** a name called so often it wore into the wall — and it was done deliberately. **The clue is automatic:** a name called so often it wore into the wall — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** a sealed door, and a crack you could squeeze through — *the crack costs skin and a Bane on a failure* **The decision.** a chair drawn out, and a place laid, and time to sit — *sitting costs a Turn and buys the Host's goodwill entirely*
**Attention trigger:** loud. **Attention trigger:** loud.
@@ -202,7 +202,7 @@ On success it is not alone, and The Silent Host will not open hostilities first.
**The clue is automatic:** a chair kept empty and dusted — and it was done deliberately. **The clue is automatic:** a chair kept empty and dusted — and it was done deliberately.
[VANITY: Observation — 1 success] buys who did it, and roughly when [VANITY: Observation — 1 success] buys who did it, and roughly when
**The decision.** two ways on: one narrow and dark, one wide and announced — *the wide way is faster and the barrow hears it* **The decision.** one of the dead follows you and will not be told otherwise — *let it come and doors open; send it back and they close*
**Encounter — battle.** 1 Wraith and 3 Skeletons **Encounter — battle.** 1 Wraith and 3 Skeletons
@@ -215,10 +215,10 @@ On success it is not alone, and The Silent Host will not open hostilities first.
- **Avoidable:** it will take an appeasement over a fight every time - **Avoidable:** it will take an appeasement over a fight every time
- *Forge:* `forgeEncounter({heat:"battle", hoard:false, post:false, folderId})` - *Forge:* `forgeEncounter({heat:"battle", hoard:false, post:false, folderId})`
**Hoard.** Tier **chest**. **Hoard.** Tier **chest**.
**Temptation — coronet.** a small crown, sized for someone who never grew **Temptation — cup.** a second cup, always set out
- *Benefit:* +1 die when others must defer to you - *Benefit:* share it and gain an ally among the dead for a scene
- *Accept:* free · *Use:* **+1 Bane** on the tab - *Accept:* free · *Use:* **+1 Bane** on the tab
- *Standing:* you must be addressed correctly or lose the benefit - *Standing:* they expect to be included from now on
**Attention trigger:** disturbed. **Attention trigger:** disturbed.
**Bane beat — flattery.** Who: *whoever performs the appeasement*. When: *each time it is used*. repeatable. Say it aloud when it banks. **Bane beat — flattery.** Who: *whoever performs the appeasement*. When: *each time it is used*. repeatable. Say it aloud when it banks.