CrimsonHitDetectionComing to FabPersonal $9.99 · Professional $19.99
Join the Discord for updates

Data-driven combat hit detection for melee swings, area attacks, hitscan and projectiles — one profile asset, every attack shape, GAS target data out.

GAS · Combat · Unreal Engine 5

Author the attack once. It hits correctly everywhere.

Given a shape, a moment in time and a filter policy — which actors were hit? CrimsonHitDetection answers that identically for a sword swing, a shockwave, a hitscan shot and a projectile, so an attack becomes a data asset instead of a hand-rolled swept trace with its own already-hit set, team check and authority gate in every ability.

Video coming soon

Why CrimsonHitDetection

Built on Epic's Gameplay Targeting System, server-authoritative by construction, and deliberately report-only.

One asset per attack

A UCrimsonHitProfile holds the targeting preset, dedup policy, per-window and per-query target caps, query rate and impact cue tag. Reuse it across every ability that should hit the same way — and get a Data Validation error if the preset can never resolve anything.

Sweeps that don't miss

A weapon tip can travel several metres between frames, and a single overlap at its new position misses everything it passed through. Both Crimson selection tasks sweep from the previous query, sub-stepping when the distance exceeds the shape radius — so dropping to 30 Hz halves the trace cost almost for free.

Composable filters, not hardcoded rules

Affiliation, actor class, angle, line of sight, target tag query, max distance, require-ASC and require-hurtbox — eight filter tasks plus a sort, composing freely with Epic's own. Geometry is a selection task; validity is a filter task.

No client-initiated RPCs

Shape queries, filtering, dedup and target limits all run server only, so there is no trust boundary to police and no _Validate surface. A separate unreliable multicast carries cosmetic impacts, so effects still land promptly on every machine that can see the fight.

Pooled, replicated projectiles

ACrimsonProjectile handles pierce counting, homing, max range and finite lifetimes, flies simulated locally from replicated launch state, and implements ICrimsonPoolable — so it recycles through CrimsonObjectPool with no glue code on either side.

The stale-bone trap, fixed for you

A server renders almost nothing, and only Always Tick Pose And Refresh Bones refreshes bones off-screen. Without that, every socket answers from the reference pose — the swing sweeps a T-pose off to one side and connects with nothing. It looks exactly like a replication bug and isn't. The plugin holds the attacker's mesh at that setting while any window is open, then restores it.

A closer look

Windows, not frames

A hit window is a period during which queries run, opened by an animation notify or an ability task. It owns what makes a swing behave like one attack instead of a series of independent frames: the already-hit set, the target budget, and the positions the sweep interpolates from. Pick Once Per Window for a swing, Once Per Interval for burning ground, Every Tick when you accumulate yourself. Every window carries a safety timeout, because an interrupted montage can skip its end event.

Video coming soon

Head shots, without damage maths

Name a zone with a physical material on a physics-asset body, or map bones to zones with a hurtbox component whose lookup walks up parents. Each impact reports a zone tag — Body, Head, Limb, Weakpoint, Armoured — and the plugin assigns no meaning to any of them. What a head shot is worth stays your decision.

Video coming soon

Vary an attack without a second asset

Every request gets its own copy of the preset, so the ability task nodes expose the values you marked on your own selection tasks as pins — a skill rank that sets radius, a charged attack that grows while held. For what pins cannot reach there's Shape Scale, a uniform multiplier that also works from animation notifies.

Video coming soon

Technical details

Engine
UE 5.8
Platforms
Windows, Mac, Linux
Blueprint-ready
Yes
C++ required
No
Network replicated
Yes
Dependencies
CrimsonCommon, GameplayAbilities, TargetingSystem, GameplayTags, PhysicsCore, AIModule
Last updated
July 2026

Frequently asked questions

Do I need the Gameplay Ability System?
Yes — this one is a hard requirement, not a recommendation. Every hit is reported as an FGameplayAbilityTargetDataHandle and the window drivers are UAbilityTask nodes. There is no non-GAS path, so if your project doesn't use GAS this plugin isn't usable as-is.
Do I need C++ to use it?
No. Profiles and targeting presets are data assets, the drivers are Blueprint ability-task nodes and an animation notify state, and the component's functions are all Blueprint-accessible — the trace selection task is even Blueprintable. A couple of keyed-window entry points are C++-only, for callers like an animation notify that cannot hold a handle, and you won't call them directly.
Does it apply damage?
No, deliberately. It outputs an FCrimsonHitReport and stops — it never builds or applies a UGameplayEffect and never executes a GameplayCue, it just carries the cue tag for you to fire. Effect specs get modified between construction and application by stat systems, augments and buffs; applying them from inside a detection system would silently bypass all of it and double-fire cues your own effect already carries.
Does it work in multiplayer?
Yes, and it's built that way from the start. Queries, filtering, dedup and target limits are server-only, nothing is client-initiated, and an unreliable multicast carries cosmetic impacts so hit feedback lands promptly everywhere. The cost is that feedback is delayed by roughly half a round trip.
Do I have to enable the Gameplay Targeting System myself?
No. It's declared as a dependency in the .uplugin, so enabling CrimsonHitDetection enables it too — even though Epic ships it disabled by default. It will show as enabled in Edit → Plugins without you having ticked it.
Does it depend on other Crimson plugins?
Only CrimsonCommon, and only for the log macros. Team filtering goes through the engine's IGenericTeamAgentInterface, so it works with CrimsonTeams or any team system that implements it — but read How-To: Filter By Team before shipping either way, because unresolved team data reads as Neutral and the filter allows Neutral by default. The failure mode is hitting your own allies, not an error.

One profile asset. Every attack shape.

Melee swings, shockwaves, hitscan shots and projectiles resolved by the same system, on the server, with the arc measured from when the swing started. The Quick Start walks a swung weapon end to end.

Pricing

CrimsonHitDetection is sold on Fab under Epic’s two standard licenses — both include the full plugin, source, and updates.

Personal$9.99For individuals & teams under $100K revenueComing to Fab — join the Discord
Professional$19.99For companies over $100K revenueComing to Fab — join the Discord