diff --git a/content/campaigns/main/_meta/ui-strings.yaml b/content/campaigns/main/_meta/ui-strings.yaml new file mode 100644 index 000000000..89a5e9f0c --- /dev/null +++ b/content/campaigns/main/_meta/ui-strings.yaml @@ -0,0 +1,179 @@ +# UI Microcopy — The Settled Reach v0.1 +# +# Ticket: #409 | Sprint: 5 +# Author: Mellanie (Copywriter) +# Date: 2026-02-13 +# +# All player-facing UI text. Organized by category. +# Voice: Sova Transit District (D-036) — working-class pragmatic, quotidian-with-undertow. +# Diegetic frame: most UI elements are neural insert overlays, not game chrome. +# +# Integration: Stig imports these into client/scripts/constants/ or reads at runtime. +# Keys are stable identifiers. Values are display strings. + +# ============================================================ +# INTERACTION PROMPTS +# Displayed as "E - {label}" when player is near an interactable. +# Server sends verb kind + label. These are the canonical labels. +# Keep short: max 12 characters. Must read instantly during gameplay. +# ============================================================ +interaction_verbs: + talk: "Talk" + examine_npc: "Look" + examine_object: "Examine" + read: "Read" + pick_up: "Pick up" + use: "Use" + open: "Open" + listen: "Listen" + +# ============================================================ +# RELATIONSHIP STATE DESCRIPTORS +# Shown in knowledge panel when player inspects an entity. +# Maps to RelationshipState enum (server/src/knowledge/types.rs). +# These should feel like insert-generated assessments, not game labels. +# ============================================================ +relationship_states: + unknown: + label: "Unknown" + description: "No prior contact." + known: + label: "Recognized" + description: "Seen before. No relationship established." + friendly: + label: "Trusted" + description: "Known contact. Cooperative." + person_of_interest: + label: "Flagged" + description: "Behavioral anomaly noted." + hostile: + label: "Hostile" + description: "Known threat." + +# ============================================================ +# HUD LABELS +# Top-level HUD elements. Diegetic: these are the insert's status readouts. +# Format mirrors a low-key neural overlay — terse, functional. +# ============================================================ +hud: + health: "Condition" + health_values: + full: "Normal" + wounded: "Injured" + critical: "Critical" + time_prefix: "" # No prefix — time displays as raw value (e.g., "14:30") + perception_mode_prefix: "" # No prefix — mode name displays directly + +# ============================================================ +# PERCEPTION MODE LABELS +# The insert's active sensing mode. Per D-017. +# Smuggler has Baseline. Detective has Standard Professional. +# Labels should feel like the insert's own status readout. +# ============================================================ +perception_modes: + standard: "Standard" + analytical: "Analytical" + social: "Social" + surveillance: "Surveillance" + +# ============================================================ +# NOTIFICATION TEXT +# Brief messages that appear when game state changes. +# Max 40 characters. Must read in under 2 seconds. +# Diegetic: these are insert alerts, not achievement popups. +# ============================================================ +notifications: + # Location discovery + location_discovered: "New location logged." + location_revisit: "Returning to {location}." + + # NPC knowledge + contact_new: "New contact: {name}." + contact_updated: "Contact updated: {name}." + contact_flagged: "{name} flagged." + + # Relationship shifts + relationship_improved: "{name} — trust increased." + relationship_degraded: "{name} — trust decreased." + relationship_hostile: "{name} — hostile." + + # Evidence / observation + evidence_found: "Evidence logged." + anomaly_detected: "Anomaly noted." + pattern_recognized: "Pattern flagged." + + # System + save_complete: "Progress saved." + connection_lost: "Signal interrupted." + connection_restored: "Signal restored." + +# ============================================================ +# KNOWLEDGE PANEL LABELS +# When the player opens the knowledge view to review what they know. +# Insert-flavored: reads like a personal filing system, not a game menu. +# ============================================================ +knowledge_panel: + tab_contacts: "Contacts" + tab_locations: "Locations" + tab_evidence: "Notes" + section_known_attributes: "Known" + section_last_seen: "Last seen" + section_relationship: "Status" + section_observations: "Observations" + empty_state: "Nothing logged yet." + confidence_high: "Confirmed" + confidence_medium: "Likely" + confidence_low: "Unconfirmed" + confidence_rumor: "Hearsay" + +# ============================================================ +# TUTORIAL TEXT (DIEGETIC) +# Delivered via internal monologue (D-016), not UI overlay. +# These are NOT traditional tutorial prompts. They're the character +# thinking about what they can do, filtered through their voice. +# Smuggler and detective variants are in the monologue pools. +# These are the GENERIC fallback strings if monologue doesn't fire. +# ============================================================ +tutorial_prompts: + move_hint: "Use the directional keys to move." + interact_hint: "Press E near someone to interact." + examine_hint: "Press E to take a closer look." + listen_hint: "Move closer to overhear conversations." + monologue_hint: "Your thoughts appear as text on screen." + perception_hint: "Switch perception modes to see differently." + minimap_hint: "The overlay shows the area around you." + knowledge_hint: "Open your notes to review what you know." + +# ============================================================ +# MENU AND SYSTEM TEXT +# Non-diegetic. Standard game UI. Clean, no flavor text. +# ============================================================ +menu: + pause_title: "Paused" + resume: "Resume" + settings: "Settings" + save_game: "Save" + load_game: "Load" + quit_to_menu: "Quit to Menu" + quit_game: "Quit" + confirm_quit: "Unsaved progress will be lost." + confirm_yes: "Yes" + confirm_no: "No" + +settings: + audio_volume: "Volume" + text_size: "Text Size" + text_speed: "Text Speed" + fullscreen: "Fullscreen" + language: "Language" + +# ============================================================ +# CHARACTER SELECTION (if applicable in v0.1) +# ============================================================ +character_select: + title: "Choose your perspective." + smuggler_name: "Logistics Operator" + smuggler_tagline: "You know these people. You know the work. You know what's at stake." + detective_name: "Commission Investigator" + detective_tagline: "The manifests don't add up. Someone in this district knows why." + confirm: "Begin"