Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
158 lines
8.0 KiB
Markdown
158 lines
8.0 KiB
Markdown
---
|
||
title: "Sprint 28 — Visual Briefing"
|
||
description: "Character sprite production: body types, faces, hair, expressions, overlays, clothing — all layers for compositor"
|
||
type: sprint
|
||
status: planning
|
||
sprint: 28
|
||
team: "visual"
|
||
---
|
||
|
||
# Sprint 28: Character Visuals — Visual Tasks
|
||
|
||
**Goal:** Move beyond placeholder art to final product candidate character visuals, from design specs through asset production and compositor implementation.
|
||
|
||
**Branch:** `visual`
|
||
**Agents:** Araminta (art direction)
|
||
|
||
## New Tickets
|
||
|
||
| # | Title | Blocked by |
|
||
|---|-------|------------|
|
||
| #686 | Body type sprites | #684 (workshop) |
|
||
| #687 | Face type sprites | #684 (workshop) |
|
||
| #688 | Hair type sprites | #684 (workshop) |
|
||
| #689 | Facial expression sprites | #684 (workshop) |
|
||
| #690 | Scar and tattoo overlay sprites | #684 (workshop) |
|
||
| #691 | Visible injuries overlay sprites | #684 (workshop) |
|
||
| #692 | Clothing, apparel and accessory layer sprites | #684 (workshop) |
|
||
|
||
Use `tooling/db/ticket show <id>` for full details.
|
||
|
||
## Key Decisions
|
||
|
||
- `decisions/architecture.md` — D-134 (full character customisation: hair, clothing, colors at tile scale — readability solved through outline/highlight, not by limiting options), D-043 (art direction: "functional warmth" visual style), D-044 (visual hierarchy: entity > object > structure), D-046 (lighting system: three-reference model), D-066 (dual-scale grid: 0.5m simulation, 1m visual)
|
||
- `decisions/scope.md` — D-146 (tile-scale sprite with heavy zoom as the preview — these sprites ARE the final product at game scale)
|
||
|
||
## Notes
|
||
|
||
### Blocking condition — wait for #684 outputs
|
||
|
||
All seven tickets are blocked by #684 (planning workshop). Do not start production until the workshop outputs `docs/design/character-visuals-spec.md`. That document defines:
|
||
- Layer ordering for the compositor
|
||
- Color mesh region definitions per layer type
|
||
- 8-direction rotation consistency rules
|
||
- Expression state list
|
||
- Damage state progression for injuries
|
||
|
||
If the workshop spec is incomplete in any area, block the relevant ticket and flag to SI before proceeding.
|
||
|
||
### Existing sprite reference
|
||
|
||
Current placeholder sprites are at `client/assets/sprites/`:
|
||
- `npc_generic_{north,south,east,west}_64.png` — 64×64 px source textures, 4 directions
|
||
- Rendered at 0.5 scale → 32×32 runtime footprint within 32×32 visual tiles (D-066)
|
||
- Entity footprint in `entity_renderer.gd`: 24×32 within the 32×32 tile (ENTITY_WIDTH/HEIGHT constants)
|
||
|
||
All new sprites must maintain this 64×64 px source resolution and 4-direction (or 8-direction, per workshop spec) convention. The compositor (#693) will layer them — produce each layer as a separate sprite sheet, not composited into a single texture.
|
||
|
||
### #686 — Body type sprites
|
||
|
||
Base layer. All other character sprites composite on top of this.
|
||
|
||
**Deliverables:**
|
||
- 2 distinct body type sprite sheets (8 directions each = 16 sprites per body type)
|
||
- Color mesh region map per body type (defines recolorable skin/clothing zones)
|
||
- Source files and exported PNGs at `client/assets/sprites/character/body/`
|
||
|
||
**Art guidance:** Body type is the widest-impact decision — proportions set the silhouette that all overlaid layers must match. Produce body_a and body_b with visibly distinct silhouettes while sharing the same feet-anchor point and 24×32 footprint convention. Color mesh regions: at minimum, skin region must be separately recolorable.
|
||
|
||
### #687 — Face type sprites
|
||
|
||
Overlay on the upper portion of the body sprite.
|
||
|
||
**Deliverables:**
|
||
- 2 distinct face type sprite sheets (8 directions each)
|
||
- Color mesh region map per face (skin tone recolorability at minimum)
|
||
- Source files and exported PNGs at `client/assets/sprites/character/face/`
|
||
|
||
**Art guidance:** Face sprites overlay on the head region of the body. The 8-direction face must register exactly with the 8-direction body for all orientations. Skin tone region should match the body skin region color mesh ID for consistent tinting.
|
||
|
||
### #688 — Hair type sprites
|
||
|
||
Overlay on top of the face layer.
|
||
|
||
**Deliverables:**
|
||
- 2 distinct hair style sprite sheets (8 directions each)
|
||
- Color mesh region map per style (hair color region fully recolorable)
|
||
- Source files and exported PNGs at `client/assets/sprites/character/hair/`
|
||
|
||
**Art guidance:** Hair sprites must read at 32×32 game resolution. Silhouette is more important than fine detail — thick, distinct hair shapes read better than thin ones at tile scale. Test at 32px, not at the 64px source.
|
||
|
||
### #689 — Facial expression sprites
|
||
|
||
Overlay states on the face layer. Expression sprites swap the face layer's neutral state.
|
||
|
||
**Deliverables:**
|
||
- Named expression state sprite sheets (states defined by workshop — minimum: neutral, alert, distressed)
|
||
- 8 directions per expression state
|
||
- Source files and exported PNGs at `client/assets/sprites/character/expressions/`
|
||
|
||
**Art guidance:** At tile scale, expression reads through body posture and head angle as much as facial detail. Exaggerate. Neutral is the default — alert and distressed are the two most important non-neutral states. Count of expression states is TBD by the workshop spec.
|
||
|
||
### #690 — Scar and tattoo overlay sprites
|
||
|
||
Additive overlays above the skin layer. Placement must work for both body types.
|
||
|
||
**Deliverables:**
|
||
- 2 scar overlay sprites (with placement anchors, 8 directions each)
|
||
- 2 tattoo overlay sprites (with placement anchors, 8 directions each)
|
||
- Source files and exported PNGs at `client/assets/sprites/character/overlays/scars/` and `.../tattoos/`
|
||
|
||
**Art guidance:** These are visible at tile scale only when zoomed in (character creation preview, heavy zoom mode per D-146). Placement anchors must be defined relative to the body sprite coordinate system so the compositor can offset them correctly per body type.
|
||
|
||
### #691 — Visible injuries overlay sprites
|
||
|
||
Damage state overlays representing combat injury. These appear during gameplay, not just in character creation.
|
||
|
||
**Deliverables:**
|
||
- Damage state overlay sprites (states defined by workshop — minimum: light damage, heavy damage, critical)
|
||
- 8 directions per damage state
|
||
- Source files and exported PNGs at `client/assets/sprites/character/overlays/injuries/`
|
||
|
||
**Art guidance:** Injury overlays are visible during gameplay at normal zoom (32×32). They must read clearly at that scale. Use color and silhouette change (blood, torn clothing, posture change baked in) — not fine line detail.
|
||
|
||
### #692 — Clothing, apparel and accessory layer sprites
|
||
|
||
Outermost visible layer. Must handle occlusion of face/hair layers when appropriate (e.g. helmets).
|
||
|
||
**Deliverables:**
|
||
- 2 clothing set sprite sheets (full outfit, 8 directions each)
|
||
- 2 accessory sprite sheets (8 directions each)
|
||
- Layer ordering and occlusion rules documented in the spec (or confirmed against workshop spec)
|
||
- Color mesh region map per clothing set (primary + secondary color regions)
|
||
- Source files and exported PNGs at `client/assets/sprites/character/clothing/` and `.../accessories/`
|
||
|
||
**Art guidance:** Clothing is what the player sees 99% of the time during gameplay. Make it read clearly at 32×32. Two clothing sets should have visibly different silhouettes (one formal/professional, one casual/work). Color mesh regions: minimum two — primary garment color, secondary accent.
|
||
|
||
## Dependency Chain
|
||
|
||
```
|
||
#684 (workshop) → #686 (body) → #693 (client compositor — body sprites are its first input)
|
||
#684 (workshop) → #687 (face)
|
||
#684 (workshop) → #688 (hair)
|
||
#684 (workshop) → #689 (expressions)
|
||
#684 (workshop) → #690 (scars/tattoos)
|
||
#684 (workshop) → #691 (injuries)
|
||
#684 (workshop) → #692 (clothing/accessories)
|
||
|
||
#686–#692 can all run in parallel after #684 completes.
|
||
#686 is highest priority — it unblocks #693 (client compositor).
|
||
```
|
||
|
||
## 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(assets): character sprite layers — body, face, hair, expressions, overlays, clothing" --description "body" --base main --head visual
|
||
```
|