Thursday, July 4, 2013

Design (Part 4) Inconsistent Mechanics


This will be a series of articles about game design, using the popular games DOTA and League of Legends as illustrative examples. The specific words, "Design is an Optimization" was coined by the design director of Riot. It means that to him, design is an iterative process of optimization.

Thus if some aspect of DOTA or LOL seems inferior or different to the other, it is because a conscious choice has been made by its designers – the trade-offs have been examined, the benefits judged more than the costs.

Design (Part 4) - Inconsistent Mechanics

It’s important when designing a game that the rules are consistent. In League of Legends, while there may be over 100 different champions each with unique abilities, they all follow the same basic rules and mechanics. Riot is careful to ensure that stuns, slows, and leaps are all applied consistently and with predictable results regardless of which champion is using them. There's no tricky magic immunity interactions, nothing can be disjointed, and invulnerability is applied in a consistent matter.

On the other hand, DOTA2 is riddled with obscure mechanics, strange interactions and exceptions, partly due to its origin - many abilities had to be jury rigged and heavily modified from the original Warcraft 3 engine, and the resulting inconsistencies and interaction bugs accepted “as is” and simply balanced around. Furthermore, there was an emphasis on making each hero truly unique, which led them down the path of developing unique mechanics for many spells. Worse, the spell interactions and workings aren't even explained in game.

I classify this differently from the Burden of Knowledge problem, because that's a case of asymmetrical player knowledge (I know what my hero does, but you don't). In this case, it's a case of the information being completely obscured from everyone unless you read the wiki because it's actually that complicated - nothing in the in-game tooltip or the official website will tell you how the spells actually work. It's different from a problem of a system having too much complexity - which DOTA2 also certainly does. A system can be complex AND consistent - it still has a method to its madness. DOTA2 simply has no system. For some skills like Doom or Static link, the way they act is completely arbitrary with no rhyme or reason other than "that's just the way it is."

If we were telling a new player what the general rules were in DOTA2, we’d make some attempt with the following...

1) Hero attacks are physical, and are reduced by armour.
2) Spells are magic damage, and are reduced by magic resistance.
3) Magic immunity protects you completely from magic effects (damage, stuns, slows)
4) Ultimates partially ignore spell immunity – the disable portion penetrates magic immunity, but the damage portion does not.

However, the only consistency in DOTA2 is that everything is inconsistent.

It's a good start but if you were to assume these general rules were true, you would find all sorts of inconsistencies. Below are some of the particularly bad offenders when it comes to skills that behave differently than their in-game description (which I have included) and general play experience would lead you to believe.

1) Ultimate disables normally pierce magic immunity, but Tidehunter’s Ravage or Puck’s Dream Coil do not.

2) Ultimates do not normally inflict damage through magic immunity, but some like Doombringer’s Doom or Axe’s Culling Blade still do. In fact even some normal spells inflict magic type damage through magic immunity (what a contradiction), like Tinker’s March of the Machines or Enigma’s Midnight Pulse.

3) Usually a spell either affects you while you're magic immune or not - however some ultimate disables like Silencer’s Global Silence, or Treant Protector’s Overgrowth can affect magic immune units, but are themselves dispelled by magic immunity. This means if you were magic immune and you got hit by those spells, you would be disabled by them: however if you waited until you got hit by those spells and then triggered your magic immunity, you could dispel its effects.

4) Most normal spells are not supposed to affect magic immune units, but some like Razor’s Static LinkBane’s EnfeebleAxe’s Berzerker’s Call, or Naga Siren’s Ensnare will.

5) Some abilities trigger HP loss, which isn’t considered damage taken (so it doesn't cancel bottle regeneration or healing salves), is not reduced by resistances and actually pierces magic immunity and even invulnerability – Bloodseeker’s Rupture, Bane’s Nightmare, or Necrolyte’s Heartstopper. There’s an exception within the exception here as well, as Invoker’s EMP triggers HP loss but is the only one to not pierce invulnerability.

6) Award for most misleading tooltip – Rhasta’s Serpent Wards, which says it does 75 damage at max level. However, it never actually does this damage to anything – due to attack type / armor type interactions, it does 150% to creeps, 50% to heroes, and 35% to structures and siege units.

This list barely scratches the surface!

There is no real system in place, and everything has to be learnt on a case by case basis.

You could pull back the veil and see that it's roughly based on the Warcraft 3 engine with 6 damage types (Magical, Physical, Pure, Mixed, HP Removal, Universal) inflicted through 6 delivery methods (Normal, Piercing, Hero, Siege, Chaos, Magic) reduced by 6 different resistances (Armor, Damage Block, Ethereal, Magic Resist, Magic Immunity, Invulnerability) on 6 different types of armor (Unarmored, Light, Medium, Heavy, Fortified, Hero). But even learning this system doesn't bring you any closer to fully understanding the mechanics, many effects simply being arbitrarily triggered or custom coded to behave the way they are.

Why all this complexity?

Aren't the insanely complicated and inconsistent game mechanics in DOTA2 a hindrance? Why don't they revamp it to something more player friendly like LOL does? In a nutshell, it comes down to both games having a completely opposed game design philosophy (and business model)

League of Legends is balanced around the concept that "All champions are viable all the time."

DOTA2 is balanced around the concept that "No heroes are viable all the time."

You start League of Legends without champions - they need to be purchased from the store one by one. LOL champions are balanced around the concept that "all champions are viable all the time" - they want to make sure that if you spent $10 to buy a champion you really like, say Ahri, there's nothing to stop you from playing her 50 times in a row - the game is set up so she is viable in every single lineup against every single opponent strategy.

There are 5 different roles in LOL that present in almost every game (bruiser, AP mage, AD carry, support, jungler) and any champion will typically be able to perform at least two of them at a reasonable level of ability, regardless of the composition of their own team or the enemy team. This is because while each champion is deemed "unique" because they have unique skills, those skills draw from the same limited pool of simple mechanics, and ultimately means that many champions perform nearly identical roles. There are no hard counters or particular synergies, so you can pick your favourite champion without fear.

In DOTA2 however, the hero picking system is based on counters and synergies. The heroes not only have unique skills, but they also draw from unique mechanics, which creates a much stronger metagame of picks and counterpicks due to the existence of hard counters.The game gives you access to all heroes for free and expects you to know how to play them. No two heroes are interchangable - there isn't a fixed system of 5 roles. It is rare for players to "main" a hero in DOTA2 because the viability of each hero depends so much on the composition of his own team and opponents team. You can't pick the Juggernaut 50 times in a row and expect to do optimally in all of them - there are team compositions against which the Juggernaut would simply be useless - if the enemy team has lanes with good mobility to evade his Bladefury in the early game (Dark Seer), and summons / illusions to tank his Omnislash in the lategame (Lone Druid). DOTA2 is balanced around the idea that "no hero is viable all the time" - no hero should be so versatile that players can ignore picking strategy and just pick him every time and expect to do well. Many pub games in DOTA2 are lost at the hero picking phase, while this will not be case in LOL.

Why hide the complexity?

Most of the complexity in DOTA2 is hidden from the players. Nothing in the game or the official website will tell you that Mass Serpent Wards have different damage modifiers based on armor type.

I suspect one reason is that the complexity of the mechanics is a feature in itself. I know I've said complexity for the sake of complexity is bad, but it definitely does appeal to a certain type of player. Playing and learning DOTA2 is a journey of exploration - with every hero having unique mechanics and tricks, even if you've played the game for 8 years, you're still aware that you don't know everything. (ask a vetaran player about purge interactions...) In an MMORPG, if you've done all the quests, reached max level, grinded the top level gear in the game... it's essentially over. You might think of retiring at that point, as there's nothing else to achieve. DOTA2 never ends, because there's always some mechanic you haven't mastered, some juke spots and tree cuts you haven't found out, some ward spots you didn't think about, some hero combos and counters you haven't used. Having the complexity hidden could be a feature as well: witness all the complaining about games which don't have free form exploration, and instead force players down a certain path. DOTA2 allows players to direct their own journey of self exploration - let them notice an inconsistency in the game mechanics, figure out what questions to ask, and then they learn a little bit more about the game, at their own pace - which is arguably better than forcing them to read through a 2 page technical article about the specifications of their skills when they start the game.

Of course, this can be very frustrating to some other type of players. They might go into the game, and think that their ultimates can stun magic immune enemies - and they play Magnus, which does. But then they play Tidehunter and find out his ultimate doesn't stun magic immune enemies. The tooltips for them don't give any indication that this is the case. They find out is by failing, and failing in this way can be very unfun. Having such a high level of complexity and inconsistency "costs" a lot, but also delivers great benefits, so it's going to appeal to only a specific segment of the player base.