Blueprint API
The Blueprint-exposed classes, functions, properties, delegates, structures and enumerations of Souls Destruction Framework, including intact physics and fall damage, taken from the shipped public headers.
Taken from the public headers of the SoulsDestructionRuntime module. Names match the code
exactly; Blueprint display names are shown where the code defines one. This page covers the main
gameplay surface; topic pages document the rest of their own area in detail (for example
projectile impacts and
runtime glass).
Editor authoring is not part of this API
The authoring services in SoulsDestructionEditor are C++ facades for the plugin’s own UI and
automation. They are not exposed as Blueprint nodes — and neither is the editor console command
SDF.MigrateToSimulatedPhysics.
USDFDestructibleComponent
UActorComponent, class group SoulsDestruction, Blueprint-spawnable. The primary entry point for
evaluating hits and dispatching destruction presentation.
Functions
| Function | Kind | Signature |
|---|---|---|
ApplyDestructionDamage | Callable | (FSDFDestructionHit Hit) -> FSDFDestructionResult |
GetDestructionState | Pure | () -> ESDFDestructionState |
GetDestructionProfile | Pure | () -> USDFDestructionProfile* |
GetCurrentHealth | Pure | () -> float |
GetCurrentDamageStageIndex | Pure | () -> int32 |
GetActiveImpactDecalCount | Pure | () -> int32 |
GetLastHitReactionRequest | Pure | () -> FSDFHitReactionRequest |
GetLastDamageStageChange | Pure | () -> FSDFDamageStageChange |
GetLastImpactDecalRequest | Pure | () -> FSDFDecalRequest |
GetLastLootRequest | Pure | () -> FSDFLootRequest |
GetLootRequestCount | Pure | () -> int32 |
ResetDestruction | Callable | () -> bool |
GetEffectivePhysicsMode | Pure | () -> ESDFIntactPhysicsMode |
SetPhysicsModeOverride | Callable | (ESDFIntactPhysicsOverride NewOverride) — applies the resulting mode immediately |
GetIntactPhysicsStatus | Pure | () -> ESDFIntactPhysicsStatus |
GetLastSupportWakeCount | Pure | () -> int32 |
GetLastFallHeightCm | Pure | () -> float — centimetres; zero before a damaging landing |
GetLastFallDamage | Pure | () -> float |
SetDestructionProfile | Callable | (USDFDestructionProfile* NewProfile) |
SetIntactComponent | Callable | (UPrimitiveComponent* NewIntactComponent) |
SetLootSpawnComponent | Callable | (USceneComponent* NewLootSpawnComponent) |
AddActorToReveal | Callable | (AActor* ActorToReveal) |
ClearActorsToReveal | Callable | () |
RequestAudioEvent | Callable | (ESDFAudioEvent Event, FVector Location, FVector ImpactDirection, float ImpactSpeed, ESDFDestructionPower DestructionPower, int32 RandomSeed) -> bool |
RequestVFXEvent | Callable | (ESDFVFXEvent Event, FVector Location, FVector ImpactNormal, FVector ImpactDirection, float ImpactSpeed, ESDFDestructionPower DestructionPower, int32 RandomSeed, FName CustomName) -> bool |
SelectWeightedSoundVariation | Pure, static | (TArray<FSDFWeightedSound> Variations, int32 RandomSeed, out float VolumeMultiplier, out float PitchMultiplier) -> int32 |
SelectWeightedVFXVariation | Pure, static | (TArray<FSDFWeightedNiagaraSystem> Variations, int32 RandomSeed, out FVector Scale, out FRotator Rotation, FVector ImpactNormal, FVector ImpactDirection) -> int32 |
SelectWeightedDecalVariation | Pure, static | (TArray<FSDFWeightedDecal> Variations, int32 RandomSeed, FVector ImpactNormal, out FRotator Rotation) -> int32 |
SelectWeightedLootEntry | Pure, static | (TArray<FSDFWeightedLootActor> Entries, int32 RandomSeed) -> int32 |
Properties
| Property | Access | Type |
|---|---|---|
DestructionProfile | Editable, read-only in Blueprint | USDFDestructionProfile* |
DestructionState | Read-only, instance-visible | ESDFDestructionState |
CurrentHealth | Read-only, instance-visible | float |
ActorsToReveal | Editable per instance | TArray<AActor*> |
PhysicsModeOverride | Editable, read-only in Blueprint — display name Intact Physics (Override) | ESDFIntactPhysicsOverride |
Events
| Delegate | Parameters |
|---|---|
OnDestructionDamageReceived | FSDFDestructionHit Hit, FSDFDestructionResult Result |
OnDestructionStateChanged | ESDFDestructionState PreviousState, ESDFDestructionState NewState |
OnDestructionStarted | FSDFDestructionHit Hit, FSDFDestructionResult Result |
OnDestroyed | FSDFDestructionHit Hit, FSDFDestructionResult Result |
OnDebrisSpawned | AActor* DebrisActor |
OnDestructionAudioRequested | FSDFDestructionAudioRequest Request |
OnDestructionVFXRequested | FSDFDestructionVFXRequest Request |
OnHitReactionRequested | FSDFHitReactionRequest Request |
OnDamageStageChanged | FSDFDamageStageChange Change |
OnImpactDecalRequested | FSDFDecalRequest Request |
OnLootRequested | FSDFLootRequest Request |
Usage
Event: weapon trace produced a hit
-> Make FSDFDestructionHit (Damage 25, Destruction Power Medium, Impact fields)
-> Target -> Get Component by Class (SDF Destructible)
-> Apply Destruction Damage
-> Break FSDFDestructionResult
Outcome -> switch for feedback
b Destruction Triggered -> award resources
b Used Fallback -> optional debug display
USDFDestructionProfile
UPrimaryDataAsset, Blueprint type. All properties are EditDefaultsOnly, BlueprintReadOnly and are
listed by group in
Destruction profiles, including
PhysicsMode, bEnableFallDamage, MinimumFallHeightCm, FallDamagePerMeter and
FallDestructionPower.
| Function | Kind | Signature |
|---|---|---|
ComputeFallDamage | Pure | (float DropHeightCm) -> float — max(0, (DropHeightCm - MinimumFallHeightCm) / 100 * FallDamagePerMeter), or 0 while fall damage is off |
USDFDestructionSubsystem
UWorldSubsystem. Retrieve it with Get World Subsystem and the SDF Destruction Subsystem
class.
| Function | Kind | Signature |
|---|---|---|
ConfigureBudgetLimits | Callable | (FSDFDestructionBudgetLimits NewLimits) |
GetBudgetLimits | Pure | () -> FSDFDestructionBudgetLimits |
GetBudgetStats | Pure | () -> FSDFDestructionBudgetStats |
ResetBudgetStatistics | Callable | () |
GetActiveDebrisCount | Pure | () -> int32 |
ApplyRadialDestruction | Callable, display name Apply SDF Radial Destruction | (FSDFRadialDestructionRequest Request) -> FSDFRadialDestructionResult |
CalculateRadialFalloffMultiplier | Pure, static | (float Distance, float Radius, ESDFRadialFalloff Falloff, float MinimumFalloffMultiplier) -> float |
CalculateRadialTargetSeed | Pure, static | (int32 AggregateSeed, int32 StableTargetIndex) -> int32 |
CalculatePropagationSeed | Pure, static | (int32 ParentSeed, uint8 SourceDepth, AActor* SourceActor) -> int32 |
GetLastPropagationChainResult | Pure | () -> FSDFPropagationChainResult |
GetAudioStats | Pure | () -> FSDFDestructionAudioStats |
GetLastAudioRequest | Pure | () -> FSDFDestructionAudioRequest |
ResetAudioStatistics | Callable | () |
GetVFXStats | Pure | () -> FSDFDestructionVFXStats |
GetLastVFXRequest | Pure | () -> FSDFDestructionVFXRequest |
ResetVFXStatistics | Callable | () |
| Delegate | Parameters |
|---|---|
OnPropagationChainCompleted | FSDFPropagationChainResult Result |
OnDestructionAudioRequested | FSDFDestructionAudioRequest Request |
OnDestructionVFXRequested | FSDFDestructionVFXRequest Request |
USDFMeleeHitSenderComponent
| Function | Kind | Signature |
|---|---|---|
BeginMeleeSwing | Callable, Begin SDF Melee Swing | (int32 RequestedSwingId = -1) -> int32 |
EndMeleeSwing | Callable, End SDF Melee Swing | () |
SendMeleeHit | Callable, Send SDF Melee Hit | (AActor* TargetActor, FHitResult HitResult, FVector AttackDirection, AController* InstigatorController, AActor* DamageCauser, UObject* Weapon, int32 RandomSeed = -1) -> FSDFMeleeDeliveryResult |
IsMeleeSwingActive | Pure | () -> bool |
GetActiveSwingId | Pure | () -> int32 |
Property HitSettings (FSDFMeleeHitSettings), delegate OnMeleeHitDelivered
(FSDFMeleeDeliveryResult).
USDFCollisionHitSenderComponent
| Function | Kind | Signature |
|---|---|---|
BeginCollisionWindow | Callable, Begin SDF Collision Window | (int32 RequestedWindowId = -1) -> int32 |
EndCollisionWindow | Callable, End SDF Collision Window | () |
SendCollisionHit | Callable, Send SDF Collision Hit | (AActor* TargetActor, FHitResult HitResult, FVector SourceVelocity, float Damage, ESDFDestructionPower DestructionPower, AController* InstigatorController, AActor* DamageCauser, UObject* SourceObject, int32 RandomSeed = -1) -> FSDFCollisionDeliveryResult |
IsCollisionWindowActive | Pure | () -> bool |
GetActiveCollisionWindowId | Pure | () -> int32 |
Property HitSettings (FSDFCollisionHitSettings), delegate OnCollisionHitDelivered
(FSDFCollisionDeliveryResult).
USDFProjectileHitSenderComponent
| Function | Kind | Signature |
|---|---|---|
SendProjectileHit | Callable, Send SDF Projectile Hit | (AActor* TargetActor, FHitResult HitResult, FVector ProjectileVelocity, AController* InstigatorController, AActor* DamageCauser, UObject* ProjectileObject, int32 RandomSeed = -1) -> FSDFProjectileDeliveryResult |
ResetProjectileImpacts | Callable, Reset SDF Projectile Impacts | () |
SetProjectileProfile | Callable | (USDFProjectileHitProfile* NewProfile) |
GetProjectileProfile | Pure | () -> USDFProjectileHitProfile* |
Property ProjectileProfile (USDFProjectileHitProfile*), delegate OnProjectileHitDelivered
(FSDFProjectileDeliveryResult).
USDFProjectileHitProfile
UPrimaryDataAsset. Properties: Damage, DestructionPower, ImpulseStrength,
ImpulsePerSpeedUnit, MaximumImpulseStrength, DamageType, GameplayTags,
bSuppressRepeatedActors.
ASDFDestructibleActor
Blueprintable convenience Actor implementing ISDFDestructibleInterface.
| Function | Kind | Returns |
|---|---|---|
GetDestructibleComponent | Pure | USDFDestructibleComponent* |
GetIntactMeshComponent | Pure | UStaticMeshComponent* |
GetLootSpawnPoint | Pure | USceneComponent* |
Components: SceneRoot, IntactMeshComponent, LootSpawnPoint, DestructibleComponent.
When its effective physics mode is Simulated, this Actor re-roots itself at BeginPlay — the intact
mesh becomes the root, world transforms are kept — in the running world only. The Blueprint asset is
not modified.
ASDFPhysicsDestructibleActor
Blueprintable subclass of ASDFDestructibleActor, used as the parent of new Simulated
generations. The intact Static Mesh is the Actor’s root and its own collider; the mesh does not
simulate in the editor, and the destruction profile turns simulation on at BeginPlay. It exposes the
same functions as ASDFDestructibleActor. See
Intact physics and fall damage.
ASDFGlassCompositeActor
The frame-plus-panes Actor published by the Glass authoring path for multi-material sources. All accessors are pure:
| Function | Kind | Returns |
|---|---|---|
GetPanelCount | Pure | int32 |
GetPanelComponent | Pure | UStaticMeshComponent* (by pane index) |
GetPanelDestructible | Pure | USDFDestructibleComponent* (by pane index) |
GetFrameComponent | Pure | UStaticMeshComponent* — the unbreakable frame |
Read-only properties: FrameMesh, PanelMeshes, PanelProfile. See
Runtime glass fracture.
ISDFDestructibleInterface
Blueprint-implementable interface. All four are BlueprintNativeEvent and BlueprintCallable:
| Function | Signature |
|---|---|
CanReceiveDestructionHit | (FSDFDestructionHit Hit) const -> bool |
ReceiveDestructionHit | (FSDFDestructionHit Hit) -> FSDFDestructionResult |
CanDestroyFromHit | (FSDFDestructionHit Hit) const -> bool |
GetDestructionState | () const -> ESDFDestructionState |
Enumerations
| Enum | Values |
|---|---|
ESDFDestructionState | Intact, Damaged, Breaking, Destroyed, CleaningUp, Disabled |
ESDFDestructionPower | None (0), VeryLight (1), Light (2), Medium (3), Heavy (4), Massive (5) |
ESDFDestructionMode | None, SwapAndScatter, GeometryCollection, Glass |
ESDFDestructionOutcome | Ignored, Rejected, Reacted, Damaged, Destroyed, AlreadyDestroyed, Disabled, InvalidConfiguration |
ESDFAudioEvent | LightImpact, HeavyImpact, Break, DebrisImpact |
ESDFVFXEvent | LightImpact, HeavyImpact, Break, DebrisImpact, Custom |
ESDFRadialFalloff | Constant, Linear |
ESDFLootMode | Disabled, ExternalOnly, SpawnLoot, RevealExistingActor |
ESDFIntactPhysicsMode | KeepExisting (display Keep Existing), Static, Simulated |
ESDFIntactPhysicsOverride | UseProfile, ForceStatic, ForceSimulated |
ESDFIntactPhysicsStatus | NotApplied, KeptExisting, AppliedStatic, AppliedSimulated, RefusedNoIntact, RefusedIntactNotRoot, RefusedMultipleDestructibles, RefusedNoSimpleCollision, RefusedComplexAsSimple, RefusedByPhysicsEngine |
A landing that deals fall damage carries the native gameplay tag SDF.Source.Collision.Fall on its
FSDFDestructionHit.
Structures
| Structure | Purpose |
|---|---|
FSDFDestructionHit | The hit payload sent to a destructible |
FSDFDestructionResult | The explicit answer returned by a destructible |
FSDFDebrisEntry | One bounded debris definition |
FSDFGlassFractureSettings | Runtime glass crack pattern, shard physics and cleanup |
FSDFDestructionBudgetLimits | World-level presentation limits |
FSDFDestructionBudgetStats | Read-only budget diagnostics |
FSDFMeleeHitSettings / FSDFMeleeDeliveryResult | Melee sender configuration and result |
FSDFCollisionHitSettings / FSDFCollisionDeliveryResult | Collision sender configuration and result |
FSDFProjectileDeliveryResult | Projectile sender result |
FSDFRadialDestructionRequest / FSDFRadialTargetResult / FSDFRadialDestructionResult | Radial destruction |
FSDFPropagationHitResult / FSDFPropagationChainResult | Chain propagation diagnostics |
FSDFWeightedSound / FSDFDestructionAudioRequest / FSDFDestructionAudioStats | Audio |
FSDFWeightedNiagaraSystem / FSDFDestructionVFXRequest / FSDFDestructionVFXStats | VFX |
FSDFHitReactionRequest | Non-breaking reaction request |
FSDFDamageStage / FSDFDamageStageChange | Damage stages |
FSDFWeightedDecal / FSDFDecalRequest | Impact decals |
FSDFWeightedLootActor / FSDFLootRequest | Loot |
Field-by-field descriptions are on the topic pages: the hit payload in Destruction hit, presentation payloads in Audio and Niagara / VFX, radial in Radial destruction.
Last updated: 2026-09-15