fix(ui): address PR #52 review — 10 items across Hoshe, Tyre, Araminta (#535)

Critical: bump PROTOCOL_VERSION 8→9 for conversation_events/ended fields.

Hoshe review:
- Dirty flag (_log_dirty) prevents per-frame O(n) BBCode rebuild
- BBCode injection: _escape_bbcode() replaces [ with [lb] on server text
- D-064 regression: dialogue_active cleared in fade callback, not before
- YAML quoting: remove unnecessary quotes from numeric values

Tyre review:
- Carry-forward for dialogue_response, conversation_events, conversation_ended
  in receive_bytes() — arrays merge, scalar falls through
- pause_requested/unpause_requested signals route through main.gd input
  recording (_pending_record_inputs) for #507 replay determinism
- Fix version comments: dialogue_response is v8 (#305), not v9
- Remove dead _active_overheard dictionary

Araminta review:
- Passive lines: ┃ glyph prefix + _desaturate() for name colours
- Active conversation entries pinned (no timeout), unpinned with timestamp
  reset on conversation end
- _enforce_contrast(): minimum luminance floor for name colour readability
- Simplified 1-on-1 attribution: "Speaker:" instead of "Speaker → You:"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-20 20:51:40 +01:00
co-authored by Claude Opus 4.6
parent 2edc7c3098
commit 952f994d59
6 changed files with 170 additions and 51 deletions
+3 -3
View File
@@ -37,11 +37,11 @@ speech_color: "#c8d0e0"
# Base opacity multiplier for non-player-centric lines.
# 1.0 = full opacity, 0.0 = invisible.
# ============================================================
passive_opacity: "0.9"
passive_opacity: 0.9
# ============================================================
# ENTRY TIMING
# All entry types share the same lifetime and fade duration.
# ============================================================
entry_lifetime_seconds: "15.0"
entry_fade_seconds: "3.0"
entry_lifetime_seconds: 15.0
entry_fade_seconds: 3.0