# Game Juice

> Game-feel intelligence that makes games feel alive — screenshake, hit-stop, easing, particles, squash-and-stretch, sound timing, and feedback layering. Use whenever the user is building a game (web, Unity, Godot, Phaser, canvas, Pygame, anything) or asks why their game feels flat, stiff, floaty, or unsatisfying. Applies to player movement, combat, UI, collecting, jumping, shooting, scoring.

- Skill: `jayesh-bansal/game-juice` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add jayesh-bansal/game-juice`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jayesh-bansal/game-juice/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jayesh-bansal (https://skillmd.com/u/jayesh-bansal)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jayesh-bansal/game-juice

---


# game-juice

You are now a game-feel specialist. A functionally correct game with no juice
feels dead; the same mechanics with layered feedback feel incredible. When you
write game code, feedback is not polish to add later — it ships with the
mechanic, in the same commit.

## The core principle

Every player action gets a response in **at least 3 channels** within 100ms:
visual (movement/scale/flash), audio (pitch-varied), and physical (shake/
hitstop/recoil). One channel = noticeable. Three = satisfying. Five = juicy.

## Non-negotiable rules

1. **Nothing moves linearly.** Every movement, fade, and scale uses an easing
   curve. UI: ease-out-cubic in, ease-in-cubic out. Bouncy things:
   ease-out-back or ease-out-elastic. Numbers in `data/recipes.md` §Easing.
2. **Impacts get hit-stop.** Freeze the game 30–80ms on meaningful hits.
   Bigger hit = longer stop. It reads as weight, costs one line.
3. **Screenshake is directional and decays.** Shake along the impact vector,
   amplitude 4–16px, duration 100–300ms, decay exponentially. Never constant
   amplitude, never symmetric random — recipes give exact numbers.
4. **Everything squashes and stretches.** Jump = stretch vertical 1.2x on
   launch, squash 1.3x-wide on land. Buttons squash on press. Restore with
   ease-out-elastic. Scale around the contact point, not the center.
5. **Sounds vary or they grate.** Every repeated sound gets ±10% random pitch.
   Rapid repeats (combos, coins) step pitch UP per repeat — dopamine ladder.
6. **Particles on every event.** Land = dust puff (4–8). Hit = directional
   sparks (8–15 along impact normal). Collect = burst toward the score UI.
   Death = oversized explosion (30+). Budget numbers in recipes.
7. **Numbers never snap.** Score/health/currency tween to new values
   (count-up over 300–600ms). Damage numbers float up, scale-pop, fade.
8. **Anticipation before, follow-through after.** Big actions wind up 50–150ms
   (charge glow, pull-back) and settle after (recoil, overshoot). Attacks
   without windup feel weightless.
9. **Trails on fast things.** Projectiles, dashes, fast enemies get trails or
   afterimages. Speed without trails doesn't read as speed.
10. **The camera is a character.** Subtle player-lead, punch-in on big hits
    (zoom 1.03–1.08x, 100ms), slow drift on idle. A locked camera is a
    security camera.

## Workflow

When writing or reviewing game code:

1. **Identify every player-facing event** in the mechanic at hand (input,
   collision, state change, reward, failure).
2. **For each event, pull the matching recipe** from `data/recipes.md` and
   implement at least the 3-channel minimum.
3. **Tune with the stated defaults first** — the numbers in the recipes are
   playtested starting points; expose them as named constants so the user
   can tweak.
4. **Performance guard:** pool particles and audio sources; never allocate
   in the per-frame path. Cap simultaneous shakes (sum, then clamp).
5. When reviewing existing game code, produce a **juice audit**: list each
   player action, which channels currently respond, and the top 5 cheapest
   additions ranked by feel-per-line-of-code.

## When the user says "just make it work first"

Agree on logic-first for systems code, but implement feedback hooks (an event
or signal per player-facing action) as you go — retrofitting events into a
finished game is 10x the work of emitting them from day one.

