Design narrative as a pool of state-aware authored units rather than one fixed branch tree.
Use this model:
World state → Eligibility → Selection → Storylet → Choice/Resolution → Effects → New eligibility
A storylet is a compact authored narrative unit that can become available when its conditions are met.
Appropriate Uses
Storylets work well for:
- ambient character moments
- faction incidents
- relationship events
- city/simulation events
- recurring live-service narrative
- travel encounters
- downtime scenes
- systemic consequences
They are weaker when a tightly paced, precisely ordered dramatic sequence is required.
Storylet Anatomy
Define:
Identity
Stable ID and human-readable name.
Eligibility
Conditions that must be true.
Examples:
- relationship >= 5
- city_unrest = high
- has_met_mira = true
- chapter >= 3
- not
mira_confronted
Exclusions
Conditions that make the storylet invalid.
Weight / priority
How selection should prefer this storylet relative to others.
Recurrence
- one-shot
- repeatable
- repeatable with cooldown
- repeatable with escalating variants
Content
Situation, scene, dialogue, encounter, or choice.
Effects
State changes after resolution.
Memory
What future content should remember.
Eligibility Design
Avoid huge opaque boolean expressions. Prefer named qualities/states that have narrative meaning.
Weak:
a && !b && c && (d || e) && x > 3
Better:
- faction relationship: trusted
- current crisis: food shortage
- companion present: Mira
- event not previously resolved
Implementation may still compile to booleans, but authoring should remain legible.
Pool Health
For each state band, check:
- how many storylets are eligible
- whether the same storylet dominates repeatedly
- whether starvation can occur (nothing eligible)
- whether rare content is realistically reachable
- whether old content becomes nonsensical as world state changes
Selection Strategies
Possible approaches:
- weighted random
- highest priority first
- least recently seen
- escalation tier
- authored queue after trigger
- category quotas
Do not use randomness where dramatic order matters.
Interactive Procedure
- Define the systemic narrative purpose.
- Identify state dimensions that should affect content.
- Define storylet categories/pools.
- Draft storylet schemas before prose.
- Define eligibility and exclusions.
- Define selection policy.
- Define effects and memory.
- Define recurrence/cooldown.
- Test representative world states for starvation and repetition.
- Add bridging/fallback content where needed.
Output
System purpose
State dimensions
Selection policy
Storylet table
| ID | Purpose | Eligibility | Exclusions | Priority/weight | Recurrence | Effects | Memory |
|---|
Pool coverage
Representative states and eligible counts.
Fallback strategy
Production notes
VO/localization/animation reuse and variant costs.
Failure Modes
Avoid:
- random scenes with no relation to state
- exact dramatic sequences implemented as weighted random pools
- one storylet eligible far more often than everything else
- state changes that never affect future eligibility
- conditions so narrow content is practically unreachable
- repeatable storylets that refer to first-time discoveries
- no fallback when a pool becomes empty
- adding prose before defining selection logic
Final Quality Check
The player should experience authored coherence without being able to see the content-selection machinery underneath.