This is part of my RPG series of entries here at SOB. See the inaugural entry in the series for more details.

Remember me — The Hacker GM? I wrote another program that provides support for GMs like me, this time to fulfill the need for someone running a game in which I’m a player. Whereas a previous program I wrote, called pfconv, is used to perform XP conversions from D&D 3.5 to Pathfinder RPG for character level advancement, this one is used to generate an attractiveness score for a character based on stats on the character sheet.

There’s Always A Backstory

My SigO ran the first session of a Pathfinder RPG campaign tonight, using book one of the Rise of the Runelords Adventure Path. I’m really enjoying playing my character, and my SigO is doing a great job of running the game thus far. The whole session was introductory stuff, social interaction, and setting the scene — and thoroughly enjoyable. I think the session basically ended just before we would have rolled initiative for our first combat encounter, but I won’t know for sure until next time we play.

A couple days ago, while she was doing some preparatory work for the game, my SigO went searching online for ways to determine the physical attractiveness of characters. Basically, she was looking for a way to determine something like the old-school Comeliness attribute from first edition AD&D. Part of the reason she was looking for something like that was the fact that I’m annoyingly insistent in games I run that physical attractiveness is not simply identical to one’s Charisma, because Charisma encompasses a hell of a lot more than the attractiveness of one’s appearance. As such, I reason, it’s entirely possible to have a character with a Charisma of 6 who is surly, socially inept, and unable to intimidate sixth grade children, but is still quite attractive in a purely physical sense, or to have a character with a Charisma of 15 who is affable, able to intimidate with a single brief glare, and the consummate social butterfly, but has a face like a waffle iron with a grotesque physique and poor hygiene.

Of course, it’s still nice to have an idea how attractive people are, even if Charisma doesn’t correspond exactly to attractiveness. Thus, her search for a means of determining attractiveness. What she found was someone’s D&D Variant Rule: Comeliness as a homebrew formula.

The Problem

I had one look at the formula and mentally gagged. Basically, what the formula boiled down to was the following:

(STR + CON / 8) + CHA / 2 + 3d6 / 4 + (racial modifier)

There are charts of racial modifiers on that Comeliness variant page, of course.

I vaguely recall a system for calculating a Comeliness stat in AD&D that basically just involved rolling a seventh attribute, then applying a Charisma-based modifier, granting Comeliness attributes ranging from something really low to something really high. A final racial modifier would then be added, if applicable. All told, it’s a much simpler system than the above:

3d6 + (CHA modifier) + (racial modifier)

(Edit: I found a page that explains First Edition AD&D Comeliness Rules.)

Just creating a completely new attribute as in first edition AD&D always seemed a little too arbitrary to me. It also stole some attention away from other attributes, so that when creating a character whose concept involves some reasonable level of attractiveness you’d have to give up stats that actually make the character more useful in an adventuring party, while being happy with a hideous character grants significant benefits for making a character who is combat effective, at least when some means of character creation other than the purely random is used. I guess the argument could be made that really ugly people have to defend themselves more from bullies as they grow up, but suggesting that ugly people are always better fighters than pretty people seems a bit limiting in terms of opportunities to develop varied character concepts.

I find the multi-attribute based formula from the rule variant page even more problematic, though. I could see using Constitution and Charisma to help determine attractiveness, with the assumption that being healthier is better for attractiveness to those with a more or less innate biological imperative to mate with you, but the way Strength is included bothers me deeply.

Consider which you think should have a higher attractiveness score — a classy, waiflike Audrey Hepburn (and there’s another, very different photo of her here), or a body builder like this lovely lady? I’m sure there’s room enough in the world for both to be considered ravishingly beautiful to someone, but the majority would probably choose Ms. Hepburn in the prime of her young stardom. The latter picture isn’t even an 18 Strength — it’s probably more like a 16.

The same goes for men, though there is obviously a greater upward bias on the attractiveness of apparent strength. Still, I think the attractiveness would probably pass its peak before you got to the level of Mr. Olympia Ronnie Coleman and Olympic Men’s Weightlifting gold medalist Hossein Rezazadeh, pictures side-by-side here — arguably the strongest-looking man in the world and the actual strongest man in the world in 2004. As such, I think perhaps a different standard for attractiveness is called for than one that simply assumes an 18 Strength is always more attractive than a 10 Strength.

The Solution

I decided to write a program that calculates appearance based on all of a character’s attributes. After all, attractiveness in the general case is affected by mannerisms and other less strictly physical characteristics as well as the purely material state of one’s body. Usually, people are less attractive just after they’ve been knocked out by a blow to the head, in my experience — so there must be something to the way one holds oneself, moves, behaves, and even looks at the world through his or her eyes that affects attractiveness to others.

Since Charisma is traditionally the attribute that affects attractiveness most strongly, and in fact includes attractiveness to some extent according to the standard rules of D&D and Pathfinder RPG, while Intelligence and Wisdom probably affect it the least, I weighted the various attribute scores differently in my calculation. The weighting looks something like the following, where the number associated with each is a divisor (thus making higher numbers less important):

STR 03 DEX 04 CON 02 INT 08 WIS 10 CHA 01

Basically, this means that each point of Dexterity is worth twenty-five percent as much as a point of Charisma for determining attractiveness, while each point of Wisdom is only worth ten percent as much. This is because a high Dexterity assumes one moves with a certain amount of grace and the character’s build is well-proportioned, while Wisdom is altogether more ephemeral and less outwardly obvious.

The way I handled Strength is a bit more complex than the other attributes. Rather than just giving a weighted value to each point of Strength, I measured the value of one’s Strength score in terms of its difference from an “ideal” Strength for determining attractiveness. I picked the number 10 out of the air for women, and 15 for men, based on the fact that (in my experience, in Western cultures) men tend to prefer women who aren’t obviously too strong or too weak (i.e., too far outside an average range) and women tend to prefer men who fit into a fairly normal business suit but still have good muscle definition under that $3000 Versace tuxedo. Thus, for a man, a STR 16 man is as attractive as a STR 14 man, all else being equal — with a STR 15 man being (only marginally) more attractive than both. The same goes with comparing a STR 11 woman and a STR 9 woman to a STR 10 woman.

I picked 10 for women, by the way, on the assumption that men who prefer a more athletic looking woman (say, STR 12) and men who prefer the waiflike look (about STR 8) probably balance out, on average.

Because we have the Player’s Guides for the Rise of the Runelords, Curse of the Crimson Throne, and Second Darkness Adventure Paths available to us — particularly the third of those — I decided to include some consideration for the use of the Traits rule presented there. The rules for Traits were not really finalized until the Second Darkness Pathfinder Companion, which works out pretty well, since that’s the book that includes the Charming Trait, which basically gives a character an advantage for working his or her wiles on those who are potentially attracted to the character — thus implying the character possesses a certain amount of attractiveness.

I intend to flesh out a more nuanced Trait system than can be found in the Second Darkness Pathfinder Companion, but for now (since I haven’t done so yet) the only Trait that can affect attractiveness score calculations is the Charming Trait. I’ll add more as needed later — such as something that’s desperately needed to account for the pathetically poor attractiveness of a character created by my SigO, though the guy’s attributes suggest a higher attractiveness as my attractiveness score calculator currently stands. I’ll save my thoughts on how I’ll develop a modified Traits system for another time, though, since it’s a little off-topic for this discussion.

I’ve also added in some modifiers for various races. At the serious end of the spectrum, being a member of certain races can affect how much difference your Strength score makes in determining attractiveness. Because elves tend toward a kind of ethereal ideal, and their physiques are probably less significantly altered by variations in physical strength, I applied a further reduction of the weighting for Strength difference from the ideal in elves (with a reduced, but similar, effect for half-elves). Meanwhile, because the physiques of dwarves and half-orcs are probably more prone to drastic alteration by varying physical strength, I increased the weighting of Strength in their cases. I also gave gnomes and halflings different ideal Strength scores than Medium sized races because of how inappropriately overdeveloped the muscles of a 15 Strength halfling would probably appear (considering 16 is the maximum first-level STR score for a halfling, after applying a -2 racial adjustment, for instance).

More comically, I’ve included modifiers to attractiveness based on whether a female dwarf character has a beard, and based on whether a gnome character has a tremendous noggin as portrayed in the illustrations of the D&D 3.5 core rulebooks.

There’s also the “wrongness” humans feel in the presence of a member of the elan race. If you use the D&D 3.5 Expanded Psionics Handbook, you should indicate the human race for your character because the “wrongness” is already covered by the elan racial -2 Charisma adjustment. If, on the other hand, your character is a member of the revised elan race I created for use with Pathfinder RPG, select the elan option when running my attribute score calculator program; it accommodates the racial reaction modifier, because there’s no direct Charisma adjustment in that version of the race.

The Code

Because the source code for this program will be changing as I refine both the program’s design and the algorithm I use to calculate attractiveness scores — in addition to adding options (e.g., additional race and Trait choices, possibly an optional element of randomness, et cetera) — I’ll just point a link from here to the Ruby program I’ve written. As the code changes, what’s on the other end of the link will change as well.

I may eventually create a Web interface for calc_att (the name I’ve given the program), similar to the pfconv Web interface, but I haven’t done so yet. I’m sure I’ll let you (my readers) know when I do by either posting a new SOB entry or amending this entry.

Without further ado . . . this is where you can get the source code for calc_att.

It isn’t the prettiest code I’ve ever written, to be sure, but it works — and I’ll probably pretty it up a bit, in time. If you have a Ruby interpreter running on your system, this should be pretty platform-independent. It requires the use of the HighLine module, so you’ll have to install that before it works properly. Just run it from the command line and answer the questions it asks. It should be pretty self-explanatory. It currently doesn’t take any command line options, but I intend for it to do so eventually — which is why I have that --help option stub written into the code for now. Eventually, using that option should give you some simple documentation on how to use the program beyond just typing calc_att and answering the program’s questions.

Do not assume this program has a stable interface. It doesn’t. The interface for the program will change as I modify the thing in the future. I’ll let you know if and when it ever develops a stable interface. Until such a time, assume that updating the program will break any code you’ve written to interact with it.

I think that covers everything. Enjoy.