Dice combinations

Last time we checked in on Killing Monsters and Taking Their Stuff, I was trying to figure out a combat system. It's kind of important in a dungeon crawling game, although it would be entertaining to create a pacifist dungeon crawler. Sort of a tabletop version of the Nethack pacifist conduct. Hmmm...

At any rate, I had concluded that a pattern matching system would provide for the most design space and variation for player powers. It was easy to envision thematic abilities in the wide range of manipulations available to the players, and in the targets they would seek. The next question became what those targets should be. I wanted to try and have a character arc built in to the game, such that characters would improve. I therefore decided that the system needed to be interesting even with only three dice to roll, and stay reasonable even with as many as 10 dice.

Having only three dice to roll constrained the number of patterns I could seek. The choices were pretty much limited to pairs, three-of-a-kind, and a run of 3. The question then became how to portion results. Does the player get a point of damage if they match any of these? Three-of-a-kind is hard to hit with only three dice, but pairs are too easy. Additionally, what was the result? A point of damage for each die used? It wasn't clear how to map those combinations onto simple results.

There's another consideration: I was going to avoid giving the player rerolls to start. Unlike most of the Yahtzee-like games, where the player gets multiple rerolls to try and hit their combination, I wanted that to be a result of player abilities. That further reduced the desirability of a single pattern being a desired target. I wanted low level characters to be incompetent, but not frustrating. There was a missing piece.

I was turning the problem around my head when it occurred to me that I really had two patterns I was thining about, pairs and runs. A three-of-a-kind was really just three pairs. That thought led to a realization that that was Cribbage thinking, and I followed that to the next thought: why not lift more from Cribbage? Another combination that I had missed was taking two dice that add up to 7. Combining all three possibilities - runs, pairs, combinations of 7 - and letting the player chase all three would give low level characters an opportunity to make some matches and let high level characters get impressive scores.

The next thing to check out was what the relative probabilities of things were. Specifically, what kinds of scores could I expect from different numbers of dice, and what should each combination be worth? As usual for me, I answered these questions with a Python script. I wrote some quick loops with different numbers of dice to measure relative probabilities. After looking at how often the different combinations happen, it looked like 1 point each for pairs and 7s and two points for runs seemed to balance things with each other.

The next step was to judge the relative values of different abilities. I tested flipping dice to the opposite side, rerolling dice, adding one, adding two, adding or subtracting one (or two), and choosing a face. The values of these ranged from .79 points to 2.24 points, which seemed like a decent spread to work with.

The next question to answer in the design was how defense worked. I wanted the ability to design monsters that had higher defense than others, to create berserkers as well as tanks. Therefore, there needed to be some kind of significant defensive attribute. The simplest thing to do would be have a single number that is subtracted from all incoming attacks. The problem with that is that it didn't provide for a lot of additional design space, since there are few manipulations that can be performed on that number, and all of them could just as easily be expressed as modifications of the attack number.

I then began to search for other ideas. The other extreme would be to perform the same sort of multi-die roll and search for patterns. However, rolling a bunch of dice for the monster and matching things up just for defense seemed cumbersome. I wanted to find a middle ground. I settled on the monster simply rolling a small number of dice, and eliminating one attack die for each defense die that matches. That system has the virtue of being quick to execute, being non-deterministic, providing room for some interesting powers, and giving space for defining different monsters.

Defining what a monster attack looked like was pretty simple. I wanted a variation of the same system, so monsters roll a set of dice like players and have a smaller menu of specific combinations that each monster looks for. Monsters can have their own combinations both to provide a wider range of challenges and also because I don't need consistency across classes and skill sets, like I do for heroes. Players would then use the same defense system as monsters, with again the opportunity to provide players with some manipulations inside of a quick system.

Figuring out these elements allowed me to fill out the remainder of my value table, after some more hacking around in Python. The different basic abilities, with their average value for low-powered characters (3-6 dice) and high-powered characters (7-10 dice) are:

  • Add defense die: 0.74/4.05
  • Flip attack die: 0.79/4.94
  • Reroll attack die: 0.88/3.29
  • Plus (or minus) one to attack: 1.29/4.97
  • Choose defense die: 1.58/7.92
  • Plus (or minus) two to attack: 1.67/7.22
  • Plus/minus one to attack: 1.84/7.29
  • Plus/minus two to attack: 2.18/9.57
  • Choose attack die face: 2.24/10.31
  • Add attack die: 3.39/9.72
  • Additional full attack: 4.78/27.23

This table would help guide me in creating relatively balanced characters. The next step in the design was to try and come up with a single character and a few monsters and make sure it all worked together.

If anybody is interested in my hacky Python script, you can download it here. The code is a little disorganized, since I modified it several times just to test different hypotheses, but it might be helpful for somebody.