Field Value Module baseVersion 1.13.2Effort highTools —
Keywords: animation curves, camera punch, chromatic aberration, coyote time, damage numbers, easing, hit flash, hit stop, hit-stop, juice, knockback, particle burst, particles, screen shake, squash stretch, time slow, vignette
/t1k:designer:base:feel-juice
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
Juice = visual + audio feedback that makes every action feel consequential.
Rule : Every player action must produce visible, audible feedback within 1 frame.
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)
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.
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.
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.
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.
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.
Effect Values Reference Hit stop 2-4 frames at 60fps (33-66ms) references/hit-feedback.mdScreen shake magnitude 0.1-0.3 (hit), 0.5+ (explosion) references/screen-effects.mdEase-out appear 0.2s UI elements references/animation-curves.mdInput latency budget <100ms total, <50ms action games references/input-responsiveness.mdCoyote time 3-6 frames grace after leaving edge references/input-responsiveness.mdInput buffer window 2-4 frames before action completes references/input-responsiveness.md
# 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
game-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
File Coverage references/hit-feedback.mdHit stop frames, hit flash, knockback, damage numbers, screen shake, particle bursts references/screen-effects.mdShake formula, camera punch, chromatic aberration, time slow, vignette, flash effects references/animation-curves.mdEase types, UI animation timing, squash/stretch, anticipation, follow-through, spring physics references/input-responsiveness.mdLatency budget, input buffering, coyote time, cancel windows, dead zone, priority system