Monday, December 21, 2015

Average B/X Characters

I've been fooling around a lot with rolling 3d6 lately. I don't roll them myself, I have a little Python script roll them, but it's a lot of fun to look at what happens. Nothing too surprising actually, but still, worth a little post I thought.

Normally you roll 3d6 in order and see what you get. Well, for this post I am turning that around a little: I'll roll 3d6 in order as long as necessary to get 1 million characters for a certain class. Of course for clerics, fighters, magic-users, and thieves there's actually no difference: None of those require minimum ability scores in B/X. But when we get to dwarves, elves, and halflings you need to keep in mind that we're not looking at 1 million totally random characters, but one million totally random dwarves, elves, and halflings. Subtle difference? I hope you're still with me in any case.

Just rolling 3d6 in order is not enough. In B/X you get to perform prime requisite adjustment: Once you pick a class, you can increase a prime requisite of the class by 1 point if you in turn lower some other ability score by 2 points. That's somewhat of a subtle process because sometimes you might choose not to add another point to your prime requisite to keep a nice modifier elsewhere. For example, you may decide to keep Strength 17 and Wisdom 13 for a fighter instead of going for Strength 18 and Wisdom 11. True, in terms of overall modifiers you'd still be at +3 but maybe you really like to get that +1 to saving throws against magic? I have not modeled such subtleties directly because they seem too specific to the whims of a particular player. What I've done instead is to order the attributes that can be lowered by what I think most players would agree is reasonable:

ClassPrimeLowered in orderRationale
ClericWisdomIntelligence, StrengthPreserve melee potential
FighterStrengthIntelligence, WisdomPreserve saving throws
Magic-UserIntelligenceStrength, WisdomPreserve saving throws
ThiefDexterityIntelligence, WisdomPreserve saving throws
DwarfStrengthIntelligence, WisdomPreserve saving throws
ElfStrength, IntelligenceWisdomNo other choice
HalflingStrength, DexterityIntelligence, WisdomPreserve saving throws

Yes, the result of this is that I err on the "dumb side" of character generation, but since there's no simple mechanical game effect of high intelligence that seemed to be the reasonable thing to do. (One could make the point that thieves should reduce wisdom first because they need to be smart cookies and taking large risks during a heist would correlate with low wisdom, but that's beyond what the rules give us.) In any case, given these "lowered in order" rules, once I have a character that qualifies for a certain class, I use prime requisite adjustment to attempt to get those abilities pumped up as far as possible: First to get the best XP adjustment, then to get the best modifier.

Alright, now that I've explained how the characters get generated, let's get to the point of this entire post: What does the average B/X character look like? It's probably not too surprising for many of you, but here we go (I abbreviate Charisma with X).


It is perhaps not hard to understand how these numbers come about. Take the cleric for instance. The average roll on 3d6 is 10.5 so we start out with roughly the same average everywhere. Then we try to increase Wisdom at the expense of first Intelligence and then Strength. Note how in the average character, Strength is slightly higher than Intelligence. Starting at 10.5 we have a good shot that we actually rolled an 11 in both Strength and Intelligence. That would give us 2 points to raise Wisdom by, roughly anyway, so from 10.5 Wisdom we get to 12.2 Wisdom. All makes sense, doesn't it?

For demi-humans we first have to remember that we re-rolled all characters that didn't qualify for the class. Observe, for example, that for both dwarf and halfling the Constitution is higher than the expected average of 10.5 precisely because all rolls of less than 9 were removed before we even started. For elves we have an even higher Intelligence because not only did we enforce a minimum of 9 as part of the experiment, we're then able to increase Intelligence further because it is a prime requisite. If you compare halflings and elves you notice furthermore that the average halfling is stronger than the average elf. This is because halflings can reduce Intelligence and Wisdom to increase their prime requisites, whereas elves can only reduce Wisdom.

I should mention at this point that thieves in B/X are only allowed to reduce Intelligence and Wisdom. In BECMI, however, they are also allowed to reduce Strength. That leads to a slightly different average thief:

S 8.84   I 8.79   W 8.91   D 12.98   C 10.50   X 10.49

In a strange way, thieves are therefore "better off" in BECMI when it comes to their average dexterity score (their skills are a different matter). And hey, not only do they finally beat halflings, they also become the class most likely to have a 13+ in an ability (on average).

That's it for now on "average" characters. Of course there's an equally fascinating question in the air: What about "exceptional" characters? If you roll up a million dwarfs, how likely is it that you get an amazing dwarf? Sadly, since I am about to hop on a plane to Germany, that'll have to wait for another time. Happy Holidays!


  1. Very interesting, thanks for the info!
    Can you please share your Python code with us?

    1. I fully intend to. Right now it's so ugly that I'd be embarrassed to let me CS students find out. But I should be able to post it in a few days, just gotta deal with the flight and jetlag first. :-)

    2. Hi Peter, have you had a chance to refine this Python script?
      I would love to try it out.

    3. Sorry, I was focused on the LaTeX stuff I just posted, Alex had been waiting on that too. I'll try to clean up the script tomorrow. Tonight is New Year's and I'll have a few drinks!

    4. Hey Peter, are you still hungover from New Years... LOL

      Any chance to get to that Python code?

  2. Hmm... I really ought to add trading down other ability scores to boost the prime req to my ACKS henchman generator script. Never really considered it as feasible.

    1. It's not pretty. I found a nice way to encode the basic constraints (what can be traded and how) but the actual code is just a huge case analysis for demi-humans, ugly as heck. The human classes are easy (and pretty) in comparison.