Skip to main content

Feel Profiles & Dramatic Intensity

Feel Profiles and Dramatic Intensity let you adjust game feel globally — scaling everything up for cinematic moments, toning it down for menus, or making every successive hit feel heavier.

Feel Profiles

A UERP_FeelProfile is a UDataAsset that configures global response behavior.

Creating a Feel Profile

Content Browser → right-click → Miscellaneous → Data Asset → UERP_FeelProfile

Properties

PropertyTypeDescription
GlobalIntensityScalefloatMultiplies all response intensities (default 1.0)
DramaticIntensityCurveUCurveFloatMaps normalized DI [0..1] to an intensity multiplier. X=DI, Y=multiplier
TimeDilationBiasfloatReserved for future time-dilation integration
bSuppressParticlesboolSilences all ParticleEffect handlers
bSuppressAudioboolSilences all SoundEffect and ControllerRumble handlers
bSuppressCameraEffectsboolSilences CameraShake and CameraFOVPulse handlers
bSuppressPostProcessboolSilences ChromaticAberration, BloomPulse, DepthBlur, ColorGrade handlers
ForceMutedChannelsFGameplayTagContainerChannels silenced regardless of per-channel settings
MinQualityLevelERP_EImpactQualityLevelHandlers below this quality level are skipped

Setting the Active Profile

// Blueprint: Set Feel Profile node
// C++:
UERP_ImpactStatics::SetFeelProfile(this, MyFeelProfile);

// Clear the active profile (revert to defaults):
UERP_ImpactStatics::SetFeelProfile(this, nullptr);

Example Profiles

Cinematic (boss fight)

  • GlobalIntensityScale: 1.5
  • DramaticIntensityCurve: Exponential — DI amplifies intensity aggressively
  • All suppress flags: false

Menu / Pause

  • bSuppressAudio: true
  • bSuppressCameraEffects: true
  • bSuppressParticles: true
  • GlobalIntensityScale: 0.0

Performance / Low Quality

  • bSuppressParticles: true
  • bSuppressPostProcess: true
  • GlobalIntensityScale: 0.7

Dramatic Intensity

How It Works

Each PlayResponse call accumulates DI on the target actor:

NewDI = CurrentDI + (Context.Magnitude × Asset.DramaticContribution)

DI decays over time automatically in the subsystem tick. The decay is linear — DI returns to 0 when no responses are played.

Normalized DI [0..1] is evaluated against the Feel Profile’s DramaticIntensityCurve to produce an intensity multiplier applied to every subsequent response on that actor.

Default Behavior (No Feel Profile)

Without a Feel Profile, the default DI multiplier is:

Multiplier = 1.0 + NormalizedDI

At DI=0: 1× intensity. At DI=1: 2× intensity.

Designing a DI Curve

The DramaticIntensityCurve is a UCurveFloat:

  • X axis: Normalized DI [0..1]
  • Y axis: Intensity multiplier

Common shapes:

  • Linear (0→1 to 1→2): Gradual escalation
  • Ease-in (flat then steep): Starts neutral, explodes at high DI
  • S-curve: Gentle start and end, aggressive middle
  • Step (1.0 until 0.7, then 2.0): Binary dramatic boost

Querying DI

// Normalized [0..1]:
float DI = UERP_ImpactStatics::GetDramaticIntensity(this, TargetActor);

// Reset:
UERP_ImpactStatics::ResetDramaticIntensity(this, TargetActor);

From Blueprint: Get Dramatic Intensity and Reset Dramatic Intensity nodes.

Per-Asset DI Contribution

Asset.DramaticContribution controls how much a response contributes to DI:

  • 0.0 — no DI accumulation (decorative responses: footsteps, ambient effects)
  • 0.5 — moderate contribution (default)
  • 1.0 — full contribution (heavy hits, explosions)

Set it to 0.0 for responses you don’t want to affect the DI curve (e.g., footstep sounds, ambient particles).


Interaction with Channels

Feel Profile ForceMutedChannels silences channels regardless of per-channel state set via MuteChannel. Use this for global overrides (e.g., suppress all Audio.Impact during cutscenes via a Cinematic feel profile).


Next Steps

Configure grouping and routing in Channel System.

See all handler properties in Handler Reference.