API Reference

Assets

TypeBasePurpose
UCrimsonHitProfileUDataAssetPreset, dedup policy, target limits, query rate, cue tag
UTargetingPresetUDataAsset (TargetingSystem module)Holds the selection, filter and sort tasks
UCrimsonHitZonePhysicalMaterialUPhysicalMaterialNames a hit zone on a physics-asset body

UCrimsonHitProfile properties

PropertyTypeDefaultMeaning
TargetingPresetUTargetingPreset*noneSelection, filtering and sorting. All geometry lives here
DedupPolicyECrimsonHitDedupPolicyOncePerWindowHow often one actor may be reported by a window
DedupIntervalfloat0.25Seconds before re-eligibility. OncePerInterval only
MaxTargetsPerWindowint320Distinct actors one window may report. 0 is unlimited
MaxTargetsPerQueryint320Actors one query may report. Hidden under OncePerWindow
QueryHzfloat0Queries per second. 0 queries every tick
ImpactCueTagFGameplayTagnonePassed through in the report and the cosmetic batch. Never executed
bResolveHitZonesbooltrueResolve a zone tag per impact
bAlwaysDrawDebugboolfalseDraw this profile even with the console variable off

UCrimsonHitDetectionComponent

MemberKindNotes
FindHitDetectionComponentStatic functionFinds the component on an actor
OpenHitWindowFunctionServer only. Returns an invalid handle on clients
CloseHitWindowFunctionSafe to call for an already-closed handle
CloseAllHitWindowsFunctionCalled automatically on EndPlay
IsHitWindowOpenFunctionPure
GetOpenHitWindowCountFunctionPure
ExecuteHitQueryFunctionOne-shot query. Server only
SetActiveWeaponActorFunctionWeapon used by windows that do not name one
GetActiveWeaponActorFunctionPure
SetActiveSweepMeshFunctionSweep mesh used by windows that do not name a weapon, for weapons that are components rather than actors
GetActiveSweepMeshFunctionPure
ResolveActiveWeaponNative EventOverride in a C++ or Blueprint subclass to answer which weapon is held. Defaults to the two setters above
SetShapeScale / GetShapeScaleFunctionPersistent uniform size multiplier for every window this actor opens
OpenKeyedHitWindowC++ onlyFor callers that cannot hold a handle, such as an animation notify
CloseKeyedHitWindowC++ onlyCounterpart to the above
OnHitTargetsResolvedDelegateServer only. One broadcast per query with new targets
OnHitImpactCosmeticDelegateAll machines. Cosmetic only
OnHitWindowStateChangedDelegateServer only. Fires on open and on close

Structs and enums

TypeFieldsNotes
FCrimsonHitReportWindow, Profile, Instigator, WeaponActor, ContextTag, ImpactCueTag, Impacts, TargetDataThe server-side result. TargetData is never replicated
FCrimsonHitImpactHitActor, ImpactPoint, ImpactNormal, BoneName, ZoneTagOverlap results carry no bone, normal or zone
FCrimsonHitImpactBatchInstigator, ImpactCueTag, ContextTag, ImpactsThe cosmetic payload. Capped by MaxReplicatedImpactsPerBatch
FCrimsonHitWindowParamsWeaponActor, SweepMeshOverride, ContextTag, ExtraIgnoredActors, FacingOverride, MaxDuration, ShapeScale, PresetInstanceAll optional. ShapeScale multiplies with the component's. PresetInstance is how the nodes hand over the preset copy they wrote their pins onto; leave it unset and the component makes its own
FCrimsonActiveWeaponWeaponActor, SweepMeshWhat ResolveActiveWeapon returns. Both optional: WeaponActor feeds the ignore list and the report, SweepMesh supplies the sockets. A null SweepMesh means the mesh is searched for on WeaponActor
FCrimsonProjectileLaunchParamsVelocity, HomingTarget, LifetimeOverride, MaxRangeOne shot's launch. LifetimeOverride also bounds the hit window; MaxRange is a straight-line cutoff, 0 for unlimited
FCrimsonHitWindowHandleHandleServer-side only, never replicated
ECrimsonHitDedupPolicyOncePerWindow, OncePerInterval, EveryTick
ECrimsonHitTraceShapeLine, Sphere, Capsule, BoxCrimson Selection: Trace. Line is the only one Shape Scale cannot widen - it has no cross-section
ECrimsonHitTraceDirectionControlRotation, MouseToWorldProjection, CustomMouseToWorldProjection falls back to ControlRotation wherever there is no local cursor, which includes the server
ECrimsonHitTraceQueryModeObjectTypes, TraceChannel, CollisionProfileCrimson Selection: Trace. One explicit choice rather than a profile name that has to be left at NoCollision to fall through

Targeting tasks shipped by this plugin

Display nameClassRole
Crimson Selection: Socket SweepUCrimsonHitSelectionTask_SocketSweepMulti-socket swept capsules along a weapon
Crimson Selection: Actor SweepUCrimsonHitSelectionTask_ActorSweepSweeps the path the source actor travelled
Crimson Selection: AreaUCrimsonHitSelectionTask_AreaSphere, box or capsule overlap with every dimension resizable per request
Crimson Selection: TraceUCrimsonHitSelectionTask_TraceLine, sphere, capsule or box trace with a selectable direction. Synchronous or asynchronous, decided by the request. Blueprintable
Crimson Filter: AffiliationUCrimsonHitFilterTask_AffiliationHostile / neutral / friendly / self
Crimson Filter: Actor ClassUCrimsonHitFilterTask_ActorClassTarget must be (or, inverted, must not be) one of a list of classes. For projects with no team system
Crimson Filter: Require Ability SystemUCrimsonHitFilterTask_RequireAbilitySystemTarget must have an ASC
Crimson Filter: Target Tag QueryUCrimsonHitFilterTask_TargetTagQueryTarget ASC tags must satisfy a query
Crimson Filter: AngleUCrimsonHitFilterTask_AngleArc measured from the window's facing
Crimson Filter: Line Of SightUCrimsonHitFilterTask_LineOfSightVisibility trace from the attacker
Crimson Filter: Require HurtboxUCrimsonHitFilterTask_RequireHurtboxTarget must declare hit zones
Crimson Filter: Max DistanceUCrimsonHitFilterTask_MaxDistanceRange limit independent of the shape
Crimson Sort: AngleUCrimsonHitSortTask_AngleMost-centered-on-the-attack first
Tasks from the Targeting System module
AOE, Trace, Source Actor, Actor Class and Sort By Distance are Epic's, defined in the Gameplay Targeting System plugin. They compose freely with the Crimson tasks above.

Ability tasks and notifies

NodeClassPins
Crimson Hit WindowUCrimsonAbilityTask_HitWindowOn Targets Hit (server), On Window Closed (all machines)
Crimson Hit QueryUCrimsonAbilityTask_HitQueryOn Targets Hit (server only). Arms Profile under Context Tag for the montage's notifies to fire; runs no query itself. Cancel Query stops it early
Crimson Launch ProjectileUCrimsonAbilityTask_LaunchProjectileTakes a Launch Params struct and an On Impact handler. Apply damage from On Impact, which outlives the ability; On Projectile Hit only fires while the task is alive
Crimson Hit Window (Notify)UAnimNotifyState_CrimsonHitWindowContext Tag, Sweep Owner Mesh. Timing only - it fires whatever the ability armed under that tag. No output pins; the Crimson Hit Query node relays the hits
Crimson Hit Query (Notify)UAnimNotify_CrimsonHitQueryContext Tag. Fires the armed profile once, on a single frame. Warns on screen and in the log if that profile uses a socket sweep, which a single frame can never resolve

ACrimsonProjectile

MemberKindNotes
ImpactProfilePropertyUse a preset built on Actor Sweep
MaxPiercesProperty0 stops at the first target; -1 (default) is unlimited
MaxLifetimePropertyAlways set a finite value
bStopOnWorldBlockPropertyStop at walls
LaunchProjectileFunctionServer only. Takes FCrimsonProjectileLaunchParams. The single activation entry point
OnAcquiredFromPoolICrimsonPoolableCalled by the pool. Marks the instance pool-owned and repositions it
OnReleasedToPoolICrimsonPoolableCalled by the pool. A no-op here - expiry already stood the projectile down
GetPoolReleaseDelegateICrimsonPoolable, C++ onlyThe pool binds this to reclaim the instance automatically
AcquireFromPoolFunctionServer only. Repositions a dormant instance. OnAcquiredFromPool calls it for you
SetPoolOwnedFunctionDeactivate instead of destroy on expiry. OnAcquiredFromPool sets it for you
IsPoolOwned, IsProjectileActive, GetRemainingPiercesFunctionsPure
OnProjectileHitDelegateServer only, per impact
OnProjectileExpiredDelegateServer only, on stop
OnProjectileReleasedDelegateServer only, pool-owned instances only
OnImpact, OnExpiredBlueprintNativeEventOverride points for subclass behaviour

Hit zones

MemberKindNotes
UCrimsonHitZonePhysicalMaterial::ZoneTagPropertyThe zone a body using this material reports
UCrimsonHurtboxComponent::BoneZonesPropertyBone to zone. Lookup walks up parents
UCrimsonHurtboxComponent::DefaultZoneTagPropertyReported when nothing matches
UCrimsonHurtboxComponent::MeshComponentTagPropertyWhich mesh's skeleton the parent walk uses
UCrimsonHurtboxComponent::ResolveZoneForBoneFunctionPure
UCrimsonHitZoneLibrary::ResolveHitZoneTagStatic functionPhysical material first, hurtbox second

Project settings

SettingDefaultMeaning
DefaultSubstepOverlapFactor0.75Sub-step advance as a fraction of the shape radius
MaxSubstepsPerQuery8Ceiling on sub-steps per shape per query
TeleportDistanceThreshold1000Travel beyond this is treated as a teleport and skipped
DefaultMaxWindowDuration5Safety auto-close for a window nothing else closes
bForceBoneRefreshDuringHitWindowstrueHolds the attacker's mesh at AlwaysTickPoseAndRefreshBones while any window is open, then restores it. Without it, a mesh the server is not rendering reports every socket at its reference pose
bWarnOnUnsafeAnimTickOptiontrueWarn once per actor when a mesh will not refresh its bones off-screen. Ignored while bForceBoneRefreshDuringHitWindows is on, which already fixes it
MaxReplicatedImpactsPerBatch8Cosmetic multicast cap. The server report is never truncated
bAllowDebugDrawingtrueMaster switch for all debug drawing
DebugDrawDuration2Seconds debug shapes persist

Console variables

VariableMeaning
Crimson.HitDetection.DebugDraw swept volumes and resolved impacts for every profile
Crimson.HitDetection.DrawDurationOverride how long shapes persist. Negative uses the project setting
showdebug TargetingSystemEpic's own view. Shows which filter task rejected a candidate

Shipped collision profiles and tags

NameKindPurpose
CrimsonHitboxCollision profileQuery-only hurtbox geometry, invisible to camera and visibility traces
CrimsonWeaponSweepCollision profileA weapon's swept query. Blocks nothing
CrimsonHitDetection.Zone.*Gameplay tagsBody, Head, Limb, Weakpoint, Armoured
CrimsonHitDetection.Context.*Gameplay tagsLight, Heavy, Projectile, AreaOfEffect
CrimsonHitDetection.Impact.*Gameplay tagsFlesh, Metal, Blocked