Story Starts
Edit tabs/story-starts.json.
Required Fields
| Field | Requirement |
|---|---|
name |
Must match object key exactly. Keep names unique: a story start referenced by a name shared with another definition resolves to nothing, an exact id always resolves |
description |
One compelling sentence shown during character creation |
storyStart |
Opening narrative prompt for the AI (see format below) |
locations |
Array of valid location keys - use one for specific starts, multiple for variety |
locationAreas |
Array of area keys, or [] to allow any area in the location |
Conditional Fields
| Field | When to Include |
|---|---|
startingQuests |
When the story has immediate objectives for the player |
firstQuest |
When you want AI-generated quest details on turn 0 |
startingPartyNPCs |
When the player begins with companions |
isDefault |
Set true on exactly one story start. It is the start used when the host does not pick one; without it, the first entry is used |
questGenerationGuidance |
When this story start needs quest tone/scope distinct from the rest of the world |
startingItems |
Optional. Items granted on top of trait- and settings-based starting gear, for items specific to this story start. Usually leave to traits and settings and keep story starts narrative-focused |
Never Include
Omit these fields (engine-controlled):
allowPlayerInput— the engine deletes it from every story start except the built-in one named exactly "Write Your Own", where it is forced on with an emptystoryStart
description Format
One sentence that helps players choose this starting scenario. Focus on the hook, not mechanics.
Format: "[Situation] - [what makes this start interesting]"
storyStart Format
The opening narrative prompt passed to the AI. This sets the scene and establishes the player's immediate situation. The AI expands this into the full opening story.
Three-part structure:
- Scene - Where are we? What's the atmosphere?
- Situation - What's happening right now?
- Hook - What pulls the player forward?
Location Selection Guidance
Single location - Use when the story demands a specific starting point:
"locations": ["thornhaven"]
Multiple locations - Use for variety or "wanderer" style starts:
"locations": ["thornhaven", "riverside-camp", "mountain-pass"]
Quest Integration
startingQuests vs firstQuest:
startingQuests: Array of quest ids or unique quest names fromtabs/quests.json- at game start, hidden quests are promoted to'available'; quests already accepted (e.g. via a quest'sinitialStatus) keep their statusfirstQuest: Freeform text instruction - on turn 0, forces AI to generate a quest matching this description
These are independent systems. Use startingQuests for predefined quests, use firstQuest for AI-generated opening quests.
Schema
interface StoryStart {
name: string
description: string
storyStart: string
locations: string[]
locationAreas: string[]
startingQuests?: string[]
firstQuest?: string
startingPartyNPCs?: string[]
startingItems?: Array<{ item: string; quantity: number }>
isDefault?: boolean
questGenerationGuidance?: string
allowPlayerInput?: boolean
}
Reference
For detailed documentation, see story-starts-reference.md.