Friday, July 14, 2017

Point-based character generation and the effects of background stories

Hi everyone!

Today I started concerning myself with an issue that has raised quite a lot of discussion, anger, disappointment and a mix of other reactions: point-based character generation and the effects of the background stories on final attributes. There is a ticket for the issue and there were many discussions and concerns both on the official ADOM forums and the Steam forums (and maybe other places). So it's time to improve this.

My current line of thinking regarding improvements to point-based character generation are the following:

  • Background stories should only serve to modify the pool of points available to you (thus they are generated but do not affect your attribute scores directly).
  • Point-based character generation should not become a random game itself, e.g. the bonus points from the background story pool probably should be fixed depending on your gender/race/class combination. Otherwise point-based character generation would become a kind of parody in itself.

As the effects of background stories are random (even for a specific story segment in some cases) and there is a huge variety of stories (which partially also depend on race or class) I wrote some code to analyze the effects of backgrounds on your character and determine the following data:

  • What is the possible range of attribute modifiers due to background stories?
  • What is the effect on bonus build points that should be provided for point-based character generation? (my idea here is to derive the bonus points based on attribute costs and average attribute modifier due to the background stories of given gender-race-class-combinations)
  • What is the effect on permissible attribute minimum and maximum scores? (as during character generation the modifiers from background also modify those limits; but: if you do not pass your minimum/maximum due to race/class there are no effects - so it's not quite straightforward)
Due to the mentioned random effect my analysis code simply runs through all combinations of gender, race and class and then rolls a certain number x of random characters, totalling the effects on attribute scores due to background stories (for the simulation all attributes start at the human average of 10). The current standard costs of attribute points (5 for strength, 4 for learning, 3 for willpower, 4 for dexterity, 4 for toughness, 2 for charisma, 1 for appearance, 4 for mana and 3 for perception) were assumed.

Based on the above assumptions my analysis yielded the following results:

Bonus points for point-based character generation

If background stories do not provide attribute modifiers during point-based character generation, the following effects on the number of replacement bonus points were observed:

  • The global average number of bonus points for attribute generation (not attribute points!) is 10.
  • Bonus points for point-based attribute generation run between 0 (zero) and 28, depending on your gender-race-class-combination.
  • It's the barbarians which are very unbalanced regarding background stories - for most races they would get the 28 bonus points.
  • Mist elves are worst of as far as background stories go - on the average they would receive 0 (zero) bonus points.

Attribute ranges

This is a rather interesting text as I ran many more rolls than most players probably ever will have in their lifetime (10.000). As background stories are strongly random, more rolls tend to expose the more extreme cases.

Thus here we go with the global attribute scores (across all gender-race-class-combinations) after 10.000 rolls for each combination (the results show minimum, maximum and average):

strength: 2-17/10
learning: 1-21/10
willpower: 5-18/10
dexterity: 5-17/10
toughness: 2-18/10
charisma: 1-19/10
appearance: 3-17/10
mana: 3-18/10
perception: 5-16/10

With but 1000 rolls the ranges look like this (in my random sample):

strength: 2-16/10
learning: 1-21/10
willpower: 5-17/10
dexterity: 5-16/10
toughness: 2-18/10
charisma: 1-19/10
appearance: 3-16/10
mana: 3-17/10
perception: 5-16/10

(interestingly the average number of build points in this run was 12 - thanks, RNG ;-) )

With but 100 rolls for each combination you get the following ranges (in my random sample):

strength: 2-16/10
learning: 1-21/10
willpower: 5-17/10
dexterity: 5-16/10
toughness: 2-17/10
charisma: 1-19/10
appearance: 3-15/10
mana: 3-17/10
perception: 5-15/10

And finally with but 10 rolls for each combination we are here:

strength: 3-16/10
learning: 1-20/10
willpower: 5-16/10
dexterity: 5-16/10
toughness: 3-17/10
charisma: 1-18/10
appearance: 3-15/10
mana: 3-17/10
perception: 5-14/10

(surprisingly female ratling barbarians managed to score a whopping 37 bonus points in this simulation)

It is obvious that point-based character generation never will (or even should try to) replace the extreme effects of good or bad luck with randomly rolled background stories. So whoever complains that he got better attributes with random attribute generation than with point-based generation will be out of luck.


So what could be done to improve point-based character generation? I see many options:
  • Adjust attribute minimums and maximums by the results from above simulation to allow for a much wider range of attribute scores. I definitely lean towards this. I probably would take the modifiers from a run of 100 or 1000 simulations in order to flatten out the extreme results (randomness should remain good for the occasional wow effect).
  • Hand out the global average of bonus points (10) and be done. That's not much more to play with but it would represent average reality.
  • Hand out double the global average of bonus points (20). This would allow for more variance and is a strikingly simple approach.
  • Hand out the average amount of bonus points determined for each race-class-combination. This would reflect the realities of the current game (on average).
  • Hand out double that amount (a combination of realistic approximation and heroic gaming).
  • Do something totally different.
Now it's time for your input - let's hear your thoughts in the light of this analysis :-) !


  1. I'm not a statistics guy, so I would default to what others have to say, but if I had to choose I would go with the first option (where you adjust based on your simulation). I know a lot of people would appreciate having a wider range to distribute.

    I think the big issue was from the randomness of the background modifiers, so if that is taken out of the equation I think people will be happier with it.

    Hopefully Raven can catch up with the art soon with all these new changes. I want to play with all of this soon ;)

    1. Also, not that this appropriate for this blog post, but when do you think we will get to hear your special announcement? We are halfway through July, and we are getting anxious waiting for it :P

  2. I really like any options that "allow[s] for a much wider range of attribute scores".

    As a point-based enthusiast, what I really want is more meaningful options. I'd either like to be able to lower some scores for more points as well being able to increase others; or for them to all start low and for me to have a ton of points to spend.

    I'd also like to be able to force unusual stat combinations, for example, high Strength Necromancers so I can build around Shadow Touch, or other niche builds.

    In point allocation systems I've seen elsewhere, low stats are cheap and high stats are expensive. EG raising Strength from 3 to 4 costs less than from 10 to 11, but raising it from 19 to 20 costs even more. I like that approach, but it is another layer of complexity on an already complex system.

    1. I second Kevin's argument--the whole intereset of point-based genenration is being able to make the character you want, even if the distribution is unusual or suboptimal. So start with lower stats, increase the range of possible values, and hand out more bonus points.

  3. I like wide range of scores as well. I use points based to do weird builds sometimes.

    Also I want to see what my final attribute points are in game when I assign them in character creation. I hate that randomness kicks in after point distribution. Point distribution should be the last thing that happens after all background, class, race effects etc.

  4. I think the distribution of ADoM players is probably bimodal when it comes to character generation.

    Player A likes the RNG with it's possibly great, possibly woeful starting characters, and doesn't really want to use points-buy at all (much like AD&D 1e).

    Player B likes precise control over the points distribution and the way the character turns out. They have favourite builds and like to try new things (As you have in D&D 3e+).

    There are certainly going to be players between those extremes, but I think those extremes are where player preferences cluster. My guess would be that player A most wants ADoM character generation as it was just prior to the opening questions mechanic, and that player B wants all characters to start with their race/class minimums and have a bunch of points to play with - and no background effects on attributes.

  5. In RPGs in general there are two camps, and I sympathize with both.

    I see an apples/oranges problem in balancing the two options, because:

    1. There is an undefined value to being able to choose what to put points on, which is fairly high, especially in a system where some attributes are more valuable than others.

    2. Some players may choose to try to generate and delete many characters until they get a lucky one.

    In general, being able to micro-manage the allocation of points is a huge advantage, but tricky to quantify. Being able to abandon weak random characters is an even harder thing to quantify, and would be good to make not be an effective technique, but that may be hard to do without causing other problems.

    Another approach could be to assess the total value of each character, and assign some secret balance points that balance that, which have some other meta-chaotic effect. Seems like an ADOM-y thing to do. It might be good to have it always be positive rather than negative. So if you start with a strong character, you know up-front that you have those strengths. But if you start with a really weak character, the game will toss in some nice unknown karmic bonuses somehow/somewhere, which you'd have to play to discover.

  6. Yeah, results shown here look like just a normal distribution. Extreme arrtibute values are extremely rare and average are common. Matches theory. It would be nice to re-run generation of 10000k and count how much times attribute got a certain value. Then if you plot them you'll see normal distribution and it would be easier to decide where to "cut the line".

    A good example could be adventurer character generation in Dwarf Fortress. There you're able to choose as high value for an attribute / skill as you want. However extremly values cost you more than one point from the pull.
    E.g. let's say 15 is an average for a particular attribute and values from 10 to 20 we consider normal. I have a pool of 10 points. I can put 5 points on the attribute to make it 20 and my pool will change to 5. If put one more point it will be 21 but my pool will reduce to 3 (it will take two points). If I want 22 it will recude pool to zero take 3 points.

    So that on the one hand you're not limiting players from extremely maxing out an attribute up to the value random generation could ever produce, on the other hand you're not giving a way to max out all attributes for free.

    As for the lower bound. If I'd like to play with PC on attributes close to zero or sacrifice them all to get a couple of additional points to the attribute I'm trying to max out - why not? As long as it is possible for RNG to produce...

    You know, those who like to take control over creation won't be happy by being constrained a lot... Tristan Gall has a point.

  7. Gender/race/class could simply provide the minimum and maximum values of each stat. Then Provide enough points to create a completely average character(HC style); add up the points in between the min/max of each stat and divide by two. This gives a completely versatile character template for point distribution.

    Creating a modifier for adjusting final score that increases or decreases this base average by a percentage of your (dev's) choosing allows players to increase and decrease the difficulty of the game by choosing to have an easier or more difficult start (generally 10% and extremes to 25%).

    I admit this is 'old hash' but it's solid. If including RNG is more appealing each stat could roll twice for a possible increase or decrease in the min/max, once for decrease and once for increase. This value could be anywhere between 25% and 50% for minimum roll and 15% to 20% for max. This could affect points available as the random minimums should have an impact. If I had the time I could nail down accurate values.

    P.S. weaker attributes may need to cost extra points to compensate for the potentially inflated point gain from the strong attributes. This can also be determined by race and class.

  8. While I love the idea of a wider range of characters (option 1) - there are some days while playing ADOM that one wants a very specific build.

    I say make option 1 happen, but why not also allow an option (perhaps after completing the game) to make a custom crafted class? EG, make a straight out point allocation system with diminishing returns on an initial pool of points for each pool of skills, attributes, spells, abilities, etc, then allow the user to name the class and play with their own super-customized character?

  9. I want to be able to make a strong character.

    WIth high stats without having to reroll a thousand times.

    "Oh good learning, but terrible strength"

    "oh good Toughness wizard, but his learning is terrible"

    SO annoying and waste of time to reroll over and over. and then you get a good build finally and a lightning vortex one shots you.

    We should be able to see the final points on the first screen, not after the character generated.

    I want to be able to consistently roll strong/powerful character without having to reroll a million times, and hope I don't get killed right away.

  10. I would say i prefer the background approach but inform the player what effect each background has on the character (since I almost always look up what effect each of the background chooses have on the character).

    1. And maybe show what your that current effect of the background modifiers are. (not every has the memory to add up the total as it goes)