docs(workshops): Control & Interaction Workshop outputs
Workshop notes (2 rounds), outcomes document (13 decisions, 27 tickets, v0.1 interaction model), and updated brief with final lead direction. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -20,11 +20,12 @@ docs/workshops/
|
||||
| [Content Architecture](content-architecture/) | 17 | Complete |
|
||||
| [v0.1 Gap Analysis](v01-gap-analysis/) | 18 | Complete |
|
||||
| [Content Gap Analysis v0.1](content-gap-analysis_v0_1/) | — | Complete |
|
||||
| [Knowledge Graph & Information Boundaries](knowledge-graph-information-boundaries/) | — | Brief ready |
|
||||
| [Observer Snapshot Pipeline](observer-snapshot-pipeline/) | — | Brief ready (blocked by Knowledge Graph) |
|
||||
| [Knowledge Graph & Information Boundaries](knowledge-graph-information-boundaries/) | — | Complete (2 rounds + synthesis, D-041 confirmed, 8 tickets created) |
|
||||
| [Observer Snapshot Pipeline](observer-snapshot-pipeline/) | — | Brief ready |
|
||||
| [NPC AI State Machines](npc-ai-state-machines/) | — | Brief ready |
|
||||
| [Save/Load Architecture](save-load-architecture/) | — | Brief ready |
|
||||
| [Map Authoring Pipeline](map-authoring-pipeline/) | — | Brief ready |
|
||||
| [Wiki Review & Content Standards](wiki-review/) | — | Complete (4 rounds + lead interview) |
|
||||
| [v0.1 Content Scoping](v01-content-scoping/) | — | Complete (2 rounds + closing, 38 tickets created) |
|
||||
| [Art Direction & Mood Board](art-direction-mood-board/) | — | Complete (3 rounds + closing + technical session, D-019 amended, D-043-D-052 confirmed) |
|
||||
| [Control & Interaction Scheme](control-interaction/) | — | Brief ready |
|
||||
|
||||
@@ -2,153 +2,201 @@
|
||||
## How Does the Player Touch the World?
|
||||
|
||||
**Project:** The Settled Reach (D-021)
|
||||
**Date:** 2026-02-12
|
||||
**Date:** 2026-02-13
|
||||
**Called by:** Jeroen
|
||||
**Prerequisite:** Wiki Review workshop established WASD direct control with context-sensitive interaction as unanimous direction.
|
||||
**Participants:** TBD — likely GESTALT, OZZIE, TYRE, STIG, DUDLEY, PAULA, MELLANIE, ARAMINTA
|
||||
**Participants:** Gestalt, Ozzie, Tyre, Stig, Dudley, Paula, Araminta, Nigel
|
||||
|
||||
---
|
||||
|
||||
## Context
|
||||
|
||||
The Wiki Review workshop (2026-02-12) produced unanimous consensus: the player controls their character directly via WASD movement with context-sensitive interaction prompts. The game is not Sims/Rimworld (drafted characters), not point-and-click. The player IS the character. Their body is their attention mechanism.
|
||||
The Wiki Review workshop produced unanimous consensus: the player controls their character directly via WASD movement with context-sensitive interaction prompts. The player IS the character. Their body is their attention mechanism.
|
||||
|
||||
This workshop designs the specifics. The interaction model determines everything downstream: camera, UI, dialogue triggers, NPC approach, environmental interaction, inventory, information access, and the perception modes that are core to the game's asymmetric information design.
|
||||
This workshop designs the specifics of how the player controls the character, interacts with entities and objects, and accesses information through the UI.
|
||||
|
||||
**Design constraints from existing decisions:**
|
||||
**Already decided (do not re-litigate):**
|
||||
- D-005: Single-character perspective
|
||||
- D-013: Diegetic insert (neural implant map/minimap)
|
||||
- D-016: Internal monologue as perception bridge
|
||||
- D-017: Perception modes as character build
|
||||
- D-018: Three-range sound model
|
||||
- D-020: Godot 4 client + Rust/bevy_ecs server
|
||||
- Wiki Review: WASD direct control, context-sensitive interaction, body-as-attention-mechanism
|
||||
- D-013: Diegetic insert (neural implant) as map/information interface
|
||||
- D-015: Camera locked to character, no panning. Rotation deferred to post-v0.1.
|
||||
- D-016: Internal monologue as core perception/atmosphere system
|
||||
- D-017: Perception modes as character build system
|
||||
- D-018: Three-range sound model (close/medium/long)
|
||||
- D-019: Top-down camera at ~15-20° shallow tilt ("the angle"), orthographic, perspective in sprite art
|
||||
- D-028: Dialogue architecture (4-layer: access, history, trust, unprompted)
|
||||
- D-031: Time system (10 ticks/game-minute, 4 day phases, pause available)
|
||||
- D-033: Entity color = relationship to player (palette defined)
|
||||
- D-041: Knowledge graph (confidence hierarchy gates dialogue and monologue)
|
||||
- D-043: Visual style — "functional warmth," clean 2D, bold silhouettes, Light2D-driven atmosphere
|
||||
- D-044: Visual hierarchy — entity (2px) > object (1px) > structure (minimal). Entity always wins.
|
||||
- D-045: Environmental neutrality — strict zero visual shift from narrative state
|
||||
- D-046: Lighting — Darkwood cone + BR2049 color temperature + Hopper composition
|
||||
- D-047: Two-tier animation — clear (public routine) vs ambiguous (private intention)
|
||||
- D-048: Neural insert overlay — geometric data + bloom shader, not affected by fog
|
||||
- D-049: Z-level rendering stack — 8 layers, fog on layer 5, insert on layer 6
|
||||
|
||||
---
|
||||
|
||||
## Layer 1: Movement & Camera
|
||||
## Lead Seed: Current Thinking on Controls
|
||||
|
||||
**How does the character move through space?**
|
||||
The following is Jeroen's initial direction. Workshop participants should use this as a starting point — challenge, refine, or extend, but this is the baseline.
|
||||
|
||||
- **Movement**: WASD (confirmed). But: 8-directional grid? Free movement? Physics-based? Sprint/walk toggle? Sneak mode?
|
||||
- **Camera**: Top-down (confirmed by "top-down immersive sim"). But: fixed angle? Rotatable? Zoom level? How close before you can read a sign? How far before NPCs are silhouettes?
|
||||
- **Collision**: Tile-based? Free-form? Can you squeeze between tables? Block doorways?
|
||||
- **Speed**: Does speed affect perception? Walking slowly = more monologue triggers? Running = less observation?
|
||||
### Movement
|
||||
- **WASD movement**, character stays center-screen, map scrolls.
|
||||
- Movement direction snaps to the **nearest cardinal 8-axis direction** from the input.
|
||||
- **Mouse pointer controls facing direction.** The character looks where the mouse points. This decouples movement from facing — you can strafe sideways while looking at a person of interest.
|
||||
|
||||
**Questions:**
|
||||
1. **Gestalt**: Does movement speed affect information gathering? Should walking vs. running change what you notice?
|
||||
2. **Tyre**: Godot 4 tile-based or free movement? What's the technical recommendation?
|
||||
3. **Ozzie**: What camera distance feels right for "I am this person" vs. "I can see the room"?
|
||||
4. **Araminta**: What visual information density works at the proposed camera distance?
|
||||
### Camera
|
||||
- **Fixed top-down angle** at ~15-20° from vertical ("the angle," D-019 amendment). Orthographic camera with perspective faked in sprite art. Rimworld's approach: sprites drawn as if viewed from a shallow tilt, south-facing front faces visible. 3D render pipeline Camera3D at -72.5° produces this. Vision cone math remains pure 2D.
|
||||
- **Scroll wheel zooms** in/out, but vision cone and fog still apply — zooming out doesn't grant omniscience. You see more floor, but the fog boundaries don't change.
|
||||
- Character remains center-screen at all times (D-015).
|
||||
|
||||
### Mouse & Interaction
|
||||
- **Mouse cursor is context-sensitive.** It changes appearance when hovering over interactable entities (NPCs, objects, terminals, doors).
|
||||
- **Left click** performs the default action on an interactable. When there is exactly one interaction option, the cursor shows the **verb as a tooltip** (e.g., "Talk", "Read", "Open"). When there are multiple options, the tooltip shows **"Interact..."** and left click opens the menu.
|
||||
- **Radial or dropdown menu** for multi-option interactions. Never more than one click away from any action.
|
||||
- **Mouse doubles as targeting reticle** when a weapon is selected — the cursor becomes the aim point.
|
||||
- **Right click** opens a **world interaction menu** — a general-purpose context menu for non-entity actions: observe room, call taxi, open phone (the neural implant interface). This is the entry point to the insert UI, comms, maps, journal, and any lattice-connected tools the character has.
|
||||
|
||||
### Fog & Visibility Layers
|
||||
The map is visible at all times, but **layers of fog encode information quality:**
|
||||
|
||||
1. **Clear (forward vision cone):** Full visibility, no fog. Blocked by walls/obstacles as normal (D-011 shadowcasting).
|
||||
2. **Light fog (peripheral vision):** Reduced clarity. You can see shapes and movement but detail is diminished.
|
||||
3. **Sound pings in fog:** When you hear something in the fog (D-018 medium range), a **visual ping** appears at the fog edge with binaural audio reinforcement. Direction and distance are approximate.
|
||||
4. **Recognized movement in fog:** People you have **previously seen** (knowledge graph entry exists) and can **currently hear moving** appear as visible figures in the gray fog. Their identity is known because you recognize them — the character icon overlays the gray figure to communicate *how* you know they're there.
|
||||
5. **Unrecognized presence:** When you hear someone you haven't identified, a **generic gray blob** appears at an approximate (fuzzy, non-exact) position. Secondary senses tell you something is there, but not who.
|
||||
6. **Augmented senses:** If your character has IR or sensor implants (D-017 perception modes), additional overlays appear in the fog:
|
||||
- **IR/thermal:** A blob in heat-signature colors.
|
||||
- **Sensor sweep:** A stylized digital effect (matrix-style falling characters or similar) indicating a detected presence.
|
||||
- When you **know who that entity is**, their character icon overlays the sensor blob — showing both the detection method and the identification.
|
||||
|
||||
**Lead note:** "I want a clear distinction between active senses and obscured areas, but I don't want it to look boring." The fog should feel alive — not a flat gray overlay but something with depth and atmosphere. Pings, movement, sensor ghosts should make the fog an active information surface, not a dead zone.
|
||||
|
||||
### Map Awareness (Fog of War for Unexplored Areas)
|
||||
What you see in areas you haven't visited depends on your **implant loadout:**
|
||||
|
||||
- **With a maps app (implant):** Building outlines and structural layout are visible in the fog — you can see the shape of corridors, rooms, exits. But **no movable entities** — no characters, vehicles, destructible objects, or anything generated/modified by the story engine. The map data is static infrastructure only.
|
||||
- **Without an implant (or without maps app):** Total fog. Zero information about unexplored areas.
|
||||
- **Physical map (purchased at a shop):** Same as maps app but non-dynamic — shows the map as it was when printed. Doesn't update with story-engine changes.
|
||||
|
||||
This creates a meaningful difference between implant loadouts at the start of the game without gating core gameplay.
|
||||
|
||||
---
|
||||
|
||||
## Layer 2: Context-Sensitive Interaction
|
||||
## Layer 1: Movement & Interaction Details
|
||||
|
||||
**What happens when you approach something?**
|
||||
The lead's seed covers the broad strokes. The workshop should resolve these remaining specifics:
|
||||
|
||||
The Wiki Review poll referenced Disco Elysium interaction and Hotline Miami movement. The key design question: how do interaction prompts appear, and how does the player select from options?
|
||||
### Movement
|
||||
- **Sprint/walk/sneak toggle?** Does speed affect perception? Walking slowly = more monologue triggers, more observation? Running = reduced vision cone, less detail noticed? Sneaking = slower but quieter (D-018 sound model — you generate less noise)?
|
||||
- **Collision model:** Tile-based movement (snap to grid) or free movement with tile-based collision? Can you squeeze between furniture? Block doorways?
|
||||
|
||||
- **Proximity trigger**: How close before options appear? Line-of-sight required?
|
||||
- **Prompt style**: Single action prompt (changes based on context)? Radial menu? List? Paula suggested single-action prompts that change based on proximity + relationship + knowledge.
|
||||
- **NPC interaction**: Walk up to NPC → what appears? "Talk"? Multiple options (talk, observe, confront)? Does relationship state change the options?
|
||||
- **Object interaction**: Examine, use, take? How do you read a manifest on a desk vs. pick up a crate?
|
||||
- **Environmental interaction**: Doors, terminals, cargo containers, signs — each different?
|
||||
- **Eavesdropping**: Can you hear NPCs talking without direct interaction? How does proximity affect this?
|
||||
### Interaction
|
||||
- **Proximity threshold:** How close before the cursor changes and interaction becomes available? Line-of-sight required, or can you interact through a doorway?
|
||||
- **Eavesdropping:** Is overhearing NPC conversations purely passive (D-018 medium range triggers monologue), or can you actively position yourself to listen? Is there a "lean in" or "listen" action?
|
||||
- **NPC interaction options:** What's the option set? Does it vary by relationship state and knowledge level (D-041 confidence tiers)?
|
||||
- Unknown NPC: "Observe" / "Talk"
|
||||
- Known NPC (KnowsOf+): "Talk" / "Observe" / additional context-sensitive options
|
||||
- KnowsDetails+: "Confront" appears as an option
|
||||
- **Object interaction set:** Examine, use, take — or is it purely contextual? How does reading a manifest differ from picking up a crate?
|
||||
|
||||
**Questions:**
|
||||
1. **Gestalt**: How many interaction options per NPC at once? Does complexity vary by relationship state?
|
||||
2. **Paula**: How does dialogue initiation work? Player approaches NPC → what's the UX to the first line of dialogue?
|
||||
3. **Stig**: What UI patterns support context-sensitive prompts without cluttering the screen?
|
||||
4. **Dudley**: How does the server determine what interaction options are available based on entity state?
|
||||
**Questions for participants:**
|
||||
1. **Gestalt**: Does movement speed mechanically affect information gathering? Is this fun or just punishing?
|
||||
2. **Tyre**: Tile-based vs free movement in Godot 4 — technical recommendation for v0.1?
|
||||
3. **Stig**: What UI pattern for the context-sensitive cursor + tooltip/menu? Reference implementations?
|
||||
4. **Dudley**: How does the server compute available interaction options per entity per tick?
|
||||
5. **Ozzie**: Does the cursor-as-reticle / cursor-as-interaction-prompt duality feel natural or jarring?
|
||||
6. **Araminta**: What does the context-sensitive cursor look like across states (default, interactable hover, weapon aim)?
|
||||
|
||||
---
|
||||
|
||||
## Layer 3: Information & Perception
|
||||
## Layer 2: Fog & Perception UX
|
||||
|
||||
**How does the player ACCESS information vs. RECEIVE information?**
|
||||
D-016, D-017, D-018 define WHAT information reaches the player. This layer is about HOW it's presented.
|
||||
|
||||
The game has two information channels:
|
||||
1. **Active**: Player chooses to look, examine, query the lattice, read something
|
||||
2. **Passive**: Monologue fires based on observation triggers, overheard conversations, environmental tells
|
||||
### Open Questions
|
||||
- **Fog rendering:** The lead wants fog that feels alive, not flat. What visual treatment makes the obscured areas atmospheric without obscuring gameplay information? Particle effects? Animated noise? Depth layers?
|
||||
- **Sound ping visualization:** What does a medium-range sound ping look like at the fog edge? Ripple? Directional arrow? Glow pulse? How does it interact with binaural audio?
|
||||
- **Sensor overlay aesthetics:** IR blobs, digital sensor sweeps, recognized-entity icon overlays — how do these layer without becoming visual noise? How many simultaneous perception modes can be active before the screen becomes unreadable?
|
||||
- **Identity overlay on fog entities:** When you recognize a heard/sensed entity, their icon appears over the blob. What does this transition look like? Instant? Fade-in? Does it feel like a moment of recognition?
|
||||
|
||||
- **Lattice queries**: How do you look up an NPC via the neural lattice? A UI panel? A diegetic device? Walk up and "scan"?
|
||||
- **Monologue delivery**: Text overlay? Speech bubble? Dedicated UI area? How does it not compete with dialogue?
|
||||
- **Tell observation**: Player walks past NPC with a behavioral tell — how is it surfaced? Monologue? Visual indicator? Both?
|
||||
- **Knowledge journal**: How do you review what you know? Diegetic (the implant's records)? Pause menu?
|
||||
|
||||
**Questions:**
|
||||
1. **Gestalt**: Where's the line between "the game tells you" (monologue) and "you have to look" (active observation)?
|
||||
2. **Ozzie**: When does information delivery feel immersive vs. intrusive?
|
||||
3. **Tyre**: How does the knowledge graph surface in the UI without becoming a database viewer?
|
||||
4. **Mellanie**: How much monologue can appear before the player stops reading?
|
||||
**Questions for participants:**
|
||||
1. **Araminta**: Visual treatment for the fog layers (clear → light fog → deep fog → unexplored). How do we make fog atmospheric, not boring?
|
||||
2. **Gestalt**: How many simultaneous perception overlays before it stops being a build system and starts being sensory overload?
|
||||
3. **Ozzie**: What makes the "I hear someone I know moving in the fog" moment feel cool rather than routine?
|
||||
4. **Tyre**: Performance implications of layered fog with animated overlays, sensor effects, and entity ghosts in Godot 4?
|
||||
|
||||
---
|
||||
|
||||
## Layer 4: Dialogue & Conversation
|
||||
## Layer 3: Information Access & the Implant UI
|
||||
|
||||
**How do conversations work mechanically?**
|
||||
D-013 defines the insert as diegetic. The right-click world menu is the entry point. What's behind it?
|
||||
|
||||
- **Initiation**: Player walks up, presses interact. Then what? Dialogue box? In-world text? Camera zoom?
|
||||
- **Response selection**: Menu of options? Single-branch with trust-gated variations? How does the 4-layer dialogue system (access, history, trust, unprompted) translate to player-facing UX?
|
||||
- **Conversation persistence**: Can you walk away mid-conversation? Resume later? Does the NPC react?
|
||||
- **Dual-lens integration**: Same NPC, different options per character. How does the UI show what's available vs. locked?
|
||||
- **Confrontation**: How does "I know you're involved" differ from casual conversation in the UX?
|
||||
### Open Questions
|
||||
- **Right-click menu scope:** What actions live in the world menu? Observe room, call taxi, open phone — what else? Is this the pause menu equivalent?
|
||||
- **Phone/implant UI:** What does "open phone" look like? Full-screen overlay? Corner panel? Does the game pause or continue while you're in the implant UI?
|
||||
- **Knowledge journal:** How do you review what you know? Diegetic (implant records)? Is it organized by person, by topic, by timeline?
|
||||
- **Maps app UX:** How does the implant map interact with the game world? Overlay on the main view? Separate panel? Minimap always visible or on-demand?
|
||||
- **Active vs passive information:** The game pushes information via monologue (passive). The player pulls information via the implant (active). Where's the line? Can you "scan" an NPC for lattice data, or do you have to talk to them?
|
||||
|
||||
**Questions:**
|
||||
1. **Paula**: What does the confrontation UX look like vs. casual conversation? Should the player feel the tension mechanically?
|
||||
2. **Mellanie**: How does monologue fire DURING dialogue? (Character reacts to what the NPC said)
|
||||
3. **Stig**: Dialogue box design — full screen? Corner overlay? In-world?
|
||||
4. **Gestalt**: How do trust-gated options appear (or not appear) without revealing the gating system?
|
||||
**Questions for participants:**
|
||||
1. **Gestalt**: What information should the player actively seek vs. what should the game push? Where's the sweet spot for detective work?
|
||||
2. **Stig**: Right-click world menu implementation — radial? List? Nested? What fits the diegetic framing?
|
||||
3. **Tyre**: Does the game pause when the implant UI is open? What are the multiplayer implications (D-009)?
|
||||
4. **Ozzie**: When does information access feel like detective work vs. menu navigation?
|
||||
|
||||
---
|
||||
|
||||
## Layer 5: Environmental Interaction & Inventory
|
||||
## Layer 4: Dialogue Initiation & Confrontation UX
|
||||
|
||||
**What can you touch, carry, and use?**
|
||||
D-028 defines the dialogue architecture (4 layers: access, history, trust, unprompted). This layer is about the player-facing UX — what the player sees and does, not the underlying system.
|
||||
|
||||
- **Inventory**: Does the character have inventory? Pockets? A bag? Or is everything contextual (use the terminal, read the manifest, you don't carry things)?
|
||||
- **Evidence**: How does the detective collect evidence? Take a photo? Log it in the lattice? Pick it up?
|
||||
- **Contraband**: How does the smuggler interact with cargo? Physical handling? Abstract management?
|
||||
- **Keys/access**: Physical keys? Access codes? Lattice authorization levels? How does restricted access feel in the UX?
|
||||
### Open Questions
|
||||
- **Initiation flow:** Player walks up to NPC, cursor shows "Talk", clicks. Then what? Dialogue box appears? Where? How does the transition feel?
|
||||
- **Response selection:** Does the player see a list of topics/questions? Single-branch with the system selecting which lines are available? Or explicit choice from visible options?
|
||||
- **Gated options visibility:** Do locked dialogue options show as grayed-out (player knows they're missing something) or are they invisible (player doesn't know what they don't know)? The latter fits the information asymmetry design better.
|
||||
- **Confrontation feel:** "I know you were in corridor B-7" should feel different from "How's your shift going?" How does the UI communicate tension without a separate confrontation system?
|
||||
- **Walk-away:** Can you leave mid-conversation? What's the NPC reaction? Can you resume?
|
||||
- **Mid-dialogue monologue:** Character reacts internally to what the NPC says (D-016). How does monologue text appear during a dialogue exchange without competing?
|
||||
|
||||
**Questions:**
|
||||
1. **Gestalt**: How physical is the interaction model? Carry objects? Or is everything knowledge-based (you SAW the manifest, you don't HAVE the manifest)?
|
||||
2. **Tyre**: What's feasible for v0.1 inventory? Full system or knowledge-only?
|
||||
3. **Nigel**: Does inventory variation matter for replayability, or is knowledge-based sufficient?
|
||||
**Questions for participants:**
|
||||
1. **Paula**: How should confrontation feel different from casual conversation in the UX?
|
||||
2. **Stig**: Dialogue box design — where on screen, how much space, how does it coexist with the game world?
|
||||
3. **Gestalt**: Should locked options be invisible or visibly locked? What serves the "asymmetric information" feel?
|
||||
4. **Ozzie**: What makes dialogue initiation feel natural — like walking up to someone — rather than "pressing the talk button"?
|
||||
|
||||
---
|
||||
|
||||
## Layer 6: Time & Routine
|
||||
## Layer 5: Inventory & Physical Interaction
|
||||
|
||||
**How does time pass and how does the player relate to schedules?**
|
||||
### Open Questions
|
||||
- **Inventory existence:** Does the character carry items, or is everything knowledge-based? "You SAW the manifest" vs "you HAVE the manifest" — which model fits the game?
|
||||
- **Evidence collection:** Detective logs evidence in the lattice? Takes photos? Or just observes and the knowledge graph records it?
|
||||
- **Contraband handling:** Smuggler interacts with cargo physically (move crates, hide packages) or abstractly (manage shipments via terminal)?
|
||||
- **Access systems:** Physical keys, access codes, lattice authorization — how does restricted access feel? Does the smuggler pick locks while the detective flashes credentials?
|
||||
|
||||
- **Time control**: Real-time? Acceleratable? Pause-to-think? Day/night cycle?
|
||||
- **Routine awareness**: Can you see NPC schedules? Predict where someone will be? Or do you learn through observation?
|
||||
- **Waiting**: Can you wait/skip time? Stand outside someone's shift and wait for them?
|
||||
- **Urgency**: Is there time pressure? Can you miss events? Or is the world patient?
|
||||
|
||||
**Questions:**
|
||||
1. **Gestalt**: Does time pressure create interesting decisions or just stress?
|
||||
2. **Ozzie**: What pacing feels right for "quotidian with undertow"?
|
||||
3. **Dudley**: How does the tick-based simulation map to player-perceived time?
|
||||
**Questions for participants:**
|
||||
1. **Gestalt**: How physical should the interaction model be? Does carrying items create interesting decisions?
|
||||
2. **Tyre**: What's feasible for v0.1? Full inventory or knowledge-only with physical interaction deferred?
|
||||
3. **Paula**: How does evidence collection differ by character? Does the smuggler's version of "evidence" (leverage, receipts, debts) feel different from the detective's?
|
||||
|
||||
---
|
||||
|
||||
## Workshop Format
|
||||
|
||||
**2-3 rounds.**
|
||||
**2 rounds.**
|
||||
|
||||
**Round 1**: Layer-by-layer proposals. Each participant addresses their domain questions with concrete UX descriptions.
|
||||
**Round 1**: Each participant addresses their domain questions with concrete UX proposals. React to the lead's seed — validate, challenge, or extend. Describe interactions as "the player does X, they see Y, it feels like Z."
|
||||
|
||||
**Round 2**: Integration — how do the layers interact? Movement affects perception, perception affects dialogue options, dialogue affects knowledge, knowledge affects interaction prompts.
|
||||
|
||||
**Round 3 (if needed)**: V0.1 minimum viable interaction model — what ships first?
|
||||
**Round 2**: Integration pass — how do the layers interact? Movement affects perception, perception feeds interaction options, interaction feeds knowledge, knowledge changes available interactions. Identify the v0.1 minimum viable interaction model.
|
||||
|
||||
## Expected Outputs
|
||||
|
||||
- **Interaction model spec**: Complete description of how the player touches the world
|
||||
- **UI wireframe direction**: Enough for Stig/Araminta to begin prototyping
|
||||
- **Perception UX spec**: How information flows to the player through the interaction model
|
||||
- **V0.1 scope**: Minimum viable interaction for the vertical slice
|
||||
- **Tickets**: New implementation tickets for the interaction model
|
||||
- **Control scheme spec**: Complete mapping of inputs to actions (keyboard, mouse, gamepad if applicable)
|
||||
- **Interaction model spec**: How context-sensitive prompts work, what options appear when
|
||||
- **Fog/perception UX spec**: Visual treatment for fog layers, sensor overlays, entity recognition in fog
|
||||
- **Implant UI direction**: What lives behind the right-click menu, how it's organized
|
||||
- **Dialogue UX spec**: Initiation flow, response selection, confrontation feel
|
||||
- **V0.1 scope**: Minimum viable interaction set for the vertical slice
|
||||
- **Tickets**: Implementation tickets for the interaction/UI systems
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,395 @@
|
||||
# Workshop Outcomes: Control & Interaction Scheme
|
||||
|
||||
**Workshop:** Control & Interaction Scheme — "How Does the Player Touch the World?"
|
||||
**Date:** 2026-02-13
|
||||
**Rounds:** 2 + final lead calls
|
||||
**Participants:** Gestalt, Ozzie, Tyre, Stig, Dudley, Paula, Araminta, Nigel
|
||||
**Documenter:** Qatux
|
||||
**Full notes:** `docs/workshops/control-interaction/workshop-notes.md`
|
||||
|
||||
---
|
||||
|
||||
## Decisions Produced
|
||||
|
||||
This workshop produced 13 decisions ready for formalization. Suggested D-NNN IDs and domain file assignments below.
|
||||
|
||||
### D-053: Movement as stance toggle system (scope.md)
|
||||
- **Decision:** Movement uses a stance toggle ladder: Sprint / Walk / Careful / Crouch / (Prone future). Toggle-based, not hold-to-activate. Each archetype has a default stance via MovementProfile component. All characters have access to all stances. Prone: toggle out only in normal play; future combat allows "hit the deck" quick-entry.
|
||||
- **Rationale:** Stances compose with perception (sprint = tunnel vision, careful = heightened awareness) and with the tile-based eavesdropping system. Toggle avoids modifier-key fatigue.
|
||||
- **Raised by:** Lead (final call), building on Gestalt (triad), Dudley (MovementProfile), Nigel (character-defining speed)
|
||||
- **Server values (Dudley):** Walk = 1 tile/2 ticks. Sprint = 1 tile/1 tick. Careful = 1 tile/3 ticks. Crouch TBD.
|
||||
- **Perception coupling (Gestalt + Ozzie, endorsed by lead):** Sprint suppresses interpretation (monologue at 40%), not data (overlays still render). Careful enhances monologue (150%) and grants "tell notice bonus." Composable via multiplicative formula: `movement_modifier * perception_load_modifier`.
|
||||
- **Dissent:** None after lead call. Nigel's character-differentiation concern addressed by MovementProfile (different defaults per archetype).
|
||||
|
||||
### D-054: Tile-based movement with same-tile occupancy (architecture.md)
|
||||
- **Decision:** All movement is tile-based (server-authoritative, discrete positions). Client-side Tween interpolation (100-150ms) hides the grid. Same-tile occupancy via TilePresence component (Standing/Prone/Seated/Fixture layers) allows multiple entities on one tile in different postures. Mouse facing is client-side float; server receives facing octant only.
|
||||
- **Rationale:** Determinism (D-010). Tile-based enables shadowcasting, pathfinding, and trivial collision. Occupancy system addresses Nigel's emergent positioning needs (doorway blocking, eavesdrop positioning, furniture interaction) within tile-based constraints. ~150 lines server-side.
|
||||
- **Raised by:** Tyre (tile-based, non-negotiable), Dudley (tiles-per-tick), Nigel (converted: "tiles are BETTER for replayability — discrete positions = finite meaningful choices")
|
||||
- **Dissent:** None. Nigel initially proposed free movement (Round 1) but converted in Round 2 after seeing how tile-based spatial puzzles create replayability.
|
||||
|
||||
### D-055: Sprint explicitly suppresses interaction buffer (architecture.md)
|
||||
- **Decision:** When in Sprint stance, the server explicitly clears the interaction buffer. No interaction verbs are computed or sent to the client during sprint. Anomaly monologue survives sprint (Ozzie's "sprint double-take").
|
||||
- **Rationale:** Mouse gymnastics to click during sprint = bad UX. Explicit suppression is cleaner and deterministic. "Sprint double-take" preserves the feel that the character is still aware even when the player can't interact.
|
||||
- **Raised by:** Dudley (explicit suppression), Ozzie (anomaly survival)
|
||||
- **Dissent:** Gestalt argued physics handles it naturally (player passes through interaction radius too fast to click). Lead ruled explicit suppression for clarity.
|
||||
|
||||
### D-056: Cursor states — insert-styled geometric (perception.md)
|
||||
- **Decision:** Four cursor states using the neural insert's geometric visual language (Araminta's spec):
|
||||
- Default: four thin inward-pointing ticks, bloom, white-blue #c8d0e0
|
||||
- Entity hover: ticks expand outward (150ms), corner brackets frame entity, shifts to D-033 relationship color, verb tooltip in insert styling
|
||||
- Object hover: ticks rotate 45 degrees to X-shape, muted grey #8b8ba0 (amber #e8c547 if flagged)
|
||||
- Weapon aim: hard transition, ticks extend, center gap widens, lines thicken 1px to 2px, warm white #f0e8d8, NO bloom. Entity in sights tints to D-033 color.
|
||||
- All transitions 150ms linear, z-layer 7, never changes by zone or narrative state (D-045).
|
||||
- Cursor changes on LOS, not just proximity (Stig). Click range: ~2 tiles. Weapon-selected mode suppresses interaction prompts unless Shift held (Ozzie: "combat intent trumps social intent").
|
||||
- **Rationale:** Diegetic — cursor is the insert's own interface element. Consistent with D-048 (insert overlay aesthetic). Entity in weapon sights tinting to D-033 creates moral friction (aiming at a friend should feel wrong).
|
||||
- **Raised by:** Araminta (visual spec), Stig (UX rules), Ozzie (weapon suppression)
|
||||
- **Dissent:** None.
|
||||
|
||||
### D-057: Entity interaction — vertical list, insert-styled (perception.md)
|
||||
- **Decision:** Entity interactions use a compact vertical list (not radial). 2-4 options max, anchored to entity position. Insert-styled with Araminta's aesthetic. New options (unlocked by knowledge changes) highlighted with gradient glow background. Radial menu reserved for world menu only.
|
||||
- **Rationale:** Variable-length text options (e.g., confrontation lines in character voice) break radial spatial memory. List handles 1-4 options cleanly. New-item glow signals "something changed" without the UX hazard of geometry transforming under the cursor. Labels render on z-layer 6 (insert overlay) — diegetic test: labels disappear if insert is off.
|
||||
- **Raised by:** Stig (vertical list structure + diegetic test), Araminta (insert aesthetic). Lead resolved in Stig's favor on structure, Araminta's on styling.
|
||||
- **Dissent:** Araminta argued for spoke radial (geometry transformation signals qualitative change). Lead rejected — moving goalpost under cursor is bad UX during aiming.
|
||||
- **References:** Disco Elysium (world-embedded indicators), Darkwood (minimal cursor), Rimworld (right-click context list).
|
||||
|
||||
### D-058: World menu — radial, 4 spokes (perception.md)
|
||||
- **Decision:** Right-click opens a radial world menu. Four spokes: Observe (eye icon), Insert (phone), Comms (signal), Wait (clock). Drag-release for power users, click-click for newcomers. Insert-styled: geometric lines, thin spokes with icons, nearly transparent. Renders on z-layer 6. v0.1: 2 spokes only (Observe + Insert).
|
||||
- **Rationale:** Radial works for world menu because items are fixed categories that don't vary by knowledge state. Spatial memory builds quickly (~10 minutes). Scaling to 5-6 spokes is straightforward.
|
||||
- **Raised by:** Stig (structure + implementation), Araminta (insert aesthetic)
|
||||
- **Dissent:** None.
|
||||
|
||||
### D-059: Fog — shader-based, five layers, knowledge-graph-driven (perception.md)
|
||||
- **Decision:** Fog is a shader-driven system (not particles) with five distinct layers:
|
||||
1. Clear (vision cone): soft gradient edge 3-4 tiles, no hard line (Darkwood approach)
|
||||
2. Light fog (peripheral): desaturated 40-50%, brightness -30%, animated Perlin noise (8-10s cycle), entity D-033 colors visible but reduced
|
||||
3. Deep fog (explored): near-monochrome, ~10% zone temperature tint (bar=warm, hub=cool, corridor=neutral), more pronounced noise (15-20s cycle)
|
||||
4. Unexplored + maps app: geometric wireframe outlines #333340
|
||||
5. Unexplored, no maps: solid near-black #12141a
|
||||
- Fog is knowledge-graph-driven: same fog shows different information per character based on their KG. "Fog is not darkness — it's the absence of your attention."
|
||||
- Sound pings: 2-3 concentric expanding rings (sonar-style), insert white-blue. Loud = 3 rings bright fast, quiet = 1 ring faint slow. Fade over 1.5s.
|
||||
- Recognized entity in fog: D-033 color glow + faint identifying silhouette feature + 0.8s breathing pulse + half-tile position drift (approximate, not exact).
|
||||
- Unrecognized entity: neutral grey #555566 blob, no features.
|
||||
- Performance: <1ms/frame total. Vision cone = PointLight2D. Fog = darkness + noise shader on CanvasGroup (Layer 5).
|
||||
- Soft perception degradation (diegetic scan-line interference) at high overlay load, replacing hard mode cap.
|
||||
- **Rationale:** Fog must be crucial in v0.1 (lead directive). KG-driven fog is the primary replayability mechanism — same corridor, different character, different information visible. Shader approach confirmed technically trivial by Tyre.
|
||||
- **Raised by:** Araminta (visual spec), Tyre (technical validation), Nigel (replayability case), Gestalt (signal framework)
|
||||
- **Dissent:** None.
|
||||
|
||||
### D-060: Cognitive delay for fog recognition (perception.md)
|
||||
- **Decision:** When the player recognizes a heard/sensed entity in fog, recognition is NOT instant. Single cognitive delay: 0.6s base, 0.3s when observe_anomaly triggers (urgent context). Values are tunable. Monologue fires DURING the delay ("Those footsteps... that's Kael's walk"), not after. Visual transition: grey blob to D-033 color + silhouette over ~0.3s within the cognitive delay window. Natural recognition (organic resolve) feels different from sensor recognition (digital snap with biometric ID).
|
||||
- **Rationale:** Recognition should feel like a cognitive event, not a UI update. The delay creates a moment where the player's brain and the character's brain are working together. Context-sensitive urgency (0.3s for anomalies) prevents the delay from feeling sluggish in tense situations.
|
||||
- **Raised by:** Ozzie (timing values + urgency split, adopted), Gestalt (longer values, not adopted but playtesting may adjust), Araminta (visual transition spec)
|
||||
- **Dissent:** Gestalt proposed 0.8-1.2s (longer, more contemplative). Lead chose Ozzie's shorter values as starting point, tunable.
|
||||
|
||||
### D-061: Dialogue box — bottom screen, max 20% height, no portraits (perception.md)
|
||||
- **Decision:** Dialogue occupies the bottom of the screen, max 20% height, max-width (not percentage-based). Layout: NPC speech top, player response options below, left-aligned. Max 3 response options visible. NO portraits (NPC is on screen). Monologue floats ABOVE the dialogue box on z-layer 7 — spatial separation allows monologue to contradict dialogue visually. Walk-away via WASD, dialogue fades over 300ms, no close button.
|
||||
- **Rationale:** Game world stays live above the dialogue box. The player sees the NPC's body language while talking — no portrait needed. Monologue above + dialogue below = the character can think one thing while saying another. Max 3 options + invisible locks = player never knows what they're missing.
|
||||
- **Raised by:** Stig (UI spec), Lead (20% height constraint, max-width directive)
|
||||
- **Dissent:** Stig initially proposed 25% height and 50% width centered. Lead constrained to 20% height and max-width.
|
||||
|
||||
### D-062: Invisible locked dialogue options (content.md)
|
||||
- **Decision:** Dialogue options the player hasn't unlocked are completely invisible. No grayed-out options. No lock icons. No hint that more options exist. Exception: NPC holding back is communicated via monologue ("She changed the subject. Fast."), not via locked UI elements.
|
||||
- **Rationale:** Four reasons (Gestalt): (1) Asymmetry — you don't know what you don't know. (2) Dopamine — new options appearing on repeat visits IS the reward. (3) Anti-metagaming — no checklist to complete. (4) Confrontation surprise — Confront option appearing for the first time is a dramatic moment. Strongest consensus point of the entire workshop.
|
||||
- **Raised by:** Gestalt (proposal + rationale), Nigel (emphatic reinforcement: "non-negotiable")
|
||||
- **Dissent:** None. Unanimous across all 8 participants.
|
||||
|
||||
### D-063: Confrontation — same box, different weight (content.md)
|
||||
- **Decision:** Confrontation uses the same dialogue UI as casual conversation. No separate confrontation mode. Different weight communicated through: (1) italic text in character's internal voice for confrontation options (regular: "Shift schedule" / confrontation: *"I saw you in corridor B-7"*), (2) pre-delivery monologue beat (1-2s: *"This changes things. No taking it back."*), (3) world responds — NPC shifts to Tier 2 animation, entity D-033 color may fade, monologue frequency spikes, available topics narrow. Walk-away mid-confrontation contaminates social space (NPC routine shifts, KG records incompleteness). v0.1 staging: proximity check + audio dip + text styling. Camera tighten deferred.
|
||||
- **Rationale:** Confrontation should feel heavy because of what you're saying, not because the UI changed. The weight comes from pacing, voice, and consequence.
|
||||
- **Explicitly NOT:** Separate confrontation UI, timed responses, visible relationship meter, correct/incorrect approaches.
|
||||
- **Raised by:** Paula (mechanism), Ozzie (physical staging), Stig (UI container)
|
||||
- **Dissent:** None.
|
||||
|
||||
### D-064: Walk-away — three-phase consequences (content.md)
|
||||
- **Decision:** Walking away from dialogue (WASD during conversation) triggers three phases: (1) Immediate break — dialogue fades over 300ms, silence. (2) NPC reacts — animation shifts, may call after you, routine may change. (3) KG records — incompleteness is logged (confrontation initiated but not completed), queryable, affects future dialogue/monologue/NPC behavior. Walk-away consequences vary by NPC tolerance threshold per seed — no universal social rules to metagame.
|
||||
- **Rationale:** Walking away is an action with meaning. Leaving mid-confrontation is different from leaving mid-smalltalk. The KG recording means the game remembers what you started.
|
||||
- **Raised by:** Paula (three phases), Stig (WASD mechanic, 300ms fade), Ozzie (consequences), Nigel (tolerance per seed)
|
||||
- **Dissent:** None.
|
||||
|
||||
### D-065: Smuggler inventory — knowledge-primary with physical evidence (scope.md)
|
||||
- **Decision:** Knowledge is the primary "inventory" for all characters. The smuggler additionally gets a minimal physical inventory: 3 specific items in v0.1 (manifest copy, corridor access token, personal comm log). Capacity per archetype: smuggler 3-4 slots, detective 2. Carried items are PRIVATE (info boundary — not visible to other entities unless revealed via search/scan/confrontation). UI: pocket icons bottom-right, 40x40px, no empty slots displayed. Verbs: Take, Place. Server: carried items are world entities with CarriedBy component.
|
||||
- **Evidence presentation differs by archetype (Paula):** Detective sees case-file-style (structured, what/where/when/source/confidence, insert suggests links). Smuggler sees personal notebook (organized by person, informal voice, no contradiction flags). Same underlying KG, different presentation layer.
|
||||
- **Rationale:** Smuggler's word doesn't carry institutional weight — they need tangible proof. Detective's word IS evidence (institutional authority), so they're mostly KG-only. Three items demonstrate the risk/reward concept and differentiate the smuggler's gameplay loop.
|
||||
- **Raised by:** Lead (smuggler needs inventory), Paula (three items + presentation split), Gestalt (knowledge-primary framework), Tyre (minimal implementation), Dudley (server model + info boundary)
|
||||
- **Dissent:** Tyre initially argued zero physical items in v0.1 (saves 3-4 sprints). Adapted with SmallVec<3> implementation.
|
||||
|
||||
---
|
||||
|
||||
## Decisions Endorsed (Confirmed from Prior or This Workshop)
|
||||
|
||||
These were raised in the workshop and confirmed, but may overlap with or extend existing decisions:
|
||||
|
||||
| Topic | Status | Reference |
|
||||
|-------|--------|-----------|
|
||||
| Signal/answer framework for information access | New principle — recommend formalization | Gestalt R1, Ozzie R1 |
|
||||
| Eavesdrop: passive base + positioning enhances quality | Extends D-018 | Dudley R2 (ListeningFocus) |
|
||||
| Two-phase verb computation (simulation max then observer filter) | Architecture pattern | Dudley R1 |
|
||||
| SP auto-pause for implant, overlay for MP | Extends D-009 implications | Tyre R1, Lead final |
|
||||
| Implant organized by data type, not quest | UX principle | Ozzie R1 |
|
||||
| No highlights on implant data | UX principle | Ozzie R1 |
|
||||
| Soft perception degradation (diegetic), not hard cap | Extends D-017 | Araminta R2, Lead LD-04 |
|
||||
| MovementProfile per archetype | Extends D-053 | Dudley R2 |
|
||||
| Message history: design KG schema now, build display later | Scope constraint | Stig R2, Paula R2, Lead LD-09 |
|
||||
| Sprint double-take (anomaly monologue survives sprint) | Extends D-055 | Ozzie R2 |
|
||||
|
||||
---
|
||||
|
||||
## v0.1 Minimum Viable Interaction Model
|
||||
|
||||
### Control Map
|
||||
|
||||
| Input | Action | Stance/Context | Notes |
|
||||
|-------|--------|---------------|-------|
|
||||
| WASD | Move | Current stance | Tile-based, Tween interpolated 100-150ms |
|
||||
| Toggle key (TBD) | Cycle stances | — | Sprint / Walk / Careful / Crouch |
|
||||
| Mouse movement | Facing direction | All | Client-side float, server gets octant |
|
||||
| Left click | Default interaction | Non-weapon | Context: cursor state determines action |
|
||||
| Left click | Fire | Weapon aim | Cursor = weapon reticle |
|
||||
| Right click | World radial menu | All | v0.1: 2 spokes (Observe, Insert) |
|
||||
| Scroll wheel | Zoom | All | Fog boundaries unchanged |
|
||||
| WASD during dialogue | Walk away | Dialogue open | 300ms fade, 3-phase consequences |
|
||||
| Shift (with weapon) | Suppress interaction | Weapon selected | Hold to interact while armed |
|
||||
|
||||
### Stance Table
|
||||
|
||||
| Stance | Speed | Monologue Rate | Noise | Interaction Buffer | v0.1 |
|
||||
|--------|-------|---------------|-------|--------------------|------|
|
||||
| Sprint | 1 tile/1 tick | 40% (urgent only) | Loud | CLEARED (D-055) | Yes |
|
||||
| Walk | 1 tile/2 ticks | 100% (normal) | Normal | Active | Yes |
|
||||
| Careful | 1 tile/3 ticks | 150% + tell notice bonus | Quiet | Active (enhanced) | Yes |
|
||||
| Crouch | TBD | TBD | Very quiet | Active | Yes (D-054 occupancy) |
|
||||
| Prone | TBD | TBD | Minimal | TBD | No (future) |
|
||||
|
||||
### Cursor States (D-056)
|
||||
|
||||
| State | Visual | Color | z-layer |
|
||||
|-------|--------|-------|---------|
|
||||
| Default | Four thin inward ticks, bloom | #c8d0e0 | 7 |
|
||||
| Entity hover | Expand outward, corner brackets, verb tooltip | D-033 color | 7 |
|
||||
| Object hover | Rotate 45 degrees (X-shape) | #8b8ba0 / #e8c547 | 7 |
|
||||
| Weapon aim | Extend, gap widens, 2px, NO bloom | #f0e8d8 | 7 |
|
||||
|
||||
### Fog Layers (D-059)
|
||||
|
||||
| Layer | Treatment | Key Values |
|
||||
|-------|-----------|------------|
|
||||
| Clear | Soft gradient edge | 3-4 tiles |
|
||||
| Light fog | Desaturated, Perlin noise | 40-50%, 8-10s cycle |
|
||||
| Deep fog | Near-monochrome, zone temperature | ~10% tint, 15-20s cycle |
|
||||
| Unexplored + maps | Geometric wireframe | #333340 |
|
||||
| Unexplored | Solid black | #12141a |
|
||||
|
||||
### Entity Interaction (D-057)
|
||||
|
||||
| Element | Spec |
|
||||
|---------|------|
|
||||
| Menu type | Vertical list, insert-styled |
|
||||
| Max options | 2-4, anchored to entity position |
|
||||
| New option highlight | Gradient glow background |
|
||||
| Trigger | LOS + ~2 tiles proximity |
|
||||
| Diegetic test | Labels on z-layer 6, disappear if insert off |
|
||||
|
||||
### World Menu (D-058)
|
||||
|
||||
| Element | Spec |
|
||||
|---------|------|
|
||||
| Menu type | Radial, 4 spokes (v0.1: 2) |
|
||||
| v0.1 spokes | Observe (eye), Insert (phone) |
|
||||
| Full spokes | + Comms (signal), Wait (clock) |
|
||||
| Interaction | Drag-release or click-click |
|
||||
|
||||
### Dialogue (D-061, D-062, D-063, D-064)
|
||||
|
||||
| Element | Spec |
|
||||
|---------|------|
|
||||
| Position | Bottom screen, max 20% height |
|
||||
| Width | Max-width (not percentage) — value TBD |
|
||||
| Layout | NPC speech top, options below, left-aligned |
|
||||
| Max options | 3 visible |
|
||||
| Locked options | Invisible (D-062) |
|
||||
| Portraits | None |
|
||||
| Monologue | Floats above dialogue (z-layer 7) |
|
||||
| Confrontation | Same box, italic voice, 1-2s monologue beat |
|
||||
| Walk-away | WASD, 300ms fade, 3-phase consequences |
|
||||
|
||||
### Smuggler Inventory (D-065)
|
||||
|
||||
| Element | Spec |
|
||||
|---------|------|
|
||||
| Model | Knowledge-primary + physical evidence |
|
||||
| Capacity | Smuggler 3-4, Detective 2 |
|
||||
| v0.1 items | Manifest copy, corridor access token, personal comm log |
|
||||
| UI | Pocket icons, bottom-right, 40x40px, no empty slots |
|
||||
| Verbs | Take, Place |
|
||||
| Info boundary | Carried items private |
|
||||
|
||||
### Fog Recognition (D-060)
|
||||
|
||||
| Element | Spec |
|
||||
|---------|------|
|
||||
| Cognitive delay | 0.6s base, 0.3s urgent |
|
||||
| Monologue timing | Fires DURING delay, not after |
|
||||
| Visual transition | Grey to D-033 color + silhouette over ~0.3s |
|
||||
| Natural recognition | Organic resolve |
|
||||
| Sensor recognition | Digital snap with biometric ID |
|
||||
| Position accuracy | Half-tile drift (approximate) |
|
||||
|
||||
### Server Performance Budget
|
||||
|
||||
| System | Budget | Source |
|
||||
|--------|--------|--------|
|
||||
| Full tick pipeline (9 steps) | <0.5ms/tick | Dudley |
|
||||
| Fog rendering | <1ms/frame | Tyre |
|
||||
| Client overlay composition (4 modes) | ~7-11ms/frame | Tyre |
|
||||
|
||||
---
|
||||
|
||||
## Implementation Priorities
|
||||
|
||||
### Priority 1: Core Movement and Interaction (Server)
|
||||
*Estimate: ~5-6 days server (Tyre)*
|
||||
|
||||
1. Stance system (Sprint/Walk/Careful/Crouch) with tick-based movement values
|
||||
2. MovementProfile component per archetype
|
||||
3. Sprint interaction buffer suppression (D-055)
|
||||
4. Same-tile occupancy (TilePresence with posture layers) (~150 lines)
|
||||
5. Two-phase verb computation extension (ObjectType component, KG-gated Phase 2)
|
||||
6. Cognitive delay system for fog recognition (0.6s/0.3s, tunable)
|
||||
|
||||
### Priority 2: Core UI and Rendering (Client)
|
||||
*Estimate: ~8-10 days client (Tyre)*
|
||||
|
||||
1. Cursor state machine (4 states, Araminta spec, 150ms transitions)
|
||||
2. Fog shader (5-layer Araminta spec, CanvasGroup Layer 5)
|
||||
3. Fog entity visualization (sound pings, recognized/unrecognized, cognitive delay animation)
|
||||
4. Entity interaction vertical list (insert-styled, z-layer 6, diegetic test)
|
||||
5. World radial menu (2 spokes: Observe, Insert)
|
||||
6. Dialogue box (max 20% height, max-width, NPC speech + options + monologue)
|
||||
7. Walk-away mechanic (WASD detection, 300ms fade)
|
||||
|
||||
### Priority 3: Smuggler Systems
|
||||
1. Minimal inventory (SmallVec or BTreeMap, Take/Place, info boundary)
|
||||
2. Pocket-icon UI (bottom-right, 40x40px, no empty slots)
|
||||
3. Three smuggler items (manifest copy, access token, comm log) — content definition
|
||||
4. Contraband detection (NPC scan checks carried items + KG)
|
||||
|
||||
### Priority 4: Perception and Audio
|
||||
1. Eavesdrop positioning (ListeningFocus accumulates stationary_ticks) — deferrable per Dudley
|
||||
2. Sprint double-take (anomaly monologue survival)
|
||||
3. 6 new audio assets (cursor hover, weapon mode, fog recognition, implant open/close, dialogue emerge, confrontation dip)
|
||||
4. Confrontation staging (proximity + audio dip + text styling)
|
||||
|
||||
### Priority 5: Deferred (Design Now, Build Later)
|
||||
1. InteractionMemory KG schema for message history (LD-09)
|
||||
2. Archetype-specific evidence presentation (detective case file vs smuggler notebook)
|
||||
3. Pre-dialogue proximity acknowledgment (NPC turns, ambient line)
|
||||
4. Camera tighten for confrontation staging
|
||||
5. Prone stance
|
||||
6. Perception mode soft degradation (scan-line interference)
|
||||
|
||||
---
|
||||
|
||||
## Open Questions Deferred to Implementation
|
||||
|
||||
These questions were not resolved in the workshop and should be addressed during implementation:
|
||||
|
||||
| # | Question | Owner Suggestion |
|
||||
|---|----------|-----------------|
|
||||
| OQ-01 | Tile size in world units? | Tyre/Dudley |
|
||||
| OQ-07 | No insert = no interaction prompts? (Diegetic test implication) | Stig/Gestalt |
|
||||
| OQ-08 | False-positive fog shapes: gameplay or atmospheric? | Gestalt/Araminta |
|
||||
| OQ-09 | Zone temperature memory: server-tracked or client-only? | Tyre/Dudley |
|
||||
| OQ-10 | Sensor recognition "different monologue voice": text styling or narrator tone? | Paula/Stig |
|
||||
| OQ-13 | No data highlights in implant — how does player know new data was added? | Ozzie/Stig |
|
||||
| OQ-14 | Scan effectiveness varies per character seed: different data or different actions? | Gestalt/Dudley |
|
||||
| OQ-18 | Nigel's dialogue access tiers vs D-041 confidence hierarchy: same or layered? | Paula/Gestalt |
|
||||
| OQ-21 | Archetype evidence presentation: skin on same app or different apps? | Stig/Paula |
|
||||
| OQ-24 | Inventory capacity: 3 slots (Tyre) or 4 (Dudley)? | Lead call needed |
|
||||
| OQ-25 | Stance name: "Careful" or "Sneak"? | Lead call needed |
|
||||
| OQ-26 | Multiplicative perception formula: actual modifier values? | Gestalt/Dudley |
|
||||
| OQ-27 | Soft perception degradation threshold? | Araminta/Gestalt |
|
||||
| OQ-28 | InteractionMemory KG schema design? | Paula/Dudley |
|
||||
| OQ-29 | Dialogue max-width: pixel value? | Stig/Lead |
|
||||
| OQ-30 | 14 audio assets: who creates them, when in sprint schedule? | Inigo/Si |
|
||||
|
||||
---
|
||||
|
||||
## Suggested Tickets
|
||||
|
||||
For SI to process and assign to sprints:
|
||||
|
||||
### Server Team
|
||||
|
||||
| # | Title | Scope | Estimate | Depends On |
|
||||
|---|-------|-------|----------|------------|
|
||||
| T-1 | Implement stance system (Sprint/Walk/Careful/Crouch) | D-053 | 2-3d | — |
|
||||
| T-2 | MovementProfile component per archetype | D-053 | 1d | T-1 |
|
||||
| T-3 | Sprint interaction buffer suppression | D-055 | 0.5d | T-1 |
|
||||
| T-4 | Same-tile occupancy (TilePresence layers) | D-054 | 1-2d | — |
|
||||
| T-5 | ObjectType component + verb sets per type | D-057 (server) | 1d | — |
|
||||
| T-6 | Two-phase verb computation: KG-gated Phase 2 | D-057 (server) | 1-2d | T-5 |
|
||||
| T-7 | Cognitive delay system for fog recognition | D-060 | 1d | — |
|
||||
| T-8 | Smuggler inventory (BTreeMap/SmallVec, Take/Place, info boundary) | D-065 | 1-2d | — |
|
||||
| T-9 | Contraband detection (scan + KG check) | D-065 | 0.5d | T-8 |
|
||||
| T-10 | ListeningFocus (eavesdrop positioning) | D-053 ext | 1d | T-1 (deferrable) |
|
||||
| T-11 | Walk-away KG recording (confrontation incompleteness) | D-064 | 0.5d | — |
|
||||
| T-12 | Sprint anomaly monologue (double-take) | D-055 ext | 0.5d | T-3 |
|
||||
|
||||
### Client Team
|
||||
|
||||
| # | Title | Scope | Estimate | Depends On |
|
||||
|---|-------|-------|----------|------------|
|
||||
| T-13 | Cursor state machine (4 states, Araminta spec) | D-056 | 2d | — |
|
||||
| T-14 | Fog shader (5-layer, CanvasGroup Layer 5) | D-059 | 3-4d | — |
|
||||
| T-15 | Fog entity visualization (pings, recognized/unrecognized, delay anim) | D-059, D-060 | 2d | T-14, T-7 |
|
||||
| T-16 | Entity interaction vertical list (insert-styled) | D-057 | 1-2d | T-13 |
|
||||
| T-17 | World radial menu (2 spokes v0.1) | D-058 | 1d | — |
|
||||
| T-18 | Dialogue box (max 20% height, max-width) | D-061 | 2d | — |
|
||||
| T-19 | Dialogue response selection (max 3, invisible locks) | D-062 | 1d | T-18 |
|
||||
| T-20 | Confrontation text styling (italic voice, monologue beat) | D-063 | 1d | T-18, T-19 |
|
||||
| T-21 | Walk-away mechanic (WASD detect, 300ms fade) | D-064 | 0.5d | T-18 |
|
||||
| T-22 | Smuggler pocket-icon inventory UI | D-065 | 1d | T-8 |
|
||||
| T-23 | Stance toggle UI (keybind, HUD indicator) | D-053 | 0.5d | T-1 |
|
||||
|
||||
### Audio Team
|
||||
|
||||
| # | Title | Scope | Estimate | Depends On |
|
||||
|---|-------|-------|----------|------------|
|
||||
| T-24 | 6 interaction audio assets | D-059, D-060, D-061 | 2-3d | — |
|
||||
|
||||
### Design/Content Team
|
||||
|
||||
| # | Title | Scope | Estimate | Depends On |
|
||||
|---|-------|-------|----------|------------|
|
||||
| T-25 | Define 3 smuggler item specs (content/attributes/interactions) | D-065 | 1d | — |
|
||||
| T-26 | InteractionMemory KG schema design | D-064, LD-09 | 1d | — |
|
||||
| T-27 | Archetype evidence presentation spec (detective case file vs smuggler notebook) | D-065 | 1d | — |
|
||||
|
||||
---
|
||||
|
||||
## Replayability Validation
|
||||
|
||||
Nigel's Round 2 scenario trace validates the v0.1 interaction model against D-027 replayability criteria:
|
||||
|
||||
- **10-minute scenario, two characters (smuggler vs detective), same world state**
|
||||
- **12 points of divergence, zero scripted branching**
|
||||
- All divergence emerges from knowledge graph differences interacting with: tile-based positioning, fog visibility, verb sets, dialogue access tiers, evidence presentation, and inventory constraints
|
||||
- Passes the second-playthrough test: playing again as a different character reveals genuinely different information, interactions, and available actions
|
||||
|
||||
---
|
||||
|
||||
## Cross-Layer Interaction Chains (Workshop Validated)
|
||||
|
||||
Five chains documented in workshop notes demonstrate how the layers compose:
|
||||
|
||||
1. **Eavesdropping Loop:** Careful stance > tile positioning > ListeningFocus > monologue > KG update > new dialogue options
|
||||
2. **Fog Recognition Loop:** Sound/sensor detection > cognitive delay (0.6/0.3s) > monologue during delay > KG query > identity resolution or blob remains
|
||||
3. **Confrontation Chain:** KG contradiction > monologue signal > approach NPC > pre-dialogue beat > dialogue > confront option (italic) > monologue beat > delivery > world responds > KG records
|
||||
4. **Smuggler Evidence Loop:** Eavesdrop > KG records discrepancy > terminal access > raw data (no highlights) > player notices > Take physical item > info boundary (private) > risk/leverage
|
||||
5. **Sprint Double-Take:** Sprint through corridor > interaction suppressed > routine monologue suppressed > anomaly detected > delayed monologue > player decides: double back or continue
|
||||
|
||||
---
|
||||
|
||||
*Workshop closed. 13 decisions produced (D-053 through D-065). 27 suggested tickets across server, client, audio, and design teams. Full discussion notes at `docs/workshops/control-interaction/workshop-notes.md`.*
|
||||
|
||||
*Compiled by Qatux.*
|
||||
Reference in New Issue
Block a user