Skill System
Process
The intent of the Skill System was to make it scalable and to ensure that it would be easy to add new skills. The Skills themselves are based on a Skill Actor Parent Object, where all scripting is implemented that controls the levelling up. This Parent Object contains a number of variables, which can be altered in child instances:
- The name of the skill as a Text var.
- IsActivityEngaged bool checks whether the player is engaged in an activity and triggers the levelling event.
- Float variables for level increase, skill progress and max skill progress (i.e. max skill per level) as well as a float to control the UI Skill Progress Bar.
- Integer variables for Skill Level and Skill Level Cap.
Floats are used to allow for smoother increases and are ceiled to cooperate with the UI.
Building blocks
The system concists of an Actor Component Location System, which is attached to the player character and logs the reached locations, an Location Actor Object, and a number of UI elements.
Skill Parent
The Skill increases on a one second tick as long as the player stays near the activity area. If the player reaches the Current Max Skill Progress, they level up. The Skill levels are set to 1 so that we don’t have to divide by zero – as a treat. For clarity, this is always counted as a minus one in the UI, so that the player facing levels are 1 to 10. This is for the player to discover new skills while engaging with the game world and not having it revealed to them the moment they engage with something and encouraging them to explore and engage with elements in the world.
The Skill level’s max and its increase is based on:
- The Skill Level Increase float variable divided by the Current Skill Level integer variable.
- The Current Max Skill Level Progress float variable.
This combination is intended to create an exponential progress curve, where each level is slightly more difficult to reach. This to keep the Skill Level Increase as an instance editable float variable, as it is intended to be manipulatable by, for example, buffs and debuffs.
The intended progression of an example Skill is shown below. In the video at the bottom of this entry, an example rate of 50 to speed up the example.
Activity Actor
The Activity Actor Object Parent and Skill Actor Object Parent work in tandem. The Activity is the “physical” element in the world that the player engages with. This could be them cooking over a campfire they’ve built, or going fishing by a school of fish. The Skill Actor Object Parent has no tangible expression in the game world, and this Skill Actor Object is attached as a child to the Activity Actor.
This solution was chosen as:
- Not all Activities might be tied to a skill.
- Different Activities might increase the same skill, while having different animation or mesh needs.
- Skills need to be gained by some kind of performing, and do not happen passively.
Different kinds of Activities might differently impact the games Need System in various ways (some being more taxing on sleep, hunger, social, or a combination), which needs to be controlled independently.
Level Up UI
When the player levels up, a simple “Level up!” animated UI is displayed, to communicate what is happening in the system. These are bound values attached to the specific instance of the Child Skill of the respective Activity Actor Object.
Hopefully, the modular intent of this system – which has guided many design choices – has been communicated in this text.
The system played out in the editor:
Improvements
- The Skill Name variable text might cause issues in localization when the length of the skill name might vary.
- Adding UI to communicate current progress to the player live in game.
- The Skill increase should not end OnComponentEndOverlap, and it should be explored if it should end on key press or connected to some kind of visual representation.
- Exploring how the Parent-Child Skill set up works with craftable or spawned items.
- For future development, testing is required to ensure that the levelling rate is satisfying for the player as well as to make sure that the “surprise” aspect of discovering skills and activities is satisfying and not just frustrating.
- There is also a concern whether the activity set up is too passive and thus tedious in which case a redesign or minigames for passive activities should be considered.
Skill System
Hobby Project
The Skill System is a type of levelling system where players engage in activities to build skills. The intention is to add an incentive to engage with other systems and elements, such as crafting, gathering items, and as checks for quests. The Skill System has three main types of elements:
An Actor Component, keeping track of the skills in one place.
A Skill Actor Object Parent Class, controlling the basic functionality of each skill.
UI elements for levelling up and keeping track of skills and skill levels.
The skills are also heavily reliant on Activity Actors and a Blueprint Interface, which controls all interactions in the game.