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
@@ -10,9 +10,17 @@ import { events } from './events/index.js';
|
||||
export const corporateLadder = {
|
||||
id: 'corporateladder',
|
||||
name: 'Corporate Ladder',
|
||||
// One sentence for the setting picker. The interface reads it and knows
|
||||
// nothing else about what this pack is.
|
||||
blurb:
|
||||
'A modern office and a mailroom, two people who have been here longer ' +
|
||||
'than you, and a laminated org chart with your name not on it.',
|
||||
version: '0.1.0',
|
||||
turnUnit: 'day',
|
||||
startingStage: 'mailroom',
|
||||
// What the interface calls the panel of people. The UI used to hardcode
|
||||
// "The mailroom" here, which was the one place it named a setting.
|
||||
peopleHeading: 'The mailroom',
|
||||
|
||||
stages: {
|
||||
mailroom: { label: 'Mailroom', title: 'Mail Associate I' },
|
||||
@@ -59,10 +67,11 @@ export const corporateLadder = {
|
||||
// rent out every Monday, and only small change in between.
|
||||
//
|
||||
// Keep this arithmetic honest when tuning: wages, minus two rents, minus
|
||||
// fourteen days of small change. It should come to roughly forty dollars
|
||||
// down over a fortnight — a drift, not a bleed. Rent was once raised without
|
||||
// re-deriving it, which quietly made the baseline four times steeper and
|
||||
// trapped a real playtester below zero for 30% of a 182-turn run.
|
||||
// fourteen days of small change. Per week that is 560 - 455 - 126 = -21, so
|
||||
// about forty dollars down over a fortnight — a drift, not a bleed. Rent was
|
||||
// once raised without re-deriving it, which quietly made the baseline four
|
||||
// times steeper and trapped a real playtester below zero for 30% of a
|
||||
// 182-turn run. The range is asserted from `tuning` below.
|
||||
upkeep: [
|
||||
{ label: 'Coffee, transit, lunch', effects: [{ path: 'money', op: 'add', value: -18 }] },
|
||||
// Turn 1 is a Monday, so offset 4 is the first Friday and every 14 makes it
|
||||
@@ -113,6 +122,18 @@ export const corporateLadder = {
|
||||
},
|
||||
],
|
||||
|
||||
// What the conformance suite holds this pack to. The numbers a setting must
|
||||
// hit are the setting's business, so they are declared here rather than
|
||||
// written into a test that names this pack. See DECISIONS.md #31.
|
||||
tuning: {
|
||||
// Net movement of `money` from upkeep alone, per calendar cycle — here a
|
||||
// week — at each stage, with no debt outstanding.
|
||||
baselinePerCycle: {
|
||||
mailroom: [-45, 5],
|
||||
dispatch: [5, 125],
|
||||
},
|
||||
},
|
||||
|
||||
// How the interface names and formats this pack's state. The UI reads only
|
||||
// this map, so renaming a stat or reordering the header is content's job.
|
||||
display: {
|
||||
|
||||
Reference in New Issue
Block a user