CrimsonCombatText
Displays floating damage, healing, and custom numbers above actors. The server broadcasts a FCrimsonCombatTextEvent through UCrimsonCombatTextReplicationComponent (on the GameState); each client's UCrimsonCombatTextSubsystem applies the local player's display filters, resolves a visual style from a tag-driven registry, and recycles a pooled UCrimsonCombatTextWidget to play the pop. It is display-only: the subsystem never runs on dedicated servers, and dropping an event costs nothing but a missing cosmetic.
Two ways to read this
Use the Blueprint / C++ / Both switch at the top of the window. Blueprint readers get editor screenshots; C++ readers get code; Both shows them side by side. Where something exists in only one world, the page says so.
What's included
| System | Key Types | Purpose |
|---|---|---|
| Event broadcast | UCrimsonCombatTextReplicationComponent, FCrimsonCombatTextEvent | Server-authoritative entry point on the GameState; call BroadcastCombatText and every relevant client shows the number |
| Server culling | UCrimsonCombatTextClientComponent, ServerCullDistance | Optional per-client delivery that sends each event only to players in range, instead of multicasting to everyone |
| Style registry | UCrimsonCombatTextRegistry, FCrimsonCombatTextStyleRule, FCrimsonCombatTextStyle | Data asset mapping FGameplayTagQuery rules to visual configs (format string, rich-text styles, physics, animation name) |
| Widget pool | UCrimsonCombatTextSubsystem, UCrimsonCombatTextWidget | Client-side subsystem that pre-warms, recycles, and screen-projects pooled pop widgets |
| Per-player filters | UCrimsonCombatTextPlayerSettings | PlayerController component: show/hide categories, crits-only, distance cap, widget scale, number-format override |
| Anchor point | UCrimsonCombatTextTargetComponent | Per-actor socket or offset deciding where on an actor a pop is anchored |
| Placement | UCrimsonCombatTextPlacement, UCrimsonCombatTextPlacementSet | Named, tag-routed policies deciding WHERE text appears - over the target, under it, or at a fixed spot on the HUD |
| Widget anchors | UCrimsonCombatTextAnchorSubsystem, UCrimsonCombatTextAnchorWidget | Makes your UI addressable by tag so pops can land on a health bar or nameplate |
| Project settings | UCrimsonCombatTextSettings | Registry + widget class, number format, distance-scale curve, pool size, active-pop cap, server cull distance |
| User settings glue | UCrimsonCoreCombatTextSettingsComponent (CrimsonCore) | Applies saved CrimsonCombatText.* CrimsonSettings values to the local player automatically on the full Crimson stack |
Plugin dependencies
| Type | Name |
|---|---|
| Crimson | CrimsonCommon (logging + shared utilities) |
| Engine plugins | GameplayAbilities |
| Engine modules | Core, CoreUObject, Engine, GameplayTags, DeveloperSettings, GameplayAbilities, UMG |
Multiplayer-first, cosmetic-only
Events travel server-to-client over unreliable RPCs (
NetMulticast or per-client) because pops are cosmetic - an occasional drop is invisible. BroadcastCombatText validates authority itself, so it is safe to call from shared gameplay code like an AttributeSet's PostGameplayEffectExecute.Where to go next
- New here? Start with Quick Start - damage numbers over a target, end to end.
- Want text somewhere other than over the enemy? Read How-To: Position Pops, then How-To: Show Pops on the HUD or a Health Bar.
- Need a specific task? See the How-To pages (per-player filters, team system bridge, pop placement, custom widget animation, distance-based scaling, server culling, user settings, dev-tools testing).
- Want the mental model? Read the Concept pages (event flow and replication; styles, formatting, and the widget pool).
- Looking up a signature? Jump to API Reference.