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>
6.0 KiB
6.0 KiB
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.gdregisters asimplant/map/starchartandclient/ui/implant/atlas_panel.gdregisters asimplant/map/atlas. They are two separateHudGroupsapps 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/mapapp with internal level navigation. The star map (hop-ring view) becomes Level 0 of the atlas hierarchy. - Approach:
AtlasPanelalready has a 4-levelLevelenum (SYSTEM_PICKER,ORBITAL_DIAGRAM,BODY_ENTRY,HEIGHTMAP_VIEWER). Extend it with a Level -1 orREACH_MAPthat renders the star map view. Star map rendering logic can be lifted fromstar_map.gdinto a method called byAtlasPanel._draw(). StarMapRendererregisters itself withHudGroups— after unification, de-register it or make it a sub-component rather than an independent app. Don't break theimplant/map/starchartpath for existing callers until the unified path is confirmed working.client/ui/implant/atlas_viewer.gdandclient/ui/implant/atlas_overlay_bar.gdare 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 carriesCharacterVisualDescriptor— 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
CharacterVisualDescriptoror a newCharacterProfilestruct 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
--helpas 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.gdcurrently shows only a loading message. Add version display.- Client version: read from
project.yamlat the repo root (rootversionfield, format0.1.{sprint}). Use GDScript'sFileAccessor 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 theObserverSnapshotif 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
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