Files
settled-reach/docs/sprints/sprint-36/client.md
T
jpmschweitzerandClaude Sonnet 4.6 25bb54bc43 chore(meta): plan Sprint 36: Forge
Sprint goal: close Phase 3 Atlas (unified nav chain, brand corps,
content refinement) and establish Phase 4 foundations (bookmark system,
location-culture resolution, character creation skeleton).

15 tickets assigned across server (7), client (5), copy (3).
Briefings written for all four teams. DB backup updated.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 11:08:15 +02:00

78 lines
6.0 KiB
Markdown

# Sprint 36: Forge — Client Tasks
**Goal:** Close Phase 3 Atlas (unified nav chain, brand corps, content refinement) and establish Phase 4 foundations (bookmark system, location-culture resolution, character creation skeleton).
**Branch:** `sprint-36/client`
**Agents:** Stig (dev), Tyre (arch), Hoshe (QA)
## New Tickets
| # | Title | Blocked by |
|---|-------|------------|
| #844 | Unify star map and atlas into single implant/map chain | — |
| #618 | CK3-style character creation screen | #614 (server) |
| #680 | Location picker in character creation UI | #679 (server) |
| #722 | Add --help flag to custom DB scripts | — |
| #724 | Show client and server version on loading screen | — |
Use `tooling/db/ticket show <id>` for full details.
## Key Decisions
- `decisions/architecture.md` — D-191 (atlas scope, zoom hierarchy, implant/map chain), D-170 (HUD layer groups), D-169 (implant component library)
- `decisions/scope.md` — D-115 (character creation scoped to skills + bookmark), D-146 (character creation preview — tile-scale sprite), D-155 (cardinal rotation only), D-158 (frontal camera default), D-159 (11 body types)
- `decisions/content.md` — D-128 (culture implicit in starting location)
## Notes
**#844 — Unify star map and atlas into single implant/map chain**
- Current state: `client/ui/star_map.gd` registers as `implant/map/starchart` and `client/ui/implant/atlas_panel.gd` registers as `implant/map/atlas`. They are two separate `HudGroups` apps with separate key bindings (M for starchart, A for atlas).
- D-191: the atlas is the star map extended downward — not a separate app. The unified chain should be a single `implant/map` app with internal level navigation. The star map (hop-ring view) becomes Level 0 of the atlas hierarchy.
- Approach: `AtlasPanel` already has a 4-level `Level` enum (`SYSTEM_PICKER`, `ORBITAL_DIAGRAM`, `BODY_ENTRY`, `HEIGHTMAP_VIEWER`). Extend it with a Level -1 or `REACH_MAP` that renders the star map view. Star map rendering logic can be lifted from `star_map.gd` into a method called by `AtlasPanel._draw()`.
- `StarMapRenderer` registers itself with `HudGroups` — after unification, de-register it or make it a sub-component rather than an independent app. Don't break the `implant/map/starchart` path for existing callers until the unified path is confirmed working.
- `client/ui/implant/atlas_viewer.gd` and `client/ui/implant/atlas_overlay_bar.gd` are the heightmap layer — preserve these.
**#618 — CK3-style character creation screen**
- IMPORTANT: extend the EXISTING character creation screen (`client/ui/character_creation.gd`, `client/scenes/character_creation.tscn`) — do NOT create a separate screen.
- D-146: character creation preview is the tile-scale sprite at heavy zoom. The existing screen already implements this correctly. The CK3-style extension adds a **skills tab** and a **bookmark selector** to the existing `TabContainer`.
- D-115: creation is limited to skills + bookmark. No family/culture/religion sliders.
- The existing tab structure: Body, Head, Hair, Clothing, Accessories, Debug. Add two new tabs: "Skills" and "Bookmark". The Bookmark tab consumes the bookmark data from #614 (server). The skills tab is a stub for this sprint — display placeholder content until the skills system is implemented.
- Blocked by #614 until the bookmark data structure is available from the server. Coordinate with Tyre on what the server exposes.
- Game flow does not change: main_menu → character_select → character_creation → main.tscn. The `creation_confirmed(descriptor)` signal already carries `CharacterVisualDescriptor` — that type will need a bookmark field added.
**#680 — Location picker in character creation UI**
- Client side of the location/culture system. The player selects their starting location in the character creation screen — this feeds into the bookmark selection flow.
- Blocked by #679 (server). Once the server exposes a location-to-culture resolution endpoint, the client needs a picker UI that shows selectable starting locations and displays the resolved culture.
- Integrate into the character creation screen as part of the Bookmark tab (coordinate with #618). The location picker is a sub-component of the bookmark selector, not a standalone screen.
- The `CharacterVisualDescriptor` or a new `CharacterProfile` struct will need to carry the selected location/bookmark.
**#722 — Add --help flag to custom DB scripts**
- `tooling/db/` scripts: `ticket`, `sprint`, `decision`, `sqlite-query`, `sqlite-exec`.
- These scripts already print usage on bad args. Wire `--help` as an alias to that same usage output.
- This is a tooling/DX improvement — no game code impact. Low priority, parallelizable with everything else.
- Note: ticket is assigned to client team but touches `tooling/db/` — this is a tooling ticket, not client game code.
**#724 — Show client and server version on loading screen**
- `client/ui/loading_screen.gd` currently shows only a loading message. Add version display.
- Client version: read from `project.yaml` at the repo root (root `version` field, format `0.1.{sprint}`). Use GDScript's `FileAccess` or a preload JSON export — choose the simplest approach that doesn't require a plugin.
- Server version: the bridge protocol already has `PROTOCOL_VERSION` (`server/src/bridge/types.rs`). The server can emit this in the initial handshake or a version ping. Alternatively, display it from the `ObserverSnapshot` if it carries a version field.
- The loading screen is `client/ui/loading_screen.tscn` — it is a simple overlay with a label. Add a second label below for version text.
## Dependency Chain
```
#614 (server bookmark) → #618 (CK3 character creation)
#679 (server location-culture) → #680 (location picker)
#844 → standalone (no server dependency)
#722, #724 → standalone, parallel
```
## PR Workflow
```bash
tea pr create --repo jpmschweitzer/settled-reach --login schweitz \
--title "feat(client): sprint 36 — unified map chain, character creation foundations" \
--description "body" \
--base main --head sprint-36/client
```