Merge remote-tracking branch 'origin/main' into server
# Conflicts: # CHANGELOG.md
This commit is contained in:
@@ -14,6 +14,13 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
- Save/load ECS extraction — `save_to_file`/`load_from_file` via MessagePack, `SaveGame`/`LoadGame` IPC commands, `SaveLoadResultWire` on ObserverSnapshot (#553, D-085)
|
||||
- Test infrastructure — Layer 3 integration test entry point, three-layer architecture per D-030 (#200)
|
||||
- Information boundary negative tests — 4 tests proving no passive KG leakage, LOS fog holds, tier boundary holds, per-NPC save isolation (#272, D-010)
|
||||
- Decision ID claim system — `db/connectors/decision` CLI with `next`, `claim`, `check-dupes` commands to prevent cross-worktree D/Q/R ID collisions, pre-commit duplicate check
|
||||
- D-085: Per-game save directory structure — every new game creates `user://saves/<game-id>/`, F5 quicksave, F6 quickload
|
||||
- Q-029: Save file format design — long-term considerations for versioning, compression, integrity, metadata headers
|
||||
- D-086: Renumbered insert icon system (was D-084 on visual branch) to resolve cross-worktree ID collision
|
||||
- Save/load wireframe updated for D-085 — LOAD tab shows games grouped by directory with expand/collapse, QUICKSAVE slot, F5/F6 hints
|
||||
- Sprint 19: Persist planned — 16 tickets (server 7, client 5, CI 4) covering save/load, tier eviction/scope, test infrastructure
|
||||
- Character creation & game setup workshop brief — covers creation model, seed boundary, gate activation, quest seeding, game toggles (resolves Q-011)
|
||||
- Protocol v14 — `poi_list`, `examine_result`, `player_knowledge` ObserverSnapshot wire types with live KG serialization (#151, #174, #264)
|
||||
- Minimap rendering — circular 160px diegetic insert overlay with POI dots (colored by category), border arrows for distant POIs, player-centered fixed-north (#151)
|
||||
- Dialogue UI hardening — confrontation italic voice (D-063), examine result overlay with 5s auto-dismiss and confidence coloring (#174)
|
||||
|
||||
@@ -0,0 +1,375 @@
|
||||
# Workshop: Character Creation & Game Setup
|
||||
|
||||
**Date:** 2026-02-25
|
||||
**Facilitator:** Team Leader (Jeroen)
|
||||
**Participants:** Nigel (replayability), Paula (narrative), Gestalt (systems), Miri (worldbuilding), Tyre (architecture), Qatux (documenter)
|
||||
**Status:** Not started
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Define what the character creation / new game screen actually does. This
|
||||
is the most fundamental unresolved design question in the project: what
|
||||
does the player choose, what does the seed control, and what does that
|
||||
combination produce?
|
||||
|
||||
This workshop resolves **Q-011** (character selection and playable
|
||||
characters) and establishes the boundary between player agency, character
|
||||
archetype, and world seed. Everything downstream — quest generation, gate
|
||||
activation, difficulty, replayability — flows from getting this table right.
|
||||
|
||||
## Context
|
||||
|
||||
### What's decided
|
||||
|
||||
- **D-005:** Single character per playthrough. Character choice determines
|
||||
starting location, starting knowledge, available levers, personal goals.
|
||||
"Same conspiracy, different character, completely different game."
|
||||
- **D-027:** v0.1 vertical slice ships with 2 characters: smuggler and
|
||||
detective. Inverted perspectives on the same world.
|
||||
- **D-023:** Three-tier content model. Tier 1 (authored drama) drawn from
|
||||
a pool at game start. Tier 2 (templated). Tier 3 (procedural filler).
|
||||
- **D-029:** Population entanglement ratio 30/50/20, varies per seed.
|
||||
- **D-010:** Deterministic simulation. Same seed + same content = identical
|
||||
world state.
|
||||
- **D-039:** Wow moment 4 is the Divergence Reveal — same room, different
|
||||
character, different everything. This is THE replayability payoff.
|
||||
- **D-041:** Knowledge graph is per-entity. Characters start with different
|
||||
knowledge.
|
||||
- **D-032:** Separate monologue pools per character.
|
||||
- **Seed config schema** (ticket #394): Records seed value, character
|
||||
selection, pool draws, template assignments, starting knowledge.
|
||||
|
||||
### What's open
|
||||
|
||||
- **Q-011:** Character selection and playable characters — not yet discussed.
|
||||
Which characters? How different are starting positions? Canon or original?
|
||||
- **Q-010:** Storyteller AI design — pacing rules, structural vs dramatic
|
||||
randomness. Adjacent to this workshop but NOT in scope to fully resolve.
|
||||
|
||||
### What's NOT in scope
|
||||
|
||||
- Full character roster beyond v0.1 (two characters first, prove it works)
|
||||
- Endgame quest design (no endgame exists yet — note toggles, defer design)
|
||||
- Storyteller pacing algorithm (Q-010 is a separate workshop)
|
||||
- Character naming edge cases (namespace collisions with NPCs — note, defer)
|
||||
- Full quest system architecture (scope to: what quest SHAPES are seeded at
|
||||
creation, not the full quest pipeline)
|
||||
|
||||
### Design guardrail
|
||||
|
||||
Character selection determines your starting **information position** and
|
||||
**social graph**, not your capabilities. Characters have different verbs
|
||||
available, not different success probabilities for the same verbs. The
|
||||
smuggler doesn't get "+5% to cargo inspection" — the smuggler gets "Slip
|
||||
Manifest" as a verb the detective never sees. This is D-005's intent and
|
||||
D-028's access tier system in practice. Do not drift toward stat sheets.
|
||||
|
||||
## Key Questions
|
||||
|
||||
### Q1: What does character selection actually select?
|
||||
|
||||
Three possible models — the workshop must pick one (or a hybrid):
|
||||
|
||||
**A. Fixed archetype roster.** Player picks "smuggler" or "detective" from a
|
||||
list. Each is a fully pre-authored starting position. Knowledge from
|
||||
playthrough 1 fully transfers — you know exactly where the smuggler starts.
|
||||
|
||||
**B. Archetype + generated instance.** Player picks "smuggler" but YOUR
|
||||
smuggler is procedurally placed in the social web. Different starting
|
||||
coworkers, different shift schedule, different corridor assignment. Knowledge
|
||||
partially transfers — you know smuggler life, but not this smuggler's life.
|
||||
|
||||
**B2. Archetype + curated instance.** Player picks "smuggler," sees 2-3
|
||||
procedurally generated social configurations, and picks one. RimWorld's
|
||||
colonist reroll mechanic — curation from a generated pool rather than full
|
||||
specification. Middle path between A and B.
|
||||
|
||||
**C. Fully custom.** Player picks background axes (profession, social
|
||||
tier, faction affinity). No pre-authored archetype. Maximum variation,
|
||||
maximum authoring cost.
|
||||
|
||||
For each model: what are the replayability implications? What's the
|
||||
authoring cost? What does this mean for the Divergence Reveal (D-039)?
|
||||
|
||||
Also consider: does the player configure starting knowledge weights, or
|
||||
is starting knowledge fully determined by archetype? (DF's embark skill
|
||||
point system lets players shape starting capability within constraints.)
|
||||
|
||||
### Q2: The seed boundary — what varies by what?
|
||||
|
||||
Produce a canonical three-column table:
|
||||
|
||||
| Determined by world seed | Determined by character choice | Player-configured |
|
||||
|--------------------------|-------------------------------|-------------------|
|
||||
| ? | ? | ? |
|
||||
|
||||
Examples to place: NPC relationships, which NPCs are compromised,
|
||||
starting location, starting knowledge graph state, access tiers,
|
||||
gate activation timing, conspiracy shape, population entanglement
|
||||
ratio, THE FRIEND identity, starting inventory...
|
||||
|
||||
Include a fourth implicit column: **what information exists in the world
|
||||
but is inaccessible to this character?** Not locked behind a mechanic —
|
||||
just absent from their information space entirely. The gap between what
|
||||
the world contains and what the character can see IS the replayability.
|
||||
(See: Obra Dinn in Reference Games.)
|
||||
|
||||
This table IS the workshop's primary deliverable. Get it right and every
|
||||
downstream system knows its inputs.
|
||||
|
||||
### Q3: How does gate activation relate to character choice?
|
||||
|
||||
The contamination/conspiracy discovery trigger — the moment the game shifts
|
||||
from daily life to investigation. Two sub-questions:
|
||||
|
||||
**A.** Does character choice change WHEN you discover contamination, or only
|
||||
HOW you experience it? (Detective flags cargo anomalies early via lattice
|
||||
analysis. Smuggler witnesses something directly. Same world-state, different
|
||||
discovery paths.)
|
||||
|
||||
Consider Pentiment's model: the murder happens near you, not TO you. You're
|
||||
pulled in by proximity and relationship, not by being the assigned
|
||||
investigator. Is gate activation something that happens to the world (and
|
||||
the character stumbles into it), or something the character triggers through
|
||||
their specific access?
|
||||
|
||||
**B.** Are discovery paths authored per character (detective always discovers
|
||||
via X) or emergent (character knowledge graph + storyteller pacing = different
|
||||
discovery window per playthrough)? What's the minimum authored content needed
|
||||
per character to make gate activation feel character-specific?
|
||||
|
||||
Explicit RimWorld check: is contamination timing a player-configurable
|
||||
"storyteller" choice, fixed per character, or emergent from play? Don't
|
||||
collapse pacing control into archetype selection.
|
||||
|
||||
### Q4: Quest seeding — templates vs randomization
|
||||
|
||||
The user's directive: "the quest system should offer relevant randomized
|
||||
quests based on creation instead of going fully scripted." Scope this to:
|
||||
|
||||
- What quest SHAPES (not specific quests) are determined at character
|
||||
creation? (e.g., smuggler gets logistics-flavored side quests, detective
|
||||
gets investigation-flavored ones)
|
||||
- How do Tier 2 templates (D-023) interact with character choice? Does the
|
||||
smuggler's template pool differ from the detective's?
|
||||
- What is authored (main quest templates, scripted quality) vs generated
|
||||
(side content, character-relevant variations)?
|
||||
- How many quest templates are needed per character for v0.1 to feel varied?
|
||||
- Does the character have visible long-term goals the game tracks? Does the
|
||||
smuggler TELL you what they want (goals screen) or do wants emerge from
|
||||
play? (The Sims' wants/aspirations system as reference.)
|
||||
|
||||
### Q5: Game conditions and toggles
|
||||
|
||||
The user wants players to be able to configure their experience. But some
|
||||
toggles destroy the game's core tension. Define:
|
||||
|
||||
- **What CAN be toggled:** Challenge intensity, optional content modules,
|
||||
timer pressure, specific life-sim subsystems
|
||||
- **What CANNOT be toggled:** Core conspiracy simulation, investigator
|
||||
faction presence, information asymmetry. These exist whether the player
|
||||
sees them or not.
|
||||
- **Starting location selection:** Is this a player choice or determined
|
||||
by archetype? If player choice, what does it mean for authored content?
|
||||
- **Enable/disable endgame quests:** Note for future design. What's the
|
||||
minimum we need to decide NOW vs what can wait until endgame exists?
|
||||
|
||||
### Q6: The playthrough 2 test
|
||||
|
||||
Concrete synthesis test. Nigel presents the following scenario to the room:
|
||||
|
||||
> You've played the smuggler on seed X. You now know: Kael is trying to
|
||||
> exit the ring. Sera Venn is protecting Naia. The detective flagged your
|
||||
> manifest on Day 2. The contamination hit during the evening shift at
|
||||
> The Last Shift. You pick the detective on the SAME seed. Minute 1: you
|
||||
> arrive at the Commission office. Minute 5: your first assignment.
|
||||
> Minute 10: you walk into The Terminal where you spent 30 hours as the
|
||||
> smuggler.
|
||||
|
||||
Against the combined design from Rounds 1-4, each participant answers:
|
||||
|
||||
1. What does the detective see in The Terminal that the smuggler never saw?
|
||||
2. What does the detective's monologue say about Kael — whom the smuggler
|
||||
considered a friend?
|
||||
3. Does the contamination trigger differently, or at the same moment via
|
||||
a different path?
|
||||
4. Name one thing the player LEARNED in playthrough 1 that changes how
|
||||
they PLAY playthrough 2 — not metagaming, but genuine new understanding.
|
||||
|
||||
If participants can't answer these concretely, the design has a gap.
|
||||
Find it and fix it before the workshop closes.
|
||||
|
||||
## Reference Games
|
||||
|
||||
### Dwarf Fortress — the fossil record
|
||||
|
||||
World generation creates centuries of invisible history. The player never
|
||||
reads a history log — they excavate its consequences. A collapsed
|
||||
civilization left ruins. A grudge between two species shapes who attacks
|
||||
your fort. The history is SUBSTRATE, not content.
|
||||
|
||||
The lesson for us: the world seed should produce CONSTRAINTS and RESIDUES
|
||||
that make the current situation feel inevitable. How long has this smuggling
|
||||
ring been operating? What's its history of near-discovery? Which institutional
|
||||
figures already have kompromat on them? The player never sees this directly
|
||||
but feels its weight on every NPC relationship state they encounter.
|
||||
|
||||
Also relevant: the embark skill point system — players shape starting
|
||||
capability within constraints rather than receiving a fixed loadout. Consider
|
||||
for Q1: does the player configure starting knowledge within their archetype?
|
||||
|
||||
### RimWorld — the separation principle
|
||||
|
||||
Storyteller selection (Cassandra/Phoebe/Randy) controls pacing, not content.
|
||||
Scenario defines starting resources and constraints. Colonist generation is
|
||||
partially random, partially player-curated (reroll, choose skills).
|
||||
|
||||
**Key lesson 1:** The storyteller and starting conditions are SEPARATE
|
||||
choices. Our gate activation / contamination pacing (Q3) maps to storyteller
|
||||
selection. Our character archetype maps to scenario. Don't collapse them.
|
||||
|
||||
**Key lesson 2:** Player CURATION from a procedurally generated set is
|
||||
different from player SPECIFICATION of a custom set. RimWorld's colonist
|
||||
reroll is a point-buy system hidden behind a reroll interface. For us:
|
||||
model B2 — see 2-3 generated social configurations for "your smuggler" and
|
||||
pick one. This is a viable middle path that deserves to be on the table.
|
||||
|
||||
### The Sims — verbs, not stats
|
||||
|
||||
Traits in The Sims are PERMISSION SYSTEMS for social interactions, not stat
|
||||
modifiers. The Outgoing Sim doesn't get +20% to social checks — they get
|
||||
access to DIFFERENT VERBS. They can autonomously initiate conversations the
|
||||
Introvert Sim cannot. This is exactly our access tier system (D-028 Layer 1).
|
||||
|
||||
**Key lesson 1:** Character creation changes which verbs you have, not how
|
||||
well you perform shared verbs. The smuggler gets "Slip Manifest." The
|
||||
detective gets "Pull Records." Neither is better — they're different
|
||||
information-gathering tools for the same world.
|
||||
|
||||
**Key lesson 2:** Neighborhood placement as replayability driver. The lot
|
||||
you choose positions you relative to neighbor NPCs, which determines which
|
||||
relationships bootstrap organically through proximity. Early relationships
|
||||
form through proximity, not player initiative. The smuggler starts embedded
|
||||
in The Terminal — relationships with ring members bootstrap before the
|
||||
player does anything. The detective starts at the Commission — different
|
||||
organic relationships form. THIS is the structural driver that makes the
|
||||
same seed play differently.
|
||||
|
||||
### Disco Elysium — observation filters, not capabilities
|
||||
|
||||
D-005 already cites Disco Elysium as a design reference. The Thought
|
||||
Cabinet is a permission system for new dialogue options and monologue lines.
|
||||
Building a character in DE doesn't give you stats — it gives you access to
|
||||
different OBSERVATIONS of the same world. Intellect doesn't make you
|
||||
smarter — it makes your character say different things to themselves when
|
||||
they see the same evidence.
|
||||
|
||||
**Key lesson:** Character build determines what your character NOTICES, not
|
||||
what they can DO. This is D-032 (separate monologue pools) and D-041
|
||||
(per-entity knowledge graph) in one reference. If participants are thinking
|
||||
about Q1 models without DE on the table, they'll drift toward stat-system
|
||||
thinking. DE keeps them on the observation-filter track.
|
||||
|
||||
### Return of the Obra Dinn — information gap as presence
|
||||
|
||||
Obra Dinn demonstrates that information asymmetry can be the ENTIRE game.
|
||||
You piece together events from fragments. The information gap feels like
|
||||
presence, not absence — you FEEL the weight of what you can't see yet.
|
||||
|
||||
**Key lesson for Q2:** The seed boundary table needs to account for what
|
||||
exists in the world but is invisible to this character. Not locked behind a
|
||||
mechanic — just absent from their information space. Character A's world
|
||||
contains things that are simply not in Character B's world. That gap is
|
||||
the pull that drives playthrough 2.
|
||||
|
||||
### Pentiment — gate activation by proximity
|
||||
|
||||
Pentiment commits to a single-character perspective. The gate activation
|
||||
question it answers: "what triggers the player from daily life into
|
||||
investigation?" A murder happens near you, not TO you. You're pulled in
|
||||
by proximity and relationship, not by institutional assignment. The player
|
||||
character is NOT the assigned detective — they're a witness with skills.
|
||||
|
||||
**Key lesson for Q3:** Same discovery timing, but character-dependent tools
|
||||
for responding to it. The contamination doesn't care who you are — it
|
||||
happens. But your character's position determines whether you see it as
|
||||
threat, opportunity, or puzzle.
|
||||
|
||||
### The common thread
|
||||
|
||||
In all six games, the setup screen generates ASYMMETRIC STARTING CONDITIONS.
|
||||
The same world, entered from different positions, produces different
|
||||
information access, different social proximity, and different verb
|
||||
availability. The asymmetry IS the replayability. Our character creation
|
||||
should produce a starting POSITION in an information landscape — not a
|
||||
stat block, not a story, not a difficulty setting.
|
||||
|
||||
## Participants and Roles
|
||||
|
||||
| Agent | Role | Why they're here |
|
||||
|-------|------|-----------------|
|
||||
| Nigel | Replayability lead | Structural randomness, seed design, "what happens on playthrough 10?" |
|
||||
| Paula | Narrative lead | Starting NPC relationships, character-specific story hooks, social web implications |
|
||||
| Gestalt | Systems lead | How character choice propagates through mechanics (KG, dialogue tiers, movement, perception) |
|
||||
| Miri | Worldbuilding | Which archetypes fit the Krenn System, canon constraints, lore accuracy |
|
||||
| Tyre | Architecture | Implementation cost reality check. "That's 4 new ECS components — is it worth it?" |
|
||||
| Qatux | Documenter | Track decisions, cross-references, dissent. Maintain running reference list. |
|
||||
|
||||
## Round Structure
|
||||
|
||||
### Round 1 — The Lens Question (Nigel leads)
|
||||
|
||||
Single question: what does character selection actually select? (Q1)
|
||||
|
||||
Nigel opens with a replayability scoring of each model (A/B/B2/C) — 3
|
||||
bullet points per model on the replayability axis. This is a BASELINE, not
|
||||
a verdict. Participants then argue from their domain against that baseline.
|
||||
This converges faster than open advocacy.
|
||||
|
||||
Target: agree on the model by end of round.
|
||||
|
||||
### Round 2 — The Seed Boundary (Gestalt leads)
|
||||
|
||||
Given the model from Round 1: draw the exact line between world seed,
|
||||
character choice, and player customization. Produce the three-column
|
||||
table (Q2). Each participant fills in their domain's rows.
|
||||
|
||||
### Round 3a — Gate Activation (Paula leads)
|
||||
|
||||
How does contamination trigger work per character? (Q3)
|
||||
This flows directly from Round 1's model decision. Paula leads because
|
||||
gate activation is fundamentally a narrative question — when does the
|
||||
story shift?
|
||||
|
||||
### Round 3b — Quest Seeding (Nigel leads, Tyre has implementation floor)
|
||||
|
||||
How do quest templates interact with character choice? (Q4)
|
||||
Nigel leads because quest variation is the replayability engine. Tyre gets
|
||||
explicit authority to reject quest template proposals that require new
|
||||
architecture — every template decision has an implementation cost that
|
||||
spirals without active checking.
|
||||
|
||||
### Round 4 — Conditions, Toggles & Synthesis (all)
|
||||
|
||||
Game conditions and what's toggleable (Q5). Then run the concrete
|
||||
playthrough 2 test (Q6). Nigel presents the scenario. Each participant
|
||||
must answer the four concrete questions. If they can't, the design has
|
||||
a gap — find it and fix it before closing.
|
||||
|
||||
## Required Reading for Participants
|
||||
|
||||
- `decisions/scope.md` — D-005, D-013, D-027, D-029, D-053
|
||||
- `decisions/content.md` — D-023, D-028, D-032, D-034
|
||||
- `decisions/architecture.md` — D-041 (knowledge graph)
|
||||
- `decisions/questions.md` — Q-010, Q-011
|
||||
|
||||
## Expected Outputs
|
||||
|
||||
- **D-record:** Character creation model (resolves Q-011)
|
||||
- **D-record:** Seed boundary table (what varies by seed vs character vs player)
|
||||
- **D-record:** Gate activation trigger design
|
||||
- **D-record or Q:** Quest seeding model (may produce a Q if full design deferred)
|
||||
- **D-record:** Game condition toggles (what's configurable, what isn't)
|
||||
- Ticket updates for Sprint 19+ backlog as needed
|
||||
Reference in New Issue
Block a user