[pythian] Re: DESIGN - Experience

  • From: Darryl Long <pythianproject@xxxxxxxxxxxx>
  • To: pythian@xxxxxxxxxxxxx
  • Date: Tue, 06 May 2003 19:48:13 -0400



Bernard Osmond wrote:

>   aagh, mayybe i should go digging around in the mailing list archives...

I'm pretty sure it was on our old list (a year or so ago) and it's 
therefore lost.

>   so basically what you're saying is that your attributes are at the
> root level of the "experience tree" ( i couldn't think of any other way
> to describe it ), and then your skills are derivatives of either these
> attributes or other skills ( i'm thinking diablo skill tree style here
> -- ie you need a skill at a certain level before you can become
> proficient at another skill )

That's how we started (with a tree), but if you know anything about 
relational databases, you'll know why restricting it to a tree is a 
recipe for limitation and problems in something as complex as this skill 
system.

Basically, a tree structure restricts you to only two directions of 
travel from a node: to the parent, and to the children.  Since the 
children "derive" from the parent, they hold no useful information (in 
the situation of a skill system).  Therefore, only the parent is useful 
and we have only one source of information.  There are ways to work 
around this, but they are all just messy.  For some systems, a simple 
tree is most efficient, but not for us.

What if we want your Sword skill to derive from your Dexterity and your 
Strength?  If Dex and Str are both roots of their own tree, it is 
impossible.

Relational systems allows any node to connect to any other node.  By 
using a relational skill system, we have much more flexibility and the 
Sword skill example becomes trivial.  We simply have a "link" from Str 
to Sword, and a link from Dex to Sword.  There are more benefits as 
well, as I will show.

Your Str, Dex and Training control how good your are with your sword. 
But as I've already proposed, using your sword should benefit your sword 
skill.  Also, swinging the sword is physical effort, which should also 
benefit your Str and Dex.  Thus, when the Sword skill is used, Str, Dex, 
and the Sword Skill itself should increase slightly.  Thus, your 
character develops naturally both physically and mentally.

Specialization

Weapon specialization is another advantage.  Let's say you use a Bastard 
Sword a lot.  After a few years, you have 80% skill with the Bastard 
Sword.  Obviously, were you to pick up a Long Sword instead, you aren't 
going to suck at it.  You'll be good, but certainly not as good as your 
were with the Bastard Sword.  To model this, we can create a weak link 
between Bastard Sword and Long Sword, and even define a function to 
control how your work on the Bastard Sword adjusts your Long Sword skill.

For instance, we could define the function:

Change to Long Sword = Sqrt(Change to Bastard Sword)

Therefore, if your Bastard Sword skill increases by 100, your Long Sword 
will only increase by 10, and no matter how good you get at the Bastard 
Sword, you'll never be as good with the Long Sword unless you specialize 
with it as well.

The next issue is how to change your skill when you use it.  I suggest 
your skill should improve either when you train or when you use the 
skill, and these should be handled seperately.

Skill Develoment by Use

First I'll discuss use.  The likelihood of using a skill successfully 
depends on the "input" values of that skill.  For the Sword skill, the 
inputs are Str, Dex, and the skill's value.  We can define an equation 
for your "immediate" likelihood for successful use:

% chance success = InFactor(Str, Sword) * Str + InFactor(Dex, Sword) * 
Dex + InFactor(Skill, Sword) * Skill

where InFactor(X, Y) is the importance of attribute X when using skill Y 
(e.g. 0.25).

Whether this use is successful or not, other attributes will benefit 
based on the output values of the skill:

change to output = OutFactor(Str, Sword)

So for the Sword skill, your Str would go up by OutFactor(Str, Sword) 
(e.g. 0.0001) every time you use your Sword.

You can only learn so much with by using without training.  For 
instance, you might get really good at what you've learned already, and 
maybe invent a couple new little things, but training is essential. 
Until you train, your skill increases at a rate that lessens the longer 
you go without training, until your stop developing altogether.

For example, you train your Sword skill and finish your training with a 
Sword skill of 40%.  You can increase your skill via use until you reach 
48%, but then you stop increasing your skill, and only maintaining it. 
The closer you get to 48%, the harder it is to increase the skill.

Skill Development by Training

The other way to increase your skill, as I've mentioned, is with 
Training.  Training abruptly increases your skill by an amount based on 
the length of time you train, the skill of your teacher in the 
"Training" skill, and your abilities as a student.  In order for someone 
to train you, they must have a certain percent higher ability than you 
in that skill.  This percent varies by skill.  Your abilities as a 
student are based on your intellectual attributes.

The criteria that your trainer must be better than you by some percent 
mean that as your specialize more and more, it becomes increasingly 
difficult to find trainers.  This is also reasonable.  If you are a 20th 
degree black belt, good luck finding a trainer.  This slows down 
specialization as players specialize more, a realistic and 
gameplay-beneficial process.  It should ensure that there are few at the 
top of any skill, but many at the bottom.

Balancing with Forgetting

The next issue is balancing.  If everyone can run around using their 
skills all the time, eventually they will be able to specialize at least 
once in everything and become a "Tank Mage".  To counter this, we 
created a system of "forgetting".

If you do not use a skill for some time, you begin forgetting it.  You 
can forget the skill down to some percentage of your all-time maximum 
value, and this percentage varies from skill to skill.  Thus, if you 
have 80% skill with the Bastard Sword, and you stop using it in favour 
of a Halberd, your Bastard Sword skill would slowly drop.  If the 
"forget percentage" for the Bastard Sword skill was 75%, your Bastard 
Sword skill could only drop as far as 60% (80 * 0.75 = 60).

Note that if you started using the Long Sword all the time instead of 
the Halberd, your Bastard Sword skill would still drop, but much slower 
than with the Halberd.

If, at this point, you start retraining yourself with the skill you 
forgot, you will learn faster by some multiplier.  For insteance, the 
"remembering" multiplier might be 2, so you'll learn twice as fast up to 
your previous maximum value for this skill.

This "forgetting" system models real life in that if you stop riding a 
bike for 10 years, you'll still be able to get on it and ride it, but 
you'll be a bit shakey at first and you certainly won't be doing any 
cool tricks.  However, you'll get the hang of it pretty quick and you'll 
be doing all your old tricks in no time.

>   maybe you are making it a little too complex here. i think that the
> player needs to be able to 'head' his character in a certain direction (
> ie -- necromancer; so they become a mage and start using/learning spells
> and stuff like that until they are proficent enough to specialise into
> the specific area they want ) currently i dont understand how you are
> going to make it obvious enough to the player where they are heading.

Ha!  You thought it was complex before?!  hehe...

I've already addressed specialization in this email and my previous 
email.  You can specialize through use and training.

>   with numeric experience, or a numeric based system, the player can
> specify a skill set that they want to enable / upgrade and work from there.

They can do so artificially, instead of role-playing it.

> since it will be an integral part of our game, we want it to be simple
> for our players to understand and rock-solid.

Indeed, it needs to be easy for the player to understand, and you're 
probably thinking right now "Holy Crap!  The players will never be able 
to understand this system!"

That's probably true, they won't, but fortunately this is a CRPG and 
they don't have to understand it.  All the formulas and rules I've 
defined are for us, the designers and coders, to implement the system. 
Not for the players.  All they need to know is:

* Your skill increases when you use it or train with it
* Training helps you learn faster
* Not using your skills makes you get worse at them

which is really pretty simple.  I think the rest they will figure out 
quickly.  For instance, if the player decide he wants to be a 
necromancer, and he looks in his spell book and can't find "Raise 
Undead", he'll know he needs to go find someone who knows Necromancy.

Whew.  Ok, enough of that.

Darryl


Other related posts: