5
\$\begingroup\$

I'm working on an ability score generation mechanic inspired by 13th Age, where you roll dice and assign a letter to each result, then determine scores by pairing the results, adding a static modifier, and subtracting the paired results from each other. Here's my take on it:

Roll six d6, rerolling any ones. Line them up, and assign a letter to each: A B C D E F.

Calculate your stats using pairs of adjacent dice as follows:

12+A-F

12+B-E

12+C-D

12+D-C

12+E-B

12+F-A

This guarantees a random array with a fixed stat total (in my case, 72 because the static modifier is 12), as subtracting each of the rolled pairs cancels out, leaving you with a net zero. Generally the roll results are applied in random order, but in the mechanic I'm working on, I'm sorting them lowest to highest and subtracting die 1 from die 6, die 2 from die 5, and die 3 from die 4, which should statistically provide the greatest possible disparity between ability scores. I'm also rerolling all ones, which skews the average result higher but also changes the potential spread from 7-17 to 8-16, which I prefer.

I think I'm happy with this method, and I know it's a much smaller pool of potential results than simply pairing the rolls randomly, but I'd still like to graph it in AnyDice. The problem is that I have no idea how. I know how to create arrays and basic functions, but I think this mechanic requires one or two too many steps for my brain to wrap around. Any help would be appreciated.

\$\endgroup\$
4
  • \$\begingroup\$ Doesn't this basically just come down to "roll 1d4 3 times. Add each result to 12 once, subtract each result from 12 once"? \$\endgroup\$ Commented Jan 23 at 16:32
  • \$\begingroup\$ I don't believe so. I don't have enough of a mathematical grasp to understand why exactly (I haven't taken a math class since 2006, and I flunked that one), but I know it's not possible to roll an array of all 12s when rolling 3 d4s and +/- 12 from the result. And using this method, to achieve a 16 you have to roll a 6 and a 2, which I am guessing is slightly less likely than rolling a single 4 on a d4. (I can't back that up, it's just a guess.) \$\endgroup\$ Commented Jan 23 at 17:54
  • \$\begingroup\$ @yangking True. It should be 1d5-1. 0-4, not 1-4 like I initially said. Either way, you actually only need to roll three dice to accomplish this. Each roll is the inverse of another. \$\endgroup\$ Commented Jan 23 at 18:04
  • \$\begingroup\$ @MichaelW. the distribution of 1d5-1 and A-F (A=6d6kh1, F=6d6kl1) is different though. \$\endgroup\$ Commented Jan 24 at 5:56

1 Answer 1

11
\$\begingroup\$

You can send the six rolls to a function parameter of type sequence, which will evaluate the function on all possible sorted sequences of six rolls. Then the @ operator will allow you to extract particular ranks.

As for the individual rolls:

I'm also rerolling all ones, which skews the average result higher but also changes the potential spread from 7-17 to 8-16, which I prefer.

I take this to mean that the reroll is done with unlimited depth. This makes the individual rolls effectively 1d5+1.

All-in-all, we have:

function: age INDEX:n of ROLLS:s { result: 12 + INDEX@ROLLS - {7 - INDEX}@ROLLS } loop I over {1..6} { output [age I of 6d(1d5+1)] } 

The function is necessary here; 12 + 1@6d(1d5+1) - 6@6d(1d5+1) would use the difference between the highest and lowest rolls of two independent sets rather than the same set.

Other rolling methods to compare to

AnyDice itself has an article on 4d6 drop lowest.

You may also be interested in my ability score calculator, which can compute ranked ability scores and point-buy price for a variety of different ability score rolling methods.

\$\endgroup\$
6
  • 1
    \$\begingroup\$ I love the symmetry coming out here. I mean, it is kind of obvious, but still fascinating... \$\endgroup\$ Commented Jan 22 at 22:36
  • \$\begingroup\$ Wow, this is awesome, thank you! As far as I can tell, this works - if there's anything wrong with it, I'm not clever enough to tell. A follow up question, if you're willing. Is there a decent method by which I could generate the equivalent of 'output [highest 3 of 4d6] named "4d6 Drop"' to see the bell curve (or lack thereof, I honestly have no idea what this would look like) of the expected value of this array? \$\endgroup\$ Commented Jan 23 at 0:22
  • 1
    \$\begingroup\$ You're welcome! AnyDice has an article about that. I've added it to the answer along with a couple more additional details. \$\endgroup\$ Commented Jan 23 at 3:04
  • 1
    \$\begingroup\$ since you're both adding and subtracting 1d5+1 from all rolls, you might as well drop the +1 and just roll 1d5. \$\endgroup\$ Commented Jan 23 at 13:05
  • \$\begingroup\$ @HighDiceRoller Sorry for the late update - I've been messing around with the AnyDice calculation you gave me, trying to add an output to graph the combination of the six rolls, but I'm having trouble cracking it. Are you able to provide a method by which I could take the six outputs shown in the calculation and combine them to show a single bell curved array? For reference, here's a different method I've been working on. "TOTAL" is the sum of the six previous rolls (though I can't figure out how to get it to show anything other than the cumulative total...): anydice.com/program/3b0b3 \$\endgroup\$ Commented Jan 24 at 16:15

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.