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>
3.9 KiB
3.9 KiB
title, description, type, status, sprint, team
| title | description | type | status | sprint | team |
|---|---|---|---|---|---|
| Sprint 21 — Client Briefing | Save/load game flow, debug overlay housekeeping | sprint | archived | 21 | client |
Sprint 21: Instantiate — Client Tasks
Goal: The template system becomes executable — templates spawn NPCs, assign triangles, and place them in world space; cross-template triangles link social sites; the client gains save/load game flow; and the generator pipeline gets its architectural design.
Branch: client
Agents: Stig (dev), Hoshe (QA)
New Tickets
| # | Title | Blocked by |
|---|---|---|
| #257 | Save/load game flow | — (#256 done) |
| #561 | Housekeeping: move debug_overlay.gd to ui/ directory | — |
Use tooling/db/ticket show <id> for full details on any ticket.
Key Decisions
decisions/architecture.md— D-020 (Godot = pure renderer, no game logic in GDScript), D-085 (per-game save directories underuser://saves/<game-id>/), D-088 (3-state pause: Normal/Overlay/Paused, server-authoritative)decisions/scope.md— D-027 (vertical slice: smuggler + detective, two-character proof)
Notes
#257 — Save/load game flow
- Server-side serialization (
SaveStateV1,SaveLoadCommand) landed in Sprint 19 (#553, #553). The clientSessionManagerautoload (client/scripts/autoloads/session_manager.gd) already creates per-game directories and trackscurrent_game_id. Theinput.rsserver-side hook forSaveLoadCommand::SaveandSaveLoadCommand::Loadis in place. - What's missing: the client UI flow — save-to-file and load-from-file screens, and F5/F6 quicksave/quickload keybinds wired to
PlayerInput. client/ui/main_menu.gdexists. Add a "Load Game" screen that callsSessionManager.list_game_dirs()and lets the player select a save.- F5 quicksave flow: send
PlayerInput { action: QuickSave }→ server responds with serialised save data → client writes touser://saves/<game-id>/quicksave.sav. F6 quickload: reverse. - Loading screen: a minimal full-screen overlay ("Resuming...") during the round-trip to prevent input during load. No elaborate animation needed for v0.1.
- D-020 constraint: no game logic in client. The client never constructs save data — it only sends the command and receives the file bytes from the server.
- Existing stub in
session_manager.gdline 71 notes: "The actual F5 save will be wired here once server supports SaveCommand." Server supports it now — wire it. - Acceptance: (1) F5 in-game triggers quicksave, file appears at correct path. (2) F6 reloads it, player position and NPC state match save. (3) Main menu "Load Game" lists existing saves sorted by date.
#561 — Housekeeping: move debug_overlay.gd to ui/ directory
client/scripts/ui/debug_overlay.gdis the odd one out — all 17 other UI components live inclient/ui/. This was flagged in a code review.- Steps: move
client/scripts/ui/debug_overlay.gd(and its.uidfile) toclient/ui/debug_overlay.gd. Update anypreload()orload()references. Update the.tscnthat instances it if one exists. - Check
client/scripts/rendering/andclient/scripts/autoloads/for any imports of the old path. - If moving would break more than 3 references and the distinction is intentional (debug overlay is a script, not a scene-based UI), document the distinction in a comment at the top of the file instead, and close the ticket as "documented not moved."
- Acceptance:
make ci-clientpasses with the file at its new location, or the distinction is documented in-file.
Dependency Chain
#257 (save/load game flow) — standalone
#561 (debug_overlay housekeeping) — standalone, parallel
Both tickets are independent and can be developed in parallel.
PR Workflow
When ready to submit, create a PR with tea CLI:
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(client): Sprint 21 save/load game flow" --description "body" --base main --head client