API Reference

Core types

TypeCategoryDescription
UCrimsonSkillTreeAssetTree data asset - nodes, graph config, presentations, connection paths
UCrimsonSkillTree_NodeAssetA single node - costs, activation conditions, node events, state
UCrimsonSkillTree_EdgeAssetDirected edge; per-edge conditions, events, color overrides, LOD
UCrimsonSkillTreeManagerRuntimeReplicated component: budgets, levels, RPCs, loadouts, save data
UCrimsonSkillTreeBlueprintLibraryRuntimeBP helpers - node lookup, cost formatting, simulation

Host contract

The actor that hosts a UCrimsonSkillTreeManager must implement `ICrimsonSkillTreeInterface` (all three methods are BlueprintNativeEvent). The manager calls these on its owning actor to resolve the logical effect owner; without the interface, initialization fails (crash in development builds, silent no-op in shipping - see Quick Start step 2).

MethodReturns / purpose
GetSkillTreeOwner()The actor that logically owns the tree's effects - typically the controlled Pawn/Character
GetSkillTreeOwnerCharacter()The owning ACharacter (used by character-scoped events such as float-property modifiers)
GetSkillTreeManagerComponent()The host's UCrimsonSkillTreeManager instance

Sub-node bases

TypePurpose
UCrimsonSkillTree_ActivationConditionBasePrerequisite check before a node activates
UCrimsonSkillTree_NodeEventBaseEffect fired on level-up / level-down / reset
UCrimsonSkillTree_EdgeConditionBase / UCrimsonSkillTree_EdgeEventBaseEdge-scoped condition / event
FNodeResourceCost / FNodeCostDefinitionA cost (flat or curve-scaled) and its resource source

Connection line styles

TypeDescription
UCrimsonSkillTreeWidget_LineDrawingPolicyBaseAbstract, swappable connection-line strategy (GraphConfig.LineDrawingPolicy)
USkillTreeLineDrawingPolicy_StraightLine / _ElbowLineBuilt-in straight and elbow styles
UCrimsonSkillTreeWidget_ConnectionLayerSingle runtime widget that paints every connection (material-capable strip or anti-aliased polyline)
FCrimsonSkillTree_ConnectionPathPer-connection authored path (anchors, material, shape curve) on ConnectionPaths
ECrimsonConnectionAnchorModeAttach mode enum

Widgets

TypeDescription
ICrimsonSkillTreeNodeWidgetThe node contract. Implement on any UUserWidget to use it as a node - no plugin base class required. UCrimsonSkillTreeWidget_Node is a ready-made implementation you may subclass instead (On Update Node Appearance / On Node Hovered)
ICrimsonSkillTreeDecorationWidgetThe decoration contract (panel / header / divider) - InitializeSkillTreeDecoration. The host resolves the class from the decoration's WidgetClassOverride, else GraphConfig.DecorationWidgetClasses[Kind]. UCrimsonSkillTreeWidget_Decoration is the ready-made implementation
UCrimsonSkillTreeUIStaticsBlueprint helpers a node needs without inheriting anything - Request Skill Node Action. UCrimsonSkillTreeWidget_NodeTooltip remains available as a ready-made tooltip
Screen + canvasYou build these - see How-To: Display the Skill Tree. A prebuilt UCrimsonCoreSkillTreeScreen / UCrimsonCoreSkillTreeGraph also exists (CrimsonCore - requires all Crimson plugins), listed for orientation only

Runtime structs & enums

TypeDescription
FSkillNodeChangeRequestA single node action in a batch (NodeGuid + ActionType)
FSkillTreeLoadoutNamed snapshot of node levels in a tree
FCrimsonSkillTree_SaveGameData / _SaveGameNodeStatePlain save structs (in CrimsonSkillTree_SaveData.h)
FCrimsonSkillTree_VisualDecoration / ECrimsonSkillTree_VisualDecorationKindOne authored decoration on UCrimsonSkillTree::Decorations - Kind, GamePosition, GameSize, DisplayText, TintColor (multiplies the widget's authored color; white = as authored) and the optional WidgetClassOverride. Panel / Header / Divider
ECrimsonSkillNodeActionTypeActivate / Deactivate / IncrementLevel / DecrementLevel
ECrimsonNodeStateUnSet / Set / Max / Suppressed

Config & extension

TypeDescription
UCrimsonSkillTreeSettingsProject Settings -> Crimson -> Crimson Skill Tree
UCrimsonGameFeatureAction_AddSkillTreesGame Feature action injecting a tree into an actor at runtime

Built-in node events & conditions

TypeEffect / Check
UCrimsonSkillTree_NodeEvent_ApplyGameplayEffectApplies/removes a GE scaled to the node level
UCrimsonSkillTree_NodeEvent_GrantGameplayAbilityGrants/removes a Gameplay Ability
UCrimsonSkillTree_NodeEvent_ModifyCharacterFloatPropertyAdds/subtracts a named float property on the owner
UCrimsonSkillTree_ActivationCondition_ParentLevelParent node at/above a minimum level
UCrimsonSkillTree_ActivationCondition_AttributeRequirementA GAS attribute meets a threshold
UCrimsonSkillTree_ActivationCondition_ResourcePointsSpentA minimum number of points spent in the tree
UCrimsonSkillTree_Condition_CompositeBase (+ _AND / _OR)Combine conditions with AND / OR

Connection visual states

TypePurpose
ECrimsonConnectionVisualStateLocked / Unlockable / Active / Maxed - resolved from live node data
FCrimsonConnectionLineStylePer-state look: color, thickness, brush (material-capable), opacity
FCrimsonConnectionFillSettingsProgress-fill animation (FillAlpha material parameter, duration, easing, line-split fallback)
FCrimsonConnectionTransitionSettingsState crossfade (duration, easing, optional material parameter)
FCrimsonConnectionHoverSettingsRuntime hover (tolerance px, hover style, blend time)
UCrimsonSkillTreeWidget_ConnectionLayerSingle widget painting all connections; hover hit-testing + OnConnectionHoverChanged
UCrimsonSkillTreeWidget_LineDrawingPolicyBase::ResolveConnectionState/StyleState + style resolution (override points for custom policies)
CrimsonSpline::BuildShapedPolylineChord + perpendicular shape-curve polyline (fixed 0..1 domain, endpoints pinned to the anchors)

System readiness

Announced as a ModularGameplay feature state: UGameFrameworkComponentManager::ChangeFeatureInitState(Actor, CrimsonSkillTreeTags::SystemReadyFeatureName, Manager, TAG_Crimson_SystemReady_SkillTree), with SystemReadyFeatureName = "Crimson.SystemReady.SkillTree". Wait on it rather than polling for the component: RegisterAndCallForActorInitState(Actor, CrimsonSkillTreeTags::SystemReadyFeatureName, FGameplayTag(), Delegate, true) (C++), or read the manager with GetImplementerForFeature.

Tag constantTagAnnounced when
CrimsonSkillTreeTags::TAG_Crimson_SystemReady_SkillTreeCrimson.SystemReady.SkillTreeAnnounced once the manager exists, has its configured trees assigned, and is registered.