Files
Bolt-Pet/bolt_pet/assets/sprites
themajesticmagician 80bef6f524 Upload
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 06:25:41 -06:00
..
2026-07-23 06:25:41 -06:00
2026-07-23 06:25:41 -06:00
2026-07-23 06:25:41 -06:00
2026-07-23 06:25:41 -06:00
2026-07-23 06:25:41 -06:00
2026-07-23 06:25:41 -06:00

Sprite assets

Art: Kenney's Robot Pack (CC0 — no attribution required, credited here anyway), the green side-view robot. Source pack lives at ~/Documents/kenney_robot-pack; only the frames listed below were copied in.

Convention the loader (bolt_pet/ui/sprite.py) expects:

assets/sprites/
  idle/        frame_00.png                    robot_greenBody   (standing)
  listening/   frame_00.png, frame_01.png       robot_greenDrive1/2 (tracks rolling — "leaning in")
  thinking/    frame_00.png, frame_01.png       robot_greenDamage1/2 (flicker — "processing")
  talking/     frame_00.png, frame_01.png       robot_greenBody, robot_greenJump (bounce)
  error/       frame_00.png                     robot_greenHurt
  • One subfolder per pet state (matches bolt_pet.state.PetState).
  • Any *.png filenames work — they're played back in alphabetical-sort order, looping, at IDLE_ANIMATION_FPS (see .env).
  • Frames are scaled to fit within PET_SIZE (default 160px), keeping aspect ratio, and centered in the (square) pet window — the source art here isn't square, so don't assume it fills the frame edge-to-edge.
  • A state directory with no frames in it falls back to a small procedurally-drawn placeholder blob (see _placeholder_frames in sprite.py).

Swapping in different art

Replace any state's PNGs (same alphabetical-order-loops convention) to change its look — no code changes needed. If your source is a single grid spritesheet (rows/cols of frames in one PNG) rather than one-file-per-frame, use scripts/slice_spritesheet.py to cut it into this folder-of-frames convention:

python scripts/slice_spritesheet.py path/to/idle_sheet.png assets/sprites/idle \
    --cols 6 --rows 1

If your format is something else entirely (a single animated GIF/APNG, a Spine/DragonBones skeletal export, an Aseprite .json atlas, etc.) — tell me the format and I'll adapt sprite.py's loader rather than making you convert by hand.