// 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;