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
94 lines
3.9 KiB
JavaScript
94 lines
3.9 KiB
JavaScript
// Taking the star.
|
|
//
|
|
// The same shape as Corporate Ladder's Dispatch offer, and for the same
|
|
// reason: the engine has no notion of a promotion, only of a stage that
|
|
// determines which events are in the pool. The offer is an ordinary event
|
|
// whose effects happen to include { path: 'stage', op: 'set', value: 'deputy' }.
|
|
//
|
|
// Declining is a real option. It comes back after a cooldown, and staying in
|
|
// the yard to build trade and a book full of favours is a way to play rather
|
|
// than a mistake.
|
|
|
|
export const promotion = [
|
|
{
|
|
id: 'deputy_offer',
|
|
stage: 'hand',
|
|
weight: 800,
|
|
cooldown: 12,
|
|
// A long way in, deliberately. The yard is where most of this pack lives,
|
|
// and the star at turn twenty would skip it.
|
|
requires: [
|
|
{ path: 'standing', op: '>=', value: 70 },
|
|
{ path: 'turn', op: '>=', value: 40 },
|
|
// Two ways to be offered it: the marshal has decided about you, or the
|
|
// town has, on the evidence of what you have walked into.
|
|
{
|
|
any: [
|
|
{ path: 'relationships.ward.trusts_you', op: '>=', value: 68 },
|
|
{ path: 'skills.nerve', op: '>=', value: 40 },
|
|
],
|
|
},
|
|
],
|
|
description:
|
|
'Ward has the county paper that makes a deputy and has already written a ' +
|
|
'name on it. He says the pay is thirty-eight a run and the work is mostly ' +
|
|
'walking about, and that the second half of that is a lie he tells ' +
|
|
'everybody once.',
|
|
options: [
|
|
{
|
|
id: 'accept',
|
|
label: 'Take the star.',
|
|
result:
|
|
'Vane says nothing at all, which is worse than anything he could ' +
|
|
'have said. Dutch carries your kit up the street and talks the ' +
|
|
'entire way about the Ridge road.',
|
|
effects: [
|
|
{ path: 'stage', op: 'set', value: 'deputy' },
|
|
{ path: 'flags.sworn_in', op: 'set', value: true },
|
|
{ path: 'standing', op: 'add', value: 6 },
|
|
{ path: 'relationships.ward.trusts_you', op: 'add', value: 5 },
|
|
{ path: 'relationships.hollis.trusts_you', op: 'add', value: -14 },
|
|
{ path: 'relationships.dutch.wary_of_you', op: 'add', value: 10 },
|
|
{ path: 'notable', op: 'push', value: 'Took the star.' },
|
|
],
|
|
},
|
|
{
|
|
id: 'accept_and_speak',
|
|
label: 'Take it, and put Dutch up for the good runs.',
|
|
requires: [{ path: 'relationships.dutch.trusts_you', op: '>=', value: 55 }],
|
|
result:
|
|
'Vane writes the name down in front of you, which is as close as he ' +
|
|
'comes to a farewell. Dutch is insufferable about it for a month and ' +
|
|
'then, quietly, is not.',
|
|
effects: [
|
|
{ path: 'stage', op: 'set', value: 'deputy' },
|
|
{ path: 'flags.sworn_in', op: 'set', value: true },
|
|
{ path: 'flags.spoke_for_dutch', op: 'set', value: true },
|
|
{ path: 'standing', op: 'add', value: 4 },
|
|
{ path: 'relationships.ward.trusts_you', op: 'add', value: 5 },
|
|
{ path: 'relationships.hollis.trusts_you', op: 'add', value: -8 },
|
|
{ path: 'relationships.dutch.trusts_you', op: 'add', value: 15 },
|
|
{ path: 'relationships.dutch.owes_you', op: 'add', value: 20 },
|
|
{ path: 'notable', op: 'push', value: 'Took the star, and put Dutch up for the good runs.' },
|
|
],
|
|
},
|
|
{
|
|
id: 'decline',
|
|
label: 'Not yet.',
|
|
result:
|
|
'He folds the paper back into his coat. He has carried it around ' +
|
|
'unsigned for six years and is in no hurry now.',
|
|
effects: [
|
|
{ path: 'skills.nerve', op: 'add', value: 3 },
|
|
{ path: 'standing', op: 'add', value: -3 },
|
|
{ path: 'relationships.ward.trusts_you', op: 'add', value: -6 },
|
|
{ path: 'relationships.hollis.trusts_you', op: 'add', value: 8 },
|
|
{ path: 'notable', op: 'push', value: 'Turned down the star.' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
export default promotion;
|