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

SystemKey TypesPurpose
Event broadcastUCrimsonCombatTextReplicationComponent, FCrimsonCombatTextEventServer-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 cullingUCrimsonCombatTextClientComponent, ServerCullDistanceOptional per-client delivery that sends each event only to players in range, instead of multicasting to everyone
Style registryUCrimsonCombatTextRegistry, FCrimsonCombatTextStyleRule, FCrimsonCombatTextStyleData asset mapping FGameplayTagQuery rules to visual configs (format string, rich-text styles, physics, animation name)
Widget poolUCrimsonCombatTextSubsystem, UCrimsonCombatTextWidgetClient-side subsystem that pre-warms, recycles, and screen-projects pooled pop widgets
Per-player filtersUCrimsonCombatTextPlayerSettingsPlayerController component: show/hide categories, crits-only, distance cap, widget scale, number-format override
Anchor pointUCrimsonCombatTextTargetComponentPer-actor socket or offset deciding where on an actor a pop is anchored
PlacementUCrimsonCombatTextPlacement, UCrimsonCombatTextPlacementSetNamed, tag-routed policies deciding WHERE text appears - over the target, under it, or at a fixed spot on the HUD
Widget anchorsUCrimsonCombatTextAnchorSubsystem, UCrimsonCombatTextAnchorWidgetMakes your UI addressable by tag so pops can land on a health bar or nameplate
Project settingsUCrimsonCombatTextSettingsRegistry + widget class, number format, distance-scale curve, pool size, active-pop cap, server cull distance
User settings glueUCrimsonCoreCombatTextSettingsComponent (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

TypeName
CrimsonNone - fully standalone
Engine pluginsGameplayAbilities, Niagara, SlateIM (editor module: the dev tools)
Engine modulesCore, 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.