# Dialogue Pipeline — D-028, D-062, D-063, D-064, D-075 # Four relational layers, two-phase verb computation, invisible locks, # confrontation weight, walk-away consequences. vars: { color-bg: "#2a3040" color-stroke: "#333340" color-text: "#c8d0e0" color-accent: "#c8d8f0" color-dim: "#1a1e24" } direction: down player_action: Player Initiates Interaction { shape: oval style.fill: ${color-bg} style.stroke: ${color-accent} style.font-color: ${color-text} } verb_phase1: Phase 1 — Simulation\n(no KnowledgeGraph read) { style.fill: ${color-bg} style.stroke: ${color-stroke} style.font-color: ${color-text} style.border-radius: 4 object_type: ObjectType component\n→ max possible verb set { style.fill: ${color-dim} style.stroke: ${color-stroke} style.font-color: ${color-text} } } verb_phase2: Phase 2 — Observer\n(reads KnowledgeGraph) { style.fill: ${color-bg} style.stroke: ${color-accent} style.font-color: ${color-text} style.border-radius: 4 kg_filter: Filter by KG confidence\n(Confront requires KnowsDetails+) { style.fill: ${color-dim} style.stroke: ${color-accent} style.font-color: ${color-text} } poi_flip: POI priority flip\n+ contradiction markers { style.fill: ${color-dim} style.stroke: ${color-stroke} style.font-color: ${color-text} } archetype_filter: Archetype filter rules\n(same crate: smuggler→Stash · detective→Flag) { style.fill: ${color-dim} style.stroke: ${color-stroke} style.font-color: ${color-text} } } layer_filter: Four Relational Layers (D-028) { style.fill: ${color-dim} style.stroke: ${color-stroke} style.font-color: ${color-text} l1: Layer 1 — Access Tier\n(RelationshipState only) { style.fill: ${color-bg} style.stroke: ${color-stroke} style.font-color: ${color-text} } l2: Layer 2 — Relationship History\n(interaction log: greeting + topic) { style.fill: ${color-bg} style.stroke: ${color-stroke} style.font-color: ${color-text} } l3: Layer 3 — Trust-gated Gossip\n(RelationshipState AND KnowledgeConfidence — D-075) { style.fill: ${color-bg} style.stroke: ${color-accent} style.font-color: ${color-text} } l4: Layer 4 — Unprompted Disclosure\n(weighted by trust + mood) { style.fill: ${color-bg} style.stroke: ${color-stroke} style.font-color: ${color-text} } } invisible_locks: Invisible Locked Options (D-062) { style.fill: ${color-bg} style.stroke: ${color-stroke} style.font-color: ${color-text} style.border-radius: 4 rule: Locked options = completely invisible\nNo grayed-out · no lock icons · no hints { style.fill: ${color-dim} style.stroke: ${color-stroke} style.font-color: ${color-text} } reveal: New options appearing on repeat visits\n= the reward (dopamine) { style.fill: ${color-dim} style.stroke: ${color-accent} style.font-color: ${color-text} } } confrontation: Confrontation Weight (D-063) { style.fill: ${color-bg} style.stroke: ${color-accent} style.font-color: ${color-text} style.border-radius: 4 voice: Written in character's internal voice\n(italicized first-person) { style.fill: ${color-dim} style.stroke: ${color-stroke} style.font-color: ${color-text} } monologue_beat: Pre-delivery monologue beat\n1-2s: "No taking it back." { style.fill: ${color-dim} style.stroke: ${color-stroke} style.font-color: ${color-text} } world_reacts: World reacts\n(NPC Tier 2 anim · D-033 fade · monologue spikes) { style.fill: ${color-dim} style.stroke: ${color-stroke} style.font-color: ${color-text} } } walk_away: Walk-away (D-064)\nWASD during conversation { shape: diamond style.fill: ${color-bg} style.stroke: ${color-accent} style.font-color: ${color-text} } walk_away_phases: Walk-away Consequences { style.fill: ${color-dim} style.stroke: ${color-stroke} style.font-color: ${color-text} immediate: 1 — Dialogue fades 300ms\n(no close button) { style.fill: ${color-bg} style.stroke: ${color-stroke} style.font-color: ${color-text} } npc_reacts: 2 — NPC reacts\n(animation · may call after player) { style.fill: ${color-bg} style.stroke: ${color-stroke} style.font-color: ${color-text} } kg_record: 3 — KG records incompleteness\n(per-seed tolerance: no universal safe-to-leave rules) { style.fill: ${color-bg} style.stroke: ${color-accent} style.font-color: ${color-text} } } player_action -> verb_phase1 verb_phase1 -> verb_phase2: "max verb set" { style.stroke: ${color-accent} } verb_phase2 -> layer_filter: "filtered verb set" { style.stroke: ${color-accent} } layer_filter.l1 -> layer_filter.l2 layer_filter.l2 -> layer_filter.l3 layer_filter.l3 -> layer_filter.l4 layer_filter -> invisible_locks: "visible options only\n(max 3 shown)" { style.stroke: ${color-accent} } invisible_locks -> confrontation: "if Confront option present" { style.stroke: ${color-stroke} style.stroke-dash: 4 } invisible_locks -> walk_away walk_away -> walk_away_phases.immediate walk_away_phases.immediate -> walk_away_phases.npc_reacts walk_away_phases.npc_reacts -> walk_away_phases.kg_record