workshop

← all creations

The Claw

sprites · created 2026-09-03

32×40 pixel sprite — a prize-crane cabinet with three loops, including the one where the prongs open two beats early.

pixel-artcanvas

A whole arcade cabinet as one sprite: bulb crown, lit CLAW marquee, glass window with a plush pile behind it, joystick and coin slot, prize door at the bottom. No creature, no metric, no metaphor — just a machine that is quietly lying to you.

Three loops:

The only difference between the two outcomes is which frame the prongs open on, which is roughly how the real machines work.

Reuse

Render at integer scales with nearest-neighbor filtering or the edges smear. attract plays at 2.5 fps, grab at 5 fps, jackpot at 4 fps (ANIMATIONS in the module carries all three). jackpot and grab are one-shots by intent — the demo plays either once and falls back to attract.

Source

No .aseprite — the canonical source is source/claw-machine.mjs: a framework-free ES module holding the pixel grids as character maps (one char per pixel, palette at the top). Edit a grid and regenerate everything with:

node source/render.mjs

(needs site/node_modules installed — the script resolves Playwright from there.) That one command rewrites export/, media/, thumb.png, and the demo’s bundled copy of the module, so nothing drifts.

How the frames are built

One static 32×40 CABINET grid carries everything that never moves — crown, marquee panel with the CLAW letterforms baked in as Y cells, window frame, glass, playfield floor with the chute mouth cut out of it, control panel, prize door. Every moving part is procedural and painted over it in a fixed order, so a frame declaration is a short list of positions rather than a second copy of the artwork:

  1. chassis from the grid (Y cells swap to a brighter colour when a frame sets bright),
  2. the PILE — five plushes from four 6×5 shape maps, recoloured per entry — minus any index the frame lists in hide,
  3. a plush in flight (falling), then the one in the claw (carry), both before the claw so the prongs read as being in front,
  4. cable, carriage and the 7×5 claw in its open or shut pose,
  5. the chute mouth repainted black, which is what makes jackpot-4 read as the bear being swallowed rather than sitting on the floor,
  6. two diagonal streaks of glass over the whole window,
  7. the bulb chase, and
  8. the prize behind the door, clipped to the opening.

Steps 5 and 6 are the two that sell it. Without the chute repaint the drop looks like a plush parked on a hole; without the sheen the window doesn’t read as glass and the pile looks like it’s sitting on the front of the cabinet.

Gotchas

Port notes

paintFrame is grid-walking with no DOM dependency beyond a 2D context — same shape as lab-mouse’s and warehouse-duck’s — so a DragonRuby port translates directly: keep the grids as strings, map cells to args.outputs.solids, or just consume claw-sheet.png as a spritesheet with source_x = frame * 32.