Files
settled-reach/client/data/ui-strings.yaml
T
jpmschweitzerandClaude Opus 4.6 56e8c70081 feat(client): character creation screen with live 3D preview (#705)
Full character creation UI with 5-tab customisation panel (Body, Head,
Hair, Clothing, Accessories), live 3D compositor preview via SubViewport,
D-165 color picker modal, keyboard navigation, and game flow integration.

- CharacterCreation scene + script (~1440 lines) implementing wireframe spec
- SubViewport with Camera3D (frontal/dramatic/overhead presets per D-158)
- Cardinal rotation (Q/E) per D-155, randomise (R), Tab/Enter/Esc navigation
- Body type grid (11 types, D-159), skin tone dock (9 tones, shared state)
- Head template, hair, facial hair, eyebrow grids with DirAccess asset scanning
- Clothing slot selector with per-item Primary/Secondary/Accent tints
- Accessory slot selector with Primary/Secondary tints (Array[Color] descriptor)
- 54-swatch color picker modal (D-165) with hex input and recent colors
- Auto-derive flags for highlight, eyebrow tint, facial hair tint from hair primary
- Game flow: main_menu → archetype select → character creation → game start
- GameState.character_visual_descriptor field for gameplay consumption
- Updated accessory_tints from single Color to Array[Color] in descriptor + compositor
- 40+ GdUnit tests covering scene structure, signals, keyboard nav, color derivation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 17:16:47 +01:00

229 lines
8.3 KiB
YAML

# 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."
load_complete: "Session restored."
save_failed: "Save failed."
load_failed: "Load failed."
connection_lost: "Signal interrupted."
connection_restored: "Signal restored."
loading: "Resuming..."
# ============================================================
# 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"
# D-041 KnowledgeConfidence levels — displayed in journal panel
confidence_direct: "Confirmed"
confidence_knowsdetails: "Detailed"
confidence_knowsof: "Known"
confidence_suspects: "Unconfirmed"
# D-041 KnowledgeSource labels — displayed in journal panel
source_directobservation: "Observed"
source_toldby: "Told"
source_heard: "Overheard"
source_inferred: "Inferred"
source_background: "Prior"
# ============================================================
# 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."
# ============================================================
# DIALOGUE
# Text displayed during dialogue interactions.
# D-063: Confrontation beat monologue — character's internal hesitation.
# ============================================================
dialogue:
confrontation_beat: "This changes things. No taking it back."
# ============================================================
# MENU AND SYSTEM TEXT
# Non-diegetic. Standard game UI. Clean, no flavor text.
# ============================================================
menu:
pause_title: "Paused"
resume: "Resume"
new_game: "New Game"
continue: "Continue"
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"
load_game_browse: "LOAD GAME"
load_game_back: "BACK"
load_game_empty: "No saves found."
settings:
audio_volume: "Volume"
text_size: "Text Size"
text_speed: "Text Speed"
fullscreen: "Fullscreen"
language: "Language"
# #646: AI-Enhanced Dialogue toggle (D-138)
ai_section_header: "AI DIALOGUE"
ai_dialogue_toggle: "AI-Enhanced Dialogue"
ai_status_checking: "Speed not yet measured — will check on first enable."
ai_status_ram_marginal: "Low memory — performance may vary."
ai_battery_warning: "High battery usage"
# ============================================================
# 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"
# #588: Card display strings — name, role, tone per archetype
smuggler_card_name: "Smuggler"
smuggler_card_role: "Freight logistics worker — Sova Transit"
smuggler_card_tone: "Insider access. Social camouflage. The ring is your daily life."
detective_card_name: "Detective"
detective_card_role: "Commission investigator — External assignment"
detective_card_tone: "Institutional authority. Analytical lattice. You were sent here."
character_creation:
btn_back: "[ESC] Back"
btn_randomise: "[R] Randomise"
btn_start: "[ENTER] Start"
btn_rotate_left: "[Q] ◄"
btn_rotate_right: "► [E]"
search_placeholder: "Search…"