Devlog 3 - Skill Tree System


Devlog 3 - Skill Tree System

Skill Design and User Interactions

Since this is my first game, I planned a simple and short game to do, but with the time, I really like the idea of Isominer, an isometric simple space game with the 3D basis and I decided to go a step further.  I made brainstorming with my friends and noted the features that I can implement in near future. I started with skills, made test skills and integrated into the game, but the current system don't let more than 4 skills since there is nothing to pick from. Then I planned a skill tree with skill pick system and more to engaging user to play the game more. I added skill point system, subskills, unlock and upgrade mechanics to the game for enhancing the game with this update.

Instead of creating similar skills to other skills, I think that selectable subskill concept is a good idea. Upgrading a skill make them stronger and useful but subskills add characteristic features to the skill. For example, Field Shiefter skill makes asteroid slower in a field by default subskill, but its second subskill decrease the slowing feature and add destroying harmful asteroids with a possibility. Each subskills has not only advantages, but also disadvantages to other subskills. So, using subskill idea enhance the user experience with adding customization and not repeating, unique skills to the game. Now, I may have more unique skills that surprising the player.

Stage and level system makes harder the game and skills become ineffective within short time of play. To prevent that, I decided to make skills upgradable, but with unlock, upgrade, subskills, subskill unlock, it became complex to play. So, I join upgrade and subskill unlock system and when a skill upgraded, skills features upgraded regardless to subskill, but also a subskill unlocked too. So, upgrading a skill has multi effects to the skill with ease of use. 

These features are nice to have, but integrating them to a generic class can get messy. Here is my solution to avoid mess.

Integrating Skill Design into Game

Unlock and Upgrade System

Unlock and Upgrade system are common to all skills, so I implement skill unlocked info, skill level info and methods to get information about them, unlock or upgrade them. All of them were okay, until I created the UI components

I was implemented lots of helpful methods to disabling buttons, showing required info about unlock and upgrade, but they can were too complex because of my design. I was implemented two skill unlock method, by level and skill points. Skills can be unlocked by level, without skill points and they can be unlocked by level and skill point. Since level upgraded by experience, I thought that when user level increased, I can check skills and if there is skill can be unlocked by level without skill point, skill will be unlocked by default. But showing that unnecessary detailed information about skill unlock is not a good experience, and implementing it is too. So, I change my design to simpler way, skills unlocks required a level and skill points, when you reach to that the required level, notification shown in the game to notify player there is a unlockable skill and if player has enough skill points to unlock the skill, can unlock the skill by button, else, button is disabled.

I learned that thinking like an engineer is not a good way to design the user experience. You should avoid unnecessary details in user interactions.

Subskill System

Mechanics are common to all skills but since skills have different classes inherited from skill class, unlock and upgrade system is only concern for skill class, but subskills should be implemented for different skill classes. I choose similar system to skills, created a subskill class that only holds common information for subskills, but did not create different classes for each subskills. Instead of that, I hold a subskills list,  active subskill, arranger action  in generic skill class. In skill classes, I implement subskill arranger method and assign it to arranger action that is inherited. In that arranger class, I found active subskill from id, made changes about active subskill in the skill class. 

My solution to this complex design is using a single 'Arranger Class' to arrange all about subskills and skill itself.

What changed 

Major Changes on Skill Class

I made major changes on Skill class such that:
1-Subskills added to skills, 1 for default and other for characteristic features. 
2-Skill points collected by usage of the skill.
3-Unlock system for non-trivial skills. Skills can be unlocked by skill points.
4-Upgrade system to upgrading features (such as demage, range, duration) and unlocking new subskills of the skill.

Skill Tree Panel

For using these skill features, I planned skill tree as: 
1-Skill Tree Panel for Skill List with their icons and statuses. Skills listed by types, and parent skills.
2-Skill Detail Page (expandable) contain information and settings about the skill. Open when we click on skill icon, we can unlock, upgrade and change subskill of the skill.
3-Subskill Row  for listing subskills the skill and making changes.

Descriptions are belong to subskills, not the skill, since features defined by subskills. All changes maded by user saved to game by immediately.

Skill Pick System

Last part of the skill tree system, which I integrate it in later versions but it is related to this devlog, skill pick system. 

The problem is: I couldn't add more skills than buttons count without a skill pick system. Because of that problem, it is highest probability task that before the new skills. My main metrics about skill pick system are:

1-Locked skills can't be picked.
2-Skills should be picked from skill tree.
3-Skills that already active in skill buttons should be removed from buttons first, than assigned to another button (no duplicate skills in buttons).
4-Picked skill should be disabled (restarted) to prevent reset skill disable duration (cheat).
5-A animation should show user where to click when skill pick started.

So, I add a button to skill detail page, near the skill name, and prepare that button to enable/disable by checking the skill is unlocked. I create a particle system objects to show skill buttons that can be pressed when skill pick is activated.

I add a skill field to my custom button class for preventing duplicate. When a skill picked from detail page, here is what I do:
1-Clear all skill buttons onclick actions, add them a assign skill delegate with picked skill.
2-I activate particle system objects to show clickable buttons.

When player click a skill button,
1-I check if the skill already assigned to another button, if there is I clear that button.
2-I assign the skill to clicked button, disable button for the skill's disable duration.
3-Re-open the detail page and let user continue to skill tree.

Get Isominer - Casual Space Mining Game

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.