Player autonomy wins: AI Dialogue toggle is only greyed out for RAM fail (< 1.6 GB free). Battery suspend shows a warning label instead of disabling the toggle — player can override the auto-suspend at any time. Changes: - settings_dialog: toggle disabled = hw_status == "fail" only - settings_dialog: add _ai_battery_warning_label (STATUS_YELLOW) shown when _ai_inference_suspended; hidden when plugged back in via set_ai_inference_suspended() - settings_dialog: is_ai_dialogue_toggle_enabled() no longer checks _ai_inference_suspended - settings_dialog: set_ai_inference_suspended() updates warning label visibility, not toggle disabled state - ui-strings: add settings.ai_battery_warning "High battery usage" Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
221 lines
8.1 KiB
YAML
221 lines
8.1 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."
|