Dynamic Skill Tree System

1/18 Update: The Dynamic Skill Tree System will be releasing this week on January 20th!

12/18 Update: If your interested in picking this up before it releases on the Marketplace, I’ve made it available on Sellfy: https://sellfy.com/p/9t7o/

12/17 Update: Epic has approved the project files and I’ll be given a release date next week.

Hi All,

This is an mmo-inspired skill tree system that I’ve been working on for Klepto’s multiplayer progression. Since I wasn’t able to find a premade solution on the Marketplace, I’ve decided to modify ours to be submitted. 100% of the revenue this generates is being put directly into Klepto’s development. If this isn’t of interest, perhaps we’ll just have a Meerkat Gaming bake sale instead :slight_smile:

Overview

The Dynamic Skill Tree System builds MMO inspired skill trees at runtime using data tables. This allows the developer to easily build and modify their skill trees without having to maintain and update large static trees.

Included features:

  • 3D Widgets
  • 2D Widgets with alternate layouts
  • Theme builder
  • Skill Tree locking/unlocking based on chosen class
  • Gamepad and Keyboard support
  • Child/Parent unlock dependencies (parent skill unlocks child skill in the row above)
  • Multiple tiers per skill (spent multiple points in single skill)
  • Respec (resets all skill trees and refunds spent skill points)
  • Demo Level (XP and level tracking with NPC skill trainers)

For more details, download the Quick Start Guide

Images


Icons

The skill icons that I’m using are from Game-Icons.net. These are all free for commercial use under the CC BY 3.0 license. I’ve gone through and selected about 500 fantasy and sci-fi ones to include as sample content. However, I’m not 100% sure if Epic will allow these to be included. If I am required to remove them or you need additional icons, just visit their page in the link above.

Hi NobleSpoon

Nice!. This is compatible with other MK assets, like ? Already implemented here!

Very very nice!

I haven’t used either of those but reading up on them it would seem that integration would be pretty easy. Since the Character Attribute system is already tracking level progression, you could just modify that to increment your skillpoint variable each level and tell the Skill Tree what variable is tracking your levels (if you have any skills requiring specific level to be reached before unlocking). I would imagine you could probably base that systems attribute points on the players selected skill tree with minimal effort but once again, I would have to get some hands on time with that marketplace asset.

For the spell system, this could easily be tied in using the skill unlock to authorize the chosen spell. If you want to have multiple tiers, the first could unlock the spell and the other points could be damage modifiers or mana cost reduction.

Thanks!

Thanks, NobleSpoon

Your skill tree will be in my ToDo-List. I intended to make it from scratch. But it will saving a lot of work.

I’ve got most of the functionality finished up on the backend. I’ve also made some changes to how the character data (level/skill-points/class) are passed to the table so it’s easier to integrate with existing variables you may already be using.

There’s still a couple more things to add. The first is a counter of available and spent skill points. Second, a row unlock rule so players can be required to spend X amount of skill points in the tree before unlocking the next row. This will be a quick one to add. Finally, a text box for displaying the skill name and description that appears when you hover the mouse over an icon. If there’s any specific functionality you’d like to see added in, let me know and I’ll see what I can do.

I plan on getting the sci-fi theme put together tomorrow. Until then, here’s an updated screenshot of the fantasy theme.

FYI - Don’t try to make any sense of the icons I’ve selected. To save myself some time, I have the table selecting random icons :slight_smile:

“3D Widget”-able with “On-Look” events as well as controller support

I haven’t started on controller support but I don’t expect this to be very difficult since column and row info is already being tracked. Lucky for you, those are two things we need for our own skill trees in Klepto so I’ll make sure they are included before I submit :slight_smile:

I started on the gamepad support today. It would be a whole lot easier if you could select children from a grid by providing the column and row index values but unless I’m blind, I didn’t see this as an option. I currently have left and right directional pad working. It’s simply increments/decrements grid selection index and resets when last index is reached. However, adding up/down directional pad input is going to require some additional Adderall. If this was a full grid, I could simply add/subtract row length with the selection index value. However, most skill trees have tiles missing as seen in my earlier screenshots so using that method wouldn’t always be a uniform up/down navigation.

Anyways… here’s a gif :slight_smile:

Look at the first VR UI tutorial, I’ll find a link. I think they discuss how to do this.

Found it. They recommend using event dispatchers.

Yeah, I was watching that one the other day. Unfortunately, I didn’t really see anything pertaining to grid navigation/selection. Navigating a stacked menu like that is pretty straight forward. I’m using a similar technique for moving left/right via a selection int variable. However, the main difference is that I’m using my selection int as an index value for a Get Child At node that references the skill within the selected grid block.

I could simply populate the unused grid blocks with empty children. This is likely the easiest solution. Hopefully in the future, Epic will add a new node that bases child selection from grids on two int values, column and row.

Quick update:

Up/down gamepad and keypress navigation is now working. I decided to go with my above mentioned plan to populate the unused grid space with empty skill blocks. Since an INT was already be using to track how many points could be spent in a skill box, I just modified the system to set an empty cell if that skill tiers value is 0.

I’ve started working on an easy to use and customize theme builder for the tree. This will automate setting the various textures, colors and fonts of the skill trees and skill boxes. I’ll have this pre-loaded with two themes (fantasy & sci-fi). I’ll be providing a tutorial for creating new ones as well.

Good news regarding an early question about integration with the Spell System and Character Attributes system currently available on the marketplace. , the creator of both systems has generously provided copies of his systems to assist with improving the compatibility with his systems. The process of adding the skill tree builder into an existing game using those systems should require minimal effort/changes. I’m making some tweaks to my system to further accommodate that option. Additionally, we will be working on an integration guide to further simplify the integration process.

That sounds great!!

3D Widget support and save/load is working.

Save/load took a little bit of figuring out. With static skill trees, the data locations are predictable but that isn’t really the case with dynamic systems. I’ve setup a data structure for the saves that stores class/subclass/row/column/points. When the skill trees are built, it will load the saved data by finding the skill box with matching values.

Alright, another problem solved. I’ve been trying to figure out the best way to handle shading rows or columns that haven’t been unlocked. Once again, something very easy to handle with static content but getting it to support a dynamic amount of rows presented a challenge but I’ve worked out a solution to automate this process for the user. I’m using a progress bar that fills top-down. By dividing 1 (progress full) by the amount of rows, it gives me the amount I need to subtract from the progress amount for each row unlock.

Added a separate widget for skill description. It uses the same 3D widget blueprint as the trees. Just check “Is Description” when placed in the world. When using the 3D widget BP for trees, there’s a field to enter the tree name. The system will automatically setup the appropriate 3D widgets based on matching names.

Nice work looking good!

This is looking very nice indeed Noble. Will definitely be following your progress, and interested in this once it’s on the marketplace.

How is that integrated, i work on more advanced spells system on interfaces, so i’m wondering.

Thanks @Amievil & @Bhanshee!

Although there’s a lot of things going on behind the scenes to make everything work, integration into your project only requires a couple of steps. I’ll be providing guides and video tutorials at release. Here’s an overview of the process:

  1. Create and import your skills data table from the provided template. This is a single CSV file is used for populating skill boxes for all the trees. I recommend populating this outside of engine with Excel or similar spreadsheet program.
  2. Customize the Skill Trees data table. This can quickly be done in engine unless you’re planning to have a crazy amount of skill trees. This determines theme, background images, etc.
  3. From your CharacterBP, add a SpawnActor node at begin play to spawn the Skill Tree System. This BP handles creating and managing your skill trees.
  4. Setup your skill unlock events. Each time a skill is purchased, it fires the skill unlock function on the SkillTreeSystem BP. This passes class,skill name, and tier (if multiple points can be spent in the skill). See example in image below.


Using the above example, if the player selects the “Fireball” skill from the Mage Skill Tree, a Boolean on the players instance of the Fireball spell BP will be set to true. The character BP will have a branch to check if that value is true before allowing it to be casted or equipped (depending on how you allow your characters to choose spells).

Alternatively, the skill could be a stat buff like the “Meditate” skill on the Mage Skill Tree. This is increasing the player’s max mana amount.

If you’re using 's Spell System or Character Attributes system from the Marketplace, I’ll have examples in the guide on how to apply stat buffs and spell unlocks with his systems.