--- title: "Workshop Outcomes: Control & Interaction Scheme" description: "13 decisions (D-053 to D-065) covering movement stances, cursor states, fog layers, dialogue UX, and smuggler inventory" type: workshop status: archived workshop: "control-interaction" created: 2026-02-14 --- # 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 sim tiles (= 1m per D-066). 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 6-8 sim tiles (= 3-4 visual tiles per D-066), 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 | 6-8 sim tiles (= 3-4 visual tiles, D-066) | | 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 sim tiles proximity (= 1m, D-066) | | 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?~~ **Resolved:** 0.5m sim tiles, 1m visual tiles (D-066) | 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.*