By Miguel Guzmán Miranda (Aglanor)

Based on Bryce Harrington's Circe

With design and comments by:

Hans Häggström (zzorn)

Damien McGinnes (damien)

Joel Schander

Niels L. Ellegaard (Niels)

Bear (bear)

Kai Blin (nowhere)

Hipólito Guzmán (Paul-E)

Draft Edition – Version 0.0.2 – October 2002

Copyright 2002 Miguel Guzmán Miranda

Published under the GNU Free Documentation License


The following Skill System is intended to represent a realistic model of the competences and learnings of a character. The Skill System will model the learning of knowledge, the acquisition of theoretical and practical experience that a character can use in order to better perform tasks.

The Skill System should have the following core requirements:

Design Guidelines

The Skill System must model a complete learning process that contemplates the following aspects:

Skill improvement:

Skill improvement progression:

Skill improvement by actions:

Different actions give different improvements:

Skills depend on other skills:

Skills degrade over time when not practiced:

A combination of theoretical and practical knowledge makes it easier to progress:



The Skill Tree Model

The Skill Tree Model is a mathematical modelization of a set of skills in order to accomplish all the design guidelines listed above. There's no need for the skill system to be modeled as a tree, it could be modeled for instance as a neural net, but the tree model has a good balance of complexity and realism so it is proposed as the default model.

The purpose of the Skill Tree is the abstraction/specialization of classes. Nodes near the root are abstract skills, nodes near the bottom are specialized skills.

When a character uses a skill, its effective skill is computed along the branch which leads to that skill. When the character learns from the use of a skill, the experience is back-propagated, or "harvested", to its up-branch. The amount of "abstraction", or experience that a skill passes to its parent, is determined by the skill itself and by its siblings (skills child to the same parent as the current one), so a broadened knowledge allows a character to abstract experience.

These concepts will be now further detailed:


A Skill is the measurement of the character capacity of performing a certain task or group of tasks. A Skill is a node on the Skill Tree.

The Skill Value of a Skill is a value assigned to a skill, in a scale ranging from 0 to infinity.

The Skill Tree is the collection of the Skills of a character.

A Root Skill is a root node on the Skill Tree.

A Leaf Skill is a leaf node on the Skill Tree.

For a given Skill, its Parent Skill is the parent node in the Skill Tree.

For a given Skill, its Child Skills are its children in the Skill Tree.

For a given Skill, its Sibling Skills are all the children of its Parent Skill except itself.

Propagation is a calculation that is performed in a tree, subtree or branch, from root to leaves.

Back-Propagation is a calculation that is performed in a tree, subtree or branch, from leaves to root.

An Applied Skill is a Skill which is used an input to an Action.

An Effective Skill Value is a numerical value calculated for an Applied Skill and given as an input to an Action.

Experience (XP) is an abstract term representing a quantity of learned methods, procedures and tricks.

Experience is measured in an abstract unit named Experience Points.

In a Skill, there are several Experience Pools:

Effective Experience (EffXP) is the amount of Experience Points stored in a Skill. The Effective Experience is used to calculate the Skill Value.

Unassigned Experience is the amount of Experience assigned to a Skill for improvement of its Skill Value.

Forgotten Experience is experience previously stored as Skill Experience lost due to Skill lack of usage.

Experience Gain is the amount of Experience that an Action returns to the character once that action is performed.

Character Skill Experience is the added Experience of a Character Skill Tree.

The Skill Tree

The Skill Tree: this is the whole collection of skills, organized as a tree. A skill is a node in the tree, except perhaps the root which may not be a skill. A branch skill is one that can have children, a leaf skill is one that cannot have children.

Skill: a skill is a node in the skill tree. A skill has a definition (i.e. “blacksmithing, difficulty 3”) and also has experience pools. The experience pools determine the knowledge and expertise of a character in that skill.

Applied Skills

An action may specify a needed input of one or more skills (Applied Skills) The Character System asks the Skill System for a Skill that can be an Applied Skill on that action. It may or may not be a Leaf Skill, but usually it will be a Leaf instead of a Branch. If the Applied Skill requested for the action is not possessed by the character, its Parent Skill is assigned as the Applied Skill instead. Another method would be to actually generate the Applied Skill with value 0, and also if needed all the Skills that would compose the missing branch, with value 0 each, this leads to more Propagation calculations, as described in next paragraph, but models more accurately the learning of Leaf Skills, see Back-Propagation of Experience, below.

Skill Values and Effective Skill Values.

A skill has a Skill Value (SV). For a Skill, its Skill Value is the measurement of the character expertise in the skill. SV is calculated from the EffXP pool via a formula. This formula can be of increasing cost, such as a logarithmic function. Skill Value is not increased or decreased by actions and experience gain or loss. Instead, EffXP pool is modified and then Skill Value is recalculated.

A Skill has also an Effective Skill Value (ESV) which is a measurement on how the character would perform an action that required the use of this skill. ESV does not only comprise the knowledge on the skill, but also on the more generic skills for the actual one. The Character System uses the ESV as a base and modifies it to provide the action system with a character's ability to perform a task.

The Effective Skill Value for an action is determined by Propagation along the branch which starts in a Root Skill and ends in the Leaf Skill which will be used as an Applied Skill for the Action. The term "weight" is used for a fuzzy measurement of the importance of a node in this Propagation.

The details of the calculations needed for this Propagation are left to the implementation. For the sample implementation, ESV is calculated by adding the SVs of the propagation branch from the node to the actual skill. In the following sample tree, SVs are marked as () and ESVs as []:

Smithing (3) [3]

Blacksmithing (7) [10]

Armorsmithing (4) [7]

The Experience Pools

The experience pools is where different amount of experience are stored. The logic of the system determines how the experience flows between those pools. The Golden Rule is: only the Effective XP pool determines your Skill Value.

Effective XP pool: this pool reflects the experience you have already learned, practiced and assimilated. This is what you know how to do. Skill Value is a function of EffXP.

Theoretical XP pool: this is what you know. The theoretical XP pool reflects your knowledge of a skill.


Theoretical XP is at least as much as base XP, it can never be less than base. If you train a skill on your own, you get a knowledge on how it works. Even if this knowledge isn't academic and it's only given by practical experience, it is considered also theoretical XP, because you know how it works even if you couldn't explain it or write it down.

Theoretical XP can however be greater than base XP, meaning that you have studied theoretical knowledge that you haven't yet put into practice, i.e., you don't fully know how to perform it. When theoretical XP > EffXP, unassigned XP flows faster and with a higher return to base XP.


Unassigned XP pool: here is stored the practical experience given by actions that has not yet been assimilated in the base XP pool. It is assimilated at a faster rate and with a higher return if your theoretical XP pool is higher than your base XP pool., i.e.: you assimilate practice faster if you've studied the theory beforehand.

Forgotten XP pool: base XP can flow here representing lack of usage of a skill, and thus forgetting it. Forgotten experience can make unassigned XP flow much faster to base XP that even theoretical knowledge does, representing that performing something you once knew how to do makes you remember the techniques and thus coming back to the previous skill you had.

Skill Improvement

(backpropagation of experience)

The Experience gained by performing an Action is distributed via Back-Propagation in the branch of the Applied Skill, in an algorithm with the following philosophy: in a given level, the experience is split between the Skill and the Parent Skill in a way proportional to the number and values of the Sibling Skills it has. The more Sibling Skills and the greater their Skill Values, the more percentage experience is given to the Parent Skill. This represents that a wide knowledge on a field allows a character to abstract knowledge, and the abstracted knowledge is more useful and valuable because it can be used in more situations (the more XP that is back-propagated, the higher the Skill Values that will be propagated to a wider variety of Applied Skills later for future calculations of Effective Skill Values).

It's important to note that Experience Gain is in no case wasted. The EG that is not back-propagated to a Parent Skill remains in the current Skill. Thus, every EG is always used.

The Experience Points left in a Skill once the Back-Propagation of the Experience Gain is finished is added to the Skill Experience for that Skill, and used to increment that Skill Value. The amount of Experience someone has in a Skill determines his Skill Level via a formula that may or may not be specific for each Skill. This formula gives a Skill Value from a Skill Experience, i.e.: SkillValue = f(SkillExperience). Usually this formula will diminish returns with increased magnitudes of Skill Value and Skill Experience (a typical example is a logaritmic function, meaning that the experience cost is exponential).

Note that it is not really necessary to store the Skill Experience for every skill, the current Skill Experience can be calculated using the inverse formula. Thus, given the current Skill Value and the amount of added Experience Points we can calculate the new Skill Value as: NewSkillValue = f( f^-1(SkillValue) + ExperiencePoints). Why, then, do we need Experience Points at all? Because the Experience Points are given by the Action based on the task performed, and the Action does not know anything about the character and its current Skill Values, all the Action knows is that it has been performed, and based on the performance it should return a given amount of Experience Gain, equal for other performances of the same Action with same results. Characters with lesser Skill Values will benefit more from performing the same Actions, even if the Experience Gain from it is the same.

(TODO: this can be modified, we may let Action give XP based on character's circumstances. This is to be discussed).

Unassigned Experience


Forgetting Skills

If a Skill is not used in a period of time, it can be forgotten. When a skill is forgotten, an amount of points from the Skill Experience pool go to the Forgotten Experience pool. The algorithm to perform this process is left to the implementation.

If a Skill has Forgotten Experience amount greater than zero, the Experience Gain for the Skill is first used to retrieve the Forgotten Experience to the Skill Experience pool. The algorithm that specifies the cost of "buying back" Skill Experience from Forgotten Experience spending Undigested Experience is also left to the implementation, but it is recommended that this cost remain considerably cheaper that the usage of Skill Experience to increase Skill Value. This intends to model that re-learning something you have forgotten is much easier than learning something from the very start.