API Reference

Public types grouped by area. Every identifier here exists in the CrimsonCommon runtime module's public headers.

Tag stacks

TypeDescription
FCrimsonTagStack / FCrimsonFloatTagStackOne (tag, count) item; GetTag(), GetStackCount()
FCrimsonTagStackContainerReplicated int container: AddStack / RemoveStack / ClearStacks / GetStackCount / ContainsTag / GetStacks
FCrimsonFloatTagStackContainerReplicated float container; adds SetStack to overwrite a value outright
UCrimsonTagStackStaticsBlueprint library: Add/Remove/Clear/Get/Contains TagStack (+ Float variants, Set Float Tag Stack)

Ability system bridge

TypeDescription
UCrimsonAbilitySetData asset bundling abilities/effects/attributes; GiveToAbilitySystem(ASC, &Handles, Source) (C++) / K2_GiveToAbilitySystem -> "Give To Ability System" (BP)
FCrimsonAbilitySet_GrantedHandlesTracks a grant for revocation; TakeFromAbilitySystem(ASC)
UCrimsonAbilitySetStaticsRevokeAbilitySet(Handles, ASC) - BP-friendly revoke (server only)
ICrimsonAbilitySystemOwnerBridge interface: GrantAbilitySet(Set, Source, &Handles), RemoveGrantedAbilitySet(Handles) - no ASC getter
FCrimsonAbilitySet_GameplayAbility / _GameplayEffect / _AttributeSetThe asset's entry structs (ability+input tag, effect+level, attribute set+defaults)
FCrimsonAttributeDefaultOne (FGameplayAttribute, Value) base-value override applied at grant time

Interaction contracts

TypeDescription
ICrimsonInteractableTargetGatherInteractionOptions (C++) / K2_GatherInteractionOptions (BP); plus CustomizeInteractionEventData, OnInteractableHovered/Unhovered, NotifyInteractionSuccess
ICrimsonInteractionInstigatorChooseBestInteractionOption(Query, Options) - arbitrate when several options are offered
FCrimsonInteractionOptionOne option: Text/SubText, InputType, InputHoldDuration, and ability fields (grant / target ASC / action ability)
FCrimsonInteractionQueryRequestingAvatar, RequestingController, OptionalObjectData
FCrimsonInteractionOptionBuilderAccumulates options and stamps each one's target scope
ECrimsonInteractionInputTypeInstant / Hold

Messaging

TypeDescription
UCrimsonMessageSubsystemGet(WorldContext); BroadcastMessage<T> / K2_BroadcastMessage ("Broadcast Message"); RegisterListener<T> (lambda / member-fn / params); UnregisterListener
FCrimsonMessageListenerHandleBinding handle; Unregister(), IsValid()
FCrimsonMessageListenerParams<T>Advanced params - PartialMatch + pre-bound callback
ECrimsonMessageMatchExactMatch / PartialMatch
UCrimsonAsyncAction_ListenForMessageBlueprint async "Listen for Crimson Messages" node

Context menu

TypeDescription
UCrimsonContextActionBlueprintable, EditInlineNew, DefaultToInstanced base. BlueprintNativeEvent hooks: GetAvailability (Hidden/Disabled/Enabled; default maps IsAvailable), GetDisabledReason, ValidateExecution (server anti-cheat), ExecuteAction(Context, Payload) (server-side), GetDynamicDisplayName. Properties: ActionTag, SectionTag, SortPriority, bIsDefault, bIsDestructive, ConfirmationMode, ConfirmationPrompt, CloseBehavior. GetActionId() = wire identity (tag name, else class name)
UCrimsonContextActionSetReusable UPrimaryDataAsset holding an action list (mirrors UCrimsonAbilitySet) - the designer-friendly authoring path. AppendTo(OutActions) for providers. Same loaded asset on client and server -> deterministic
UCrimsonContextAction_GrantAbilityBuilt-in: TryActivateAbilityByClass on the instigator's ASC
UCrimsonContextAction_DebugMessageTest/debug action: logs Message at Display verbosity when executed server-side. Drop into any action list to verify the full menu round-trip without gameplay code
UCrimsonContextAction_FromInteractionOptionTransient wrapper letting ICrimsonInteractableTargets surface in the menu. Wire id derives from the option ability class; ValidateExecution enforces the crimson.ContextMenu.MaxExecuteDistance range CVar (default 1000 cm, <= 0 disables)
UCrimsonContextActionGathererTHE single gather path (provider interface, else interactable actor + components, then registered contributors) + Hidden filtering + deterministic sort (destructive last, section, priority). Helpers: GatherActions, ResolveAction(Actions, ActionId, Occurrence), MakeActionHandle(Actions, Action, OutId, OutOccurrence)
ICrimsonContextActionProviderGatherContextActions - must return a deterministic, identically-ordered list on client and server. Optional native ValidateContextActionRequest(Context) rejects wrong-instigator requests server-side (e.g. another player's item)
ICrimsonContextActionContributorInject actions into OTHER objects' menus (quests add "Turn In" to an NPC). GatherContextActionsForTarget inspects Context.Target and appends only when relevant. Same determinism contract as providers
UCrimsonContextActionContributorRegistryUWorldSubsystem: RegisterContributor(Object, Priority) / UnregisterContributor. Consulted by the gatherer after the target's own gather, in deterministic (priority, class name) order. Register symmetrically on server and client or contributed actions cannot resolve
FCrimsonContextActionContext / FCrimsonContextActionHandleExecution context (instigator/target) / RPC payload ({ Provider, ActionId, Occurrence, Payload } - stable id + occurrence-among-same-id, plus an optional FInstancedStruct argument)
UCrimsonContextActionPlayerComponentPlayer-controller component with the Server_ExecuteContextAction RPC (not auto-attached). Server flow: re-gather via the gatherer -> ValidateContextActionRequest -> resolve by (ActionId, Occurrence) -> GetAvailability == Enabled -> ValidateExecution -> execute. Stale requests drop gracefully

UI foundation

TypeDescription
UCrimsonPrimaryGameLayoutLayer stack: GetPrimaryGameLayout(PC/LP), PushWidgetToLayerStack<T> / ...Async, RegisterLayer, GetLayerWidget, FindAndRemoveWidgetFromLayer
UCrimsonGameUIManagerSubsystem / UCrimsonGameUIPolicyCreate and own each local player's root layout; reach it via GetCurrentUIPolicy() -> GetRootLayout (on the policy); local-multiplayer interaction mode
UCrimsonUIExtensionSubsystemExtension points/widgets: RegisterExtensionPoint, RegisterExtensionAsWidget (+ For Context / As Data), Unregister*, BP K2_*
FCrimsonUIExtensionPointHandle / FCrimsonUIExtensionHandleHandles returned by registration
UCrimsonUIExtensionsStatics: PushContentToLayer_ForPlayer, PushStreamedContentToLayer_ForPlayer, Suspend/ResumeInputForPlayer

Modular actors & player layer

TypeDescription
ACrimsonModular*Character, Pawn, PlayerController, PlayerState, GameMode[Base], GameState[Base], AIController - GFP-extensible framework bases
UCrimsonCommonGameInstancePrimary-player tracking + OnPrimaryPlayerSet hook
UCrimsonCommonLocalPlayerPlayer-side delegate broadcaster
ACrimsonCommonPlayerControllerController -> local-player bridge
UCrimsonUserSubsystemCommonUser port: login, privileges, online context
UCrimsonSessionSubsystemCommonUser port: host/join/matchmaking, beacons
ECrimsonUser* enums + FCrimsonOnlineResultInformationOnline context / init state / privilege / availability / async-task state, and a result wrapper (in CrimsonUserTypes.h)

Input, teams & utilities

TypeDescription
FCrimsonChordRequirementShift/Ctrl/Alt modifier requirement; GetDisplayName(BaseKey)
ECrimsonGamepadSensitivityTen-point Slow->Insane preset scale
ICrimsonInputBindingProviderRead/write chord requirements per mapping+slot (implemented by CrimsonInput, consumed by CrimsonSettings)
ICrimsonTeamAgentInterface / FOnCrimsonTeamTagsChangedDelegateTeam/faction membership tags + change delegate; BroadcastTeamChange (full system in CrimsonTeams)
UCrimsonTagLabelSettingsProject Settings -> Crimson -> Crimson Tag Labels; GetNameForTag (C++) / "Get Tag Label" (BP)
ECrimsonStatDisplayMode / ECrimsonDisplayablePerformanceStatPerf-stat HUD display mode and the displayable stat set (FPS, frame/latency, packet)
FCrimsonAsyncMixinSequential async-load mixin (ported from Epic's AsyncMixin)

Logging

MacroUse
CRIMSON_DECLARE_LOG_CATEGORY / CRIMSON_DEFINE_LOG_CATEGORYDeclare (header) / define (module .cpp) a named, filterable category
CRIMSON_LOG_VERBOSE / _INFO / _DISPLAY / _WARN / _ERROR / _FATALLog at a verbosity; Msg accepts any value FString can build from