D&D General Custom Dice Curve

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.
 

log in or register to remove this ad

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
 


Syunsuke

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

anydice.png.jpg


 




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);
    }
    return total;
}

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:



Remove ads

Top