Files
settled-reach/docs/sprints/sprint-28/joint.md
T
2026-03-17 12:49:21 +01:00

6.9 KiB
Raw Blame History

title, description, type, status, sprint, team
title description type status sprint team
Sprint 28 — Joint Briefing Cross-team coordination, integration points, sprint completion proof sprint planning 28 joint

Sprint 28: Character Visuals — Joint

Goal: Move beyond placeholder art to final product candidate character visuals, from design specs through asset production and compositor implementation.

Pre-Sprint Checks

Item Owner Status
Sprint 27 all done (9/9) SI confirmed
D-146 (tile-scale preview) locked — no portrait system Planning confirmed
D-147 (aesthetic taste trait) locked — no cosmetic→apartment pipeline Planning confirmed
Sprint 28 record created in planning status SI confirmed (ID: 28)
All 11 tickets (#683#694) assigned to Sprint 28 SI confirmed

Cross-Team Dependencies

Dependency Upstream Downstream Notes
#684 (workshop) outputs docs/design/character-visuals-spec.md planning visual (#686#692) Visual team cannot start production without this spec. Block ALL visual tickets until spec is published.
#684 (workshop) outputs docs/design/compositor-api-spec.md planning client (#693) Client compositor architecture must match the workshop-specified API. #693 should read this before writing any code.
#685 (wireframe) outputs docs/design/character-creation-screen-wireframe.md planning client (#694) Client creation screen is a direct implementation of the wireframe. #694 is blocked until wireframe is approved.
#686 (body type sprites) delivers sprites to client/assets/sprites/character/body/ visual client (#693) Compositor needs at least one complete body type sprite set as test input. #693 can begin architecture with a stub but must have real sprites for integration testing.
#693 (compositor) exports its node API client client (#694) The creation screen's preview pane is driven by the compositor node. #694 cannot wire the preview until #693 is testable.

Action required — workshop start: Planning team (#684 agent) to publish docs/design/character-visuals-spec.md and docs/design/compositor-api-spec.md before any visual or client work begins. These are gating documents. SI will update ticket statuses once they are published.

Action required — body sprites handoff: Visual team (#686 agent) to notify client team (#693 agent) when the first complete body type sprite set is committed to the visual branch. Client team needs this for compositor integration testing.

Sprint Completion Proof

Sprint 28 is done when all of the following are observable:

Planning:

  • docs/design/character-visuals-spec.md exists and is complete (all 7 layer types specified)
  • docs/design/compositor-api-spec.md exists and specifies the layer enum, color override struct, and Godot node architecture
  • docs/design/character-creation-screen-wireframe.md (or .png) exists and has been reviewed by Jeroen
  • docs/workshops/character-visuals/workshop-outcomes.md exists with all decisions recorded
  • Any new D-records filed to decisions/ for architectural decisions made during the workshop

Visual:

  • client/assets/sprites/character/body/ contains 2 body type sprite sheets (8 directions each) with color mesh region maps
  • client/assets/sprites/character/face/ contains 2 face type sprite sheets (8 directions each)
  • client/assets/sprites/character/hair/ contains 2 hair style sprite sheets (8 directions each)
  • client/assets/sprites/character/expressions/ contains sprite sheets for all workshop-defined expression states (min 3)
  • client/assets/sprites/character/overlays/scars/ and .../tattoos/ each contain 2 overlay sprites
  • client/assets/sprites/character/overlays/injuries/ contains damage state overlay sprites (min 3 states)
  • client/assets/sprites/character/clothing/ contains 2 clothing set sprite sheets; .../accessories/ contains 2 sets

Client:

  • client/scripts/rendering/character_compositor.gd exists and layers all sprite types in the correct workshop-specified order
  • Color mesh recoloring works: changing a color override in the compositor updates the rendered output in real time
  • 8-direction rotation works: compositor switches all layer textures consistently
  • client/scenes/character_creation.tscn + client/ui/character_creation.gd exist and wire into the new game flow
  • Preview pane shows the composited character at heavy zoom (≥4×) with live updates on layer/color changes
  • All layer selection controls are functional (body, face, hair, clothing, accessories, scars, tattoos, colors)
  • Randomise button works
  • Keyboard navigation (tab/arrow/enter/esc) is fully functional

Integration eyeball test: Launch the game → New Game → reach character creation screen → change body type → preview updates → change hair color → preview updates → confirm → game loads with character definition stored. No placeholder gray blobs — you see a recognizably distinct character with distinct hair and clothing.

Test Plan Alignment

Sprint 28 is an art + UI sprint. No new ECS systems, no IPC protocol changes. Test surface:

  • #693 compositor: Unit test (Godot scene runner or headless) that instantiates the compositor with a known CharacterDefinition, verifies the correct number of child nodes, and verifies the facing direction swap triggers a texture change. Use a minimal stub sprite (1×1 PNG) for the test — no need for production assets.
  • #694 creation screen: UI test that navigates the creation screen via keyboard input, changes a layer, and asserts the preview compositor was updated. Use client/tests/ pattern (matching existing test files e.g. test_dialogue_speaker_colors.gd).
  • Visual sprites: No automated test. Acceptance is the integration eyeball test above — does the compositor render a legible composited character from the production sprites?
  • Do NOT use TestHarness mocks for rendering verification. Per CLAUDE.md testing preferences: use the live pipeline. For the creation screen preview specifically, the full compositor is the production path — test against it directly.

Sprint Retro Triggers

Flag to SI immediately if any of these conditions are hit:

  • Workshop spec (#684) is incomplete or contradicts D-146/D-147 — do not start production work until SI escalates to Jeroen
  • Color mesh recoloring approach selected by the workshop requires shader work that Stig estimates as blocking — surface this before #693 is committed, not after
  • Body type sprite footprint deviates from the 24×32/64px convention used by entity_renderer.gd — this will break gameplay rendering and must be caught before #686 merges
  • #694 wireframe design (from #685) is received after visual sprites are already in progress and requires a layer reordering — SI to assess impact and decide whether to hold visual or accept the rework cost