Good randomness, bad randomness

19 November 2012

The proper use of randomness in games is a serious problem. I've written about this before, so I was happy to see other game developers recently raising the same issues as I did, and mostly drawing the same conclusions. But while Craig Stern of Sinister Design writes about board games and what we can learn from them, Jay "Rampant Coyote" Barnson plays devil's advocate a little — an important counterpoint, as it turns out.

What could I possibly add to this? As it turns out, one of my attempts at making a roguelike actually went far enough that I had to tackle this problem, and surprisingly enough I solved it pretty well. Except I never explained how, and this is a good time for it.

Incidentally, I made a mistake in the aforementioned article: Battle for Wesnoth is not, in fact, completely deterministic. Dice are rolled for attack (but not damage), and possibly other aspects. It's just that the player's skill is the dominant factor, to such a degree that I tend to forget there is anything random about the game.

See, I'm not against randomness per se. In fact, I used to be a fan of Backgammon, a game famous for its extensive use of dice... and also for how little dice matter. They're only there to spice things up and provide thrill; no combination of (un)lucky rolls is going to change the outcome of a match.

Part of the reason is that randomness is applied surgically; you don't just roll dice for everything! Not to decide which checkers to move, and not to decide whether you can hit. Another factor is that for most of the game you can can choose among many potential moves for any given dice roll; the determining factors are under you control!

Similarly, Dungeon Romp only rolls the dice twice for each combat turn: once for attack and once for defense; from then on, it's modifiers all the way. And that's not all; I've given up some realism so I could have nice bell-curves, by way of a dice pool system. That smooths out what little randomness there is. But it also leads to a problem: someone with three dice in an attribute will always trounce someone with only two.

Wait, what? How does that work? Isn't there's a lot of overlap between the 2-12 and 3-18 intervals? Well, yes, but look at this graph:

dice bell curves

An average roll of 10 or 11 with 3d6 is an exceptionally good roll with 2d6. Clearly, this system isn't granular enough.

I could have backed out and taken a different path. Instead, I went forward and added yet another variable: dice size. Which simply means that a bigger character will roll dice with more faces for the same attribute values. This is by no means original: Tri-Stat dX has different dice sizes per attribute. Talk about fine-grained!

That gave me considerable leeway to balance probabilities. For example, 3d8 have almost the same range and average roll as 4d6, but the latter can hit the high notes more easily, and are more consistent to boot:

dice bell curves2

My use of attributes also contributes to this.

First, Agility is rolled for both attack and defense, and modifiers are applied, from weapon and armor respectively. (More asymmetry would have been interesting, but I couldn't justify it.) If the attacker's modified roll is higher, then they hit.

At this point, I did something no other system does to my knowledge: base damage is the margin of success! This makes a lot of sense: when you shoot at a target, damage depends not on how hard you've squeezed the trigger, but on where you hit — in other words, how well you've aimed above the bare minimum needed to hit at all. Sure, in melee physical strength makes a difference. Which is why the Muscle score is compared between the opponents, and the difference used as a bonus to damage — or a penalty, if the defender is stronger. Naturally, relevant weapon and armor bonuses are applied here as well. And yes, that means it's possible to hit and not do any real damage — another element of realism.

To complete the picture, Stamina is used to determine how much you can take. But you won't find any "1d4 hitpoints" silliness here; it's a straight multiplication between the attribute and the character's dice size.

There are two other attributes, Speed and Perception. The former determines how fast you can act (moving, attacking, whatever), while the latter influences how far you can see. I wanted to integrate them better with the rest, but couldn't think of any good ways yet.

It was all a big improvisation to be honest, but it came out better than I expected. Now I can make a variety of interesting monsters: "glass cannons" that hit hard but also go down easily; dumb resilient brutes that can't fight but are almost impossible to kill; weak, fast monsters who deliver a flurry of tiny attacks, and so on.

I'm also happy about the resulting balance between chance and strategy. While your average fight is fairly predictable, it is possible for a monster to get lucky. That still shouldn't be fatal... if you're fully healed. That means gamblers should be able to indulge in risk taking to some degree, while cautious players can rest assured that smart play will keep them safe.

As a post-scriptum, you may have noticed I keep talking about dice. Indeed, even though Dungeon Romp is a computer game, the ruleset is designed in terms of dice, and the game uses real-world dice sizes throughout. It's not that I plan to make a tabletop version. Rather, I wanted to keep my design grounded in physical reality. With computers, it's all too easy to make things overly abstract.

Until next time, design smartly.