[art] No operative portraits — 6 squad + 5 enemy types render as text-only cards #9
Labels
No labels
blocked:needs-attention
blocked:needs-decision
blocked:needs-decompose
blocked:needs-design
blocked:needs-triage
blocked:unclassified
bug
documentation
enhancement
gsd-spec
in-progress
needs-decompose
priority:high
priority:low
priority:medium
quickfix
test
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/cybertactics#9
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Asset gap.
The 6 squad operatives (VEX, DIAZ, ROOK, SABLE, JOLT, HALO) and 5 enemy types (drone, ganger, heavy, sentry, wisp) have no character art. On the title screen (
web/index.html-> OPERATIVES panel) they render as flat colored-border rectangles + text. In-mission they render as small abstract icons.The data layer is complete (
web/js/data.js: WEAPONS / SQUAD / ENEMY_TYPES), and the sprite atlas (web/assets/sprites.png) has 32×32 px regions declared for all 11 unit keys (web/js/sprite_atlas.gdREGIONS map +web/js/ui.jsSPR map).What's missing:
Reference style: cyberpunk-neon, dark backgrounds, neon accents. Existing atlas has 32×32 unit tiles at row 2 (vex/diaz/rook/sable/jolt/halo) and row 3 (drone/ganger/heavy/sentry/wisp) — extend the atlas layout or split into a separate
portraits.png.Acceptance:
web/js/ui.jsSPR /godot/scripts/sprite_atlas.gdREGIONSRefs: visual gap confirmed via Playwright screenshot at
tools/playwright_smoke.pngand live title-screen render.Decomposed into 4 child issues. Each is gated on the previous via the body dependency chain.
Sequence:
#18 — [art] #9-1: generate 11 cyberpunk-neon portrait PNGs (6 squad + 5 enemy)
Asset creation: 11 portraits under
web/assets/portraits/<id>.png, 96x96 minimum, neon-accent matches the unit color fromweb/js/data.jsSQUAD/ENEMY_TYPES. This is the work that has no substrate in the kilo-gsd lane - needs an artist or generative pipeline. Labels: enhancement, needs-decompose, priority:medium, triage-approved.#19 — [art] #9-2: extend sprite atlas + ui.js SPR + sprite_atlas.gd REGIONS for 11 portraits
Wire the portraits into both atlas registries (web
SPRmap + godotREGIONSDictionary). The contract is one source of visual truth - both sides must agree. Pick ONE layout decision (per-file PNG vs single-atlas extension) and write that decision into both registries. Depends on #18.#20 — [art] #9-3: wire portraits into OPERATIVES cards + SELECTED panel
UI wiring: title screen OPERATIVES cards show portrait on the left (
web/js/ui.jsshowTitle(), the ops+= loop around line 213); in-mission SELECTED panel shows the selected unit portrait. Depends on #19.#21 — [art] #9-4: visual verification via Playwright + smoke screenshot
Capture Playwright screenshots of title screen and SELECTED panel, regenerate
tools/playwright_smoke.png, add an assertion totools/playwright_smoke.pyfor non-zero portrait dimensions. Depends on #20.Closing parent #9 - children carry the work forward. The kilo-gsd chain picks them up via
triage-approved+needs-decomposelabels.