INSODIMENSIONStudios
FeedbackFXReference

Events Reference

All FeedbackFX event types - Shake, HitStop, PostProcess, Audio, Haptics

Events Reference

Events are the effects that play when a tag is triggered.


Camera Shake

Class: UAgenticFeedbackFXEvent_Shake

Plays a camera shake via PlayerCameraManager.

PropertyTypeDefaultDescription
ShakeClassUCameraShakeBase*-Camera shake asset to play
bScaleByMagnitudebooltrueScale intensity by context magnitude
MinScalefloat0.2Minimum scale when magnitude=0
MaxScalefloat1.0Maximum scale when magnitude=1
PlaySpaceECameraShakePlaySpaceCameraLocalShake coordinate space
bCancelPreviousShakesboolfalseStop existing shakes first

Usage Tips

  • Set MinScale > 0 so even small hits feel impactful
  • Use PlaySpace = World for directional shakes based on WorldLocation
  • Enable bCancelPreviousShakes for exclusive shake effects

Hit Stop

Class: UAgenticFeedbackFXEvent_HitStop

Freezes or slows time for impact emphasis.

PropertyTypeDefaultDescription
ModeEHitStopModeFixedFixed (freeze) or Curve (gradual recovery)
TargetEHitStopTargetLocalVisualWhat to slow (see Target Modes)
Durationfloat0.1Effect duration in seconds
bScaleDurationByMagnitudeboolfalseScale duration by magnitude
MinTimeDilationfloat0.0Minimum time dilation (0 = complete freeze)
CurveTypeEHitStopCurveSharpRecovery curve shape

Curve Types

CurveBehavior
SharpQuick freeze, fast recovery
SmoothGradual slowdown and recovery
EaseOutHold freeze, then ease out
BounceSmall bounce before full recovery
DelayedSnapHold freeze, then snap to normal
CustomUse CustomRecoveryCurve asset

Target Modes

TargetMP SafeEffect
LocalVisualYesRecommended - Applies to locally controlled actors only
GlobalNoSlows entire world - Single-player only!
SourceYesSlows attacker (if locally controlled)
TargetYesSlows victim (if locally controlled)
BothYesSlows attacker and victim (if locally controlled)

Note: LocalVisual mode automatically uses the controlled pawn when no SourceActor or TargetActor is provided in the context.

Multiplayer Behavior

In multiplayer, hit stop is a local visual effect - each player experiences their own hit stops:

  • When YOU land a hit → Your screen freezes briefly
  • When YOU get hit → Your screen freezes briefly
  • Other players → See normal speed gameplay (no desync)

Post Process (Temporary)

Class: UAgenticFeedbackFXEvent_PostProcess

Applies a temporary post-process material effect that auto-fades.

PropertyTypeDefaultDescription
MaterialUMaterialInterface*-Post-process material to apply
Durationfloat0.5Effect duration in seconds
MaxWeightfloat1.0Maximum blend weight
CurvePresetEPostProcessCurveSharpImpactWeight curve shape
ScalarParametersTMap-Scalar parameter mapping
VectorParametersTMap-Vector parameter mapping
ColorParametersTMap-Color parameter mapping

Curve Presets

PresetBehaviorUse Case
SharpImpactQuick spike, fast fadeHit feedback
BloodSplatterInstant on, slow fadeBlood/damage overlay
ScreenFlashVery quick flashCritical hits, explosions
SmoothPulseSmooth in/outAbility activation
LingeringEffectQuick in, slow fadePoison, burning
CustomUse CustomCurve assetFull control over timing

Parameter Sources

FAgenticFXScalarParam allows flexible mapping of material parameters:

SourceDescription
FixedUse a constant value directly
MagnitudeUse Context.Magnitude * Multiplier
ContextValueUse Context.Values[SourceName] * Multiplier

C++ Examples:

// Fixed value
ScalarParameters.Add("Radius", FAgenticFXScalarParam(50.0f));

// From magnitude
ScalarParameters.Add("Intensity", FAgenticFXScalarParam::FromMagnitude(1.0f));

// From named context value
ScalarParameters.Add("Direction", FAgenticFXScalarParam::FromContextValue("HitAngle", 0.01f));

Post Process (Persistent)

Class: UAgenticFeedbackFXEvent_PostProcessPersistent

Applies a persistent post-process effect that stays until removed.

PropertyTypeDefaultDescription
MaterialUMaterialInterface*-Post-process material to apply
MaxWeightfloat1.0Maximum blend weight
FadeInTimefloat0.5Fade-in duration
FadeOutTimefloat0.5Fade-out duration when removed
bScaleWeightByMagnitudeboolfalseScale weight by magnitude
MinWeightfloat0.2Weight at magnitude 0
bEnableCurveLoopboolfalseEnable pulsing animation
LoopDurationfloat1.5Duration of one pulse cycle

Weight Scaling by Magnitude

When bScaleWeightByMagnitude = true, the effect intensity scales with context magnitude:

At 20% health -> magnitude = 0.2 -> subtle vignette
At 5% health  -> magnitude = 0.8 -> strong vignette

This works with the Attribute trigger's bMagnitudeFromAttribute option.

Usage Tips

  • For low health: Use with Attribute trigger, enable bScaleWeightByMagnitude
  • For poison: Enable bEnableCurveLoop with SmoothPulse curve
  • Remove with RemovePostProcessByTag(EventTag)

Audio

Class: UAgenticFeedbackFXEvent_Audio

Plays a sound effect with optional volume/pitch scaling.

PropertyTypeDefaultDescription
SoundUSoundBase*-Sound asset to play
bPlay2DbooltruePlay as 2D (UI) or 3D (world) sound
VolumeMultiplierfloat1.0Base volume multiplier
PitchMultiplierfloat1.0Base pitch multiplier
PitchVariationfloat0.0Random pitch variation (±value)
bScaleVolumeByMagnitudeboolfalseScale volume by context magnitude
MinVolumefloat0.3Volume at magnitude 0
MaxVolumefloat1.0Volume at magnitude 1
AttenuationSettingsUSoundAttenuation*-Attenuation for 3D sounds

Usage Tips

  • Enable bScaleVolumeByMagnitude for damage sounds that scale with hit severity
  • Add PitchVariation (0.05-0.1) to avoid repetitive sounds
  • Use bPlay2D = false with AttenuationSettings for spatial audio

Haptics

Class: UAgenticFeedbackFXEvent_Haptics

Triggers controller haptics/rumble feedback.

PropertyTypeDefaultDescription
bUseForceFeedbackEffectboolfalseUse asset vs direct intensity
ForceFeedbackEffectUForceFeedbackEffect*-Force feedback asset
LargeMotorIntensityfloat0.5Large motor intensity (0-1)
SmallMotorIntensityfloat0.25Small motor intensity (0-1)
Durationfloat0.2Rumble duration in seconds
bScaleByMagnitudebooltrueScale intensity by magnitude
bLoopingboolfalseLoop the effect (asset only)
TagFNameNoneIdentifier for stopping later

Usage Tips

  • Use bUseForceFeedbackEffect for complex multi-channel patterns
  • Large motor = deep rumble, Small motor = high-frequency buzz
  • Light hits: LargeMotor = 0.3, SmallMotor = 0.2, Duration = 0.1
  • Heavy hits: LargeMotor = 0.8, SmallMotor = 0.6, Duration = 0.25

Impact Frame

Class: UAgenticFeedbackFXEvent_ImpactFrame

Creates impact emphasis via screen flash or world VFX.

PropertyTypeDefaultDescription
ModeEImpactFrameModeScreenFlashScreen flash or Niagara VFX

Screen Flash Mode

Full-screen color overlay (fighting game style).

PropertyTypeDefaultDescription
FlashColorFLinearColorWhiteColor of the flash
FrameCountint321Duration in frames (1-10)
Opacityfloat1.0Base opacity (0-1)
bScaleOpacityByMagnitudeboolfalseScale opacity by magnitude

Niagara Mode

Spawn particle VFX at Context.ImpactTransform.

PropertyTypeDefaultDescription
NiagaraSystemUNiagaraSystem*-Niagara system to spawn
bAutoDestroybooltrueAuto-destroy when finished
FloatParametersTMap-Float params (fixed, magnitude, or context value)
VectorParametersTMap-Vector params (world location, impact direction, etc.)
ColorParametersTMap-Color params (fixed or context value)

Vector Parameter Sources

SourceDescription
FixedUse a constant vector directly
WorldLocationUse Context.WorldLocation * Scale
ImpactLocationUse Context.ImpactTransform.GetLocation() * Scale
ImpactDirectionUse Context.ImpactTransform forward direction
DirectionToSourceUse direction from target to source actor
ContextValueUse Context.VectorValues[SourceName] * Scale

Passing ImpactTransform

FAgenticFeedbackFXContext Context;
Context.Magnitude = 1.0f;

// From HitResult
Context.ImpactTransform = FTransform(
    HitResult.ImpactNormal.Rotation(),
    HitResult.ImpactPoint
);

// From socket
Context.ImpactTransform = Mesh->GetSocketTransform("WeaponTip");

Feedback->TriggerFeedbackEvent(Tag, Context);

Usage Tips

  • Screen flash: Use 1-2 frames for snappy hits, 3+ for dramatic impacts
  • Niagara: Use FloatParameters with Source: Magnitude for damage-scaled VFX
  • Niagara: Use VectorParameters with Source: ImpactDirection for directional VFX
  • Combine with HitStop for maximum impact feel

Creating Custom Events

UCLASS(BlueprintType, meta = (DisplayName = "My Custom Effect"))
class UAgenticFeedbackFXEvent_MyEffect : public UAgenticFeedbackFXEvent
{
    GENERATED_BODY()

public:
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    float MyParameter = 1.0f;

    virtual void ExecuteEvent_Implementation(
        UAgenticFeedbackFXComponent* Component,
        const FAgenticFeedbackFXContext& Context) override
    {
        float ScaledValue = MyParameter * Context.Magnitude;
        // Your effect logic here
    }
};

Register in your config and trigger like any other event.