Add The Frontier, a second setting, and a picker to choose between them
Cold Fork is a freight yard: 29 events across two stages, a four-day cycle, and its own relationship and skill vocabulary. src/engine/ was not touched. Adding it needed three changes outside the engine: one save slot per pack, app.js holding the current pack, and turn.js no longer naming the mailroom (DECISIONS #34). build.js now handles imports wrapped across lines. A conformance suite runs over every registered pack. DECISIONS #35 records three calls on open questions. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RxdJFbLq1rBKsUeticGV1g
This commit is contained in:
co-authored by
Claude Opus 5
parent
4957c24e31
commit
7f20be83e8
@@ -0,0 +1,415 @@
|
||||
// The three people in Cold Fork who have an opinion about you.
|
||||
//
|
||||
// Relationship-gated content, and the counterweight to the yard: the runs pay
|
||||
// the room, but Dutch's book, Vane's ledger and Ward's slow appraisal are what
|
||||
// decide whether the star is ever offered.
|
||||
|
||||
export const people = [
|
||||
{
|
||||
id: 'dutch_book',
|
||||
stage: 'hand',
|
||||
weight: 70,
|
||||
cooldown: 5,
|
||||
description:
|
||||
'Dutch has his tally book open on the tailgate and is working through ' +
|
||||
'who took which run this month. He has arrived at a number he does not ' +
|
||||
'like and is now looking for somewhere to put it.',
|
||||
options: [
|
||||
{
|
||||
id: 'let_him_talk',
|
||||
label: 'Let him get all the way to the end of it.',
|
||||
result:
|
||||
'It takes twenty minutes. By the end he has talked himself into ' +
|
||||
'thinking it was about the weather, which suits both of you.',
|
||||
effects: [
|
||||
{ path: 'skills.trade', op: 'add', value: 2 },
|
||||
{ path: 'relationships.dutch.trusts_you', op: 'add', value: 6 },
|
||||
{ path: 'relationships.dutch.wary_of_you', op: 'add', value: -4 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'check_the_book',
|
||||
label: 'Ask to see the book.',
|
||||
result:
|
||||
'The tally is right and his arithmetic is wrong by two runs, in his ' +
|
||||
'own favour. You say so quietly. He does not thank you and does not ' +
|
||||
'forget it either.',
|
||||
effects: [
|
||||
{ path: 'skills.trade', op: 'add', value: 3 },
|
||||
{ path: 'relationships.dutch.wary_of_you', op: 'add', value: 7 },
|
||||
{ path: 'relationships.dutch.trusts_you', op: 'add', value: 3 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'trade_a_run',
|
||||
label: 'Offer him the next Ridge run to square it.',
|
||||
requires: [{ path: 'relationships.dutch.trusts_you', op: '>=', value: 45 }],
|
||||
result:
|
||||
'He takes it, and the book gets a line in it on your side for the ' +
|
||||
'first time. Dutch settles his lines.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: -6 },
|
||||
{ path: 'skills.trade', op: 'add', value: 2 },
|
||||
{ path: 'relationships.dutch.owes_you', op: 'add', value: 18 },
|
||||
{ path: 'relationships.dutch.trusts_you', op: 'add', value: 5 },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'dutch_drunk',
|
||||
stage: 'hand',
|
||||
weight: 40,
|
||||
cooldown: 9,
|
||||
requires: [{ path: 'turn', op: '>=', value: 12 }],
|
||||
description:
|
||||
'Dutch did not come in for the morning run and the morning run is ' +
|
||||
'loaded. He is at the Cordwood, upright, and in no condition to be ' +
|
||||
'within thirty feet of a horse.',
|
||||
options: [
|
||||
{
|
||||
id: 'cover',
|
||||
label: 'Take his run and say nothing about it.',
|
||||
result:
|
||||
'Vane never learns. Dutch learns, in the afternoon, from the state ' +
|
||||
'of the harness, and comes and stands near you for a while without ' +
|
||||
'saying anything.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 7 },
|
||||
{ path: 'skills.nerve', op: 'add', value: 2 },
|
||||
{ path: 'flags.covered_for_dutch', op: 'set', value: true },
|
||||
{ path: 'relationships.dutch.owes_you', op: 'add', value: 25 },
|
||||
{ path: 'relationships.dutch.trusts_you', op: 'add', value: 8 },
|
||||
{ path: 'notable', op: 'push', value: 'Covered Dutch’s run and never mentioned it.' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'tell_vane',
|
||||
label: 'Tell Vane the run needs a driver.',
|
||||
result:
|
||||
'Vane takes it out himself at fifty-one years of age and says one ' +
|
||||
'sentence to Dutch on his return. Dutch works the rest of the month ' +
|
||||
'like a man being watched, because he is.',
|
||||
effects: [
|
||||
{ path: 'relationships.hollis.trusts_you', op: 'add', value: 7 },
|
||||
{ path: 'relationships.dutch.trusts_you', op: 'add', value: -15 },
|
||||
{ path: 'relationships.dutch.wary_of_you', op: 'add', value: 12 },
|
||||
{ path: 'standing', op: 'add', value: -2 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'sober_him',
|
||||
label: 'Walk him round the yard until he can stand up to it.',
|
||||
requires: [{ path: 'skills.nerve', op: '>=', value: 12 }],
|
||||
result:
|
||||
'Four circuits and a bucket. He drives it badly but he drives it, ' +
|
||||
'and that distinction is the entire point.',
|
||||
effects: [
|
||||
{ path: 'skills.nerve', op: 'add', value: 2 },
|
||||
{ path: 'relationships.dutch.owes_you', op: 'add', value: 14 },
|
||||
{ path: 'relationships.dutch.trusts_you', op: 'add', value: 10 },
|
||||
{ path: 'relationships.dutch.wary_of_you', op: 'add', value: -6 },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'vane_ledger',
|
||||
stage: 'hand',
|
||||
weight: 50,
|
||||
cooldown: 7,
|
||||
description:
|
||||
'The office door is open for once. Vane has the ledger out and the look ' +
|
||||
'of a man who has added a column twice and got two answers.',
|
||||
options: [
|
||||
{
|
||||
id: 'offer_help',
|
||||
label: 'Offer to run the column.',
|
||||
result:
|
||||
'You find it in ten minutes: a freight bill entered twice in March. ' +
|
||||
'He does not say thank you. He leaves the door open after that.',
|
||||
effects: [
|
||||
{ path: 'skills.trade', op: 'add', value: 4 },
|
||||
{ path: 'relationships.hollis.trusts_you', op: 'add', value: 9 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'ask_for_more',
|
||||
label: 'Ask him what the good runs pay.',
|
||||
requires: [{ path: 'skills.trade', op: '>=', value: 22 }],
|
||||
result:
|
||||
'Twenty-two, and he has been giving them to Dutch for two years ' +
|
||||
'because Dutch asked in his first month. Nobody had told you that ' +
|
||||
'asking was the mechanism.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 22 },
|
||||
{ path: 'skills.trade', op: 'add', value: 3 },
|
||||
{ path: 'relationships.hollis.trusts_you', op: 'add', value: 3 },
|
||||
{ path: 'relationships.dutch.wary_of_you', op: 'add', value: 6 },
|
||||
{ path: 'notable', op: 'push', value: 'Asked Vane for the good runs.' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'call_in_the_debt',
|
||||
label: 'Mention the smith’s bill you stood for.',
|
||||
requires: [{ path: 'relationships.hollis.owes_you', op: '>=', value: 20 }],
|
||||
result:
|
||||
'He pays it back to the cent, in front of Dutch, and is short with ' +
|
||||
'you for two days afterwards for having had to.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 24 },
|
||||
{ path: 'relationships.hollis.owes_you', op: 'add', value: -20 },
|
||||
{ path: 'relationships.hollis.trusts_you', op: 'add', value: -4 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'leave_him_to_it',
|
||||
label: 'Leave him to it.',
|
||||
result: 'The door is shut again within the hour.',
|
||||
effects: [
|
||||
{ path: 'skills.nerve', op: 'add', value: 1 },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'ward_asks',
|
||||
stage: 'hand',
|
||||
weight: 45,
|
||||
cooldown: 6,
|
||||
requires: [{ path: 'turn', op: '>=', value: 6 }],
|
||||
description:
|
||||
'Marshal Ward is leaning on the yard gate with no particular business ' +
|
||||
'there. He asks, eventually and as though it has just occurred to him, ' +
|
||||
'what came in on the stage.',
|
||||
options: [
|
||||
{
|
||||
id: 'tell_him',
|
||||
label: 'Tell him what came in on the stage.',
|
||||
result:
|
||||
'Hinges, nails, and a crate consigned to a name nobody in Cold Fork ' +
|
||||
'has heard of. He writes none of it down and remembers all of it.',
|
||||
effects: [
|
||||
{ path: 'relationships.ward.trusts_you', op: 'add', value: 8 },
|
||||
{ path: 'relationships.ward.wary_of_you', op: 'add', value: -4 },
|
||||
{ path: 'standing', op: 'add', value: -1 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'say_nothing',
|
||||
label: 'Say that is Vane’s business and not yours.',
|
||||
result:
|
||||
'He agrees that it is, pleasantly, and stays leaning on the gate for ' +
|
||||
'another twenty minutes.',
|
||||
effects: [
|
||||
{ path: 'skills.nerve', op: 'add', value: 2 },
|
||||
{ path: 'relationships.ward.wary_of_you', op: 'add', value: 6 },
|
||||
{ path: 'relationships.hollis.trusts_you', op: 'add', value: 5 },
|
||||
{ path: 'standing', op: 'add', value: 2 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'ask_him_back',
|
||||
label: 'Ask him what he is actually looking for.',
|
||||
requires: [{ path: 'skills.trade', op: '>=', value: 12 }],
|
||||
result:
|
||||
'He tells you, which surprises both of you. A crate a month, six ' +
|
||||
'months running, and no consignee that exists.',
|
||||
effects: [
|
||||
{ path: 'skills.trade', op: 'add', value: 3 },
|
||||
{ path: 'skills.nerve', op: 'add', value: 2 },
|
||||
{ path: 'relationships.ward.trusts_you', op: 'add', value: 10 },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'ward_deputizes',
|
||||
stage: 'hand',
|
||||
weight: 35,
|
||||
cooldown: 10,
|
||||
requires: [
|
||||
{ path: 'turn', op: '>=', value: 18 },
|
||||
{ path: 'relationships.ward.trusts_you', op: '>=', value: 45 },
|
||||
],
|
||||
description:
|
||||
'There is a man in the one cell who needs moving to the county seat and ' +
|
||||
'Ward cannot leave the town without somebody in it. He is not offering ' +
|
||||
'you a job. He is offering you two days.',
|
||||
options: [
|
||||
{
|
||||
id: 'ride_along',
|
||||
label: 'Ride along.',
|
||||
result:
|
||||
'Two days out and two back, and the prisoner talks for all four. ' +
|
||||
'Ward does not, which turns out to be the instruction.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 12 },
|
||||
{ path: 'skills.nerve', op: 'add', value: 4 },
|
||||
{ path: 'standing', op: 'add', value: 5 },
|
||||
{ path: 'relationships.ward.trusts_you', op: 'add', value: 12 },
|
||||
{ path: 'relationships.hollis.trusts_you', op: 'add', value: -4 },
|
||||
{ path: 'notable', op: 'push', value: 'Rode to the county seat with Ward and a prisoner.' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'mind_the_town',
|
||||
label: 'Offer to mind the town instead.',
|
||||
requires: [{ path: 'skills.nerve', op: '>=', value: 22 }],
|
||||
result:
|
||||
'Two days with the keys and nothing whatever happens, which you ' +
|
||||
'later understand was the test.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 12 },
|
||||
{ path: 'skills.nerve', op: 'add', value: 3 },
|
||||
{ path: 'standing', op: 'add', value: 8 },
|
||||
{ path: 'relationships.ward.trusts_you', op: 'add', value: 15 },
|
||||
{ path: 'notable', op: 'push', value: 'Held the town for two days while Ward was gone.' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'decline_ward',
|
||||
label: 'Say the yard cannot spare you.',
|
||||
result:
|
||||
'It can. Both of you know it can. He takes the storekeeper instead ' +
|
||||
'and the storekeeper tells the story for a year.',
|
||||
effects: [
|
||||
{ path: 'skills.trade', op: 'add', value: 2 },
|
||||
{ path: 'relationships.ward.trusts_you', op: 'add', value: -8 },
|
||||
{ path: 'relationships.hollis.trusts_you', op: 'add', value: 6 },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'saturday_night',
|
||||
stage: 'hand',
|
||||
weight: 55,
|
||||
cooldown: 5,
|
||||
description:
|
||||
'The Cordwood on a Rest night: Dutch at the long table, half the yard ' +
|
||||
'with him, and a game of cards that everybody present knows the ' +
|
||||
'storekeeper’s nephew cannot afford to be in.',
|
||||
options: [
|
||||
{
|
||||
id: 'sit_in',
|
||||
label: 'Sit in.',
|
||||
result:
|
||||
'You come out four dollars ahead and the nephew comes out eleven ' +
|
||||
'behind. Nobody says anything about it, then or afterwards.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 4 },
|
||||
{ path: 'skills.trade', op: 'add', value: 2 },
|
||||
{ path: 'relationships.dutch.trusts_you', op: 'add', value: 5 },
|
||||
{ path: 'standing', op: 'add', value: -2 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'buy_the_table',
|
||||
label: 'Buy the table a round and stay out of the game.',
|
||||
result:
|
||||
'Six dollars, and for the rest of the month you are a man who bought ' +
|
||||
'the table a round, which in Cold Fork is a kind of address.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: -6 },
|
||||
{ path: 'standing', op: 'add', value: 5 },
|
||||
{ path: 'relationships.dutch.trusts_you', op: 'add', value: 4 },
|
||||
{ path: 'relationships.dutch.wary_of_you', op: 'add', value: -3 },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'walk_the_nephew_out',
|
||||
label: 'Get the nephew out of the game.',
|
||||
requires: [{ path: 'skills.nerve', op: '>=', value: 12 }],
|
||||
result:
|
||||
'You do it badly and in front of everyone, and it works. The ' +
|
||||
'storekeeper hears about it before you are back at the yard.',
|
||||
effects: [
|
||||
{ path: 'skills.nerve', op: 'add', value: 3 },
|
||||
{ path: 'standing', op: 'add', value: 7 },
|
||||
{ path: 'relationships.dutch.wary_of_you', op: 'add', value: 5 },
|
||||
{ path: 'relationships.ward.trusts_you', op: 'add', value: 5 },
|
||||
{ path: 'notable', op: 'push', value: 'Pulled the storekeeper’s nephew out of a card game.' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'early_night',
|
||||
label: 'Go up early.',
|
||||
result: 'The ceiling of a room at the Cordwood, at nine at night.',
|
||||
effects: [
|
||||
{ path: 'skills.trade', op: 'add', value: 1 },
|
||||
{ path: 'relationships.dutch.trusts_you', op: 'add', value: -2 },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
id: 'the_consignee',
|
||||
stage: 'hand',
|
||||
weight: 25,
|
||||
cooldown: 12,
|
||||
requires: [
|
||||
{ path: 'turn', op: '>=', value: 24 },
|
||||
{ path: 'relationships.ward.trusts_you', op: '>=', value: 50 },
|
||||
],
|
||||
description:
|
||||
'The crate with no consignee is on the platform again, and this month ' +
|
||||
'the manifest has Vane’s own hand on it. Ward is not at the gate today, ' +
|
||||
'which is itself a decision somebody made.',
|
||||
options: [
|
||||
{
|
||||
id: 'load_it',
|
||||
label: 'Load it and drive it out to the Ridge like any other crate.',
|
||||
result:
|
||||
'It is heavier than hinges. Vane pays you eighteen dollars for a ' +
|
||||
'nine dollar run and neither of you mentions the difference.',
|
||||
effects: [
|
||||
{ path: 'money', op: 'add', value: 18 },
|
||||
{ path: 'relationships.hollis.trusts_you', op: 'add', value: 10 },
|
||||
{ path: 'relationships.ward.trusts_you', op: 'add', value: -12 },
|
||||
{ path: 'standing', op: 'add', value: -3 },
|
||||
{ path: 'notable', op: 'push', value: 'Ran the unmarked crate out to the Ridge for Vane.' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'tell_ward',
|
||||
label: 'Go and find Ward.',
|
||||
result:
|
||||
'He looks at the manifest for a long time and then puts it back on ' +
|
||||
'the platform exactly as he found it. Nothing happens for eleven ' +
|
||||
'days, and then a great deal happens at once.',
|
||||
effects: [
|
||||
{ path: 'skills.nerve', op: 'add', value: 4 },
|
||||
{ path: 'standing', op: 'add', value: 6 },
|
||||
{ path: 'relationships.ward.trusts_you', op: 'add', value: 20 },
|
||||
{ path: 'relationships.hollis.trusts_you', op: 'add', value: -14 },
|
||||
{ path: 'notable', op: 'push', value: 'Took Vane’s manifest to Marshal Ward.' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'ask_vane_direct',
|
||||
label: 'Ask Vane what is in it.',
|
||||
requires: [{ path: 'skills.trade', op: '>=', value: 22 }],
|
||||
result:
|
||||
'He tells you, standing in the doorway of the office as always, and ' +
|
||||
'then asks what you intend to do about it. It is the first real ' +
|
||||
'question anybody in Cold Fork has asked you.',
|
||||
effects: [
|
||||
{ path: 'skills.trade', op: 'add', value: 4 },
|
||||
{ path: 'skills.nerve', op: 'add', value: 3 },
|
||||
{ path: 'standing', op: 'add', value: 2 },
|
||||
{ path: 'relationships.hollis.trusts_you', op: 'add', value: 6 },
|
||||
{ path: 'notable', op: 'push', value: 'Asked Vane what was in the crate, and got an answer.' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export default people;
|
||||
Reference in New Issue
Block a user