# Is there a way to duplicate the range & power of rolling stats with a homebrew point buy?

One of the benefits of traditional rolling stats (4d6 drop lowest) over point buy is that you have access to a wider array of stats. You can roll as high as an 18, and on rare occasions as low as a 3. Additionally, it anecdotally feels like rolling stats leads to a higher average power than point buy does.

However, rolling stats can lead to imbalance between PCs, and can keep you from building the character you want if you don't get good rolls. Is there a way to homebrew the point buy system so that it matches the average power and available stat range (3–18) of rolled stats?

• This may be useful as a reference Mar 1, 2018 at 22:47
• If you want I can explain the statistical model for that formula in another answer. It's actually fairly easy to show with a bit of explaining, but I'm curious to now if that is the actual intent of the question. Do you need a model of the current point buy system compared to rolled dice to develop your system, or do you just want a new system that replicates the range (or both)? Mar 2, 2018 at 1:52
• Rather than homebrewing the point buy system, I've seen some fairness added to rolling by having everyone roll up a stat array, then letting everyone choose which of the stat arrays they would like to use. Unfortunately, this can swing the powerlevel of the game a bit if a particularly good set of rolls comes up.
– Jon
Mar 2, 2018 at 3:06

# Here's My System

When looking at dice rolled values, there must be an understanding that probabilities for the lower and upper bounds are extreme (1 in 1296 and 6 in 1296 respectively). As a result, achieving the extremes of a value should be far more difficult than for those bounds in the point buy system currently in the game.

Here is a graph of the distribution for 4d6 drop lowest (Mean = 12.24, Standard Deviation = 2.85)

Take particular notice of the extreme rarity of 3, 4, and 5 values. The best way to accommodate this is to give values below the mean their own point system. Essentially there will be two parallel point systems. The basic weight of the point costs will roughly compare to the number of discrete rolls away from the medians (of 4,4,4,2... among others).

Each of the six ability scores starts at 10. You get 19 points (Strength Points) to buy score values to be greater than 10, and you can get up to 10 more points (Weakness Points) from lowering certain abilities based on how much you lower them below the base score of 10.

## Weakness Points

Here is a table that shows the point values for each lesser ability score.

This demonstrates the extremely low probability that you will have multiple values less than 5 or 6. Each point of weakness you expend provides one point to your strength points.

## Strength Points

Strength points reverse the effect of any attribute less than 10, and here is the table for increasing past 10:

As you can see, even if you expend all 10 weakness points, it is impossible to get two 18's in this system (or even an 18 and a 17). This is because the likelihood that you roll two 18's is 0.38%. To look at the system in action, here are some sample distributions (notice that moving along the curve in the negative direction has a bigger impact since there are less discrete rolls for the values in those regions):

• 16, 14, 13, 12, 10, 9 (this is the average result for a dice roll)
• 17, 16, 14, 9, 7, 5 (one standard deviation from above)
• 18, 16, 12, 9, 6, 5 (one standard deviation from above)
• 18, 16, 12, 10, 9, 3 (with one dump stat)

Note: This system may appear to take advantage of the fallacious statistical model commonly known as the gambler's fallacy. I am aware that rolling a low value (like four 1's) does not increase your chance of rolling a higher value; this system is designed to allow for adjustments above the standard system by accounting for probabilistic measures for the rolled abilities as a whole.

• The character starts with a 10 in everything and get 19 points to spend before racial adjustments. Right? One can "dump" a stat and get a few more points. (Min Max, etc ...) Mar 2, 2018 at 13:27
• @Korvin that's correct you get 19 points to go past 10 in each ability and up to 10 more from lowering certain abilities based on how much you lower them. Mar 2, 2018 at 13:36

# Extending the current system

There are two parts to this answer. The first is fairly simple - to homebrew the point-buy system to extend the range, simply use the formula already implicitly used in the book. Specifically:

• If the score is less than or equal to 13, the point value = score - 8
• If the score is greater than 13, every point above 13 costs double

This would mean that under the new system, an ability score of 3 would have a point buy value of -5, and an ability score value of 18 would cost 15 points. This makes it possible to start out with an ability score of 18, but very costly. This also allows you to play characters with scores lower than 8 in exchange for increased power in another area (which is one of the fun parts of rolling stats).

I don't have the statistical skills to calculate what the average point buy value of 4d6 drop the lowest in this system would be. I do, however, have the skills to throw together a quick C++ program that rolls stats randomly and calculates the average point value for an arbitrarily large sample:

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <string>
#include <iomanip>

using namespace std;

int RollStats(int* dice);
int RollDice(int* dice);
int GetVal(int score);

int main()
{
srand(time(NULL));
bool endProgram = false;
int* dice = new int[4];
int i = 0;
float totalScore = 0;
float numRolls = 0;
string input;

while (!endProgram && i < 1000000)
{
while (!_kbhit() && i < 1000000)
{
totalScore += RollStats(dice);
numRolls++;
i++;
}

cout << endl << numRolls << " rolls. Average score: " << (totalScore / numRolls);
cout << endl << "quit? (y/n)  ";
cin >> input;

if (input == "y" || input == "Y")
{
endProgram = true;
}
}
delete[] dice;
}

int RollStats(int* dice)
{
int total = 0;
for (int i = 0; i < 6; i++)
{
total += GetVal(RollDice(dice));
}
cout << endl << "Total Score: " << total << endl;
}

int RollDice(int* dice)
{
int lowest = 6;
int total = 0;
cout << endl << "Rolling: ";

for (int i = 0; i < 4; i++)
{
dice[i] = rand() % 6 + 1;
cout << dice[i] << " ";
total += dice[i];

if (dice[i] < lowest)
{
lowest = dice[i];
}
}

cout << "\tLowest: " << lowest;

total -= lowest;

cout << "\tTotal: " << total;

}

int GetVal(int score)
{
int value = 0;

if (score <= 13)
{
value = score - 8;
}
else
{
value = 5 + ((score - 13) * 2);
}

cout << "\tValue: " << value;
return value;
}


I've run this two times for very large samples (500,000 rolls and 750,000 rolls). Assuming you trust C++'s random number feature to be sufficiently random, the average point value for rolling stats is somewhere around 30.21. This matches my anectodal gut feeling that rolling stats gives you (on average) a slightly more powerful character.

If you give players a budget of 30 points and access to the full range of ability scores (3-18) as described above, your players would have stats with the same range and average power as rolled stats, but with the controlled and balanced power levels of a point-buy system.

Also, one fun side effect is that a character starting with three ability scores at 3 and three ability scores at 18 just so happens to fit exactly within this system. That could lead to some really fun characters, either for roleplay or for min/max builds.

• You may find this answer useful or related Mar 1, 2018 at 22:36
• Adding the code into your post is helpful, and since it'll scroll after a dozen or so lines it won't make your post extraordinarily long. Mar 1, 2018 at 22:47
• @DavidCoffron In that case, I'd encourage you to submit an answer with another system. I submitted this because wanted to share the work I'd done, but it would be super awesome to see other perspectives and methods of handling this problem. It is 100% possible that someone could come up with something better than me :) Mar 2, 2018 at 2:11
• @Dacromir For what it's worth, AnyDice agrees with you - the average total cost is 30.21, although due to the higher cost of stats 13+, the mode (most common value) is slightly lower at 29.
– Jon
Mar 2, 2018 at 2:36
• For what it's worth you are using C's random numbers which are considered harmful. Luckily you can use C++'s random numbers instead which produce better results even though they can be a bit unwieldy to use.
– nwp
Mar 2, 2018 at 13:39