CrimsonHitDetection
Gameplay Ability System projects only
Every hit is reported as a
FGameplayAbilityTargetDataHandle, and the window drivers are UAbilityTask nodes. There is no non-GAS path. If your project does not use GAS, this plugin is not usable as-is.Built on the Gameplay Targeting System
All geometry and target filtering is authored as a
You do not need to enable it yourself. It is declared as a dependency in
UTargetingPreset, which lives in Epic's Gameplay Targeting System plugin (TargetingSystem).You do not need to enable it yourself. It is declared as a dependency in
CrimsonHitDetection.uplugin, so enabling this plugin enables it too - even though it ships disabled by default. It will show as enabled in Edit -> Plugins without you having ticked it.CrimsonHitDetection answers one question: given a shape, a moment in time, and a filter policy, which actors were hit? It answers it identically for a sword swing, a shockwave, a hitscan shot and a projectile, so an attack is authored once as a data asset instead of hand-rolling a swept trace, an already-hit set, team filtering and authority gating in every ability.
It reports; it does not apply. The plugin never builds or applies a UGameplayEffect, so your ability keeps full control of effect construction and anything hooked onto it.
What's included
| System | Key types | Purpose |
|---|---|---|
| Profiles | UCrimsonHitProfile | The reusable asset: preset, dedup policy, target limits, query rate |
| Runtime | UCrimsonHitDetectionComponent | Opens and closes hit windows, runs queries, reports results |
| Selection | UCrimsonHitSelectionTask_SocketSweep, UCrimsonHitSelectionTask_ActorSweep, UCrimsonHitSelectionTask_Area, UCrimsonHitSelectionTask_Trace | Swept geometry the Targeting System does not ship, plus resizable area and trace shapes |
| Filtering | UCrimsonHitFilterTask_Affiliation, _ActorClass, _Angle, _LineOfSight, _TargetTagQuery, _MaxDistance, _RequireAbilitySystem, _RequireHurtbox | Composable rules for who counts as a valid target |
| Drivers | UCrimsonAbilityTask_HitWindow, UCrimsonAbilityTask_HitQuery, UAnimNotifyState_CrimsonHitWindow, UAnimNotify_CrimsonHitQuery | Ability-driven and animation-driven active frames |
| Projectiles | ACrimsonProjectile, UCrimsonAbilityTask_LaunchProjectile | Replicated, pool-ready projectiles driven by the same profiles |
| Hit zones | UCrimsonHitZonePhysicalMaterial, UCrimsonHurtboxComponent | Naming head shots and weak points, with no damage maths |
| Examples | /CrimsonHitDetection/Examples/ | Worked presets, profiles and a projectile Blueprint to duplicate |
Shipped examples
Tick Settings -> Show Plugin Content to see
Only the melee preset needs editing: its socket names cannot be guessed for your weapon.
/CrimsonHitDetection/Examples/:TP_CrimsonMeleeSweep, TP_CrimsonAreaSphere, TP_CrimsonHitscan, TP_CrimsonProjectileSweep - one preset per attack shape.DA_CrimsonHitProfile_Melee, _Area, _Projectile - profiles wired to those presets.BP_CrimsonProjectile_Example - a projectile ready to fire once you add a mesh.Only the melee preset needs editing: its socket names cannot be guessed for your weapon.
Plugin dependencies
| Group | Name | Why |
|---|---|---|
| Crimson plugins | None | Fully standalone |
| Engine plugins | GameplayAbilities | Target data output, UAbilityTask bases |
| Engine plugins | TargetingSystem | UTargetingPreset, UTargetingTask, UTargetingSubsystem |
| Engine modules | GameplayTasks | UGameplayTask base under UAbilityTask |
| Engine modules | GameplayTags | Hit zones, context tags, impact cue tags |
| Engine modules | DeveloperSettings | UCrimsonHitDetectionSettings |
| Engine modules | PhysicsCore | UPhysicalMaterial subclassing for hit zones |
| Engine modules | AIModule | FGenericTeamId::GetAttitude for the affiliation filter |
| Engine modules | NetCore | Quantized impact serialization for the cosmetic multicast |
| Engine modules | Projects | Registering the plugin's Config/Tags search path |
No team-system dependency
Affiliation filtering goes through the engine's
Read How-To: Filter By Team before shipping. Unresolved team data reads as Neutral, and the filter allows Neutral by default, so the failure mode is hitting your own allies rather than an error.
IGenericTeamAgentInterface, so it works with any team system that implements it - including any tag-based team interface that derives from it - without this plugin depending on one.Read How-To: Filter By Team before shipping. Unresolved team data reads as Neutral, and the filter allows Neutral by default, so the failure mode is hitting your own allies rather than an error.
Which path do I choose?
Start here
Building a melee attack? Follow Quick Start - it walks a swung weapon end to end.
Area attack, shockwave or hitscan? Quick Start first, then How-To: Area Attacks and Hitscan.
Projectiles? How-To: Projectiles.
Head shots and weak points? How-To: Hit Zones.
Ranks, modifiers or buffs that change an attack's size or reach? How-To: Vary An Attack's Values.
Attacks hitting your own side, or no team system wired up yet? How-To: Filter By Team - read it before shipping.
Want the model behind hit windows and dedup before writing anything? Concept: Windows, Shapes and Filters.
Area attack, shockwave or hitscan? Quick Start first, then How-To: Area Attacks and Hitscan.
Projectiles? How-To: Projectiles.
Head shots and weak points? How-To: Hit Zones.
Ranks, modifiers or buffs that change an attack's size or reach? How-To: Vary An Attack's Values.
Attacks hitting your own side, or no team system wired up yet? How-To: Filter By Team - read it before shipping.
Want the model behind hit windows and dedup before writing anything? Concept: Windows, Shapes and Filters.
Using with other Crimson plugins
CrimsonHitDetection works on its own. When you own other Crimson plugins, CrimsonCore (free to download, but compiles only with all Crimson plugins installed) contains the full-suite wiring for it in
Source/CrimsonCore/.../Integration/ObjectPool/: UCrimsonCoreProjectilePoolingSubsystem makes ACrimsonProjectile poolable, and UCrimsonAbilityTask_LaunchPooledProjectile launches pooled projectiles from an ability. To wire it yourself, read CrimsonCommon -> Concept: Connecting Crimson Plugins; to see how CrimsonCore does it, read CrimsonCore -> Concept: The Integration Layer.