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. It also owns the aggregation ledger and stamps each event with the running totals |
| 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 - requires all Crimson plugins) | Applies saved user-settings values to the local player automatically. Standalone equivalent: How-To: Expose Pop Options as User Settings |
Plugin dependencies
| Type | Name |
|---|---|
| Crimson | None - fully standalone |
| Engine plugins | GameplayAbilities, Niagara, SlateIM (editor module: the dev tools) |
| Engine modules | Core, CoreUObject, Engine, GameplayTags, DeveloperSettings, GameplayAbilities, UMG, SlateCore, Slate, Projects, Niagara, NiagaraCore |
Multiplayer-first, cosmetic-only
Hit events travel server-to-client over unreliable RPCs (
NetMulticast or per-client) because pops are cosmetic - an occasional drop is invisible, and every event carries the attacker's running total, so the next hit corrects the number anyway. Scope payoffs are the exception: they go reliably to the one player who raised the total, and are never distance-culled. BroadcastCombatText validates authority itself, so it is safe to call from shared gameplay code like an AttributeSet's PostGameplayEffectExecute.Using with other Crimson plugins
CrimsonCombatText works alone. When you own other Crimson plugins, CrimsonCore contains the full-suite wiring for it:
UCrimsonCoreCombatTextTagLabelBridge in Source/CrimsonCore/{Public,Private}/Integration/CombatText/ binds UCrimsonCombatTextFilter::TagLabelResolver(), and UCrimsonCoreCombatTextSettingsComponent (Player/) applies saved user settings to the local player. To wire it yourself, read CrimsonCommon -> Concept: Connecting Crimson Plugins; for everything CrimsonCore installs, read CrimsonCore -> Concept: The Integration Layer.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.