19th Sep, 2013By Softmints3 minutes

Players will tell you that they don't like it, but on-the-fly random number generation (rng) is seen in almost every match in the three biggest MOBAs (League, Dota2, and HoN). Why is this?

Firstly, I want to establish that randomness in games isn't a problem on its own. Card games like poker hinge on it, while still being enjoyable and competitive. The problem is that in a card game, players are betting on their ability to read their opponent. In an RTS, players are betting on the rng.

While this might occasionally pay off, any sense of achievement felt by one player is equally felt as frustration by another. There are no tactics surrounding betting on rng. It offers no net contribution to gameplay. So why is it still a feature in modern games? Lets look at three classic rng-based passives used in Warcraft III (which have been inherited by DotA):

Icons of Warcraft III's Bash, Evasion, and Critical Strike passives
What is this; Angel Arena?
  • Critical Strike: A chance to deal a significant amount of bonus damage when attacking.
  • Bash: A chance to completely disable the attacked unit with a stun.
  • Evasion: A chance to completely ignore an incoming enemy attack.

These passives have a low chance (10-20%) to cause a significant effect. While there are ways to mitigate the randomness of rng (such as cooldowns, pseudo-rng), this article will detail some approaches for eliminating randomness in these passives.

Bash and Evasion:

One approach is fixing the chance at 100% and toning down the effect. The problem is that Bash interrupts channels: either the channel continues or it does not. Hence, Bash is is what I will call a discrete effect.

A 100% chance to Bash makes it very difficult for an opponent with a channelled ability to make use of it. However, should the opponent pick up a 100% evasion item, they are now immune to Bash. When it comes long-term equipment like items, rock-paper-scissors isn't such a welcome property, so let's discard this option.

We could try normalizing the randomness by having the effect occur "every x attacks". The problem is that we can't take this approach with more than one or two passives, because the game starts becoming like an action film where everyone is trying to count how many bullets are left in each clip. In a 5v5 firefight with so much else going on, I feel this puts unreasonable pressure on players.

Another approach is making discrete effects into active abilities. This is feasible, but requires careful tuning: a player with the power to invoke a hard counter instantly whenever they like will surely use it at an opportune moment, making it a very effective counter.

The two typical balance responses are to either give these actives a long cooldown (League, Dawngate), or have counters to the counters (Dota, HoN).

The trivial case is where we simply don't make certain discrete effects available through items (or summoner spells). This means that heroes counter each-other, and if we integrate the relevant mechanics and their counters with the hero pool properly, this works quite well.

The designers behind League and Dawngate were paying attention to this: neither game gives every hero access to discrete effects like stuns, silences, disarms, or evasion. The only discrete effects/hard counters available are defensive abilities like Flash and Cleanse, and I think this is a good approach.

Conversely, DotA has a large number of counters available via items. The gameplay often requires baiting the enemy into putting theirs on cooldown, and demands careful team coordination to avoid being out-countered.

I don't believe Bash or Evasion have a place in Dota any more as a result: there are already active abilities which do the job without the rng. However, Dota and HoN also have entire heroes based around rng, so it's unlikely they'll change their ways any time soon.

Icons from HoN's Blacksmith, and Dota2's Chaos Knight
Not terribly subtle about it, either...

Critical Strike:

Unlike Bash and Evasion, Critical Strike's values are defined continuously, so we'll call it a continuous effect. By this I mean that if we had a [20% chance to deal +100% damage], we could slide the numbers along until we had a [100% chance to deal +20% damage], and it would be theoretically just as effective.

This means that it's very easy to remove rng from critical strike, but the resulting passive is boring. It's boring because the hero's damage remains predictable, which means the decision to fight or flee is an easy one. Games are more interesting when players are willing to take chances, and that's what Critical Strike contributes: variance.

But at the same time, each player is just betting on the rng. There's no skill involved, so we can't be entirely happy with it. I'll follow up with solutions to this in a later article.