NEW ยท v1.0

Game Juice

20 drop-in C++ components for instant game feel. Camera shake, hitstop, slow-mo, rumble, screen flash, coyote time, hit reactions, and more. Drop a component on your character, call one function, ship it.

v1.0.0 UE 5.4 โ€” 5.7 100% C++ Multiplayer Ready Blueprint Friendly
Getting Started
Components
Examples
Advanced
Help
// 01 / Setup

๐Ÿ“ฆ Installation

๐Ÿ’ก Before you start: Make sure you have Unreal Engine 5.4 or newer. This plugin works with UE 5.4, 5.5, 5.6, and 5.7. Pick the ZIP that matches your engine version.
1

Download & Extract

After purchasing on FAB, download the ZIP file matching your engine version (e.g. GameJuice_UE5.7.zip). Right-click โ†’ Extract All.

โš ๏ธ Do NOT open files inside the ZIP directly. Always extract first!
2

Copy to Plugins Folder

Put the GameJuice folder into your project's Plugins folder.

๐Ÿ“ YourProject/
โ”œโ”€โ”€ ๐Ÿ“ Content/
โ”œโ”€โ”€ ๐Ÿ“ Config/
โ”œโ”€โ”€ ๐Ÿ“ Plugins/ โ† Create this if missing
โ”‚   โ””โ”€โ”€ ๐Ÿ“ GameJuice/
โ”‚      โ”œโ”€โ”€ ๐Ÿ“ Source/
โ”‚      โ””โ”€โ”€ ๐Ÿ“„ GameJuice.uplugin
โ””โ”€โ”€ ๐Ÿ“„ YourProject.uproject
๐Ÿšซ WRONG: Don't put it in Engine/Plugins or inside Content!
3

Open Project & Compile

Double-click your .uproject file. If asked to rebuild, click Yes. Wait 1-3 minutes.

๐Ÿ’ก If you don't see the "Rebuild" prompt, right-click your .uproject โ†’ Generate Visual Studio project files, then open the .sln and build in Visual Studio.
4

Verify

Create any Actor Blueprint, click Add Component, and search Juice. You should see all 20 components in the dropdown:

  • Juice Camera Shake Component
  • Juice Hitstop Component
  • Juice Slow Mo Component
  • ...and 17 more

๐ŸŽ‰ If you see them, you're ready!

// 02 / First steps

๐Ÿš€ Quick Start (3 Minutes)

๐ŸŽฏ Goal: Add screen-shake-on-hit, hitstop-on-hit, and gamepad-rumble-on-hit to your character. Three lines of Blueprint, no C++.
1

Add Components to Your Character

Open your Player Character Blueprint (e.g. BP_ThirdPersonCharacter).

Click Add Component and add these three:

  • ๐Ÿ” Search Juice Camera Shake โ†’ add it
  • ๐Ÿ” Search Juice Hitstop โ†’ add it
  • ๐Ÿ” Search Juice Gamepad Rumble โ†’ add it

That's all the setup. Each component picks reasonable defaults automatically.

โš ๏ธ Important: After adding each component, select it in the Components panel and make sure Auto Activate is set to True in the Details panel. Components ship with Auto Activate disabled by default โ€” enable it or the component won't do anything at runtime.
2

Trigger Them on Hit

Find (or create) the event where your character takes damage. Common name: Event Any Damage or your custom OnHit event.

From that event, drag three function nodes:

  • Shake โ†’ on the Camera Shake component (pick preset Hit)
  • Trigger Hitstop โ†’ on the Hitstop component
  • Rumble โ†’ on the Gamepad Rumble component (pick preset Heavy)
๐Ÿ’ก Each component exposes simple functions like Shake, Trigger Hitstop, Rumble, Flash, etc. Just drag from the component reference and type the verb.
3

Press Play and Take a Hit

Compile, save, hit Play. Take damage. You should see:

  • โœ… Camera shakes briefly
  • โœ… Game freezes for 1/8 of a second (hitstop)
  • โœ… Gamepad rumbles (if using a controller)

๐ŸŽ‰ Done. That's your character now feeling 10x better. Repeat for whatever events you want to juice up.

// 03 / Mental model

๐Ÿ’ก How It Works

Game Juice is built on a simple pattern. Every component follows the same three rules, so once you learn one, you know them all.

1. Add the component

Click Add Component on any actor and pick the juice you want. Then select the component and set Auto Activate to True in the Details panel.

2. Configure in the Details panel

Every component has tunable parameters in the Details panel. Click the component, scroll the Details panel, tweak intensity / duration / curves to taste.

3. Call the function from Blueprint

Each component exposes one or two simple functions. Call them from any event. Done.

๐Ÿ’ก Every component has a Global Intensity Scale property (0 โ€“ 3). If you want to tune ALL juice up or down at once (e.g. accessibility setting), drive this from a slider.

The base pattern

Pseudo-Blueprint, but the real thing looks identical:

OnHit (Event)
  โ””โ†’ Shake Component       โ†’ Shake (Preset: Hit)
  โ””โ†’ Hitstop Component     โ†’ Trigger Hitstop
  โ””โ†’ Rumble Component      โ†’ Rumble (Preset: Heavy)
  โ””โ†’ Flash Component       โ†’ Flash (Preset: Damage)
  โ””โ†’ Vignette Component    โ†’ Set Health Percent (CurrentHP / MaxHP)

That's it. No event dispatchers, no manual networking, no Niagara setup. The components handle replication, dedicated server cosmetic skipping, and cleanup automatically.

// 04 / Components

๐Ÿ“ท Camera (ร—5)

Five camera-driven juice components. All work in 1st person, 3rd person, or any custom camera setup.

๐ŸŽฌ Juice Camera Shake

cosmetic ยท multiplayer-aware

Server-multicast camera shake with per-observer distance falloff. Built-in presets: Explosion, Footstep, Hit, Recoil, Earthquake, plus Custom for your own UCameraShakeBase classes.

Functions

FunctionWhat it does
ShakePlay a shake on the local camera (pass a preset)
Shake At LocationPlay a shake on EVERY player within radius (with falloff)

Properties

PropertyWhat it does
Custom Shake ClassIf preset = Custom, use this UCameraShakeBase class
Falloff CurveCustom distance falloff curve (optional)
Default RadiusDefault falloff radius for ShakeAtLocation
Global Intensity ScaleMultiplier applied to all shakes (0 โ€“ 3)

๐Ÿ” Juice Camera FOV Punch

cosmetic ยท local

One-shot field-of-view kick with curve-driven decay. Perfect for sprint-start, dash, or weapon zoom.

Functions

FunctionWhat it does
PunchTrigger an FOV punch at default scale
Punch ExplicitCustom delta degrees, duration, and curve override

๐ŸŒ€ Juice Camera Tilt

cosmetic ยท local

Continuous camera roll based on movement, turning, velocity, or manual control. Frame-rate independent.

Modes

ModeEffect
OnMovementTilts opposite to lateral input (strafe lean)
OnTurningTilts proportional to mouse/stick yaw delta
OnVelocityTilts based on character velocity vector
ManualYou drive the tilt yourself via SetManualTilt

๐Ÿ‘๏ธ Juice Camera Lookahead

cosmetic ยท local

Celeste-style velocity-based camera offset โ€” camera "looks ahead" of the player's movement direction. Best for 1st person / 2D side-scrollers.

๐Ÿ’จ Juice Camera Impulse

cosmetic ยท local

One-shot directional camera push with exponential decay. Use for explosions, big hits, environmental impacts.

Functions

FunctionWhat it does
Apply ImpulsePush camera in a world-space direction

โฑ๏ธ Time (ร—3)

Time manipulation components. All three handle the dilation = 0 edge case correctly using the engine's real-time core ticker (world timers don't fire when time stops).

โธ๏ธ Juice Hitstop

multiplayer ยท server-multicast

Brief time-freeze on impact. The classic Smash Bros / Super Meat Boy / Hyper Light Drifter feel.

Functions

FunctionWhat it does
Trigger HitstopRun a hitstop with default duration & severity
Trigger Hitstop ExplicitCustom duration and severity (0 โ€“ 1)

๐Ÿข Juice Slow Mo

multiplayer ยท server-multicast

Sustained slow motion with smooth ramp-in / hold / ramp-out. Optional curve-driven blend for non-linear feel.

Functions

FunctionWhat it does
Start Slow MoDefault slow-mo with target dilation, blend in/hold/out
Stop Slow MoStop early (works on clients via server RPC)

โฐ Juice Time Dilation

multiplayer ยท scoped

Smooth time-dilation blend with two scopes:

  • Global โ€” slows down the entire world (uses WorldSettings.TimeDilation)
  • Owner Only โ€” slows down just this actor (uses CustomTimeDilation)

Use Owner Only for "bullet time on enemy" or speed buffs without affecting the player.

๐ŸŽฎ Rumble & Input (ร—2)

Force feedback and PS5 DualSense adaptive trigger support.

๐Ÿ“ณ Juice Gamepad Rumble

cosmetic ยท local

Force feedback rumble with five built-in presets and a fallback dynamic rumble path.

Presets

PresetUse for
LightUI clicks, light footsteps, item pickup
MediumStandard hit, moderate impact
HeavyBig hit, explosion, boss attack
RecoilQuick punchy weapon recoil
HeartbeatLow-frequency tense pulse (boss intro, low HP)
๐Ÿ’ก You can assign a custom UForceFeedbackEffect asset to any preset slot in the Details panel. If left empty, the dynamic fallback path is used (works automatically).

๐Ÿ•น๏ธ Juice Adaptive Trigger

cosmetic ยท local ยท PS5 only

PS5 DualSense trigger effects via UInputDeviceSubsystem. On Xbox / PC the calls become silent no-ops, so it's safe to wire up across all platforms.

Effect types

EffectUse for
BowDrawing a bow, charging an attack
GunPulling a heavy trigger
BrakeVehicle brake / heavy lever
VibrationEngine running, machinery
WallHard stop / wall (great for blocked weapons)

โœจ Camera Effects (ร—4)

Screen-space and post-process effects that drive your existing camera. No separate Niagara systems, no extra rendering passes.

โšก Juice Screen Flash

cosmetic ยท local ยท UMG

Full-screen color flash with linear fade. Built-in presets: Damage (red), Heal (green), Pickup (yellow), Death (white), Custom (any color).

Provides a runtime-built UMG widget out of the box (no setup needed). For a custom design, assign your own UUserWidget class.

๐Ÿ’จ Juice Speedlines

cosmetic ยท local ยท post-process

Anime-style speedlines via post-process material injection.

โš ๏ธ Requires: a post-process material with an Intensity scalar parameter (parameter name configurable). Drop your material in the Details panel; the component creates a Material Instance Dynamic and drives it.

๐Ÿฉธ Juice Damage Vignette

cosmetic ยท local ยท post-process

HP-driven vignette that pulses red when health is low. Just call Set Health Percent with your current/max HP each frame (or on damage).

๐ŸŽž๏ธ Juice Chromatic Aberration

cosmetic ยท local ยท post-process

Impact-driven RGB fringing on the camera's post-process. Triggered with one call, decays automatically.

๐Ÿƒ Movement Feel (ร—3)

Industry-standard feel improvements that make platformers and action games not feel sluggish.

๐Ÿฆ˜ Juice Coyote Time

gameplay ยท local

Lets the player jump for a configurable grace period after walking off a ledge. Distinguishes "walked off" from "jumped off" using vertical velocity heuristic.

Functions

FunctionWhat it does
Try Consume Coyote JumpReturns true if the player can still jump (and consumes the window)

๐ŸŽฏ Juice Jump Buffer

gameplay ยท local

Remembers a jump press for a brief window before landing. If the player presses jump 100ms before touching the ground, they jump on landing โ€” no missed inputs.

Functions

FunctionWhat it does
Buffer Jump InputCall this on jump press
Try Consume Buffered JumpCall on landing โ€” returns true if a buffered jump should fire

โณ Juice Anticipation

gameplay ยท local

Animation-principle scheduler: Windup โ†’ Action โ†’ Recovery. Use for melee swings, charging attacks, big abilities. Fires three delegates so you can hook anim notifies, sounds, and gameplay logic to each phase.

Events (Delegates)

EventWhen it fires
OnStartedSequence begins (good place to play windup anim)
OnActionWindup ended, action moment (do damage / spawn projectile here)
OnRecoveredRecovery ended (player can act again)
OnCancelledSequence was cancelled mid-flight

๐Ÿ’ฅ Hit Feedback (ร—3)

Three components that make taking and dealing hits feel meaty.

๐Ÿ‘Š Juice Hit Reaction

multiplayer ยท server-multicast

Knockback + 4-direction hit event. Server applies LaunchCharacter (movement replicates to clients automatically). Fires OnHitReceived with hit direction enum (Front / Back / Left / Right) so you can play correct hit animation.

โšช Juice Material Flash

multiplayer ยท server-multicast

Flashes ALL of a mesh's materials white (or your color) on hit. Drives a FlashAmount scalar parameter on Material Instance Dynamics.

โš ๏ธ Requires: Your mesh's materials must have a FlashAmount scalar parameter (and optionally FlashColor vector). The component creates MIDs automatically at BeginPlay.

๐Ÿ”Š Juice Audio Pitch Variation

cosmetic ยท local

Plays a USoundBase with randomized pitch (e.g. 0.95 โ€“ 1.05) and randomized volume. Stops "machine gun click syndrome" where the same sound plays identically each time.

// 05 / Recipes

๐ŸŽฏ Example: Add juice to a shooter

You have a basic shooter. Player can shoot, take damage. Goal: make every shot AND every hit feel impactful.

Components to add to player character

Wire it up

OnFireWeapon (Event)
  โ””โ†’ Camera Shake โ†’ Shake (Preset: Recoil)
  โ””โ†’ Gamepad Rumble โ†’ Rumble (Preset: Recoil)
  โ””โ†’ Camera FOV Punch โ†’ Punch (small kick, 0.05s)

OnHitEnemy (Event)  // your weapon hit confirmation
  โ””โ†’ Hitstop โ†’ Trigger Hitstop  (only if killing blow)

OnTakeDamage (Event)
  โ””โ†’ Camera Shake โ†’ Shake (Preset: Hit)
  โ””โ†’ Gamepad Rumble โ†’ Rumble (Preset: Heavy)
  โ””โ†’ Screen Flash โ†’ Flash (Preset: Damage)
  โ””โ†’ Chromatic Aberration โ†’ Trigger
  โ””โ†’ Damage Vignette โ†’ Set Health Percent (CurrentHP / MaxHP)

That's it. Five minutes of wiring, and your shooter now feels professional.

๐Ÿฆ˜ Example: Better platformer feel

Add the three "feels good" tricks every modern platformer uses.

Components on player character

Wire it up

OnJumpPressed (Input event)
  โ”œโ†’ Jump Buffer โ†’ Buffer Jump Input
  โ””โ†’ Branch: Is Falling?
       True  โ†’ Coyote Time โ†’ Try Consume Coyote Jump โ†’ If true, do Jump
       False โ†’ Do Jump

OnLanded (Character event)
  โ””โ†’ Jump Buffer โ†’ Try Consume Buffered Jump โ†’ If true, do Jump immediately

Now your character can jump up to 0.15s after walking off a ledge, AND if the player presses jump just before landing, they'll auto-jump on landing. The combination is what makes Celeste / Hollow Knight feel responsive.

โš”๏ธ Example: Punchy melee combat

Make every hit land like Hollow Knight or Hyper Light Drifter.

Components on attacker

Components on receiver (enemy)

Wire it up

OnAttackPressed
  โ””โ†’ Anticipation โ†’ Begin Explicit (windup: 0.15s, recovery: 0.4s)

Anticipation.OnAction
  โ””โ†’ Trace forward, find enemy
       โ””โ†’ Apply Damage to enemy
       โ””โ†’ Material Flash (on enemy) โ†’ Flash
       โ””โ†’ Hit Reaction (on enemy) โ†’ Apply Hit
       โ””โ†’ Hitstop (on player) โ†’ Trigger Hitstop
       โ””โ†’ Camera Shake (on player) โ†’ Shake (Preset: Hit)
       โ””โ†’ Audio Pitch Variation โ†’ Play Sound

The combination of Anticipation phases + Hitstop on impact + Material Flash on the receiver is what makes melee feel weighty.

// 06 / Advanced

๐ŸŒ Multiplayer

โœ… Full multiplayer support out of the box. No extra setup required.

Game Juice components fall into two networking categories. You don't need to think about it โ€” pick the component, call the function, replication just works.

Cosmetic / Local components

These run only on the local client. Calling them from the server has no effect on remote players.

World-event / Server-multicast components

These replicate via Server RPC โ†’ Multicast. All players see the effect (with appropriate falloff).

โš ๏ธ Dedicated server is automatically detected. Cosmetic effects (camera, post-process, rumble) skip on dedicated server to save CPU. Server-side effects like Hit Reaction's knockback still apply.

๐ŸŽ›๏ธ Presets & Curves

Most components ship with built-in presets. You can also drive any effect with a UCurveFloat for full custom control.

Where presets live

Each component's Details panel exposes its presets as enum dropdowns. For example, on the Camera Shake component:

PropertyWhere
Default PresetUsed when calling Shake() with no arguments
Custom Shake ClassIf preset = Custom, use this UCameraShakeBase
Falloff CurveOverride default falloff for ShakeAtLocation

Custom curves

You can drive most effects with a UCurveFloat asset. Right-click in Content Browser โ†’ Miscellaneous โ†’ Curve. Set X = 0..1 (normalized time), Y = 0..1 (effect alpha).

๐Ÿ’ก Bell-shaped curve (0 โ†’ 1 โ†’ 1 โ†’ 0) gives ramp-in, hold, ramp-out. Ease-out curve (1 โ†’ 0 with curve) gives strong start that fades. Pick what fits the moment.

๐Ÿ“น Custom Camera Setup

By default, camera-driven components auto-resolve the first UCameraComponent on the owning actor. If you have a non-standard setup, you can assign the target manually.

Auto-resolution

Components that drive a camera (FOV Punch, Tilt, Lookahead, Impulse, Speedlines, Damage Vignette, Chromatic Aberration) call FindComponentByClass<UCameraComponent> on their owner at BeginPlay.

Manual assignment

If your camera lives somewhere else (e.g. on a child actor, or you want to drive a specific camera in a multi-camera setup), call Set Target Camera on the component at runtime, passing the camera reference.

๐Ÿ’ก If you change the camera mid-effect, the component automatically restores the OLD camera to its base state before swapping. No leftover offsets.

Spring arm / 3rd person

Camera offset components (Lookahead, Impulse) handle spring arm hierarchies correctly โ€” they convert offsets to the camera's parent space before applying. Works in 3rd person without modification.

// 07 / Help

๐Ÿ”ง Troubleshooting

Component doesn't do anything / effect doesn't trigger

  1. Check that Auto Activate is set to True on the component in the Details panel. This is the #1 reason effects don't fire. Components ship with Auto Activate disabled by default.
  2. Check that Global Intensity Scale is greater than 0 (default is 1.0).
  3. Make sure you're actually calling the component's function (e.g. Shake, Rumble) from your event graph.

I don't see any of the Juice components in the Add Component menu

  1. Did you copy the plugin to YourProject/Plugins/GameJuice/?
  2. Did you compile? (Open .uproject, click Yes when asked to rebuild.)
  3. Check Edit โ†’ Plugins โ†’ Installed for "Game Juice". If disabled, enable it and restart the editor.
  4. Make sure your engine version matches the ZIP you extracted (UE 5.4 plugin won't load in UE 5.6, etc.).

Camera Shake works in standalone but not in multiplayer

  1. Make sure you're calling Shake At Location from the server. Camera Shake's RPC fires Server โ†’ Multicast.
  2. If calling from a client, the component automatically forwards to the server. But if your owning actor isn't replicated, the RPC won't reach the server.
  3. Owning actor must have Replicates = true.

Hitstop freezes the dedicated server, breaking other players

This was an early-version bug. v1.0+ skips dedicated server automatically. If you see this, double-check you're on the latest version.

Speedlines don't show up

  1. Did you assign a Post Process Material to the component?
  2. Does that material have a scalar parameter named Intensity (or whatever you set in Intensity Parameter Name)?
  3. Is the post-process actually rendering? (Test by directly setting your camera's post-process intensity high to confirm post-processing works.)

Material Flash doesn't flash

  1. Does your mesh's material have a scalar parameter called FlashAmount?
  2. Try the simplest possible setup: in the material, plug a Lerp into Emissive โ†’ A = your normal output, B = white, Alpha = the FlashAmount scalar parameter.
  3. The component creates MIDs at BeginPlay. If you swap the mesh's material at runtime, call Set Target Mesh again to refresh.

Coyote Time doesn't trigger

  1. The component hooks ACharacter::MovementModeChangedDelegate. Make sure your owner is an ACharacter (not an APawn).
  2. Coyote window only opens on transition to MOVE_Falling with low vertical velocity (โ‰ค 50 cm/s default), to distinguish "walked off" from "jumped off".

Adaptive Trigger doesn't do anything

It only works on PS5 with a connected DualSense controller. On PC / Xbox the calls are silent no-ops by design (so you can wire it cross-platform without checks).

Compilation errors after installing

  1. Make sure you extracted the ZIP for your exact engine version.
  2. Delete Binaries, Intermediate, and Saved folders, then right-click .uproject โ†’ Generate Visual Studio project files โ†’ rebuild.
  3. Make sure UMG plugin is enabled (Edit โ†’ Plugins โ†’ UMG).

โ“ FAQ

Do I need to know C++?

No! Everything is exposed to Blueprint. The plugin is written in C++ for performance, but you'll never need to touch the source code. Add the component, set properties in Details, call functions from Blueprint events. Done.

Will it work in 1st person AND 3rd person games?

Yes. Camera-driven components auto-resolve any UCameraComponent on the owner. For spring-arm 3rd person setups, the offset components handle parent-space conversion correctly. One caveat: Camera Lookahead is best in 1st person. For 3rd person you'd typically drive your spring arm's TargetOffset instead โ€” the lookahead component does still work but won't feel as natural.

Does it work without Niagara / Enhanced Input plugins?

Yes. Game Juice has no third-party dependencies. It uses only stock Unreal modules: Core, CoreUObject, Engine, InputCore, UMG, Slate, SlateCore. No Niagara, no Enhanced Input, no MetaSounds. You can use it in any UE 5.4+ project.

Can I use it with GAS (Gameplay Ability System)?

Yes. Game Juice components are independent of GAS. You can call them from any GAS ability's BlueprintImplementableEvent or from a custom GameplayCue. Common pattern: a damage GameplayCue calls Camera Shake + Screen Flash + Hit Reaction on the receiver.

How does it differ from custom UCameraShake / Force Feedback assets I could make myself?

You absolutely could roll your own. Game Juice gives you: (1) preset library so you don't have to design from scratch, (2) multiplayer-aware wiring (server-multicast with falloff, dedicated server skip), (3) consistent API across all 20 components (every one has Global Intensity Scale, every one is enable/disable-able), (4) clean shutdown handling (no leftover state after destroy / level change). It's the boring infrastructure you'd otherwise write 20 times.

Can I modify the source code?

Yes. Full C++ source is included. Modify anything for your project. You cannot redistribute the source code.

Will future engine versions be supported?

Yes. Game Juice currently supports UE 5.4, 5.5, 5.6, and 5.7. New engine versions will be added as they release. Updates are free for existing customers.

Is it compatible with my custom GameMode / PlayerController / Character setup?

Yes. Components attach to ANY actor. They auto-resolve their dependencies (pawn, player controller, camera) without assuming any specific class hierarchy. Works with default Third Person template, custom characters, possessable pawns, vehicles โ€” anything.

What happens on a dedicated server?

Cosmetic juice (camera, rumble, post-process, audio) skips automatically on dedicated server โ€” no rendering work, no wasted CPU. World-event juice (Hitstop, Slow Mo, Hit Reaction knockback) still applies authority-side where appropriate. Listen server runs everything (it's also a player).

๐Ÿ’ฌ Support

๐Ÿ“ง

Email

support@adrenalinegames.pl

Response within 48 hours

๐Ÿ’ฌ

Discord

Join Discord

Live chat & community

๐ŸŒ

Website

adrenalinegames.pl

All plugins & docs

๐Ÿ’ก When reporting issues, include: UE version, ZIP version you installed, steps to reproduce, error messages (screenshots help!), and what you've already tried.