plugins/game-dev/skills/game-feel/SKILL.md
Juice, feedback layering, screen shake/particles/sound timing, the perception-action cycle, and 'why does this feel bad?' diagnostics. Use when implementing player actions, combat hits, collectibles, UI transitions, weapon impacts, jumps, dashes, or any moment where the player should *feel* something; when a mechanic functionally works but feels mushy, slow, or unsatisfying; or when playtesters say 'it's missing something.' Covers timing reference numbers (frames per response phase), feedback channels (visual/audio/haptic/screen), and the diagnostic ladder for feel problems.
npx skillsauth add rbergman/dark-matter-marketplace game-feelInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Purpose: Make every player action feel responsive, satisfying, and communicative. Game feel is the difference between "it works" and "it feels great." These are the tools to close that gap.
Influences: Frameworks here draw on feedback layering theory, cognitive perception-action cycle research, and game design literature on "juice" and responsive design.
Use this skill proactively when:
Every player action should produce feedback on three layers, and all three must align:
| Layer | What Changes | Example | |-------|-------------|---------| | Mechanical | Game state updates | HP decreases, score increases, position changes | | Audiovisual | Sensory response | Screen shake, particles, sound effect, animation | | Emotional | Player feeling | Satisfaction, tension, surprise, power |
When layers misalign, something feels "off" even if the player can't explain it:
For feedback to register, it must pass three gates:
Action → [Perceivable?] → [Interpretable?] → [Timely?] → Registered
↓ ↓ ↓
"I didn't see it" "What happened?" "It feels laggy"
Can the player actually detect the feedback?
Does the player understand what the feedback means?
Is the feedback close enough in time to the action?
| Threshold | Feel | |-----------|------| | < 50ms | Instant — player perceives cause and effect as simultaneous | | 50-100ms | Responsive — feels connected but has presence | | 100-200ms | Noticeable — acceptable for weighty/heavy actions | | > 200ms | Laggy — feels disconnected; only acceptable for explicitly slow/telegraphed actions |
Rule: Immediate visual feedback within 1-2 frames (16-33ms), even if the full animation plays out over longer. The onset must be instant.
"Juice" is small feedback amplification with outsized impact on feel. These techniques don't change game state — they change experience.
When something feels wrong, diagnose systematically:
| Player Says | Likely Layer | Start Here | |-------------|-------------|------------| | "It's laggy" | Timing | Check input-to-visual-response latency | | "It feels weak" | Audiovisual | Add juice (hit stop, shake, sound) | | "It didn't register" | Perception | Increase feedback visibility/contrast | | "It's confusing" | Interpretation | Clarify feedback language, reduce noise | | "It's floaty" | Timing + AV | Add gravity, weight, impact frames | | "It's clunky" | Timing | Check cancel windows, input buffering | | "It's boring" | Emotional | Layer isn't producing the intended feeling |
Critical feedback should use 2+ channels:
Visual + Audio (minimum for any significant action)
Visual + Audio + Haptic (ideal for core loop actions)
Visual + Audio + Camera (for high-impact moments)
Relying on a single channel means some players will miss it.
Does the feedback match what actually happened?
Feedback lies erode trust faster than missing feedback.
All values below are starting points — tune through playtesting per the Numbers Policy in game-design.
| Action Type | Visual Onset | Full Duration | Sound Onset | Notes | |-------------|-------------|---------------|-------------|-------| | Light attack | 1-2 frames | 200-400ms | On contact frame | Quick, snappy | | Heavy attack | 3-5 frame windup | 400-800ms | On contact + windup sound | Telegraphed weight | | Jump | 1 frame | Duration of jump | On launch | Squash on takeoff, stretch at apex | | Land | 1-2 frames | 100-200ms | On contact | Squash, particles, camera dip | | Collect | Instant | 200-400ms fade | On contact | Magnet + pop + counter pulse | | Damage taken | 1 frame flash | 200-500ms | On contact | Screen edge vignette, sound, shake | | Death | 3-5 frame slow | 500ms-2s | Dramatic sting | Time slow, camera pull, fade |
development
Initialize a new repository with standard scaffolding - git, gitignore, AGENTS.md, justfile, mise, beads, and timbers. Use when starting a new project or setting up an existing repo for Claude Code workflows.
data-ai
Activate at session start when using Agent Teams for complex multi-agent work. Establishes team lead role with delegation protocols, teammate spawning, model selection, and beads integration. You coordinate the team; teammates implement.
data-ai
Use when creating a worktree, setting up a worktree, starting feature work that needs isolation, or before executing implementation plans. Covers git worktree creation under .worktrees/, gitignore setup, beads integration, and merge guardrails.
data-ai
Activate when you are a delegated subagent (not the orchestrator). Establishes subagent protocol with terse returns, details to history/, file ownership boundaries, and escalation rules. You implement; orchestrator reviews and commits.