Files
settled-reach/docs/sprints/sprint-12/client.md
T
jpmschweitzerandClaude Opus 4.6 bccdcfcdcb docs(docs): add frontmatter to all sprint briefings
Standardized YAML frontmatter on all 115 sprint briefing files across
sprints 1-26 with title, description, type, status, sprint number, and
team fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 00:15:45 +01:00

86 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "Sprint 12 — Client Briefing"
description: "Close-range stereo audio, medium-range visual indicators, entity renderer fix, dialogue width"
type: sprint
status: archived
sprint: 12
team: "client"
---
# Sprint 12: Build — Client Tasks
**Goal:** Lay the production-layer foundations — simulation tier system, sound event pipeline, visual grammar, and knowledge boundary enforcement — and complete all v0.1 copy authoring so content packs, opening hooks, and world-building docs are done.
**Branch:** `client`
**Agents:** Stig (client dev), Tyre (architect), Hoshe (QA)
## Carry-over from Sprint 11
None. Sprint 11 was 7/7 done.
## New Tickets
| # | Title | Blocked by |
|---|-------|------------|
| #125 | Close-range stereo audio | #124 (server) |
| #126 | Medium-range visual indicators | — |
| #345 | Fix entity_renderer.gd field name bug | — |
| #447 | Resolve OQ-29: dialogue max-width pixel value | — |
Use `db/connectors/ticket show <id>` for full details.
## Key Decisions
- `decisions/architecture.md` — D-020 (IPC bridge), D-066 (dual-scale grid)
- `decisions/perception.md` — D-018 (three-range sound model), D-067 (recognition chime at cognitive delay onset), D-068 (5-bus audio architecture), D-069 (audio dip profiles), D-071 (ListeningFocus boost for eavesdropping)
## Open Questions to Resolve Early
- **OQ-29** (#447): Dialogue max-width pixel value. Resolve before any dialogue layout work. Fast resolution — pick a value, record the decision.
## Notes
**#125 — Close-range stereo audio**
- Blocked by #124 (server sound event system). Start once server delivers `sound_events` in `ObserverSnapshot`.
- The `audio_manager.gd` autoload (`client/scripts/autoloads/audio_manager.gd`) already exists from Sprint 8. This ticket wires it to the snapshot-driven event loop.
- Close-range events (RangeCategory::Close) map to 2D positional audio using Godot's `AudioStreamPlayer2D`. Screen-space coordinates from the entity's world position.
- Asset registry: `AudioAssetRegistry` maps event type (`Footstep`, `Voice`, etc.) to audio file. The 8 audio assets from D-038 (done Sprint 10) are available — use them.
- D-068 specifies the 5-bus architecture (Master, Ambient, World SFX, Player Actions, UI). Sound events go on the **World SFX** bus.
- D-069 audio dip: during confrontation, World SFX drops 46dB. The dip logic is in `audio_manager.gd` — confirm it's wired to the confrontation state flag.
**#126 — Medium-range visual indicators**
- Fog-edge directional indicators for sound events outside LOS (RangeCategory::Medium).
- Arrow or icon at the fog boundary, pointing toward sound source direction. Color-coded per D-018 and D-069: neutral `#c8d0e0`, voices `#e8c547`, danger `#d45d5d`.
- Triggers an internal monologue description (server-side, but client shows the indicator at the fog edge).
- Implementation: overlay node on top of `fog_renderer` (`client/scripts/rendering/fog_renderer.gd.uid` — confirm file name). Draw using `_draw()` or a dedicated indicator scene.
- Does not require #124 to be complete — can implement the indicator rendering standalone with mock data, then wire to snapshot.
- Visual spec for the fog-edge pulse design (#317, visual team) is in sprint but may not arrive before implementation. Use the D-018 color values as the reference.
**#345 — Fix entity_renderer.gd field name bug**
- Known bug: `entity_renderer.gd` references `entity.id` but the bridge protocol uses `entity.entity_id`.
- File: `client/scripts/rendering/entity_renderer.gd`.
- Fix the field name, add a regression test to the client test suite.
- Quick fix — do this first to unblock clean rendering for the sprint.
**#447 — Resolve OQ-29: dialogue max-width pixel value**
- Open question: what is the max pixel width for the dialogue box?
- Resolution approach: measure against the target resolution, pick a value that fits the grid. Document in `client/scripts/constants.gd` as `DIALOGUE_MAX_WIDTH`.
- Record the resolved value as a decision if it has downstream impact (it does — affects text wrapping in dialogue UI).
## Dependency Chain
```
#124 (server, sound events) → #125 (close-range stereo audio)
#126 (medium-range indicators) — standalone, parallel
#345 (field name bug) — quick fix, do first
#447 (OQ-29 resolution) — standalone, do early
```
## PR Workflow
When ready to submit, create a PR with `tea` CLI. **All flags are required** to avoid TTY prompts (see CLAUDE.md "Gitea access" section):
```bash
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(client): Sprint 12 — sound pipeline, medium-range indicators, renderer fix" --description "body" --base main --head client
```