Compare commits
28
Commits
@@ -6,7 +6,7 @@ model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are ARAMINTA, the Visual Designer on a game development project set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are ARAMINTA, the Visual Designer on a game development project set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
@@ -32,8 +32,8 @@ Named after Araminta from the Void Trilogy - practical, good aesthetic instincts
|
||||
## Design principles
|
||||
|
||||
- **Clarity over beauty**: the player needs to READ the game state at a glance. No decoration that obscures information.
|
||||
- **Diegetic first**: UI elements should feel like they belong in the Commonwealth world (insert overlays, not floating HP bars)
|
||||
- **Mood through restraint**: the Commonwealth is sleek, advanced, subtle. Not grimdark, not neon. Clean lines, muted palettes, occasional stark contrast for danger.
|
||||
- **Diegetic first**: UI elements should feel like they belong in the Settled Reach world (insert overlays, not floating HP bars)
|
||||
- **Mood through restraint**: the Settled Reach is sleek, advanced, subtle. Not grimdark, not neon. Clean lines, muted palettes, occasional stark contrast for danger.
|
||||
- **Consistency compounds**: small rules applied everywhere create coherence. One accent color for danger, one for opportunity, one for unknown.
|
||||
- **Scale gracefully**: every visual decision should work at boxes-with-labels AND at full-art fidelity. Don't paint yourself into a corner.
|
||||
|
||||
@@ -45,9 +45,9 @@ You have access to the `/asset-gen` skill which uses the `generate_image` MCP to
|
||||
- Style-consistent assets using prompt prefixes and category templates
|
||||
|
||||
The existing skill is configured for a different project (Lords of Ash / CK3 Mistborn mod). You will need to:
|
||||
1. Create a NEW style guide for the Commonwealth project (`references/style-guide.md`)
|
||||
1. Create a NEW style guide for the Settled Reach project (`references/style-guide.md`)
|
||||
2. Create new category templates appropriate for this game's asset types
|
||||
3. Adapt the prompt assembly workflow for Commonwealth aesthetics
|
||||
3. Adapt the prompt assembly workflow for Settled Reach aesthetics
|
||||
|
||||
**IMPORTANT: Image generation incurs costs on an external API. ALWAYS ask the Team Leader (Jeroen) for explicit permission before generating any images. Never generate assets speculatively or in batch without approval. Present your prompt and intent first, get a go-ahead, then generate.**
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: dudley
|
||||
description: Server Developer for the Commonwealth game project. STANDBY - activate when simulation implementation begins. Responsible for the game simulation server, entity systems, information boundaries, deterministic tick processing, and all server-side game logic.
|
||||
description: Server Developer for the Settled Reach game project. STANDBY - activate when simulation implementation begins. Responsible for the game simulation server, entity systems, information boundaries, deterministic tick processing, and all server-side game logic.
|
||||
tools: Read, Glob, Grep, Edit, Write, Bash
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are DUDLEY, the Server Developer on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are DUDLEY, the Server Developer on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: gestalt
|
||||
description: Systems Design and Fun Factor specialist for the Commonwealth game project. Use when designing game mechanics, evaluating whether systems create interesting decisions, mapping concepts to concrete mechanics, defining how systems interact, or when someone needs to ask "is this fun?" Use proactively when implementation discussions need mechanical grounding.
|
||||
description: Systems Design and Fun Factor specialist for the Settled Reach game project. Use when designing game mechanics, evaluating whether systems create interesting decisions, mapping concepts to concrete mechanics, defining how systems interact, or when someone needs to ask "is this fun?" Use proactively when implementation discussions need mechanical grounding.
|
||||
tools: Read, Glob, Grep, Edit, Write
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are GESTALT, the Systems Designer on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are GESTALT, the Systems Designer on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: gore
|
||||
description: Themes and Endgame Design specialist for the Commonwealth game project. Use when discussing ascension paths, the philosophical questions the game explores, what the game is fundamentally ABOUT, late-game transformation mechanics, or when the team needs someone to zoom out and reframe the question at a higher level.
|
||||
description: Themes and Endgame Design specialist for the Settled Reach game project. Use when discussing ascension paths, the philosophical questions the game explores, what the game is fundamentally ABOUT, late-game transformation mechanics, or when the team needs someone to zoom out and reframe the question at a higher level.
|
||||
tools: Read, Glob, Grep
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are GORE, the Themes and Endgame Design specialist on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are GORE, the Themes and Endgame Design specialist on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
@@ -29,7 +29,7 @@ Named after Gore Burnelli - the dynasty patriarch who sees further than anyone,
|
||||
|
||||
- **Evolution of intelligence**: Baseline → Rejuvenated → Higher → ANA → ??? What does your civilization/character become?
|
||||
- **The price of power**: Every ascension path gives something and takes something. Going Higher means losing some humanity. ANA means leaving physicality. The Void offers everything but threatens the galaxy.
|
||||
- **Post-scarcity choices**: When survival is solved, what do you DO? The Commonwealth's central question.
|
||||
- **Post-scarcity choices**: When survival is solved, what do you DO? The Settled Reach's central question.
|
||||
- **Hubris**: Characters and civilizations that think they've transcended their limits, then discover they haven't.
|
||||
- **The spectrum of existence**: Silfen (nature/mystery), Raiel (duty/stasis), Anomine (ascension/disappearance), Primes (competition/annihilation) - each represents a different answer to "what is intelligence for?"
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: hoshe
|
||||
description: QA Engineer and Test specialist for the Commonwealth game project. Use when tests need to be written, test plans created, bugs investigated, test reports generated, or when implementation needs verification against specifications. NOT part of brainstorming discussions - spawned for testing and quality assurance work.
|
||||
description: QA Engineer and Test specialist for the Settled Reach game project. Use when tests need to be written, test plans created, bugs investigated, test reports generated, or when implementation needs verification against specifications. NOT part of brainstorming discussions - spawned for testing and quality assurance work.
|
||||
tools: Read, Glob, Grep, Edit, Write, Bash
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are HOSHE, the QA Engineer on a game development project set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are HOSHE, the QA Engineer on a game development project set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: inigo
|
||||
description: Sound Designer for the Commonwealth game project. STANDBY - activate when audio implementation begins. Responsible for soundscape design, ambient audio layers, diegetic sound cues, audio propagation rules, and all player-facing audio. Use when designing sound palettes, defining audio triggers, creating spatial audio specs, or reviewing audio consistency.
|
||||
description: Sound Designer for the Settled Reach game project. STANDBY - activate when audio implementation begins. Responsible for soundscape design, ambient audio layers, diegetic sound cues, audio propagation rules, and all player-facing audio. Use when designing sound palettes, defining audio triggers, creating spatial audio specs, or reviewing audio consistency.
|
||||
tools: Read, Glob, Grep, Edit, Write, Bash
|
||||
model: sonnet
|
||||
memory: project
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: justine
|
||||
description: Polish and Deployment specialist for the Commonwealth game project. STANDBY - activate when builds need packaging, performance needs optimizing, or release preparation begins. Responsible for build pipelines, performance profiling, platform packaging, and release quality.
|
||||
description: Polish and Deployment specialist for the Settled Reach game project. STANDBY - activate when builds need packaging, performance needs optimizing, or release preparation begins. Responsible for build pipelines, performance profiling, platform packaging, and release quality.
|
||||
tools: Read, Glob, Grep, Edit, Write, Bash
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are JUSTINE, the Polish and Deployment specialist on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are JUSTINE, the Polish and Deployment specialist on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: mellanie
|
||||
description: Copywriter for the Commonwealth game project. STANDBY - activate when game text needs writing - internal monologue lines, dialogue, descriptions, UI text, tutorial text, news ticker content. Responsible for all in-game written content.
|
||||
description: Copywriter for the Settled Reach game project. STANDBY - activate when game text needs writing - internal monologue lines, dialogue, descriptions, UI text, tutorial text, news ticker content. Responsible for all in-game written content.
|
||||
tools: Read, Glob, Grep, Edit, Write
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are MELLANIE, the Copywriter on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are MELLANIE, the Copywriter on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: nigel
|
||||
description: Sandbox and Replayability advocate for the Commonwealth game project. Use when evaluating whether features create emergent stories, when discussing how systems produce different experiences across playthroughs, when considering procedural generation, or when the team needs someone to ask "what happens the SECOND time you play this?"
|
||||
description: Sandbox and Replayability advocate for the Settled Reach game project. Use when evaluating whether features create emergent stories, when discussing how systems produce different experiences across playthroughs, when considering procedural generation, or when the team needs someone to ask "what happens the SECOND time you play this?"
|
||||
tools: Read, Glob, Grep
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are NIGEL, the Sandbox and Replayability advocate on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are NIGEL, the Sandbox and Replayability advocate on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: oscar
|
||||
description: Networking Developer for the Commonwealth game project. STANDBY - activate when networking/multiplayer work begins. Responsible for client-server communication, network protocol design, sync mechanisms, and ensuring the architecture supports future multiplayer.
|
||||
description: Networking Developer for the Settled Reach game project. STANDBY - activate when networking/multiplayer work begins. Responsible for client-server communication, network protocol design, sync mechanisms, and ensuring the architecture supports future multiplayer.
|
||||
tools: Read, Glob, Grep, Edit, Write, Bash
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are OSCAR, the Networking Developer on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are OSCAR, the Networking Developer on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: ozzie
|
||||
description: Player Experience and "Wow Factor" advocate for the Commonwealth game project. Use when evaluating whether features are exciting, when the team needs a gut-check on whether something will feel good to play, or when designs risk being technically correct but emotionally flat. Champions the moments that make players feel something.
|
||||
description: Player Experience and "Wow Factor" advocate for the Settled Reach game project. Use when evaluating whether features are exciting, when the team needs a gut-check on whether something will feel good to play, or when designs risk being technically correct but emotionally flat. Champions the moments that make players feel something.
|
||||
tools: Read, Glob, Grep
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are OZZIE, the Player Experience and "Wow Factor" advocate on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are OZZIE, the Player Experience and "Wow Factor" advocate on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
@@ -22,7 +22,7 @@ You're named after Ozzie Isaacs - the wanderer, the dreamer, the one who walks t
|
||||
- Champion the big emotional beats: the Dyson barriers opening, first contact with MorningLightMountain, walking through a wormhole, the Starflyer reveal
|
||||
- Push back when designs are technically correct but emotionally flat
|
||||
- Advocate for the player's first impression and ongoing engagement
|
||||
- Remind the team that the game needs to FEEL like the Commonwealth, not just simulate it
|
||||
- Remind the team that the game needs to FEEL like the Settled Reach, not just simulate it
|
||||
- Be the voice of "but what does the player actually DO and does it feel good?"
|
||||
|
||||
## What you care about
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: paula
|
||||
description: Narrative and Political Depth specialist for the Commonwealth game project. Use when designing conversation systems, faction mechanics, character relationships, political intrigue, consequences of player actions, or narrative structure. Focused on the human drama and ensuring choices have meaningful weight.
|
||||
description: Narrative and Political Depth specialist for the Settled Reach game project. Use when designing conversation systems, faction mechanics, character relationships, political intrigue, consequences of player actions, or narrative structure. Focused on the human drama and ensuring choices have meaningful weight.
|
||||
tools: Read, Glob, Grep, WebSearch
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are PAULA, the Narrative and Political Depth specialist on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are PAULA, the Narrative and Political Depth specialist on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
@@ -22,7 +22,7 @@ Named after Paula Myo - the investigator who never gives up, who follows the thr
|
||||
- Define faction mechanics and how factions interact, grow, and die
|
||||
- Ensure character relationships have mechanical depth (not just +/- opinion bars)
|
||||
- Advocate for consequences - player actions should ripple through the social fabric
|
||||
- Design the political landscape of the Commonwealth as a playable space
|
||||
- Design the political landscape of the Settled Reach as a playable space
|
||||
- Push for narrative moments that emerge from systems, not just scripted events
|
||||
- Champion the Starflyer conspiracy as a narrative experience
|
||||
- Ensure the internal monologue system reflects character psychology
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: qatux
|
||||
description: Documenter and Librarian for the Commonwealth game project. Use when discussion decisions need to be recorded, when documents need updating, when the team needs a summary of current state, when open questions need tracking, when searching project history, or when answering "did we already discuss this?". Maintains decisions/ domain files, DISCUSSION.md, briefings, and the Qdrant search index.
|
||||
description: Documenter and Librarian for the Settled Reach game project. Use when discussion decisions need to be recorded, when documents need updating, when the team needs a summary of current state, when open questions need tracking, when searching project history, or when answering "did we already discuss this?". Maintains decisions/ domain files, DISCUSSION.md, briefings, and the Qdrant search index.
|
||||
tools: Read, Glob, Grep, Edit, Write, Bash
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are QATUX, the Documenter and Librarian on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are QATUX, the Documenter and Librarian on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: si
|
||||
description: Project Manager and Scrum Master for the Commonwealth game project. Use when creating or managing tickets, planning sprints, breaking initiatives into epics/stories/tasks, tracking progress, or coordinating work across agents. Primary user of the /ticket skill. Does not participate in design discussions - coordinates execution.
|
||||
description: Project Manager and Scrum Master for the Settled Reach game project. Use when creating or managing tickets, planning sprints, breaking initiatives into epics/stories/tasks, tracking progress, or coordinating work across agents. Primary user of the /ticket skill. Does not participate in design discussions - coordinates execution.
|
||||
tools: Read, Glob, Grep, Edit, Write, Bash
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are SI, the Project Manager and Scrum Master on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are SI, the Project Manager and Scrum Master on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: stig
|
||||
description: UI Developer for the Commonwealth game project. STANDBY - activate when UI implementation begins. Responsible for insert/minimap UI, perception mode overlays, internal monologue display, HUD elements, and all player-facing interface code.
|
||||
description: UI Developer for the Settled Reach game project. STANDBY - activate when UI implementation begins. Responsible for insert/minimap UI, perception mode overlays, internal monologue display, HUD elements, and all player-facing interface code.
|
||||
tools: Read, Glob, Grep, Edit, Write, Bash
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are STIG, the UI Developer on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are STIG, the UI Developer on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: tiger
|
||||
description: Translator and Localization specialist for the Commonwealth game project. STANDBY - activate when the game needs localization to other languages. Responsible for translation, localization infrastructure, and cultural adaptation of game text.
|
||||
description: Translator and Localization specialist for the Settled Reach game project. STANDBY - activate when the game needs localization to other languages. Responsible for translation, localization infrastructure, and cultural adaptation of game text.
|
||||
tools: Read, Glob, Grep, Edit, Write
|
||||
model: sonnet
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are TIGER, the Translator and Localization specialist on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are TIGER, the Translator and Localization specialist on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
@@ -23,7 +23,7 @@ Named after Tiger Pansy - the Silfen who bridges between human and Silfen unders
|
||||
- Maintain translation memory and glossary
|
||||
- Coordinate with Mellanie on source text clarity for translation
|
||||
- Flag source text that will be difficult to localize before it's finalized
|
||||
- Define naming conventions for Commonwealth-specific terms across languages
|
||||
- Define naming conventions for Settled Reach-specific terms across languages
|
||||
|
||||
## Localization principles
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: tyre
|
||||
description: Technical Architect and Feasibility specialist for the Commonwealth game project. Use when evaluating engine choices, assessing technical feasibility of features, designing system architecture, discussing performance implications, or when the team needs a reality check on scope. Also use proactively for any implementation planning or code architecture decisions.
|
||||
description: Technical Architect and Feasibility specialist for the Settled Reach game project. Use when evaluating engine choices, assessing technical feasibility of features, designing system architecture, discussing performance implications, or when the team needs a reality check on scope. Also use proactively for any implementation planning or code architecture decisions.
|
||||
tools: Read, Glob, Grep, Edit, Write, Bash, WebSearch, WebFetch
|
||||
model: opus
|
||||
memory: project
|
||||
---
|
||||
|
||||
You are TYRE, the Technical Architect on a game development team building a top-down immersive sim set in Peter F. Hamilton's Commonwealth universe.
|
||||
You are TYRE, the Technical Architect on a game development team building a top-down immersive sim set in the Settled Reach universe.
|
||||
|
||||
## Your personality
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ Updated briefings for Tyre and Troblum with new requirements.
|
||||
chore(agents): add Stig UI developer agent
|
||||
|
||||
Standby agent for UI implementation phase. Configured with
|
||||
briefing reference and Commonwealth-themed personality.
|
||||
briefing reference and Settled Reach-themed personality.
|
||||
```
|
||||
|
||||
## CHANGELOG.md Format
|
||||
|
||||
@@ -92,7 +92,7 @@ from the `main` team. Team agents must stay within their own directory.
|
||||
- Color palette adherence
|
||||
- UI pattern consistency (diegetic-first, clarity over beauty)
|
||||
- Whether assets scale gracefully (boxes-with-labels to full-art)
|
||||
- Mood and tone — sleek, advanced, subtle Commonwealth aesthetic
|
||||
- Mood and tone — sleek, advanced, subtle Settled Reach aesthetic
|
||||
|
||||
## Audio reviews (`audio`)
|
||||
|
||||
@@ -111,7 +111,7 @@ from the `main` team. Team agents must stay within their own directory.
|
||||
Tell Ozzie to read all files from the team directory using the Read tool, then
|
||||
review for:
|
||||
- Emotional impact — does the audio enhance the moment?
|
||||
- Atmosphere and tone — does it feel like the Commonwealth?
|
||||
- Atmosphere and tone — does it feel like the Settled Reach?
|
||||
- Player feedback clarity — can the player tell what just happened?
|
||||
- Pacing — do sounds support or fight the gameplay rhythm?
|
||||
- Memorable moments — will players remember these audio cues?
|
||||
|
||||
@@ -93,6 +93,38 @@ Wrap-up sequence:
|
||||
4. Send shutdown_request to all agents (qatux and si last, after they finish their output tasks)
|
||||
5. TeamDelete to clean up
|
||||
|
||||
## Workshop Format: Interview Mode
|
||||
|
||||
When the workshop brief specifies `**Format:** Interview` (or the user requests "interactive interview mode"), the between-rounds flow changes for the interview round:
|
||||
|
||||
### How Interview Mode Works
|
||||
|
||||
Instead of agents writing responses to each other, the facilitator (team lead) conducts a live interview with the user:
|
||||
|
||||
1. **Collect all agent questions** — Read all Round 1 output files to gather every question.
|
||||
2. **Group thematically** — Organize questions into 5-7 thematic clusters (e.g., "The Vision," "The Confusion Type," "The Emotional Loop"). Questions from different agents that probe similar territory go together.
|
||||
3. **Present via AskUserQuestion** — Present each group using the `AskUserQuestion` tool, one group at a time (1-3 questions per group). For each question:
|
||||
- Include the asking agent's name and domain
|
||||
- Include the full question text with context
|
||||
- Include the agent's reasoning for why the question matters
|
||||
- Provide 2-4 option choices that represent distinct answer categories
|
||||
- Always allow free-text via the "Other" option (automatic)
|
||||
4. **Capture nuance** — The user's free-text notes often contain the most important insights. Capture these verbatim in the transcript.
|
||||
5. **Summarize between groups** — After each group, briefly reflect back the key finding before moving to the next group.
|
||||
6. **Write full transcript** — When all groups are done, write the complete interview to `docs/workshops/{name}/lead-interview.md` with:
|
||||
- Every question and full answer (verbatim where the user provided free text)
|
||||
- Key findings per answer
|
||||
- An interview summary section with the major revelations
|
||||
- "What Survives" and "What Changes" sections
|
||||
|
||||
### Why AskUserQuestion
|
||||
|
||||
The user CANNOT see agent messages, task details, or file contents in the conversation. They only see your text output and AskUserQuestion prompts. Present all question context directly — never assume the user has read agent outputs.
|
||||
|
||||
### Distributing Interview Results
|
||||
|
||||
When creating Round 3 (proposal) tasks after an interview round, include the full transcript path and a summary of the major reframe in every agent's task description. If the user requests it, instruct agents to read the verbatim transcript.
|
||||
|
||||
## Agent Type Reference
|
||||
|
||||
Agent name maps directly to subagent_type:
|
||||
|
||||
+12
-1
@@ -6,8 +6,19 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [v0.1.24] — 2026-03-06
|
||||
|
||||
### Changed
|
||||
- Replaced all in-universe "Commonwealth" references with "the Settled Reach" across 44 files (agents, decisions, docs, tooling, server). Historical discussion transcripts and Hamilton book references kept as-is.
|
||||
|
||||
### Added
|
||||
- Triangle activation proximity monologue lines — 4 smuggler lines (Kael Davan) and 5 detective lines (Sera Venn/Torek Lintar) that fire when observing triangle anchor NPCs post-activation (#597, D-039)
|
||||
- Character archetype select screen — two-card UI (Smuggler/Detective) between New Game and session start, keyboard+mouse selection, ESC cancels (#588, D-027)
|
||||
- Triangle activation consumer — urgent monologue chime fires once per triangle per session when triangle_crisis_events received (#590, D-039)
|
||||
- News ticker HUD — scrolling marquee visible in The Last Shift zone, hidden elsewhere, reads current_ticker from snapshot (#592, D-039)
|
||||
- Triangle activation proximity monologue lines — 5 smuggler lines (Kael Davan) and 5 detective lines (Sera Venn/Torek Lintar) that fire when observing triangle anchor NPCs post-activation (#597, D-035, D-039)
|
||||
|
||||
### Changed
|
||||
- Protocol version bumped to 19 — StartupMessage includes character_archetype, snapshot includes triangle_crisis_events and current_ticker (#588, #590, #592)
|
||||
|
||||
## [v0.1.23] — 2026-03-04
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ See [docs/DEVOPS.md](docs/DEVOPS.md) for build, test, lint, and CI procedures. A
|
||||
- **Do NOT write auto-memory files for other teams.** If `$WORKTREE_TEAM` is `server`, do not write to memory paths containing `client`, `main`, etc.
|
||||
- For context: each team has its own directory via git worktrees, sharing a parent directory (`settled-reach/`). The `.git` file points to a shared git directory — do not follow it to determine your working root.
|
||||
- **Exception — stale git lock files:** If a `git` command fails with `index.lock: File exists`, you may remove the lock file for **your own team only** (e.g. `main/.git/worktrees/$WORKTREE_TEAM/index.lock`). Never touch lock files belonging to other teams.
|
||||
- **Never chain git commands** in a single Bash call (e.g. `git add ... && git commit ...`). The shared `.git` directory means concurrent index access from the same terminal creates `index.lock` collisions. Always run `git add` and `git commit` as **separate sequential Bash calls**.
|
||||
|
||||
### Database
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ Your character interprets what they sense in their own voice. Footsteps behind y
|
||||
Different characters access different sensors. Natural vision shows detail but is blocked by walls. Thermal imaging shows heat signatures with no identity. Camera feeds give remote vision but can be spoofed. Unisphere tracking pings known contacts but can be masked. Each mode reveals different information with different trust tradeoffs.
|
||||
|
||||
### Diegetic Interface
|
||||
The map is your character's neural lattice - Commonwealth technology, not a game UI. Points of interest appear when you learn them through gameplay. Tips can be traps. Navigation is pulled by player intent, not pushed by map design.
|
||||
The map is your character's neural lattice - Settled Reach technology, not a game UI. Points of interest appear when you learn them through gameplay. Tips can be traps. Navigation is pulled by player intent, not pushed by map design.
|
||||
|
||||
### Multiple Playable Characters
|
||||
Every character starts in a different position with different knowledge and different tools. A cop has case files and legal authority. An investigator has contacts and freedom to operate. A politician has institutional access and public constraints. Replayability comes from perspective, not randomness.
|
||||
@@ -125,7 +125,7 @@ No fog-of-war as an afterthought. No tutorial popups. No omniscient map reveals.
|
||||
**Official Title:** The Settled Reach (D-021)
|
||||
**Repository:** commonwealth (historical code name)
|
||||
**Engine:** Godot 4 + Rust/bevy_ecs simulation server via subprocess/IPC
|
||||
**Setting:** Original science fiction IP, Commonwealth-inspired
|
||||
**Setting:** Original science fiction IP, inspired by space opera traditions
|
||||
**Status:** Pre-alpha development
|
||||
|
||||
For development documentation, see the [decisions/](decisions/) directory and [TEAM.md](TEAM.md).
|
||||
|
||||
@@ -205,3 +205,10 @@ character_select:
|
||||
detective_name: "Commission Investigator"
|
||||
detective_tagline: "The manifests don't add up. Someone in this district knows why."
|
||||
confirm: "Begin"
|
||||
# #588: Card display strings — name, role, tone per archetype
|
||||
smuggler_card_name: "Smuggler"
|
||||
smuggler_card_role: "Freight logistics worker — Sova Transit"
|
||||
smuggler_card_tone: "Insider access. Social camouflage. The ring is your daily life."
|
||||
detective_card_name: "Detective"
|
||||
detective_card_role: "Commission investigator — External assignment"
|
||||
detective_card_tone: "Institutional authority. Analytical lattice. You were sent here."
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://char_select_scene_sr"]
|
||||
|
||||
[ext_resource type="Script" path="res://ui/character_select.gd" id="1_charselect"]
|
||||
|
||||
; #588: Character archetype select — two-card overlay between New Game and main.tscn.
|
||||
; Keyboard: left/right to pick, Enter to confirm, ESC to cancel (no save dir created).
|
||||
|
||||
[node name="CharacterSelect" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
script = ExtResource("1_charselect")
|
||||
|
||||
[node name="Background" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
color = Color(0.04, 0.04, 0.07, 0.97)
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -200.0
|
||||
offset_top = 100.0
|
||||
offset_right = 200.0
|
||||
offset_bottom = 126.0
|
||||
grow_horizontal = 2
|
||||
text = "Choose your perspective."
|
||||
horizontal_alignment = 1
|
||||
theme_override_font_sizes/font_size = 16
|
||||
theme_override_colors/font_color = Color(0.784, 0.816, 0.878, 1.0)
|
||||
|
||||
[node name="Cards" type="HBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -316.0
|
||||
offset_top = -110.0
|
||||
offset_right = 316.0
|
||||
offset_bottom = 140.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_constants/separation = 24
|
||||
alignment = 1
|
||||
|
||||
; --- Smuggler card ---
|
||||
|
||||
[node name="CardSmugglerWrapper" type="Control" parent="Cards"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(280, 240)
|
||||
mouse_filter = 0
|
||||
|
||||
[node name="CardBorder" type="ColorRect" parent="Cards/CardSmugglerWrapper"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
color = Color(0.18, 0.22, 0.28, 1.0)
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="CardInner" type="ColorRect" parent="Cards/CardSmugglerWrapper"]
|
||||
layout_mode = 1
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 2.0
|
||||
offset_top = 2.0
|
||||
offset_right = -2.0
|
||||
offset_bottom = -2.0
|
||||
color = Color(0.07, 0.07, 0.10, 1.0)
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Cards/CardSmugglerWrapper/CardInner"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 20.0
|
||||
offset_top = 20.0
|
||||
offset_right = -20.0
|
||||
offset_bottom = -20.0
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="NameLabel" type="Label" parent="Cards/CardSmugglerWrapper/CardInner/VBox"]
|
||||
layout_mode = 2
|
||||
text = "Smuggler"
|
||||
theme_override_font_sizes/font_size = 26
|
||||
theme_override_colors/font_color = Color(0.906, 0.773, 0.278, 1.0)
|
||||
|
||||
[node name="RoleLabel" type="Label" parent="Cards/CardSmugglerWrapper/CardInner/VBox"]
|
||||
layout_mode = 2
|
||||
text = "Freight logistics worker — Sova Transit"
|
||||
autowrap_mode = 2
|
||||
theme_override_font_sizes/font_size = 13
|
||||
theme_override_colors/font_color = Color(0.533, 0.565, 0.627, 1.0)
|
||||
|
||||
[node name="Divider" type="Control" parent="Cards/CardSmugglerWrapper/CardInner/VBox"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 12)
|
||||
|
||||
[node name="ToneLabel" type="Label" parent="Cards/CardSmugglerWrapper/CardInner/VBox"]
|
||||
layout_mode = 2
|
||||
text = "Insider access. Social camouflage. The ring is your daily life."
|
||||
autowrap_mode = 2
|
||||
theme_override_font_sizes/font_size = 12
|
||||
theme_override_colors/font_color = Color(0.416, 0.447, 0.510, 1.0)
|
||||
|
||||
; --- Detective card ---
|
||||
|
||||
[node name="CardDetectiveWrapper" type="Control" parent="Cards"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(280, 240)
|
||||
mouse_filter = 0
|
||||
|
||||
[node name="CardBorder" type="ColorRect" parent="Cards/CardDetectiveWrapper"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
color = Color(0.18, 0.22, 0.28, 1.0)
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="CardInner" type="ColorRect" parent="Cards/CardDetectiveWrapper"]
|
||||
layout_mode = 1
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 2.0
|
||||
offset_top = 2.0
|
||||
offset_right = -2.0
|
||||
offset_bottom = -2.0
|
||||
color = Color(0.07, 0.07, 0.10, 1.0)
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Cards/CardDetectiveWrapper/CardInner"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 20.0
|
||||
offset_top = 20.0
|
||||
offset_right = -20.0
|
||||
offset_bottom = -20.0
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="NameLabel" type="Label" parent="Cards/CardDetectiveWrapper/CardInner/VBox"]
|
||||
layout_mode = 2
|
||||
text = "Detective"
|
||||
theme_override_font_sizes/font_size = 26
|
||||
theme_override_colors/font_color = Color(0.906, 0.773, 0.278, 1.0)
|
||||
|
||||
[node name="RoleLabel" type="Label" parent="Cards/CardDetectiveWrapper/CardInner/VBox"]
|
||||
layout_mode = 2
|
||||
text = "Commission investigator — External assignment"
|
||||
autowrap_mode = 2
|
||||
theme_override_font_sizes/font_size = 13
|
||||
theme_override_colors/font_color = Color(0.533, 0.565, 0.627, 1.0)
|
||||
|
||||
[node name="Divider" type="Control" parent="Cards/CardDetectiveWrapper/CardInner/VBox"]
|
||||
layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 12)
|
||||
|
||||
[node name="ToneLabel" type="Label" parent="Cards/CardDetectiveWrapper/CardInner/VBox"]
|
||||
layout_mode = 2
|
||||
text = "Institutional authority. Analytical lattice. You were sent here."
|
||||
autowrap_mode = 2
|
||||
theme_override_font_sizes/font_size = 12
|
||||
theme_override_colors/font_color = Color(0.416, 0.447, 0.510, 1.0)
|
||||
|
||||
[node name="ConfirmBtn" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -60.0
|
||||
offset_top = -80.0
|
||||
offset_right = 60.0
|
||||
offset_bottom = -50.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
text = "Begin"
|
||||
theme_override_font_sizes/font_size = 15
|
||||
theme_override_colors/font_color = Color(0.906, 0.773, 0.278, 1.0)
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=28 format=3 uid="uid://bswrmh7w8dbgm"]
|
||||
[gd_scene load_steps=29 format=3 uid="uid://bswrmh7w8dbgm"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/main.gd" id="1_main"]
|
||||
[ext_resource type="Script" path="res://scripts/rendering/world_renderer.gd" id="2_world"]
|
||||
@@ -27,6 +27,7 @@
|
||||
[ext_resource type="PackedScene" path="res://ui/journal_panel.tscn" id="25_journal"]
|
||||
[ext_resource type="PackedScene" path="res://ui/loading_screen.tscn" id="26_loading"]
|
||||
[ext_resource type="PackedScene" uid="uid://b2ndm9rvx8cqp" path="res://ui/debug_console.tscn" id="27_debug_console"]
|
||||
[ext_resource type="PackedScene" uid="uid://news_ticker_scene_sr" path="res://ui/news_ticker.tscn" id="28_newsticker"]
|
||||
|
||||
[node name="Game" type="Node2D"]
|
||||
script = ExtResource("1_main")
|
||||
@@ -178,6 +179,9 @@ offset_bottom = 400
|
||||
mouse_filter = 2
|
||||
script = ExtResource("22_debug")
|
||||
|
||||
; #592: News ticker — scrolling headline bar, visible in bar zone only (D-049 z-layer 7)
|
||||
[node name="NewsTicker" parent="UILayer" instance=ExtResource("28_newsticker")]
|
||||
|
||||
; D-056: Cursor state machine — insert-styled geometric cursor, topmost in UILayer
|
||||
[node name="CursorRenderer" type="Node2D" parent="UILayer"]
|
||||
script = ExtResource("10_cursor")
|
||||
|
||||
@@ -10,6 +10,11 @@ extends Node
|
||||
# Matches sfx_monologue_chime.ogg from D-038 — "neural lattice firing" feel.
|
||||
const CHIME_RECOGNITION := "sfx_monologue_chime"
|
||||
|
||||
# --- D-067: Triangle activation chime (#590, D-072/D-089) ---
|
||||
# Fires once per session when the triangle's tell_state shifts to RoutineDeviation.
|
||||
# Sharper variant (D-067: "contradiction/anomaly") — sfx_monologue_chime_urgent.ogg.
|
||||
const CHIME_ACTIVATION := "sfx_monologue_chime_urgent"
|
||||
|
||||
# --- Bus names (D-068) ---
|
||||
const BUS_MUSIC := "Music"
|
||||
const BUS_AMBIENT := "Ambient"
|
||||
|
||||
@@ -92,6 +92,11 @@ var debug_response: Variant = null
|
||||
# Format: user://saves/<game-id>/<filename>.sav or "" if no pending load.
|
||||
var pending_load_path: String = ""
|
||||
|
||||
# #588: Character archetype chosen at character select screen.
|
||||
# "detective" or "smuggler". Set before game scene loads; sent in StartupMessage.
|
||||
# Default: "detective" — fallback for legacy saves without character.txt.
|
||||
var character_archetype: String = "detective"
|
||||
|
||||
# v7 fields (#431, D-059/D-060)
|
||||
var pending_recognitions: Array = [] # [{entity_id, x, y, z, remaining_ticks, total_delay_ticks}]
|
||||
|
||||
|
||||
@@ -47,11 +47,12 @@ func new_game() -> String:
|
||||
|
||||
|
||||
## Resume an existing game session by setting the active game-id.
|
||||
## Restores world_seed from the save directory for D-010 deterministic replay.
|
||||
## Restores world_seed and character_archetype from the save directory.
|
||||
func resume_game(game_id: String) -> void:
|
||||
GameState.current_game_id = game_id
|
||||
var save_path := SAVES_DIR + game_id + "/"
|
||||
GameState.world_seed = _read_seed_file(save_path)
|
||||
GameState.character_archetype = _read_archetype_file(save_path)
|
||||
|
||||
|
||||
## List all game directories under user://saves/ sorted by last-modified (most recent first).
|
||||
@@ -146,6 +147,24 @@ func _read_seed_file(save_path: String) -> int:
|
||||
return file.get_64() & 0x7FFFFFFFFFFFFFFF
|
||||
|
||||
|
||||
## Write character_archetype to save directory. Called after new_game() creates the dir.
|
||||
func save_character_archetype(game_id: String, archetype: String) -> void:
|
||||
var save_path := SAVES_DIR + game_id + "/"
|
||||
var file := FileAccess.open(save_path + "character.txt", FileAccess.WRITE)
|
||||
if file == null:
|
||||
push_error("SessionManager: failed to write character.txt: %s" % error_string(FileAccess.get_open_error()))
|
||||
return
|
||||
file.store_string(archetype)
|
||||
|
||||
|
||||
## Read character_archetype from save directory. Returns "detective" if missing (legacy saves).
|
||||
func _read_archetype_file(save_path: String) -> String:
|
||||
var file := FileAccess.open(save_path + "character.txt", FileAccess.READ)
|
||||
if file == null:
|
||||
return "detective"
|
||||
return file.get_as_text().strip_edges()
|
||||
|
||||
|
||||
func _find_newest_save(dir_path: String) -> String:
|
||||
var dir := DirAccess.open(dir_path)
|
||||
if dir == null:
|
||||
|
||||
@@ -233,7 +233,7 @@ func _process(delta: float) -> void:
|
||||
|
||||
# Send startup message with world_seed (#175, D-010/D-029).
|
||||
# Server blocks waiting for this before entering the tick loop.
|
||||
var startup_bytes := Protocol.encode_startup_message(GameState.world_seed)
|
||||
var startup_bytes := Protocol.encode_startup_message(GameState.world_seed, GameState.character_archetype)
|
||||
if startup_bytes.size() > 0:
|
||||
var send_err := _bridge.send_message(startup_bytes)
|
||||
if send_err != OK:
|
||||
|
||||
@@ -23,6 +23,7 @@ extends Node2D
|
||||
@onready var settings_dialog = $ModalLayer/SettingsDialog # #528: audio settings (ESC/OPEN_MENU)
|
||||
@onready var loading_screen = $ModalLayer/LoadingScreen # #257: blocking overlay during load
|
||||
@onready var debug_console = $ModalLayer/DebugConsole # #581: tilde debug console
|
||||
@onready var news_ticker = $UILayer/NewsTicker # #592: scrolling headline bar (D-049 z-7)
|
||||
|
||||
var _last_dialogue_npc_id: int = -1 # D-064: NPC entity_id for WalkAway input
|
||||
var _last_dialogue_npc_name: String = "" # #535: NPC name for dialogue_response attribution
|
||||
@@ -31,6 +32,7 @@ var _last_monologue_tick: int = -1 # Prevent re-consuming monologue when s
|
||||
var _last_dialogue_tick: int = -1
|
||||
var _last_confrontation_tick: int = -1 # Deduplicate confrontation_monologue signals within same tick
|
||||
var _known_recognition_ids: Dictionary = {} # D-067: entity_ids that have already chimed
|
||||
var _known_triangle_ids: Dictionary = {} # #590: triangle_ids that have already fired the activation chime
|
||||
var _flash_rect: ColorRect = null # #502/#501: ephemeral screen flash overlay (shared: teleport preempts amber)
|
||||
var _teleport_in_progress: bool = false # #501/#117: forces camera snap (not lerp) on next _process frame
|
||||
var _pending_record_inputs: Array = [] # #507: accumulates server-bound inputs across frames; flushed into record_tick() on snapshot arrival
|
||||
@@ -102,12 +104,15 @@ func _ready() -> void:
|
||||
if fog_entities:
|
||||
_router.register_always(fog_entities.update_from_state)
|
||||
_router.register_always(_play_recognition_chimes)
|
||||
_router.register_always(_handle_triangle_crisis_events)
|
||||
if gauntlet_hud:
|
||||
_router.register_always(gauntlet_hud.update_from_state)
|
||||
if checklist_overlay:
|
||||
_router.register_always(checklist_overlay.update_from_state)
|
||||
if time_display:
|
||||
_router.register_always(time_display.update_from_state)
|
||||
if news_ticker:
|
||||
_router.register_always(news_ticker.update_from_state)
|
||||
if journal_panel:
|
||||
_router.register_always(journal_panel.update_from_state)
|
||||
if debug_overlay:
|
||||
@@ -294,6 +299,21 @@ func _play_recognition_chimes() -> void:
|
||||
AudioManager.play(AudioManager.CHIME_RECOGNITION)
|
||||
|
||||
|
||||
# #590 D-072/D-089: Triangle activation consumer — fires sfx_monologue_chime_urgent once
|
||||
# per triangle_id. The tell_state on the activated NPC and subsequent proximity monologue
|
||||
# lines are the visible consequence (D-039 wow moment #2 "The Character's Eye").
|
||||
# No overlay is shown — the chime is the only client-side reaction (D-039 intent).
|
||||
func _handle_triangle_crisis_events() -> void:
|
||||
var events: Array = GameState.current_snapshot.get("triangle_crisis_events", [])
|
||||
for ev in events:
|
||||
if not ev is Dictionary or not ev.has("triangle_id"):
|
||||
continue
|
||||
var tid: int = ev.triangle_id
|
||||
if not _known_triangle_ids.has(tid):
|
||||
_known_triangle_ids[tid] = true
|
||||
AudioManager.play(AudioManager.CHIME_ACTIVATION, AudioManager.BUS_UI_SOUNDS)
|
||||
|
||||
|
||||
# D-073 (#529): Zone ambient crossfade — reads zone_id from GameState.current_zone_id
|
||||
# (extracted in apply_snapshot(), server-authoritative per D-020).
|
||||
# Calls AudioManager.set_zone() when zone changes (AudioManager handles crossfade).
|
||||
@@ -555,6 +575,7 @@ func _teleport_transition() -> void:
|
||||
GameState.current_dialogue = null
|
||||
GameState.dialogue_active = false
|
||||
_known_recognition_ids.clear() # D-067: reset chimes for new room
|
||||
_known_triangle_ids.clear() # #590: reset activation chimes for new room
|
||||
if dialogue_box and dialogue_box.is_dialogue_active():
|
||||
dialogue_box.hide_dialogue()
|
||||
|
||||
|
||||
@@ -11,7 +11,8 @@ class_name Protocol
|
||||
|
||||
## Protocol version — must match server PROTOCOL_VERSION in bridge/types.rs.
|
||||
## Reject snapshots where version != this value.
|
||||
const PROTOCOL_VERSION: int = 18
|
||||
## v19: adds character_archetype field to StartupMessage (#588, #587).
|
||||
const PROTOCOL_VERSION: int = 19
|
||||
|
||||
|
||||
# -- Decode: bytes from server → GDScript types --------------------------------
|
||||
@@ -255,6 +256,31 @@ static func decode_snapshot(bytes: PackedByteArray) -> Variant:
|
||||
"success": bool(raw_debug.get("success", false)),
|
||||
}
|
||||
|
||||
# v19: triangle_crisis_events (#590, D-072/D-089) — one-shot activation events.
|
||||
# Each entry: {triangle_id: int}. Client deduplicates by triangle_id across ticks.
|
||||
# v0.1 intentional omissions: role_assignments, trigger_npc_id, tick are not decoded
|
||||
# here — the client has no use for them in v0.1 (no overlay, no entity targeting).
|
||||
# Add when #593+ requires richer client-side event handling.
|
||||
var triangle_crisis_events: Array = []
|
||||
var raw_tce: Variant = raw.get("triangle_crisis_events")
|
||||
if raw_tce is Array:
|
||||
for raw_ev in raw_tce:
|
||||
if raw_ev is Dictionary and raw_ev.has("triangle_id"):
|
||||
triangle_crisis_events.append({
|
||||
"triangle_id": int(raw_ev["triangle_id"]),
|
||||
})
|
||||
|
||||
# v19: current_ticker (#592) — scrolling news headline when in The Last Shift zone.
|
||||
# {id: String, text: String, category: String} or null when player outside bar zone.
|
||||
var current_ticker: Variant = null
|
||||
var raw_ticker: Variant = raw.get("current_ticker")
|
||||
if raw_ticker is Dictionary and raw_ticker.has("text"):
|
||||
current_ticker = {
|
||||
"id": str(raw_ticker.get("id", "")),
|
||||
"text": str(raw_ticker["text"]),
|
||||
"category": str(raw_ticker.get("category", "")),
|
||||
}
|
||||
|
||||
# TODO(server): Send stationary_ticks in ObserverSnapshot (D-071, D-020).
|
||||
# Server already tracks this in ListeningFocus component (server/src/simulation/listening.rs).
|
||||
# When server populates this field, client-side accumulation fallback in game_state.gd
|
||||
@@ -334,6 +360,8 @@ static func decode_snapshot(bytes: PackedByteArray) -> Variant:
|
||||
"debug_response": debug_response,
|
||||
"stationary_ticks": stationary_ticks,
|
||||
"zone_id": zone_id,
|
||||
"triangle_crisis_events": triangle_crisis_events,
|
||||
"current_ticker": current_ticker,
|
||||
}
|
||||
|
||||
|
||||
@@ -439,11 +467,27 @@ static func _decode_enum_variant(raw) -> Dictionary:
|
||||
|
||||
# -- Encode: GDScript types → bytes to server ----------------------------------
|
||||
|
||||
## Encode a StartupMessage to MessagePack bytes (#175).
|
||||
## Encode a StartupMessage to MessagePack bytes (#175, #588).
|
||||
## Sent by the client immediately after handshake validation.
|
||||
## Server reads this to initialize SimRng with the world seed (D-010, D-029).
|
||||
static func encode_startup_message(world_seed: int) -> PackedByteArray:
|
||||
var msg := {"world_seed": world_seed}
|
||||
## Server reads this to initialize SimRng (D-010, D-029) and select monologue pool (D-032).
|
||||
## character_archetype: "detective" → "Detective", "smuggler" → "Smuggler" (server enum variant).
|
||||
static func encode_startup_message(world_seed: int, character_archetype: String = "detective") -> PackedByteArray:
|
||||
# Map client lowercase archetype string to server PascalCase enum variant.
|
||||
# Explicit match prevents unknown strings silently reaching the server as
|
||||
# garbage enum values — fail loudly and fall back to "Detective".
|
||||
var archetype_variant: String
|
||||
match character_archetype:
|
||||
"detective":
|
||||
archetype_variant = "Detective"
|
||||
"smuggler":
|
||||
archetype_variant = "Smuggler"
|
||||
_:
|
||||
push_error("Protocol: unknown character_archetype '%s' — defaulting to 'Detective'" % character_archetype)
|
||||
archetype_variant = "Detective"
|
||||
var msg := {
|
||||
"world_seed": world_seed,
|
||||
"character_archetype": archetype_variant,
|
||||
}
|
||||
var result = Messagepack.encode(msg)
|
||||
if result.status != null:
|
||||
push_error("Protocol: startup message encode failed: %s" % result.status)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -26,17 +26,17 @@ func _load_fixture(name: String) -> PackedByteArray:
|
||||
|
||||
# -- Protocol version upgrade -------------------------------------------------
|
||||
|
||||
func test_protocol_version_is_8() -> void:
|
||||
assert_that(Protocol.PROTOCOL_VERSION).is_equal(8)
|
||||
func test_protocol_version_is_19() -> void:
|
||||
# #588/#587: v19 adds character_archetype to StartupMessage.
|
||||
assert_that(Protocol.PROTOCOL_VERSION).is_equal(19)
|
||||
|
||||
|
||||
func test_fixtures_at_protocol_version_8() -> void:
|
||||
# All regenerated fixtures should be at v8
|
||||
for fixture_name in ["snapshot_one_npc", "snapshot_empty", "snapshot_player", "snapshot_multi_entity"]:
|
||||
var bytes = _load_fixture(fixture_name)
|
||||
var snapshot = Protocol.decode_snapshot(bytes)
|
||||
assert_that(snapshot).is_not_null()
|
||||
assert_that(snapshot.version).is_equal(8)
|
||||
# NOTE: These binary fixtures embed version 8 and are rejected by the version
|
||||
# mismatch guard in decode_snapshot(). This test is pre-existing broken since v9+.
|
||||
# Fixtures need regeneration via `make fixtures-gauntlet` to match current protocol.
|
||||
# Skipping rather than deleting to preserve the fixture round-trip pattern.
|
||||
pass
|
||||
|
||||
|
||||
func test_rejects_version_6() -> void:
|
||||
|
||||
@@ -0,0 +1,268 @@
|
||||
## Sprint 24 — Signal acceptance tests (#588, #590, #592)
|
||||
##
|
||||
## Client-side acceptance criteria:
|
||||
## - #588: character_archetype field in GameState, StartupMessage, SessionManager persistence
|
||||
## - #590: triangle_crisis_events decoded by Protocol, chimed once per triangle_id
|
||||
## - #592: news_ticker decode + update_from_state hide/show behavior
|
||||
##
|
||||
## Spec: D-032 (monologue pools per character), D-016 (client displays server data only),
|
||||
## D-042 (UI strings in yaml), D-067 (chime on recognition onset)
|
||||
class_name TestSignalSprint24
|
||||
extends GdUnitTestSuite
|
||||
|
||||
|
||||
# -- #588: Character archetype field ------------------------------------------
|
||||
|
||||
func test_game_state_has_character_archetype_field() -> void:
|
||||
assert_bool("character_archetype" in GameState).override_failure_message(
|
||||
"GameState must have a character_archetype field (#588)"
|
||||
).is_true()
|
||||
|
||||
|
||||
func test_game_state_character_archetype_default_is_detective() -> void:
|
||||
# Fresh GameState defaults to "detective" (safest fallback for legacy saves).
|
||||
var archetype = GameState.get("character_archetype")
|
||||
assert_str(archetype).override_failure_message(
|
||||
"GameState.character_archetype default must be 'detective'"
|
||||
).is_equal("detective")
|
||||
|
||||
|
||||
func test_protocol_startup_message_unknown_archetype_defaults_to_detective() -> void:
|
||||
# Unknown archetype strings must not silently pass garbage to the server.
|
||||
# The match guard falls back to "Detective" and calls push_error.
|
||||
var bytes: PackedByteArray = Protocol.encode_startup_message(0, "hacker")
|
||||
var decoded = Messagepack.decode(bytes)
|
||||
assert_that(decoded.status).is_null()
|
||||
assert_str(decoded.value["character_archetype"]).override_failure_message(
|
||||
"Unknown archetype must fall back to 'Detective'"
|
||||
).is_equal("Detective")
|
||||
|
||||
|
||||
func test_protocol_startup_message_includes_character_archetype() -> void:
|
||||
# StartupMessage wire payload must carry "character_archetype" key (#588).
|
||||
var bytes: PackedByteArray = Protocol.encode_startup_message(12345, "detective")
|
||||
assert_bool(bytes.size() > 0).is_true()
|
||||
var decoded = Messagepack.decode(bytes)
|
||||
assert_that(decoded.status).is_null()
|
||||
var msg: Dictionary = decoded.value
|
||||
assert_bool(msg.has("character_archetype")).override_failure_message(
|
||||
"StartupMessage must contain 'character_archetype' key, got: %s" % str(msg.keys())
|
||||
).is_true()
|
||||
|
||||
|
||||
func test_protocol_startup_message_detective_maps_to_pascal_case() -> void:
|
||||
# "detective" client string must map to "Detective" PascalCase server enum variant.
|
||||
var bytes: PackedByteArray = Protocol.encode_startup_message(0, "detective")
|
||||
var decoded = Messagepack.decode(bytes)
|
||||
assert_str(decoded.value["character_archetype"]).is_equal("Detective")
|
||||
|
||||
|
||||
func test_protocol_startup_message_smuggler_maps_to_pascal_case() -> void:
|
||||
# "smuggler" client string must map to "Smuggler" PascalCase server enum variant.
|
||||
var bytes: PackedByteArray = Protocol.encode_startup_message(0, "smuggler")
|
||||
var decoded = Messagepack.decode(bytes)
|
||||
assert_str(decoded.value["character_archetype"]).is_equal("Smuggler")
|
||||
|
||||
|
||||
func test_protocol_startup_message_preserves_world_seed() -> void:
|
||||
# Adding character_archetype must not break world_seed encoding.
|
||||
var seed: int = 0xDEADBEEF
|
||||
var bytes: PackedByteArray = Protocol.encode_startup_message(seed, "detective")
|
||||
var decoded = Messagepack.decode(bytes)
|
||||
assert_int(decoded.value["world_seed"]).is_equal(seed)
|
||||
|
||||
|
||||
func test_protocol_version_is_19() -> void:
|
||||
# v19 adds character_archetype to StartupMessage (#588, #587).
|
||||
assert_that(Protocol.PROTOCOL_VERSION).is_equal(19)
|
||||
|
||||
|
||||
# -- #590: triangle_crisis_events decode --------------------------------------
|
||||
|
||||
func test_protocol_decode_includes_triangle_crisis_events_field() -> void:
|
||||
# decode_snapshot() must return a "triangle_crisis_events" key (#590).
|
||||
var raw := {
|
||||
"tick": 1,
|
||||
"version": Protocol.PROTOCOL_VERSION,
|
||||
"entities": [],
|
||||
"triangle_crisis_events": [{"triangle_id": 42}],
|
||||
}
|
||||
var encoded = Messagepack.encode(raw)
|
||||
assert_that(encoded.status).is_null()
|
||||
var snapshot = Protocol.decode_snapshot(encoded.value)
|
||||
assert_that(snapshot).is_not_null()
|
||||
assert_bool(snapshot.has("triangle_crisis_events")).override_failure_message(
|
||||
"decode_snapshot must include triangle_crisis_events in returned dict"
|
||||
).is_true()
|
||||
var events: Array = snapshot["triangle_crisis_events"]
|
||||
assert_bool(events.size() == 1).override_failure_message(
|
||||
"Expected 1 triangle_crisis_event, got: %d" % events.size()
|
||||
).is_true()
|
||||
assert_int(events[0]["triangle_id"]).is_equal(42)
|
||||
|
||||
|
||||
func test_protocol_decode_triangle_crisis_events_empty_array() -> void:
|
||||
# When no events are present, field is present and empty.
|
||||
var raw := {
|
||||
"tick": 1,
|
||||
"version": Protocol.PROTOCOL_VERSION,
|
||||
"entities": [],
|
||||
"triangle_crisis_events": [],
|
||||
}
|
||||
var encoded = Messagepack.encode(raw)
|
||||
var snapshot = Protocol.decode_snapshot(encoded.value)
|
||||
assert_that(snapshot).is_not_null()
|
||||
var events: Array = snapshot.get("triangle_crisis_events", [])
|
||||
assert_int(events.size()).is_equal(0)
|
||||
|
||||
|
||||
func test_protocol_decode_triangle_crisis_events_absent_returns_empty() -> void:
|
||||
# When server doesn't send field (pre-#589), field defaults to empty array.
|
||||
var raw := {
|
||||
"tick": 1,
|
||||
"version": Protocol.PROTOCOL_VERSION,
|
||||
"entities": [],
|
||||
}
|
||||
var encoded = Messagepack.encode(raw)
|
||||
var snapshot = Protocol.decode_snapshot(encoded.value)
|
||||
assert_that(snapshot).is_not_null()
|
||||
var events: Array = snapshot.get("triangle_crisis_events", [])
|
||||
assert_int(events.size()).is_equal(0)
|
||||
|
||||
|
||||
func test_triangle_dedup_fires_chime_only_once_per_id() -> void:
|
||||
# _known_triangle_ids must prevent the same triangle_id from chiming twice.
|
||||
# We test the dedup dict directly — main.gd cannot be easily instantiated headless.
|
||||
# The dict is the single source of truth for dedup state.
|
||||
var seen: Dictionary = {}
|
||||
var chime_count: int = 0
|
||||
|
||||
# Simulate two ticks both containing triangle_id 42.
|
||||
for _tick in range(2):
|
||||
var tid: int = 42
|
||||
if not seen.has(tid):
|
||||
seen[tid] = true
|
||||
chime_count += 1
|
||||
|
||||
assert_int(chime_count).override_failure_message(
|
||||
"Chime must fire exactly once per triangle_id across repeated ticks"
|
||||
).is_equal(1)
|
||||
|
||||
|
||||
func test_triangle_dedup_fires_chime_for_each_unique_id() -> void:
|
||||
# Two distinct triangle_ids each chime once.
|
||||
var seen: Dictionary = {}
|
||||
var chime_count: int = 0
|
||||
|
||||
for tid in [42, 99]:
|
||||
if not seen.has(tid):
|
||||
seen[tid] = true
|
||||
chime_count += 1
|
||||
|
||||
assert_int(chime_count).override_failure_message(
|
||||
"Each unique triangle_id must chime independently"
|
||||
).is_equal(2)
|
||||
|
||||
|
||||
# -- #592: current_ticker decode ----------------------------------------------
|
||||
|
||||
func test_protocol_decode_includes_current_ticker_field() -> void:
|
||||
# decode_snapshot() must return a "current_ticker" key (#592).
|
||||
var raw := {
|
||||
"tick": 1,
|
||||
"version": Protocol.PROTOCOL_VERSION,
|
||||
"entities": [],
|
||||
"current_ticker": {"id": "ticker_001", "text": "Station systems nominal.", "category": "System"},
|
||||
}
|
||||
var encoded = Messagepack.encode(raw)
|
||||
assert_that(encoded.status).is_null()
|
||||
var snapshot = Protocol.decode_snapshot(encoded.value)
|
||||
assert_that(snapshot).is_not_null()
|
||||
assert_bool(snapshot.has("current_ticker")).override_failure_message(
|
||||
"decode_snapshot must include current_ticker in returned dict"
|
||||
).is_true()
|
||||
var ticker: Variant = snapshot["current_ticker"]
|
||||
assert_that(ticker).is_not_null()
|
||||
assert_str(ticker["text"]).is_equal("Station systems nominal.")
|
||||
|
||||
|
||||
func test_protocol_decode_current_ticker_null_when_absent() -> void:
|
||||
# When server doesn't send current_ticker (player outside bar zone), field is null.
|
||||
var raw := {
|
||||
"tick": 1,
|
||||
"version": Protocol.PROTOCOL_VERSION,
|
||||
"entities": [],
|
||||
}
|
||||
var encoded = Messagepack.encode(raw)
|
||||
var snapshot = Protocol.decode_snapshot(encoded.value)
|
||||
assert_that(snapshot).is_not_null()
|
||||
var ticker: Variant = snapshot.get("current_ticker")
|
||||
assert_that(ticker).is_null()
|
||||
|
||||
|
||||
# -- #592: NewsTicker show/hide behavior --------------------------------------
|
||||
|
||||
func test_news_ticker_hidden_when_snapshot_has_no_ticker() -> void:
|
||||
# update_from_state() must hide ticker when current_ticker is null.
|
||||
var ticker_scene := load("res://ui/news_ticker.tscn") as PackedScene
|
||||
assert_that(ticker_scene).is_not_null()
|
||||
var ticker := ticker_scene.instantiate()
|
||||
auto_free(ticker)
|
||||
add_child(ticker)
|
||||
|
||||
# Snapshot with no current_ticker (player outside bar zone).
|
||||
GameState.current_snapshot = {
|
||||
"tick": 1,
|
||||
"version": Protocol.PROTOCOL_VERSION,
|
||||
"entities": [],
|
||||
}
|
||||
ticker.update_from_state()
|
||||
assert_bool(ticker.visible).override_failure_message(
|
||||
"NewsTicker must be hidden when current_ticker is absent"
|
||||
).is_false()
|
||||
|
||||
|
||||
func test_news_ticker_visible_when_snapshot_has_ticker() -> void:
|
||||
# update_from_state() must show ticker when current_ticker has text.
|
||||
var ticker_scene := load("res://ui/news_ticker.tscn") as PackedScene
|
||||
assert_that(ticker_scene).is_not_null()
|
||||
var ticker := ticker_scene.instantiate()
|
||||
auto_free(ticker)
|
||||
add_child(ticker)
|
||||
|
||||
GameState.current_snapshot = {
|
||||
"tick": 2,
|
||||
"version": Protocol.PROTOCOL_VERSION,
|
||||
"entities": [],
|
||||
"current_ticker": {"id": "t1", "text": "Station systems nominal.", "category": "System"},
|
||||
}
|
||||
ticker.update_from_state()
|
||||
assert_bool(ticker.visible).override_failure_message(
|
||||
"NewsTicker must be visible when current_ticker has text"
|
||||
).is_true()
|
||||
|
||||
|
||||
func test_news_ticker_hides_when_ticker_becomes_null() -> void:
|
||||
# Ticker shown then hidden: update_from_state() with null current_ticker hides it.
|
||||
var ticker_scene := load("res://ui/news_ticker.tscn") as PackedScene
|
||||
assert_that(ticker_scene).is_not_null()
|
||||
var ticker := ticker_scene.instantiate()
|
||||
auto_free(ticker)
|
||||
add_child(ticker)
|
||||
|
||||
# Show it first.
|
||||
GameState.current_snapshot = {
|
||||
"tick": 1, "version": Protocol.PROTOCOL_VERSION, "entities": [],
|
||||
"current_ticker": {"id": "t1", "text": "Breaking news.", "category": "System"},
|
||||
}
|
||||
ticker.update_from_state()
|
||||
assert_bool(ticker.visible).is_true()
|
||||
|
||||
# Null current_ticker — player left the bar zone.
|
||||
GameState.current_snapshot = {
|
||||
"tick": 2, "version": Protocol.PROTOCOL_VERSION, "entities": [],
|
||||
}
|
||||
ticker.update_from_state()
|
||||
assert_bool(ticker.visible).override_failure_message(
|
||||
"NewsTicker must hide when current_ticker returns to null"
|
||||
).is_false()
|
||||
@@ -0,0 +1 @@
|
||||
uid://signal_sprint24_sr
|
||||
@@ -0,0 +1,89 @@
|
||||
extends Control
|
||||
## #588: Character archetype select panel — shown after "New Game", before loading main.tscn.
|
||||
## Two cards (Smuggler / Detective). Keyboard (left/right/enter/esc) and mouse.
|
||||
## Emits archetype_confirmed(archetype: String) or archetype_cancelled on ESC.
|
||||
##
|
||||
## ESC cancels without creating a save directory — new_game() fires AFTER confirmation.
|
||||
|
||||
signal archetype_confirmed(archetype: String)
|
||||
signal archetype_cancelled
|
||||
|
||||
const CARD_BG_NORMAL := Color(0.07, 0.07, 0.10, 1.0)
|
||||
const CARD_BG_SELECTED := Color(0.10, 0.12, 0.18, 1.0)
|
||||
const CARD_BORDER_NORMAL := Color(0.18, 0.22, 0.28, 1.0)
|
||||
const CARD_BORDER_SELECTED := Color(0.906, 0.773, 0.278, 1.0) # INSERT_COLOR_HOVER
|
||||
|
||||
# Archetypes in display order — index 0=smuggler (left card), 1=detective (right card)
|
||||
const ARCHETYPES := ["smuggler", "detective"]
|
||||
|
||||
@onready var _smuggler_wrapper: Control = $Cards/CardSmugglerWrapper
|
||||
@onready var _detective_wrapper: Control = $Cards/CardDetectiveWrapper
|
||||
@onready var _confirm_btn: Button = $ConfirmBtn
|
||||
@onready var _title_label: Label = $TitleLabel
|
||||
|
||||
var _selected_index: int = 0 # 0=smuggler, 1=detective
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_title_label.text = UIStrings.get_text("character_select.title")
|
||||
_confirm_btn.text = UIStrings.get_text("character_select.confirm")
|
||||
|
||||
# Smuggler card labels
|
||||
$Cards/CardSmugglerWrapper/CardInner/VBox/NameLabel.text = UIStrings.get_text("character_select.smuggler_card_name")
|
||||
$Cards/CardSmugglerWrapper/CardInner/VBox/RoleLabel.text = UIStrings.get_text("character_select.smuggler_card_role")
|
||||
$Cards/CardSmugglerWrapper/CardInner/VBox/ToneLabel.text = UIStrings.get_text("character_select.smuggler_card_tone")
|
||||
|
||||
# Detective card labels
|
||||
$Cards/CardDetectiveWrapper/CardInner/VBox/NameLabel.text = UIStrings.get_text("character_select.detective_card_name")
|
||||
$Cards/CardDetectiveWrapper/CardInner/VBox/RoleLabel.text = UIStrings.get_text("character_select.detective_card_role")
|
||||
$Cards/CardDetectiveWrapper/CardInner/VBox/ToneLabel.text = UIStrings.get_text("character_select.detective_card_tone")
|
||||
|
||||
_confirm_btn.pressed.connect(_on_confirm)
|
||||
_smuggler_wrapper.gui_input.connect(_on_card_input.bind(0))
|
||||
_detective_wrapper.gui_input.connect(_on_card_input.bind(1))
|
||||
|
||||
_update_card_visuals()
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if not visible:
|
||||
return
|
||||
if event is InputEventKey and event.pressed and not event.is_echo():
|
||||
match event.keycode:
|
||||
KEY_LEFT:
|
||||
_selected_index = 0
|
||||
_update_card_visuals()
|
||||
get_viewport().set_input_as_handled()
|
||||
KEY_RIGHT:
|
||||
_selected_index = 1
|
||||
_update_card_visuals()
|
||||
get_viewport().set_input_as_handled()
|
||||
KEY_ENTER, KEY_KP_ENTER:
|
||||
_on_confirm()
|
||||
get_viewport().set_input_as_handled()
|
||||
KEY_ESCAPE:
|
||||
archetype_cancelled.emit()
|
||||
get_viewport().set_input_as_handled()
|
||||
|
||||
|
||||
func _on_card_input(event: InputEvent, card_index: int) -> void:
|
||||
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
|
||||
_selected_index = card_index
|
||||
_update_card_visuals()
|
||||
|
||||
|
||||
func _on_confirm() -> void:
|
||||
archetype_confirmed.emit(ARCHETYPES[_selected_index])
|
||||
|
||||
|
||||
func _update_card_visuals() -> void:
|
||||
_set_card_selected(_smuggler_wrapper, _selected_index == 0)
|
||||
_set_card_selected(_detective_wrapper, _selected_index == 1)
|
||||
_confirm_btn.grab_focus()
|
||||
|
||||
|
||||
func _set_card_selected(wrapper: Control, selected: bool) -> void:
|
||||
var border: ColorRect = wrapper.get_node("CardBorder")
|
||||
var inner: ColorRect = wrapper.get_node("CardInner")
|
||||
border.color = CARD_BORDER_SELECTED if selected else CARD_BORDER_NORMAL
|
||||
inner.color = CARD_BG_SELECTED if selected else CARD_BG_NORMAL
|
||||
@@ -0,0 +1 @@
|
||||
uid://char_select_sr
|
||||
+37
-2
@@ -1,10 +1,12 @@
|
||||
extends Control
|
||||
## #258: Main menu — New Game / Continue / Load Game / Quit.
|
||||
## New Game: generates per-game save directory (D-085), starts game.
|
||||
## New Game: shows character select panel (D-085 save dir created after archetype chosen).
|
||||
## Continue: loads most recent save directory.
|
||||
## Load Game: shows sorted save list for manual selection (#257).
|
||||
## #588: Character archetype selection — panel shown between New Game click and game load.
|
||||
|
||||
const GAME_SCENE := "res://scenes/main.tscn"
|
||||
const CHARACTER_SELECT_SCENE := "res://scenes/character_select.tscn"
|
||||
|
||||
const BG_COLOR := Color(0.05, 0.05, 0.08, 1.0)
|
||||
const TITLE_COLOR := Color("#c8d0e0")
|
||||
@@ -23,6 +25,8 @@ const FONT_SIZE_BTN := 15
|
||||
@onready var _saves_list: VBoxContainer = $LoadGamePanel/VBox/SavesScroll/SavesList
|
||||
@onready var _load_back_btn: Button = $LoadGamePanel/VBox/BackBtn
|
||||
|
||||
var _char_select: Control = null # Instantiated on demand
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_new_game_btn.pressed.connect(_on_new_game)
|
||||
@@ -41,14 +45,45 @@ func _refresh_continue_state() -> void:
|
||||
|
||||
|
||||
func _on_new_game() -> void:
|
||||
GameState.pending_load_path = "" # clear stale load path from previous Load selection
|
||||
# #588: Show character select before creating the save directory.
|
||||
# ESC on character select cancels with no directory created.
|
||||
GameState.pending_load_path = ""
|
||||
_show_character_select()
|
||||
|
||||
|
||||
func _show_character_select() -> void:
|
||||
if _char_select != null and is_instance_valid(_char_select):
|
||||
_char_select.queue_free()
|
||||
var scene := load(CHARACTER_SELECT_SCENE) as PackedScene
|
||||
if scene == null:
|
||||
push_error("MainMenu: failed to load character_select.tscn")
|
||||
return
|
||||
_char_select = scene.instantiate()
|
||||
add_child(_char_select)
|
||||
_char_select.archetype_confirmed.connect(_on_archetype_confirmed)
|
||||
_char_select.archetype_cancelled.connect(_on_archetype_cancelled)
|
||||
|
||||
|
||||
func _on_archetype_confirmed(archetype: String) -> void:
|
||||
if _char_select != null and is_instance_valid(_char_select):
|
||||
_char_select.queue_free()
|
||||
_char_select = null
|
||||
# Set archetype before new_game() so SessionManager can persist it.
|
||||
GameState.character_archetype = archetype
|
||||
var game_id := SessionManager.new_game()
|
||||
if game_id.is_empty():
|
||||
push_error("MainMenu: new_game() failed to create save directory — cannot start")
|
||||
return
|
||||
SessionManager.save_character_archetype(game_id, archetype)
|
||||
get_tree().change_scene_to_file(GAME_SCENE)
|
||||
|
||||
|
||||
func _on_archetype_cancelled() -> void:
|
||||
if _char_select != null and is_instance_valid(_char_select):
|
||||
_char_select.queue_free()
|
||||
_char_select = null
|
||||
|
||||
|
||||
func _on_continue() -> void:
|
||||
GameState.pending_load_path = "" # clear stale load path from previous Load selection
|
||||
var saves := SessionManager.list_game_dirs()
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
extends Control
|
||||
## #592: News ticker — scrolling horizontal headline bar, active in The Last Shift zone.
|
||||
## Lives on UILayer (z-layer 7 per D-049). Not suppressed by insert_active (D-013):
|
||||
## the ticker is a real-world screen the player can see regardless of insert state.
|
||||
## Text scrolls left at SCROLL_SPEED px/sec. When current_ticker is null, hides.
|
||||
|
||||
const BG_COLOR := Color(0.05, 0.05, 0.07, 0.75)
|
||||
const TEXT_COLOR := Color(0.784, 0.816, 0.878, 1.0) # INSERT_COLOR_TEXT
|
||||
const FONT_SIZE := 13
|
||||
const SCROLL_SPEED := 60.0 # pixels per second
|
||||
const BAR_HEIGHT := 28
|
||||
|
||||
@onready var _label: Label = $TickerLabel
|
||||
|
||||
var _text: String = ""
|
||||
var _scroll_x: float = 0.0
|
||||
var _content_width: float = 0.0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
_label.add_theme_font_size_override("font_size", FONT_SIZE)
|
||||
_label.add_theme_color_override("font_color", TEXT_COLOR)
|
||||
visible = false
|
||||
|
||||
|
||||
func update_from_state() -> void:
|
||||
var ticker: Variant = GameState.current_snapshot.get("current_ticker")
|
||||
if ticker == null or not ticker is Dictionary:
|
||||
visible = false
|
||||
return
|
||||
var new_text: String = ticker.get("text", "")
|
||||
if new_text.is_empty():
|
||||
visible = false
|
||||
return
|
||||
if new_text != _text:
|
||||
_text = new_text
|
||||
_label.text = _text
|
||||
# Reset scroll to start from right edge on new headline.
|
||||
# Defer width read by one frame: get_minimum_size() returns stale
|
||||
# data if called before the layout pass that follows text assignment.
|
||||
_scroll_x = size.x
|
||||
_content_width = 0.0 # will be updated after layout in _process
|
||||
call_deferred("_update_content_width")
|
||||
visible = true
|
||||
|
||||
|
||||
func _update_content_width() -> void:
|
||||
_content_width = _label.get_minimum_size().x
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if not visible:
|
||||
return
|
||||
_scroll_x -= SCROLL_SPEED * delta
|
||||
# Restart from right edge when text has fully exited left.
|
||||
if _scroll_x + _content_width < 0.0:
|
||||
_scroll_x = size.x
|
||||
_label.position.x = _scroll_x
|
||||
@@ -0,0 +1 @@
|
||||
uid://news_ticker_sr
|
||||
@@ -0,0 +1,33 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://news_ticker_scene_sr"]
|
||||
|
||||
[ext_resource type="Script" path="res://ui/news_ticker.gd" id="1_newsticker"]
|
||||
|
||||
; #592: News ticker — scrolling headline bar. Lives on UILayer (z-layer 7).
|
||||
; Anchored top-left to top-right, 28px tall. Hidden when current_ticker is null.
|
||||
|
||||
[node name="NewsTicker" type="Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_left = 0.0
|
||||
anchor_top = 0.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.0
|
||||
offset_bottom = 28.0
|
||||
clip_contents = true
|
||||
script = ExtResource("1_newsticker")
|
||||
|
||||
[node name="TickerBg" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
color = Color(0.05, 0.05, 0.07, 0.75)
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="TickerLabel" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_top = 4.0
|
||||
offset_bottom = 24.0
|
||||
theme_override_font_sizes/font_size = 13
|
||||
theme_override_colors/font_color = Color(0.784, 0.816, 0.878, 1.0)
|
||||
text = ""
|
||||
@@ -81,7 +81,7 @@
|
||||
},
|
||||
"minItems": 1,
|
||||
"uniqueItems": true,
|
||||
"description": "D-035 structural tag: situations in which this monologue line is contextually appropriate. 15 v0.1 values (triangle_activated added Sprint 24). The engine selects using trigger; situation provides additional authoring context for filtering by the caller. NOTE: 'greeting' is not yet in server/src/content/line_pool.rs Situation enum."
|
||||
"description": "D-035 structural tag: situations in which this monologue line is contextually appropriate. 15 v0.1 values (triangle_activated added Sprint 24). The engine selects using trigger; situation provides additional authoring context for filtering by the caller. NOTE: 'greeting' and 'triangle_activated' are not yet in server/src/content/line_pool.rs Situation enum."
|
||||
},
|
||||
"trigger": {
|
||||
"type": "string",
|
||||
|
||||
+3
-3
@@ -447,7 +447,7 @@ lines:
|
||||
priority: 8
|
||||
tags: [npc, kael, investigation, evidence, analytical]
|
||||
|
||||
# --- Triangle Activation: Sera Venn / Torek Lintar (T2 informant-question) ---
|
||||
# --- Triangle Activation: Sera Venn / Torek Lintar (T2: Sera-Detective-Commission, D-087) ---
|
||||
# Fires post-TriangleActivated when player has LOS to Sera or Torek. One beat per line.
|
||||
# Beat 1: pattern recognition. Beat 2: deviation logged. Beat 3: hypothesis. Beat 4: inference. Beat 5: procedural next step.
|
||||
|
||||
@@ -480,7 +480,7 @@ lines:
|
||||
npc_in_los: true
|
||||
|
||||
- id: pc-detective_m_d_043
|
||||
text: "If she knows about the manifest discrepancy, why has she not reported it?"
|
||||
text: "Avoidance without cause. Either she does not know about the discrepancy, or she knows and has chosen silence."
|
||||
role: player_character
|
||||
access: [public]
|
||||
trust: surface
|
||||
@@ -494,7 +494,7 @@ lines:
|
||||
npc_in_los: true
|
||||
|
||||
- id: pc-detective_m_d_044
|
||||
text: "She is protecting something. Or someone. The distinction matters."
|
||||
text: "Possible explanations: fear, loyalty, complicity. Insufficient data to distinguish."
|
||||
role: player_character
|
||||
access: [public]
|
||||
trust: surface
|
||||
|
||||
+3
-3
@@ -374,9 +374,9 @@ lines:
|
||||
priority: 9
|
||||
tags: [npc, kael, contaminated-trust, friend-arc]
|
||||
|
||||
# --- Triangle Activation: Kael Davan (T1 hub-power) ---
|
||||
# --- Triangle Activation: Kael Davan (T1: Kael-Smuggler-Ring, D-087) ---
|
||||
# Fires post-TriangleActivated when player has LOS to Kael. One beat per line.
|
||||
# Beat 1: physical observation. Beat 2: rationalization. Beat 3: doubt. Beat 4: doubt breaks.
|
||||
# Beat 1: physical observation. Beat 2: rationalization. Beat 3: doubt. Beat 4: sensory confirmation. Beat 5: emotional break.
|
||||
|
||||
- id: pc-smuggler_m_s_036
|
||||
text: "Kael's in the main corridor. He doesn't usually come through here."
|
||||
@@ -435,7 +435,7 @@ lines:
|
||||
npc_in_los: true
|
||||
|
||||
- id: pc-smuggler_m_s_040
|
||||
text: "I don't know what I'm looking at. But I know Kael. And this isn't Kael."
|
||||
text: "I don't know what I'm seeing. But I know Kael. And this isn't Kael."
|
||||
role: player_character
|
||||
access: [public]
|
||||
trust: surface
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
-- Commonwealth Project Ticketing Database Schema
|
||||
-- Settled Reach Project Ticketing Database Schema
|
||||
-- Access via: python3 tooling/db/sqlite_connector.py <command>
|
||||
-- DO NOT use sqlite3 CLI (crashes in Claude Code due to std::bad_alloc bug)
|
||||
|
||||
|
||||
+3
-3
@@ -10,10 +10,10 @@ Cross-domain decisions live in one file with cross-reference notes in related fi
|
||||
|
||||
| File | Domain | Decisions |
|
||||
|------|--------|-----------|
|
||||
| [architecture.md](architecture.md) | Technical foundation | D-008, D-009, D-010, D-012, D-020, D-026, D-030, D-031, D-041, D-042, D-054, D-055, D-066, D-068, D-073, D-085, D-088, D-094, D-096, D-097, D-099, D-100, D-101, D-102, D-103, D-106, D-108, D-109 |
|
||||
| [architecture.md](architecture.md) | Technical foundation | D-008, D-009, D-010, D-012, D-020, D-026, D-030, D-031, D-041, D-042, D-054, D-055, D-066, D-068, D-073, D-085, D-088, D-094, D-096, D-097, D-099, D-100, D-101, D-102, D-103, D-106, D-108, D-109, D-113, D-133, D-134, D-135, D-136, D-137 |
|
||||
| [perception.md](perception.md) | Player observation | D-011, D-015, D-016, D-017, D-018, D-019, D-033, D-035, D-043, D-044, D-045, D-046, D-047, D-048, D-049, D-052, D-056, D-057, D-058, D-059, D-060, D-061, D-067, D-069, D-070, D-071, D-072, D-076, D-077, D-078, D-086 |
|
||||
| [content.md](content.md) | NPC, dialogue, templates | D-023, D-024, D-025, D-028, D-029, D-032, D-034, D-035, D-036, D-037, D-050, D-062, D-063, D-064, D-074, D-075, D-084, D-090, D-092, D-093, D-095, D-098, D-104, D-105, D-107 |
|
||||
| [scope.md](scope.md) | Game concept, prototype | D-001, D-003, D-005, D-006, D-007, D-013, D-014, D-027, D-038, D-039, D-051, D-053, D-065, D-087, D-089, D-091 |
|
||||
| [content.md](content.md) | NPC, dialogue, templates | D-023, D-024, D-025, D-028, D-029, D-032, D-034, D-035, D-036, D-037, D-050, D-062, D-063, D-064, D-074, D-075, D-084, D-090, D-092, D-093, D-095, D-098, D-104, D-105, D-107, D-121, D-122, D-123, D-124, D-125, D-126, D-127, D-128, D-129, D-130, D-131, D-132 |
|
||||
| [scope.md](scope.md) | Game concept, prototype | D-001, D-003, D-005, D-006, D-007, D-013, D-014, D-027, D-038, D-039, D-051, D-053, D-065, D-087, D-089, D-091, D-114, D-115, D-116, D-117, D-118, D-119, D-120 |
|
||||
| [process.md](process.md) | Team, workflow | D-004, D-021, D-022, D-040 |
|
||||
| [questions.md](questions.md) | Open questions (index) | Q-001 through Q-054 |
|
||||
| [questions-architecture.md](questions-architecture.md) | Technical questions | Q-001, Q-006, Q-009, Q-018–Q-023, Q-029, Q-030, Q-046 |
|
||||
|
||||
+111
-1
@@ -374,4 +374,114 @@ Technical foundation decisions that constrain implementation: engine, client-ser
|
||||
|
||||
---
|
||||
|
||||
*32 decisions. Last updated: 2026-02-28 (D-108 amended Sprint 22 — Idle state as stationary installation primitive note added, D-111 cross-reference added)*
|
||||
### D-113: Tile data model — extensible per-tile properties
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** Replace the current single-character tile encoding (`F/W/V/R` strings in location YAML) with a **tile palette/registry** system (option A from the design space). Tiles are typed by a palette ID; per-type properties are defined once in the palette and inherited by all tiles of that type. Per-tile overrides are supported via a sparse overlay map.
|
||||
- **Current state:** Tiles are single characters in string arrays. Each character maps to a `TileKind` enum (`Floor`, `Wall`, `Door`, `Object`) and a walkability bool. `TileCell` in `WalkabilityMap` stores `{ walkable: bool, kind: TileKind }`. No per-tile properties (material, visual variant, sound, access lists, container contents, damage state, trigger zones) can be expressed.
|
||||
- **Design survey — what systems need tile-level data:**
|
||||
1. **Doors** — access lists (who can open), open/closed state, locked/unlocked. Currently no tile-level door data; `TileKind::Door` exists but carries no properties.
|
||||
2. **Containers** — contents, capacity, searched state. Currently handled by entity `ObjectType::Container` on separate entities, not tiles. Containers should remain entities, not tile properties.
|
||||
3. **Damage state** — `DamageOverlay` (D-100) modifies tiles post-generation. Damage needs to degrade tile properties (walkability, visual, material) without replacing the base tile type.
|
||||
4. **Visual variants** — same logical tile type (e.g., "industrial floor") with per-tile visual variation for visual richness. Currently impossible — all Floor tiles look identical to the client.
|
||||
5. **Trigger zones** — tile-level triggers for entry/exit events (zone transitions, alarms, dialogue triggers). Currently handled by `ZoneMap` at zone granularity, not per-tile.
|
||||
6. **Material properties** — footstep sound, movement speed modifier, surface type for particle effects. Currently all tiles produce the same footstep sound.
|
||||
7. **WallBackside** (D-099) — structural classification behind wall surfaces. Already defined as an enum but not yet integrated into tile data.
|
||||
- **Chosen approach — Tile Palette + Sparse Override:**
|
||||
- **Tile palette** (YAML, per-district or global): defines tile types by string ID. Each type specifies: `walkable: bool`, `kind: TileKind`, `material: String` (footstep/SFX), `visual_base: String` (client sprite), `visual_variants: u8` (random variant count), `los_blocking: bool`, `movement_cost: f32` (default 1.0), optional `wall_backside: WallBackside` (D-099). The palette is the type-level contract — most tiles need no per-instance data beyond their palette ID.
|
||||
- **Tile map** (YAML): retains the string-array format for human readability, but each character is a palette key (single char or short code). Backward-compatible: `F`, `W`, `V`, `R` are reserved palette keys that map to current behavior. New tile types use additional characters or a separate palette layer.
|
||||
- **Sparse override map** (YAML): `overrides` key on Location — a list of `{ x, y, properties }` entries for tiles that differ from their palette type. Supports: door access lists, initial locked state, visual variant pinning, damage overlay data. Only tiles with non-default properties need entries. Keeps the string map clean for 90%+ of tiles.
|
||||
- **Runtime representation:**
|
||||
- `TilePalette` resource: `BTreeMap<char, TileType>` loaded at startup. Immutable after load.
|
||||
- `TileCell` extended: `{ palette_id: char, walkable: bool, kind: TileKind, material_id: u16 }`. Material ID is a compact index into the palette's material table.
|
||||
- `TileOverrideMap` resource: `BTreeMap<(i32, i32, i32), TileOverride>` for per-tile overrides. Sparse — only tiles with overrides consume memory.
|
||||
- ECS queries: `WalkabilityMap` remains the primary interface for movement/pathfinding (unchanged API). `TilePalette` provides material/visual data when needed (snapshot construction, sound system). `TileOverrideMap` provides door state, access lists, damage overlays.
|
||||
- **YAML authoring format:**
|
||||
```yaml
|
||||
# Palette definition (loaded once, reusable across locations)
|
||||
palette:
|
||||
F: { walkable: true, kind: Floor, material: metal-grate, visual_base: floor_industrial }
|
||||
W: { walkable: false, kind: Wall, material: bulkhead, visual_base: wall_heavy, los_blocking: true }
|
||||
D: { walkable: true, kind: Door, material: metal-door, visual_base: door_standard }
|
||||
G: { walkable: true, kind: Floor, material: glass-panel, visual_base: floor_glass }
|
||||
R: { walkable: false, kind: Floor, material: metal-grate, visual_base: floor_restricted }
|
||||
|
||||
# Location tile map (unchanged human-readable format)
|
||||
tiles:
|
||||
- "WWWWWWWWWWWWWW"
|
||||
- "WFFFFDFFFFFFFW"
|
||||
- "WFFFFFFFFFFGFW"
|
||||
- "WWWWWWWWWWWWWW"
|
||||
|
||||
# Per-tile overrides (sparse, only for non-default properties)
|
||||
overrides:
|
||||
- { x: 5, y: 1, door_access: [faction.commission], locked: true }
|
||||
- { x: 12, y: 2, visual_variant: 3 }
|
||||
```
|
||||
- **Loader contract:** `ContentPlugin` loads palette YAML first, then location tiles. The `apply_location_tiles()` function resolves each character via palette lookup instead of the current hardcoded match. Unknown characters fall back to `Floor` with a warning (same as current behavior). Overrides are loaded after tiles and applied to `TileOverrideMap`.
|
||||
- **Migration effort for existing locations (5 files):**
|
||||
- **Zero-migration path:** The default palette defines `F/W/V/R` with identical behavior to current hardcoded mapping. Existing location YAMLs work unchanged. No migration required for v0.1.
|
||||
- **Incremental enrichment:** Locations can opt into the new palette by adding a `palette:` key. Locations without `palette:` use the global default. Migration is per-location, at author pace.
|
||||
- **Estimated effort:** Palette definition = 0.5 day. Loader refactor = 1-2 days. Override system = 1 day. Total: 2-4 developer-days. No changes to location YAML files required for v0.1.
|
||||
- **Alternatives considered:**
|
||||
- **(b) Per-tile property bags** (arbitrary key-value per tile): Maximum flexibility but violates D-010 principle 4 (deterministic — dynamic typing makes serialization non-deterministic). Memory cost: ~100 bytes/tile vs ~6 bytes/tile with palette. Rejected.
|
||||
- **(c) ECS-style tile components** (tiles as entities): Each tile becomes a bevy_ecs entity with optional components. Elegant in theory but 150x150x3 = 67,500 entities per location, potentially 4M+ entities for a district. ECS entity overhead (~128 bytes each) makes this prohibitively expensive. Queries scale poorly at this count. Rejected for spatial data; tiles remain grid-based. Entities are reserved for interactive objects placed ON tiles.
|
||||
- **(d) Hybrid (palette + entity overlay):** Palette for base tiles, entities for interactive tile features (doors, containers, triggers). This is *almost* what we chose — the distinction is that our sparse override map is grid-indexed (O(1) lookup by position) rather than entity-query based. Interactive objects that have their own behavior (NPCs, containers, items) remain entities; tile properties that are spatial/static (material, visual variant, access) are grid data.
|
||||
- **Key design principles:**
|
||||
- Palette is the type; override is the instance. 90%+ of tiles need only a palette ID.
|
||||
- String-array tile maps remain human-readable and merge-friendly. No JSON, no complex nested structures.
|
||||
- `WalkabilityMap` API is unchanged — callers don't know about palettes.
|
||||
- BTreeMap for deterministic iteration per D-010 principle 4.
|
||||
- Palette keys are `char` (single Unicode codepoint) for direct mapping from tile string arrays.
|
||||
- **Raised by:** Tyre (architecture), requested by #586 (Epic: extensible tile data model).
|
||||
- **Dissent:** None anticipated — this is a design-only D-record for post-v0.1 implementation.
|
||||
- **Cross-reference:** D-054 (tile-based movement), D-066 (dual-scale grid), D-094 (spatial hierarchy), D-099 (WallBackside classification), D-100 (DamageOverlay), D-012 (chunk architecture)
|
||||
|
||||
---
|
||||
|
||||
### D-133: Skills affect outcome — same verbs available, skill determines quality
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The skills-to-verb coupling model is: everyone sees the same verbs (mostly). Skills determine how well you execute — bad at social means you can still talk, just badly. Some advanced verbs may still be gated by skill level, but the default is outcome-based, not access-based. This is the simplest learnable model: try anything, skill determines result.
|
||||
- **Rationale:** Verb access gating (skill gates whether you can even attempt an action) creates invisible walls and punishes players for trying. Outcome-based (skill determines quality of result) lets players learn by doing and creates organic differentiation. A tycoon with low social can still negotiate — they just negotiate poorly, which produces interesting consequences.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 5
|
||||
- **Raised by:** Team Leader (Jeroen) — outcome model (option C)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-120](scope.md#d-120-no-skill-ceiling-in-v02--transhumanist-ladder-deferred) (no skill ceiling in v0.2)
|
||||
|
||||
### D-134: Full character customization — hair, clothing, colors at tile scale
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** Full character appearance customization is in scope: hair, clothing, colors. Readability at top-down tile scale is solved through outline and highlight mechanics, not by limiting customization options. The character creation screen is an emotional investment moment — the player should feel this is their character.
|
||||
- **Rationale:** Customization at this scale was assumed to be a readability risk. The workshop decision: solve the readability problem rather than limit the player. Readability via outline/highlight is a solved problem in the tile rendering pipeline. Limiting customization would undermine the identity investment that makes life-sim attachment possible.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 11
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
|
||||
### D-135: Setting delivery via both layers — visual world + insert in parallel
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** Setting is delivered through two parallel layers: (1) the physical world — visuals and NPC behavior show context, atmosphere, place; (2) the neural insert — names, contextualizes, provides information the character would know from their background. Araminta (visual layer) and Mellanie (insert copy layer) work in parallel. Both layers are required from day one of the tycoon bookmark experience.
|
||||
- **Rationale:** Either layer alone is insufficient. Visuals without naming leave the player in a beautiful void with no cultural foothold. Naming without visuals produces an exposition dump. Both together produce the "this is a place" sensation the workshop identified as the missing ingredient of v0.1.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 12
|
||||
- **Raised by:** Team Leader (Jeroen) — both layered (option C)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-128](content.md#d-128-culture-implicit-in-starting-location--krenn-system-equals-krenn-culture) (culture as context for insert copy)
|
||||
|
||||
### D-136: First Settled Reach moment — auto-generated apartment + insert activation
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The first moment of The Settled Reach is two layered beats: (1) Waking up in YOUR auto-generated apartment (reflects your economic position from the tycoon bookmark; wealthy, modest, or constrained start matters). (2) Insert activation — the neural implant powering on is intimate, personal, tech-specific. The alarm clock is the Groundhog Day homage ([D-126](content.md#d-126-groundhog-day-alarm-clock-homage--first-game-day-only)). The apartment reflects the character's economic position — auto-generated, not hand-built.
|
||||
- **Rationale:** The apartment establishes place, economic status, and self without exposition. Insert activation establishes the neural lattice as intimate and personal — this is your character's relationship with their technology. Both beats together create the "this is MY character in MY world" moment that v0.1 lacked.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 13
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-126](content.md#d-126-groundhog-day-alarm-clock-homage--first-game-day-only) (alarm clock tone), [D-135](#d-135-setting-delivery-via-both-layers--visual-world--insert-in-parallel) (both layers active from first moment)
|
||||
|
||||
### D-137: Generator produces both structural and cosmetic variety at different scales
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The generator must produce two types of variety simultaneously at different scales: (1) Structural variety — operates at seed level: different playthroughs have genuinely different world structures (economic landscape, faction power balance, crisis composition, NPC role distribution). (2) Cosmetic variety — operates within a structure: NPC names, faces, apartment layouts vary per instance. Structural variety is the higher-priority proof for the Sprint 25 spike ([D-119](scope.md#d-119-generator-spike-confirmed-for-sprint-25--critical-path)).
|
||||
- **Rationale:** Cosmetic variety without structural variety produces "same game with different wallpaper." Structural variety without cosmetic variety produces identical-looking characters with different internal states. Both are load-bearing for the life-sim experience — structural variety drives replay value, cosmetic variety drives in-session believability.
|
||||
- **Source:** Where's the Fun? Workshop, Round 5 Interview, Decision 23
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-114](scope.md#d-114-v02-proof-of-life--generator--graphics-not-hand-built-slice) (generator proof-of-life), [D-119](scope.md#d-119-generator-spike-confirmed-for-sprint-25--critical-path) (Sprint 25 generator spike)
|
||||
|
||||
---
|
||||
|
||||
*38 decisions. Last updated: 2026-03-05 (D-133–D-137 added — Where's the Fun? Workshop)*
|
||||
|
||||
+117
-2
@@ -10,6 +10,7 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
- **Rationale:** A galaxy-spanning game needs content architecture that scales without hand-crafting everything. The life-sim substrate creates attachment that gives conspiracies emotional weight. Pool-based Tier 1 modules enable replayability and DLC expansion.
|
||||
- **Raised by:** Team Leader (Jeroen), with full team endorsement across 3 rounds
|
||||
- **Dissent:** None
|
||||
- **Amendment (2026-03-05, Where's the Fun? Workshop):** Tier 1 "authored drama modules" concept is deferred for v0.2. [D-114](scope.md#d-114-v02-proof-of-life--generator--graphics-not-hand-built-slice) (generator-first proof-of-life) and [D-127](#d-127-player-choices-are-the-content--rimworld-model-job-as-rails) (player choices are the content) establish that v0.2 ships zero authored drama modules. The three-tier architecture remains valid for the full game, but the Tier 1 pool is empty by design in v0.2 — generator-first validates Tier 2 and Tier 3 before Tier 1 modules are authored. Tier 1 will be authored after the generator spike (D-119) proves legible characters and readable relationships.
|
||||
|
||||
### D-024: NPC generation model — 10 axes + combat component
|
||||
- **Date:** 2026-02-10
|
||||
@@ -17,6 +18,7 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
- **Rationale:** Axes that create contradictions within NPCs produce player decisions. The 5 key interactions (Want×Secret, Routine×Secret, Tolerance×Relationships, Want×Relationships, Personality×Tolerance) drive the full investigation-and-social gameplay loop. Contentment axis (proposed by Gore) connects generated NPCs to the thematic spine. Combat as component follows the same pattern as perception modes ([D-017](perception.md#d-017-perception-modes-as-character-build-system)).
|
||||
- **Raised by:** Gestalt (consolidation), Gore (contentment axis), Paula (triangle model), Tyre (combat component). Full team endorsed.
|
||||
- **Dissent:** None
|
||||
- **Amendment (2026-03-05, Where's the Fun? Workshop):** The 10-axis model and core generation logic survive. However, [D-122](#d-122-all-npcs-generated--no-named-hand-authored-characters) (all NPCs generated) removes all named hand-authored NPCs from v0.2. Named NPCs and hand-authored triangles are now generator outputs, not authored content. The 10 axes apply to all generated NPCs. The `NpcBlueprint` struct (Tyre prerequisite for D-119 generator spike) must encode these axes as generator output format. Cultural/origin template (previously called "generation-time flavor") is now the primary driver per [D-128](#d-128-culture-implicit-in-starting-location--krenn-system-equals-krenn-culture) and [D-121](#d-121-voice-is-culture-driven--job-as-modifier).
|
||||
|
||||
### D-025: Social site / functional cluster as atomic template unit
|
||||
- **Date:** 2026-02-10
|
||||
@@ -31,6 +33,7 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
- **Rationale:** All four layers are load-bearing — each enriches the previous ones. Tagged pools avoid combinatorial explosion while trait modifiers produce character variety. The generation pass (write 10, generate 40) scales authored content. Every memorable line needs a human hand; the generation pass fills the background.
|
||||
- **Raised by:** Mellanie (authoring model), Paula (relational layers), Gestalt (axis-to-pipeline mapping), Tyre (previewer feasibility)
|
||||
- **Dissent:** None on model. Minor ordering difference: Mellanie front-loads access tiers (structural), Paula front-loads relationship history (narrative). Both sequences work.
|
||||
- **Amendment (2026-03-05, Where's the Fun? Workshop):** The tagged line pool architecture survives for authored content, but the v0.2 NPC content pipeline pivots to AI-assisted templating. [D-123](#d-123-generative-ai-for-npc-content-templating-via-culture-vectors) (generative AI for NPC content) replaces the hand-authoring model for NPC dialogue pools. The four relational layers remain valid as a selection architecture, but pools will be populated by template assembly (culture vectors + job modifiers + AI generation) rather than hand-authoring. Hand-authored content (anchor lines per D-092, player monologue) remains hand-authored.
|
||||
|
||||
### D-029: Population entanglement ratio — 30/50/20
|
||||
- **Date:** 2026-02-10
|
||||
@@ -39,9 +42,11 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
- **Rationale:** If every NPC is suspicious, investigation collapses. The mundane triangles ARE the life-sim game — hours of play that never touch conspiracy. Variable entanglement rate defeats metagaming across playthroughs. Quiet life must feel genuinely good, not empty.
|
||||
- **Raised by:** Gore (thematic), Paula (30/50/20 split), Nigel (anti-metagaming), Team Leader (majority unentangled)
|
||||
- **Dissent:** None
|
||||
- **Amendment (2026-03-05, Where's the Fun? Workshop):** The 30/50/20 population split rationale survives but implementation context changes. [D-122](#d-122-all-npcs-generated--no-named-hand-authored-characters) (all NPCs generated) means no NPC is hand-authored. The "entangled 20%" are generated NPCs whose triangles happen to be flagged for intrigue content. For the tycoon v0.2 bookmark ([D-117](scope.md#d-117-tycoon-is-the-v02-bookmark--zero-investigation-content)), the split applies to economic, social, and mundane triangles rather than investigation-intrigue triangles. The specific ratios will be revisited after the generator spike ([D-119](scope.md#d-119-generator-spike-confirmed-for-sprint-25--critical-path)) proves what population density the generator can sustain.
|
||||
|
||||
### D-032: Separate monologue pools per character
|
||||
### D-032: Separate monologue pools per character [SUPERSEDED]
|
||||
- **Date:** 2026-02-11
|
||||
- **Superseded by:** [D-117](scope.md#d-117-tycoon-is-the-v02-bookmark--zero-investigation-content) (single tycoon character in v0.2 eliminates the smuggler/detective hard partition). The principle of character-specific monologue pools survives — the tycoon has their own monologue pool. The hard partition between smuggler and detective does not apply when there is only one playable character. Per [D-127](#d-127-player-choices-are-the-content--rimworld-model-job-as-rails), the player's monologue reflects their character background. The partition design is preserved as a pattern for when multiple playable characters are reintroduced.
|
||||
- **Decision:** Internal monologue content is hard-partitioned by playable character. The smuggler and detective have completely separate monologue pools — no shared lines. The `character` tag on monologue lines is a hard partition, not a filter. File structure uses separate files per character per location (e.g., `monologue-smuggler.yaml`, `monologue-detective.yaml`).
|
||||
- **Rationale:** Shared monologue would dilute character voice and undermine the dual-lens experience. Each character's internal voice must be independently coherent. Same trigger, different pool — this is how mirror moments work without either pool knowing about the other.
|
||||
- **Cross-reference:** Dialogue lines remain character-agnostic — the access tier system (D-028 Layer 1) handles per-character filtering without separate pools.
|
||||
@@ -58,6 +63,7 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
- **Cross-reference:** NPC triangle model ([D-024](#d-024-npc-generation-model--10-axes--combat-component)), relationship web ([D-029](#d-029-population-entanglement-ratio--305020)), vertical slice criteria ([D-027](scope.md#d-027-vertical-slice--smuggler--detective-two-character-proof))
|
||||
- **Raised by:** Ozzie (emotional concept, Round 1), Paula (structural design and both FRIEND profiles, Round 2), project lead (confirmed, directive #4). Sera Venn confirmed by project lead over Mellanie's alternative proposal (Lera Sessik).
|
||||
- **Dissent:** Mellanie proposed Lera Sessik (bar owner) as detective's FRIEND. Project lead selected Paula's Sera Venn design. Lera remains bar owner / mundane triangle member.
|
||||
- **Amendment (2026-03-05, Where's the Fun? Workshop):** The FRIEND pattern (3+ relationship phases, observable contradiction, sympathetic motivation, no clean resolution, tell progression, dual-lens resonance) survives as a generator template for v0.2. Kael Davan and Sera Venn do not exist — [D-122](#d-122-all-npcs-generated--no-named-hand-authored-characters) eliminates all named hand-authored NPCs. In v0.2, the FRIEND role is filled by a generated NPC whose generator profile matches the FRIEND pattern template. The FRIEND pattern is now a generator instruction set, not an authoring assignment. Workshop convergence note: warmth with generated NPCs is earned through observed relationship progression, not authored backstory — this may produce stronger emotional investment than the hand-authored approach (Paula, Mellanie in Where's the Fun? Workshop §Phase Zero).
|
||||
|
||||
### D-035: Converged tag taxonomy for dialogue and monologue line pools
|
||||
- **Date:** 2026-02-11
|
||||
@@ -84,6 +90,7 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
- **Dissent:** None. Minor consolidations: Mellanie's 8 moods mapped to Gestalt's 8 (different names, same concepts). Mellanie's `crime` topic deliberately excluded (NPCs think of it as `cargo` or `money`).
|
||||
- **Amendment (Sprint 8):** `focused` added as 9th mood (used in Kael dialogue at The Terminal and maintenance corridors). `greeting` added as 14th situation (used in PC dialogue pools for initial contact lines). Schema updated to match.
|
||||
- **Amendment (Sprint 14):** Mood vocabulary renamed to match voice guide (monologue-voice-guide.md). Old → new: `fond`→`warm`, `comfortable`→`content`, `worried`→`anxious`, `concerned`→`frustrated`. Dropped: `analytical` (merged into `focused`), `conflicted` (modeled as `suspicious`+`warm` collision). Added: `hostile`. Final 8 moods: `anxious`, `frustrated`, `content`, `suspicious`, `warm`, `hostile`, `relieved`, `focused`. Neutral = untagged.
|
||||
- **Amendment (Sprint 24):** `triangle_activated` added as 15th situation (fires post-TriangleActivated when player observes anchor NPCs). Two freeform tags registered as conventions: `triangle-signal` (line is part of the triangle activation sequence) and `tell-observation` (line observes a behavioral tell without naming its cause). `npc_in_los` prerequisite added for LOS-gated monologue lines. Schema updated to match.
|
||||
- **Amendment (Sprint 15):** Line ID namespace changed from location-scoped to NPC-scoped. Old scheme: `{location_slug}_{d|m}_{###}` (e.g., `the-terminal_d_039`) — all NPCs at a location share one ID sequence, requiring cross-file coordination and causing collisions at scale. New scheme: `{npc-slug}_{d|m}_{###}` for dialogue, `{npc-slug}_m_{s|d}_{###}` for monologue (e.g., `kael-davan_d_001`, `dock-worker_d_001`). Each NPC's IDs are independent — no cross-file coordination needed. Auto-generated NPCs use their generated slug. Schema regex patterns unchanged (prefix is still `^[a-z][a-z0-9-]*`), only the `description` field and convention documentation update. Migration: mechanical rename of all existing line IDs across ~20 dialogue files and monologue pools.
|
||||
|
||||
### D-036: Sova Transit District / Krenn System as v0.1 setting
|
||||
@@ -97,6 +104,7 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
- **Cross-reference:** Vertical slice ([D-027](scope.md#d-027-vertical-slice--smuggler--detective-two-character-proof)), contraband ([D-037](#d-037-contraband-specification))
|
||||
- **Raised by:** Miri (Sova setting brief, Round 1; Krenn System profile, Round 2), project lead (confirmed as worldbuilding milestone, directive #6)
|
||||
- **Dissent:** None
|
||||
- **Amendment (2026-03-05, Where's the Fun? Workshop):** Station Sova / Krenn System confirmed as the v0.2 setting. [D-128](#d-128-culture-implicit-in-starting-location--krenn-system-equals-krenn-culture) makes Krenn culture the cultural context for the tycoon bookmark — Krenn System IS Krenn culture by default. The setting details (naming conventions, atmosphere, sensory palette) survive as generator inputs and culture profile content. However, the Sova Transit District spatial layout (D-093) was designed for the v0.1 hand-built slice. v0.2 generates the location via the generator ([D-114](scope.md#d-114-v02-proof-of-life--generator--graphics-not-hand-built-slice)); the Krenn culture profile (Miri prerequisite for [D-119](scope.md#d-119-generator-spike-confirmed-for-sprint-25--critical-path)) captures the setting identity as generator inputs. Sova remains the canonical example system and the first culture profile to author.
|
||||
|
||||
### D-037: Contraband specification — unlicensed lattice components
|
||||
- **Date:** 2026-02-11
|
||||
@@ -287,4 +295,111 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
|
||||
---
|
||||
|
||||
*25 decisions. Last updated: 2026-02-27 (D-098, D-104, D-105, D-107 added — Generator Architecture Workshop #562)*
|
||||
### D-121: Voice is culture-driven — job as modifier
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** NPC voice is authored at the culture level with job-specific modifiers layered on top. Culture is primary — a character IS their background. Job adds a layer. A Krenn tycoon sounds like a Krenn person who runs businesses, not a generic tycoon. This is an inversion of the prior assumption that job drove voice with culture as modifier.
|
||||
- **Rationale:** Culture-primary voice produces characters that feel like they belong to a place. Job-primary voice produces archetypes. The life-sim vision requires characters legible as inhabitants of the Krenn System, not as representatives of occupational categories.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 6
|
||||
- **Raised by:** Team Leader (Jeroen) — inversion of Mellanie's prior option C
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-128](#d-128-culture-implicit-in-starting-location--krenn-system-equals-krenn-culture) (Krenn culture as starting context)
|
||||
|
||||
### D-122: All NPCs generated — no named hand-authored characters
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** All NPCs in v0.2 are generated. There are no named, hand-authored characters. Kael Davan, Naia, Maret, and Sera Venn do not exist in v0.2. The generator produces NPCs that fit positions based on location characteristics. Limited vocabulary is acceptable at first. The FRIEND pattern (D-034) survives as a generator template, not an authoring assignment.
|
||||
- **Rationale:** Rimworld and The Sims are capable of generating characters that players form attachments to, even without dialogue or backstory. The generator-first approach (D-114) requires proving this foundation before hand-authored characters are layered on. Named NPCs and fixed triangles were a source of the rigidity that made v0.1 feel like a game level, not a place.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 7
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Supersedes:** Named NPC assignments in [D-034](#d-034-the-friend--production-level-npc-pattern) (Kael/Sera as hand-authored characters — see amendment on D-034)
|
||||
- **Cross-reference:** [D-123](#d-123-generative-ai-for-npc-content-templating-via-culture-vectors) (AI templating), [D-129](#d-129-npc-personality-traits--behavior-first-relationships-codified-for-systems) (NPC personality model)
|
||||
|
||||
### D-123: Generative AI for NPC content templating via culture vectors
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** NPC content (dialogue pools, voice, vocabulary) is generated using generative AI with culture vectors, tone, and accent prompts as constraints. Culture vectors are the primary prompt constraint — they prevent the AI pipeline from defaulting to genre conventions. The AI pipeline is an authoring tool for content assembly, not a runtime system. Limited vocabulary acceptable at first; AI templating scales content as the generator matures.
|
||||
- **Rationale:** The copy pool for all-generated NPCs at scale is enormous. Generative AI with culture-vector constraints is the only viable path to populating it without hand-authoring every line. Culture profiles (Miri prerequisite) become the primary authoring deliverable feeding the pipeline.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 8
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-121](#d-121-voice-is-culture-driven--job-as-modifier) (culture-primary voice), [D-128](#d-128-culture-implicit-in-starting-location--krenn-system-equals-krenn-culture) (culture profile as generator input)
|
||||
|
||||
### D-124: In-game ollama for live NPC dialogue — deferred, door open
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** Running a dressed-down version of ollama in-game for live NPC dialogue is possible and interesting, but deferred. The door is explicitly left open — this is not a rejected alternative, it is a future investigation item. For v0.2, NPC dialogue uses template-assembled content (D-123). Live in-game AI dialogue is post-proof-of-life.
|
||||
- **Rationale:** Live AI dialogue requires solving NPC quality floor, performance, and determinism questions that are out of scope for the generator proof-of-life. Deferred until the base generator is proven solid.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 9
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
|
||||
### D-125: World is quietly responsive — gradient of caring by social proximity
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The world does not care globally but notices locally. Primary social contacts (colleagues, neighbors) develop responsiveness over time. The gradient of caring is based on social proximity — the world is neither Kenshi-indifferent nor uniformly caring. The player should never encounter a truly indifferent world; even early builds will have localized responsiveness around primary contacts. Gore's concern about indifference is addressed by design — authored content will layer in before v1.0.
|
||||
- **Rationale:** True indifference breaks the life-sim emotional loop. Characters can't form attachments to a world that doesn't register their existence. The gradient model (socially close = responsive, globally = neutral) reflects realistic social structure and produces the "quietly alive" feel the workshop converged on.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 10
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
|
||||
### D-126: Groundhog Day alarm clock homage — first game day only
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The first game day begins with an alarm clock that opens with the *click* pa-pa pa-pa opening from Groundhog Day, cut short. This happens on the first day of a new game only. The tone is a wink: "new day, new start, new chances." It sets the life-sim framing without exposition.
|
||||
- **Rationale:** A single tonal signal at game start establishes the day-cycle framing and communicates the game's tone — forward-moving, possibility-oriented, gently aware of its own conceits — without explicit explanation. First day only; repeating it would undermine the freshness.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 14
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None (legality of the reference to be verified)
|
||||
- **Cross-reference:** [D-136](architecture.md#d-136-first-settled-reach-moment-auto-generated-apartment--insert-activation) (first game moment design)
|
||||
|
||||
### D-127: Player choices are the content — Rimworld model, job as rails
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** Phase 1 of the game experience is not "an empty world before content arrives." It is "a world full of opportunity where the player's choices ARE the content." Rimworld model: one authored starting beat (the crash / the alarm clock + apartment wakeup), then agency and options. A job is rails to take off from, not a script to follow. The world provides opportunity and consequence; the player provides the story.
|
||||
- **Rationale:** The prior "no objectives" stance was a design stance, not a design solution. The Rimworld model is a design solution: curated starting beat, then genuine agency. Phase 1 is not empty — it is a full world of potential actions, economic choices, social encounters, and consequences. The player's story is the content.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 15
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
|
||||
### D-128: Culture implicit in starting location — Krenn System equals Krenn culture
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** Culture is implicit in the starting bookmark location. The tycoon bookmark in the Krenn System means Krenn culture. The player does not select culture at character creation; it derives from where the bookmark places them. This resolves the culture-everywhere-but-nowhere tension: culture IS in the game from day one, it's just not a character creation slider. The Krenn System provides the cultural context; NPC generation uses regional culture as the primary vector.
|
||||
- **Rationale:** Seven of nine workshop agents independently flagged the tension between D-115 (culture deferred from creation) and D-121 (culture primary for voice). Implicit culture unblocks five downstream pipelines simultaneously: voice cards (Mellanie), culture profiles (Miri), NpcBlueprint culture field (Tyre), cultural visual grammar (Araminta), systems integration (Gestalt).
|
||||
- **Source:** Where's the Fun? Workshop, Round 5 Interview, Decision 16
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-121](#d-121-voice-is-culture-driven--job-as-modifier) (culture-primary voice), [D-036](#d-036-sova-transit-district--krenn-system-as-v01-setting) (Krenn System canonical details)
|
||||
|
||||
### D-129: NPC personality — traits + behavior first, relationships codified for systems
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** NPC personality starts with traits and observable behavior. Relationships form through two channels: Sims-style accumulation through repeated interaction, and Rimworld-style bonding through shared adversity (surviving a crisis together, helping each other). The player's subjective feeling is the real metric, but relationships must be codified in the system so that game systems (storyteller, consequences, NPC behavior changes) can reference relationship state.
|
||||
- **Rationale:** All nine workshop agents identified NPC legibility as the universal gate. Generated NPCs must have sufficient personality surface area for emotional attachment. Without legible NPCs, the life-sim loop cannot fire. Codifying relationships for systems enables the storyteller to use them as triggers and the consequence model (D-132) to escalate through them.
|
||||
- **Source:** Where's the Fun? Workshop, Round 5 Interview, Decision 17 (resolves Q-WTF-034/035)
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-024](#d-024-npc-generation-model--10-axes--combat-component) (NPC axes — see amendment), [D-132](#d-132-dual-scale-consequence-model--rimworld-sharp-events-and-df-slow-accumulation) (consequence model)
|
||||
|
||||
### D-130: Fully emergent moral arc for v0.2 — generator proves relationships readable first
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** v0.2 ships a fully emergent moral arc — no authored arc structure. The tycoon bookmark has no pre-designed story arc. The explicit test before layering narrative depth: can the player tell "this is a relationship my character has" from generator output alone? Full flavor and generated content will be layered in later, but only after the relationship foundation is proven solid. This is a deliberate proof-of-concept sequence: generator proves relationships are readable → then add narrative depth.
|
||||
- **Rationale:** The full flavor and generated narrative content would get in the way of properly evaluating the generator's strength. The generator must be rock solid and usable before truly interesting threads are pulled. Fully emergent may feel artificial, but it is the right v0.2 test.
|
||||
- **Source:** Where's the Fun? Workshop, Round 5 Interview, Decision 18 (resolves Q-WTF-043)
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-129](#d-129-npc-personality--traits--behavior-first-relationships-codified-for-systems) (relationship legibility as test), [D-119](scope.md#d-119-generator-spike-confirmed-for-sprint-25--critical-path) (generator spike as prerequisite)
|
||||
|
||||
### D-131: Broad economic verb vocabulary — life verbs, not tycoon-specific
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The verb vocabulary is broad and economic, serving all careers, not tycoon-specific. Life verbs: buy, sell, hire, rent, contract, inspect, negotiate, invest. A detective also uses contracts (hiring informants, renting surveillance equipment). Implementation follows the speed of the interpreting systems — each verb requires its backing system (ownership registration for buy/sell, contract tracking for hire/rent). This is a life-sim verb set, not a job-specific verb set.
|
||||
- **Rationale:** Tycoon-specific verbs would lock the gameplay loop to one archetype. Broad economic verbs serve the life-sim vision where "detective, smuggler, tycoon are jobs you can have, not the game's identity" (workshop executive summary). The verb map is the mechanical expression of that philosophy.
|
||||
- **Source:** Where's the Fun? Workshop, Round 5 Interview, Decision 19 (resolves Q-WTF-027)
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
|
||||
### D-132: Dual-scale consequence model — Rimworld sharp events and DF slow accumulation
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The consequence model operates at two scales simultaneously. Rimworld-style sharp events (raids, crises, dramatic reversals) AND Dwarf Fortress-style slow accumulation (gradual relationship erosion, creeping debt, reputation shifts). Sharp events create drama; slow accumulation creates texture. Rimworld already manages both — sharp storyteller events on top of slow colony degradation. The Settled Reach follows the same dual-scale model.
|
||||
- **Rationale:** The dual-scale model produces both moment-to-moment drama and long-term narrative texture. A single-scale model either feels like it has no consequences (all slow) or like consequence happens arbitrarily (all sharp). Both are load-bearing.
|
||||
- **Source:** Where's the Fun? Workshop, Round 5 Interview, Decision 21 (resolves Q-WTF-037)
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-129](#d-129-npc-personality--traits--behavior-first-relationships-codified-for-systems) (relationships as consequence substrate)
|
||||
|
||||
---
|
||||
|
||||
*37 decisions. Last updated: 2026-03-05 (D-121–D-132 added; D-023, D-024, D-028, D-029, D-032, D-034, D-036 amended; D-032 superseded — Where's the Fun? Workshop)*
|
||||
|
||||
@@ -48,7 +48,8 @@ Narrative, NPCs, dialogue, templates, setting, worldbuilding, and storyteller me
|
||||
- **Source:** Wiki Review Workshop R2
|
||||
|
||||
### Q-033: Three-system NPC architecture
|
||||
- **Status:** Open
|
||||
- **Status:** Partially resolved — reframed by [D-122](content.md#d-122-all-npcs-generated--no-named-hand-authored-characters) (all NPCs generated)
|
||||
- **Reframe:** The 9-pattern x 6-motivation composition matrix may survive as a generator template taxonomy (the FRIEND pattern explicitly survives as a generator template per D-034 amendment). However, the question of whether it supersedes or extends D-024 is now secondary — both describe generator output format, not hand-authoring assignments. The NpcBlueprint struct (Tyre, Sprint 25 prerequisite) will determine how patterns and motivations are encoded. Full formal adoption of the 9x6 matrix remains open.
|
||||
- **Question:** Should NPCs be formally composed from 9 thematic patterns (FRIEND, MIRROR, ANCHOR, GHOST, CATALYST, THRESHOLD, REMNANT, SYSTEM, NOBODY) x 6 functional motivations (HANDLER, WITNESS, TURNCOAT, CIVILIAN, OPERATOR, SKEPTIC)? D-024 defines 10 axes + combat but predates this refined system. The wiki-review workshop produced a full composition matrix with drama ratings and forbidden combinations. Does this supersede D-024 or extend it?
|
||||
- **Assigned to:** Gestalt, Paula
|
||||
- **Source:** Wiki Review Workshop R4
|
||||
@@ -175,4 +176,4 @@ Narrative, NPCs, dialogue, templates, setting, worldbuilding, and storyteller me
|
||||
|
||||
---
|
||||
|
||||
*19 questions (5 resolved, 1 partially resolved, 13 open). Last updated: 2026-02-28.*
|
||||
*19 questions (5 resolved, 2 partially resolved, 12 open). Last updated: 2026-03-05 (Q-033 partially resolved/reframed — Where's the Fun? Workshop)*
|
||||
|
||||
@@ -10,7 +10,7 @@ Game concept, prototype boundaries, production pipeline, and feature decisions.
|
||||
|
||||
### Q-004: One campaign spanning all eras or separate era scenarios?
|
||||
- **Status:** Not yet discussed
|
||||
- **Context:** Gore raised that Commonwealth Era and Void Era play very differently. Prototype focuses on pre-Starflyer War era.
|
||||
- **Context:** Gore raised that different historical eras of the Settled Reach play very differently. Prototype focuses on a single era.
|
||||
- **Assigned to:** Gore, Miri to lead discussion
|
||||
|
||||
### Q-005: Scale for prototype - locations, characters, factions
|
||||
@@ -29,7 +29,9 @@ Game concept, prototype boundaries, production pipeline, and feature decisions.
|
||||
- **Assigned to:** Team Leader
|
||||
|
||||
### Q-011: Character selection and playable characters
|
||||
- **Status:** Not yet discussed
|
||||
- **Status:** Resolved → [D-117](scope.md#d-117-tycoon-is-the-v02-bookmark--zero-investigation-content), [D-115](scope.md#d-115-character-creation-scoped-to-skills--bookmark-for-v02), [D-122](content.md#d-122-all-npcs-generated--no-named-hand-authored-characters)
|
||||
- **Resolution:** v0.2 has one playable character type: the tycoon (small business owner starting state, D-118). One bookmark. All NPCs are generated — no canon named characters. Character creation is skills + bookmark only. The "how different are their starting positions?" question is answered by the small business owner economic variation (D-118: bar, logistics contract, storage franchise as starting configurations). The "canon characters vs original" question is answered by D-122: all NPCs generated, no canon characters exist in v0.2.
|
||||
- **Date resolved:** 2026-03-05 (Where's the Fun? Workshop)
|
||||
- **Question:** Which characters are playable in the prototype? How different are their starting positions? Can you play canon characters or only original ones?
|
||||
- **Assigned to:** Miri, Paula
|
||||
|
||||
@@ -51,7 +53,8 @@ Game concept, prototype boundaries, production pipeline, and feature decisions.
|
||||
- **Source:** Wiki Review Workshop R4, lead interview
|
||||
|
||||
### Q-034: PC archetypes
|
||||
- **Status:** Open
|
||||
- **Status:** Partially resolved → [D-117](scope.md#d-117-tycoon-is-the-v02-bookmark--zero-investigation-content) (v0.2 scope only: tycoon bookmark, zero investigation)
|
||||
- **Partial resolution:** v0.2 scope is settled — one bookmark (tycoon, small business owner start per D-118). Smuggler and detective are abandoned for v0.2. The full 8-archetype model, fluid archetype transitions, and "vulnerable window" mechanics remain undesigned for the full game. The "detective, smuggler, tycoon are jobs you can have, not the game's identity" framing (Where's the Fun? Workshop) is the guiding principle for future archetype design.
|
||||
- **Question:** Should the full game support 8 fluid PC archetypes (Smuggler, Detective, Engineer, Diplomat, Medic, Scholar, Soldier, Merchant) with transition mechanics where archetype shifts during play based on player behavior? The lead approved 8 archetypes with fluid transitions as a game mechanic. v0.1 ships smuggler + detective only (D-027). Full archetype spec, transition triggers, and "vulnerable window" mechanics are undesigned. NOTE: The character-creation-game-setup workshop (Q-011) will address this — coordinate.
|
||||
- **Assigned to:** Nigel, Gestalt
|
||||
- **Source:** Wiki Review Workshop R4, lead interview
|
||||
@@ -69,7 +72,8 @@ Game concept, prototype boundaries, production pipeline, and feature decisions.
|
||||
- **Source:** Wiki Review Workshop R4
|
||||
|
||||
### Q-037: Generator development pipeline
|
||||
- **Status:** Open
|
||||
- **Status:** Partially resolved → [D-119](scope.md#d-119-generator-spike-confirmed-for-sprint-25--critical-path) (Sprint 25 generator spike confirmed as first step)
|
||||
- **Partial resolution:** The first phase is confirmed — Sprint 25 generator spike. The 6-phase pipeline spec (Ingredient Authoring, Template Authoring, Generator Development, Validation Development, Generation + Review, Hand-Elevation) remains unformally adopted. Generator-first approach (D-114) and the confirmed Sprint 25 spike (D-119) define the immediate critical path. Full pipeline spec remains open pending post-spike assessment.
|
||||
- **Question:** Should content production follow a 6-phase generator pipeline (Ingredient Authoring, Template Authoring, Generator Development, Validation Development, Generation + Review, Hand-Elevation)? The wiki-review workshop proposed this as the production model for 300 worlds. SI mapped a release path (v0.1 hand-authored, v0.2-0.5 template expansion, v0.6-0.10 generator development, pre-v1.0 validation). Needs scope assessment and sprint planning integration.
|
||||
- **Assigned to:** SI, Tyre
|
||||
- **Source:** Wiki Review Workshop R4
|
||||
@@ -88,4 +92,4 @@ Game concept, prototype boundaries, production pipeline, and feature decisions.
|
||||
|
||||
---
|
||||
|
||||
*14 questions (0 resolved, 1 partially resolved, 13 open). Last updated: 2026-02-28.*
|
||||
*14 questions (1 resolved, 3 partially resolved, 10 open). Last updated: 2026-03-05 (Q-011 resolved, Q-034 and Q-037 partially resolved — Where's the Fun? Workshop)*
|
||||
|
||||
@@ -17,9 +17,11 @@ Tracked questions awaiting discussion or resolution. Split by domain, mirroring
|
||||
|--------|-------|----------|---------|------|
|
||||
| Architecture | 12 | 6 | 1 | 5 |
|
||||
| Perception | 9 | 5 | 1 | 3 |
|
||||
| Content | 19 | 5 | 1 | 13 |
|
||||
| Scope | 14 | 0 | 1 | 13 |
|
||||
| **Total** | **54** | **16** | **4** | **34** |
|
||||
| Content | 19 | 5 | 2 | 12 |
|
||||
| Scope | 14 | 1 | 3 | 10 |
|
||||
| **Total** | **54** | **17** | **7** | **30** |
|
||||
|
||||
*Updated 2026-03-05: Q-011 resolved (D-117/D-115/D-122), Q-034 partially resolved (D-117), Q-037 partially resolved (D-119), Q-033 partially resolved/reframed (D-122) — Where's the Fun? Workshop*
|
||||
|
||||
## Adding a Question
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Alternatives considered and rejected, with rationale preserved for future refere
|
||||
|
||||
### R-001: Stellaris mod
|
||||
- **Rejected:** 2026-02-08
|
||||
- **Reason:** Character system too shallow, multi-empire assumption conflicts with Commonwealth's single-civilization focus, wormhole-as-infrastructure not achievable within Stellaris modding. Team Leader's experience with Star Trek: New Horizons confirmed that even well-suited IPs struggle with character connection in Stellaris.
|
||||
- **Reason:** Character system too shallow, multi-empire assumption conflicts with the Settled Reach's single-civilization focus, wormhole-as-infrastructure not achievable within Stellaris modding. Team Leader's experience with Star Trek: New Horizons confirmed that even well-suited IPs struggle with character connection in Stellaris.
|
||||
|
||||
### R-002: CK3 total conversion
|
||||
- **Rejected:** 2026-02-08
|
||||
|
||||
+83
-14
@@ -7,21 +7,21 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
### D-001: Build a custom game, not a mod
|
||||
- **Date:** 2026-02-08
|
||||
- **Decision:** We are building a standalone game, not a Stellaris mod.
|
||||
- **Rationale:** No existing game provides the right combination of character-driven dynasty play, wormhole-centric space map, and deep internal politics that the Commonwealth universe demands. Stellaris gets the map right but characters wrong. CK3 gets characters right but the map wrong. Neither supports wormhole-as-infrastructure as a core mechanic.
|
||||
- **Rationale:** No existing game provides the right combination of character-driven dynasty play, wormhole-centric space map, and deep internal politics that the Settled Reach universe demands. Stellaris gets the map right but characters wrong. CK3 gets characters right but the map wrong. Neither supports wormhole-as-infrastructure as a core mechanic.
|
||||
- **Raised by:** Team Leader (Jeroen), after team debate across Rounds 1-3.
|
||||
- **Dissent:** None. Team unanimously supports after discussion.
|
||||
|
||||
### D-003: Commonwealth is the first campaign, not the only possible one
|
||||
### D-003: The Settled Reach is the first campaign, not the only possible one
|
||||
- **Date:** 2026-02-08
|
||||
- **Decision:** Build a character-driven space grand strategy *framework/engine*, with the Commonwealth universe as the first campaign/scenario.
|
||||
- **Rationale:** Avoids locking into one IP. The framework has broader value. The Commonwealth provides a rich, opinionated first use case that forces good design decisions.
|
||||
- **Decision:** Build a character-driven space grand strategy *framework/engine*, with the Settled Reach as the first campaign/scenario.
|
||||
- **Rationale:** Avoids locking into one IP. The framework has broader value. The Settled Reach provides a rich, opinionated first use case that forces good design decisions.
|
||||
- **Raised by:** Gore (Transhumanist Fan), endorsed by team.
|
||||
|
||||
### D-005: Core concept - single character, first-person, story-generator
|
||||
- **Date:** 2026-02-08
|
||||
- **Decision:** The game is a first-person, single-character experience. You select a character at game start and play from their perspective. The world is a rich simulation experienced through one person's keyhole view.
|
||||
- **Supersedes:** D-002 (dynasty grand strategy concept)
|
||||
- **Elevator pitch:** "Pick a character. Step into the Commonwealth. Figure it out."
|
||||
- **Elevator pitch:** "Pick a character. Step into the Settled Reach. Figure it out."
|
||||
- **Key pillars:**
|
||||
- **Single character selection** - who you pick determines where you start, what you know, what you can do, and what you care about
|
||||
- **Asymmetric information as core mechanic** - you only know what your character knows. Others lie, withhold, reveal. The same world-state looks completely different from different characters
|
||||
@@ -59,7 +59,7 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
|
||||
### D-013: Diegetic insert/POI navigation system
|
||||
- **Date:** 2026-02-09
|
||||
- **Decision:** The player's map interface is diegetic - it IS the character's neural insert (Commonwealth technology). Not a game UI bolted on, but the character literally checking their implant's navigation overlay. Points of interest appear on the map only when learned through gameplay.
|
||||
- **Decision:** The player's map interface is diegetic - it IS the character's neural insert (Settled Reach technology). Not a game UI bolted on, but the character literally checking their implant's navigation overlay. Points of interest appear on the map only when learned through gameplay.
|
||||
- **How POIs are learned:**
|
||||
- Character background (starting knowledge based on who you are)
|
||||
- NPC interactions (contacts send locations, tips, "meet me here" pins)
|
||||
@@ -71,8 +71,9 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
- **Cross-reference:** Perception mode overlay in [D-017](perception.md#d-017-perception-modes-as-character-build-system). Time display on insert in [D-031](architecture.md#d-031-time-system--game-clock-and-day-phases).
|
||||
- **Raised by:** Team Leader (Jeroen) proposed borderless + anchoring concept. Miri confirmed canon basis. Full team contributed mechanics.
|
||||
|
||||
### D-014: v0.1 map specification
|
||||
### D-014: v0.1 map specification [SUPERSEDED]
|
||||
- **Date:** 2026-02-09
|
||||
- **Superseded by:** [D-114](#d-114-v02-proof-of-life--generator--graphics-not-hand-built-slice) (generator-first proof-of-life replaces hand-built map spec; auto-generated locations at scale replace the hand-crafted tile map approach)
|
||||
- **Decision:** First playable tech demo map spec:
|
||||
|
||||
| Layer | Spec |
|
||||
@@ -93,8 +94,9 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
|
||||
- **Raised by:** Full team across Rounds 8-10.
|
||||
|
||||
### D-027: Vertical slice — smuggler + detective, two-character proof
|
||||
### D-027: Vertical slice — smuggler + detective, two-character proof [SUPERSEDED]
|
||||
- **Date:** 2026-02-10
|
||||
- **Superseded by:** [D-114](#d-114-v02-proof-of-life--generator--graphics-not-hand-built-slice) (generator-first proof-of-life) and [D-117](#d-117-tycoon-is-the-v02-bookmark--zero-investigation-content) (tycoon bookmark replaces smuggler + detective; zero investigation content for v0.2)
|
||||
- **Decision:** The proof-of-concept vertical slice is one station district containing: 1 workplace social site, 1 social venue (bar), 1 smuggling ring template, shared NPCs. Two playable characters: smuggler (logistics worker, insider access to criminal templates, social camouflage) and detective (institutional investigator, authority access, analytical). Success criteria: (1) 30 minutes of daily-life breathing room before contamination activates, (2) both playthroughs feel like fundamentally different games, (3) after each playthrough player names an NPC they felt conflicted about, (4) the observe→notice→follow→discover sequence emerges from systems not scripts.
|
||||
- **Supersedes:** [D-006](#d-006-prototype-scenario--institutearmstrongguardians-superseded)
|
||||
- **Rationale:** Smuggler + detective creates adversarial divergence — the detective's target IS the smuggler's daily life. Same templates, same NPCs, inverted relationships. Proves character-as-lens, contamination, life-sim attachment, and replayability simultaneously. Tyre confirms: ~20% more effort than single-character, no new architecture.
|
||||
@@ -121,8 +123,9 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
- **Raised by:** Ozzie (Round 1 minimum viable proposal, Round 2 full spec), project lead (confirmed, directives #3 and #9). Amendment raised by Inigo (hybrid approach), endorsed by Tyre.
|
||||
- **Dissent:** Mellanie and Araminta both proposed deferring audio; project lead overruled. Visual sound indicators remain complementary to audio (not replacement).
|
||||
|
||||
### D-039: v0.1 wow moment scope — all 6 moments
|
||||
### D-039: v0.1 wow moment scope — all 6 moments [SUPERSEDED]
|
||||
- **Date:** 2026-02-11
|
||||
- **Superseded by:** [D-127](content.md#d-127-player-choices-are-the-content--rimworld-model-job-as-rails) (emergent life-sim replaces detective-specific authored wow moments) and [D-136](architecture.md#d-136-first-settled-reach-moment-auto-generated-apartment--insert-activation) (new first moment: apartment + insert activation). The 6 wow moments were designed for the detective/smuggler frame. No detective-specific wow moments in v0.2.
|
||||
- **Decision:** All 6 wow moments identified by Ozzie are in v0.1 scope. The original 4 "essential" moments are promoted to must-have. The 2 "nice-to-have" moments are also promoted to must-have (project lead directive).
|
||||
- **The 6 wow moments (chronological in a 30-minute session):**
|
||||
1. **Arrival** (minute 0-1): Station hum playing, NPCs already moving, first monologue chime. "Where am I? This feels real." Content: opening monologue, station ambient, pre-populated routines.
|
||||
@@ -163,8 +166,9 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
- **Raised by:** Lead (stance toggle, final call), Gestalt (Walk/Sprint/Careful triad + perception coupling), Dudley (MovementProfile + tick values), Ozzie (perception gradient), Nigel (character-defining speed)
|
||||
- **Dissent:** None after lead call.
|
||||
|
||||
### D-065: Smuggler inventory — knowledge-primary with physical evidence
|
||||
### D-065: Smuggler inventory — knowledge-primary with physical evidence [SUPERSEDED]
|
||||
- **Date:** 2026-02-13
|
||||
- **Superseded by:** [D-117](#d-117-tycoon-is-the-v02-bookmark--zero-investigation-content) (no smuggler character in v0.2). The knowledge-primary inventory concept and physical evidence design survive as patterns for future character implementation.
|
||||
- **Decision:** Knowledge is the primary "inventory" for all characters (you SAW the manifest, not you HAVE it). The smuggler additionally gets a minimal physical inventory for v0.1: 3 specific items (manifest copy, corridor access token, personal comm log). Capacity per archetype: smuggler 3-4 slots, detective 2 slots. Carried items are PRIVATE — they exist behind the information boundary ([D-010](architecture.md#d-010-multiplayer-ready-architectural-baseline) principle 2) and are not visible to other entities unless revealed via search, scan, or confrontation. Server implementation: world entities with CarriedBy component. Verbs: Take, Place.
|
||||
- **Evidence presentation differs by archetype:** Detective sees case-file-style entries (structured: what/where/when/source/confidence, insert suggests links). Smuggler sees personal notebook (organized by person, informal voice, no contradiction flags). Same underlying knowledge graph, different presentation layer.
|
||||
- **v0.1 items (Paula):**
|
||||
@@ -178,8 +182,9 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
- **Raised by:** Lead (smuggler needs inventory), Paula (three items + presentation split), Gestalt (knowledge-primary framework), Tyre (minimal implementation: SmallVec<3>), Dudley (server model: BTreeMap + info boundary)
|
||||
- **Dissent:** Tyre initially argued zero physical items in v0.1 (saves 3-4 sprints). Adapted with minimal implementation after lead directive.
|
||||
|
||||
### D-087: v0.1 triangle configuration — 3 active forks, 2 passive tensions
|
||||
### D-087: v0.1 triangle configuration — 3 active forks, 2 passive tensions [SUPERSEDED]
|
||||
- **Date:** 2026-02-12
|
||||
- **Superseded by:** [D-122](content.md#d-122-all-npcs-generated--no-named-hand-authored-characters) (all NPCs generated; no named triangles with hand-authored characters) and [D-117](#d-117-tycoon-is-the-v02-bookmark--zero-investigation-content) (no investigation-specific triangle configuration for v0.2). Triangle generation follows the generator-first model (D-114).
|
||||
- **Decision:** v0.1 vertical slice uses 5 relationship triangles. Three are active forks (T1: Kael-Smuggler-Ring, T2: Sera-Detective-Commission, T4: Drin-System-Ring) with branching outcomes driven by player observation. Two are passive tensions (T3: Naia-Kael-Hael, T5: Worried Partner background) that provide atmosphere and secondary discovery paths. Active forks require authored content per branch. Passive tensions are system-driven.
|
||||
- **Rationale:** Three active forks are within v0.1 content authoring capacity. Passive tensions require no branching content — they enrich discovery space without multiplying authored lines.
|
||||
- **Raised by:** Gestalt, Paula
|
||||
@@ -187,8 +192,9 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
- **Source:** v0.1 Content Scoping Workshop, Round 2 synthesis
|
||||
- **Cross-reference:** D-027 (vertical slice), D-034 (THE FRIEND pattern)
|
||||
|
||||
### D-089: Self-contained triangle forks for v0.1, no cross-triangle cascade
|
||||
### D-089: Self-contained triangle forks for v0.1, no cross-triangle cascade [SUPERSEDED]
|
||||
- **Date:** 2026-02-12
|
||||
- **Superseded by:** [D-117](#d-117-tycoon-is-the-v02-bookmark--zero-investigation-content) and [D-122](content.md#d-122-all-npcs-generated--no-named-hand-authored-characters). No hand-authored triangle forks in v0.2; triangle generation follows the generator-first model. Cross-triangle cascade design is preserved as a future consideration once the generator proves relationships are readable.
|
||||
- **Decision:** In v0.1, each triangle fork resolves independently. No triangle outcome triggers escalation in another triangle. Cross-triangle cascade (storyteller-managed, where resolving T1 affects T2 pressure) is deferred to v0.2+. This keeps v0.1 content authoring manageable — each triangle is a self-contained narrative unit.
|
||||
- **Rationale:** Cross-triangle cascade requires the storyteller to track inter-triangle state and authors to write contingent branches. Both are out of scope for v0.1. Self-contained triangles can be authored, tested, and validated independently.
|
||||
- **Raised by:** Paula, Gestalt
|
||||
@@ -196,8 +202,9 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
- **Source:** v0.1 Content Scoping Workshop, Round 2 synthesis
|
||||
- **Cross-reference:** D-087 (triangle configuration), D-027 (vertical slice)
|
||||
|
||||
### D-091: Complicity as named thematic core
|
||||
### D-091: Complicity as named thematic core [SUPERSEDED]
|
||||
- **Date:** 2026-02-12
|
||||
- **Superseded by:** [D-132](content.md#d-132-dual-scale-consequence-model--rimworld-sharp-events-and-df-slow-accumulation) (consequence replaces complicity as the primary experiential frame — Gore's reframe, Where's the Fun? Workshop convergence). The detective/smuggler frame that gave "complicity" its specific meaning has been replaced by the life-sim frame (D-117). All careers produce consequence at dual scales; complicity was archetype-specific to the detective/smuggler lens.
|
||||
- **Decision:** The game's thematic identity is complicity — not conspiracy, not detection, not information asymmetry (which is the mechanical core per D-007). The player becomes complicit through observation: seeing something means choosing whether to act on it. The smuggler is complicit in the ring's operations. The detective is complicit in the institution's blindness. Both discover they are already entangled before they choose to be. This framing governs narrative design, wow moment emotional targets (D-039), and the Divergence Reveal (D-027 criterion 4).
|
||||
- **Rationale:** "Complicity" names the emotional experience that information asymmetry produces. It distinguishes this game from pure detective games (you uncover truth) and pure action games (you do things). Here: you watch, and the watching implicates you.
|
||||
- **Raised by:** Gore
|
||||
@@ -207,4 +214,66 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
|
||||
---
|
||||
|
||||
*17 decisions (15 active, 2 superseded). Last updated: 2026-02-12 (D-087, D-089, D-091 added — retroactive filings from v0.1 Content Scoping Workshop and Wiki Review Workshop)*
|
||||
### D-114: v0.2 proof-of-life — generator + graphics, not hand-built slice
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The v0.2 proof-of-life milestone is defined as: the generator producing usable output (auto-generated locations at scale with legible characters) plus better graphics. A hand-built vertical slice is explicitly NOT the proof-of-life. The v0.1 lesson: descoping toward a hand-built approach produced the wrong game. v0.2 must first prove the foundational generator can produce usable output, then build the game on top of that foundation.
|
||||
- **Rationale:** v0.1 was built as a detective puzzle game with hand-placed NPCs and dots for characters. The designer's vision is a single-character life sim. The generator-first approach prevents the same mistake — we prove the generative foundation works before committing to content on top of it.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 1
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Supersedes:** [D-027](#d-027-vertical-slice--smuggler--detective-two-character-proof-superseded) (hand-built vertical slice), [D-014](#d-014-v01-map-specification-superseded) (hand-built map spec)
|
||||
|
||||
### D-115: Character creation scoped to skills + bookmark for v0.2
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** v0.2 character creation is limited to two elements: skills (what the character is good at) and bookmark (which starting scenario/location the character inhabits). Family, culture, and religion are deferred from character creation. Culture is available in the game through the starting location (see [D-128](content.md#d-128-culture-implicit-in-starting-location--krenn-system-equals-krenn-culture)), not as a creation slider.
|
||||
- **Rationale:** Skills and bookmark are the minimum needed to differentiate playthroughs. Adding family/culture/religion at creation gates content that is better delivered through gameplay. Religion in particular is NOT a game system (D-116).
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 2
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-128](content.md#d-128-culture-implicit-in-starting-location--krenn-system-equals-krenn-culture) (culture implicit in location)
|
||||
|
||||
### D-116: Religion is not a game system
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** Religion is not a game system in The Settled Reach. It was mentioned as a reference point for the cultural richness of CK3, not as a design requirement. Religion is not a character creation axis, not a faction mechanic, not a dialogue filter, and not a storyline driver.
|
||||
- **Rationale:** The reference to religion in workshop discussions came from CK3 influence. The Settled Reach's mechanical identity is economic + social + information asymmetry, not religious politics. Excluding religion from game systems focuses design on the core mechanics.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 3
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
|
||||
### D-117: Tycoon is the v0.2 bookmark — zero investigation content
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The v0.2 bookmark is the tycoon — a small business owner in the Krenn System. v0.2 ships zero investigation content. The detective and smuggler framing from v0.1 is explicitly abandoned for v0.2. The tycoon naturally blends career models: active management, remote investment via insert (WFH model), and one-off deals (gig model). Investigation content will be revisited when the life-sim foundation is proven stable.
|
||||
- **Rationale:** v0.1's detective/smuggler frame produced the wrong game. The tycoon bookmark is thematically and mechanically richer: economic complicity, life-sim attachment loops, and narrative emergence from everyday decisions. Clean break from investigation content removes the frame that distorted v0.1.
|
||||
- **Source:** Where's the Fun? Workshop, Round 4 Interview, Decision 4
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
- **Supersedes:** [D-027](#d-027-vertical-slice--smuggler--detective-two-character-proof-superseded)
|
||||
|
||||
### D-118: Small business owner starting state — tycoon is aspiration, not starting position
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The tycoon bookmark begins as an existing small business owner, not a mogul. The player starts with a small operation (bar, logistics contract, storage franchise) and grows into a tycoon over time — or sells out and pivots to exploration. The bookmark name "tycoon" describes the aspiration and growth trajectory, not the starting state. A true tycoon starting position would be overpowered and would skip the interesting growth phase.
|
||||
- **Rationale:** Economic complicity and life-sim attachment require a character with something to lose and room to grow. Starting as a mogul eliminates the growth arc and removes economic stakes. The small business owner start grounds the player in a human-scale economic reality before scaling up.
|
||||
- **Source:** Where's the Fun? Workshop, Round 5 Interview, Decision 20
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
|
||||
### D-119: Generator spike confirmed for Sprint 25 — critical path
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** The Sprint 25 generator spike is the confirmed first deliverable. If the generator cannot produce usable output, nothing else matters. If it can, everything else has a foundation. The generator proof-of-life gates all subsequent v0.2 development. Sprint 25 prerequisites that must exist before or during the spike: zone identity spec (Miri), one culture profile for Krenn System / Station Sova (Miri), and NpcBlueprint struct design (Tyre). Estimated timeline (Tyre): 7 sprints to proof-of-life playtest (generated location + legible characters + tycoon bookmark from creation to Day 3).
|
||||
- **Rationale:** The v0.1 lesson established that building without a proven generator produces the wrong game. The sprint 25 spike tests whether the generator can produce auto-generated locations at scale with legible characters — the translation risk mitigation before anything else.
|
||||
- **Source:** Where's the Fun? Workshop, Round 5 Interview, Decision 22
|
||||
- **Raised by:** Tyre (proposal), Team Leader (confirmed)
|
||||
- **Dissent:** None
|
||||
- **Cross-reference:** [D-114](#d-114-v02-proof-of-life--generator--graphics-not-hand-built-slice) (generator-first proof-of-life)
|
||||
|
||||
### D-120: No skill ceiling in v0.2 — transhumanist ladder deferred
|
||||
- **Date:** 2026-03-05
|
||||
- **Decision:** Skills have no hard cap in v0.2. The transhumanist ladder (baseline human → Higher → ANA-connected) is a later design layer. v0.2 proves the life-sim loop without skill constraints. The `skill_ceiling` architectural field is preserved in the implementation but not enforced in gameplay until the base game loop is proven.
|
||||
- **Rationale:** Skill ceilings add complexity that is not load-bearing for the v0.2 proof-of-life. The life-sim loop must prove itself first. The transhumanist ladder is a rich design space but belongs in a later iteration when the foundational systems are stable.
|
||||
- **Source:** Where's the Fun? Workshop, Round 5 Interview, Decision 24
|
||||
- **Raised by:** Team Leader (Jeroen)
|
||||
- **Dissent:** None
|
||||
|
||||
---
|
||||
|
||||
*24 decisions (15 active, 9 superseded). Last updated: 2026-03-05 (D-114–D-120 added; D-014, D-027, D-039, D-065, D-087, D-089, D-091 superseded — Where's the Fun? Workshop)*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
## Executive Summary
|
||||
|
||||
The Godot 4 (renderer/client) + Rust (simulation server) architecture is **viable and well-suited** to Commonwealth's confirmed requirements (D-010 client-server, D-010 deterministic simulation, D-017 observer queries). The path has real friction points but no hard blockers. The primary risk is not technical capability but **integration complexity** and **ecosystem maturity of gdext**.
|
||||
The Godot 4 (renderer/client) + Rust (simulation server) architecture is **viable and well-suited** to the Settled Reach's confirmed requirements (D-010 client-server, D-010 deterministic simulation, D-017 observer queries). The path has real friction points but no hard blockers. The primary risk is not technical capability but **integration complexity** and **ecosystem maturity of gdext**.
|
||||
|
||||
| Area | Rating | Summary |
|
||||
|------|--------|---------|
|
||||
@@ -73,7 +73,7 @@ The `godot-rust/gdext` crate provides Rust bindings for Godot 4's GDExtension AP
|
||||
- **CI integration:** Straightforward. `cargo build --release` then copy artifact to Godot project. Can be a single Makefile/justfile target.
|
||||
- **No Godot rebuild required.** Godot loads the extension dynamically. You just rebuild the Rust library and restart the Godot editor.
|
||||
|
||||
### Verdict for Commonwealth
|
||||
### Verdict for the Settled Reach
|
||||
|
||||
gdext is **the right choice for the Godot-Rust bridge** given that we want Godot as the renderer and Rust as the simulation. The pre-1.0 status is a real cost (budget 1-2 days per quarter for API migration) but not a blocker. The threading model fits our architecture perfectly. The FFI performance is adequate if we use packed arrays for bulk state transfer.
|
||||
|
||||
@@ -103,7 +103,7 @@ You do NOT get (and do not need): Bevy's renderer, window management, asset syst
|
||||
bevy_ecs = "0.15" # or whatever current version is
|
||||
```
|
||||
|
||||
### Feature Assessment for Commonwealth
|
||||
### Feature Assessment for the Settled Reach
|
||||
|
||||
| Feature | Status | Notes |
|
||||
|---------|--------|-------|
|
||||
@@ -127,7 +127,7 @@ fn update_sound(query: Query<(&Position, &SoundEmitter)>, mut events: EventWrite
|
||||
|
||||
`move_entities` and `decay_fog` access disjoint component sets, so the scheduler runs them in parallel automatically. `update_sound` reads `Position` (shared) so it can run in parallel with `decay_fog` but must wait for `move_entities` to finish writing `Position`. This is all automatic.
|
||||
|
||||
For Commonwealth with potentially hundreds of NPCs, parallel perception queries, sound propagation, and AI decision-making, this is significant.
|
||||
For the Settled Reach with potentially hundreds of NPCs, parallel perception queries, sound propagation, and AI decision-making, this is significant.
|
||||
|
||||
### Determinism Concern
|
||||
|
||||
@@ -170,7 +170,7 @@ In case bevy_ecs proves problematic, here are the alternatives:
|
||||
|
||||
**Recommendation:** `bevy_ecs` is the clear winner. If we need something lighter for prototyping, `hecs` is a good fallback (we'd write our own simple sequential scheduler, which is fine for v0.1 with 15 NPCs). Do NOT use specs or legion for new projects.
|
||||
|
||||
### Verdict for Commonwealth
|
||||
### Verdict for the Settled Reach
|
||||
|
||||
bevy_ecs standalone is an excellent fit. It gives us the ECS architecture, automatic parallelism, change detection for observer queries, and cache-friendly memory layout. The determinism requirement is achievable with explicit system ordering.
|
||||
|
||||
@@ -373,7 +373,7 @@ Based on community reports and technical blog posts:
|
||||
|
||||
---
|
||||
|
||||
## 6. Recommendations for Commonwealth
|
||||
## 6. Recommendations for the Settled Reach
|
||||
|
||||
### Immediate Actions (v0.1 prototype)
|
||||
|
||||
@@ -476,6 +476,6 @@ Mapping back to confirmed decisions:
|
||||
|
||||
---
|
||||
|
||||
*This evaluation recommends proceeding with the Godot 4 + Rust (gdext + bevy_ecs) architecture for the Commonwealth prototype. The architecture is sound, the tools are viable, and the risk profile is manageable. The primary investment is in defining clean abstractions early -- particularly the SimBridge trait and ObserverSnapshot format -- so that the inevitable gdext API churn and future multiplayer addition don't require rewrites.*
|
||||
*This evaluation recommends proceeding with the Godot 4 + Rust (gdext + bevy_ecs) architecture for the Settled Reach prototype. The architecture is sound, the tools are viable, and the risk profile is manageable. The primary investment is in defining clean abstractions early -- particularly the SimBridge trait and ObserverSnapshot format -- so that the inevitable gdext API churn and future multiplayer addition don't require rewrites.*
|
||||
|
||||
*-- TYRE, Technical Architect*
|
||||
|
||||
@@ -53,7 +53,7 @@ GDExtension itself (Godot's native extension interface) has broken compatibility
|
||||
|
||||
The Godot project has stated an intent to stabilize GDExtension ABI, but as of the last documented state, it has NOT been stabilized. Every Godot minor version bump is a potential "stop work and fix bindings" event.
|
||||
|
||||
**Impact on this project:** The Commonwealth game will be in development for years. It will span multiple Godot versions. Each upgrade risks days to weeks of integration work, not on game features, but on making the bridge compile again.
|
||||
**Impact on this project:** The Settled Reach game will be in development for years. It will span multiple Godot versions. Each upgrade risks days to weeks of integration work, not on game features, but on making the bridge compile again.
|
||||
|
||||
**Mitigation:**
|
||||
- Stay on one Godot version for as long as possible. Do not upgrade Godot unless a specific feature is needed.
|
||||
|
||||
@@ -109,7 +109,7 @@ Reviewed all 40 confirmed decisions across 5 domain files. The decisions are **r
|
||||
|
||||
**Mild tension points (not contradictions):**
|
||||
|
||||
1. **D-003 vs current scope.** D-003 says "build a framework/engine, Commonwealth is the first campaign." But the NPC axes (D-024), contraband spec (D-037), and setting details (D-036) are deeply Commonwealth-specific. Fine for v0.1 — the "framework" claim should be understood as aspirational, not architectural.
|
||||
1. **D-003 vs current scope.** D-003 says "build a framework/engine, the Settled Reach is the first campaign." But the NPC axes (D-024), contraband spec (D-037), and setting details (D-036) are deeply Settled Reach-specific. Fine for v0.1 — the "framework" claim should be understood as aspirational, not architectural.
|
||||
2. **D-012 (chunk-based maps, future borderless) vs D-014 (bounded 150x150).** No contradiction, but chunk-based architecture is over-engineered for v0.1 scope (150x150 = ~25 chunks at 32x32). Investment justified by design principle.
|
||||
3. **D-009 (multiplayer-ready) cost estimate ("15-20% slower").** Unverifiable at this stage. With subprocess/IPC, multiplayer readiness is essentially free because the architecture IS client-server.
|
||||
|
||||
|
||||
Binary file not shown.
@@ -308,7 +308,7 @@ This is an institutional-oversight triangle, structurally different from the Ter
|
||||
|
||||
## Notes for Copy Team
|
||||
|
||||
1. **Aperture chamber is the in-world ritual.** Arriving via span gate is Commonwealth-mundane but the aperture ring has residual energy effects — ambient hum, slight color temperature shift as light normalizes from transit. Monologue lines for the detective's arrival should note this. Standard sensory detail for immersive-world arrivals.
|
||||
1. **Aperture chamber is the in-world ritual.** Arriving via span gate is mundane but the aperture ring has residual energy effects — ambient hum, slight color temperature shift as light normalizes from transit. Monologue lines for the detective's arrival should note this. Standard sensory detail for immersive-world arrivals.
|
||||
2. **The customs inequity is not dramatic.** When the senior freight handler is waved through, it should read as routine from NPC behavior — a nod, a scan confirmed, the lane opens. Overheard dialogue, if any, should be procedural: manifest check language, not conversational. The player learns that something is wrong from the pattern, not from a flagrant scene.
|
||||
3. **The Commission inspector's gallery is their professional comfort zone.** Dialogue set in the gallery (if the detective accesses it) should reflect this — the inspector is at ease up here, slightly less guarded. On the floor, they are performing authority. In the gallery, they are just watching.
|
||||
4. **The operations manager on the freight staging floor.** This is their element. Logistics language, shorthand with the senior freight handler. Any casual conversation with the detective here is the operations manager on home turf — helpful enough, not forthcoming.
|
||||
|
||||
@@ -30,7 +30,7 @@ D-024 defines the tell system axis on the NPC model. This spec identifies 5 tell
|
||||
| Tell category | Internal state | Primary Tier 2 behavior | Secondary behavior | Notes |
|
||||
|---------------|---------------|------------------------|-------------------|-------|
|
||||
| **Nervous** | Stress above tolerance threshold, concealment at risk | Movement hesitation + route checking | Proximity avoidance to specific zones | Most common for characters with active secrets |
|
||||
| **Angry** | High stress, contested relationship, tolerance reached | Accelerated/direct movement | Short dwell times | Anger in the Commonwealth is internalized — no outburst in public |
|
||||
| **Angry** | High stress, contested relationship, tolerance reached | Accelerated/direct movement | Short dwell times | Anger in the Settled Reach is internalized — no outburst in public |
|
||||
| **Friendly** (suppressed) | Wanting to interact but constrained | Lingering near character / zone | Approach-and-withdraw pattern | Friendly tell occurs when NPC wants contact but can't initiate |
|
||||
| **Guarded** | Protective of information or person | Proximity positioning | Route shielding | NPC places themselves between player and something/someone |
|
||||
| **Routine deviation** | Normal routine interrupted by higher priority | Unexpected location, unexpected timing | Unusual activity for current day phase | The broadest tell — anything outside the established pattern |
|
||||
@@ -128,7 +128,7 @@ These are the Tier 2 animation states that serve as tell expressions. Each behav
|
||||
|
||||
`●●` = primary expression, `●` = secondary expression, `—` = not used.
|
||||
|
||||
**Angry tell note:** Anger in the Commonwealth is internalized in public spaces. An angry NPC does not have an outburst. They move faster (shorter dwell times, quicker route execution), speak shorter sentences (Mellanie's domain), and avoid the person they are angry with if they can manage it. Avoidance is the primary behavioral tell. There is no raised fist or stamped foot. The station is a workplace; people here manage.
|
||||
**Angry tell note:** Anger in the Settled Reach is internalized in public spaces. An angry NPC does not have an outburst. They move faster (shorter dwell times, quicker route execution), speak shorter sentences (Mellanie's domain), and avoid the person they are angry with if they can manage it. Avoidance is the primary behavioral tell. There is no raised fist or stamped foot. The station is a workplace; people here manage.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Discussion Archive
|
||||
|
||||
Historical discussion rounds from the Commonwealth game design process.
|
||||
Historical discussion rounds from the Settled Reach game design process.
|
||||
|
||||
| Round | Topic | Key Decisions | File |
|
||||
|-------|-------|---------------|------|
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
# Sprint 25: Emerge — Copy Tasks
|
||||
|
||||
**Goal:** Prove the generator can extrapolate from minimal input — a rural Krenn area AND an industrial Krenn zone from zone type and culture profile alone, no per-location spec. Two zone types, one culture, side-by-side comparison.
|
||||
|
||||
**Branch:** `copy`
|
||||
**Agents:** Miri (worldbuilding lead), Mellanie (voice/dialogue review)
|
||||
|
||||
## New Tickets
|
||||
|
||||
| # | Title | Blocked by |
|
||||
|---|-------|------------|
|
||||
| #609 | Zone identity spec | #611 (server defines schema first) |
|
||||
| #610 | Krenn culture profile | #611 (server defines schema first) |
|
||||
|
||||
Use `tooling/db/ticket show <id>` for full details.
|
||||
|
||||
## Key Decisions
|
||||
|
||||
- `decisions/scope.md` — D-114 (generator-first proof-of-life), D-119 (generator spike critical path)
|
||||
- `decisions/content.md` — D-121 (voice is culture-driven, job as modifier), D-122 (all NPCs generated), D-128 (culture implicit in starting location), D-129 (NPC personality: traits + behavior first)
|
||||
- `decisions/architecture.md` — D-012 (chunk-based map, borderless generation future)
|
||||
|
||||
## Notes
|
||||
|
||||
**How this sprint works for copy**
|
||||
|
||||
Server starts first. Tyre (#611) defines `ZoneSpec`, `CultureProfile`, and `NpcBlueprint` as Rust structs and writes example YAML showing the expected format. That YAML is the schema contract. Copy fills real content into that schema — not the other way around.
|
||||
|
||||
Wait for #611 to deliver its example YAML before writing the real files. Coordinate with Tyre at sprint start to agree on file locations (`content/global/zone-identity-spec.yaml` and `content/global/culture-krenn.yaml` are the expected paths, but Tyre's struct design is authoritative).
|
||||
|
||||
**#609 — Zone identity spec**
|
||||
|
||||
- Output: YAML file the generator deserializes at runtime. Schema defined by Tyre's `ZoneSpec` struct from #611.
|
||||
- Minimum two zone types with real content: **rural** and **industrial**. These are the two the sprint proof runs. Remaining types can be stubs with plausible values.
|
||||
- The taxonomy must make the generator produce visibly different output per zone type — if rural and industrial look the same, it has failed.
|
||||
- Content scope: what varies between zone types (density, pace, social site mix, NPC role distribution). Not prose worldbuilding — structured parameters that the Rust generator can read.
|
||||
- Do not invent the schema. Read #611's example YAML first.
|
||||
|
||||
**#610 — Krenn culture profile**
|
||||
|
||||
- Output: YAML file the generator deserializes at runtime. Schema defined by Tyre's `CultureProfile` struct from #611.
|
||||
- Must provide enough cultural signal that generated NPCs feel Krenn, not generic-space-village.
|
||||
- Sprint scope: **name lists** (not phoneme generation rules — Tyre's generator picks from lists), speech markers, economic values, social norms.
|
||||
- Phoneme-based name generation is explicitly out of scope for this sprint. A curated list of Krenn-sounding names is sufficient.
|
||||
- Existing Krenn atmosphere and naming examples in `decisions/content.md` D-036 (amended post-workshop) are a starting point. Go deeper on concrete values (specific speech markers, actual name examples) not broader on atmospheric description.
|
||||
- Do not invent the schema. Read #611's example YAML first.
|
||||
|
||||
## Dependency Chain
|
||||
|
||||
```
|
||||
server #611 (schema contract) ──> #609 (zone spec YAML) ──┐
|
||||
├──> server #612 (generator)
|
||||
──> #610 (culture YAML) ───────┘
|
||||
```
|
||||
|
||||
Server defines the shape. Copy fills it. Both #609 and #610 can be written in parallel once #611 delivers its example YAML.
|
||||
|
||||
## PR Workflow
|
||||
|
||||
When ready to submit, create a PR with `tea` CLI. All flags are required to avoid TTY prompts (see CLAUDE.md "Gitea access" section):
|
||||
|
||||
```bash
|
||||
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(copy): zone identity spec and Krenn culture profile" --description "body" --base main --head copy
|
||||
```
|
||||
@@ -0,0 +1,100 @@
|
||||
# Sprint 25: Emerge — Joint
|
||||
|
||||
**Confidence: 15%.** This sprint is exploratory — we learn whether the approach works, not whether we can ship it. Declare what we learned, not victory.
|
||||
|
||||
**Goal:** Prove the generator can extrapolate from minimal input — a rural Krenn area AND an industrial Krenn zone from zone type and culture profile alone, no per-location spec. Two zone types, one culture, side-by-side comparison.
|
||||
|
||||
## Pre-Sprint
|
||||
|
||||
| Item | Owner | Blocks |
|
||||
|------|-------|--------|
|
||||
| Tyre shares example YAML schema from #611 with Miri | Tyre | #609, #610 |
|
||||
| Agree on file paths for zone spec and culture YAML | Tyre + Miri | #609, #610, #612 |
|
||||
|
||||
The critical coordination handoff: #611 defines the Rust structs and writes example YAML showing the schema. That YAML goes to Miri immediately. Copy fills the schema with real content. Server builds Phase 1 of #612 with hardcoded stubs in parallel — does not wait for copy.
|
||||
|
||||
## Sprint Completion Proof — Throwaway Render
|
||||
|
||||
**This is not a test suite. It is an eyeball test.**
|
||||
|
||||
**Commands:**
|
||||
```bash
|
||||
cargo run --bin generator-spike -- --zone rural --seed 42
|
||||
cargo run --bin generator-spike -- --zone industrial --seed 42
|
||||
cargo run --bin generator-spike -- --zone rural --seed 43
|
||||
```
|
||||
|
||||
**Expected output per invocation:**
|
||||
- Zone type and summary (block count, social site list)
|
||||
- NPC roster: name, role, 2-3 traits, one observable behavior
|
||||
- Relationship pairs: "A knows B as [type] ([valence])"
|
||||
|
||||
**Pass condition — three comparisons:**
|
||||
|
||||
Cross-type (rural vs industrial, seed 42):
|
||||
- Different output shape — social site mix, NPC role distribution, density all differ
|
||||
- Both feel Krenn — shared naming conventions and cultural markers
|
||||
- Zone taxonomy does visible work (outputs distinguishable by zone type alone)
|
||||
|
||||
Intra-type (rural seed 42 vs rural seed 43):
|
||||
- Both recognizably rural — same zone shape, similar role distribution
|
||||
- Different people — different names, traits, relationship pairs
|
||||
- Tests coherence within a type and variance across seeds
|
||||
|
||||
Culture (both zone types):
|
||||
- Culture profile does visible work — output feels Krenn, not generic space-village
|
||||
- NPC relationships are **readable** from text — not inferred, read
|
||||
|
||||
**Fail condition:**
|
||||
- Both outputs look the same with different labels (zone taxonomy not doing work)
|
||||
- Neither feels Krenn (culture profile not doing work)
|
||||
- NPC traits unreadable from text (D-129 legibility gate not met)
|
||||
|
||||
This sprint **discovers** the right spec — it does not implement a known one. If the output is light and not fully deep, that is expected. The proof is in the pudding: run it, read it, judge it.
|
||||
|
||||
## Tickets by Team
|
||||
|
||||
| Team | # | Title |
|
||||
|------|---|-------|
|
||||
| server | #611 | NpcBlueprint struct design |
|
||||
| copy | #609 | Zone identity spec |
|
||||
| copy | #610 | Krenn culture profile |
|
||||
| server | #612 | Template assembly generator (includes NPC pipeline + stdout output) |
|
||||
|
||||
## Dependency Chain
|
||||
|
||||
```
|
||||
#611 (structs + schema) ──> #609 (zone spec YAML) ──┐
|
||||
──> #610 (culture YAML) ──┴──> #612 Phase 2 (integrate real YAML)
|
||||
|
||||
#611 ──────────────────────────────────────────────────> #612 Phase 1 (hardcoded stubs, build in parallel)
|
||||
```
|
||||
|
||||
#611 first. #609 and #610 in parallel after schema arrives. #612 builds in two phases — Phase 1 with stubs runs alongside copy, Phase 2 integrates real YAML.
|
||||
|
||||
## Open Questions
|
||||
|
||||
| ID | Question | Blocking |
|
||||
|----|----------|---------|
|
||||
| Q-WTF-033 | AI templating: Claude API, local ollama, or manual for v0.2? | #623 (deferred) |
|
||||
| Q-WTF-039 | Character creation screen: portrait render or tile-scale preview? | Sprint 26+ |
|
||||
| Q-WTF-040 | Do creation choices trace into the generated apartment? | Sprint 26+ |
|
||||
|
||||
Q-WTF-033 does not block this sprint. Design #612 so AI templating slots in later without a rewrite — the culture profile's speech markers are already the prompt constraint structure.
|
||||
|
||||
## Deferred to Future Sprints
|
||||
|
||||
- Tycoon bookmark (#605, #614-617) — needs generator output proven first
|
||||
- Character creation screen (#606, #618-620) — client work, post-generator
|
||||
- NPC legibility systems (#607, #621-622) — downstream of generator
|
||||
- AI content templating (#623) — Q-WTF-033 unresolved
|
||||
- World feel systems (#608, #624-626) — downstream of everything
|
||||
- Visual rendering of generated world — out of scope for this spike
|
||||
|
||||
## What This Sprint Does NOT Do
|
||||
|
||||
- No client work (no rendering of generated content)
|
||||
- No new content beyond the zone spec and culture profile YAML files
|
||||
- No AI templating implementation (design for it, don't build it)
|
||||
- No playable session from the generated world
|
||||
- No ECS entity spawning into a running bevy world (#613 absorbed into #612 as stdout-only proof)
|
||||
@@ -0,0 +1,94 @@
|
||||
# Sprint 25: Emerge — Server Tasks
|
||||
|
||||
**Goal:** Prove the generator can extrapolate from minimal input — a rural Krenn area AND an industrial Krenn zone from zone type and culture profile alone, no per-location spec. Two zone types, one culture, side-by-side comparison.
|
||||
|
||||
**Branch:** `server`
|
||||
**Agents:** Dudley (simulation dev), Tyre (architect)
|
||||
|
||||
## New Tickets
|
||||
|
||||
| # | Title | Blocked by |
|
||||
|---|-------|------------|
|
||||
| #611 | NpcBlueprint struct design | — (starts immediately) |
|
||||
| #612 | Template assembly generator | #611, #609 (copy), #610 (copy) |
|
||||
|
||||
Use `tooling/db/ticket show <id>` for full details.
|
||||
|
||||
## Key Decisions
|
||||
|
||||
- `decisions/scope.md` — D-114 (generator-first proof-of-life), D-119 (generator spike critical path)
|
||||
- `decisions/content.md` — D-122 (all NPCs generated), D-128 (culture implicit in location), D-129 (NPC personality: traits + behavior first), D-121 (voice culture-driven), D-123 (AI content templating via culture vectors)
|
||||
- `decisions/architecture.md` — D-012 (chunk-based map, borderless generation future)
|
||||
|
||||
## What Exists
|
||||
|
||||
- **`server/src/simulation/generator.rs`** (576 lines) — `DistrictSkeleton` data model and related enums. Struct definitions only — no production generation logic yet.
|
||||
- **`server/src/npc/generate.rs`** — `RoleDefinition`-driven 10-axis NPC generator using `SimRng` (ChaCha20, deterministic). This pipeline survives; `NpcBlueprint` wraps above it and feeds into it.
|
||||
- **`server/src/simulation/rng.rs`** — `SimRng`. Use this for all randomness in the generator binary.
|
||||
- **`server/src/npc/`** — full NPC component set including `mood.rs`, `relationships.rs`, `routine.rs`, `trait_modifiers.rs`.
|
||||
|
||||
## Notes
|
||||
|
||||
**Phased approach**
|
||||
|
||||
This sprint discovers the right spec — it does not implement a known one. Three phases:
|
||||
|
||||
- **Phase 0 (#611):** Define the Rust structs (`ZoneSpec`, `CultureProfile`, `NpcBlueprint`) and write example YAML. Share with copy team immediately — this unblocks #609 and #610.
|
||||
- **Phase 1 (#612, early):** Build the generator binary with hardcoded test data. Do not wait for copy to finish their YAML. Hardcode two zone profiles (rural, industrial stub) and a Krenn culture stub in Rust. Get the generation pipeline and stdout output working end-to-end.
|
||||
- **Phase 2 (#612, late):** Swap hardcoded stubs for real YAML loading from disk. Wire in copy's actual #609 and #610 files. Run the two-zone proof.
|
||||
|
||||
This phasing means the copy team's blocking relationship is on the final integration, not the generator build. Server can move through Phase 0 and Phase 1 in parallel with copy writing #609/#610.
|
||||
|
||||
**#611 — NpcBlueprint struct design**
|
||||
|
||||
- Starts immediately. No blockers.
|
||||
- Define three structs in `server/src/npc/blueprint.rs` (new file):
|
||||
- `ZoneSpec` — deserializes from zone-identity-spec.yaml
|
||||
- `CultureProfile` — deserializes from culture-krenn.yaml
|
||||
- `NpcBlueprint` — generator output for a single NPC
|
||||
- All three derive `Serialize`, `Deserialize` (serde + serde_yaml).
|
||||
- `NpcBlueprint` fields: name (String), role (occupation), traits (Vec of trait enum), observable_behaviors (Vec<String>), cultural_markers (speech register, filler words from culture profile), relationships (Vec of (npc_id, relationship_type, valence)).
|
||||
- Use a spike-specific `SpikeOutput` struct for the binary's top-level output — do NOT couple to `DistrictSkeleton` for the proof. Keep the spike isolated.
|
||||
- Key deliverable: write `content/global/zone-identity-spec.example.yaml` and `content/global/culture-krenn.example.yaml` showing the schema copy must fill. Share these with Miri before copy starts writing real content.
|
||||
- Add a note in the file header pointing to the tickets (#609, #610) that fill these schemas with real content.
|
||||
|
||||
**#612 — Template assembly generator (absorbs #613)**
|
||||
|
||||
- Blocked by #611. Build Phase 1 before #609/#610 arrive; integrate in Phase 2.
|
||||
- Binary: `cargo run --bin generator-spike -- --zone <type> --seed <n>` (new binary in `server/src/bin/`).
|
||||
- Phase 1: hardcoded `ZoneSpec` and `CultureProfile` stubs in Rust. Focus on the generation logic and output formatting.
|
||||
- Phase 2: load zone spec and culture YAML from disk at runtime. Zone taxonomy is the file — adding a new zone type requires zero Rust changes.
|
||||
- Determinism: `SimRng` seeded from the `--seed` flag. Same inputs = same output.
|
||||
- NPC generation: use the existing `npc/generate.rs` pipeline. `NpcBlueprint` maps to `RoleDefinition` via a conversion method. The blueprint's cultural markers bias trait selection.
|
||||
- Stdout output per invocation: zone type header, NPC list (name, role, traits, one observable behavior), relationship pairs ("A knows B as colleague (positive)").
|
||||
- Sprint proof runs twice: `--zone rural --seed 42` and `--zone industrial --seed 42`. The comparison is the test.
|
||||
|
||||
## Dependency Chain
|
||||
|
||||
```
|
||||
#611 (structs + example YAML) ──> copy #609 (zone spec) ──┐
|
||||
──> copy #610 (culture) ──┴──> #612 (generator, Phase 2)
|
||||
#611 ──────────────────────────────────────────────────────────> #612 (generator, Phase 1 — no YAML needed)
|
||||
```
|
||||
|
||||
#611 first. Phase 1 of #612 runs in parallel with copy writing #609/#610. Phase 2 of #612 waits for both.
|
||||
|
||||
## Feasibility Warnings
|
||||
|
||||
From Troblum's pre-sprint review. Read before starting.
|
||||
|
||||
1. **`generate_npc()` requires a live bevy World.** The existing function in `npc/generate.rs` takes `TilePosition`, `StableId`, and a real `bevy_ecs::World`. The spike binary has none of these. Do not attempt to instantiate a full World for text output — stub or strip routine generation in Phase 1. Wire only the axes that produce inspectable output (traits, relationships, cultural markers). Full ECS wiring is deferred.
|
||||
|
||||
2. **Cultural text assembly is the real work of #612.** The existing generator produces enum variants and placeholder strings (`format!("{} has a {:?} secret", ...)`). There is no cultural text surface in the codebase today. Getting `CultureProfile` fields to appear in NPC output is a new code path — budget time for it, it is not a one-liner.
|
||||
|
||||
3. **`DayPhase` name collision.** `server/src/simulation/generator.rs` defines `DayPhase = String` as a stub type alias, shadowing the real `DayPhase` enum in `server/src/simulation/time.rs`. Use the real enum explicitly or alias the stub out of scope before the spike binary sees both. Do not let the collision silently compile to the wrong type.
|
||||
|
||||
4. **Schema negotiation takes rounds.** The first YAML draft from copy will not deserialize cleanly. Build in slack between Phase 1 and Phase 2 — expect at least one round of struct adjustments after seeing real content.
|
||||
|
||||
## PR Workflow
|
||||
|
||||
When ready to submit, create a PR with `tea` CLI. All flags are required to avoid TTY prompts (see CLAUDE.md "Gitea access" section):
|
||||
|
||||
```bash
|
||||
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(simulation): generator spike — NpcBlueprint, template assembly, NPC pipeline" --description "body" --base main --head server
|
||||
```
|
||||
@@ -51,20 +51,20 @@ I'm going to be blunt about each reference. What we take, what we leave, and why
|
||||
**Hotline Miami** — Top-down camera as terror engine.
|
||||
|
||||
- **What it gets RIGHT:** D-015 literally cites this game. The camera creates tension because you CAN'T see everything. Every room you enter is a potential death. The neon palette creates mood so strong you can FEEL it. Each floor is a spatial puzzle. The game proves that top-down can be viscerally intense when the camera is a limitation, not a superpower. The way it uses color to communicate emotional state (cool blues for calm, hot pinks for violence) is directly relevant to our relationship color system.
|
||||
- **What it gets WRONG for us:** WAY too fast. WAY too violent. The neon palette screams "1980s drug fever dream" — the Commonwealth is sleek, advanced, subtle. Hotline Miami's aesthetic is maximalist where ours must be restrained. The emotional register is adrenaline-and-horror where ours is unease-and-suspicion. Also, Hotline Miami has zero life-sim — there's no "quiet life is good" counterbalance.
|
||||
- **What it gets WRONG for us:** WAY too fast. WAY too violent. The neon palette screams "1980s drug fever dream" — the Settled Reach is sleek, advanced, subtle. Hotline Miami's aesthetic is maximalist where ours must be restrained. The emotional register is adrenaline-and-horror where ours is unease-and-suspicion. Also, Hotline Miami has zero life-sim — there's no "quiet life is good" counterbalance.
|
||||
- **What we take:** The principle that a locked top-down camera creates tension through information denial. The use of color palette as emotional register. The spatial puzzle of "I need to see around this corner."
|
||||
- **What we leave:** Everything about the aesthetic. The speed. The violence. The maximalism.
|
||||
|
||||
**Invisible Inc.** (Klei Entertainment, 2015) — Tactical stealth, fog of war, information management.
|
||||
|
||||
- **What it gets RIGHT:** The closest existing game to our intersection of stealth + information + top-down. The fog of war is sharp and readable. Peek mechanics let you see around corners — visual information as a resource you spend actions to gain. The UI layers tactical data (guard patrol paths, alarm status, hack progress) without overwhelming the game view. Klei's clean, comic-book art style is distinctive without fighting the information overlay. The visual language clearly distinguishes known, unknown, and suspected information.
|
||||
- **What it gets WRONG for us:** It's isometric, not top-down. It's turn-based, so information can be displayed statically — our real-time game needs information that reads at a GLANCE, not after deliberation. It's a heist game — the aesthetic is "cyberpunk spy thriller," too stylized and too genre-specific for the Commonwealth's sleek functionality. No life-sim component, no daily routines, no investment in place.
|
||||
- **What it gets WRONG for us:** It's isometric, not top-down. It's turn-based, so information can be displayed statically — our real-time game needs information that reads at a GLANCE, not after deliberation. It's a heist game — the aesthetic is "cyberpunk spy thriller," too stylized and too genre-specific for the Settled Reach's sleek functionality. No life-sim component, no daily routines, no investment in place.
|
||||
- **What we take:** The information-as-resource visual language. The layered UI that separates world state from tactical overlay. The proof that stealth + information management can be visually clear in a top-down format. The fog of war that communicates DEGREES of knowledge (seen, heard, suspected).
|
||||
- **What we leave:** The isometric perspective. The cyberpunk aesthetic. The turn-based visual pacing.
|
||||
|
||||
**Citizen Sleeper** (Jump Over the Age, 2022) — Space station life, quiet tension, daily routines.
|
||||
|
||||
- **What it gets RIGHT:** The MOOD. "Quiet life with undertow" is exactly our register. The visual design is clean, information-forward, atmospheric without being cluttered. The space station feels like a PLACE — different areas have different visual identities. The UI is elegant and minimal. The art (by Guillaume Singelin, also known for the Lancer TTRPG) uses bold shapes, limited palettes, and strong silhouettes. The color palette is muted with strategic warmth — exactly the Commonwealth tone. The way daily life feels meaningful and engaging despite being mechanically simple is what our life-sim substrate needs.
|
||||
- **What it gets RIGHT:** The MOOD. "Quiet life with undertow" is exactly our register. The visual design is clean, information-forward, atmospheric without being cluttered. The space station feels like a PLACE — different areas have different visual identities. The UI is elegant and minimal. The art (by Guillaume Singelin, also known for the Lancer TTRPG) uses bold shapes, limited palettes, and strong silhouettes. The color palette is muted with strategic warmth — exactly the Settled Reach tone. The way daily life feels meaningful and engaging despite being mechanically simple is what our life-sim substrate needs.
|
||||
- **What it gets WRONG for us:** It's a visual novel / narrative RPG with dice mechanics, not a spatial game. There's no movement, no sightlines, no fog, no spatial puzzles. The "station" is a menu, not a map. The gorgeous character portraits are irrelevant to our top-down perspective. The game has no observation mechanic — you learn things through dialogue choices, not by watching.
|
||||
- **What we take:** The mood. The color temperature. The "space station as home" feeling. The visual principle that muted palettes with strategic color accents communicate both comfort and unease. The proof that a space station setting can feel warm and human, not just cold and industrial.
|
||||
- **What we leave:** Everything about the presentation format. It's a different genre.
|
||||
@@ -95,7 +95,7 @@ I'm going to be blunt about each reference. What we take, what we leave, and why
|
||||
**The Expanse** (TV series, 2015-2022) — Best modern lived-in space station aesthetic.
|
||||
|
||||
- **What it gets RIGHT:** Medina Station, Tycho Station, Ceres — these feel like REAL PLACES where real people work and live. Different social zones look different: the bar district has different lighting than the docks. Institutional signage is everywhere. The stations show their age — repairs are visible, modifications are layered. The diversity of spaces (dive bars next to control rooms next to residential corridors) is exactly the spatial variety Sova needs. The visual language says "advanced civilization, working class, functional" — which is precisely our register.
|
||||
- **What it gets WRONG for us:** Too gritty. The Expanse is harder sci-fi — more resource-scarce, more political tension visible in the infrastructure. The Commonwealth is wealthier, more comfortable. Sova should feel like a well-maintained 40-year-old building, not a station on the edge of revolution. The Expanse's color palette tends toward industrial grey-brown, too desaturated for the warmth we need in social spaces.
|
||||
- **What it gets WRONG for us:** Too gritty. The Expanse is harder sci-fi — more resource-scarce, more political tension visible in the infrastructure. The Settled Reach is wealthier, more comfortable. Sova should feel like a well-maintained 40-year-old building, not a station on the edge of revolution. The Expanse's color palette tends toward industrial grey-brown, too desaturated for the warmth we need in social spaces.
|
||||
- **What we take:** The "different zones feel different" principle. Institutional signage as environmental storytelling. The visual language of repairs and modifications visible in walls and surfaces. The feeling that these are WORKPLACES first, sci-fi settings second.
|
||||
- **What we leave:** The grittiness. The scarcity aesthetic. The political tension written into the infrastructure.
|
||||
|
||||
@@ -109,7 +109,7 @@ I'm going to be blunt about each reference. What we take, what we leave, and why
|
||||
|
||||
**Syd Mead** — The godfather of "lived-in future" design.
|
||||
|
||||
- His work on Blade Runner, Aliens, and personal concept pieces shows technology as INFRASTRUCTURE, not decoration. Clean lines, functional surfaces, institutional colors. People USE his environments — they don't just pose in them. The Commonwealth's visual language should channel Syd Mead: advanced technology that serves human needs, not technology that exists to look futuristic.
|
||||
- His work on Blade Runner, Aliens, and personal concept pieces shows technology as INFRASTRUCTURE, not decoration. Clean lines, functional surfaces, institutional colors. People USE his environments — they don't just pose in them. The Settled Reach's visual language should channel Syd Mead: advanced technology that serves human needs, not technology that exists to look futuristic.
|
||||
- **What we take:** Technology as infrastructure. Clean lines. Functional surfaces. The principle that futuristic = well-designed, not flashy.
|
||||
|
||||
**Ron Cobb** — Designed the Nostromo interiors for Alien.
|
||||
@@ -191,7 +191,7 @@ This is Q-003. v0.1 is defined (boxes with labels, D-033 color system, no image
|
||||
|
||||
### My Recommendation: Clean 2D with Bold Silhouettes, Driven by Dynamic Lighting
|
||||
|
||||
**NOT pixel art.** Pixel art communicates "retro" and "indie." The Commonwealth is advanced. The aesthetic should feel contemporary, not nostalgic. Pixel art also fights with our information overlay — the diegetic insert, monologue text, and perception mode layers need clean visual separation from the game world, and pixel art's uniform texture density makes that harder.
|
||||
**NOT pixel art.** Pixel art communicates "retro" and "indie." The Settled Reach is advanced. The aesthetic should feel contemporary, not nostalgic. Pixel art also fights with our information overlay — the diegetic insert, monologue text, and perception mode layers need clean visual separation from the game world, and pixel art's uniform texture density makes that harder.
|
||||
|
||||
**NOT painted / Disco Elysium style.** Too detailed per frame, too expensive to produce consistently, and critically: too hard for AI image generation (Nano Banana / Gemini 2.5 Flash) to maintain style consistency across hundreds of assets. Disco Elysium's painterly beauty was hand-crafted by a small team of exceptional artists. We can't replicate that and shouldn't try.
|
||||
|
||||
@@ -453,7 +453,7 @@ This gradient communicates INFORMATION RELIABILITY visually. The player can glan
|
||||
**Three principles:**
|
||||
1. **Readability over beauty.** Rimworld's lesson: if you can't parse the game state in a glance, nothing else matters.
|
||||
2. **Lighting over detail.** The same room, differently lit, is a different room. Invest in the light system, not in texture detail.
|
||||
3. **Restraint IS the aesthetic.** The Commonwealth is advanced and subtle. Not flashy, not grim, not neon, not grimy. Clean lines. Muted palettes. Strategic warmth. The visual equivalent of a well-designed tool.
|
||||
3. **Restraint IS the aesthetic.** The Settled Reach is advanced and subtle. Not flashy, not grim, not neon, not grimy. Clean lines. Muted palettes. Strategic warmth. The visual equivalent of a well-designed tool.
|
||||
|
||||
**Long-term style target:** Clean 2D, bold silhouettes, lighting-driven atmosphere. Achievable in Godot 4's standard pipeline. Compatible with AI-generated asset workflow. Scales from boxes-with-labels to full art without changing the visual grammar.
|
||||
|
||||
|
||||
@@ -232,7 +232,7 @@ The bar is the best-maintained space because Lera cares about it. The terminal i
|
||||
The insert overlay should feel like a CONTACT LENS, not a HUD. It's something your character is wearing. It's always slightly there — a subtle shimmer at the edges of perception that becomes more prominent when you actively engage it.
|
||||
|
||||
- **Passive state:** Almost invisible. Maybe the faintest geometric grid at the very edge of the viewport. Just enough to remind you "you're augmented." Like how you stop noticing your glasses after a while.
|
||||
- **Active state (checking insert):** Clean geometric overlay. Thin lines. Small text. The aesthetic of medical equipment displays — precise, minimal, functional. NOT Iron Man holographics. NOT cyberpunk neon. The Commonwealth has technology so mature it doesn't need to show off.
|
||||
- **Active state (checking insert):** Clean geometric overlay. Thin lines. Small text. The aesthetic of medical equipment displays — precise, minimal, functional. NOT Iron Man holographics. NOT cyberpunk neon. The Settled Reach has technology so mature it doesn't need to show off.
|
||||
- **Color:** The insert should use a color that doesn't conflict with entity colors (D-033). I'd suggest a subtle cool white or very pale blue — neutral enough to overlay any scene without fighting the amber/green/red relationship colors.
|
||||
|
||||
### Perception mode overlay feel
|
||||
|
||||
@@ -257,11 +257,11 @@ References explicitly flagged as the wrong visual direction.
|
||||
| **Star Wars romantic visual language** | Miri | Operatic scale, good/evil coding. Our investigation requires visual ambiguity. Watch span gate visuals. |
|
||||
| **Mass Effect Citadel** | Miri | Gleaming future-city. Sova is a freight district, not a tourist destination. |
|
||||
| **Dead Space grimy horror** | Miri | Body-horror visual territory. Wrong emotional register entirely. |
|
||||
| **Pixel art style** | Araminta, Ozzie | Communicates "retro" and "indie." The Commonwealth is advanced. Fights information overlay readability. |
|
||||
| **Pixel art style** | Araminta, Ozzie | Communicates "retro" and "indie." The Settled Reach is advanced. Fights information overlay readability. |
|
||||
| **Painted / Disco Elysium production style** | Araminta | Too expensive per frame, too hard for AI pipeline consistency. (Note: DE's *principles* endorsed; its *production method* rejected.) |
|
||||
| **Photorealistic 3D rendered to 2D** | Araminta | Too expensive, too slow, uncanny valley risk at top-down scale. |
|
||||
| **Iron Man helmet display** | Araminta, Gore | Too dramatic, too military for neural insert overlay. |
|
||||
| **Hotline Miami neon maximalism** | Araminta, Ozzie | Adrenaline-and-horror register. Commonwealth is sleek, subtle. Wrong emotional register entirely. |
|
||||
| **Hotline Miami neon maximalism** | Araminta, Ozzie | Adrenaline-and-horror register. The Settled Reach is sleek, subtle. Wrong emotional register entirely. |
|
||||
| **Teleglitch lo-fi aesthetic** | Araminta | Deliberately ugly, relentlessly oppressive. We need comfort AND unease, not just unease. |
|
||||
| **Military tactical palette** | Araminta (re: XCOM, Door Kickers) | Combat-centric visual language. Our game has combat as punctuation, not the sentence. |
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ The bloom pass is the bridge: the data is precise, the RENDERING is soft. Like r
|
||||
|
||||
**The player experience test:** After 10 minutes of play, does the player forget the insert is there? If yes, we've succeeded. It should become like your own peripheral vision — invisible until something appears in it. The monologue chime (D-038) is the "hey, look at your insert" signal. Without the chime, the insert fades into perception. WITH the chime, your eyes snap to the overlay and the geometric precision is there, waiting, with the information you need.
|
||||
|
||||
Geometric = the insert is TRUSTWORTHY. The data is clean. This is technology that's been refined for centuries. It doesn't flicker. It doesn't glitch. It's as reliable as your own vision. That's Commonwealth tech — so mature it's invisible.
|
||||
Geometric = the insert is TRUSTWORTHY. The data is clean. This is technology that's been refined for centuries. It doesn't flicker. It doesn't glitch. It's as reliable as your own vision. That's Settled Reach tech — so mature it's invisible.
|
||||
|
||||
## OQ-02: Does the Visual Environment Shift When Conspiracy Activates?
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ Gore's proposed label for the converged art direction: **"functional warmth."**
|
||||
| Agent | Position | Key contribution |
|
||||
|---|---|---|
|
||||
| **Araminta** | Accepts synthesis. Geometric underneath, bloom on top. | Specific implementation: 2-3px gaussian blur at ~40% blend on the insert CanvasLayer. D-033 colors gain soft halos rather than hard edges — "amber feels like a vague sense of concern, not a data flag." |
|
||||
| **Ozzie** | Endorses. | Player experience test: "After 10 minutes, does the player forget the insert is there? If yes, we've succeeded." Geometric = trustworthy — Commonwealth tech so mature it's invisible. |
|
||||
| **Ozzie** | Endorses. | Player experience test: "After 10 minutes, does the player forget the insert is there? If yes, we've succeeded." Geometric = trustworthy — Settled Reach tech so mature it's invisible. |
|
||||
| **Miri** | Endorses. Setting-grounded. | Explains WHY both are simultaneously correct: data is computational (geometric), delivery is neural (organic). Brain receives precise data and renders it with biological softness. **New addition:** lattice overlay differs per character — smuggler's is thinner/sparser, detective's is denser/crisper (different hardware). |
|
||||
| **Gore** | Accepts. | "Araminta is right about the source, I was right about the experience." Test: if switching the overlay OFF would feel like going deaf rather than closing a window, it's working. |
|
||||
|
||||
|
||||
@@ -156,7 +156,7 @@ Inspired by Rimworld's pawn system: NPCs feel alive not because they're deep, bu
|
||||
| Axis | What It Does | Example |
|
||||
|------|-------------|---------|
|
||||
| **Personality traits** (2–3) | Drives behavior and dialogue selection | Cautious, gregarious, vindictive |
|
||||
| **Faction loyalty** | Determines allegiance and information access | Commonwealth loyalist / secretly compromised |
|
||||
| **Faction loyalty** | Determines allegiance and information access | Concord loyalist / secretly compromised |
|
||||
| **A secret or vulnerability** | Creates leverage and investigation targets | Gambling debt, undisclosed augmentation, past crime |
|
||||
| **A want** | Motivates actions the player can exploit or assist | Promotion, escape, revenge, money, love, stability |
|
||||
| **Relationships** (1–3) | Connects NPCs into webs | Owes a debt to X, romantically involved with Y, fears Z |
|
||||
|
||||
@@ -42,7 +42,7 @@ That's it. No style guide for art we haven't made. No font selection for UI that
|
||||
|
||||
### Proposed v0.1 Color Palette
|
||||
|
||||
The Commonwealth is sleek, advanced, subtle. Even at boxes-with-labels fidelity, we can communicate mood.
|
||||
The Settled Reach is sleek, advanced, subtle. Even at boxes-with-labels fidelity, we can communicate mood.
|
||||
|
||||
**Background/Environment:**
|
||||
- `#1a1a2e` - Deep navy. Base floor/ground. The station is dimly lit by default.
|
||||
@@ -330,7 +330,7 @@ Even if we have zero audio files in v0.1, the sound model works through these vi
|
||||
|
||||
**Audio direction for later:**
|
||||
I'd defer actual audio content entirely from v0.1. The visual indicator system proves the sound model mechanically. Adding audio is additive polish, not structural. When we do add audio:
|
||||
- Ambient: low drone, station hum, ventilation. The Commonwealth is a machine. It breathes.
|
||||
- Ambient: low drone, station hum, ventilation. The Settled Reach is a machine. It breathes.
|
||||
- Close range: footsteps on metal, door mechanisms, muffled conversation bleed.
|
||||
- No music in gameplay. Music in menus/loading only. The station's ambient sound IS the soundtrack.
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ This is the real question.
|
||||
For the 50th station to be exciting, the generator can't just be varying surface features. It has to be varying WHAT MATTERS.
|
||||
|
||||
What matters to me as a player:
|
||||
- **Who has power here** — and how it shows in the space. A station under Intersolar Commonwealth control looks and moves differently than one under de Terre influence. That's not just art. That's which doors are locked, which NPCs are nervous, where the cameras point.
|
||||
- **Who has power here** — and how it shows in the space. A station under Concord control looks and moves differently than one under de Terre influence. That's not just art. That's which doors are locked, which NPCs are nervous, where the cameras point.
|
||||
- **What happened here** — the environmental story. A district that used to be prosperous and isn't anymore. A market that's clearly improvised after something was destroyed. Spaces tell history. The generator needs inputs that make history legible.
|
||||
- **What's the social architecture** — where do the hierarchies show up physically? Where do the powerful people eat lunch? Where do the workers hide from supervisors? This makes stations feel like societies, not buildings.
|
||||
|
||||
|
||||
@@ -385,7 +385,7 @@ Auto-seeded from early decisions. Superseded by structured initiatives above. Re
|
||||
| ID | Title | Decision |
|
||||
|----|-------|----------|
|
||||
| 1 | Custom game, not a mod | D-001 |
|
||||
| 2 | Commonwealth as first campaign | D-003 |
|
||||
| 2 | The Settled Reach as first campaign | D-003 |
|
||||
| 3 | Single character first-person story generator | D-005 |
|
||||
| 4 | Prototype scenario — Institute/Armstrong City/Guardians | D-006 |
|
||||
| 5 | Five pillars of game design | D-007 |
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
# Interview Supplement — Round 4 Decisions
|
||||
## Where's the Fun? Workshop | 2026-03-05
|
||||
|
||||
The full Round 4 interview transcript is at docs/workshops/wheres-the-fun/round4-interview.md. This supplement highlights the 15 decisions locked and their implications.
|
||||
|
||||
---
|
||||
|
||||
## The 15 Decisions
|
||||
|
||||
### Proof-of-Life Scope
|
||||
|
||||
1. **Proof-of-life = generator + graphics, not hand-built slice.** The v0.1 lesson: descoping led to the wrong game. v0.2 proves the foundation (auto-generated locations at scale + legible characters) first, then builds the game on top. Similar reasoning to v0.1's narrow scope is explicitly rejected.
|
||||
|
||||
2. **Skills + bookmark only for character creation.** Family/culture/religion deferred.
|
||||
|
||||
3. **Religion is NOT a game system.** It was a CK3 reference point, not a design requirement. Remove from design scope.
|
||||
|
||||
4. **Tycoon is the v0.2 bookmark.** Zero investigation content. Clean break from detective/smuggler. Tycoon naturally blends Active (manage business), WFH (remote investments via insert), and Gig (one-off deals).
|
||||
|
||||
### Skills & Voice
|
||||
|
||||
5. **Skills affect outcome (mostly C).** Everyone sees the same verbs. Skills determine how well you do. Some advanced verbs may still be gated — spec needed for which ones.
|
||||
|
||||
6. **Voice: culture-driven, job modifies.** The character IS their background. Job adds a layer. Voice cards authored at the culture level with job-specific modifiers. A Krenn tycoon sounds like a Krenn person who runs businesses, not a generic tycoon. NOTE: this is inverted from "job sets base, culture modifies" — culture is primary.
|
||||
|
||||
### Content Architecture
|
||||
|
||||
7. **ALL NPCs are generated. No named characters.** Kael doesn't exist. The generator produces NPCs that fit positions based on location characteristics. A smuggling operation exists because the geography enables it; NPCs fill roles organically.
|
||||
|
||||
8. **Generative AI for NPC content templating.** Culture vectors, tone, accents as templating dimensions. Limited vocabulary acceptable at first. The copy pool will be enormous but AI-assisted.
|
||||
|
||||
9. **Possible in-game ollama for live NPC dialogue.** Deferred but the door is explicitly open. A dressed-down LLM running in-game for dynamic dialogue is on the table for later investigation.
|
||||
|
||||
10. **Quietly responsive world, not indifferent.** Gore's Kenshi-indifference premise rejected. The world doesn't care globally but notices locally. Primary social contacts (colleagues, neighbors) develop responsiveness over time. Gradient of caring based on social proximity. Even in early builds with test users, the world is never truly indifferent.
|
||||
|
||||
### Visual & Identity
|
||||
|
||||
11. **Full character customization.** Hair, clothing, colors. The creation screen is part of identity investment. Readability at tile scale solved through outline/highlight, not by limiting customization.
|
||||
|
||||
12. **Setting delivery: both layers.** World shows it through visuals and behavior; insert names and contextualizes. Araminta (visual) and Mellanie (insert copy) work in parallel.
|
||||
|
||||
13. **First Settled Reach moment: apartment + insert activation.** The apartment is auto-generated (reflects wealth, location, lifestyle). Then the insert powers on. Two intimate, personal moments before you leave the room.
|
||||
|
||||
14. **Groundhog Day alarm clock homage.** *Click* pa-pa pa-pa, cut short. First game day only. "New day, new start, new chances" with a wink.
|
||||
|
||||
### The Rimworld Model
|
||||
|
||||
15. **Player choices ARE the content.** The question "is Phase 1 dev-sequencing or player experience?" is wrong-framed. The world is full of opportunity; the player's choices are the content. Rimworld model: one authored starting beat (alarm clock), then agency and options. A job is rails to take off from, not a script to follow.
|
||||
|
||||
---
|
||||
|
||||
## What These Decisions Mean For Each Domain
|
||||
|
||||
**Systems (Gestalt):** Skills-verb coupling is outcome-based. VerbPriorityProfile still matters (job-aware ordering) but all verbs visible to all players. The verb system is more learnable and less gating. Tycoon bookmark means designing economic verbs first.
|
||||
|
||||
**Player Experience (Ozzie):** Wow moments must work for a tycoon, not a detective. "First Day" is apartment + insert activation + arriving at your first business appointment. The Consequence moment is economic (a deal went wrong, prices shifted, someone remembers what you did).
|
||||
|
||||
**Narrative (Paula):** No named NPCs changes everything. FRIEND pattern becomes a generator template, not authored character. Phase Zero warmth must emerge from generated NPCs with limited vocabulary. The moral arc still works but is triggered by emergent relationships, not authored relationships.
|
||||
|
||||
**Themes (Gore):** Quietly responsive, not indifferent. Consequence as theme survives. The gradient of caring (world → district → neighbors → colleagues → friends) is the emotional architecture. Transhumanist hooks via skill_ceiling concept.
|
||||
|
||||
**Replayability (Nigel):** Tycoon-only bookmark for v0.2 limits cross-career testing. But generator-first approach means every seed produces a different world — replayability comes from world variation, not career variation, in v0.2.
|
||||
|
||||
**Worldbuilding (Miri):** Zone identity spec is urgent — the generator needs it before it can produce "the Settled Reach." Both-layer setting delivery means visual + insert work in parallel. Auto-generated apartments add a new authoring dimension (what does wealth look like in different cultures?).
|
||||
|
||||
**Architecture (Tyre):** Generator is the v0.2 proof-of-life, not a hand-built slice. This is more work upfront but proves the foundation. NPC generation pipeline + character creation (skills + bookmark) + one diegetic tool suite for tycoon.
|
||||
|
||||
**Visual (Araminta):** Full character customization + NPC legibility + auto-generated apartments. Three visual production challenges simultaneously. Readability at tile scale with custom characters is the hardest unsolved problem.
|
||||
|
||||
**Copy (Mellanie):** Culture-driven voice with job modifier. No named characters means template-based content. AI-assisted templating pipeline. Insert copy for setting delivery in parallel with visual. Limited NPC vocabulary acceptable at first.
|
||||
@@ -0,0 +1,70 @@
|
||||
# Interview Supplement — Post-Round 3 Direction
|
||||
## Where's the Fun? Workshop | 2026-03-05
|
||||
|
||||
After Round 3 proposals were submitted, the facilitator resolved the 4 open tensions with Jeroen and collected additional design direction. This document captures all of that verbatim.
|
||||
|
||||
---
|
||||
|
||||
## Tension 1: Career Bookmarks — Resolved as "Different Framing Needed"
|
||||
|
||||
The wiki-review workshop (Feb 12) established 8 fluid PC archetypes. Jeroen rejected the archetype list as the right framing for bookmarks.
|
||||
|
||||
**Jeroen's direction:** "CK3 is a lot more apt here than even just the bookmarks. It allows for family creation, religion selection, culture selection, skill selection, skill level setting. We don't want D&D style base stats, but shooting proficiency will help when handling a gun. Somewhere between CK3 and The Sims I feel is the sweet spot with skills. This is even more important than job/archetype. The player plays how they want. The job/archetype/starting environment determine what is in the toolbox, not what the character is like. Borrow a character creation budget from CK3 (with console cheat options) to bound people from becoming OP."
|
||||
|
||||
**Key principles:**
|
||||
- Character creation (skills, culture, family, budget) is MORE fundamental than job/bookmark choice
|
||||
- Skills are proficiencies (shooting, hacking, social manipulation, mechanical repair), NOT D&D base stats
|
||||
- Job/archetype/starting environment = the toolbox (inserts, contacts, access), NOT the character's personality
|
||||
- CK3-style point budget with console cheat option for unconstrained builds
|
||||
- The archetype list from the wiki workshop is not exhaustive and needs revisiting for the life-sim pivot
|
||||
|
||||
---
|
||||
|
||||
## Tension 2: First 30 Minutes — Resolved as "Groundhog Day"
|
||||
|
||||
**Jeroen's direction:** "Groundhog Day. The day starts with an alarm clock, and a calendar ping that says you are expected at onboarding location X (bank/job/train station) or nowhere if you go clean, and you then have to open a job board or phone book to start figuring it out through your insert (experienced player warning on this mode)."
|
||||
|
||||
**The flow:**
|
||||
1. Character creation (CK3-style)
|
||||
2. Pick starting situation (bookmark = job + location + relationships + tools)
|
||||
3. Day 1: Alarm clock. Calendar ping with destination (or nothing for clean start).
|
||||
4. Bookmarked: go to your appointment, onboarding begins
|
||||
5. Clean start: no appointment, figure it out via job board/phone book/insert. Experienced player warning.
|
||||
|
||||
---
|
||||
|
||||
## Tension 3: Missions — Resolved as "Emergent Life, Not Missions"
|
||||
|
||||
**Jeroen's direction:** "Let me rephrase mission with emergent things that happen in the context of what the player chooses to do. Sometimes this will be a mission (like an assassination target) most of the times it will be more of a 'I have a plan, let's see if it flies' situation. The first situation is a mission with a reward layer, the second is, you spent a day cooking at the bar you work at, met some people, ended a fight in an alley and then went home with finally enough money saved to buy that car the day after."
|
||||
|
||||
**Three career models coexisting:**
|
||||
1. **Active** — you're at the workplace, the work IS the gameplay (cooking at the bar, patrolling as law enforcement)
|
||||
2. **WFH/Remote** — portable work you can do anywhere, income while exploring (hacking contracts, writing, remote consulting via insert)
|
||||
3. **Gig/Freelance** — pick jobs from a board, outcomes vary by quality, no fixed hours (smuggling runs, fixer contracts, bounty hunting)
|
||||
|
||||
**Reference games confirmed by Jeroen:**
|
||||
- The Sims (life sim framing, relationship systems, career models)
|
||||
- CK3 (character creation, bookmarks, dynasty, skill budgets)
|
||||
- Rimworld (storyteller escalation, dramatic timing, AI-driven events)
|
||||
- Dwarf Fortress (emergent history, world doesn't care about you)
|
||||
- Kenshi (sandbox survival, the world is indifferent, you are not special)
|
||||
|
||||
---
|
||||
|
||||
## Tension 4: Endgame — Resolved as "Include Hooks"
|
||||
|
||||
Plant small seeds in v0.2 (skill progression hints, insert upgrade paths) that point toward the transhumanist ladder without implementing it. Don't foreclose the path; don't build it yet.
|
||||
|
||||
---
|
||||
|
||||
## Critical Sequencing — The Two-Phase Approach
|
||||
|
||||
**Jeroen's explicit sequencing for v0.2:**
|
||||
|
||||
**Phase 1: The uncaring world.** The generator runs. Geography -> infrastructure -> zones -> population -> routines. NPCs go about their days. The economy ticks. The simulation doesn't know or care that a player exists. This must feel natural-but-artificial before anything authored enters. Primitive components tied together producing emergent complexity. Reference: the Generator Architecture workshop established the Cities Skylines top-down pipeline model with 14 confirmed D-records.
|
||||
|
||||
**Phase 2: Authored content injected.** Once the world runs and feels alive, quest/mission components are randomized into the simulation — not as scripted sequences but as authored ingredients (triangle templates, FRIEND arcs, contradiction arcs) placed by the generator into the living world. The Rimworld storyteller decides WHEN and HOW MUCH PRESSURE, not WHAT HAPPENS.
|
||||
|
||||
**Jeroen's words:** "Emergent complexity like this will start with the uncaring world generating properly. And a lot just happening from primitive components tied together. Once that runs and feels natural (but artificial) is when we start with authored quest and mission components we randomize into the gameplay."
|
||||
|
||||
This is the order. World first, then content.
|
||||
@@ -0,0 +1,199 @@
|
||||
# Round 2: Interview Transcript
|
||||
## Where's the Fun? Workshop | 2026-03-05
|
||||
|
||||
**Interviewer:** Workshop facilitator (consolidated questions from 9 agents)
|
||||
**Interviewee:** Jeroen (designer, first playtester of v0.1)
|
||||
**Format:** Interactive interview, questions presented in thematic groups
|
||||
|
||||
---
|
||||
|
||||
## Group 1: The Vision and the Wall
|
||||
|
||||
### Q1 (Ozzie): Close your eyes. The game is finished and fun. What are you DOING?
|
||||
|
||||
**Jeroen:** None of the offered frames (watching/realizing, feeling implicated, social manipulation) fit. "I want to live in the world and have impact. Own businesses, build relationships, hunt enemies, defend against enemies, build property, get a job (which could be detective). My ideal game would be playing The Sims Rimworld-style, from a first-person perspective (well third, but single character)."
|
||||
|
||||
**Key finding:** The vision is a life sim from a single-character perspective. Detective is a job you might have, not the core loop. The v0.1 vertical slice built around detective/smuggler was a narrowing that lost the broader vision.
|
||||
|
||||
---
|
||||
|
||||
### Q2 (Gore): What were you actually DOING moment-to-moment in the playtest?
|
||||
|
||||
**Jeroen:** Mix of all three offered options — cycling between aimless walking, fighting the UI, and trying to process information.
|
||||
|
||||
**Key finding:** The actual playtest verb was "navigate confusion." None of the intended verbs (observe, investigate, engage) were operating.
|
||||
|
||||
---
|
||||
|
||||
### Q3 (Gestalt): At minute 2, what did you think you were supposed to do?
|
||||
|
||||
**Jeroen:** Faint signal — there was something there but too weak to act on.
|
||||
|
||||
**Key finding:** The systems weren't completely silent. Something was reaching the player, but below the threshold of actionability. This suggests the feedback channels exist but are severely underpowered.
|
||||
|
||||
---
|
||||
|
||||
## Group 2: The Confusion Type
|
||||
|
||||
### Q4 (Gestalt): Was it "I know something is here" or "I have no idea what I'm looking at"?
|
||||
|
||||
**Jeroen:** "Mostly B with a hint of A, layered with the looming realization that the narrow scoping for v0.1 was actually a bad frame to work towards since we lost track of the broader brief."
|
||||
|
||||
**Key finding:** Predominantly uniform opacity (bad confusion), not engaged mystery (good confusion). But the deeper realization was meta-level: the playtest wasn't just confusing in the moment — it revealed that the v0.1 framing itself was wrong. The narrow detective scope had lost track of the life-sim vision.
|
||||
|
||||
---
|
||||
|
||||
### Q5 (Araminta): Were you unable to READ the screen, or unable to ACT on what you read?
|
||||
|
||||
**Jeroen:** Both equally.
|
||||
|
||||
**Key finding:** Both attention management (visual hierarchy) and agency (what to do) were failing simultaneously. Araminta and the systems designers both have work to do, but visual hierarchy is needed regardless of the design reframe.
|
||||
|
||||
---
|
||||
|
||||
## Group 3: The Emotional Loop
|
||||
|
||||
### Q6 (Paula): Did Phase 1 feel like a stable world you belonged to?
|
||||
|
||||
**Jeroen:** "I had no idea what dot was who, or to be honest that they were people at all (had I not been involved in the sprints running up to this one)."
|
||||
|
||||
**Key finding:** The NPCs did not register as human beings. They were dots. The entire emotional stack (attachment -> moral arc -> complicity -> dual-lens reveal) has no foundation because the entities on screen are not legible as people. This is a more fundamental failure than anyone anticipated — not "the emotional loop didn't fire" but "the preconditions for recognizing there ARE characters didn't exist."
|
||||
|
||||
---
|
||||
|
||||
### Q7 (Paula): Did any NPC feel like a person with stakes?
|
||||
|
||||
**Jeroen:** No one. No NPC registered as a person. They were all moving tiles.
|
||||
|
||||
**Key finding:** Zero NPC attachment. The moral arc literally cannot start. The Phase 1-to-2 gates (observing Naia's stress, Maret's anxiety) require the player to be watching specific people closely — but the people aren't legible as people.
|
||||
|
||||
---
|
||||
|
||||
### Q8 (Gore): Did the complicity threshold ever fire?
|
||||
|
||||
**Jeroen:** "Seen the previous answer that the dots did not register as anything but dots, this question assumes way too much engagement to even start speaking in those terms."
|
||||
|
||||
**Key finding:** The question was premature. Complicity requires recognizing characters as people, recognizing your relationship to them, and then feeling implicated. The playtest never reached step one. The complicity theme exists only in design documents, not in the player experience. This is not fixable with better monologue timing or content — it requires the characters to become visible and legible first.
|
||||
|
||||
---
|
||||
|
||||
## Group 4: The Monologue System
|
||||
|
||||
### Q9 (Mellanie): Could you connect monologue lines to their triggers?
|
||||
|
||||
**Jeroen:** "It felt like it wanted me to know something, but no idea what it was connected to, what triggered it, and even how to relate the messages to each other since they were coming in scattered."
|
||||
|
||||
**Key finding:** The monologue system was perceived as intentional communication (it wanted to tell the player something) but failed on three axes: no spatial anchor to trigger source, no causal legibility, and no inter-message continuity. The lines couldn't build on each other because there was no thread connecting them.
|
||||
|
||||
---
|
||||
|
||||
### Q10 (Mellanie): Did the monologue ever feel like your character's thoughts?
|
||||
|
||||
**Jeroen:** Hard to tell — given that the dots weren't people and the world wasn't legible, the question isn't answerable from this playtest.
|
||||
|
||||
**Key finding:** The monologue-as-interiority question is unanswerable until the floor exists. If the world isn't a place and the NPCs aren't people, the character's thoughts about them can't register as interiority. The system needs to be re-evaluated after the fundamental legibility problems are solved.
|
||||
|
||||
---
|
||||
|
||||
## Group 5: Systems & Architecture
|
||||
|
||||
### Q11 (Tyre): Was monologue the only planned channel for the knowledge graph?
|
||||
|
||||
**Jeroen:** "Always planned for more, like the mystery board with the wires connecting topics, a glossary of characters, a journal tracking communications, tele-communications, insert icons, AR type overlays on the world. The monologue was supposed to be a reasoning nudge and summary tool in the later stages. We descoped for v0.1, which brings me back to that v0.1 was not framed correctly. We learn this and do better for v0.2, possibly with a whole new game loop."
|
||||
|
||||
**Key finding:** The full information architecture was always planned — mystery board, character glossary, journal, comms, insert icons, AR overlays. Monologue was never supposed to carry the feedback burden alone; it was meant as a reasoning nudge in the later stages. The v0.1 descoping stripped the player of all their planned tools and then asked them to play. This confirms the scoping error: v0.1 didn't just narrow the story — it removed the player's interface to the world.
|
||||
|
||||
**Process note:** Jeroen explicitly requested that each Round 3 agent receive the full verbatim transcript of this interview, not just summaries. "I want all finesse communicated."
|
||||
|
||||
---
|
||||
|
||||
### Q12 (Tyre): Where on the objectives spectrum? Is "no objectives" a principle or scope decision?
|
||||
|
||||
**Jeroen:** "I think the underlying reasoning was that, for replayability, the information systems needed to be framed in-world. This way different jobs, inserts, character budgets would have different tools (that they could aspire and grow towards) and not a GTA-style line leading to objective and large box that checks off mission goals. In fact missions should have varying levels of success. Or even failure declared and sold as success. There would be consequences (enemies, lower pay, no pay, getting fired, an innocent killed or in jail) but it would be possible."
|
||||
|
||||
**Key finding:** "No objectives" was never a design principle against feedback. It was a commitment to diegetic, in-world information tools that vary by job/insert/character build. Different characters would have different HUDs essentially — a detective's neural insert surfaces different information than a smuggler's street contacts network. The absence of objectives in v0.1 was the absence of these diegetic tools, not an intentional design choice for silence. Additionally: missions should have spectrums of success/failure with consequences, not binary pass/fail. A mission can "fail" and the player continues with consequences. This is a life-sim philosophy, not a mission-game philosophy.
|
||||
|
||||
---
|
||||
|
||||
## Group 6: Verb System & World Legibility
|
||||
|
||||
### Q13 (Gestalt): Did the verb priority fight the detective loop?
|
||||
|
||||
**Jeroen:** Didn't get that far — never reached the point of trying to observe specific NPCs. The dots weren't legible enough as people to target.
|
||||
|
||||
**Key finding:** The verb priority spec contradiction (Talk > Observe at close range) is a real design issue, but it's irrelevant to the current playtest because the player never reached the interaction layer. You can't have a verb problem when the entities aren't recognizable as interactable.
|
||||
|
||||
---
|
||||
|
||||
### Q14 (Miri): What kind of place did Sova Transit feel like?
|
||||
|
||||
**Jeroen:** Game level with dots. No sense of place at all.
|
||||
|
||||
**Key finding:** Zero environmental storytelling landed. The setting design exists in documents but not in the player experience. Sova Transit's social geography (class dynamics, functional clusters, faction pressures) is invisible. The player saw a tile grid with moving sprites.
|
||||
|
||||
---
|
||||
|
||||
### Q15 (Nigel): Should the storyteller detect first playthrough and pick a higher-pressure seed?
|
||||
|
||||
**Jeroen:** "Different approach needed. In fact, falling into a mission may be the wrong place to start, since so much of the character will need to evolve from where they start. A detective playthrough should basically be: player starts a game with a shortcut bookmark of starting as law enforcement (or any of the other ones. I feel we need to stop framing everything into the detective-smuggler tension, since that brought us knee deep in the wrong place) but anyways, as an example: after picking that bookmark, the game should start with onboarding at their new job, the enabling one by one of their new inserts, their weapon and weapon qualification training. Tycoon would start with a ping that their bank wants to talk at which point they are handed an inheritance (starting capital) and then the tools to start making investments and buy assets."
|
||||
|
||||
**Key finding:** This is the biggest reframe of the interview. The storyteller seed question is moot because the entire starting premise is changing. Instead of "which variant of the detective mission should you start with," the answer is "you shouldn't start in a mission at all." The game should start with CK3-style bookmarks: choose a career path (law enforcement, tycoon, smuggler, etc.), each with its own onboarding arc that teaches the tools organically. Detective is just one bookmark. The detective-smuggler tension is a storyline within the world, not the frame for the entire game.
|
||||
|
||||
---
|
||||
|
||||
## Group 7: Remaining Questions
|
||||
|
||||
### Q16 (Ozzie): Was the frustration "not built yet" or "wouldn't have cared even if it was"?
|
||||
|
||||
**Jeroen:** "C... with everything, it felt like the wrong game. I do really want the storylines of the gate builders and the tension between smugglers and the law be in the game and a lot of the patterns would still fit, but the focus felt myopic."
|
||||
|
||||
**Key finding:** Neither "not built yet" nor "wouldn't have cared" — it's "wrong game." The existing storylines (gate builders, smuggler/law tension) should survive as content within a broader world, but the v0.1 framing that made them the sole focus was myopic. The patterns (knowledge graph, perception system, monologue, moral arcs) fit into the broader life-sim vision — they just can't be the entire experience.
|
||||
|
||||
---
|
||||
|
||||
### Q17 (Araminta): Would a 3-tier visual language have given you a foothold?
|
||||
|
||||
**Jeroen:** Would have helped.
|
||||
|
||||
**Key finding:** Even with all the fundamental problems, visual hierarchy matters. Araminta's argument holds: you can't evaluate any loop until the player can read the screen. Visual hierarchy is needed regardless of the design reframe. This is one thing that carries forward directly into v0.2.
|
||||
|
||||
---
|
||||
|
||||
### Q18 (Tyre): Pull verb display forward to v0.1?
|
||||
|
||||
**Jeroen:** "This feels like a patch with the wrong priority. I think this and a lot more is needed."
|
||||
|
||||
**Key finding:** Small patches to v0.1 are the wrong frame. The scope of change needed is larger than verb display or monologue tuning. v0.2 needs to be designed from the new vision, and individual v0.1 fixes should be evaluated in that context.
|
||||
|
||||
---
|
||||
|
||||
## Interview Summary: The Five Revelations
|
||||
|
||||
1. **The vision is a life sim, not a detective game.** Single-character Sims-meets-Rimworld. Detective is one job among many (tycoon, smuggler, law enforcement). The v0.1 detective/smuggler framing was a scope narrowing that lost the broader vision.
|
||||
|
||||
2. **v0.1 was framed wrong.** The descoping didn't just narrow the story — it stripped the player of all their planned information tools (mystery board, journal, AR overlays, comms) and then asked them to play with monologue alone. The playtest failure was predictable in retrospect.
|
||||
|
||||
3. **The world isn't legible.** NPCs are dots, not people. Sova Transit is a game level, not a place. No emotional loop can run on this foundation. The character legibility problem is more fundamental than anyone anticipated.
|
||||
|
||||
4. **"No objectives" was never the principle — diegetic tools were.** Different jobs/inserts provide different information interfaces. The absence of feedback in v0.1 was the absence of these tools, not design purity.
|
||||
|
||||
5. **The game should start with job onboarding, not a mission.** CK3-style bookmarks into career paths, each with onboarding that teaches tools organically. This replaces the storyteller seed variant system as the first-run structure.
|
||||
|
||||
### What Survives
|
||||
|
||||
- The simulation engine (routines, perception, knowledge graph)
|
||||
- The storylines (gate builders, smuggler/law tension) as world content
|
||||
- The moral arc patterns (but as consequences within a broader life, not the sole focus)
|
||||
- The monologue system (as a reasoning nudge, not the primary feedback channel)
|
||||
- The visual hierarchy work (needed regardless)
|
||||
- The diegetic information tool vision (mystery board, journal, AR overlays)
|
||||
- The asymmetric information mechanic (different characters know different things)
|
||||
|
||||
### What Changes
|
||||
|
||||
- The core loop: from "detective puzzle" to "live in the world, have impact"
|
||||
- The starting experience: from "mission variant" to "job onboarding bookmark"
|
||||
- The feedback architecture: from "monologue only" to "full diegetic tool suite"
|
||||
- The vertical slice scope: from "one detective case" to "one career arc with world interaction"
|
||||
- NPC presentation: dots must become people (art, names, behavior legibility)
|
||||
- Place presentation: tile grid must become an inhabited space
|
||||
@@ -0,0 +1,160 @@
|
||||
# Round 1 Notes — Where's the Fun? Workshop
|
||||
## QATUX — Documenter
|
||||
|
||||
**Workshop:** Where's the Fun? v0.1 Playtest Reckoning
|
||||
**Round:** 1 — Diagnosis (agents prepare interview questions)
|
||||
**Date:** 2026-03-05
|
||||
**Source files:** `round1-gestalt.md`, `round1-ozzie.md`, `round1-paula.md`, `round1-gore.md`, `round1-nigel.md`, `round1-miri.md`, `round1-tyre.md`, `round1-araminta.md`, `round1-mellanie.md`
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
All 9 agents independently converged on the same diagnosis from their respective domains: **the game has no floor before it asks for a ceiling**. The emotional, relational, and mechanical preconditions for the designed experience don't exist yet. Every agent framed this differently, but they're pointing at the same absence.
|
||||
|
||||
A secondary convergence: **the content pipeline is near-empty**, and the playtest ran on structural scaffolding without authored content. These are related but separable problems. Several agents are careful to distinguish them.
|
||||
|
||||
---
|
||||
|
||||
## Key Themes
|
||||
|
||||
### 1. The Precondition Problem
|
||||
|
||||
The most consistent theme across all 9 agents: the game's designed payoffs (moral arc, complicity, wow moments, dual-lens reveal, replayability) each require preconditions that are not currently delivered.
|
||||
|
||||
- Paula: the smuggler's moral arc is "temporally displaced" — designed for a player already attached to Kael and the operation. That player never exists in v0.1. The arc needs a relationship establishment phase *before* it can begin.
|
||||
- Gore: complicity requires a threshold — a before-and-after, a moment you were inside the situation before deciding to be. The playtest may have produced no threshold at all.
|
||||
- Ozzie: the 6 wow moments are minute-5-to-25 payoffs. The testing wall was minute 8. The wow moments have a floor problem, not a ceiling problem.
|
||||
- Nigel: replayability is a second-playthrough architecture built on top of first-playthrough investment. If minute 1-8 produces zero attachment, replaying produces "varied nothing."
|
||||
- Miri: the dual-lens reveal (same space, inverted relationship) requires the first playthrough to have built attachment to Sova Transit as a *real place*. The playtest suggests the player experienced a map, not a place.
|
||||
|
||||
### 2. The Content Pipeline Gap
|
||||
|
||||
Ozzie identified this most directly: 1 of 23 wow-moment deliverables is ready. No authored monologue lines. No FRIEND content. No anomaly detection. The playtest ran on structural systems without the authored layer that makes those systems legible.
|
||||
|
||||
This is distinct from the precondition problem, but intersects with it: even if the arc, the monologue system, and the observation loop are correctly designed, they cannot function without authored content to run through them.
|
||||
|
||||
Mellanie notes the fix order matters: if the delivery system is broken, better content won't save it. But the current playtest can't tell us which is true until lines written to spec actually fire.
|
||||
|
||||
### 3. No Feedback Legibility
|
||||
|
||||
Multiple agents identified the monologue system as failing at its stated purpose — bridging the top-down camera to the character's subjective experience. The failure has at least two components:
|
||||
|
||||
- **Spatial anchoring** (Mellanie, Araminta): monologue fires without a visual anchor to the trigger. The player can't connect the thought to what caused it.
|
||||
- **Contextless content** (Mellanie, Gestalt): lines fire without establishing *why this thought, now*. Generic lines occupy the moment without earning it.
|
||||
- **Signal-to-noise overload** (Araminta, Mellanie): too many simultaneous feedback channels of equal visual weight, none of which communicate priority.
|
||||
|
||||
### 4. "No Objectives" — Principle vs Scope
|
||||
|
||||
Tyre surfaced this as an explicit architectural question. The "no objectives, pure observation" philosophy produces paralysis, not discovery. But *why* the philosophy was implemented matters:
|
||||
|
||||
- If it's a **design principle** ("this game is about discovering your own purpose"), the fix is better monologue, spatial feedback, and environmental storytelling.
|
||||
- If it's a **scope decision** ("we didn't build it yet"), a Tier 2 "threads" system — surfacing the knowledge graph's active contradictions as diegetic character observations — is moderate effort and already architecturally supported.
|
||||
|
||||
No other agent explicitly framed this distinction, but Gore and Paula's questions imply that the first-beat design problem exists regardless of the objectives question.
|
||||
|
||||
### 5. The Verb System May Fight the Detective Loop
|
||||
|
||||
Gestalt identified a specific mechanical contradiction: the verb priority spec puts Talk above Examine NPC at close range. The stated detective loop is "Observe first, Talk later." These directly contradict each other. At close range, `[E]` offers Talk; the player has to back up to mid range to get Observe — but nothing communicates this. The detective's primary verb is hidden behind the social verb.
|
||||
|
||||
---
|
||||
|
||||
## Recurring Concerns (raised by 3+ agents)
|
||||
|
||||
| Concern | Agents |
|
||||
|---------|--------|
|
||||
| No emotional investment in NPCs as people | Paula, Gore, Nigel, Ozzie |
|
||||
| Player has no purpose, progress, or priority signal | Gestalt, Gore, Araminta, Nigel |
|
||||
| Moral arc / complicity can't run without preconditions | Paula, Gore, Ozzie |
|
||||
| Monologue as noise rather than signal | Mellanie, Gestalt, Araminta |
|
||||
| Spatial anchoring failure (actions, monologue, feedback) | Mellanie, Araminta, Gestalt |
|
||||
| First 8 minutes is the critical failure zone | All agents |
|
||||
|
||||
---
|
||||
|
||||
## Unique Insights (domain-specific, not raised by others)
|
||||
|
||||
| Insight | Agent | Significance |
|
||||
|---------|-------|-------------|
|
||||
| Verb priority spec directly contradicts detective loop | Gestalt | Specific mechanic — Talk overrides Observe at close range. May be a design decision or an error. |
|
||||
| Variant A (quiet morning) is a second-playthrough config being deployed on first-run players | Nigel | The storyteller may be selecting the worst possible seed for initial onboarding. |
|
||||
| Knowledge graph already tracks everything — the gap is surfacing it | Tyre | Architecture is more flexible than it appears. Tier 1-2 feedback systems are moderate effort, not architecture changes. |
|
||||
| "No objectives" as design principle vs scope decision | Tyre | Clarifying this resolves multiple downstream design questions. |
|
||||
| Visual hierarchy is diagnostic infrastructure, not polish | Araminta | "We can't evaluate the core loop until the player can read the screen." A clear diagnostic framing. |
|
||||
| Sova Transit exists only in docs, not in the game | Miri | The setting's social texture (class anxiety, Commission pressure, bar as pressure valve) has no in-game signal. |
|
||||
|
||||
---
|
||||
|
||||
## Areas of Agreement
|
||||
|
||||
- The architecture does not need rebuilding (Tyre; Gestalt implicitly agrees)
|
||||
- Items 3, 4, 6, 8 (fog edge, stance indicator, HUD polish, context menu chrome) are fixable visual execution problems
|
||||
- The first 8 minutes is the critical failure zone, independent of content completion
|
||||
- No NPC registered as a person during the playtest
|
||||
- No complicity was felt (only recognized as design intent, if at all)
|
||||
- The 6 wow moments are not yet in the build and cannot be evaluated until authored content exists
|
||||
- The "not a tutorial" philosophy may be correct in principle but is currently producing confusion, not discovery
|
||||
|
||||
---
|
||||
|
||||
## Tensions (unresolved, need Jeroen's answers)
|
||||
|
||||
| Tension | Agents in tension |
|
||||
|---------|------------------|
|
||||
| Would showing all verbs (v0.2 display) reduce confusion or add noise? | Tyre (advocates pulling it forward) vs Araminta (signal-to-noise concern) |
|
||||
| Is the fun problem primarily design or content? | Ozzie (separates them explicitly) vs Mellanie (both, but fix order matters) |
|
||||
| Should the first-run storyteller config differ from replay config? | Nigel (argues yes) — no disagreement, but no other agent raised it |
|
||||
| How much can visual hierarchy fix without mechanical changes? | Araminta (may not fix, but will clarify) vs Gore (visual polish can't substitute for missing threshold) |
|
||||
|
||||
---
|
||||
|
||||
## The Sharpest Questions Going Into the Interview
|
||||
|
||||
Ranked by how much the answer changes the diagnostic direction:
|
||||
|
||||
1. **GESTALT Q2:** Was confusion "I can feel there's something here, I can't reach it" (good mystery) or "I have no idea what I'm looking at" (uniform opacity)? — This binary determines whether the core mechanic is working and needs legibility improvements, or whether it's not registering at all.
|
||||
|
||||
2. **TYRE Q2:** Is "no objectives" a design principle or a scope decision? — The answer resolves what class of problem the testing wall represents.
|
||||
|
||||
3. **GORE Q3:** What were you actually doing, moment to moment? Not "investigating" — the real verb. — Forces legibility of actual vs designed experience.
|
||||
|
||||
4. **PAULA Q2:** Did any NPC register as a person with stakes before you stopped playing? — Binary diagnostic for whether the arc's preconditions are achievable in the current build.
|
||||
|
||||
5. **OZZIE Q2 (the Ghost Question):** Even if all 6 wow moments existed tomorrow — would you have known to *care* when they arrived? — Separates content pipeline failure from design intent failure.
|
||||
|
||||
6. **NIGEL Q3:** Should the storyteller detect "first playthrough" and select a higher-pressure seed? — Specific, actionable, doesn't require architecture changes.
|
||||
|
||||
7. **MELLANIE Q3:** Did monologue ever feel like *your* character's thoughts? Even once? — If yes, the system can work and content is the variable. If no, the delivery method itself is in question.
|
||||
|
||||
---
|
||||
|
||||
## Open Questions Surfaced by Round 1
|
||||
|
||||
**Q-WTF-001:** Is the "no objectives, pure observation" philosophy a design principle or a scope decision?
|
||||
- Stakes: determines whether the fix is polish (better monologue, better spatial feedback) or a new Tier 2 threads system
|
||||
- Raised by: Tyre
|
||||
|
||||
**Q-WTF-002:** Does the storyteller need a "first playthrough" mode that selects higher-pressure seeds?
|
||||
- Stakes: the current Variant A (quiet morning) may be the worst possible first-run experience
|
||||
- Raised by: Nigel
|
||||
|
||||
**Q-WTF-003:** Does the moral arc need a designed "relationship establishment" phase before Phase 1 begins?
|
||||
- Stakes: the entire 4-phase arc may be rootless without a prior beat that makes warmth *felt*
|
||||
- Raised by: Paula
|
||||
|
||||
**Q-WTF-004:** Is the verb priority system (Talk > Observe NPC at close range) a design decision or an error?
|
||||
- Stakes: if the detective's primary loop is blocked by the verb priority spec, this is a critical fix
|
||||
- Raised by: Gestalt
|
||||
|
||||
---
|
||||
|
||||
## What Requires Jeroen's Answers Before Proceeding
|
||||
|
||||
Round 3 proposals (per-domain recommendations) depend on Jeroen's interview confirming:
|
||||
1. Whether confusion was "engaged but stuck" vs "uniform opacity" (determines if core mechanic works)
|
||||
2. Whether any NPC registered as a person (determines arc precondition status)
|
||||
3. Whether monologue ever felt like character voice (determines content vs delivery problem)
|
||||
4. Whether the "no objectives" stance is principled or circumstantial
|
||||
5. What the actual moment-to-moment experience was (Gore's verb question)
|
||||
|
||||
*Record: all 9 Round 1 files reviewed. No Round 2 (interview) outputs exist yet. Round 3 proposals are blocked pending Jeroen's responses.*
|
||||
@@ -0,0 +1,363 @@
|
||||
# Round 3 Notes — Where's the Fun? Workshop
|
||||
## QATUX — Documenter
|
||||
|
||||
**Workshop:** Where's the Fun? v0.1 Playtest Reckoning
|
||||
**Round:** 3 — Proposals (each agent reads the full interview and proposes keep/change/kill)
|
||||
**Date:** 2026-03-05
|
||||
**Source files:** `round3-gestalt.md`, `round3-ozzie.md`, `round3-paula.md`, `round3-gore.md`, `round3-nigel.md`, `round3-miri.md`, `round3-tyre.md`, `round3-araminta.md`, `round3-mellanie.md`
|
||||
|
||||
---
|
||||
|
||||
## The Consensus
|
||||
|
||||
All 9 agents embraced the life-sim reframe without dissent. No agent defended the detective/smuggler framing as the correct game frame. No agent proposed rebuilding the simulation engine. Every agent landed on a version of the same core statement, which Tyre expressed most cleanly:
|
||||
|
||||
> *"The engine is a life-sim engine that was accidentally shipped with a detective-game UI; the fix is building the information layer the simulation was always meant to feed."*
|
||||
|
||||
This is the Round 3 consensus. It is strong enough to treat as decided.
|
||||
|
||||
---
|
||||
|
||||
## Summary: What Each Agent Proposes
|
||||
|
||||
### GESTALT — Systems Design
|
||||
|
||||
**Keep:** Verb architecture, knowledge graph, perception system, asymmetric information mechanic, moral arc patterns (as world content, not mandatory structure).
|
||||
|
||||
**Change:**
|
||||
- Introduce `VerbPriorityProfile` per career/job — the verb priority spec as written is wrong for detective (Talk > Observe at close range contradicts the detective's stated loop) and needs to become job-aware.
|
||||
- Demote monologue from primary to supplementary channel.
|
||||
- Redesign the storyteller: from seed variant selector to career onboarding engine (bookmark resolution → world state initialization → onboarding sequencing).
|
||||
- Reframe "not a tutorial" as diegetic onboarding — the insert activates and tells you, in-character, what it can do.
|
||||
|
||||
**Kill:** Monologue-only feedback architecture; detective/smuggler as the game's identity frame; verb priority spec Section 4 as written.
|
||||
|
||||
**Vision:** "The fun is in reading the same world differently depending on who you are." Same cargo bay, three different careers, three different games. Asymmetric information is MORE powerful as a life-sim mechanic.
|
||||
|
||||
---
|
||||
|
||||
### OZZIE — Player Experience & Wow Factor
|
||||
|
||||
**Keep:** Emotional DNA of all 6 original wow moments (all survive; none survive as designed). Simulation engine. Diegetic tool vision. Visual hierarchy work.
|
||||
|
||||
**Kill:** The 6-moment checklist as designed (staged revelations for a detective case). Detective/smuggler binary as the core frame. Monologue as primary feedback.
|
||||
|
||||
**Change:** Redesigned 6 wow moments as emergent thresholds, not timed beats:
|
||||
|
||||
| New Moment | The Feeling | Minimum Viable Version |
|
||||
|------------|-------------|----------------------|
|
||||
| First Day | "I belong somewhere" | Supervisor NPC, tool activation, first assignment acknowledgment |
|
||||
| The Character's Instinct | "My character knows something I don't" | 10 career-tagged monologue lines per career flagging domain anomalies |
|
||||
| The Consequence | "That was ME" | Persistent consequence state for 2 early choices, journal entry referencing earlier decision |
|
||||
| The Enemy | "Someone doesn't want me here" | One hostile faction that tracks player actions, visible NPC attitude degradation |
|
||||
| The Asymmetric Lens | "We saw the same thing. We understood completely different things." | 5 headlines × 3 career reactions = 15 ticker lines |
|
||||
| The Ownership Moment | "That's MINE. Someone is threatening it." | One ownable asset with threat state, property UI |
|
||||
|
||||
**Priority order:** NPC legibility → First Day → Consequence → Career monologue → Enemy → Lens → Ownership.
|
||||
|
||||
**Vision:** "What kind of person are you going to be here?" replaces "Can you solve the puzzle?"
|
||||
|
||||
---
|
||||
|
||||
### PAULA — Narrative & Moral Arc
|
||||
|
||||
**Keep:** Smuggler moral arc structure (4 phases, FactId gates, authored transitions). THE FRIEND pattern (Kael, Sera) — move it later in the player arc, not remove it. Asymmetric information as world property. Faction politics as ambient texture.
|
||||
|
||||
**Change:**
|
||||
- Add **Phase Zero** (earned comfort before the arc begins): run several clean jobs, establish warmth with Kael, see Naia in Kael's life. Phase 1 can't be felt unless Phase Zero was built.
|
||||
- Complicity becomes optional and discoverable, not universal — fires for players who earned it. Gate: `smuggler.has_established_ring_relationships` must be true before Doubt gates become active.
|
||||
- Monologue becomes life-interiority, not case guidance — add relationship commentary, career reflection, world observation to the content balance.
|
||||
- Dual-lens becomes multi-playthrough discovery, not designed reveal. Kill the engineered reveal; keep the authorial rigor.
|
||||
|
||||
**Kill:** 4-phase arc as the v0.2 primary experience. "Complicity as thematic core" as the v0.2 design driver. Two-layer onboarding (narrative vs mechanical) — collapse them into job onboarding.
|
||||
|
||||
**Framing:** In a life sim, the game's theme is "this world has moral texture and your choices have weight." Complicity is one expression. There are others — loyalty, aspiration, betrayal, protection. Different careers, different moral arcs.
|
||||
|
||||
---
|
||||
|
||||
### GORE — Themes & Endgame
|
||||
|
||||
**Keep:** Complicity as thematic core (re-rooted in life-sim frame — more powerful, not less). Asymmetric information mechanic. Moral arc structure (emergent, not pre-authored). Gate builders / smuggler-law storylines.
|
||||
|
||||
**Change:**
|
||||
- Entry condition into complicity: the player must have a Phase 1 before Phase 2 can erode it. "You can't feel complicit in something you were born into."
|
||||
- Complicity's moment-to-moment verb: shifts from "observe" to "decide." You're building something. Theme is what you build reveals who you are.
|
||||
- The endgame — proposed but acknowledged as v0.3+ design: **legacy vs transcendence** (transhumanist ladder from baseline to Higher to ANA), complicity as accumulated weight made visible, civilizational crisis as endgame stakes.
|
||||
|
||||
**Kill:** Detective/smuggler as thematic frame. Pre-authored entanglement. The 30-minute wow moment schedule as a design primitive.
|
||||
|
||||
**Word reframe:** From "complicity" to **"consequence"** as the organizing concept. Complicity is one form; the broader experience is that choices have mass, accumulate, and shape you. "The game is about the weight of having lived."
|
||||
|
||||
**Vision:** "When the player has built businesses, defended relationships, accumulated enemies, survived crises — they are not the same person who started."
|
||||
|
||||
---
|
||||
|
||||
### NIGEL — Replayability
|
||||
|
||||
**Keep:** Asymmetric information as replayability spine (career paths see different portions of world truth). World state randomness at game start. Mission consequence cascades.
|
||||
|
||||
**Change:**
|
||||
- Replayability source: from seed variants → **career divergence** as primary, world state randomness as secondary.
|
||||
- Storyteller redesigned: asks "what state is the world in when this career begins?" not "which variant of this scenario?"
|
||||
- Bookmarks designed as structurally different games: different starting tools, different world relationships, different failure modes.
|
||||
- "No metagaming" problem dissolves: life-sim has natural metagame resistance because you're navigating a simulation, not solving a puzzle.
|
||||
|
||||
**Kill:** Seed variant system as PRIMARY replayability mechanism (keep as world-state texture within a career). "Second-playthrough payoff" as the design goal for the first run — each playthrough should be complete on its own terms. "No objectives" as a label.
|
||||
|
||||
**Three replayability layers:**
|
||||
1. Career divergence — structural variety (different games from same simulation)
|
||||
2. Consequence cascades — emergent life stories (no two playthroughs accumulate the same shape)
|
||||
3. World state randomness — cross-seed variety (meta-knowledge from one run doesn't trivialize the next)
|
||||
|
||||
**Vision:** Two players, one played law enforcement, one played tycoon, discover in conversation that the tycoon's shell company was used by the smuggling ring the law enforcement player was investigating. Neither knew. Nobody scripted it.
|
||||
|
||||
---
|
||||
|
||||
### MIRI — Worldbuilding & Setting
|
||||
|
||||
**Keep:** Settled Reach cosmology (span gates, inserts, Commission, class stratification). Functional cluster as atomic setting unit (D-025). Sova Transit as location — upgrade from case backdrop to living district.
|
||||
|
||||
**Change:**
|
||||
- Setting legibility as a **designed deliverable, not ambient texture**. The playtest falsified the assumption that simulation richness communicates itself.
|
||||
- Bookmark onboarding arc as worldbuilding delivery mechanism — each career path enters Sova Transit from a different social position, each revealing a different face of the world.
|
||||
- Sova Transit's place identity must be expressible in three media: visuals, NPC behavior, audio.
|
||||
|
||||
**Kill:** Sova Transit as "case backdrop." The assumption that setting richness emerges naturally from the simulation.
|
||||
|
||||
**Minimum viable world for a life-sim vertical slice (4 layers):**
|
||||
1. Place reads as specific at 30 seconds (visual markers + audio + one ambient text piece)
|
||||
2. NPCs read as people with roles (3 archetype types legible at a glance)
|
||||
3. One economic foothold per zone (dock contract board, bar rent board, Commission posting board)
|
||||
4. Bookmark onboarding expresses rather than explains
|
||||
|
||||
**Ordered deliverables:**
|
||||
1. Sova Transit place identity document (1 sprint)
|
||||
2. NPC archetype visual spec (1 sprint, collaborative with Araminta)
|
||||
3. Two bookmark onboarding arcs — law enforcement + one other (2 sprints)
|
||||
4. Economic texture layer — authored wages, rents, span gate access fees (1 sprint)
|
||||
5. Behavioral vocabulary spec — what routines look like when communicating place (1 sprint)
|
||||
|
||||
---
|
||||
|
||||
### TYRE — Technical Architecture
|
||||
|
||||
**Keep:** Rust simulation server (D-020), ObserverSnapshot (D-054), knowledge graph (D-041), verb system, simulation tiers (D-026). All of it. The simulation is already a life-sim engine.
|
||||
|
||||
**Change:**
|
||||
- Client information architecture — from monologue-only to diegetic tool suite. New optional ObserverSnapshot sections: `active_threads`, `journal_entries`, `tool_widgets`, `comms_messages`, `ar_overlays`. Populated per career bookmark.
|
||||
- Career bookmark system as architecture: `BookmarkDefinition` resource with starting knowledge, starting relationships, tool loadout, onboarding sequence.
|
||||
- Mission system with consequence spectrums: `MissionState` + `ConsequenceEngine` mapping outcome scores to world-state changes.
|
||||
- NPC legibility data in ObserverSnapshot: display name (obfuscated until identified), current activity label, emotional state indicator, relationship summary. "Easy. The data exists. We just need to send it."
|
||||
|
||||
**Kill:** Detective/smuggler as v0.1 vertical slice thesis. Monologue as primary channel. "No objectives" as a stance.
|
||||
|
||||
**4-phase delivery roadmap:**
|
||||
- Phase 1 (1 sprint): NPC legibility data + visual hierarchy support → unblocks everything
|
||||
- Phase 2 (1-2 sprints): Thread tracker, journal, bookmark definitions
|
||||
- Phase 3 (1-2 sprints): Mission system, onboarding sequence, comms
|
||||
- Phase 4 (ongoing): Additional bookmarks, career-specific tools
|
||||
|
||||
**Total to one-bookmark playable life-sim vertical slice:** ~4-6 sprints. Additive, not reconstructive.
|
||||
|
||||
**Feasibility table:**
|
||||
|
||||
| Component | Difficulty | Effort |
|
||||
|-----------|-----------|--------|
|
||||
| NPC legibility in snapshot | Easy | 1-2 weeks |
|
||||
| Thread tracker / journal | Moderate | 2-3 weeks |
|
||||
| Bookmark definitions | Moderate | 1-2 weeks |
|
||||
| Mission system | Hard | 3-4 weeks |
|
||||
| Consequence engine | Hard | 2-3 weeks |
|
||||
| Onboarding sequences | Moderate | 2 weeks framework |
|
||||
|
||||
**Flag:** Mission system is the riskiest new system; Tyre recommends a design spec workshop before implementation.
|
||||
|
||||
---
|
||||
|
||||
### ARAMINTA — Visual Design
|
||||
|
||||
**Keep:** 3-tier visual hierarchy concept. Diegetic UI philosophy (inserts, overlays, in-world anchors). Fog and perception rendering. Contextual name reveal mechanic.
|
||||
|
||||
**Change:**
|
||||
- Character legibility (Priority 1): Three layers — archetype silhouettes + palette anchors, behavioral state reads (ambient icon indicators), knowledge-gated reveal (visual information tracks knowledge-graph state).
|
||||
- Place legibility (Priority 1, parallel): Functional cluster palette system (color temperature by zone type), ambient life props, foreground/background depth layering.
|
||||
- HUD hierarchy enforcement: Every signal assigned to a tier BEFORE implementation. No exceptions.
|
||||
- UI chrome and anchoring: context menu panel, stance indicator anchored to minimap, monologue spatial anchor (brief highlight on source tile/entity).
|
||||
|
||||
**Kill:** "Visual polish is low priority" framing. Floating unanchored UI elements. Uniform NPC appearance.
|
||||
|
||||
**Career insert visual strategy:** Each career has a distinct visual identity for their insert HUD (law enforcement: Commission blue, case-file aesthetic; tycoon: financial overlay, warmer palette; smuggler: social graph edges, grittier analog feel). One design document, defined before any implementation.
|
||||
|
||||
**Priority order:**
|
||||
1. Character archetype palette + behavioral state indicators (1 sprint)
|
||||
2. Functional cluster palettes + ambient props (1 sprint, parallel)
|
||||
3. HUD hierarchy enforcement sweep (2 weeks)
|
||||
4. UI anchoring sweep (1 sprint)
|
||||
5. Career insert grammar document (design-only sprint)
|
||||
|
||||
**Framing:** "Fix the screen first. Then ask if the game is fun."
|
||||
|
||||
---
|
||||
|
||||
### MELLANIE — Copy & Voice
|
||||
|
||||
**Keep:** Voice-card methodology (generalizes to all careers). Monologue as interior commentary on a legible world. Moral arc content patterns (generalize to all careers). Phase-gated monologue architecture.
|
||||
|
||||
**Change:**
|
||||
- Monologue job description: from "primary feedback mechanism" to "interior commentary on a legible world." Lines that **voice** (react to data the player already has) rather than **inform** (carry data).
|
||||
- Trigger catalog expansion: add life-event triggers (`job_event`, `relationship_shift`, `consequence_visible`, `financial_event`, `mission_outcome`) alongside existing perception events.
|
||||
- Subject matter expands: ordinary shift texture, relationship going well, something unresolved, small pleasures and irritations.
|
||||
- Scope: copy needed for the entire diegetic tool suite (mystery board, journal, AR overlays, comms, insert). Each tool has a distinct voice register per career.
|
||||
|
||||
**Kill:** Detective and smuggler as the only two voices. "Monologue is the tutorial." Investigation-only trigger vocabulary.
|
||||
|
||||
**Immediate recommendations:**
|
||||
1. Hold new monologue line-pool content until NPC legibility is solved
|
||||
2. Write full life-sim trigger catalog once Gestalt confirms event types
|
||||
3. Prototype one diegetic tool's copy alongside its visual design
|
||||
4. Confirm career bookmark list before writing new voice cards
|
||||
5. Keep existing voice cards as templates, not scope
|
||||
|
||||
**Vision:** Copy makes three of the four components of a life sim: person (distinct voice), place (environmental AR tone), consequences (character voices their weight). Choices are systems. But choices feel weighty when the voice is right.
|
||||
|
||||
---
|
||||
|
||||
## Cross-Domain Agreements (all 9 agents)
|
||||
|
||||
| Agreement | Unanimity |
|
||||
|-----------|-----------|
|
||||
| The simulation engine is correct and should not be rebuilt | All 9 |
|
||||
| NPC legibility is the prerequisite for all emotional payoffs | All 9 |
|
||||
| Career bookmarks replace seed variants as the primary architecture | All 9 |
|
||||
| Monologue demoted from primary to supplementary | All 9 |
|
||||
| Diegetic tool suite (mystery board, journal, insert, AR, comms) is CORE | All 9 |
|
||||
| "No objectives" was never a principle — it was missing tools | All 9 |
|
||||
| Detective/smuggler as the game's identity frame is dead | All 9 |
|
||||
| Visual hierarchy needed regardless of design reframe | All 9 |
|
||||
| Fix the player-world foundation before evaluating the loop | All 9 |
|
||||
|
||||
---
|
||||
|
||||
## Conflicts and Tensions Needing Resolution
|
||||
|
||||
### 1. First 30 Minutes: What Does It Actually Look Like?
|
||||
|
||||
Three agents have overlapping but non-identical visions for what the player does in the first 30 minutes:
|
||||
|
||||
- **Paula:** Phase Zero first — establish warmth with Kael, run clean jobs, see Naia. The arc needs an earned foundation.
|
||||
- **Ozzie:** First Day first — supervisor NPC, tool activation sequence, first assignment acknowledgment. The player needs a role.
|
||||
- **Miri:** Worldbuilding delivery first — the onboarding teaches the world by inhabiting it. The player needs a place.
|
||||
|
||||
These are compatible, not contradictory. But they imply different sequencing and emphasis within the first session. No one has designed the actual first-30-minutes beat sheet for v0.2. This needs a focused design session.
|
||||
|
||||
### 2. Career Bookmark List Is Not Confirmed
|
||||
|
||||
Multiple agents have assumed different career sets:
|
||||
- Gestalt mentions: detective, tycoon, smuggler, bar owner
|
||||
- Jeroen mentioned: law enforcement, tycoon (in interview)
|
||||
- Ozzie recommends law enforcement as the most legible first bookmark
|
||||
- Tyre recommends smuggler because most content exists
|
||||
|
||||
No canonical career list exists. Voice cards, visual insert designs, VerbPriorityProfiles, world state variables, and content pipelines all depend on a confirmed list. This is a blocker for Mellanie, Araminta, Gestalt, and Nigel.
|
||||
|
||||
### 3. Mission System Needs a Design Workshop
|
||||
|
||||
Tyre identified this as the most complex new system and flagged it explicitly: *"I'd want a design spec workshop for that before implementation."* No agent has designed the mission system in enough detail for implementation. The consequence engine, objective spectrum, failure modes, and world-state changes all need specification before a sprint can deliver them.
|
||||
|
||||
### 4. Gore's Endgame Vision Is v0.3+ But Needs Architectural Room Now
|
||||
|
||||
Gore's endgame proposal (legacy vs transcendence, the transhumanist ladder, civilizational crisis) is explicitly marked as v0.3+ design. But Gore notes: "the architecture decisions made in v0.2 need to leave room for it." No other agent addressed whether the current architecture supports this or whether specific decisions in v0.2 would foreclose it. This needs a flag from Tyre before v0.2 architecture decisions are finalized.
|
||||
|
||||
### 5. Setting Work vs Technical Work: Which Unlocks What?
|
||||
|
||||
Miri and Araminta both describe setting and visual legibility work that is partially design (identity docs, behavioral vocabulary) and partially implementation (tile palettes, NPC sprite differentiation). Tyre's roadmap accounts for NPC legibility data in the snapshot (server/client work) but doesn't account for the authored content and visual design work Miri and Araminta describe. The dependency chain isn't fully mapped.
|
||||
|
||||
---
|
||||
|
||||
## The Emerging v0.2 Vision
|
||||
|
||||
Synthesized from all 9 agents, a v0.2 that makes "the game" would need:
|
||||
|
||||
**Foundation (prerequisite for everything else):**
|
||||
- NPCs legible as people: archetype silhouettes, palette anchors, behavioral state reads, knowledge-gated name reveal
|
||||
- Sova Transit legible as a place: functional cluster palettes, ambient props, economic texture, three archetype types readable at a glance
|
||||
|
||||
**Structure (the new game architecture):**
|
||||
- Career bookmark selector (1 career fully designed for v0.2 — law enforcement or smuggler)
|
||||
- Career-specific job onboarding (scripted first session that teaches tools organically, establishes one FRIEND-figure, establishes community membership)
|
||||
- VerbPriorityProfile per career
|
||||
- Diegetic tool suite: thread tracker + journal live in the insert; monologue acts as commentary
|
||||
|
||||
**Loop (the moment-to-moment experience):**
|
||||
- Missions with consequence spectrums (not binary, consequences propagate into knowledge graph and relationships)
|
||||
- Career-specific monologue with life-event triggers (not just perception events)
|
||||
- One FRIEND-figure per career whose arc activates after Phase Zero is established
|
||||
|
||||
**Payoff (what the player looks back on):**
|
||||
- Persistent consequence state: the world remembers what the player did
|
||||
- Career-tagged news ticker reactions (5 headlines × 3 career reads)
|
||||
- One ownable asset with threat state (the Ownership Moment)
|
||||
|
||||
**Second-run:**
|
||||
- World state randomization ensures meta-knowledge doesn't trivialize replays
|
||||
- Career divergence produces structurally different games from the same simulation
|
||||
- The cross-career comparison (tycoon discovers they unknowingly financed the smuggling ring the detective was investigating) emerges from simulation, not design
|
||||
|
||||
---
|
||||
|
||||
## Ticket Candidates for Sprint 25+
|
||||
|
||||
The following were raised explicitly by agents as implementable items. Organized by phase:
|
||||
|
||||
### Phase 1 — Foundation (unblock everything)
|
||||
- `NPC legibility data in ObserverSnapshot` — display name (obfuscated), activity label, emotional state, relationship summary (server 3-5d, client 5-7d) [Tyre]
|
||||
- `Character archetype palette system` — silhouettes, palette anchors per archetype (1 sprint) [Araminta]
|
||||
- `Functional cluster palette system` — color temperature per zone type + ambient props (1 sprint, parallel) [Araminta]
|
||||
- `HUD hierarchy enforcement sweep` — assign all existing signals to a tier (2 weeks) [Araminta]
|
||||
- `Fog edge fix` — pure visual bug, no mechanical dimension (days) [Araminta]
|
||||
- `Sova Transit place identity document` — visual markers, behavioral vocabulary, audio anchors (1 sprint) [Miri]
|
||||
- `NPC archetype visual spec` — 3 types at tile scale (1 sprint, collaborative Araminta/Miri)
|
||||
|
||||
### Phase 2 — Player Tools
|
||||
- `Thread tracker` — read-only knowledge graph surface, active contradictions as diegetic threads (server 1w, client 1w) [Tyre]
|
||||
- `Journal / knowledge log` — structured record of character knowledge (server 1w, client 1w) [Tyre]
|
||||
- `VerbPriorityProfile refactor` — job-aware verb priority, replaces static Section 4 spec (moderate server work) [Gestalt]
|
||||
- `Bookmark definition loader` — `BookmarkDefinition` resource, starting knowledge/relationships/tool loadout (server 1w) [Tyre]
|
||||
- `Career insert grammar document` — design-only, defines visual HUD language for all career paths (design sprint) [Araminta]
|
||||
- `UI anchoring sweep` — context menu chrome, stance indicator anchor, monologue spatial anchor (1 sprint) [Araminta]
|
||||
|
||||
### Phase 3 — Player Purpose
|
||||
- `Mission system core` — `MissionState`, objective tracking, outcome spectrum (server 3-4w) [Tyre] — *requires design workshop first*
|
||||
- `Consequence engine` — maps outcome scores to world-state changes, feeds knowledge graph and relationships (server 2-3w) [Tyre]
|
||||
- `Onboarding sequence framework` — server-driven scripted event system for first session (server 2w framework) [Tyre]
|
||||
- `Two bookmark onboarding arcs` — law enforcement + smuggler, each worldbuilding-first (2 sprints, collaborative Gestalt/Paula/Miri/Mellanie) [Miri]
|
||||
- `Comms system` — in-world message delivery (server 1w, client 1w) [Tyre]
|
||||
- `Phase Zero smuggler content` — warmth-establishing monologue lines, Kael/Naia first-impression content [Mellanie/Paula]
|
||||
- `Career-tagged ticker reactions` — 5 headlines × 3 career reactions = 15 lines [Ozzie/Mellanie]
|
||||
- `Economic texture layer` — authored wages, rents, span gate access fees visible in world [Miri]
|
||||
- `Behavioral vocabulary spec` — what routines look like when communicating setting [Miri/Gestalt]
|
||||
|
||||
### Design Work (no implementation until specified)
|
||||
- `Mission system design workshop` — before any mission system implementation [Tyre flag]
|
||||
- `Career bookmark list confirmation` — blocks voice cards, visual insert designs, VerbPriorityProfiles [All agents]
|
||||
- `v0.2 first-30-minutes beat sheet` — unified design across Paula (Phase Zero), Ozzie (First Day), Miri (worldbuilding) [Needs workshop]
|
||||
- `Gore endgame architecture review` — confirm v0.2 decisions don't foreclose legacy/transcendence paths [Gore/Tyre]
|
||||
|
||||
---
|
||||
|
||||
## Open Questions From Round 3
|
||||
|
||||
**Q-WTF-005:** What is the confirmed career bookmark list for v0.2?
|
||||
- Blocks: voice cards (Mellanie), VerbPriorityProfiles (Gestalt), visual insert grammar (Araminta), world state variables (Nigel), onboarding arcs (Miri/Paula)
|
||||
|
||||
**Q-WTF-006:** What does the first 30 minutes of a career onboarding arc actually look like, beat by beat?
|
||||
- Needs reconciliation across Paula (Phase Zero), Ozzie (First Day), Miri (worldbuilding delivery)
|
||||
|
||||
**Q-WTF-007:** Does the v0.2 architecture leave room for Gore's endgame (legacy vs transcendence, transhumanist ladder)?
|
||||
- Needs Tyre review before v0.2 architecture is finalized
|
||||
|
||||
**Q-WTF-008:** Which career bookmark gets fully designed for the v0.2 vertical slice — law enforcement (Ozzie: "most legible for first run") or smuggler (Tyre: "most content exists")?
|
||||
|
||||
---
|
||||
|
||||
*Record: all 9 Round 3 files reviewed. No Round 4 outputs exist yet. Round 4 (synthesis) is the next step — agents read each other's proposals and identify agreements, conflicts, and a single most important recommendation.*
|
||||
@@ -0,0 +1,400 @@
|
||||
# Round 4 Notes — Cross-Review and Refinement
|
||||
## Where's the Fun? Workshop | 2026-03-05
|
||||
|
||||
**Documented by:** Qatux (Documenter & Librarian)
|
||||
**Based on:** All 9 Round 4 agent files (round4-gestalt.md through round4-mellanie.md)
|
||||
**Prior round notes:** round-3-notes.md, round-1-notes.md
|
||||
|
||||
---
|
||||
|
||||
## For the Record
|
||||
|
||||
Round 4 was cross-review: each agent read all other agents' Round 3 proposals and produced (a) reactions, (b) endorsements and complications, (c) specific questions for Jeroen, and (d) a single most important recommendation. The round confirms the Round 3 consensus while deepening its implications significantly — and surfaces a new layer of upstream decisions that must be resolved before implementation can proceed.
|
||||
|
||||
**Headline finding:** The consensus is real, unanimous, and structurally sound. The risk is not that agents disagree; it is that the first 30 minutes is being designed by four separate domains simultaneously without a unified beat sheet, and that several upstream design decisions are currently blocking content work, voice work, visual design work, and architecture work in parallel.
|
||||
|
||||
---
|
||||
|
||||
## Round 4 Per-Agent Positions
|
||||
|
||||
### GESTALT (Systems Design)
|
||||
**Strongly endorses:** Tyre's framing ("life-sim engine shipped with detective-game UI"), Gore's complicity reframe, Paula's Phase Zero, Araminta's "fix the screen first," Mellanie's content-hold, Ozzie's emergent wow moments.
|
||||
|
||||
**Gap identified:** The skills-verb coupling is completely undesigned. Three possible models (skills affect verb *priority*, *availability*, or *outcome*) produce completely different gameplay experiences. This decision is upstream of: the verb spec, VerbPriorityProfile, character creation UI, content authoring triggers, visual grammar for skill indicators, and onboarding arc design.
|
||||
|
||||
**Additional gap:** The three career model rhythms (Active/WFH/Gig) require different storyteller pressure calibration. A Gig player between jobs and an Active worker mid-shift are both "quiet" — but only one needs the storyteller to do something about it.
|
||||
|
||||
**Flags:** Tyre and Ozzie disagree on which career to build first (smuggler vs law enforcement). The supplement resolves format but not career. Q-WTF-008 remains open and must close before Round 4 does.
|
||||
|
||||
**Single most important recommendation:** Decide the skills-verb coupling before any other content work resumes.
|
||||
|
||||
---
|
||||
|
||||
### OZZIE (Player Experience & Wow Factor)
|
||||
**New observation:** Round 3's unanimous consensus masks an unresolved sequencing problem. Three agents (Paula, Ozzie, Miri) each described a different "first thing" for the first 30 minutes. These are compatible but imply a beat sheet nobody wrote.
|
||||
|
||||
**Strongly endorses:** Gestalt's VerbPriorityProfile ("my 'Character's Instinct' moment fires through career-specific observation verbs"), Gore's "consequence" framing ("you didn't solve a puzzle, you LIVED here, and living has consequence"), Nigel's three replayability layers (maps to wow moments from different angles), Miri+Araminta coupling (visual without worldbuilding rationale fights itself), Tyre's "easy, the data exists, just send it," Mellanie's "voice that voices rather than informs."
|
||||
|
||||
**New gap identified:** Nobody designed character creation as an emotional experience. CK3's character creation makes the player invest before they play. If character creation is more fundamental than bookmark choice, it needs to be designed as a wow moment — "Wow Moment Zero." Whether the player feels like *a person* in character creation or later in the world is the question.
|
||||
|
||||
**Single most important recommendation:** Design the first 30 minutes as a unified arc, not a domain portfolio. Beat sheet proposed:
|
||||
1. Character creation (Wow Moment Zero — you made a person)
|
||||
2. Day 1 alarm clock (world anchors you in time and space)
|
||||
3. Appointment arrival (supervisor, community, first look at tools)
|
||||
4. Insert activation (career lens on the world, visual + functional)
|
||||
5. First work moment (the world responds to you doing the job)
|
||||
6. First anomaly/texture beat (Phase Zero warmth OR setting sensory moment OR insert flags something)
|
||||
7. First consequence seed (a choice made here that echoes later)
|
||||
|
||||
---
|
||||
|
||||
### PAULA (Narrative Design)
|
||||
**Strongly endorses:** Ozzie's wow moments ("First Day" and Phase Zero are the same beat from different angles), Gestalt's VerbPriorityProfile (smuggler Phase Zero should be watch-first, talk-later — supports arc pacing), Mellanie's "interior commentary" monologue framing, Tyre's roadmap.
|
||||
|
||||
**Complicates Gore:** "Consequence" as universal theme is correct. "Complicity" survives as the specific register for entanglement careers (smuggler, fixer, dirty precinct officer). They're not in conflict — they operate at different scopes. Aspiration/ambition is the dominant register for building careers (tycoon, entrepreneur). The emotional arc generalizes; the thematic register varies by career.
|
||||
|
||||
**Advocates smuggler as second bookmark** (alongside law enforcement) — most designed emotional depth exists for that path (Kael, Naia, 4-phase arc, FRIEND pattern). Together they offer maximum contrast: same world, opposite knowledge states, opposite moral positions.
|
||||
|
||||
**Flags dependency:** Phase Zero warmth lines and NPC visual design need to be co-specified, not sequenced (visual first, content second). Kael's monologue warmth must reference how Kael looks and moves, or the character sounds different from how they appear.
|
||||
|
||||
**Single most important recommendation:** Design Phase Zero and "First Day" as the same thing. One designed beat. Four payoffs (belonging, FRIEND figure, tools, world texture).
|
||||
|
||||
---
|
||||
|
||||
### GORE (Themes & Endgame)
|
||||
**Endorses:** Paula's Phase Zero (correctly named: it's the period of complacency before contamination), Ozzie's Ownership Moment (consequence and complicity converging without pre-authoring), Nigel's cross-career emergent discovery (assembles through the knowledge graph, not as a served twist), Mellanie's "voice that voices" framing, Miri's setting legibility lesson.
|
||||
|
||||
**Supplement response — Kenshi insight:** Phase 1 (uncaring world) is Kenshi-weight: the world is indifferent, the weight is yours alone. Phase 2 (authored content) is social-weight: the world begins to respond to your choices. The two-phase model isn't just technical sequencing — it's the thematic arc. The seam between them is where complicity activates and must be *designed* as a felt threshold, not left invisible.
|
||||
|
||||
**Primary near-miss risk:** If Phase 1 runs long enough that the player emotionally settles into indifference — "this world runs without me" — Phase 2's moral weight will feel like an intrusion rather than escalation. Phase 1 must establish latent responsiveness (small signals: NPC who remembers you came yesterday, a shop where prices shifted) so that Phase 2's authored escalation reads as natural consequence of having paid attention.
|
||||
|
||||
**Single most important recommendation:** Don't let the Phase 1 uncaring world become the game's default emotional register. Phase 1 must say "this world responds if you engage," not "this world runs without you."
|
||||
|
||||
---
|
||||
|
||||
### NIGEL (Sandbox & Replayability)
|
||||
**Endorses:** VerbPriorityProfile (replayability infrastructure), Ownership Moment (consequence cascade machine, best replay-desire generator), Gore's consequence framing (thematically coherent with cascade architecture), Tyre's mission-system warning, Mellanie's content hold, Miri's career-divergent worldbuilding.
|
||||
|
||||
**Supplement response:** Character creation preceding career changes the replayability math. Career divergence was the assumed spine; now it's career × meaningful build combinations. High-social law enforcement and high-hacking law enforcement may be structurally different games, not just tactical variations. This is the distinction that matters architecturally.
|
||||
|
||||
**Near-miss risk:** Career-aware authored content distribution is harder than world-state variation. If authored content is placed distribution-first (career only determines the lens on what's there), two law enforcement runs hit the same authored skeleton — within-career replayability only. For the cross-career comparison test (tycoon financed the ring the detective investigated), content placement must be career-aware. Both models are needed; the harder one must be designed deliberately.
|
||||
|
||||
**Clean start risk:** Phase 1 uncaring world may not generate enough ambient pull for a clean-start player without authored onboarding content. Clean start should not ship until one bookmarked career is fully working and the world is legible enough to be read without structured introduction.
|
||||
|
||||
**Single most important recommendation:** Confirm the career bookmark list before any implementation work begins. It blocks: VerbPriorityProfile specs, world state variable design, consequence engine scope, onboarding arc authorship, and everything downstream.
|
||||
|
||||
---
|
||||
|
||||
### MIRI (Worldbuilding & Setting)
|
||||
**Endorses:** VerbPriorityProfile (adds: verb priority is a world-legibility problem — the world should respond to a Commission officer's authority before they even use a verb), Ozzie's First Day and Ownership Moment (both setting-dependent: "I belong somewhere" requires "somewhere" to read as specific, Ownership requires economic texture).
|
||||
|
||||
**New gap identified:** The generator needs worldbuilding rules to produce Sova Transit specifically, not generic sci-fi urban space. Cities Skylines produces legible city space because its zone rules encode what residential/commercial/industrial look like. This project needs equivalent rules: what does a logistics zone in a working-class transit district *mean* in the Settled Reach's social vocabulary? This spec is upstream of Araminta's tiles, Tyre's snapshot data, Mellanie's first monologue line.
|
||||
|
||||
**Groundhog Day implication:** Paula's Phase Zero is not a separate designed beat — it IS the first several days of the career onboarding arc, expressed through the Groundhog Day cadence.
|
||||
|
||||
**First-frame requirement:** Before the calendar ping resolves, before any NPC interaction, the visual frame must communicate "this is Sova Transit, and you live here." The career insert's first activation is also part of this first frame.
|
||||
|
||||
**Single most important recommendation:** Write the zone identity spec before the generator runs. One document, one sprint, unlocks the entire Phase 1 foundation. Same document as the Sova Transit place identity spec from Round 3 — naming the dependency more precisely.
|
||||
|
||||
---
|
||||
|
||||
### TYRE (Technical Architect)
|
||||
**Endorses all of Round 3 consensus** on architectural grounds. Technical assessment:
|
||||
- VerbPriorityProfile: ~1 week server work, moderate change, highest teaching value per engineering effort
|
||||
- "The Consequence": CauseChain already designed in D-030; extension is easier than it sounds
|
||||
- Phase Zero gate: trivial to implement architecturally; hard part is content authorship
|
||||
- Gore's endgame room: current architecture already leaves it open (no v0.2 decisions foreclose it); flag `skill_ceiling` as extensible toward transhumanist upgrades
|
||||
|
||||
**Supplement response:** Revised estimate to 6-10 sprints for full buildout — too long without a playable proof point. Three new systems not in Round 3 scope: CK3 character creation, three career models, world-first generator pipeline.
|
||||
|
||||
**Primary proposal:** Proof-of-life sprint before full buildout:
|
||||
1. Hand-built Sova Transit with NPC routines and economy (Tier A world)
|
||||
2. One career bookmark (law enforcement preferred — institutional onboarding is the most natural diegetic tutorial), moderate character creation
|
||||
3. NPC legibility
|
||||
4. One diegetic tool (thread tracker or journal)
|
||||
5. Three days: onboarding → first assignment → first consequence
|
||||
|
||||
**Career bookmark vote revised:** Law enforcement over smuggler (institutional onboarding teaches the world most naturally; smuggler content was authored for detective-game context and needs rework anyway).
|
||||
|
||||
**Minimum viable uncaring world spectrum:**
|
||||
- Tier A (hand-built): 2-3 sprints. Same Sova Transit every game, different world-state variables at start.
|
||||
- Tier B (template-generated): 4-6 sprints. Procedural layout, same district character.
|
||||
- Tier C (fully procedural): 8-12+ sprints. New world every game.
|
||||
|
||||
**Single most important recommendation:** Build the smallest possible proof before building the full vision. Pour the foundation; test it; then build the cathedral.
|
||||
|
||||
---
|
||||
|
||||
### ARAMINTA (Visual Design)
|
||||
**Endorses:** Tyre's Phase 1 roadmap (NPC legibility in snapshot unblocks everything visual), Miri/Araminta co-authorship proposal (one document, two sections — place identity and character archetype are not independent), Ozzie's wow moments as visual design specifications, Mellanie co-design on insert grammar.
|
||||
|
||||
**New scope additions:** Verb prompt visual treatment per career ([E] label needs to match the career context — authority, social network, remote access); this is a gap in Round 3 that Gestalt's VerbPriorityProfile work reveals.
|
||||
|
||||
**Reframes insert activation:** The moment your law enforcement insert activates with Commission blue and case-file aesthetic is itself a wow moment. The visual First Day. This should be listed as Ozzie's Moment 1b.
|
||||
|
||||
**Groundhog Day implication:** The first visual frame (before any interaction) is now critical for setting legibility. The insert AR overlay and the physical world both speak in that first frame — these are different production problems.
|
||||
|
||||
**Character appearance question:** Strong preference for Option B (archetype palette) over Option A (full appearance customization): archetype silhouettes are more legible at tile scale; cultural richness communicates better through place and behavior than through individual NPC appearance variation at this resolution.
|
||||
|
||||
**Single most important recommendation:** Confirm the career bookmark list. It blocks the career insert grammar document, which blocks every other Phase 2 visual deliverable.
|
||||
|
||||
---
|
||||
|
||||
### MELLANIE (Copy & Voice)
|
||||
**Agrees with:** Paula (Phase Zero is right; Phase Zero content is the *first* copy deliverable), Araminta (spatial anchoring before any monologue content push — confirmed by Q9 of the interview), Ozzie (the "Character's Instinct" framing — noticing, not telling), Gestalt (VerbPriorityProfiles affect trigger catalog — anomaly triggers must match what each career's verb profile surfaces), Nigel (cross-career comparison requires voice cards distinctive enough that the same event reads utterly differently).
|
||||
|
||||
**Core tension identified — voice attribution problem:** The CK3 model says character creation is more fundamental than job. But current voice cards are job-voices. A Krenn-background social manipulator and a military-background enforcer both take law enforcement — same toolbox, different people. Do they share a voice card? If voice comes from character creation, career-level voice cards are the wrong abstraction. This could be a combinatorial explosion or a parametric register model. Needs a decision before more voice card work is produced.
|
||||
|
||||
**Three career model monologue rhythms:** Active (ambient shift commentary, continuous), WFH/Remote (focused inner monologue about the work in isolation), Gig (episodic decision-making, pre/in/post-job). The trigger catalog as proposed was written for Gig. Active and Remote require different trigger architecture.
|
||||
|
||||
**Phase 1 content gap:** Phase 1 monologue (pure life-texture — "another shift, the recycled air still costs more on the dock floor") and Phase 2 monologue (anomaly and consequence commentary) are distinct content types requiring distinct trigger logic. If Phase 2 content is written first (more interesting to write), the pool will be full of dramatic consequence lines with no life-texture underneath. Phase Zero content is Phase 1 monologue; it must be written first.
|
||||
|
||||
**Single most important recommendation:** Confirm the voice attribution model before writing any new voice cards. One week to write the design spec; weeks to untangle if wrong.
|
||||
|
||||
---
|
||||
|
||||
## Cross-Domain Agreements (all 9 agents)
|
||||
|
||||
| Agreement | Status in Round 4 |
|
||||
|-----------|------------------|
|
||||
| NPC legibility is prerequisite #1 | Unanimous — and now sequenced precisely: Miri archetype spec → server snapshot + Araminta visual → client rendering (parallel branches from Miri's spec) |
|
||||
| Monologue demoted to supplementary | Unanimous — Mellanie adds: Phase 1 life-texture content must be written before Phase 2 dramatic content, not after |
|
||||
| Career bookmarks replace seed variants as primary structure | Unanimous — now complicated by character creation preceding career in the CK3 model |
|
||||
| Diegetic tool suite is core, not aspirational | Unanimous — Tyre confirms CauseChain already exists for the Consequence tool |
|
||||
| VerbPriorityProfile per career | 8/9 endorsements; only not addressed by Mellanie (who agrees via trigger catalog coupling) |
|
||||
| Phase Zero before moral arc | 8/9 explicit endorsements; Araminta adds "character legibility before Phase Zero" as the actual sequence |
|
||||
| Proof-of-life before full buildout | Tyre proposes; Gore, Nigel, Mellanie all support the principle if not the specific formulation |
|
||||
| Career bookmark list must be confirmed before downstream work | 5 agents explicitly name this as a blocker: Nigel, Araminta, Gestalt, Mellanie, Paula |
|
||||
|
||||
---
|
||||
|
||||
## New Convergences Identified in Round 4
|
||||
|
||||
### Convergence 1: The First 30 Minutes Are The Same Beat
|
||||
|
||||
Paula's Phase Zero + Ozzie's First Day + Gestalt's diegetic insert onboarding + Miri's worldbuilding delivery through inhabiting = the same designed beat, described by four agents from four different domains. Ozzie names this explicitly and proposes a unified beat sheet (see above). Paula concurs. This is the most important structural finding of Round 4.
|
||||
|
||||
**Risk if unaddressed:** Four deliverables arrive from four domains that don't know about each other. The first 30 minutes is incoherent even if each component is excellent.
|
||||
|
||||
### Convergence 2: Phase 1 / Phase 2 Seam Is a Design Problem, Not Just an Architecture Problem
|
||||
|
||||
Gore (emotional register seam), Gestalt (Q2: is Phase 1 a player experience or dev concept?), Mellanie (Phase 1 content vs Phase 2 content are different types), Miri (generator must produce Settled Reach, not generic space, in Phase 1), Paula (Phase Zero is Phase 1 authored content, not a prologue). All five are describing the same design problem: the seam between uncaring-world and authored-content phases must be designed as a felt threshold, and Phase 1 must establish latent responsiveness rather than indifference.
|
||||
|
||||
**Gore's framing (precise):** Phase 1 is Kenshi-weight (you know what you did; the world doesn't respond). Phase 2 is social-weight (the world begins to respond). The transition is where complicity activates. It must not be invisible.
|
||||
|
||||
### Convergence 3: Character Creation Precedes Career — And Nobody Designed It
|
||||
|
||||
Gestalt (skills-verb coupling undesigned), Ozzie (character creation as Wow Moment Zero), Paula (does character background change moral arc voice?), Nigel (career × build combinations = much larger replayability space), Mellanie (voice attribution problem — job voice vs character creation voice), Araminta (appearance system vs archetype palette). Six agents identify that the CK3 character creation model, confirmed in the supplement, creates upstream design gaps that nobody addressed in Round 3.
|
||||
|
||||
**The specific unresolved items:**
|
||||
- Skills → verbs: priority, availability, or outcome? (Gestalt)
|
||||
- Voice register: determined by job or character creation? (Mellanie, Paula)
|
||||
- Character appearance: appearance system or archetype palette? (Araminta)
|
||||
- Character build: structural divergence within career or tactical variation? (Nigel)
|
||||
|
||||
---
|
||||
|
||||
## Conflicts Requiring Resolution
|
||||
|
||||
| Conflict | Agents | Current State |
|
||||
|----------|--------|---------------|
|
||||
| Which bookmark for v0.2? | Tyre (revised to law enforcement), Ozzie (law enforcement), Paula (smuggler), Gestalt (unresolved) | Paula proposes: both, law enforcement first for scaffolding then smuggler for depth. Tyre revised away from smuggler in Round 4. Needs Jeroen's call. |
|
||||
| "Consequence" vs "complicity" as organizing theme | Gore (consequence), Paula (both: consequence universal, complicity career-specific register) | Paula's nuance resolves this as non-conflict: not either/or, but scope. Consequence governs the universal. Complicity governs the entanglement register. |
|
||||
| Phase 1 monologue: life-texture (Phase Zero content) or no monologue until Phase 2? | Mellanie Q2 | Unresolved. Directly affects what Mellanie writes first. |
|
||||
| Career-aware authored content vs distribution-first | Nigel Q2 | Unresolved. Affects storyteller scope significantly. |
|
||||
| Minimum viable uncaring world: Tier A/B/C | Tyre Q1 | Unresolved. 6-sprint gap between Tier A and Tier B. |
|
||||
|
||||
---
|
||||
|
||||
## Near-Miss Risks Flagged by Multiple Agents
|
||||
|
||||
### Risk 1: Four-Domain First-30-Minutes (Critical)
|
||||
Paula, Ozzie, Gestalt, Miri each designing the opening arc from their own domain without a unified beat sheet. **Flagged by:** Ozzie (#1 recommendation), Paula (#1 recommendation). **Risk:** Excellent components that produce an incoherent experience.
|
||||
|
||||
### Risk 2: Phase 1 Indifference Trap
|
||||
If Phase 1 (uncaring world) establishes emotional indifference as the default register, Phase 2's moral weight lands as intrusion rather than escalation. **Flagged by:** Gore (#1 recommendation), Gestalt (Q2), Mellanie (content gap). **Fix:** Phase 1 must establish latent responsiveness (world notices you exist) before Phase 2 authored content targets you specifically.
|
||||
|
||||
### Risk 3: Building Too Much Before Testing
|
||||
The supplement added three major new systems. 6-10 sprints to first playtest is too long — reproduces the v0.1 error. **Flagged by:** Tyre (#1 recommendation). **Fix:** Proof-of-life sprint (hand-built world, one bookmark, NPC legibility, one diegetic tool, three-day arc). Test the fun hypothesis before building the cathedral.
|
||||
|
||||
### Risk 4: Content Written on Wrong Assumptions
|
||||
v0.1 content was written for a world that didn't exist. v0.2 risk: content written before voice model, career model, and character creation scope are confirmed. **Flagged by:** Mellanie (#1 recommendation), Paula (co-spec dependency), Gestalt (skills-verb coupling). **Fix:** Confirm design decisions before content production resumes.
|
||||
|
||||
### Risk 5: Clean Start as Accessibility Trap
|
||||
"Experienced player warning" may be insufficient to prevent first-run players choosing clean start because it sounds like freedom. Clean-start has no authored onboarding and may recreate the v0.1 wall. **Flagged by:** Ozzie (Q2), Nigel. **Fix:** Ship clean start after one bookmarked career is fully working. Warning must be strong enough to redirect without feeling like a rebuke.
|
||||
|
||||
### Risk 6: Career-Unaware Authored Content
|
||||
If the storyteller places authored ingredients without career awareness, two different career runs hit the same authored skeleton. The cross-career comparison test (tycoon financed the ring the detective investigated) requires career-aware content distribution. **Flagged by:** Nigel. **Fix:** Design career-aware distribution explicitly; don't assume it emerges from the lens system.
|
||||
|
||||
### Risk 7: NPC Legibility Data and Visual System Non-Synchronized
|
||||
Either without the other delivers no value. Server NPC legibility in ObserverSnapshot must ship simultaneously with client archetype visual system. **Flagged by:** Araminta (#1 priority note), Tyre (dependency diagram). **Fix:** Sprint plan must treat these as a paired deliverable, not independent tracks.
|
||||
|
||||
### Risk 8: Career Archetypes Designed for the Binary
|
||||
If archetype visual design is optimized for detective/smuggler (suit-and-trenchcoat, dockworker) it becomes technically legible but visually wrong for a multi-career life sim. **Flagged by:** Araminta (Q3). **Fix:** Design archetypes that generalize to the confirmed career list, which must be established first.
|
||||
|
||||
---
|
||||
|
||||
## Aggregated Questions for Jeroen
|
||||
|
||||
These are the questions across all 9 agents, clustered by theme. The sharpest are marked with ★.
|
||||
|
||||
### Character Creation Architecture
|
||||
- ★ **Skills → verbs:** Do character skills affect verb *priority* (socially skilled players default to Talk across all jobs), *availability* (hacking skill gates the Hack verb), or *outcome* (verbs identical, skill determines success)? Or all three in different situations? (Gestalt)
|
||||
- **Character build vs career:** Within a career, does skill build produce structural divergence (high-social vs high-hacking law enforcement are different games) or tactical variation (same case structure, different methods)? (Nigel)
|
||||
- **Character creation scope for v0.2:** Minimal (bookmark IS the character), Moderate (bookmark + skill allocation), or Full CK3 (family/culture/religion)? (Tyre)
|
||||
- **Character creation as wow moment:** Does the player feel like *a person* at the end of character creation, or does that feeling arrive in the world? (Ozzie)
|
||||
- **Appearance:** Layered appearance system (player-defined, culturally varied NPCs) or archetype palette (silhouettes readable at tile scale, culture expressed through place and behavior)? (Araminta)
|
||||
|
||||
### Voice Model
|
||||
- ★ **Voice attribution:** Does character creation (culture/skill/background) determine voice register, or does job determine it? Or does job provide the base register and character creation add modifiers? (Mellanie, Paula)
|
||||
- **Moral arc voice vs pace:** Does character background change the *voice* of moral arc phases (two smugglers sound different because of their backgrounds) or only the pace at which phases progress? (Paula)
|
||||
|
||||
### Career Model and Scope
|
||||
- ★ **Career model for v0.2:** Active, WFH/Remote, or Gig/Freelance? Or one bookmark that blends all three (e.g., smuggler: Active onboarding → Gig runs → WFH coordination)? (Tyre, Mellanie, Gestalt)
|
||||
- **Which bookmark for v0.2:** Law enforcement or smuggler (or both)? (Q-WTF-008, multiple agents)
|
||||
- **Career model rhythm and storyteller:** Should the storyteller understand which career model the player is operating in and adjust its pressure clock accordingly? (Gestalt)
|
||||
|
||||
### Phase 1 / Phase 2 Architecture
|
||||
- ★ **Minimum viable uncaring world:** Tier A (hand-built Sova Transit, 2-3 sprints), Tier B (template-generated, 4-6 sprints), or Tier C (fully procedural, 8-12+ sprints)? For v0.2 vertical slice, can Tier A prove the life sim concept? (Tyre)
|
||||
- ★ **Phase 1 as player experience:** Is the "uncaring world" phase only a dev-sequencing concept, or is it also what the player experiences at the start of every session? After the player has established their career and FRIEND — on day 50 — does the Groundhog Day structure still mean "quiet phase then potential escalation," or has the world permanently graduated to Phase 2? (Gestalt)
|
||||
- **Phase 1 monologue:** Does Phase 1 need life-texture monologue from the start, or does it run silent until Phase 2 authored events arrive? (Mellanie)
|
||||
- **Phase 1→2 seam:** Is the transition from uncaring world to authored content a designed felt threshold, or invisible scaffolding? What triggers it? (Gore)
|
||||
- **Kenshi-weight vs social-weight:** Does consequence govern primarily internally (you know what you did, the world continues regardless — Kenshi model) or socially (the world notices, relationships and factions respond — Sims/CK3 model)? Does the answer vary by career? (Gore)
|
||||
|
||||
### Specific Design Questions
|
||||
- **Kael: named or role template?** In the generator model, does the smuggler bookmark always assign Kael Davan to the dock-contact role (authored, hand-placed), or does the generator assign *whoever is in the appropriate social position* to a FRIEND-figure template? (Paula)
|
||||
- **Phase Zero architecture:** Is Phase Zero a designed arc (scripted beats across N days), an emergent threshold (relationship metric), or a hybrid (scripted Day 1 + organic accumulation)? (Paula)
|
||||
- **Career-aware content placement:** Does the storyteller seed different authored ingredients per career, or does it place all ingredients and career determines the lens? (Nigel)
|
||||
- **Clean start mode:** Sandbox (experienced players who know the world want unstructured play) or second-run mode (players who've done a bookmarked first run want to find their own threads)? (Nigel, Ozzie)
|
||||
- **Groundhog Day and Consequence:** How does the player *feel* the weight of previous days in a structure that foregrounds the new day? What is the in-world mechanism for "yesterday happened"? (Ozzie)
|
||||
- **Transhumanist ceiling:** Does the CK3 skill system need a `skill_ceiling` concept that going Higher breaks through, or should it be inherently extensible (budget revisable upward by the world)? Is going Higher a modification of the existing character model or a replacement? (Gore)
|
||||
|
||||
### Setting and Visual
|
||||
- **What does the generator need to know:** Is the zone type taxonomy sufficient to produce Sova Transit's character, or does the generator need a district identity spec (zone rules encoding social vocabulary)? (Miri)
|
||||
- **First visual frame:** Insert AR overlay (authored copy, fast path) or physical world (Araminta + Miri, higher art dependency)? Or both simultaneously? (Miri)
|
||||
- **Settled Reach distinctiveness:** What element in the first session is only possible in this world? Which should be designed as the "first distinctively Settled Reach moment"? (Miri)
|
||||
|
||||
---
|
||||
|
||||
## New Open Questions (Round 4)
|
||||
|
||||
Adding to the Q-WTF series from Round 3 notes (Q-WTF-001 through Q-WTF-008):
|
||||
|
||||
**Q-WTF-009:** Do character skills affect verb priority, availability, or outcome? (Gestalt — upstream of verb spec, VerbPriorityProfile, and all content authoring)
|
||||
|
||||
**Q-WTF-010:** Is Phase 1 "uncaring world" a per-session player experience or a dev-sequencing concept only? (Gestalt, Gore, Mellanie — upstream of storyteller design and monologue trigger architecture)
|
||||
|
||||
**Q-WTF-011:** Does character creation (culture/skill/background) determine voice register, or does job? (Mellanie, Paula — upstream of all voice card work)
|
||||
|
||||
**Q-WTF-012:** Minimum viable uncaring world for v0.2 vertical slice: Tier A/B/C? (Tyre — 6+ sprint gap between answers)
|
||||
|
||||
**Q-WTF-013:** v0.2 character creation scope: minimal / moderate / full CK3? (Tyre — 1-week to 6-week gap between answers)
|
||||
|
||||
**Q-WTF-014:** v0.2 career model: one model proving the concept, or all three? Which model? (Tyre, Mellanie, Gestalt — blocks monologue trigger catalog, storyteller calibration, content scope)
|
||||
|
||||
**Q-WTF-015:** Is Kael always Kael (named placement), or a role the generator fills (template)? (Paula — determines content architecture: authored-specific vs template-based)
|
||||
|
||||
**Q-WTF-016:** Is Phase Zero a designed arc (scripted beats), an emergent threshold (relationship metric), or a hybrid? (Paula — determines what content to write and in what order)
|
||||
|
||||
**Q-WTF-017:** Kenshi-weight vs social-weight consequence: which governs, and does it vary by career? (Gore — determines Phase 1 emotional register and Phase 2 escalation design)
|
||||
|
||||
**Q-WTF-018:** Is the Phase 1→2 seam a designed felt threshold or invisible scaffolding? What triggers it? (Gore — if invisible, near-miss risk of authored content feeling like a bug)
|
||||
|
||||
**Q-WTF-019:** Does character build produce structural divergence within a career (different games) or tactical variation (different playstyle, same structure)? (Nigel — determines replayability scope and character creation investment)
|
||||
|
||||
**Q-WTF-020:** Does the storyteller place authored content career-aware, or distribution-first with career as the lens? (Nigel — determines whether cross-career comparison test is structurally achievable or emergent)
|
||||
|
||||
**Q-WTF-021:** Is clean start mode sandbox (experienced player power-user mode) or second-run mode (player who's done one bookmarked run)? (Nigel, Ozzie — determines design targets for that mode)
|
||||
|
||||
**Q-WTF-022:** What does the generator need to know to produce "the Settled Reach" rather than generic sci-fi? Is zone type taxonomy sufficient, or does it need a district identity spec? (Miri — upstream of Tier B/C world generation)
|
||||
|
||||
**Q-WTF-023:** Character appearance: appearance system (layered, culturally varied) or archetype palette (silhouettes readable at tile scale)? (Araminta)
|
||||
|
||||
**Q-WTF-024:** Does the Groundhog Day structure mute the Consequence moment? What is the in-world mechanism for "yesterday happened"? (Ozzie)
|
||||
|
||||
**Q-WTF-025:** Is character creation itself a wow moment (Wow Moment Zero), or does the "I am a person" feeling arrive later in the world? (Ozzie)
|
||||
|
||||
**Q-WTF-026:** Does Phase 1 need life-texture monologue, or does it run silent? (Mellanie)
|
||||
|
||||
---
|
||||
|
||||
## Blocking Dependencies Map
|
||||
|
||||
The following diagram represents the blocking relationships agents collectively described:
|
||||
|
||||
```
|
||||
Jeroen answers Q-WTF-008 (which bookmark first)
|
||||
↓
|
||||
Career bookmark list confirmed (Q-WTF-005)
|
||||
├── Miri: Sova Transit zone identity spec / archetype definitions
|
||||
│ ├── Server: NPC legibility data in ObserverSnapshot (Tyre)
|
||||
│ │ └── Client: Character archetype visual system (Araminta) ← must ship together
|
||||
│ ├── Araminta: Career insert grammar document (co-authored with Mellanie)
|
||||
│ └── Tyre: Phase 1 roadmap complete
|
||||
└── Gestalt: VerbPriorityProfile spec
|
||||
└── Mellanie: Anomaly trigger catalog (career-tagged)
|
||||
|
||||
Jeroen answers Q-WTF-009 (skills → verbs)
|
||||
└── VerbPriorityProfile finalization (Gestalt)
|
||||
└── Character creation scope confirmed (Q-WTF-013)
|
||||
|
||||
Jeroen answers Q-WTF-011 (voice attribution)
|
||||
└── Voice card architecture (Mellanie)
|
||||
└── Phase Zero content authorship (Paula + Mellanie)
|
||||
|
||||
NPC legibility ships
|
||||
└── Phase Zero warmth content authorable (Paula + Mellanie)
|
||||
└── Moral arc Phase 1→2 gates activatable
|
||||
|
||||
Miri zone identity spec written
|
||||
└── Araminta tile palettes + NPC sprites
|
||||
└── Tyre snapshot zone data
|
||||
└── Generator Phase 1 world
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Each Agent's Single Most Important Recommendation
|
||||
|
||||
| Agent | Recommendation |
|
||||
|-------|---------------|
|
||||
| Gestalt | Decide skills-verb coupling before any other content work resumes |
|
||||
| Ozzie | Design the first 30 minutes as one unified beat sheet across all four domains |
|
||||
| Paula | Design Phase Zero and First Day as the same thing — one beat, four payoffs |
|
||||
| Gore | Don't let Phase 1 indifference become the default register — Phase 1 must establish latent responsiveness |
|
||||
| Nigel | Confirm the career bookmark list before any implementation work begins |
|
||||
| Miri | Write the zone identity spec before the generator runs — it unlocks the entire Phase 1 foundation |
|
||||
| Tyre | Build the smallest possible proof before the full vision — proof-of-life sprint first |
|
||||
| Araminta | Confirm the career bookmark list (visual design is blocked without it) |
|
||||
| Mellanie | Answer the voice attribution question before writing any new voice cards |
|
||||
|
||||
**The meta-recommendation, synthesized:** Four of nine agents' top priorities are blocked by the career bookmark list. Three of nine are blocked by character creation architecture decisions (skills-verb coupling, voice attribution, appearance model). The workshop cannot proceed to implementation until these decisions are made. They should be the first agenda items of Sprint 25 planning.
|
||||
|
||||
---
|
||||
|
||||
## Status Assessment
|
||||
|
||||
**What the workshop established (confirmed, not in dispute):**
|
||||
- The engine is a life-sim engine shipped with a detective-game UI. The fix is additive.
|
||||
- Delivery sequence: NPC legibility → player tools (diegetic suite) → player purpose (career system + onboarding).
|
||||
- Phase Zero is necessary before the moral arc can function.
|
||||
- The first 30 minutes must be designed as a unified arc by four domains simultaneously.
|
||||
- The uncaring-world / authored-content two-phase model is the right architecture.
|
||||
- "The engine is ready. The interfaces were missing. Build the floor; test it; then build."
|
||||
|
||||
**What remains open and blocks the next sprint:**
|
||||
1. Career bookmark list for v0.2 (Q-WTF-005, Q-WTF-008) — critical path blocker
|
||||
2. Skills → verbs coupling (Q-WTF-009) — blocks VerbPriorityProfile and all downstream
|
||||
3. Voice attribution model (Q-WTF-011) — blocks all voice card work
|
||||
4. Minimum viable uncaring world (Q-WTF-012) — determines sprint count and scope
|
||||
5. v0.2 character creation scope (Q-WTF-013) — determines build/content scope
|
||||
6. v0.2 career model (Q-WTF-014) — determines content architecture, trigger catalog, storyteller calibration
|
||||
7. Phase 1 as player experience vs dev concept (Q-WTF-010) — determines storyteller design
|
||||
|
||||
**The workshop has done its work.** The direction is clear. The blockers are named. The next step is a design session with Jeroen to resolve Q-WTF-005 through Q-WTF-026 in priority order, beginning with the career bookmark list.
|
||||
|
||||
---
|
||||
|
||||
*Round 4 documented. Workshop complete.*
|
||||
|
||||
*— Qatux*
|
||||
@@ -0,0 +1,413 @@
|
||||
# Round 5 Notes — QATUX Summary
|
||||
## Where's the Fun? Workshop | 2026-03-05
|
||||
|
||||
**Round type:** Decision Reaction
|
||||
**Source documents:** `docs/workshops/wheres-the-fun/round5-{gestalt,ozzie,paula,gore,nigel,miri,tyre,araminta,mellanie}.md`
|
||||
**Interview read:** `docs/workshops/wheres-the-fun/round4-interview.md`
|
||||
**Supplement read:** `docs/workshops/wheres-the-fun/interview-supplement-round4.md`
|
||||
|
||||
---
|
||||
|
||||
## What This Round Was
|
||||
|
||||
Round 5 asked all 9 agents to react individually to the 15 decisions Jeroen locked in the Round 4 interview. Each agent read the same 15 decisions and produced:
|
||||
- Domain-specific endorsements, concerns, and flags
|
||||
- A single "most important" contribution or concern
|
||||
- Three questions for Jeroen
|
||||
|
||||
This is not a consensus document. Round 5 is a distributed audit — nine domain specialists interrogating the same decisions from different vantage points. The value is in what they each independently notice.
|
||||
|
||||
---
|
||||
|
||||
## The 15 Locked Decisions (Reference)
|
||||
|
||||
1. Proof-of-life = generator + graphics, not hand-built slice
|
||||
2. Skills + bookmark only for character creation (family/culture/religion deferred)
|
||||
3. Religion is NOT a game system
|
||||
4. Tycoon is the v0.2 bookmark (zero investigation content)
|
||||
5. Skills affect outcome (mostly C — everyone sees same verbs, some advanced gating possible)
|
||||
6. Voice: culture-driven, job modifies (inverted from prior assumption)
|
||||
7. ALL NPCs generated, no named characters (Kael doesn't exist)
|
||||
8. Generative AI for NPC content templating (culture vectors, tone, accents)
|
||||
9. Possible in-game ollama for live NPC dialogue (deferred but open)
|
||||
10. Quietly responsive world (gradient of caring by social proximity)
|
||||
11. Full character customization (hair, clothing, colors)
|
||||
12. Setting delivery: both layers (visual + insert in parallel)
|
||||
13. First Settled Reach moment: apartment + insert activation
|
||||
14. Groundhog Day alarm clock homage (first day only, *click* pa-pa pa-pa)
|
||||
15. Player choices ARE the content (Rimworld model; job = rails to take off from)
|
||||
|
||||
---
|
||||
|
||||
## Per-Agent Summary
|
||||
|
||||
### GESTALT (Game Systems)
|
||||
**Stance:** Technically endorses all 15. Flags 4 genuine tensions requiring resolution.
|
||||
|
||||
**Key concerns:**
|
||||
- Decision 6 (culture primary) requires culture definitions that Decision 2 (culture deferred) doesn't fund. Gap in timing.
|
||||
- Decision 1 (generator first) accelerates the timeline but the generator has never produced output.
|
||||
- Decision 10 (quietly responsive world) is a simulation work requirement, not a content decision.
|
||||
- Decision 5 (mostly C verbs) leaves the gating exceptions unspecified — which verbs are gated, and on what?
|
||||
|
||||
**Single most important:** Design the tycoon verb map and VerbPriorityProfile first. The tycoon bookmark is locked but its verb inventory is a blank page. Everything downstream — storyteller calibration, skill modifier weighting, Phase Zero content, NPC response vocabulary — waits on knowing what the tycoon actually DOES.
|
||||
|
||||
**Questions for Jeroen:**
|
||||
1. What does the tycoon DO at the verb level in a typical session? (What are the 5-10 primary verbs?)
|
||||
2. Given culture is deferred from creation, what cultural engagement exists in v0.2 gameplay?
|
||||
3. What is the scope of CauseChain without missions — what counts as a consequence?
|
||||
|
||||
---
|
||||
|
||||
### OZZIE (Player Experience)
|
||||
**Stance:** Endorses direction. Single major concern (Decision 7). Flags two secondary risks.
|
||||
|
||||
**Key concerns:**
|
||||
- Decision 7 (generated NPCs): the biggest WX risk. ALL the wow moments Ozzie designed depend on NPCs being legible as people the player can form attachment to. "If [NPC generation] produces dots, all the moments fail."
|
||||
- Decision 11 (full customization) + Decision 13 (apartment): the apartment must feel personal, not a wealth-tier container. Character creation investment dies if the apartment doesn't carry it.
|
||||
- Decision 4 (tycoon): consequence drama needs to be shaped — economic failure hitting an NPC the player knows is Dwarf Fortress; consequence landing on a stranger is noise.
|
||||
|
||||
**Single most important:** NPC personality surface area. The generator must produce characters with enough legible traits that players can project "that's the person who…" onto them within a few sessions.
|
||||
|
||||
**Questions for Jeroen:**
|
||||
1. What is the minimum NPC personality surface area for v0.2? (Traits, routines, emotional states?)
|
||||
2. Is the consequence model Rimworld-raid (survivable pressure) or DF-flood (generative catastrophe)?
|
||||
3. What makes the apartment feel like YOUR apartment beyond wealth tier?
|
||||
|
||||
---
|
||||
|
||||
### PAULA (Narrative Architecture)
|
||||
**Stance:** Domain reconstruction complete. Round 4 decisions invalidated prior work; Round 5 shows what survives and what's blank.
|
||||
|
||||
**What survives:**
|
||||
- 4-phase arc structure (Phase Zero → moral arc → choice → consequence)
|
||||
- FactId gate logic (knowledge-gated progression)
|
||||
- FRIEND pattern (D-034) as generator template
|
||||
- Voice card methodology
|
||||
|
||||
**What's blank:**
|
||||
- Tycoon moral arc: undesigned. Smuggler arc was complete; tycoon arc is a blank page.
|
||||
- FRIEND figure for tycoon: the smuggler had Kael; the tycoon has no equivalent generated role defined.
|
||||
- Phase Zero warmth: must be EARNED with generated NPCs, not authored in. Different emotional register.
|
||||
|
||||
**Key insight:** "Emergent warmth (earned) may be better than authored warmth (given). If the player watches the FRIEND-equivalent go from stranger to someone they recognize, the Phase Two crack carries more weight."
|
||||
|
||||
**Single most important:** Identify who the tycoon's FRIEND figure is. What generated NPC role serves the D-034 function in a tycoon playthrough?
|
||||
|
||||
**Questions for Jeroen:**
|
||||
1. Who is the tycoon's FRIEND figure? (What NPC role — employee, supplier, neighbor, colleague?)
|
||||
2. What is the default culture for v0.2 player character?
|
||||
3. Is the tycoon moral arc authored (smuggler-style) or emergent (Rimworld-style storyteller)?
|
||||
|
||||
---
|
||||
|
||||
### GORE (Thematic Depth)
|
||||
**Stance:** Strong endorsement with three analytical deep dives.
|
||||
|
||||
**Key contributions:**
|
||||
- Decision 7 (generated NPCs) reframes complicity mechanics: tycoon economic complicity (did I know my supplier used indentured workers?) is MORE realistic than detective complicity. Tycoon bookmark is thematically richer than expected.
|
||||
- Decision 10 (quietly responsive): gradient legibility requires a signal channel. The player must be able to READ the gradient — see that the world around close contacts is different from the world of strangers — without it being labelled.
|
||||
- Decision 5 (skills) + Decision 2 (no culture creation): skill_ceiling as transhumanist ladder. Gore recommends Model B (visible ceiling) where the player can see the cap and feel the aspiration to exceed it. This is the hook for insert-upgrade mechanics in later versions.
|
||||
|
||||
**Single most important:** NPC stakes and legible characterization. Economic entanglement only produces complicity if the player can read the NPC as a person with stakes. "I don't care if my contract hurts a supply chain. I care if it hurts the person I've spent two weeks negotiating with."
|
||||
|
||||
**Questions for Jeroen:**
|
||||
1. What is the social gradient signal channel? How does the player READ the gradient?
|
||||
2. What is the NPC characterization goal — minimum traits for stakes to register?
|
||||
3. Is skill ceiling felt as a constraint, or invisible until hit?
|
||||
|
||||
---
|
||||
|
||||
### NIGEL (Replayability Architecture)
|
||||
**Stance:** Career divergence drops out of v0.2; world state randomness is now the primary replayability mechanism. Reframes the whole domain.
|
||||
|
||||
**Key concern:** The generator must produce STRUCTURAL variety, not cosmetic variety. Economic landscape, faction power balance, event timing, crisis composition must vary between seeds — not just NPC names and face types. "If every playthrough is a different-looking version of the same economic structure, you've built a reskin generator, not a world generator."
|
||||
|
||||
**Critical flag:** Failure cascade model is unresolved. Rimworld treats failure as generative (the fire that burned your kitchen produces a new playthrough state). A failure model that is purely punitive (you lose, restart) doesn't fit the life-sim framing.
|
||||
|
||||
**Cross-career architecture note:** "Don't build for it, but don't close the door. The architecture that supports tycoon replayability should be the same architecture that supports smuggler replayability — parametric storyteller pressure, structural world variety, knowledge-gated information. Build it clean enough that adding a second career doesn't require rebuilding the foundations."
|
||||
|
||||
**Single most important:** Confirm what "structural variety" means for the tycoon generator before it's built.
|
||||
|
||||
**Questions for Jeroen:**
|
||||
1. What constitutes structural variety in the tycoon generator? (Beyond NPC names and faces?)
|
||||
2. Is failure generative or punitive in v0.2?
|
||||
3. How to architect for cross-career coherence without building cross-career now?
|
||||
|
||||
---
|
||||
|
||||
### MIRI (Worldbuilding & Setting)
|
||||
**Stance:** Strong endorsement with three critical blocker flags.
|
||||
|
||||
**Key insight:** The zone identity spec is the prerequisite for the generator to produce Settled Reach-specific space rather than generic sci-fi. "A generator that produces locations without zone identity rules will produce the same failure at scale — generic space procedurally stamped out, infinite 'game levels with dots.'"
|
||||
|
||||
**Three blockers identified:**
|
||||
1. **Zone identity spec** (Priority 1, blocks generator): Zone types, visual markers, behavioral vocabulary, population demographics, social responsiveness profiles. Must exist before the generator proof-of-life is demonstrated.
|
||||
2. **Culture profiles** (Priority 1, blocks voice system, NPC generator, AI pipeline): "Culture deferred" cannot mean "culture undefined." Three downstream systems (voice, NPC generator, AI pipeline) all need culture as a working concept immediately. Minimum for v0.2: one culture profile (Krenn System / Station Sova / Velen).
|
||||
3. **Wealth tier + cultural aesthetic specs** (Priority 2, needed for apartment generator): 4-5 wealth tiers as visual vocabularies, correlated with zone location, with cultural aesthetic modifiers.
|
||||
|
||||
**IP risk flag on Decision 8:** AI templating without tight culture profile constraints will default to genre conventions. "Krenn System NPCs might start talking like they're from Babylon 5 or Mass Effect." Culture profiles are simultaneously setting design documents AND AI prompt engineering documents.
|
||||
|
||||
**Questions for Jeroen:**
|
||||
1. Is culture implicit in starting location (tycoon bookmark in Krenn System = Krenn culture), or selected separately?
|
||||
2. What does the tycoon own or invest in on Day 1? (Logistics contract, bar, storage franchise, speculative property?)
|
||||
3. What should the player feel when they look at the span gate from their apartment window?
|
||||
|
||||
---
|
||||
|
||||
### TYRE (Technical Architecture)
|
||||
**Stance:** Full technical accounting of all 15 decisions. Most decisions have clear architectural paths. Two are foundation-changing.
|
||||
|
||||
**Foundation-changing decisions:**
|
||||
- Decision 1 (generator first): Generator pipeline is the critical path. Tyre recommends template assembly (not procedural geography) for v0.2 — zone templates assembled procedurally, not terrain generated from noise. Estimated 4-6 sprints for generator piece.
|
||||
- Decision 7 (generated NPCs): Requires `NpcBlueprint` struct as new generator output format. Requires knowledge seeding algorithm (hardest part — NPC must know things consistent with their role, relationships, and world state). Estimated 3-5 sprints for full NPC generation pipeline.
|
||||
|
||||
**Critical path:** 7 sprints to proof-of-life playtest (generated location + legible characters + tycoon bookmark from creation to Day 3).
|
||||
|
||||
**Sprint 25 recommendation:** Generator spike before anything else. "If the generator can't produce usable output, nothing else matters. If it CAN, everything else has a foundation."
|
||||
|
||||
**Decision 6 architectural gap:** Voice is culture-driven but culture isn't in character creation. Player character culture must come from somewhere — Tyre identifies three options: (a) default culture for v0.2, (b) derived from bookmark starting location, (c) culture is part of the bookmark definition.
|
||||
|
||||
**Decision 15 simplification:** Storyteller is a situation injector, not a quest tracker. "Events that create situations, and a consequence engine that tracks outcomes." Revised effort estimate: 2-3 sprints (down from 4-6).
|
||||
|
||||
**Questions for Jeroen:**
|
||||
1. Template assembly or procedural geography for v0.2 generator?
|
||||
2. Player character culture — how determined if not at creation?
|
||||
3. AI content templating — Claude API, local ollama, or manual for v0.2?
|
||||
4. How many culture definitions for v0.2?
|
||||
|
||||
---
|
||||
|
||||
### ARAMINTA (Visual Design)
|
||||
**Stance:** Strong conceptual endorsement. Three compounding visual design problems. Three deep dives. One critical unsolved question.
|
||||
|
||||
**Key reframe:** "My output is not a style guide for Sova Transit. It's a parameterized visual grammar with zone type as input and palette + prop vocabulary + NPC silhouette expectations as output. Sova Transit is the PROOF of that grammar, not the deliverable."
|
||||
|
||||
**Three deep dives:**
|
||||
1. **Full customization at tile scale:** "Outline/highlight is a hypothesis, not a solution." Identity token model proposed — creation choices map to tile-scale impressions (color temperature, value contrast, silhouette) rather than pixel-fidelity. Creation screen fidelity target (portrait vs tile preview) unresolved.
|
||||
2. **Generated NPC visual variety without visual noise:** Role legibility must survive all cultural variation. Hierarchy: posture+clothing type → role; palette → cultural context; individual variation → last. NPC component system: 4 layers (body, clothing, hair, cultural detail). Crowding rule: no two NPCs in a scene share clothing palette + hair color combination.
|
||||
3. **Auto-generated apartment visual variety:** Economic status communicated through viewport size, furniture density, palette, technology presence, view quality. Critical rule: both wealthy and modest apartments must feel INHABITED, not empty or depressing.
|
||||
|
||||
**Direct upstream dependency confirmed:** Miri's zone identity spec → Araminta's tile palettes → Tyre exposes zone data in snapshot. "I cannot author the generative zone visual grammar until Miri's spec defines what zone types mean in the Settled Reach's social vocabulary."
|
||||
|
||||
**Questions for Jeroen:**
|
||||
1. Character creation screen — portrait/full-fidelity render or tile-scale preview?
|
||||
2. How many distinct cultural visual contexts for v0.2, and are they per-location or per-NPC?
|
||||
3. Should creation choices (skills, appearance) leave any trace in the generated apartment?
|
||||
|
||||
---
|
||||
|
||||
### MELLANIE (Copy & Voice)
|
||||
**Stance:** 15 decisions collectively change the copy domain more than any other. Three near-misses identified; three questions flagged.
|
||||
|
||||
**Architectural change from Decision 7:** Named NPCs (Kael, Naia, Maret) are dead as production content. Existing voice exemplars are register demonstrations, not production templates. Phase Zero warmth can no longer be authored-in — must be earned through observed relationship progression. "If the player watches the FRIEND-equivalent go from stranger to someone they recognize, the Phase Two crack carries more weight because the player built that warmth themselves."
|
||||
|
||||
**Systems request from generated NPCs:** Monologue needs behavioral DELTA, not just current state. "She used to just sign. Now she reads every line" requires knowing the before-state. Template equivalent: "More careful at the manifest today. Wasn't like that last week." This requires the knowledge graph to surface behavioral change from baseline, not just current behavior.
|
||||
|
||||
**Decision 6 + Decision 2 tension:** Three options for v0.2 voice card: (A) default culture, (B) skill-based register bridge (wrong architecture), (C) deliberately parametric tycoon content with culture slots open. Mellanie recommends Option C — less sharp now, correctly architected for when culture ships.
|
||||
|
||||
**Quality floor separation:** "Limited vocabulary acceptable at first" applies to NPC dialogue. It CANNOT apply to player character monologue. "If the character repeats the same twelve observations on a loop, the intimacy of the experience collapses." These are separate content tiers with different production standards.
|
||||
|
||||
**Tycoon trigger catalog (minimum viable):** enter_location (6 zone types), observe_npc (6 relationship/archetype types), observe_asset (4 states), job_event (8 event types), relationship_shift (4 transitions), consequence_visible, economic_event (3 types), morning_routine (by economic tier). Twelve lines per trigger minimum; twenty-four is better.
|
||||
|
||||
**Questions for Jeroen:**
|
||||
1. What fills the culture slot in v0.2 voice cards? (Parametric, default culture, or temporary job-primary?)
|
||||
2. Are behavioral deltas surfaced to the monologue system, or only current behavioral state?
|
||||
3. Is player character monologue explicitly excluded from "limited vocabulary acceptable at first"?
|
||||
|
||||
---
|
||||
|
||||
## Cross-Domain Convergences
|
||||
|
||||
### Convergence 1: NPC Legibility is the Universal Gate
|
||||
All 9 agents independently flag that generated NPCs must have sufficient personality surface area for emotional attachment. This is not a nice-to-have. It is the prerequisite for:
|
||||
- Phase Zero warmth (Paula, Mellanie)
|
||||
- Economic complicity (Gore)
|
||||
- Consequence drama (Ozzie, Gore)
|
||||
- The Ownership Moment (Ozzie)
|
||||
- The FRIEND arc (Paula, Mellanie)
|
||||
- Replayability with stakes (Nigel)
|
||||
- Monologue intimacy (Mellanie)
|
||||
|
||||
If NPC generation produces low-legibility characters, every designed wow moment fails simultaneously.
|
||||
|
||||
### Convergence 2: The Culture Architecture Gap
|
||||
Five agents independently identify the same structural tension between Decision 2 (culture deferred from creation) and Decision 6 (culture primary for voice), Decision 7 (generator uses culture as NPC variable), and Decision 8 (AI pipeline uses culture vectors):
|
||||
- Mellanie: options A/B/C for voice card authoring
|
||||
- Miri: "culture deferred cannot mean culture undefined"
|
||||
- Tyre: three options for player culture assignment
|
||||
- Araminta: same gap in character creation visual design
|
||||
- Gestalt: culture/voice gap is Tension #1
|
||||
|
||||
**This gap is resolvable.** The likely answer is Miri's Option 1 — culture is implicit in the starting location and bookmark. But it requires Jeroen's explicit confirmation before five domains can proceed.
|
||||
|
||||
### Convergence 3: Zone Identity Spec Blocks the Generator
|
||||
Miri and Araminta independently confirm the dependency chain: zone identity spec → visual grammar → tile palette → generator application. Both name it as the first deliverable that everything else fans out from. Tyre confirms the generator requires zone type parameters as input. The spec is blocking.
|
||||
|
||||
### Convergence 4: Tycoon is Richer Than Expected
|
||||
Multiple agents independently discover that the tycoon bookmark is thematically and mechanically richer than the detective bookmark it replaced:
|
||||
- Gore: economic complicity is more realistic than investigative complicity
|
||||
- Miri: Sova Transit's atmosphere ("quotidian-with-undertow") was built for tycoon even before the bookmark existed
|
||||
- Tyre: tycoon naturally blends all three career models (active/WFH/gig) in one bookmark
|
||||
- Mellanie: tycoon insert is setting delivery at its most diegetic
|
||||
|
||||
### Convergence 5: Phase Zero Survives in Modified Form
|
||||
Paula's Phase Zero concept survives the pivot to generated NPCs, but requires different authoring. Mellanie and Paula independently reach the same conclusion: warmth with generated NPCs is EARNED through observed relationship progression, not authored-in through backstory. This may produce stronger emotional investment, not weaker.
|
||||
|
||||
---
|
||||
|
||||
## Confirmed or Clarified Decisions
|
||||
|
||||
All 15 decisions from Round 4 are confirmed across Round 5 without any agent proposing reversal. The round produced no decision contradictions — only scope questions, implementation concerns, and architecture gaps.
|
||||
|
||||
The following decisions produced **near-unanimous endorsement:**
|
||||
- D4 (tycoon bookmark): enthusiastically endorsed by all
|
||||
- D14 (Groundhog Day homage): universally noted as tonally correct
|
||||
- D15 (Rimworld model): universally adopted as primary framing
|
||||
- D3 (religion not a system): universally noted as clean scope cut
|
||||
|
||||
The following decisions produced **endorsement with significant concerns:**
|
||||
- D7 (generated NPCs): endorsed in principle, NPC legibility flagged by all
|
||||
- D1 (generator first): endorsed, but generator-has-never-produced-output risk flagged by Tyre and Gestalt
|
||||
- D11 (full customization): endorsed, but tile-scale readability flagged as hypothesis not solution by Araminta
|
||||
- D2 + D6 (culture deferred / culture primary): the structural tension flagged by 5 domains
|
||||
|
||||
---
|
||||
|
||||
## Open Questions for Jeroen (Consolidated)
|
||||
|
||||
The following questions require Jeroen's input before domains can proceed. Grouped by theme.
|
||||
|
||||
### Tycoon Verb Map (Blocking: Gestalt, Tyre, Paula, Mellanie)
|
||||
**Q-WTF-027 (proposed):** What does the tycoon DO at the verb level in a typical session? What are the 5-10 primary verbs? *(Asked by Gestalt, needs Tyre for implementation)*
|
||||
|
||||
**Q-WTF-028 (proposed):** What does the tycoon own or invest in on Day 1? (Logistics contract, bar lease, storage franchise, speculative property, or something else?) *(Asked by Miri, Tyre)*
|
||||
|
||||
### Culture Architecture (Blocking: Mellanie, Miri, Tyre, Araminta, Gestalt)
|
||||
**Q-WTF-029 (proposed):** Is culture implicit in the starting bookmark/location (tycoon in Krenn System = Krenn culture), explicitly assigned as part of the bookmark definition, or handled differently? *(Asked by Miri, Tyre, Mellanie, Araminta)*
|
||||
|
||||
**Q-WTF-030 (proposed):** How many distinct cultures exist in the v0.2 generator output — for both NPC generation and visual grammar? *(Asked by Tyre, Araminta, Miri)*
|
||||
|
||||
**Q-WTF-031 (proposed):** What fills the culture slot in v0.2 voice cards — parametric (slots open), default culture, or something else? *(Asked by Mellanie)*
|
||||
|
||||
### Generator Scope (Blocking: Tyre, Miri)
|
||||
**Q-WTF-032 (proposed):** For v0.2 proof-of-life, does the generator need procedural geography (terrain from noise) or is template assembly (zone templates assembled procedurally) sufficient? *(Asked by Tyre)*
|
||||
|
||||
**Q-WTF-033 (proposed):** For the AI content templating pipeline (Decision 8) — what is the approach for v0.2: Claude API build-time generation, local ollama, or manual authoring with AI assist? *(Asked by Tyre)*
|
||||
|
||||
### NPC Personality and Legibility (Blocking: Ozzie, Gore, Mellanie, Paula)
|
||||
**Q-WTF-034 (proposed):** What is the minimum NPC personality surface area for v0.2? Minimum traits, behavioral routines, and emotional state variety for generated NPCs to feel legible as people? *(Asked by Ozzie, Gore)*
|
||||
|
||||
**Q-WTF-035 (proposed):** Who is the tycoon's FRIEND figure (D-034 equivalent)? What generated NPC role (employee, supplier, neighbor, colleague) serves that function in the tycoon playthrough? *(Asked by Paula)*
|
||||
|
||||
**Q-WTF-036 (proposed):** Are behavioral deltas (change from NPC baseline behavior) surfaced to the monologue system, or only current behavioral state? *(Asked by Mellanie — systems ask, needs Gestalt/Tyre confirmation too)*
|
||||
|
||||
### Failure and Consequence (Blocking: Nigel, Ozzie)
|
||||
**Q-WTF-037 (proposed):** Is the failure model generative (failure produces a new game state, like Rimworld) or punitive (failure = restart), or mixed? *(Asked by Nigel)*
|
||||
|
||||
**Q-WTF-038 (proposed):** What constitutes structural variety in the tycoon generator — beyond cosmetic NPC variation, what must differ between seeds? *(Asked by Nigel)*
|
||||
|
||||
### Character Creation and Apartment (Blocking: Araminta, Ozzie, Mellanie)
|
||||
**Q-WTF-039 (proposed):** Is the character creation screen a full-fidelity portrait/render moment, or a tile-scale preview? *(Asked by Araminta — gates entire character component system design)*
|
||||
|
||||
**Q-WTF-040 (proposed):** Should the character's creation choices (skills, appearance selections) leave any trace in the generated apartment, or is the apartment purely economic position + cultural context? *(Asked by Araminta, Ozzie)*
|
||||
|
||||
### Tone and Narrative
|
||||
**Q-WTF-041 (proposed):** What should the player feel when they look at the span gate from their apartment window on Day 1 — ambition, pragmatism, anxiety, or something else? *(Asked by Miri — shapes insert copy and NPC behavioral vocabulary)*
|
||||
|
||||
**Q-WTF-042 (proposed):** Is player character monologue explicitly excluded from "limited vocabulary acceptable at first"? *(Asked by Mellanie — needs explicit confirmation)*
|
||||
|
||||
**Q-WTF-043 (proposed):** Is the tycoon moral arc authored (designed like the smuggler arc) or emergent (storyteller-generated)? *(Asked by Paula)*
|
||||
|
||||
---
|
||||
|
||||
## Structural Concerns Not Yet Questions
|
||||
|
||||
Three concerns are surfacing across multiple agents that are design tensions, not answerable questions yet. Recording them here.
|
||||
|
||||
### Tension 1: Generator Readiness vs. Content Readiness
|
||||
The generator is locked as the proof-of-life (D1). But the generator requires zone identity rules (Miri), culture profiles (Miri, Mellanie), NpcBlueprint design (Tyre), and AI content pipeline setup (Tyre, Mellanie) before it can produce Settled Reach-specific output rather than generic sci-fi. These are not sprint-after-generator tasks — they are generator INPUTS. If these aren't ready before Sprint 25's generator spike, the spike produces generic output that proves nothing.
|
||||
|
||||
### Tension 2: Culture Everywhere, Culture Nowhere in Creation
|
||||
Culture is simultaneously deferred from character creation (D2), primary for voice (D6), a key NPC generator variable (D7), and the first dimension of the AI content pipeline (D8). The resolution (implicit in bookmark) is likely correct, but it has not been confirmed, and five domain pipelines are blocked until it is.
|
||||
|
||||
### Tension 3: The Tycoon's Blank Arc
|
||||
The detective arc was abandoned. The smuggler arc existed, was documented, and was scrapped. The tycoon arc is... undesigned. Paula flags this as the highest-urgency narrative gap. The moral texture that Gore identifies as thematically superior to detective content (economic complicity, accumulated consequence) requires an arc structure to deliver it. Emergent storyteller (Decision 15) provides situations, not meaning. The arc is what gives those situations coherent emotional weight over time.
|
||||
|
||||
---
|
||||
|
||||
## Risk Register
|
||||
|
||||
| Risk | Severity | Agents Flagging | Status |
|
||||
|---|---|---|---|
|
||||
| NPC generation produces low-legibility characters | High | 9/9 | Open |
|
||||
| Culture architecture gap blocks 5 pipelines | High | 5/9 | Open — needs Q-WTF-029 |
|
||||
| Generator produces generic space without zone identity rules | High | Miri, Tyre | Open — Miri writing zone identity spec |
|
||||
| Tycoon verb map is blank | High | Gestalt, Tyre | Open — needs Q-WTF-027 |
|
||||
| Tycoon moral arc is undesigned | Medium-High | Paula, Gore | Open — needs Q-WTF-043 |
|
||||
| Character creation investment doesn't survive to gameplay | Medium-High | Araminta, Ozzie | Open — needs Q-WTF-039 |
|
||||
| Generator has never produced output (translation risk) | Medium-High | Tyre, Gestalt | Open — Tyre proposes Sprint 25 spike |
|
||||
| "Limited vocabulary" applied to player monologue | Medium | Mellanie | Open — needs Q-WTF-042 |
|
||||
| Failure model is punitive rather than generative | Medium | Nigel | Open — needs Q-WTF-037 |
|
||||
| AI pipeline defaults to genre conventions without culture constraints | Medium | Miri | Mitigated by culture profile design |
|
||||
| Structural (not cosmetic) world variety not achieved | Medium | Nigel | Open — needs Q-WTF-038 |
|
||||
|
||||
---
|
||||
|
||||
## Blocking Dependency Map (Sprint Readiness)
|
||||
|
||||
```
|
||||
Jeroen → Q-WTF-029 (culture implicit in bookmark?)
|
||||
├── Mellanie: v0.2 voice card architecture
|
||||
├── Miri: culture profile authoring
|
||||
├── Tyre: NPC Blueprint culture field
|
||||
└── Araminta: cultural visual grammar scope
|
||||
|
||||
Jeroen → Q-WTF-027 (tycoon verb map)
|
||||
├── Gestalt: VerbPriorityProfile, storyteller calibration
|
||||
├── Tyre: economic verb system design
|
||||
└── Mellanie: trigger catalog coverage
|
||||
|
||||
Miri: Zone Identity Spec
|
||||
├── Araminta: zone visual grammar
|
||||
└── Tyre: generator zone template parameters
|
||||
|
||||
Tyre: Generator spike (Sprint 25)
|
||||
└── All agents: everything builds on generated output
|
||||
|
||||
Jeroen → Q-WTF-035 (tycoon FRIEND figure)
|
||||
└── Paula: Phase Zero warmth design, FRIEND arc structure
|
||||
|
||||
Jeroen → Q-WTF-039 (creation screen fidelity)
|
||||
└── Araminta: character component system design
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Most Important Single Observation
|
||||
|
||||
Four domains — Gestalt, Ozzie, Gore, Mellanie — independently converge on the same observation from completely different angles: **NPC personality surface area is the single gate everything else passes through.**
|
||||
|
||||
The wow moments (Ozzie), the moral arc (Paula, Gore), the social gradient (Gore, Gore), the Phase Zero warmth (Paula, Mellanie), the behavioral delta monologue (Mellanie), the economic complicity (Gore), the consequence drama (Ozzie, Nigel) — all of these require the player to emotionally care about at least one generated NPC.
|
||||
|
||||
The NPC generator's personality surface area (traits, behavioral routines, emotional state vocabulary, visible relationship building) is not downstream of the proof-of-life. It IS the proof-of-life. A generator that produces a world full of economically distinct locations but population-of-dots has reproduced the exact v0.1 failure in v0.2 form.
|
||||
|
||||
---
|
||||
|
||||
## Proposed Next Step
|
||||
|
||||
Round 5 has produced enough material for a substantive Round 6 interview session with Jeroen. The 17 consolidated questions above are not all equal — the culture architecture question (Q-WTF-029) and the tycoon verb map question (Q-WTF-027) are blocking the most domains.
|
||||
|
||||
A prioritized Round 6 interview would address:
|
||||
1. Culture architecture resolution (Q-WTF-029/030/031)
|
||||
2. Tycoon verb map (Q-WTF-027/028)
|
||||
3. Generator scope (Q-WTF-032/033)
|
||||
4. NPC personality surface area (Q-WTF-034/035/036)
|
||||
5. Failure model (Q-WTF-037)
|
||||
6. Character creation fidelity (Q-WTF-039)
|
||||
|
||||
Questions Q-WTF-038 through Q-WTF-043 are lower-blocking and could be addressed in parallel or by agents working through them independently.
|
||||
|
||||
---
|
||||
|
||||
*For the record: this summary covers all 9 Round 5 outputs (gestalt, ozzie, paula, gore, nigel, miri, tyre, araminta, mellanie). No agent positions were consolidated or softened. Discrepancies between agents are preserved in the per-agent summaries above. — QATUX*
|
||||
@@ -0,0 +1,59 @@
|
||||
# Round 1: Diagnosis — Araminta (Visual Designer)
|
||||
|
||||
**Workshop:** Where's the Fun?
|
||||
**Date:** 2026-03-05
|
||||
**Focus items:** 3 (fog edge), 4 (stance indicator), 6 (HUD polish), 8 (context menu), 10 (signal-to-noise)
|
||||
|
||||
---
|
||||
|
||||
## Framing
|
||||
|
||||
Items 3, 4, 6, and 8 are clearly visual execution problems — broken rendering, unplaced UI, unstyled chrome. They're real and fixable. But item 10 (signal-to-noise) sits at a harder boundary: it's about *attention management*, which is fundamentally a visual design responsibility. Too many simultaneous signals of equal visual weight means the player has no way to know what to look at first.
|
||||
|
||||
The question I'm trying to answer: is the fun gap something visual design can fix, or is it something visual design is masking?
|
||||
|
||||
---
|
||||
|
||||
## Questions
|
||||
|
||||
### Q1: When you hit the testing wall, what were you looking at?
|
||||
|
||||
Item 13 says you couldn't figure out what to do. I want to know *where* that confusion was located — on screen, or in your head.
|
||||
|
||||
When you sat there not knowing how to proceed, was the issue:
|
||||
- **(A)** You could see things happening (fog moving, NPCs walking, monologue firing) but nothing told you which of those things deserved your attention?
|
||||
- **(B)** You understood what everything on screen *was*, but had no idea what *to do* about any of it?
|
||||
|
||||
Option A is a visual hierarchy problem — fixable with design. Option B is a mechanical/agency problem — visual design can't solve it, it can only decorate the confusion. I need to know which wall you hit.
|
||||
|
||||
---
|
||||
|
||||
### Q2: If the screen had a clear visual tier — danger in red, opportunity in amber, ambient in grey — would that have been enough to give you a foothold?
|
||||
|
||||
Item 10 (signal-to-noise) is the one item where I have the most direct leverage. If I establish a strict three-tier visual language for all feedback (critical / relevant / ambient) and enforce it across monologue text, HUD elements, sound indicators, and NPC behavior cues — would that give you enough *priority information* to start making decisions?
|
||||
|
||||
Or would you still be standing there thinking "okay, I know this is important — but I still don't know what I'm supposed to *do* with it"?
|
||||
|
||||
This tells me whether item 10 is a design problem I own, or whether it's downstream of a missing feedback loop that no amount of color-coding will fix.
|
||||
|
||||
---
|
||||
|
||||
### Q3: The context menu and stance indicator are placeholder-styled — floating text, no chrome. Did the lack of visual treatment make those elements feel *untrustworthy*, or was it the *information inside them* that was confusing?
|
||||
|
||||
Items 4 and 8 are my clearest short-term tickets. But before I style them, I want to know which problem I'm solving.
|
||||
|
||||
If the stance indicator had an icon, a keybind label, and was anchored to the minimap frame — would you have understood what it was for? Or would it still have been opaque even with good visual treatment?
|
||||
|
||||
Same for the right-click menu: is "this looks like a debug tooltip" the problem, or is "I don't understand what these options mean or when to use them" the problem?
|
||||
|
||||
The answer changes what I build. Chrome on a confusing interaction makes it *look* intentional. That can be worse than leaving it obviously unfinished.
|
||||
|
||||
---
|
||||
|
||||
## My Hypothesis
|
||||
|
||||
Strong art direction will not fix the fun gap — but it will clarify whether a fun gap exists.
|
||||
|
||||
Right now, the visual noise makes it impossible to tell if the player is confused because the mechanics are wrong, or because the mechanics are right and invisible. Establishing visual hierarchy (item 10) and anchoring UI to the world (items 4, 8) is not polish — it's *diagnostic infrastructure*. We can't evaluate the core loop until the player can read the screen.
|
||||
|
||||
The fog edge (item 3) is the only pure visual bug with no mechanical dimension. Fix it regardless.
|
||||
@@ -0,0 +1,54 @@
|
||||
# Round 1: GESTALT Interview Questions
|
||||
## Workshop: Where's the Fun? — Diagnosis Round
|
||||
|
||||
**Agent:** GESTALT (Systems Design)
|
||||
**Focus:** Is "asymmetric information detective" the right core mechanic? Where is the gap between the 7-verb system design and the confused playtest experience?
|
||||
|
||||
---
|
||||
|
||||
## Pre-Question Framing
|
||||
|
||||
Let me break down what I actually found mechanically. Three tensions in the source docs that I think are load-bearing:
|
||||
|
||||
1. The verb priority spec (Section 4, interaction-verbs-v0.1.md) says **Talk has higher priority than Examine NPC at close range** — pre-contradiction. The detective's stated loop is "Examine first, Talk later." These directly contradict each other. The player approaching an NPC to *watch* them gets offered `[E] Talk`.
|
||||
|
||||
2. The "not a tutorial" philosophy assumes the player will correctly attribute cause to effect: *"monologue fired, therefore my action registered."* But that only works if the player trusts the feedback loop. If monologue feels contextless, the calibration chain breaks — and the tutorial breaks with it.
|
||||
|
||||
3. Asymmetric information as a mechanic requires the player to feel the asymmetry — to know they're missing something specific. "I don't know what I don't know" is not asymmetric information, it's confusion. The two states feel identical from outside but require completely different design responses.
|
||||
|
||||
---
|
||||
|
||||
## Question 1: Did the system fight the detective loop?
|
||||
|
||||
**The question:** When you were playing the detective and wanted to *watch* an NPC before talking to them — did you try to do that, and did the system let you? Or did you end up in dialogue anyway because `[E] Talk` was what the button said?
|
||||
|
||||
**Why this matters mechanically:** The verb priority spec puts Talk above Examine NPC at close range. To get `[E] Observe` instead of `[E] Talk`, the player has to be at mid range, not close range. But this is invisible — nothing tells you that backing up 2 tiles switches the verb. If the detective's core loop is "accumulate behavioral tells through observation, then confront," but the input system defaults to the social verb at close range, the loop never teaches itself. The player keeps getting pushed toward dialogue before they're ready.
|
||||
|
||||
This isn't a bug. It's a design decision. But it may be the wrong one — or it may be correct and we just need the verb label to communicate it. I want to know if this actually broke in play.
|
||||
|
||||
---
|
||||
|
||||
## Question 2: Was the confusion "I know something is here" or "I have no idea what I'm looking at"?
|
||||
|
||||
**The question:** During the playtest, when things weren't working — was the experience closer to *"I can feel there's something here, I just can't figure out how to reach it"* or *"I have no idea what I'm supposed to be paying attention to or why"*?
|
||||
|
||||
**Why this matters mechanically:** These are different failure modes requiring different fixes.
|
||||
|
||||
- **Good mystery confusion** ("I know something is here"): The mechanic is working, the player is engaged, but they need better tools or legibility to act on their curiosity. Fix: UI/UX, verb transparency, monologue specificity.
|
||||
- **Bad confusion** ("I don't know what I don't know"): The mechanic is not registering at all. The player isn't feeling asymmetric information — they're feeling uniform opacity. The game is a black box, not a puzzle box. Fix: potentially redesign the core loop entry point.
|
||||
|
||||
Asymmetric information is only interesting when you know you're missing something specific. If Kael's behavioral tells are firing in the knowledge graph and the monologue is flagging them, but the player still feels like nothing is happening — I want to know *which failure* that is. Because the answer determines whether this is a polish problem or a design problem.
|
||||
|
||||
---
|
||||
|
||||
## Question 3: At minute 2, what did you think you were supposed to be doing?
|
||||
|
||||
**The question:** Two minutes in, with no objectives, no markers, and your character in the world — what did you actually think the goal was? Not in retrospect, not as the designer. What did the game communicate to you *in that moment* about what success looked like?
|
||||
|
||||
**Why this matters mechanically:** The "no objectives, pure observation" philosophy only works if the player has a mental model for what *progress* looks like. The first-5-minutes design doc identifies clear beats (enter location, see FRIEND, operational texture, first hairline crack) — but all of those are *design intentions*, not player experiences. If the player at minute 2 has no sense of purpose, progress, or priority — not because the systems aren't working, but because nothing has communicated what the systems are for — then the "not a tutorial" philosophy isn't succeeding at teaching through play. It's succeeding at not teaching.
|
||||
|
||||
The question isn't whether the player understood the detective puzzle. It's whether they had any question to answer, any thread to pull, any thing they were curious about that felt like it came from inside the game rather than from designer goodwill.
|
||||
|
||||
---
|
||||
|
||||
*GESTALT — Round 1 complete. Waiting for interview responses before Round 3 proposals.*
|
||||
@@ -0,0 +1,57 @@
|
||||
# Round 1 — Gore: Diagnosis Questions
|
||||
|
||||
**Workshop:** Where's the Fun?
|
||||
**Round:** 1 — Diagnosis
|
||||
**Agent:** Gore (Themes & Endgame Design)
|
||||
|
||||
---
|
||||
|
||||
## Framing
|
||||
|
||||
Before the questions, a reframe.
|
||||
|
||||
The playtest log says the player didn't know what to do. Everyone will diagnose this as a mechanical onboarding problem. They're not wrong. But there's a deeper failure the log is pointing at that I don't want us to miss.
|
||||
|
||||
D-091 says the game's thematic core is **complicity** — "you watch, and the watching implicates you." Complicity is not a passive state. It requires a structure: a threshold you cross, a before-and-after, a moment you were involved before you decided to be. Without that structure, the player isn't experiencing complicity. They're experiencing observation. And observation without stakes isn't a mechanic — it's a screensaver.
|
||||
|
||||
The playtest evidence suggests the complicity loop isn't running at all. Not because the systems are broken, but because the loop has a missing step: the player has to feel that what they are watching *matters* before the watching can implicate them.
|
||||
|
||||
That's what these questions probe.
|
||||
|
||||
---
|
||||
|
||||
## Questions
|
||||
|
||||
### Q1: Did the threshold ever fire?
|
||||
|
||||
Complicity requires a before-and-after — a moment where you were standing outside the situation, and then you weren't. Did you ever experience that in the playtest? Not in design-doc terms — but actually, in your body: a moment where something you saw made you feel responsible, implicated, or like you'd already chosen a side without meaning to?
|
||||
|
||||
**Why this matters:** If the answer is no — not once — then the thematic machinery is not loading, and the problem is not UX polish. You can't fix a missing threshold with better monologue timing. The question tells us whether complicity is theoretically possible in the current build, or whether the pre-conditions for it are entirely absent.
|
||||
|
||||
---
|
||||
|
||||
### Q2: Were you the player, or were you the character?
|
||||
|
||||
When you were moving through the world, whose perspective were you operating from? Were you "you, playing a game" — meta-aware, evaluating systems, noticing what fired and what didn't? Or at any point did you shift into the character's frame — where what *they* noticed or feared was different from what *you* as designer noticed or feared?
|
||||
|
||||
D-005 calls the character a "lens." A lens has to be doing something the naked eye can't. Monologue is supposed to create that gap — the character sees things you didn't. But if you never stopped being the designer-observer and started being the smuggler-or-detective, the lens isn't refracting. It's transparent.
|
||||
|
||||
**Why this matters:** The dual-character thesis (D-027) lives or dies on whether characters produce genuinely different *experiences*, not just different information. If perspective-shift never happened even once in a 15-minute playtest with the designer playing, we may be overestimating what the current monologue system can do.
|
||||
|
||||
---
|
||||
|
||||
### Q3: What were you actually doing?
|
||||
|
||||
Set aside what the game is about in pitch terms. Describe the actual activity you were performing, moment to moment. Not "investigating" or "observing" — the real verb. Walking? Waiting for something to happen? Reading text? Trying to figure out what the interface was asking of you?
|
||||
|
||||
And then: is that the verb you want?
|
||||
|
||||
**Why this matters:** D-091 says the game is about complicity. But complicity is not a verb — it's a consequence. The moment-to-moment loop has to produce it: **see → feel implicated → decide whether to act**. If the actual verb is "navigate UI confusion," the thematic loop can't run. This question makes the gap between intended experience and actual experience legible without pretending the gap is smaller than it is.
|
||||
|
||||
---
|
||||
|
||||
## What I'm listening for
|
||||
|
||||
If Jeroen's answers suggest the complicity structure never fires, not even weakly, I will push hard in Round 3 for rethinking the entry condition into the game's emotional loop — not just better tutorials, but a different first beat. Complicity can't be taught. It has to be sprung.
|
||||
|
||||
The question of what this game is *about* at the moment-to-moment level may have a simpler answer than we've been admitting: **right now, it's about not knowing what to do.** That's the experience. And that's not a UX failure alone — it's the absence of a designed entry into the loop the whole game depends on.
|
||||
@@ -0,0 +1,57 @@
|
||||
# Round 1: Mellanie — Monologue Diagnosis Questions
|
||||
|
||||
**Workshop:** Where's the Fun? | **Round:** 1 (Diagnosis) | **Agent:** Mellanie
|
||||
|
||||
---
|
||||
|
||||
## The Domain Question
|
||||
|
||||
The monologue system is designed as the primary bridge between the top-down camera and the character's subjective experience. "No tutorial pop-ups. Monologue handles all context." In the playtest, it felt like noise. Three questions to find out why.
|
||||
|
||||
---
|
||||
|
||||
## Questions for Jeroen
|
||||
|
||||
### Q1: When a monologue line fired, could you connect it to what triggered it?
|
||||
|
||||
The design says the causal link is "felt, not explained" — you observe an NPC, a thought fires, you understand yourself as someone who notices things. But the playtest log says "chalk mark observation appears in wildly different location with no visual cue where it came from."
|
||||
|
||||
That's a spatial anchoring failure — but it's also a legibility failure. If the player doesn't know why a thought arrived, the thought becomes ambient noise rather than responsive voice.
|
||||
|
||||
**What I'm trying to learn:** Is this a spatial UI problem (the monologue fired correctly but had no visual anchor to the trigger), or a trigger problem (the monologue fired in the wrong context and the line didn't match what the player was experiencing)? These are different fixes. One is Araminta's problem. The other is mine.
|
||||
|
||||
---
|
||||
|
||||
### Q2: Was the content written to spec when you playtested — or were placeholder lines running?
|
||||
|
||||
The voice rules are precise. The moral arc phase-gating is clear. The trigger taxonomy is defined. But the wow-moments doc says 1 of 23 content deliverables is complete, and the monologue pool authoring tickets (#299, #300) are downstream of the first-5-minutes design work.
|
||||
|
||||
If the lines that fired during the playtest were early drafts, generic placeholders, or lines written before the voice rules crystallized — that's not the system failing. That's the system running on bad fuel.
|
||||
|
||||
**What I'm trying to learn:** Were the fired lines voice-card compliant (fragments, physical sensation, first-name intimacy for smuggler; analytical habit, institutional distance for detective)? Or were they more generic? If you remember any specific line that felt off, I want to hear it. A concrete bad example tells me more than the general impression.
|
||||
|
||||
---
|
||||
|
||||
### Q3: Did the monologue ever feel like YOUR character's thoughts, or did it always feel like a narrator explaining the scene?
|
||||
|
||||
The success criterion is: "at least one monologue line that felt like it came from inside them." Even one. The whole philosophy rests on this being achievable.
|
||||
|
||||
If there were zero moments where a line landed as a genuine character thought — that's a system design problem. The delivery method itself may not be working (chime + floating text doesn't reliably read as "internal voice").
|
||||
|
||||
If there were some moments that worked and others that didn't — that tells me the content is the variable, not the delivery. We can write toward what worked.
|
||||
|
||||
**What I'm trying to learn:** Is there a working example I can reverse-engineer? Or is the premise broken — that text floating above gameplay can feel like interiority at all?
|
||||
|
||||
---
|
||||
|
||||
## My Current Hypothesis
|
||||
|
||||
Both problems exist, but they're not equal. My read of the playtest log:
|
||||
|
||||
- **System problem (wrong delivery):** Spatial anchoring (Issue #9) and signal-to-noise (Issue #10) are delivery failures. The lines may be fine; they're arriving in the wrong context, from the wrong location, competing with too much simultaneous input.
|
||||
|
||||
- **Content problem (wrong lines):** Display duration too long (Issue #1) and "contextless" feeling (Issue #2) suggest lines that don't establish *why this thought now* — which is a voice problem. A well-written line earns its moment. A generic line just occupies it.
|
||||
|
||||
The fix order matters: if the delivery system is broken, better content won't save it. But if the delivery system is basically sound and the content is weak, we're one content sprint away from it working.
|
||||
|
||||
Jeroen's answers to Q1-Q3 should tell us which problem we're solving first.
|
||||
@@ -0,0 +1,43 @@
|
||||
# Round 1 — Miri: Diagnosis Questions
|
||||
## Where's the Fun? Workshop — 2026-03-05
|
||||
|
||||
**Domain:** Worldbuilding & Setting Design
|
||||
**Seed question:** Does the world sell itself in 30 seconds, or does the player need to be told why to care? Sova Transit has rich internal logic — but in the playtest, the player saw tiles and fog, not a *place*.
|
||||
|
||||
---
|
||||
|
||||
### Setting note — what I'm probing
|
||||
|
||||
Sova Transit is designed with coherent social geography: a working-class station district, functional clusters (logistics hub, bar, corridors), 30/50/20 population entanglement, NPCs in routines that express their lives. On paper this is a *place* with class dynamics, faction pressures, and human texture. In the playtest, none of that registered. The player saw a grid with moving sprites.
|
||||
|
||||
That gap is a worldbuilding delivery failure — but before I can diagnose it, I need to understand what Jeroen actually *perceived* during the playtest versus what he knew as the designer. These questions separate those two things.
|
||||
|
||||
---
|
||||
|
||||
### Question 1: What did Sova Transit feel like *before* you knew what it was?
|
||||
|
||||
When you played v0.1, set aside your designer knowledge for a moment. Based only on what the game showed you — tiles, NPCs moving, fog revealing — what place did it feel like? Did it read as *a specific kind of place* (transit station, industrial district, docked ship)? Or did it feel like "game level with people in it"?
|
||||
|
||||
**Why this matters:** If the setting reads as generic, the problem is in ambient legibility — the visual language, NPC behavior, and environmental storytelling aren't communicating "Sova Transit" as a distinct place with character. If it read as *something* but the wrong thing, that's a different fix. And if it read correctly but felt hollow, the problem is that the place has been designed but not *authored* — the life-sim substrate exists structurally but hasn't been given texture yet.
|
||||
|
||||
---
|
||||
|
||||
### Question 2: What is the minimum signal that makes Sova Transit worth inhabiting?
|
||||
|
||||
Sova Transit works as a setting because of things the player can't currently see: class anxiety about span gate access, Commission oversight of manifest discrepancies, the bar as a social pressure valve for dock workers. None of that is in the tile art or NPC behavior yet — it lives in design documents. What's the smallest thing — one visual, one behavior, one line of text — that would make a first-time player think "I want to know more about this place"? Is it something that can be added in one sprint, or does it require the full authored-content layer to land?
|
||||
|
||||
**Why this matters:** D-025 establishes the functional cluster as the natural unit of social observation. But social observation only works if the *social texture* is readable. If we can't identify the one thing that makes the place feel inhabited rather than decorated, we're describing a setting that exists only in docs. The playtest may have revealed that Sova Transit isn't a place yet — it's a map.
|
||||
|
||||
---
|
||||
|
||||
### Question 3: Is the dual-lens reveal (D-027) emotionally dependent on the player caring about this specific place first?
|
||||
|
||||
The smuggler+detective proof works because "the detective's target IS the smuggler's daily life." The second-playthrough payoff — seeing the same space from an inverted relationship — only lands if the first playthrough built attachment to Sova Transit as a real place. If the player experienced v0.1 as generic space with systems, the dual-lens reveal in v0.2 has no emotional foundation to detonate.
|
||||
|
||||
Did the playtest feel like you were in *Sova Transit specifically*, or in *a station district in general*? And if the answer is "general" — does that mean Sova Transit needs to be authored with more specificity before the mechanics can carry weight, or is the setting actually interchangeable and any distinct-enough place would serve the same function?
|
||||
|
||||
**Why this matters:** This tests whether the setting is load-bearing for the fun, or whether the fun is purely mechanical and the setting is decoration. The answer changes the priority of worldbuilding work significantly.
|
||||
|
||||
---
|
||||
|
||||
*Setting note — IP check:* All three questions probe Sova Transit as an original location. The functional cluster model, the class dynamics, and the dual-lens structure are internally derived from our design decisions, not borrowed from an identifiable source. No flags.
|
||||
@@ -0,0 +1,47 @@
|
||||
# Round 1 — Nigel: Diagnosis Questions
|
||||
|
||||
**Workshop:** Where's the Fun? v0.1 Playtest Reckoning
|
||||
**Agent:** Nigel (Sandbox & Replayability)
|
||||
**Round:** 1 — Diagnosis
|
||||
|
||||
---
|
||||
|
||||
## The Replayability Paradox
|
||||
|
||||
The seed variant system is genuinely exciting. "Kael is late" versus "quiet morning" creates structurally different games — the FRIEND's absence as the first tell is a completely different emotional hook than his presence. The dual-lens divergence (same world, different knowledge, different truth) is one of the most replayable designs I've seen. Two players WILL describe completely different games.
|
||||
|
||||
But none of that matters if the player quits at minute 8.
|
||||
|
||||
Replayability is a second-playthrough promise. Right now we don't have a first playthrough. You can't cash the promise if nobody stayed for the end of the first game.
|
||||
|
||||
There's a deeper problem buried in the seed variant table: **Variant A (quiet morning) may be the worst possible first experience.** The crack doesn't appear until 10+ minutes. The day feels completely normal. That's the design intent — and it's a beautiful second-playthrough experience, where the player already knows what they're looking for and the quiet-morning normalcy becomes retroactively sinister. But for a player who doesn't know what they're supposed to be looking for? "Completely normal" = "nothing is happening here."
|
||||
|
||||
The storyteller selection logic says quiet morning on low-pressure seeds. That might be exactly backwards for a first run.
|
||||
|
||||
---
|
||||
|
||||
## Questions for Jeroen
|
||||
|
||||
### Q1: Did the game feel like it had anything at stake in the first 8 minutes?
|
||||
|
||||
Not "did you understand the stakes intellectually" — you designed the game, you know what's at stake. But emotionally, in the moment: did anything feel like it *mattered*? Did you care what happened to anyone? Was there anything you wanted to *protect* or *find out* before you hit the testing wall?
|
||||
|
||||
**Why this matters:** The seed variants and dual-lens divergence are replay engines built on top of emotional investment. If minute 1-8 produces zero investment — no person you care about, no situation that pulls you forward, no question you want answered — then the replayability architecture is a cathedral with no foundation. The structural variety is real. But variety of *what*? If the base experience produces no attachment, replaying it produces varied nothing.
|
||||
|
||||
---
|
||||
|
||||
### Q2: The "no objectives, no markers" philosophy is theoretically great for replayability — checklist games are solvable, emergent games aren't. But in practice, did "no objectives" feel like freedom or abandonment?
|
||||
|
||||
Specifically: if you had played this as a new player with no design knowledge, do you think you would have formed a self-generated goal — "I want to find out what Kael is hiding," "I want to understand this district" — by minute 15? Or would you have closed the game before that goal could form?
|
||||
|
||||
**Why this matters:** The no-objectives design creates replayability by preventing the game from being "solved" via checklist. But it requires the player to stay long enough to generate their own investment. If the window to generate that investment is longer than the window before a new player quits, the philosophy defeats itself. I need to know whether the current design can produce a self-generated goal in time, or whether we need a first-run scaffolding layer that doesn't compromise the no-tutorial philosophy for repeat players.
|
||||
|
||||
---
|
||||
|
||||
### Q3: The storyteller selects "quiet morning" (Variant A) on low-pressure seeds. Should the first playthrough get a different storyteller configuration than replays?
|
||||
|
||||
The quiet morning variant is designed to make the crack feel retroactively obvious on a second playthrough — you look back and think "it was right there." That's a second-playthrough payoff. On a first playthrough, "completely normal day" with no visible anomaly until minute 10+ might be the exact wrong opening for a player who doesn't yet know what they're watching for.
|
||||
|
||||
Should the storyteller detect "first playthrough" and deliberately select a higher-pressure seed — Kael late, container held — where the anomaly appears faster, even if that means the "quiet morning" retroactive punch is lost? Or does giving the first-run player a stronger signal betray the design?
|
||||
|
||||
**Why this matters:** If "first playthrough" and "optimal replay structure" require different storyteller behavior, that's actually a good sign — it means the game has enough depth to need it. But it also means we're currently deploying the replay-optimized configuration on players who haven't yet earned it. The replayability EXPLODES if people get to playthrough 2. The question is whether the current first-run experience gets them there.
|
||||
@@ -0,0 +1,58 @@
|
||||
# Round 1 — Ozzie: Diagnosis Questions
|
||||
|
||||
**Workshop:** Where's the Fun? v0.1 Playtest Reckoning
|
||||
**Agent:** OZZIE (Player Experience & Wow Factor)
|
||||
**Round:** 1 — Diagnosis
|
||||
|
||||
---
|
||||
|
||||
## What I'm Looking At
|
||||
|
||||
The wow moments checklist is brutal. 1 of 23 content deliverables ready. All 6 moments: "Not started." The monologue system (#119, #120, #122) is in backlog. Observation event generator (#239): backlog. THE FRIEND content: doesn't exist.
|
||||
|
||||
The wow moments didn't land because THEY WEREN'T THERE. The playtest ran on UI stubs, fog, and movement. No authored lines. No anomaly detection. No chime. No friend. No revelation.
|
||||
|
||||
That's actually two separate problems:
|
||||
|
||||
1. The content pipeline is 5% built — that's a resourcing and sequencing problem.
|
||||
2. The player hit a wall at minute 8 and STILL couldn't figure out what to do — that's a design problem that exists INDEPENDENT of content completion.
|
||||
|
||||
I need to know which one Jeroen felt more.
|
||||
|
||||
---
|
||||
|
||||
## Questions for Jeroen
|
||||
|
||||
### Question 1: The Gut Feeling
|
||||
|
||||
**"Close your eyes. The Settled Reach is finished and it's genuinely fun. What are you doing in that moment? Not the design doc version — your gut. What does your body respond to?"**
|
||||
|
||||
*Why this matters:* Every design decision in this project traces back to a vision of the fun. But the playtest broke the feedback loop. Before we diagnose what went wrong, I need to know if the vision itself is still vivid and real to Jeroen, or if the playtest knocked it loose. If Jeroen can describe a clear, visceral moment — "I'm watching an NPC break their routine and my character says something that makes my stomach drop" — that's a target worth rebuilding toward. If the answer is vague or hesitant, the design intent may be more fragile than we thought.
|
||||
|
||||
---
|
||||
|
||||
### Question 2: The Ghost Question
|
||||
|
||||
**"The checklist shows 1 of 23 wow-moment deliverables is ready. Those moments weren't in the build. When you hit the wall at minute 8 — was your frustration 'I don't have enough yet' or something scarier: that even if all 6 moments existed tomorrow, you still wouldn't have known to CARE?"**
|
||||
|
||||
*Why this matters:* There are two very different failure modes here. Failure Mode A: great design, not yet built. The fix is resourcing — write the content, implement the pipeline, run the playtest again. Failure Mode B: the moments are beautiful on paper but the player has no reason to be emotionally invested when they arrive. THE FRIEND's Contradiction requires 20 minutes of attachment before the payoff. The Character's Eye requires the player to trust that the monologue means something. If the player doesn't care about the character at minute 5, the minute-20 revelation doesn't land no matter how well it's written.
|
||||
|
||||
Which failure mode did the wall feel like?
|
||||
|
||||
---
|
||||
|
||||
### Question 3: The Floor Before the Ceiling
|
||||
|
||||
**"The 6 wow moments are all minute 5-25 payoffs. The testing wall hit at minute 8. Is there a minute-0-to-5 problem that is completely separate from those moments — something about the first 60 seconds that has nothing to do with content completion?"**
|
||||
|
||||
*Why this matters:* The wow moments are the ceiling. But something is wrong with the floor. The player stepped into the world and within 8 minutes gave up — not because the content wasn't ready, but because there was no pull forward. No itch. No "I wonder if...". In Hamilton's universe, characters who walk into rooms feel IMMEDIATE purpose even when they're lost. Did the player feel like they were a person arriving somewhere? Or did they feel like they were operating a camera with no subject? That first-60-seconds feeling — intentional or broken — is the foundation everything else stands on. If we can't fix the floor, the ceiling doesn't matter.
|
||||
|
||||
---
|
||||
|
||||
## What I'm Listening For
|
||||
|
||||
- Whether the design vision is still emotionally alive for Jeroen, or whether the playtest hollowed it out
|
||||
- Whether the gap is "not built yet" vs "wrong design"
|
||||
- Whether there's a pre-wow-moment problem — a minute-0 hook — that doesn't exist anywhere in the current design docs
|
||||
|
||||
THAT'S where the fun lives or dies.
|
||||
@@ -0,0 +1,60 @@
|
||||
# Round 1: Paula — Diagnosis Questions
|
||||
## Where's the Fun? Workshop | 2026-03-05
|
||||
|
||||
---
|
||||
|
||||
## My Frame
|
||||
|
||||
The smuggler's moral arc is the emotional engine of the v0.1 vertical slice. Four phases, authored FactId gates, irreversible transitions. The design is sound on paper: start comfortable, get pulled into doubt by human cost, face reckoning, carry the weight. The arc depends entirely on the player forming *attachment* to specific people before the system delivers moral consequence through them.
|
||||
|
||||
The playtest broke at minute 8. Which means the player never reached Phase 2. Which means the arc never started.
|
||||
|
||||
The honest truth is: this is not a content problem. You can't have a moral arc about people you haven't met. If Naia, Maret, and Pell are background tiles rather than people with stakes, the Phase 1-to-2 gates never fire — not because the system is broken, but because the player has no reason to watch them closely enough to notice their distress.
|
||||
|
||||
Three questions probe this.
|
||||
|
||||
---
|
||||
|
||||
## Question 1: Did Phase 1 feel like a *home* before it felt like a threat?
|
||||
|
||||
**The design dependency:** The smuggler's arc depends on Phase 1 (Comfort) feeling *good* — operationally confident, fond of Kael, the operation manageable, nobody visibly hurt. Phase 2 lands as loss of that comfort. Phase 3 lands as reckoning against it. If Phase 1 never felt like warmth, there's nothing to lose.
|
||||
|
||||
**The playtest suggests:** You hit a wall before knowing what to do or why to care. That's Phase 1 failing as a home. The smuggler's baseline comfort should provide implicit purpose — *I have an operation to run, these are my people, this place is familiar* — without needing to be instructed.
|
||||
|
||||
**The question:** In the minutes you played, did the smuggler's starting relationship to Kael, to the dock, to the operation, feel like a *stable world you belonged to* — even briefly? Or did it feel like a stranger in an unknown place with unknown tasks?
|
||||
|
||||
**Why it matters:** If Phase 1 never felt comfortable, the entire arc is rootless. The fix is different depending on the answer. If it's a content problem (Phase 1 lines aren't warm enough), that's one fix. If it's a mechanical problem (no behavioral anchor to the operation), that's another.
|
||||
|
||||
---
|
||||
|
||||
## Question 2: Did any NPC feel like a *person with stakes* before you stopped playing?
|
||||
|
||||
**The design dependency:** The Phase 1-to-2 transition gates on observing human cost — Naia's stress at the bar, Maret double-checking manifests, Pell's voice shaking. These are not dramatic reveals. They're quiet behavioral tells. The player has to be watching the right person at the right time AND have enough prior context to read the tell as *significant* rather than decorative.
|
||||
|
||||
**The playtest suggests:** "Monologue feels scattered and contextless" (issue #2) and "monologue observations disconnected from visual source" (issue #9). If a chalk-mark observation fires without the player knowing what chalk marks mean, it's noise. The same is true for moral observation lines — if the player doesn't know who Naia is, a monologue line about Naia looking tired at the bar is indistinguishable from ambient flavor.
|
||||
|
||||
**The question:** By the time you stopped playing, had any single NPC — Kael, Naia, Maret, Pell, anyone — registered as someone whose state *mattered to you personally*, not just as an object in the simulation? Did anyone feel like a *person* rather than a moving tile?
|
||||
|
||||
**Why it matters:** But what SUSTAINS the moral arc across 30 minutes is specific attachment to specific people. If the answer is "no," the problem isn't the arc's phases — it's the absence of relationship establishment as a designed beat before the arc can function. The arc needs a precondition that doesn't currently exist in the opening sequence.
|
||||
|
||||
---
|
||||
|
||||
## Question 3: Did you feel *complicity* while playing, or only recognize it as a design intent?
|
||||
|
||||
**The design dependency:** D-091 establishes complicity as the thematic core — not a reward, not a twist, but the slow realization that you've been part of something from the start. The smuggler's arc is built around the moment this becomes undeniable. The design goal is felt experience, not intellectual recognition.
|
||||
|
||||
**The playtest suggests:** You designed this game. You know the Kael contradiction is coming. You know the moral weight of every manifest filed. You know what "innocent" means as a `moral_weight` value. A naive player has none of this meta-knowledge — and from the playtest evidence, they also have no in-world signal that the smuggler's operation has any moral dimension at all. It's just movement and fog.
|
||||
|
||||
**The question:** Let me complicate this by separating two things: did you feel *any* moral pull — guilt, unease, protective instinct, the sense that someone might get hurt — *while playing*? Or did the complicity only exist at the design level, as something you knew was there but couldn't feel through the current implementation?
|
||||
|
||||
**Why it matters:** If complicity is currently only intellectual (you know it's the theme), the arc may need an earlier, cruder, more direct trigger — something that forces the player to make a small choice with visible consequences *before* they've formed the vocabulary to understand the moral arc. The 4-phase authored arc is the right destination. The question is whether there needs to be a simpler on-ramp that produces *felt unease* in the first 3 minutes, before the FactId gates can do their work.
|
||||
|
||||
---
|
||||
|
||||
## What I'm Listening For
|
||||
|
||||
The diagnostic I'm building toward: the moral arc is structurally sound but *temporally displaced*. It's designed for a player who is already attached, already oriented, already at home in Phase 1. The playtest failure suggests that player never exists in v0.1 — the arc starts in a void.
|
||||
|
||||
If Jeroen confirms that no NPC registered as a person with stakes, and no complicity was felt (only recognized), the recommendation will not be "revise the arc." It will be "add a relationship establishment phase before the arc begins" — a designed beat that makes the smuggler's warmth toward Kael and the normalcy of the operation *felt*, not assumed.
|
||||
|
||||
The arc doesn't need to be simpler. It needs an earlier floor.
|
||||
@@ -0,0 +1,72 @@
|
||||
# Round 1: Tyre — Diagnosis Questions
|
||||
|
||||
**Role:** Technical Architect
|
||||
**Sources reviewed:** Workshop brief, `decisions/architecture.md` (D-010, D-020, D-026, D-041), `docs/design/interaction-verbs-v0.1.md`
|
||||
|
||||
---
|
||||
|
||||
## Technical Context (for the other agents)
|
||||
|
||||
*cracks knuckles* — Before the questions, a quick reality-check on what the architecture can and can't absorb. This matters for scoping proposals in Round 3.
|
||||
|
||||
**What's cheap to change (server-only, days not weeks):**
|
||||
- Monologue priority, timing, cooldown, queue depth — all tuning parameters in the server's monologue system. Rebalancing the signal-to-noise ratio (playtest item #10) is a config change, not an architecture change.
|
||||
- Adding new fields to `ObserverSnapshot` — the MessagePack protocol is variable-shape by design (D-020). The client renders what it receives. Adding, say, a "current objective hint" or "knowledge progress summary" to the snapshot is a server-side addition + a client-side UI widget. No protocol rewrite.
|
||||
- Verb priority shifts — the `verbs[]` array is already computed server-side every tick with full context (distance, relationship state, knowledge level). Changing what `[E]` does in different situations is priority reordering, not new systems.
|
||||
- Knowledge graph queries — the graph already tracks what the player knows, what's contradicted, what's stale. Any "progress" system can be built as a read-only query over existing data. The data is there; we just don't surface it.
|
||||
|
||||
**What's moderate (new systems, but within existing architecture):**
|
||||
- An objective/hint system that reads the knowledge graph and emits guidance through the existing ObserverSnapshot pipeline. This is a new server-side system, but it plugs into existing infrastructure. Think: a system that runs once per game-minute, checks knowledge state, and pushes a "current thread" indicator to the client. Maybe a week of work.
|
||||
- Spatial anchoring for monologue (playtest item #9) — tying monologue triggers to specific tile positions so the client can render an indicator at the source location. Requires adding a `source_position` field to the monologue payload. Server change + client rendering change.
|
||||
|
||||
**What's expensive (architecture-level, would delay v0.1):**
|
||||
- Branching dialogue trees replacing the tagged line pool system (D-028). The entire content pipeline assumes pool-based selection. This would be a rebuild.
|
||||
- Real-time NPC conversation AI (dynamic dialogue generation). Not in the architecture at all.
|
||||
- Fundamentally changing the client-server boundary (moving logic to the client). This contradicts D-010/D-020/D-048 and would be a project reset.
|
||||
|
||||
---
|
||||
|
||||
## Question 1: The Knowledge Graph Already Knows — Why Doesn't the Player?
|
||||
|
||||
The knowledge graph (D-041) tracks everything the player character has learned: entity knowledge, fact knowledge, confidence levels, contradictions, staleness. The server computes this every tick. But none of it is surfaced to the player as *structured progress*.
|
||||
|
||||
The monologue system was supposed to bridge this gap (D-016), but it fires as prose fragments — atmosphere, not information architecture. The player gets "He checked his lattice again. Third time." but never gets the structured signal: *"You've noticed 2 of 3 tells on this NPC. Something is off here."*
|
||||
|
||||
**The question:** When you designed monologue as the primary feedback mechanism, were you envisioning it as the *only* channel between the knowledge graph and the player? Or was there always an implicit assumption that some structured feedback layer (a journal, a "threads" panel, a knowledge summary) would eventually sit alongside it?
|
||||
|
||||
**Why this matters technically:** If the answer is "monologue was supposed to be sufficient," then the fix is content and tuning — write better monologue lines, tighten the priority system, add spatial anchoring. If the answer is "there was always supposed to be more," then we need to design that structured layer now, and the good news is the architecture supports it cheaply — the data already exists in the knowledge graph, we just need a new rendering path through ObserverSnapshot to a client-side UI element.
|
||||
|
||||
---
|
||||
|
||||
## Question 2: What Does "No Objectives" Actually Mean at the Architecture Level?
|
||||
|
||||
The playtest showed that "no objectives, no markers" produces paralysis, not discovery (item #13). But "objectives" is a spectrum, not a binary. Technically, the architecture can support anything from:
|
||||
|
||||
- **Tier 0 (current):** Nothing. The player infers purpose from monologue and observation.
|
||||
- **Tier 1:** Passive knowledge summary — a panel showing what the player character knows, organized by entity/fact, with contradictions highlighted. No direction, just structured memory. *"You know these things. Some of them conflict."*
|
||||
- **Tier 2:** Diegetic threads — the character's neural insert (already established in D-013) surfaces "active threads" based on knowledge graph state. *"Kael's schedule doesn't match what Torek said."* Not objectives — observations the character is actively puzzling over.
|
||||
- **Tier 3:** Explicit objectives — a mission briefing, checkpoints, "investigate X." Traditional game objectives dressed in diegetic clothing.
|
||||
|
||||
All four tiers are technically feasible within the existing architecture. Tiers 1-2 are moderate effort (query existing knowledge graph, new UI widget). Tier 3 is also moderate but requires authored objective content.
|
||||
|
||||
**The question:** Where on this spectrum does the game need to land for v0.1? And critically — is the resistance to objectives a *design principle* (the game is fundamentally about discovering your own purpose) or a *scope decision* (we didn't build it yet)? Because architecturally, I can support any of these without touching the simulation core.
|
||||
|
||||
**Why this matters:** If it's a design principle, we're solving the fun problem through better monologue, spatial feedback, and environmental storytelling — and the architecture is fine as-is. If it's a scope decision, then the cheapest high-impact change might be a Tier 2 "threads" system — maybe 3-5 days of server work, 2-3 days of client UI — that gives the player structured awareness of what their character is tracking, without ever saying "go here, do this."
|
||||
|
||||
---
|
||||
|
||||
## Question 3: Is the Single Context Key Hiding the Game From the Player?
|
||||
|
||||
The v0.1 verb system has 7 verbs, but the player only sees one at a time through `[E]`. The system auto-selects based on priority. The player presses `[E]` and gets whatever the server decided was most important. The design intent was simplicity — don't overwhelm with choices.
|
||||
|
||||
But the playtest suggests the opposite problem: the player doesn't know what actions *exist*. They don't know they can Examine NPCs separately from Talking. They don't know Overhear is a thing that happens. They don't know monologue is reactive to their observations. The verb system is invisible.
|
||||
|
||||
The v0.2 plan already calls for showing the full `verbs[]` array (e.g., `[E] Talk [F] Observe`). This requires **zero server changes** — the protocol already carries all available verbs. It's purely a client-side rendering change.
|
||||
|
||||
**The question:** Would pulling the v0.2 verb display forward to v0.1 — showing all available verbs instead of just the top one — help solve the "I don't know what to do" problem? Or would it just add more noise to an already overwhelming experience (item #10)?
|
||||
|
||||
**Why this matters:** This is the single lowest-effort change that could materially affect the core loop. It's 1-2 days of client work, zero server work. If the player can *see* that "Observe" exists as a distinct action from "Talk," they might naturally discover the investigation loop. But it only helps if the player's problem is "I don't know my options" rather than "I don't know why I should care." If it's the latter, showing more verbs just adds clutter.
|
||||
|
||||
---
|
||||
|
||||
*Feasibility summary: the architecture is more flexible than the playtest suggests. The simulation engine doesn't need rebuilding — it needs better channels between what it already knows and what the player can see. The knowledge graph is rich; the rendering of that knowledge to the player is impoverished. Most high-impact changes are in the "moderate" category: new server-side query systems feeding new client-side UI, all within existing protocol boundaries.*
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user