Add chance and a cast that changes between runs, and a pack to try them
An option used to do exactly what it said. Now it may carry a check: one of
four attributes (Nerve, Wits, Charm, Resolve) against a set difficulty or
against a named person's own attribute, leaning on how they regard you, with a
success and a failure. The player sees only the odds in words ("a long shot",
"likely"), never a number. The roll is one draw from the run's generator, so a
run still replays exactly from its seed and choices.
A character may be a role with several authored candidates, one drawn per run,
or a group of two to four drawn into numbered slots. Everyone carries a name, a
description and the same four attributes as the player, so a replayed pack
meets a different office. Text names people as {partner} or {clerk}, and an
event about "a clerk" binds one present clerk for the turn. The draw and the
binding are saved with the run, and a save from before a pack drew a cast gets
the same one every time it is loaded.
All of it is generic and optional: Corporate Ladder and the Frontier use none
of it and play as before. The Counting House, a one-stage office about 1910
built from the story-to-pack catalogue, exercises it, and was tuned against the
conformance suite by measurement. DECISIONS #41. Version 0.4.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018MhABSrqkwTdcybXmheDPr
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
112e558dbb
commit
3108319a2b
@@ -0,0 +1,122 @@
|
||||
// Harrow & Pike's counting house, as it might be staffed.
|
||||
//
|
||||
// Nobody here is fixed. Each role has several people who could fill it, and a
|
||||
// run draws one partner, one chief clerk and two to four clerks from them
|
||||
// (DECISIONS #41), so a second career in the same pack meets a different
|
||||
// office. Every candidate carries the same four attributes the player does,
|
||||
// and a description that should agree with them: a partner written as sharp
|
||||
// has the wits to see through a bluff, and one written as easily flattered
|
||||
// does not.
|
||||
//
|
||||
// Descriptions may name another role in braces, filled from whoever was drawn
|
||||
// into it, so a nephew can be the nephew of whichever partner this run has.
|
||||
|
||||
export const characters = [
|
||||
{
|
||||
id: 'partner',
|
||||
role_type: 'boss',
|
||||
title: 'Senior Partner',
|
||||
candidates: [
|
||||
{
|
||||
name: 'Josiah Crane',
|
||||
description:
|
||||
'Built the house from one room and a borrowed desk. Remembers every figure ' +
|
||||
'he has ever been shown, and forgives very few of them.',
|
||||
attributes: { nerve: 7, wits: 8, charm: 3, resolve: 8 },
|
||||
startingRelationship: { trust: 40 },
|
||||
},
|
||||
{
|
||||
name: 'Harriet Voss',
|
||||
description:
|
||||
'Took over the firm when her husband died and has doubled it since. ' +
|
||||
'Listens to everything and says about a fifth of it.',
|
||||
attributes: { nerve: 6, wits: 9, charm: 5, resolve: 7 },
|
||||
},
|
||||
{
|
||||
name: 'Lionel Ashby',
|
||||
description:
|
||||
'Inherited the chair and would rather be at his club. Easily flattered, ' +
|
||||
'easily bored, and sharper than he lets anyone see.',
|
||||
attributes: { nerve: 4, wits: 6, charm: 7, resolve: 3 },
|
||||
startingRelationship: { regard: 55 },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'chief',
|
||||
role_type: 'supervisor',
|
||||
title: 'Chief Clerk',
|
||||
candidates: [
|
||||
{
|
||||
name: 'Silas Pruett',
|
||||
description:
|
||||
'Thirty years at the same high desk. Counts the pen nibs on Fridays and ' +
|
||||
'knows to the penny what the stationery cupboard should hold.',
|
||||
attributes: { nerve: 5, wits: 6, charm: 2, resolve: 9 },
|
||||
},
|
||||
{
|
||||
name: 'Ada Kemble',
|
||||
description:
|
||||
'Runs the floor with a pencil behind her ear and a list, kept in the ' +
|
||||
'same pencil, of everybody\'s lapses.',
|
||||
attributes: { nerve: 6, wits: 7, charm: 4, resolve: 7 },
|
||||
startingRelationship: { trust: 40 },
|
||||
},
|
||||
{
|
||||
name: 'Horace Lumb',
|
||||
description:
|
||||
'Wanted your desk for somebody else\'s nephew and has not forgotten it. ' +
|
||||
'Polite to your face, in a way that takes some effort.',
|
||||
attributes: { nerve: 4, wits: 5, charm: 5, resolve: 6 },
|
||||
startingRelationship: { regard: 35 },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'clerk',
|
||||
role_type: 'peer',
|
||||
title: 'Clerk',
|
||||
count: [2, 4],
|
||||
candidates: [
|
||||
{
|
||||
name: 'Tom Bassett',
|
||||
description: 'Cheerful, generous with other people\'s time, and a borrower of small sums he means to repay.',
|
||||
attributes: { nerve: 5, wits: 4, charm: 7, resolve: 3 },
|
||||
},
|
||||
{
|
||||
name: 'Nell Farrow',
|
||||
description: 'The quickest pen on the floor and does not mind who knows it. Wants the next desk up, and soon.',
|
||||
attributes: { nerve: 5, wits: 8, charm: 5, resolve: 6 },
|
||||
startingRelationship: { regard: 40 },
|
||||
},
|
||||
{
|
||||
name: 'Arthur Quill',
|
||||
description: 'Timid, exact, and never wrong about a column of figures. Apologises to doors.',
|
||||
attributes: { nerve: 2, wits: 7, charm: 3, resolve: 7 },
|
||||
},
|
||||
{
|
||||
name: 'Joe Madden',
|
||||
description: 'The loudest laugh in the building and most of the jokes, not all of them kind.',
|
||||
attributes: { nerve: 7, wits: 4, charm: 6, resolve: 3 },
|
||||
},
|
||||
{
|
||||
name: 'Lottie Swain',
|
||||
description: 'Types the partner\'s letters and so knows everything a week early. Tells almost none of it.',
|
||||
attributes: { nerve: 4, wits: 7, charm: 7, resolve: 5 },
|
||||
},
|
||||
{
|
||||
name: 'Percy Dyer',
|
||||
description: 'A nephew of {partner}\'s, sent to learn the business. Has so far learned where the kettle is.',
|
||||
attributes: { nerve: 3, wits: 3, charm: 6, resolve: 2 },
|
||||
startingRelationship: { trust: 40 },
|
||||
},
|
||||
{
|
||||
name: 'Walt Rudge',
|
||||
description: 'Twenty years a clerk and content with it. The one everyone asks, and the last to be thanked.',
|
||||
attributes: { nerve: 6, wits: 6, charm: 4, resolve: 8 },
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export default characters;
|
||||
@@ -0,0 +1,882 @@
|
||||
// A clerk's days at Harrow & Pike.
|
||||
//
|
||||
// Every situation here comes from the story-to-pack catalogue (tools/
|
||||
// story-to-pack/probe/catalogue/v3), where it recurred across public-domain
|
||||
// office fiction: Torchy's door, Keefe's pay talk, Pooter's cheeky juniors,
|
||||
// Lorimer's hard boss. The id names the catalogue entry where one fits.
|
||||
//
|
||||
// This pack exists to try checks and a drawn cast (DECISIONS #41). Most options
|
||||
// test one of the four attributes, against a named person or against a set
|
||||
// difficulty, and say what happens either way; the player sees only the odds
|
||||
// in words. Names are written as `{partner}`, `{chief}` and `{clerk}` and filled
|
||||
// from whoever this run drew. An event about "a clerk" lists `clerk` in
|
||||
// `involves`, and the engine picks one present clerk for the turn.
|
||||
|
||||
const moment = (text) => ({ path: 'notable', op: 'push', value: text });
|
||||
|
||||
export const events = [
|
||||
{
|
||||
id: 'first_day',
|
||||
stage: 'desk',
|
||||
weight: 1000,
|
||||
once: true,
|
||||
involves: ['clerk'],
|
||||
description:
|
||||
'Your first morning at Harrow & Pike. {chief} shows you a stool, a pen, a ' +
|
||||
'blotter and the clock, in that order, and leaves you to draw your own ' +
|
||||
'conclusions about which matters most.',
|
||||
options: [
|
||||
{
|
||||
id: 'before_the_clock',
|
||||
label: 'Be on the stool before the clock is.',
|
||||
result: '{chief} notices, and writes something down. It may even be good.',
|
||||
effects: [
|
||||
{ path: 'relationships.chief.regard', op: 'add', value: 4 },
|
||||
moment('Began at Harrow & Pike, early.'),
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'meet_the_floor',
|
||||
label: 'Go round and introduce yourself to {clerk}.',
|
||||
result: '{clerk} shakes your hand and tells you which of the pens leak.',
|
||||
effects: [
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: 5 },
|
||||
moment('Began at Harrow & Pike, and met {clerk} first.'),
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
// The floor: the one event nothing can exclude.
|
||||
{
|
||||
id: 'the_ledgers',
|
||||
stage: 'desk',
|
||||
weight: 40,
|
||||
description:
|
||||
'The ledgers are the same as last week\'s, only longer. {chief} has left a ' +
|
||||
'note on your blotter about the width of your margins.',
|
||||
options: [
|
||||
{
|
||||
id: 'head_down',
|
||||
label: 'Keep your head down and work.',
|
||||
result: 'The day goes into the columns, as days here do.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: 1 },
|
||||
{ path: 'relationships.chief.trust', op: 'add', value: 1 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'stay_late',
|
||||
label: 'Stay on after six to finish the day book.',
|
||||
result: 'Overtime is paid, at the rate the firm thinks overtime is worth.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 2 },
|
||||
{ path: 'relationships.chief.regard', op: 'add', value: 1 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'ease_off',
|
||||
label: 'Make the day last.',
|
||||
result: 'Nobody notices, today.',
|
||||
effects: [{ path: 'standing', op: 'add', value: -1 }],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'ask_for_more',
|
||||
stage: 'desk',
|
||||
weight: 25,
|
||||
cooldown: 12,
|
||||
requires: [
|
||||
{ path: 'turn', op: '>=', value: 10 },
|
||||
{ path: 'rises', op: '<', value: 3 },
|
||||
],
|
||||
description:
|
||||
'You have been at the desk long enough to know what the work is worth, and ' +
|
||||
'your lodgings have not got any cheaper. {partner} is in, and alone.',
|
||||
options: [
|
||||
{
|
||||
id: 'ask',
|
||||
label: 'Knock, and ask {partner} for a rise.',
|
||||
check: { attribute: 'charm', against: 'partner', opposedBy: 'wits', relationship: 'trust' },
|
||||
success: {
|
||||
result: '{partner} looks at you for a long moment and says the firm can manage something.',
|
||||
effects: [
|
||||
{ path: 'rises', op: 'add', value: 1 },
|
||||
{ path: 'standing', op: 'add', value: 3 },
|
||||
moment('Asked {partner} for a rise, and got it.'),
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: '{partner} asks whether you have any idea what a clerk is worth. You find you do not.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: -5 },
|
||||
{ path: 'standing', op: 'add', value: -2 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'hint',
|
||||
label: 'Say nothing directly; mention the price of lodgings.',
|
||||
check: { attribute: 'wits', difficulty: 5 },
|
||||
success: {
|
||||
result: '{partner} takes the point and, better, thinks it was a delicate one.',
|
||||
effects: [{ path: 'relationships.partner.regard', op: 'add', value: 4 }],
|
||||
},
|
||||
failure: {
|
||||
result: '{partner} agrees that lodgings are very dear and goes back to the post.',
|
||||
effects: [],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'not_yet',
|
||||
label: 'Wait for a better moment.',
|
||||
result: 'There will be one. There usually is.',
|
||||
effects: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'called_in',
|
||||
stage: 'desk',
|
||||
weight: 30,
|
||||
cooldown: 8,
|
||||
involves: ['clerk'],
|
||||
description:
|
||||
'{chief} has found a column that does not add up, and it is in your hand. You ' +
|
||||
'are to explain it, standing, in front of the high desk.',
|
||||
options: [
|
||||
{
|
||||
id: 'own_up',
|
||||
label: 'Say plainly that it was your mistake.',
|
||||
check: { attribute: 'resolve', difficulty: 4 },
|
||||
success: {
|
||||
result: 'It is noted, and then, which is rarer, it is let go.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: 4 },
|
||||
{ path: 'attributes.resolve', op: 'add', value: 1 },
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: 'You start well and finish apologising for the weather.',
|
||||
effects: [{ path: 'standing', op: 'add', value: -2 }],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'argue',
|
||||
label: 'Argue that the figures were right.',
|
||||
check: { attribute: 'wits', against: 'chief' },
|
||||
success: {
|
||||
result: 'They were. {chief} checks twice and hands the page back without a word.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: 3 },
|
||||
{ path: 'relationships.chief.regard', op: 'add', value: -4 },
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: 'They were not, and now everybody knows you thought they were.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: -4 },
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: -3 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'blame',
|
||||
label: 'Say the figures came from {clerk}\'s desk.',
|
||||
check: { attribute: 'wits', against: 'chief' },
|
||||
success: {
|
||||
result: '{chief} goes to find {clerk}. You do not watch.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: 1 },
|
||||
{ path: 'relationships.{clerk}.trust', op: 'add', value: -8 },
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: '{chief} has the day book open at your page before you finish the sentence.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: -5 },
|
||||
{ path: 'relationships.{clerk}.trust', op: 'add', value: -10 },
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: -5 },
|
||||
moment('Tried to put a mistake on {clerk}, and was found out.'),
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'the_door',
|
||||
stage: 'desk',
|
||||
weight: 30,
|
||||
cooldown: 6,
|
||||
description:
|
||||
'A caller in a good coat wants {partner} and will not give his name. You ' +
|
||||
'were told the partner was not to be disturbed before three.',
|
||||
options: [
|
||||
{
|
||||
id: 'turn_away',
|
||||
label: 'Tell him the partner is out.',
|
||||
check: { attribute: 'nerve', difficulty: 5 },
|
||||
success: {
|
||||
result: 'He goes. {partner} hears of it later and approves of the lie.',
|
||||
effects: [{ path: 'relationships.partner.trust', op: 'add', value: 3 }],
|
||||
},
|
||||
failure: {
|
||||
result: 'He sits down to wait, and {partner} comes out at a quarter past and finds him there.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.regard', op: 'add', value: -3 },
|
||||
{ path: 'standing', op: 'add', value: -1 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'size_him_up',
|
||||
label: 'Size him up and decide for yourself.',
|
||||
check: { attribute: 'wits', difficulty: 6 },
|
||||
success: {
|
||||
result: 'You read him right. He mattered, and he got in, and {partner} knows who let him.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: 5 },
|
||||
{ path: 'standing', op: 'add', value: 2 },
|
||||
moment('Judged a caller at the door, and judged him right.'),
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: 'He was selling encyclopaedias, and {partner} bought one to get rid of him.',
|
||||
effects: [{ path: 'relationships.partner.trust', op: 'add', value: -4 }],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'pass_it_on',
|
||||
label: 'Fetch {chief} and let it be somebody else\'s decision.',
|
||||
result: '{chief} deals with it, and with you, briefly.',
|
||||
effects: [{ path: 'standing', op: 'add', value: -1 }],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'needled',
|
||||
stage: 'desk',
|
||||
weight: 40,
|
||||
cooldown: 4,
|
||||
involves: ['clerk'],
|
||||
description:
|
||||
'{clerk} reads your last letter aloud in a voice meant to be yours, and the ' +
|
||||
'floor laughs, and keeps laughing longer than it deserves.',
|
||||
options: [
|
||||
{
|
||||
id: 'let_it_go',
|
||||
label: 'Let it pass.',
|
||||
result: 'It passes. They will remember that you let it.',
|
||||
effects: [
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: 1 },
|
||||
{ path: 'standing', op: 'add', value: -1 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'retort',
|
||||
label: 'Answer {clerk} back, with the floor listening.',
|
||||
check: { attribute: 'wits', against: '{clerk}', relationship: 'regard' },
|
||||
success: {
|
||||
result: 'It gets a bigger laugh than the letter did, and {clerk} laughs too.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: 2 },
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: 3 },
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: 'It comes out too sharp, and the laugh turns on you.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: -2 },
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: -3 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'report',
|
||||
label: 'Mention it to {chief}.',
|
||||
result: '{chief} has a word. {clerk} knows where it came from.',
|
||||
effects: [
|
||||
{ path: 'relationships.chief.trust', op: 'add', value: 2 },
|
||||
{ path: 'relationships.{clerk}.trust', op: 'add', value: -6 },
|
||||
{ path: 'standing', op: 'add', value: -1 },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'red_ink',
|
||||
stage: 'desk',
|
||||
weight: 30,
|
||||
cooldown: 6,
|
||||
description:
|
||||
'{chief} has gone over your morning\'s work in red ink, and left the page ' +
|
||||
'open on the high desk where the whole floor can see it.',
|
||||
options: [
|
||||
{
|
||||
id: 'swallow_it',
|
||||
label: 'Take it, and do the page again.',
|
||||
result: 'You do it again. {chief} initials it without looking up.',
|
||||
effects: [
|
||||
{ path: 'relationships.chief.regard', op: 'add', value: 2 },
|
||||
{ path: 'standing', op: 'add', value: -1 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'answer_back',
|
||||
label: 'Point out that the red ink is wrong.',
|
||||
check: { attribute: 'wits', against: 'chief' },
|
||||
success: {
|
||||
result: 'It is, in two places. {chief} says nothing, which from {chief.first} is a concession.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: 2 },
|
||||
{ path: 'relationships.chief.regard', op: 'add', value: 3 },
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: 'The red ink is right. It usually is.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: -2 },
|
||||
{ path: 'relationships.chief.regard', op: 'add', value: -5 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'over_the_head',
|
||||
label: 'Take the page to {partner}.',
|
||||
check: { attribute: 'charm', against: 'partner', opposedBy: 'resolve', relationship: 'trust' },
|
||||
success: {
|
||||
result: '{partner} reads it, and has a word with {chief}, and {chief} has one with you.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: 3 },
|
||||
{ path: 'relationships.chief.regard', op: 'add', value: -8 },
|
||||
{ path: 'standing', op: 'add', value: 2 },
|
||||
moment('Went over {chief}\'s head, and it worked.'),
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: '{partner} says the chief clerk runs the floor, and asks whether there was anything else.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: -4 },
|
||||
{ path: 'relationships.chief.regard', op: 'add', value: -8 },
|
||||
{ path: 'standing', op: 'add', value: -3 },
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'sure_thing',
|
||||
stage: 'desk',
|
||||
weight: 15,
|
||||
cooldown: 20,
|
||||
description:
|
||||
'A pleasant man at the chop-house has a share in a tramway in Brazil going ' +
|
||||
'begging. Twelve dollars today, he says, will be forty by Christmas.',
|
||||
options: [
|
||||
{
|
||||
id: 'buy_in',
|
||||
label: 'Put in twelve dollars.',
|
||||
effects: [{ path: 'money', op: 'add', value: -12 }],
|
||||
check: { attribute: 'wits', difficulty: 7 },
|
||||
success: {
|
||||
result: 'Against every expectation, including his, it pays.',
|
||||
effects: [{ path: 'money', op: 'add', value: 30 }, moment('Bought a share in a tramway, and it paid.')],
|
||||
},
|
||||
failure: {
|
||||
result: 'There is no tramway. There is, briefly, a man.',
|
||||
effects: [moment('Bought a share in a tramway that did not exist.')],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'see_through',
|
||||
label: 'Ask him the one question he cannot answer.',
|
||||
check: { attribute: 'wits', difficulty: 6 },
|
||||
success: {
|
||||
result: 'He finds he has an appointment. You find you are sharper than you were.',
|
||||
effects: [{ path: 'attributes.wits', op: 'add', value: 1 }, moment('Saw through a tramway in Brazil.')],
|
||||
},
|
||||
failure: {
|
||||
result: 'He answers it smoothly, and you are left not knowing.',
|
||||
effects: [],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'decline',
|
||||
label: 'Keep your money in your pocket.',
|
||||
result: 'He is sorry for you, he says, and goes to find someone less careful.',
|
||||
effects: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'the_round',
|
||||
stage: 'desk',
|
||||
weight: 30,
|
||||
cooldown: 5,
|
||||
involves: ['clerk'],
|
||||
description:
|
||||
'{clerk} and the others are going to the chop-house after work, and they ' +
|
||||
'have kept you a place. The round there is not cheap.',
|
||||
options: [
|
||||
{
|
||||
id: 'go',
|
||||
label: 'Go, and stand your round.',
|
||||
result: 'A good evening, and a dear one.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: -5 },
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: 4 },
|
||||
{ path: 'standing', op: 'add', value: 1 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'talk_your_way',
|
||||
label: 'Go, and talk your way out of the round.',
|
||||
check: { attribute: 'charm', against: '{clerk}', opposedBy: 'wits' },
|
||||
success: {
|
||||
result: 'Nobody notices you never reached for your purse, and {clerk} laughs at all your jokes.',
|
||||
effects: [{ path: 'relationships.{clerk}.regard', op: 'add', value: 3 }],
|
||||
},
|
||||
failure: {
|
||||
result: '{clerk} notices, and says so, and you pay for the round and the remark.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: -5 },
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: -2 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'excuse',
|
||||
label: 'Make an excuse and go home.',
|
||||
result: 'They go without you. They will ask again, perhaps.',
|
||||
effects: [{ path: 'relationships.{clerk}.regard', op: 'add', value: -2 }],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'night_school',
|
||||
stage: 'desk',
|
||||
weight: 25,
|
||||
cooldown: 5,
|
||||
requires: [{ path: 'money', op: '>=', value: 3 }],
|
||||
description:
|
||||
'A card in the tram window: evening classes in bookkeeping, in the art of ' +
|
||||
'address, and at the boxing club behind the Institute. Three dollars a course.',
|
||||
options: [
|
||||
{
|
||||
id: 'bookkeeping',
|
||||
label: 'Take the bookkeeping course.',
|
||||
result: 'Double entry, twice a week. Your columns begin to add up before you do.',
|
||||
effects: [{ path: 'money', op: 'add', value: -3 }, { path: 'attributes.wits', op: 'add', value: 1 }],
|
||||
},
|
||||
{
|
||||
id: 'address',
|
||||
label: 'Take the art of address.',
|
||||
result: 'You learn when to say nothing, which is most of it.',
|
||||
effects: [{ path: 'money', op: 'add', value: -3 }, { path: 'attributes.charm', op: 'add', value: 1 }],
|
||||
},
|
||||
{
|
||||
id: 'boxing',
|
||||
label: 'Join the boxing club.',
|
||||
result: 'You are hit in the face by a draper. It does you a world of good.',
|
||||
effects: [{ path: 'money', op: 'add', value: -3 }, { path: 'attributes.nerve', op: 'add', value: 1 }],
|
||||
},
|
||||
{
|
||||
id: 'not_this_term',
|
||||
label: 'Not this term.',
|
||||
result: 'The card is still there next week.',
|
||||
effects: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'stand_in',
|
||||
stage: 'desk',
|
||||
weight: 15,
|
||||
cooldown: 10,
|
||||
requires: [{ path: 'standing', op: '>=', value: 45 }],
|
||||
description:
|
||||
'{partner} is laid up and sends you, of all people, to sit in on the meeting ' +
|
||||
'with the shipping agents. You are to listen, and to say as little as possible.',
|
||||
options: [
|
||||
{
|
||||
id: 'listen',
|
||||
label: 'Listen, and take good notes.',
|
||||
result: 'Your notes are better than the minutes. {partner} keeps them.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: 2 },
|
||||
{ path: 'standing', op: 'add', value: 1 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'speak_up',
|
||||
label: 'Say the thing you noticed in their figures.',
|
||||
check: { attribute: 'wits', difficulty: 7 },
|
||||
success: {
|
||||
result: 'You were right, the agents know it, and so, by the afternoon, does {partner}.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: 6 },
|
||||
{ path: 'standing', op: 'add', value: 5 },
|
||||
moment('Spoke up at the agents\' meeting in {partner}\'s place, and was right.'),
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: 'You were wrong in front of people who were paid to be right.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: -4 },
|
||||
{ path: 'standing', op: 'add', value: -3 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'charm_them',
|
||||
label: 'Charm the agents over lunch.',
|
||||
check: { attribute: 'charm', difficulty: 6 },
|
||||
success: {
|
||||
result: 'They like you. They say so to {partner}, which is the point.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.regard', op: 'add', value: 5 },
|
||||
{ path: 'standing', op: 'add', value: 3 },
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: 'The lunch is long, and you pay for it.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: -4 },
|
||||
{ path: 'standing', op: 'add', value: -1 },
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'lost_bill',
|
||||
stage: 'desk',
|
||||
weight: 20,
|
||||
cooldown: 12,
|
||||
involves: ['clerk'],
|
||||
description:
|
||||
'{clerk} has lost a bill of lading, and {chief} is talking about a letter to ' +
|
||||
'the partner. {clerk} has not looked up from the desk all morning.',
|
||||
options: [
|
||||
{
|
||||
id: 'speak_for',
|
||||
label: 'Put {clerk}\'s case to {partner} yourself.',
|
||||
check: { attribute: 'charm', against: 'partner', opposedBy: 'resolve', relationship: 'trust' },
|
||||
success: {
|
||||
result: '{partner} hears you out and lets it go. {clerk} does not forget who spoke.',
|
||||
effects: [
|
||||
{ path: 'relationships.{clerk}.trust', op: 'add', value: 10 },
|
||||
{ path: 'relationships.partner.regard', op: 'add', value: 2 },
|
||||
moment('Spoke up for {clerk}, and it held.'),
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: '{partner} asks whether you would like to share the letter.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: -3 },
|
||||
{ path: 'relationships.{clerk}.trust', op: 'add', value: 4 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'help_look',
|
||||
label: 'Stay late and help look for it.',
|
||||
check: { attribute: 'resolve', difficulty: 5 },
|
||||
success: {
|
||||
result: 'It is in the wrong drawer, under the right one. You find it at nine.',
|
||||
effects: [
|
||||
{ path: 'relationships.{clerk}.trust', op: 'add', value: 8 },
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: 4 },
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: 'It is not found, but {clerk} saw you look.',
|
||||
effects: [{ path: 'relationships.{clerk}.regard', op: 'add', value: 2 }],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'keep_out',
|
||||
label: 'Keep out of it.',
|
||||
result: 'The letter goes. So, very nearly, does {clerk}.',
|
||||
effects: [{ path: 'relationships.{clerk}.trust', op: 'add', value: -3 }],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'the_butt',
|
||||
stage: 'desk',
|
||||
weight: 20,
|
||||
cooldown: 8,
|
||||
involves: ['clerk'],
|
||||
description:
|
||||
'Somebody has pinned a card to your back, and you have walked the length of ' +
|
||||
'the floor to {chief}\'s desk wearing it. {clerk} cannot keep a straight face.',
|
||||
options: [
|
||||
{
|
||||
id: 'laugh_along',
|
||||
label: 'Laugh louder than anybody.',
|
||||
check: { attribute: 'charm', difficulty: 4 },
|
||||
success: {
|
||||
result: 'It becomes your joke instead of theirs.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: 1 },
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: 3 },
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: 'The laugh comes out wrong, and everyone hears that it did.',
|
||||
effects: [{ path: 'standing', op: 'add', value: -2 }],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'dignity',
|
||||
label: 'Take it off and say nothing at all.',
|
||||
check: { attribute: 'resolve', difficulty: 4 },
|
||||
success: {
|
||||
result: 'It is not funny for long, when nobody is laughing at the front.',
|
||||
effects: [{ path: 'standing', op: 'add', value: 1 }],
|
||||
},
|
||||
failure: {
|
||||
result: 'Your ears give you away.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: -1 },
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: -2 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'get_even',
|
||||
label: 'Resolve to do something about {clerk} tomorrow.',
|
||||
result: 'You do. It is not as funny, and {clerk} knows exactly who it was.',
|
||||
effects: [
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: -2 },
|
||||
{ path: 'relationships.{clerk}.trust', op: 'add', value: -3 },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'saturday',
|
||||
stage: 'desk',
|
||||
weight: 60,
|
||||
cooldown: 5,
|
||||
requires: [{ path: 'calendar.name', op: '==', value: 'Saturday' }],
|
||||
description:
|
||||
'Saturday, and the office shuts at one. The pay envelope is in your inside ' +
|
||||
'pocket, and the whole of the afternoon is in front of you.',
|
||||
options: [
|
||||
{
|
||||
id: 'new_collar',
|
||||
label: 'Buy the collar the senior clerks wear.',
|
||||
result: 'It pinches, and it is noticed.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: -5 },
|
||||
{ path: 'standing', op: 'add', value: 2 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'good_dinner',
|
||||
label: 'Dine somewhere with a tablecloth.',
|
||||
result: 'A dinner you will describe, later, to people who were not there.',
|
||||
effects: [{ path: 'money', op: 'add', value: -4 }],
|
||||
},
|
||||
{
|
||||
id: 'pay_back',
|
||||
label: 'Pay back what you owe the floor.',
|
||||
requires: [{ path: 'owed', op: '>', value: 0 }],
|
||||
whenLocked: 'hide',
|
||||
result: 'Squared, or nearer it. It is a better feeling than the dinner would have been.',
|
||||
// The money is read from the balance before either moves, so a small
|
||||
// debt costs what it is and no more (DECISIONS #38).
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: { from: 'owed', times: -1, cap: 10 } },
|
||||
{ path: 'owed', op: 'add', value: { from: 'owed', times: -1, cap: 10 } },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'straight_home',
|
||||
label: 'Straight home, envelope sealed.',
|
||||
result: 'The envelope is lighter than it was in your imagination, but it is all there.',
|
||||
effects: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'family_errand',
|
||||
stage: 'desk',
|
||||
weight: 20,
|
||||
cooldown: 8,
|
||||
involves: ['clerk'],
|
||||
description:
|
||||
'A parcel for {partner}\'s sister has to cross the city before four, in the ' +
|
||||
'rain, and {partner} has asked for you by name. It is not in the job.',
|
||||
options: [
|
||||
{
|
||||
id: 'take_it',
|
||||
label: 'Take it yourself, and pay your own tram.',
|
||||
result: 'The sister gives you tea, and a message for {partner} that is more about you than the parcel.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: -1 },
|
||||
{ path: 'relationships.partner.regard', op: 'add', value: 4 },
|
||||
{ path: 'standing', op: 'add', value: -1 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'make_an_impression',
|
||||
label: 'Take it, and make yourself agreeable when you get there.',
|
||||
check: { attribute: 'charm', difficulty: 5 },
|
||||
success: {
|
||||
result: 'The sister writes to {partner} that evening. You are mentioned warmly.',
|
||||
effects: [
|
||||
{ path: 'relationships.partner.regard', op: 'add', value: 6 },
|
||||
{ path: 'relationships.partner.trust', op: 'add', value: 2 },
|
||||
moment('Carried a parcel for {partner}\'s sister, and made a friend of her.'),
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: 'You drip on the carpet and say something about the weather twice.',
|
||||
effects: [{ path: 'relationships.partner.regard', op: 'add', value: 1 }],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'hand_it_on',
|
||||
label: 'Hand it on to {clerk}, who is going that way.',
|
||||
result: '{clerk} goes, and gets the tea, and does not say whose errand it was.',
|
||||
effects: [
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: -3 },
|
||||
{ path: 'relationships.partner.regard', op: 'add', value: -2 },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'window_desk',
|
||||
stage: 'desk',
|
||||
weight: 20,
|
||||
cooldown: 10,
|
||||
involves: ['clerk'],
|
||||
description:
|
||||
'The desk by the window has come free. {chief} says it will go to whoever ' +
|
||||
'deserves it, and {clerk} has been in before the clock all week.',
|
||||
options: [
|
||||
{
|
||||
id: 'outwork',
|
||||
label: 'Come in earlier than {clerk} does.',
|
||||
check: { attribute: 'resolve', against: '{clerk}' },
|
||||
success: {
|
||||
result: 'You are there before the cleaners. The desk is yours, and so is the draught.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: 4 },
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: -3 },
|
||||
moment('Won the desk by the window from {clerk}.'),
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: '{clerk} was there before you, every morning, and has the desk.',
|
||||
effects: [{ path: 'standing', op: 'add', value: -1 }],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'word_with_chief',
|
||||
label: 'Have a quiet word with {chief}.',
|
||||
check: { attribute: 'charm', against: 'chief', opposedBy: 'wits', relationship: 'regard' },
|
||||
success: {
|
||||
result: '{chief} decides the matter in your favour, and makes sure {clerk} knows why.',
|
||||
effects: [
|
||||
{ path: 'standing', op: 'add', value: 3 },
|
||||
{ path: 'relationships.{clerk}.trust', op: 'add', value: -6 },
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: '{chief} writes your name down, next to the word "canvassing".',
|
||||
effects: [
|
||||
{ path: 'relationships.chief.trust', op: 'add', value: -4 },
|
||||
{ path: 'standing', op: 'add', value: -2 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'let_them_have_it',
|
||||
label: 'Let {clerk} have it.',
|
||||
result: '{clerk} takes the desk and, to your surprise, remembers who did not fight for it.',
|
||||
effects: [
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: 5 },
|
||||
{ path: 'relationships.{clerk}.trust', op: 'add', value: 3 },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'hard_times',
|
||||
stage: 'desk',
|
||||
weight: 400,
|
||||
cooldown: 2,
|
||||
requires: [{ path: 'money', op: '<', value: 0 }],
|
||||
involves: ['clerk'],
|
||||
description:
|
||||
'The landlady has knocked twice about the week, and the purse under your ' +
|
||||
'pillow is empty. It is a long walk to Saturday.',
|
||||
options: [
|
||||
{
|
||||
id: 'copying',
|
||||
label: 'Take in copying work to do at night.',
|
||||
result: 'Law papers, by lamp, at a halfpenny a folio. It keeps the landlady quiet.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 8 },
|
||||
{ path: 'attributes.resolve', op: 'add', value: 1 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'borrow',
|
||||
label: 'Ask {clerk} for the loan of ten dollars.',
|
||||
check: { attribute: 'charm', against: '{clerk}', opposedBy: 'resolve', relationship: 'trust' },
|
||||
success: {
|
||||
result: '{clerk} lends it, and tells you not to mention it, and you will not forget.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 10 },
|
||||
{ path: 'owed', op: 'add', value: 10 },
|
||||
{ path: 'relationships.{clerk}.trust', op: 'add', value: -2 },
|
||||
],
|
||||
},
|
||||
failure: {
|
||||
result: '{clerk} is short too, but finds you three, and makes a face about it.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 3 },
|
||||
{ path: 'owed', op: 'add', value: 3 },
|
||||
{ path: 'relationships.{clerk}.regard', op: 'add', value: -3 },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'pawn_the_watch',
|
||||
label: 'Pawn your father\'s watch.',
|
||||
requires: [{ path: 'flags.pawned_watch', op: '==', value: false }],
|
||||
whenLocked: 'hide',
|
||||
result: 'Twelve dollars and a ticket. You will get it back. Everybody says that.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 12 },
|
||||
{ path: 'flags.pawned_watch', op: 'set', value: true },
|
||||
moment('Pawned your father\'s watch to pay the landlady.'),
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export default events;
|
||||
@@ -0,0 +1,136 @@
|
||||
// The Counting House — a prototype pack for checks and a drawn cast.
|
||||
//
|
||||
// Harrow & Pike, a trading firm's counting house, somewhere about 1910. You
|
||||
// are the newest clerk. The situations are the ones public-domain office
|
||||
// fiction kept returning to (tools/story-to-pack, catalogue v3); the people are
|
||||
// drawn fresh each run from several candidates per role, two to four clerks
|
||||
// among them; and most choices are a check, shown to the player only as odds
|
||||
// in words. See DECISIONS #41.
|
||||
//
|
||||
// One stage, deliberately: this pack exists to find out whether chance and a
|
||||
// varying cast make the same situations worth replaying, before a whole career
|
||||
// is built on them.
|
||||
|
||||
import { characters } from './characters.js';
|
||||
import { events } from './events.js';
|
||||
|
||||
export const countingHouse = {
|
||||
id: 'countinghouse',
|
||||
name: 'The Counting House',
|
||||
blurb:
|
||||
'Harrow & Pike, about 1910: a stool, a pen, a chief clerk with red ink, and a ' +
|
||||
'different office every time you start.',
|
||||
version: '0.1.0',
|
||||
turnUnit: 'day',
|
||||
startingStage: 'desk',
|
||||
peopleHeading: 'Harrow & Pike',
|
||||
|
||||
stages: {
|
||||
desk: { label: 'The Desk', title: 'Junior Clerk' },
|
||||
},
|
||||
|
||||
// A six-day week: the office shuts at one on Saturday, and that is pay day.
|
||||
calendar: {
|
||||
cycleLength: 6,
|
||||
cycleName: 'Week',
|
||||
unitNames: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
|
||||
},
|
||||
|
||||
// The four attributes, the same for the player and for everyone in the cast.
|
||||
// A pack may call them what it likes; these are the prototype's names.
|
||||
attributes: {
|
||||
nerve: { label: 'Nerve' },
|
||||
wits: { label: 'Wits' },
|
||||
charm: { label: 'Charm' },
|
||||
resolve: { label: 'Resolve' },
|
||||
},
|
||||
|
||||
// How attributes turn into chances. The player sees only the words.
|
||||
// chance = 50 + 8 x (yours - theirs) + 0.4 x (their regard - 50), from 5 to 95
|
||||
// A new clerk (3) against a sharp partner (8) is 10%, a long shot; against an
|
||||
// ordinary task (4) it is 42%. Each point of training is worth eight.
|
||||
checks: {
|
||||
base: 50,
|
||||
perPoint: 8,
|
||||
unopposed: 4,
|
||||
relationshipPerPoint: 0.4,
|
||||
relationshipCentre: 50,
|
||||
floor: 5,
|
||||
ceiling: 95,
|
||||
odds: [
|
||||
{ upTo: 20, words: 'a long shot' },
|
||||
{ upTo: 40, words: 'unlikely' },
|
||||
{ upTo: 60, words: 'an even chance' },
|
||||
{ upTo: 80, words: 'likely' },
|
||||
{ upTo: 95, words: 'a safe bet' },
|
||||
],
|
||||
said: { success: 'and it came off.', failure: 'and it did not come off.' },
|
||||
},
|
||||
|
||||
state: {
|
||||
'money': { initial: 20, min: -200, max: 100000 },
|
||||
'standing': { initial: 40, min: 0, max: 100 },
|
||||
'attributes.nerve': { initial: 3, min: 0, max: 10 },
|
||||
'attributes.wits': { initial: 3, min: 0, max: 10 },
|
||||
'attributes.charm': { initial: 3, min: 0, max: 10 },
|
||||
'attributes.resolve': { initial: 3, min: 0, max: 10 },
|
||||
// Borrowed from the other clerks when times are hard, repaid on a Saturday.
|
||||
'owed': { initial: 0, min: 0, max: 100000 },
|
||||
// Rises won from the partner: each is a permanent addition to the wage.
|
||||
'rises': { initial: 0, min: 0, max: 3 },
|
||||
'flags.pawned_watch': { initial: false },
|
||||
'notable': { initial: [] },
|
||||
},
|
||||
|
||||
// Two axes, not one: whether they believe you, and what they think of you.
|
||||
relationshipStats: {
|
||||
trust: { label: 'Trusts you', initial: 50, min: 0, max: 100 },
|
||||
regard: { label: 'Thinks well of you', initial: 50, min: 0, max: 100 },
|
||||
},
|
||||
|
||||
characters,
|
||||
events,
|
||||
|
||||
// Per six-day week: -12 board and lodging +16 wages = +4.
|
||||
// Each rise adds four; a rise is earned, so it is outside the baseline.
|
||||
upkeep: [
|
||||
{ label: 'Board and lodging', effects: [{ path: 'money', op: 'add', value: -2 }] },
|
||||
{
|
||||
label: 'Wages from Harrow & Pike',
|
||||
every: 6,
|
||||
offset: 5,
|
||||
effects: [{ path: 'money', op: 'add', value: 16 }],
|
||||
},
|
||||
...[1, 2, 3].map((n) => ({
|
||||
label: n === 1 ? 'Your rise' : `Your rise (${n})`,
|
||||
every: 6,
|
||||
offset: 5,
|
||||
requires: [{ path: 'rises', op: '>=', value: n }],
|
||||
effects: [{ path: 'money', op: 'add', value: 4 }],
|
||||
})),
|
||||
],
|
||||
|
||||
tuning: {
|
||||
baselinePerCycle: { desk: [0, 10] },
|
||||
baselineExcludes: ['rises'],
|
||||
},
|
||||
|
||||
display: {
|
||||
'money': { label: 'Money', format: 'money', order: 1 },
|
||||
'owed': { label: 'Owed to the floor', format: 'money', order: 2, hideWhenZero: true },
|
||||
'standing': { label: 'Standing', format: 'meter', order: 2 },
|
||||
'attributes.nerve': { label: 'Nerve', format: 'meter', order: 3 },
|
||||
'attributes.wits': { label: 'Wits', format: 'meter', order: 4 },
|
||||
'attributes.charm': { label: 'Charm', format: 'meter', order: 5 },
|
||||
'attributes.resolve': { label: 'Resolve', format: 'meter', order: 6 },
|
||||
'rises': { label: 'Rises', order: 7, hideWhenZero: true },
|
||||
'notable': { hidden: true, inLedger: false },
|
||||
'flags.pawned_watch': {
|
||||
label: 'Your father\'s watch', hidden: true,
|
||||
whenTrue: 'Your father\'s watch is at the pawnbroker\'s.',
|
||||
whenFalse: 'You have your father\'s watch back.',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default countingHouse;
|
||||
+2
-1
@@ -10,8 +10,9 @@
|
||||
|
||||
import { corporateLadder } from './corporateladder/index.js';
|
||||
import { frontier } from './frontier/index.js';
|
||||
import { countingHouse } from './countinghouse/index.js';
|
||||
|
||||
export const packs = [corporateLadder, frontier];
|
||||
export const packs = [corporateLadder, frontier, countingHouse];
|
||||
|
||||
/** A pack by id, or undefined. Used to resume into whatever was last played. */
|
||||
export function packById(id) {
|
||||
|
||||
Reference in New Issue
Block a user