# D&D GeneralCustom Dice Curve

#### Baron Opal II

##### Hero
How would I go about generating a bell curve such that the range is 1-12 and the high point is 5?

Obviously, 2d6 come close. I was also thinking about 2d4 + 1d6 -2.

#### Arvok

##### Explorer
2d4, then if you roll a pair of 4s you get to roll an additional d4. That should give you a bell curve with a high point at 5 and a 1 in 16 chance for each value from 9-12

#### NotAYakk

##### Legend
No symmetric roll has a high point at 5 for 1-12.

Adding dice or removing constants is symmetric.

#### Syunsuke

##### Roll 21.
2d4 + [lowest of 2d6] -2 ?
(2d4+2d6, drop higher number of d6s, subtranct 2) • Keravath

#### Baron Opal II

##### Hero
So, what would be an example of non-symmetry?

#### tetrasodium

##### Legend
Supporter
you would need 5 2.4 sided dice ;D

• Coroc

#### dregntael

##### Explorer
Roll 3d6 and drop the highest is perfect for this: AnyDice

#### NotAYakk

##### Legend
So, what would be an example of non-symmetry?
Roll (N+1)dX drop highest/lowest is going to be asymetrical. Drop lowest skews high, highest skews low.

Range is N to N*X. Diameter is (X-1)*N. OP wants a diameter of 11; so you need mixed dice, or use d12s.

d2 has diameter of 1, d4 has diameter of 3, d6 5, d8s 7. Adding up to 11 is basically 2d4+1d6, or 2d6+1d2.

Average for symmetrical is (1+12)/2 or 6.5. OP wants 5. So we should examine:

2d4+2d6 drop highest, 3d4 drop highest+1d6, etc.

I lack anydice chops. And there are 100s of cases. I guess I can write a C++ program... one sec.

Ok, (2d42d6) drop highest, then -2 is 5.31 (I just averaged the 1000-odd cases).

The min is 1, max is 12 in both cases.

Code:
``````#include<vector>
#include<iostream>

int eval(std::vector<int> v ){
std::sort(v.begin(),v.end());
v.pop_back();
int r=0;
for(int x:v)r+=x;
return r;
}
std::vector<int> inc( std::vector<int> in, std::vector<int> const& max){
for(int i=0; i<in.size();++i){
if (in[i]==max[i]){
in[i]=1;
continue;
}
++in[i];
return in;
}
return {};
}

int total( std::vector<int> dice ){
int total=0;
std::vector<int> cur( dice.size(), 1 );
while(!cur.empty()){
total+=eval(cur);
cur=inc(std::move(cur),dice);
}
}

int main(){
auto x=total({4,4,6,6})/double(4*4*6*6);
std::cout<<(x-2)<<"\n";
}``````
could be made way faster, but am lazy and finishes the problem in a fraction of a second on a phone cpu, so good enough.

Last edited:
• Coroc and miggyG777

#### NotAYakk

##### Legend
... actually, 2d12 drop highest is average 4.51, which is a lot easier.

Or 3d12 drop highest, divided by 2.

#### dregntael

##### Explorer
Actually, an even better solution is to roll 1d12 and 2d6 and take the lowest result, which has an average of 5.01 according to anydice: AnyDice

I doubt you will be able to find anything closer than that.

• Coroc and NotAYakk

#### Harzel

How would I go about generating a bell curve such that the range is 1-12 and the high point is 5?

Obviously, 2d6 come close. I was also thinking about 2d4 + 1d6 -2.

By "high point" do you mean the mean value (average) or the most likely single result? Those are not the same thing.

#### jgsugden

##### Legend
You have results oriented questions, but we only know a bit about your goals. Do you want the 2 and 12 to have equal probability? Should the total of the probability to the left of the 5 equal the total of the probability to the right of it?

The last time I tried to shift the probability curve around, I determined that my best approach was to change dice based upon training and talent levels. A weak PC with no training trying to do something would roll 2d4 while a strong PC with a lot of pysical training might be rolling 2d12. I added an exploding die mechanic (if a die hit the maximum value, you added a die and subtracted 1 from the result) and a few other tweaks and ended up with exactly what I needed.

Last edited:

#### Bohandas

##### Hero
Roll 1d20, reassigning the numbers above 12 as follows:

13=1
14=2
15=2
16=3
17=3
18=3
19=4
20=4

EDIT:
The following may be better as it has actual fives in it:

13=1
14=1
15=1
16=2
17=3
18=4
19=5
20=5

In any case the reassigned numbers need to add up to 22 and the total of all the numbers needs to add up to 100
EDIT:
If you want 5 to be the most likely number, you could also roll d% and replace the numbers above 12 with seventy-five "5"s, eight "4"s, and five "3"s

Last edited:
• dregntael

Replies
11
Views
470
Replies
5
Views
1K
Replies
46
Views
3K
Replies
20
Views
1K
Replies
17
Views
700