Thoughts on Implementing a Skill System

The game I’ve been working on for nearly two years—a game I’ll refer to as LAVO without yet explaining the abbreviation—has a skill system that we are currently hammering out. What was originally an idea for a shmup has effectively become an RPG that uses shmup mechanics for combat. And a system of player-character skills is a staple element of RPGs that we use. Today I feel like rambling aimlessly about the design and implementation.

Two Types of Skills

We have not settled on a final list of the skills in LAVO, but currently they all belong to one of two categories:

  1. Skills which passively increase base statistics, e.g. Regeneration affects the character’s healing rate.

  2. Skills which confer an active ability, e.g. Hacking for getting information out of in-game computers.

The player improves these skills by investing skill points, a common mechanic, to increase their level. The higher the level, the more effective the skill. But how do we actually use the skills in the code? Events. Every skill has three events:

  1. onLevelUp
  2. onCheckSuccess
  3. onCheckFailure

We can associate an arbitrary number of actions (almost always functions, sometimes coroutines) with each event. The conditions under which the game triggers onLevelUp are hopefully obvious. But the other two are not so clear. The way we ‘check’ skills for success or failure is right out of Dungeons and Dragons:

-- This method performs a skill check.  It accepts a number
-- representing the difficulty of the check; the higher the number,
-- the more difficult it is for the check to succeed.  The method
-- returns a boolean that is true if the skill check is successful,
-- but the logic for determining success can vary from skill to skill.
-- The implementation below is the default, but individual skills may
-- override this method.
function Skill:check(difficulty)
    local result = self.points >= difficulty

    if result == true then
        self.events["onCheckSuccess"]:trigger(self)
    else
        self.events["onCheckFailure"]:trigger(self)
    end

    return result
end

We have yet to work out a standard for difficulty though. Assigning a difficulty check as a number is entirely arbitrary. For example, what does it mean to say opening a lock has a difficulty of twenty? Semantically it is meaningless, yet a big challenge of designing the skills is to find a fair balance in these arbitrary values.

Looking for All Manners of Incorporation

I am doing my best to keep my eyes open for utilizing skills in all kinds of ways. The most recent example is a boss who has a roar that stuns the character. However, if her Piloting skill if high enough then she is not completely frozen; she can continue to move in small amounts. This mechanic will work for (almost) all enemies who have paralyzing attacks.

Personally I like the idea because it makes skills an active part of the game even though the player is not actively invoking them via a menu or what have you. Even though it is a ‘passive ability’, skill points investing in Piloting actively affect the gameplay. I would like that to be true for as many skills as possible. Another example is Conversing. When the player is having conversations and sees dialog choices there will be some grayed out because the character’s Conversion skill is not high enough. In this way the game mirrors the mechanic of ‘Fallout 3’. As the character improves her Conversing the player will see these dialog choices become brighter in color, showing that they are closer to being a viable choice.

I believe that the more the skill system can tie into all aspects of the game, the less players will feel like spending skill points is a tedious RPG chore.

Skill Tree or No?

This is another oft-used game mechanic on which we’ve yet to reach a decision. Currently the skills do not form any hierarchy. In that regard the skills are similar to those of most Elder Scrolls games. I feel this provides the player with some level of comfort and safety when it comes to spreading around skill points. Conversely, when I play a game with skill trees I feel more motivated to pick a small number of skills and invest heavily in them; I suspect other gamers have the same mentality.

It is hard to explain why but I feel like a skill tree would not fit with our game. Perhaps a system by which skill increases unlock ‘perks’, again as in the more recent Elder Scrolls games; skill trees are not necessary for that mechanic.

In the near future I am going to experiment with some different approaches and will return with another meandering blog post about what feels best.

Advertisements

Add Your Thoughts

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s