Skip to content

Expand block-robot sprites to fill more of the 32x32 cell #260

Description

@williamthorsen

Problem

The block-robot sprites use only a fraction of the 32×32 sprite cell (subagent 56%, orchestrator 75%), making characters appear small and requiring padding workarounds (ORCH_SPRITE_BOTTOM_PAD = 6, SUBAGENT_SPRITE_BOTTOM_PAD = 10). Additionally, the subagent's blue-grey palette is hard to see against the midnight-blue factory background (#1a1a2e) because the shading darkens toward the outer edges — the exact area where contrast matters most.

Context

  • Sprite generation lives in scripts/sprites/ (body parts, palettes, renderer)
  • Precompiled SVGs are stored as assets and loaded by Excalibur's SpriteSheet API
  • Padding constants in dimensions.ts compensate for transparent space in the sprite cell, used by StationAgentActor and OrchestratorActor to position characters flush against reference surfaces
  • The catwalk scene background is #1a1a2e; the subagent's darkest palette shade (#2a2a3e) is nearly identical in hue and brightness

Solution

  1. Scale up body parts proportionally — enlarge each pixel grid (head, torso, legs, arms) by ~2px in each dimension, preserving shading patterns. Bottom-align characters (feet at row ~30-31)
  2. Improve palette visibility — replace hardcoded hex palettes with a parametric generator driven by tunable constants (hue, saturation, min/max lightness). Shift subagent toward cyan/teal with a brighter floor. Give orchestrator a mild saturation/brightness boost
  3. Rename and update padding constants — rename ORCH_SPRITE_BOTTOM_PADORCH_SPRITE_BOTTOM_PADDING_PX and SUBAGENT_SPRITE_BOTTOM_PADSUBAGENT_SPRITE_BOTTOM_PADDING_PX; reduce values to match new (much smaller) transparent padding
  4. Regenerate SVG sprite sheets

Acceptance criteria

  • Subagent character fills at least 75% of the 32×32 cell vertically
  • Orchestrator character fills at least 85% of the 32×32 cell vertically
  • Characters are bottom-aligned within the cell (consistent across all 12 animation frames)
  • Subagent palette shifted toward cyan/teal with brighter floor — darkest shade visibly distinct from #1a1a2e
  • Orchestrator palette receives mild saturation/brightness boost
  • Palettes generated from tunable constants (hue, saturation, lightness range) for easy experimentation
  • Padding constants renamed to ORCH_SPRITE_BOTTOM_PADDING_PX and SUBAGENT_SPRITE_BOTTOM_PADDING_PX with values updated (target ≤2px)
  • Both characters remain visually distinct (orchestrator taller/more prominent than subagent)
  • Animation poses retain visual quality at the larger scale
  • All existing catwalk tests pass with updated sprites and constants

Metadata

Metadata

Labels

featureAdded or improved external functionalityscope:factory

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions