CrimsonSkillTree

A replicated, GAS-integrated skill tree system. You author each tree in a two-graph asset editor: the Logic Graph captures gameplay structure (nodes, dependencies, conditions, events, costs) and the Visual Graph captures the player-facing layout with a live UMG preview of every node. The runtime is server-authoritative with delta-only FastArray replication, and it exposes its state as a plain save struct - no save-system dependency.

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 everything side by side.

What's included

SystemKey TypesPurpose
AssetUCrimsonSkillTree, UCrimsonSkillTree_Node, UCrimsonSkillTree_EdgeData-driven tree definition; nodes hold costs, conditions, events
Two-graph editorLogic Graph + Visual GraphGameplay rules and player-facing layout edited independently on one asset
Connection stylesUCrimsonSkillTreeWidget_LineDrawingPolicyBase (+ Straight / Elbow / Spline)Swappable per-asset line drawing; the Spline policy gives material-capable, hand-authored curves
Runtime managerUCrimsonSkillTreeManagerServer-authoritative actions, point budgets, atomic batches, respec, loadouts
Host contractICrimsonSkillTreeInterfaceThe actor that hosts the manager must implement this - the manager calls it to resolve its logical owner (see Quick Start step 2)
Widget primitivesICrimsonSkillTreeNodeWidget / ICrimsonSkillTreeDecorationWidget (+ optional ready-made widgets)Styleable per-node / decoration / tooltip widgets plus the connection layer that paints the lines; you host them on a canvas of your own (How-To: Display the Skill Tree)
ToolingValidators + PIE debugger + Dev ToolsCompile-time checks (jump-to-node), live runtime state tinting in PIE, and a Dev Tools window (Crimson.SkillTree.DevTools) to inspect / drive trees during play - multiplayer-aware

Plugin dependencies

TypeName
CrimsonNone - fully standalone
Engine pluginsGameplayAbilities, CommonUI, GameFeatures, ModularGameplay, EnhancedInput, SlateIM, GameplayTagsEditor
Engine modulesCore, CoreUObject, Engine, UMG, FieldNotification, GameplayAbilities, GameplayTags, GameFeatures, ModularGameplay, CommonUI, Slate, SlateCore, NetCore, InputCore, DeveloperSettings, Projects (EnhancedInput is available to subclasses but the base plugin binds no input)
You build the screen; this plugin ships the parts
The node, decoration, tooltip and connection-line widgets are all here, and How-To: Display the Skill Tree walks the host canvas that assembles them - CrimsonSkillTree alone is enough for a working, navigable tree.

A prebuilt screen and canvas (UCrimsonCoreSkillTreeScreen / UCrimsonCoreSkillTreeGraph) also exist (CrimsonCore - requires all Crimson plugins): free to download, but compiles only with every Crimson plugin installed. Treat it as an alternative to that page, not a prerequisite for it.
Using with other Crimson plugins
This plugin works alone: it exposes its state through OnSkillTreeStateUpdated, a plain save struct, node events and the CrimsonSkillTreeTags::SystemReadyFeatureName feature state. When you own the other Crimson plugins, CrimsonCore contains the full-suite wiring in Source/CrimsonCore/{Public,Private}/ - UserInterface/SkillTree/ for the prebuilt UCrimsonCoreSkillTreeScreen, SaveIntegration/ for UCrimsonSkillTreeSaveComponent, and SkillTree/Events/ for UCrimsonCoreSkillTreeNodeEvent_EquipAugment. To wire it yourself, see CrimsonCommon -> Concept: Connecting Crimson Plugins; for what CrimsonCore installs, see CrimsonCore -> Concept: The Integration Layer.

Where to go next

  • New here? Start with Quick Start - a tree on screen and a node activating end to end.
  • Need a specific task? See the How-To pages (author a tree, style connections, runtime actions, save/load, display the tree, debug at runtime).
  • Want the mental model? Read the Concept pages (two-graph editor, connection styles, compile, multiplayer).
  • Looking up a signature? Jump to API Reference.