I recently got back into playing D&D and got really interested in the different mechanics with regards to rolling dice. I wanted to see how these different mechanics would affect the distributions and how far they could be pushed before they broke. Given the power of python, I was able to make a handful of different mechanics and their distributions. To note, I did all of these distributions with a d20, but allowed the ability to select which die you wanted to use in the function call.
Regular rolls get an average roll of 10.5 with a flat histogram
Rolling with Advantage (rolling two d20 and taking the highest of them) gives a nice stairstep histogram with an average roll of 13.8
Rolling with multiple levels of Advantage (shown is rolling 5 and taking the highest) gives an exponential curve with an extremely high 17.15 average
Rolling Advantage, but each Advantage roll being rolled with Disadvantage (take the lower of the two). Four total rolls, each pair of two is the lowest, but taking the highest between those final two. Interesting fall off towards the edges, with an average of 9.86 just under a regular roll
Random Adjacent face is a method I was curious about where upon doing a roll, taking a random of any of the faces adjacent to the face rolled. For a d20, there would be 4 eligible faces and would pick a random one. I also did highest and lowest adjacent faces. For random, the average was 15.14
Taking the average of two dice, instead of Advantage or Disadvantage gives a very similar average outcome, but a very different distribution.
Rolling with Emphasis is something I heard from Brennan Lee Mulligan of Dimension 20 fame. You roll two dice and take whichever die is further from 10. Basically forces the distributions to the extremes. The average roll is still about 10.5 though. Gotta watch out just looking at averages.
Finally, I did a quick list of the probabilities of rolling a single, two, or three dice and getting all of them to be at or above a specific number.
In conclusion, I found this to be a very interesting and quick endeavor to mess around with simulating this many dice rolls and doing it in a functional pythonic way was very fun. I think my favorite version of rolls has to be versions of the adjacent face. I've never seen anyone do it, it's not very balanced, but it's pretty interesting. I think about it in terms of someone wanting to cheat, but not be too obvious about it. They won't just pick an arbitrarily large number, but would take the highest number that they could easily fudge that they rolled.