Someone sparked my interest in this, and as I could not find a thread dealing with such a comparison already, I decided to do one myself. Perhaps someone out there can benefit from this as well.
I wanted to see what the 4d6-drop-lowest method of rolling characters resulted in with regard to the point buy scale. So I wrote a MATLAB simulation function and ran it for 100,000 trials.
The average is about where I'd expect it to be (~30 point buy), but look at that standard deviation! That's exactly why I prefer point buy games. I don't want someone in my group to have a 22-point-buy equivalent character when the other guy over there has a 38-point-buy equivalent!
Here's the MATLAB code for my fellow dorks out there. I think it's pretty efficient.
Ahh, so good to post again... OH WAIT! I'm supposed to be a true lurker (it's a template)!
See you never!
Thikket
I wanted to see what the 4d6-drop-lowest method of rolling characters resulted in with regard to the point buy scale. So I wrote a MATLAB simulation function and ran it for 100,000 trials.
My Lovely MATLAB Output said:How many sets will you generate?100000
>>
The results are:
Number of valids: 87161
Number of rerolls: 12839
Average: 30.4445
Standard deviation: 7.89909
The average is about where I'd expect it to be (~30 point buy), but look at that standard deviation! That's exactly why I prefer point buy games. I don't want someone in my group to have a 22-point-buy equivalent character when the other guy over there has a 38-point-buy equivalent!
Here's the MATLAB code for my fellow dorks out there. I think it's pretty efficient.
Code:
% This program was created to calculate the point buy value of the 4d6 drop
% lowest rolling method.
%
% Rerolls: If the sum of the modifiers is 0 or lower, or if the highest
% ability score is 13 or lower.
function FourDSix
numCharacters=input('How many sets will you generate?');
counter=0;
numRerolls=0;
avg=0;
stddev=0;
base=[ 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18];
mod=[-5 -4 -3 -2 -1 0 1 2 3 4 5 6 8 10 13 16];
for lcv=1:numCharacters
% Generate the stats
for mcv=1:6
roll=[ceil(rand*6) ceil(rand*6) ceil(rand*6) ceil(rand*6)];
[value1 index1] = max(roll);
roll(index1)=0;
[value2 index2] = max(roll);
roll(index2)=0;
[value3 index3] = max(roll);
stat(mcv)=value1+value2+value3;
end
% Check for rerolls; if not needed, calculate point buy
if max(stat)<14 || sum(floor((stat-10)/2))<1
numRerolls=numRerolls+1;
else
counter=counter+1;
% This stat changes into that point buy equivalent:
%[ 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18]
%[-5 -4 -3 -2 -1 0 1 2 3 4 5 6 8 10 13 16]
for ncv=1:6
point(ncv)=mod(stat(ncv)==base);
end
data(counter)=sum(point);
end
end
avg=mean(data);
stddev=std(data);
fprintf('The results are:\n Number of valids: %g\n Number of rerolls: %g\n Average: %g\n Standard deviation: %g\n',counter,numRerolls,avg,stddev);
Ahh, so good to post again... OH WAIT! I'm supposed to be a true lurker (it's a template)!
See you never!
Thikket