t1k:designer:base:feel-juice
| Field | Value |
|---|---|
| Module | base |
| Version | 1.25.1 |
| Effort | high |
| Tools | — |
Keywords: animation curves, camera punch, chromatic aberration, coyote time, damage numbers, easing, feedback mandate, feedback matrix, feedback variants, feedback variation, hit flash, hit stop, hit-stop, juice, knockback, particle burst, particles, repetitive feedback, screen shake, squash stretch, time slow, vignette
How to invoke
Section titled “How to invoke”/t1k:designer:base:feel-juiceGame Feel & Juice
Section titled “Game Feel & Juice”When This Skill Triggers
Section titled “When This Skill Triggers”- Making combat, movement, or UI interactions feel more satisfying
- Adding screen shake, hit stop (freeze frames), or camera punch
- Designing floating damage numbers, hit flash, or particle bursts
- Tuning animation easing curves (ease-out, spring, squash-and-stretch)
- Fixing input latency, input buffering, or dead zone issues
- Adding time-slow (bullet time), chromatic aberration, or vignette effects
Core Concepts
Section titled “Core Concepts”Juice = visual + audio feedback that makes every action feel consequential. Rule: Every player action must produce visible, audible feedback within 1 frame.
Feedback Priority Stack (when budget is limited)
Section titled “Feedback Priority Stack (when budget is limited)”- Sound (always — even at 8-bit fidelity)
- Hit flash / color change (1-2 frames)
- Particle burst (3-10 particles minimum)
- Camera reaction (shake or punch)
- Screen-space effect (chromatic aberration, time slow)
Screen Shake Parameters
Section titled “Screen Shake Parameters”| Scenario | Amplitude | Frequency | Decay |
|---|---|---|---|
| Light hit | 0.05–0.10 | 20–30 Hz | Exponential 0.15s |
| Heavy hit | 0.15–0.30 | 15–20 Hz | Exponential 0.25s |
| Explosion | 0.40–0.60 | 10–15 Hz | Linear 0.4s |
| Boss slam | 0.80–1.00 | 8–12 Hz | Ease-out 0.6s |
Implementation: use a camera shake component on a singleton; a shake system reads amplitude/frequency/decay and drives the camera offset each frame. Never shake the main camera directly — shake a child rig.
Hit Stop / Time Freeze
Section titled “Hit Stop / Time Freeze”- Per-entity freeze (preferred): pause simulation for 2–4 frames via your engine’s time-scale or system group API. Resume via countdown component.
- Global time scale: simpler but breaks UI animations — use only for boss cinematic moments.
- Values: light hit = 2 frames; heavy hit = 3–4 frames; parry/crit = 5–6 frames.
- Freeze attacker AND target — asymmetric freeze causes visual disconnect.
Particle Burst Patterns
Section titled “Particle Burst Patterns”| Event | Count | Speed | Lifetime | Shape |
|---|---|---|---|---|
| On-hit (light) | 5–8 sparks | 2–4 m/s | 0.2–0.3s | Hemisphere toward attacker |
| On-hit (heavy) | 12–20 shards | 4–8 m/s | 0.3–0.5s | Full sphere + ground splat |
| On-death | 20–40 mixed | 3–10 m/s | 0.5–1.0s | Radial burst + linger |
| On-level-up | 15–25 sparkles | 1–3 m/s upward | 1.0–2.0s | Cone upward |
Use GPU-instanced particle bursts. Attach to entities via your engine’s event/component system.
Audio Feedback Timing
Section titled “Audio Feedback Timing”| Phase | Timing | Notes |
|---|---|---|
| Attack wind-up | Frame 0 (input frame) | Whoosh/grunt starts immediately |
| Impact | Frame of collision | Crack/thud on hit confirm |
| Cooldown tick | Every 0.25s remaining | Subtle UI blip — not every frame |
| Critical hit | +50ms delay after impact | Stinger layered on top of impact sfx |
Rule: audio cue starts on the same frame as the visual — never let visual lead audio by >1 frame.
Mobile Haptic Feedback Patterns
Section titled “Mobile Haptic Feedback Patterns”- Light tap (UI button, collect item):
HapticFeedback.LightImpact() - Medium impact (enemy hit, block):
HapticFeedback.MediumImpact() - Heavy impact (death, boss hit, explosion):
HapticFeedback.HeavyImpact() - Selection change (menu scroll):
HapticFeedback.SelectionChanged() - Pattern: visual → audio → haptic (50ms max delay between layers)
- Always provide haptic toggle in settings; default ON for mobile, OFF for tablet.
Feedback Matrix — Shipping Discipline
Section titled “Feedback Matrix — Shipping Discipline”Every player-facing action must ship WITH its feedback, not as a later polish pass — enforced kit-wide as a blocking HARD-GATE by rules/game-feedback-mandate.md (always-loaded, engine-agnostic). Before a feature is done, fill its Feedback Matrix: one row per action, columns = visual/vfx/sfx/haptic/ui, checked against the six action classes (input-ack, valid-action, invalid-action, progress, milestone, terminal) and their per-channel REQUIRED/optional minimums. A high-frequency action also needs its feedback to vary across repeats (V1–V7 in the same rule’s § Variation) — a matrix cell can be filled and still fail review if it’s the same clip on the 400th repeat.
→ Full contract, blank matrix template, worked examples, accessibility invariants: references/feedback-matrix.md.
Quick Reference
Section titled “Quick Reference”| Effect | Values | Reference |
|---|---|---|
| Hit stop | 2-4 frames at 60fps (33-66ms) | references/hit-feedback.md |
| Screen shake | magnitude 0.1-0.3 (hit), 0.5+ (explosion) | references/screen-effects.md |
| Ease-out appear | 0.2s UI elements | references/animation-curves.md |
| Input latency budget | <100ms total, <50ms action games | references/input-responsiveness.md |
| Coyote time | 3-6 frames grace after leaving edge | references/input-responsiveness.md |
| Input buffer window | 2-4 frames before action completes | references/input-responsiveness.md |
Gotchas
Section titled “Gotchas”| # | Anti-Pattern | Problem | Fix |
|---|---|---|---|
| 1 | No feedback on actions | Feels broken, unresponsive | Every action: sound + visual within 1 frame |
| 2 | Delayed input response | Player feels lag, distrusted | Start animation on input frame (optimistic rendering) |
| 3 | Excessive shake | Nauseating, unplayable for some | Cap magnitude at 0.5 units; add reduce-motion option |
| 4 | Uniform feedback | All hits feel the same | Scale effects by damage: crit = 2× shake + larger number |
| 5 | No squash/stretch | Motion feels rigid, lifeless | Apply 0.8/1.2 scale on land/impact over 0.2s |
| 6 | Missing coyote time | Platformer feels unfair | Always: 3-6 frame jump grace after leaving platform |
| 7 | Shake in large-scale battles | 500+ units = constant max-trauma, camera never stops vibrating | Disable CinemachineImpulseListener on camera or set CameraTrauma.MaxIntensity=0. Trauma-per-hit (0.03) × hundreds of hits/frame = instant saturation |
Cross-References
Section titled “Cross-References”rules/game-feedback-mandate.md— kit-wide blocking gate requiring a filled Feedback Matrix before a feature ships; this skill’sreferences/feedback-matrix.mdis its working referencegame-feel-foundations— theoretical framework (Swink’s 6 metrics, perception thresholds, ADSR theory, principles audit). Use that skill for why / how much; this skill for how.game-ux-design— feedback must not obscure critical HUD info (shake budget vs readability)- engine animation skills (auto-activated via registry) — animation and curve implementation
- tweening library skill (auto-activated via registry) — zero-alloc tweening for juice effects
- engine rendering skills (auto-activated via registry) — GPU-side effects
- engine VFX skills (auto-activated via registry) — particle VFX
Reference Files
Section titled “Reference Files”| File | Coverage |
|---|---|
references/hit-feedback.md | Hit stop frames, hit flash, knockback, damage numbers, screen shake, particle bursts |
references/screen-effects.md | Shake formula, camera punch, chromatic aberration, time slow, vignette, flash effects |
references/animation-curves.md | Ease types, UI animation timing, squash/stretch, anticipation, follow-through, spring physics |
references/input-responsiveness.md | Latency budget, input buffering, coyote time, cancel windows, dead zone, priority system |
references/feedback-matrix.md | Feedback-channel × action-class contract, variation rules (V1–V7) with worked examples, blank matrix template, accessibility invariants — the shipping-discipline artifact behind rules/game-feedback-mandate.md |