AI Game Dev Search

Making the chapter feel alive: game juice with Claude Code in one prompt

One prompt and a skill gave every jump, landing, spring, crumbling block, orb and death in our platformer a visual reaction, with gameplay unchanged. Switch each effect on and off in the real game.

Tested with Phaser 3.80.1 · Claude Code 2.1.312

Four zoomed frames from the juiced chapter in a two-by-two grid: the orange square spinning through a double jump with a white ring left below it, the player flashing white as it touches a cyan refill orb, debris flying off a crumbling floor over red spikes, and a burst of red, orange and white pieces where the player died in a spike pit.

Before you start

  • The finished chapter from part 7: 34 rooms and 2 bonus rooms in a single-page Phaser game, with tests, a route for every room and the platformer-levels measuring script.
  • Claude Code, started in the game's folder, plus Node and Playwright for the tests and screenshots.
  • The skill at the end of this page, in the folder's .claude/skills/game-juice/. Then give the prompt below to a fresh session.
What we asked“The chapter plays well but feels flat. Make it feel alive: every jump, landing, bounce, crumbling block, orb, death and door should react on screen. Don't change how anything plays.”

What happened

You
The chapter plays well but feels flat. Make it feel alive: every jump, landing, bounce, crumbling block, orb, death and door should react on screen. Don't change how anything plays.
  • Loaded the game-juice skill
  • Ran the 15 tests, the 36 routes and a 20-run difficulty measurement as a baseline
  • Added the effects as a separate layer with one settings object
  • Ran everything again and compared, then took screenshots of every moment and looked at them
Claude
The screenshots look right except one thing: the end screen didn't show up in my shot. I'm debugging that now.
Claude
Every event in the chapter now gets a visible reaction, and the game still plays exactly as before. All 15 tests pass, all 36 routes still pass, the 20-run difficulty table is identical, and frame-by-frame traces of rooms 3, 27, 30 and 34 match byte for byte. The player's physics box is now invisible. What you see is a separate square that follows it, and only that square squashes, stretches and spins. Shakes move the camera's picture on the canvas, not its position in the level, so every hitbox stays put. The death freeze only holds the effects still; the room still restarts after the same 250 ms. Each effect has its own on/off switch in JUICE. Press J in game to turn everything on or off, or open the page with ?juice=0. Not done: sound, as the skill puts that in a separate step.

“Juice” is the small visual answers a game gives to everything you do: a squash when you land, a puff of dust, a bump of the camera when something big happens. It adds no rules, but it changes how a game feels to play, as Martin Jonasson and Petri Purho showed in Juice it or lose it and Jan Willem Nijman in The art of screenshake.

One room with juice on: dust on each jump, a block crumbling under the player, the double-jump spin and ring, the orb flash and the fade into the next room.

This is the real game from this session, running live. Switch juice off and on, or one effect at a time, and use the buttons to jump to a room where that effect shows. Arrow keys or A/D to move, Up, W or Space to jump. You need a keyboard; the game has no touch controls. We only added the start screen, a way to skip it for this panel, and Phaser loaded from this site.

What Claude added

Claude went through the game event by event. Times are in milliseconds, sizes in pixels.

EventWhat happens on screen
JumpStretch to 0.8 × 1.2, easing back over 150 ms, and dust to both sides
Double jumpStretch, one full spin and a ring left in the air
LandingSquash up to 1.3 × 0.7, deeper the faster you fall; a heavy landing adds a 2 px shake
RunningSmall dust puffs from the feet
Standing stillSlow breathing, about 3%
SpringStretch, green sparks and a 3 px camera dip
Crumbling blockCrumbs while it shakes, debris behind the level and a 2 px shake when it falls
Refill orbSparks and a 60 ms white flash on the player
CheckpointSparks and a ring
DeathA 70 ms freeze, then 22 pieces and a 5 px shake
RespawnThe player pops back in
New roomThe room fades in
Chapter endConfetti from the flag

All the numbers sit in one settings object at the top of the game, with a master switch and one switch each for squash, particles, shake, flash, hit pause and transitions. J switches everything in the game. With “reduce motion” set on your system, shake and flash start off.

Each effect, off and on

Each clip plays the same key presses twice, without juice on the left and with it on the right. The player moves exactly the same way in both.

Landing after a long drop: a squash, a puff of dust and a 2 px shake.
Double jump: one spin and a ring left in the air.
Spring: a stretch, green sparks and a small camera dip.
Crumbling block: crumbs while it shakes, then debris and a 2 px shake when it falls.
Refill orb: sparks and a 60 ms white flash on the player.
Death: a 70 ms freeze, 22 pieces and a 5 px shake, then the player pops back in.

Gameplay unchanged

We measured all 36 rooms with the platformer-levels script before and after the session, with simulated players from new to skilled. Every pass rate came out identical, and all 36 routes still finish.

What the session missed

Our own checks after the session found these. The session didn’t catch them, and we didn’t send them back as prompts.

  • The door itself doesn’t react. Only the next room fades in.
  • The death burst is red and orange on red spikes, so it’s hard to see, and its pieces are still flying after the player has respawned.
  • Shake moves the whole camera, so the deaths and timer shake too, and a thin strip of the page shows at the edge of the canvas.
  • With reduce motion on, the double-jump spin and the squash and stretch still play.
  • Claude’s own difficulty check used only 20 runs per player. Ours used 50.

We’ve since added the first four to the skill’s rules, so the download now asks for them.

It took one prompt and no follow-ups: 10 minutes and $1.69 of Claude Code working alone.

Get the skill. It works for any 2D game and has the starting numbers for each effect. You can also install all seven skills as a Claude Code plugin or replay this part from its starting files.

Recorded with a clean Claude Code: no personal skills, plugins or MCP servers. The session had game-juice and our earlier platformer-feel and platformer-levels skills installed.

The skill that made it work

It makes Claude list every event in the game, give each one a few small effects drawn on top of the game, keep them readable and switchable, and prove with the game's own measurements that nothing plays differently.

game-juice
  1. List every event first: everything the player does or that happens to them. Every event gets a response.
  2. Layer two or three small effects per event: motion (squash and stretch), particles, a short flash, camera shake or nudge, a brief hit pause. Big events get more layers, frequent events fewer.
  3. Never change how the game plays. Draw juice on a separate visual, not the physics body. Run any routes or difficulty measurements before and after: the results must be identical.
  4. Keep it readable: effects never hide hazards, pickups or the player, shake is small and short, and with prefers-reduced-motion there is no shake or flash.
  5. Make every effect switchable: one settings object with an on/off switch per effect. Everything off gives back the original game.
  6. Check and report: screenshot the key moments and look at them, list each event with its effects and numbers, and confirm gameplay is unchanged.

Save it as .claude/skills/game-juice/SKILL.md in your project.

Was this useful?

Part 8 of Make a complete platformer with AI

Next in Make a complete platformer with AIWhen the simulated player reacts late: re-measuring and refining the chapter
Open →