Mischiefblog
I WATN 2 MAEK GAEM!

Advancing skill advancement

Posted by Chris Jones
On February 24th, 2006 at 15:24

Permalink | Trackback | Links In |

Comments (1) |
Posted in Design Journal, Python

I’ve been brought back to thinking about skills thanks to some responses to Abalieno’s thread on f13. I’ve written about skills versus levels before and also recently read a cogent, albeit minimal, comparison of level-based and skill-based games in Thor Alexander’s Massively Multiplayer Online Games (volume 2). Below are some of the formulae I’ve considered for skill improvement chances–there are a few not present as well because I don’t have my USB flash drive available to me at the time of this writing.

Skill improvement based on rating (simple, ala EverQuest)
rating ∈ [ 1, 2, 3, ... 250 ]
floor = 0.02 (the minimum chance a skill will improve)
chance = (rating / 280) + floor

Skill improvement based on rating (simple) (graph)

Skill improvement based on inverted rating (simple)
rating ∈ [ 0, 1, 2, ... 250 ]
floor = 0.02
chance = (250 – rating) / 250 + floor

Skill improvement based on inverted rating (simple)

Scaled skill improvement based on inverted rating
rating ∈ [ 0, 1, 2, ... 1000 ]
chance = ( rating2 ) / MAX(rating)2 * -1 + 1

Scaled skill improvement based on inverted rating (graph)

Hyperbolic chance to advance a skill
rating ∈ [ 0, 1, 2, ... 99 ]
chance = (TANH((rating – 50) / 100) – (TANH(0.481))) * -1

Note: I don’t think the S-curve is nearly strong enough, although it is present if you look at the generated table. The formula requires additional tweaking.

Hyperbolic chance to improve a skill (graph)

Skill use trends to determine when a skill advances (modified)
Skill influences have to remain small (hundreths of a point) to avoid large jumps in skill points.

  1. Perform the action
  2. Add the action to the most recent actions list
  3. If the most recent actions list is full
    1. Sum each each use of skill
    2. Append the sums to the skill influences list
    3. Recompute character’s current skill points in each skill line
      1. Average the sum the previous influence and the current influence.
      2. Set that average to the new current influence.
      3. Add the current influence to the current skill points, and set this as the current skill points.
    4. Clear the recent actions list
    5. If the trend influences list is larger than its limit, delete the head from the trend influences list

Note: I should reimplement this in Python for a skill-based game rather than a role-based game.

Pips (nod to Greg Costikyan’s Star Wars RPG)

  • On successful skill use, store one “pip” on the skill
  • If the character has six pips on a skill, the skill will increase by one point and clear the pips

Adversity Pips
On any skill use, ff the modified skill roll was within a range of {-5 . . . 5}, indicating near-success or near-failure:

  1. Store one pip
  2. Roll a random number in the range {1 . . . 6}
  3. If the random number is equal to or less than the number of pips stored on the skill
    1. Increment the skill rating by one point
    2. Clear the pips on the skill

Adversity Improvement
On any skill use, if the modified skill roll was within a range of {-5 . . . 5}, indicating a near-success or near-failure:

  1. Roll a random number in the range {0 . . . 100}
  2. If the random number is equal to or less than 25 increment the skill rating by one point

Adversity Variants: Near-failure {1 . . . 5}, Near-success {-5 . . . 0}, Superlative success/trivial tasks {75 . . . 100}

One Response to “Advancing skill advancement”

  1. Mischiefblog » Blog Archive » In defense of math Says:

    [...] Friday, I recorded some of the skill advancement systems I’d looked at, played with, or thought about. Sunday, HRose/Abalieno had comments about how math systems distance the player from the creative impulse that should be the heart of the game. [...]