As I noted in my previous post, I want to generate random character attributes (Str, Dex, etc). But I want them to be balanced — I want characters to differ in their talents but have the same overall ability. There are many ways to do this (e.g. see a discussion of such on rpg.net), but the natural way for me was to write a computer program to do it.
- Characters consist of six attributes in an order
- Attributes are rolled on 3d6 and modifiers calculated on the Mentzer/BECMI scale that LotFP uses
- Each generated character is checked against an acceptance rule. If they pass they go on the list to print, otherways they are discarded and a new one is rolled in their place
- Default rule is “modifiers must sum to +2”
- The program is set to produce a fixed number of characters per run. It will keep trying to generate them until it has that number
- If the acceptance rule always returns false, the program will run until the end of time
The code is set up so most of the above are easy to change and experiment with.
- Source code is at GitHub — Equal3d6
- Requires Python 3.6 or higher to run
- Offered under the 3-clause BSD licence
- Some sample 100-character outputs:
- Characters with sum +2 modifiers as described above – raw attribute values
- Characters with sum +2 modifiers as described above – attribute modifiers only
- Characters with sum modifiers of +1 or +2
- Approximates the LotFP mean modifier sum of +1.5
The Rolling Ritual
Given a hundred random characters, players can roll d100 to select one. Done.
But… I make it more of a ritual:
- I brandish a print of the 100-char list, and explain the process. I speak with… solemnity? Mirth? Both? People tend to grin — they pick up on my excitement.
- I tell the player to roll d100 and tell me the result
- I strike through the corresponding line on the list, and note the player name and date next to it
- (if the line is already used, I tell the players that (including who and when), then move down one)
- The printed list thus becomes a historical artefact, and gains gravitas with each use
- I tell the player to call out the attributes one by one in the order they appear on the character sheet. As they do so, I give them the next value going left-to-right
- I think that “order they appear on the character sheet” does matter — the order is arbitrary, but the consistency enhances the ritual qualities of the process
- I encourage the other players to get involved in discussing “who this might be”
Strengths over rival methods
- At the table, all you need is the list and 2d10
- Once you have the list, it’s quick – maybe quicker than rolling because it calculates the modifiers
- Given the program, it’s easy to change your rolling method, modifier calculations, and acceptance rules
- It lends itself well to ritual, as described above
- The statistical properties of the 3d6 roll (the bell curve) are mostly preserved
Known Faults and Limitations
- Strict acceptance rules (and the “must sum to +2” rule is fairly strict) reduce the variance not just in characters but in the their individual attribute scores. E.g. a character having even one score at 18 is much less likely than it is under pure 3d6-in-order.
- To see this, look at the standard deviation of raw values that the program prints — this stricter the rule, the smaller it is.