[crossfire] Progressive exp table and removal of a bad hack: death_penalty_levels

Raphaël Quinet raphael at gimp.org
Sat Sep 2 17:57:16 CDT 2006


Note: this mail is a bit long.  If you want just the summary, jump
down to the "Proposed solution" below and read the last paragraphs.
If you do not understand or if you disagree with this proposal, then
maybe you should read the whole text.


I would like to remove the option "death_penalty_levels", which limits
the number of levels that can be lost when a player dies.  After
analyzing the reason why this option was added, I am now convinced
that it is the wrong fix for just one symptom of a deeper problem: the
interaction between the exp_table and the "death_penalty_percentage".
Using this option hides a part of the real problem without fixing it.
I would like to remove this option so that we can find a solution to
the real problem.

First, a bit of history: several years ago, crossfire had only about
20 levels (and no skills, but this does not matter much).  The formula
for the experience loss on death was added and the default percentage
was set to 20% (this is now configurable: "death_penalty_percentage").
The experience table was revised a couple of times, with some attempts
that were a bit more linear while others were more exponential.  After
a while, this table evolved to something similar to the first levels
of table A: basically, reaching the second level required 1000
experience points and then each level required twice as many points as
the previous one: a 100% increase per level.  Due to the limited
number of levels available in the game, gaining a level was a big
thing that required several hours.  On the other hand, losing 20% of
that experience did not always imply losing a level because the
relative increase between levels was about 100%.

Later, the number of levels was greatly increased and eventually
reached the 115 levels that we have today.  Skills were also added in
the meantime.  After a few revisions, the experience table A was
introduced: the lower levels require a 100% increase in exp points
between levels, then the relative difference between levels gets
smaller and smaller: above level 90, increasing the exp points by only
1% is sufficent to reach the next level.  This flattening of the curve
was introduced because near the higher levels, even a small relative
increase of 1% represents a large amount of experience points.  The
consensus was that it was difficult to gain so much exp easily so it
was better to use a curve that becomes almost linear near the high
levels (except for levels above 110, for which a larger gap was
introduced).

But this created two problems:

1) Contrary to what was expected, it is not very difficult to gain a
   lot of exp near the high levels.  Due to the availability of high
   level monsters and deep dungeons with a lot of monsters, the player
   can still collect points almost exponentially while the exp curve
   becomes almost linear.  As a result, it takes less time to go from
   level 50 to level 100 than it takes to go from level 1 to level 15.

2) The death penalty was still 20% of the exp points (plus a stat
   loss).  Because the ratio between levels was increasing only by
   about 1% near the high levels, losing 20% of the points meant
   losing a lot of levels: a level 100 player could drop down to level
   85 by just dying once.

A solution was found for the second problem: introduce a limit to the
number of levels that can be lost at once.  The default value of
"death_penalty_levels" ensures that a dead player will not lose more
than 3 levels.

Although this seemed to be a good solution at that time, I am now
convinced that it did more harm than good.  This did not solve the
first problem; on the contrary, it even made it worse.  The option
"death_penalty_levels" increased the gap between the high level
players who would never lose more than 3 or 4% of their experience
points while the low level players would still lose the full 20%.

The real problem comes from the exp_table: the players can collect exp
points almost exponentially even at relatively high levels.  If this
had been known when the curve was designed, it would have been better
to keep the same ratio between successive levels instead of decreasing
this ratio near the high levels.  Then it would not have been
necessary to introduce "death_penalty_levels".  For example, if the
ratio between successive levels would be 10% (for low, medium and high
levels), then a penalty of 20% would always represent about two
levels.  With a ratio of 30%, the penalty of 20% could never cause the
loss of more than one level.  This does not work with the current
system, which uses a ratio of 100% for the lowest levels and 1% for
the highest ones.

Proposed solution:
- Get rid of death_penalty_levels.  This option hides the real problem
  instead of solving it.
- Switch to a new experience table that uses a constant ratio between
  levels for most of the table.

Yesterday, I mentioned that designing an experience table before
having reliable measurements aobut how much time is really spent for
levelling up was like putting the cart before the horses.  But I have
changed my mind since then.  I am now convinced that instead of trying
design the "perfect" experience table and adjust the curve according
to how experience is gained in real games, it would be better to start
by selecting a new curve that is based on a constant ratio for most of
the table and then adjust the parameters of the game (exp given by
some monsters) to this curve.

We still need to measure how experience is gained.  But this data will
be used to increase or decrease the sources of exp points in the game
in order to ensure that a reasonable amount of playing time is
necessary for each level according to the new exp_table.  Doing the
opposite (trying to adjust the exp_table according to how exp is
gained) will never solve the problems associated with player deaths
and the differences between high- and low-level characters.

Note that I have updated the wiki page:
  http://wiki.metalforge.net/doku.php/dev_todo:exp_table
I have now included two proposed exp_tables: the same as yesterday,
renamed "Table D (Progressive 12%)" because each level (except for the
lowest and highest ones) requires 12% more points than the previous
one, and a new one called "Table E (Progressive 15%)" because each
level (except for the lowest ones) requires 15% more points than the
previous one.  I have also updated the graphs, which should be easier
to read now.

-Raphael



More information about the crossfire mailing list