Chris surely finds this useful but it is far more than I'd ever want in D&D. I'm not interesting in mandating certain character behavior, or mechanizing role-playing, or creating a new mechanic for my players to have to grok. But I still think some of the ideas he lays out can be utilized in an OSR brew. And like 50% of all OSR content, it breaks down as an add-in to character generation: Player Characters start as a tabula rasa. They don't have, nor should they have, detailed personalities or backgrounds. Any detail in that direction should be created and noted as smoothly as possible; in other words, something ripe for random generation.
The fun part is that this is an element that I'd leave entirely in the capricious hands of the random number generator. The specifics will never appear written down, the requirement to make thirteen additional 3d6 rolls will never make an appearance in my game, and the existence of its biases will be known only by me. If I want more knavish characters generated, I can slightly alter the balance of traits by changing a single number upward and from then on vices will appear more often than virtues. If I want to (and I plan to do this) weigh traits according to player character races, that is a slight addition to hard code and a slightly larger addition to make dynamic and from then on I can make Dwarves trend towards lustiness and piety, for example, while Elves might be indulgent and honest, and because the number crunching is done in secret there doesn't even have to be the appearance of balance.
That's what I've done with this little button here. It generates 3d6 scores for each of the 13 Pendragon traits, judges which ones are interestingly different from average, and then feeds out the top 3. It's also a lot heavier than it probably needs to be, code-wise, but that's because I intend to incorporate it into further character generator randomness. I didn't bias it either way, so heroes are as likely as villains.
Finally, a major reason I made this is that I want to work on my programming skills, something spurred on by Spwack's and Saker's own random generators. In that vein, I'll try to explain what I did and why below.
How does this work?
- The code generates an array of 13 elements, each of which is a 3d6 roll.
- I then define the traits, both sinful and godly, in two const variable arrays. The 13 numbers will be from here-on associated with the 13 traits respectively.
- The numbers in the array are checked for numbers differing greatly from average (what Chris calls "famous traits"), in this case being defined as greater than 13 or less than 8. Those that do move onward.
- I create an array that firmly combines the value of each with it's particular vice or virtue.
- I sort the traits in order of distance from an average value of 10.5.
- I include a statement that makes sure that something is output even in the case of no extraordinary traits, which would be the case if every value in the first array was between 7 and 14.
- I finally grab the highest (most different from ordinary) 3 traits and display them.
How do I utilize this for my own game?
- If you want to change the traits into something else, that should be obvious, just make sure the punctuation remains unaltered.
- If you want to make changes to the traits that represent cultural, racial, class, or other trends, the place to do that is listed but I haven't written that yet so you're going to have to write that yourself.
- If you want a different number of traits, modify "var trasBase" to have the desired number of "tra()".
- If you want to modify the frequency of traits, alter the "for" loop just below the virtues from the current values of 8 and 13. Shifting those numbers further from their average of 10.5 will produce fewer traits in a statistically predictable but un-calculated manner, while adjusting them closer will shouldn't appreciably alter results.
- If you want to change the number of traits displayed, alter "var slimTras" to something other than (0,3), which grabs each of the first through third traits.
- If you want all generated extraordinary traits to display, delete all 3 lines that reference "slimTras" and uncomment (delete the twin "/") the next two lines.