Friday, August 8, 2014

Game Design (X): Balancing monster defenses, resistances

One of my favorite innovations in 4E is the fact that, unlike previous iterations of the game, there are well defined formulas for combat math, and they are nicely laid out in the DMG for DMs and players to see. This is great for making informed decisions regarding character building or combat tactics, but there is a flaw in the plan: some very relevant stats are left out of the fun. It’s straightforward to find out when you have a good AC, or how much damage it takes to kill a monster of your level, but once you need to know whether you should take an attack power that targets Fortitude or Will or which flavor to choose for an Armor of Resistance, you are out of luck. In today’s article, I will discuss how the contents of a Monster Manual can affect character effectiveness, and suggest ways to make this influence more consistent, predictable, and transparent to the players.

The problem

There are two problem areas: defenses and damage types. I will address them in order. The issue with defenses lies in a lack of definition of their relative importance - looking at the DMG tables, one can’t tell that there’s any difference in expected values between Fortitude, Reflex, and Will. It turns out that, although the values for average defenses are well known, there are no useful guidelines regarding which defenses should be stronger or weaker for a given set of monsters. The DM guide actually suggests deriving this from the monster Ability scores, which are mostly useless stats with arbitrary values to begin with. For practical purposes, defense generation using this method can be modeled as a random process. If this randomness resulted in an even distribution across different defenses, it would all work out just fine, and I wouldn’t be writing this. Unfortunately, when we look at the data, monsters have a tendency to be big, dumb brutes (regardless of whether they are actual Brutes), and as a consequence, average defenses skew heavily towards strong Fortitudes and weak Wills. This means that a player character picking an attack power that targets Fortitude will be at a significant disadvantage (equivalent to roughly a -2 penalty to hit!) compared to an attack power that was otherwise identical but targeted Will instead. This is a huge difference, and one that isn’t documented anywhere on the PHB or the DMG - you’ll only find it by checking the stats of monsters in your Monster Manual (or, for that matter, in your adventures), and averaging them out.

Conversely, the defenses targeted by monster powers don’t seem to follow any rules other than what feels right to the designer in each case. One would expect AC to be the target for most attacks, with Fortitude, Reflex and Will taking an even share of the rest. However, this is only true in part: AC seems to be the predominant defense, with Fortitude and Reflex showing in similar numbers, but Will tends to be underrepresented.

Similar issues arise when we look at damage types: the types resisted by monsters (or that they are vulnerable to) and the types used by monster attacks are chosen on a case-by-case basis. And, again, this results in highly skewed numbers. For most damage types, resistances and vulnerabilities only show up in small numbers, but there are a few major outliers: there are a lot of monsters that are resistant or immune to Poison and Necrotic (and, to a lesser degree, Fire), or vulnerable to Radiant damage. This is mostly due to the Undead effect: Undead represent a very important portion of the monster population, and are almost universally resistant to Poison and Necrotic damage, and vulnerable to Radiant. Thus, we can conclude that player powers using Radiant damage will have a significant advantage over the rest, whereas Poison and Necrotic powers are severely crippled. Once again, this is an undocumented feature. As for the damage types used in monster attacks, there is a predominance of Fire, Necrotic, Poison and Psychic damage, relative to other types. That said, this is a far less relevant issue than the previous ones, as it only comes into play in the relatively rare scenarios where player characters have resistances.

What should be done

With the above points in mind, I have defined some requirements that a fixed system should have:

  • A predictable distribution of defense values and resistances/vulnerabilities for monsters. This distribution should be known to players and DMs, so that they can properly evaluate each defense or damage type.
  • A method to generate this distribution in newly-designed monsters.
  • A low-effort method to retrofit current monsters to use this distribution.
  • Equivalency between defenses and between damage types. I strongly believe that Fortitude, Reflex, and Will values for monsters should have similar values, on average. Likewise, each damage type should be, on average, equally useful in damaging monsters.
  • Monster stats should make sense and meet player expectations.

On the other hand, I have given up on some related issues, as I think they harder to solve, and not relevant enough to be worth the effort:

  • Balanced distribution of damage types in monster attacks
  • Balanced distribution of targeted defenses in monster attacks

Fixing monster defenses

I should start by clarifying that, when I talk about monster defenses, I refer to fortitude, reflex, and will. AC works properly under the current rules, and will need no further tweaking on my part. With that said, “just” fixing fortitude, reflex and will is a daunting task, as it involves adjusting stats for all of the thousands of monsters out there. The only realistic way to achieve this is by generating these stats from simple rules derived from some monster property, such as race or role. Here, I monster role becomes the natural fit for defense generation, since it is already used for other basic stats such as AC, hit bonuses, or damage.

For simplicity’s sake, we’ll assume that all monster roles show up in similar numbers. This is not entirely accurate, as Artillery and Lurker monsters are underrepresented, appearing only half as often as other monster roles in the monster manuals. Nevertheless, I consider this a good enough approximation for now - and I will try, at some point in the future, to study this role disparity  and maybe try to address it too.

Anyway, the new defense generation guidelines work as follows: for each of Fortitude, Reflex, and Will, a monster role can have an “average” score (the defense value suggested by the DMG tables), a “strong” score (equal to the average score + 1) or a “weak” score (equal to the average score -1). In order for all defenses to be roughly balanced, each defense will have as many roles with “strong” scores as with “weak” scores. I suggest the following values:

  • Soldier: Strong Fortitude, Average Reflex, Average Will
  • Brute: Strong Fortitude, Weak Reflex, Average Will
  • Skirmisher: Weak Fortitude, Strong Reflex , Average Will
  • Controller : Average Fortitude, Weak Reflex, Strong Will
  • Lurker: Average Fortitude, Strong Reflex , Weak Will
  • Artillery: Weak Fortitude, Average Reflex, Average Will

I included AC values to give a better view of each role’s relative defenses. If we organize the scores by defense rather than by role, they look as follows:

  • Fortitude:
    • Strong for Soldiers, Brutes
    • Weak for Skirmishers, Artillery
  • Reflex:
    • Strong for Skirmishers, Lurkers
    • Weak for Brutes, Controllers
  • Will
    • Strong for Controllers
    • Weak for Lurkers

Note that, although each defense has equivalent scores on average, some show different degrees of variance. In particular, Will has a single Strong and Weak role (rather than 2 of each, like the other roles). This lets me give the Soldier role above-average defenses (with no weak score), and the Artillery role below-average defenses (with no strong score).

These values should provide a good baseline that can be applied to all existing monsters, or be used when designing new ones. As an option to add some variety, I suggest applying a +1 modifier and a -1 modifier to any two defenses (other than AC) to each individual monster, as the designer or DM sees appropriate.

Fixing monster resistances

Under the current rules, damage types are unbalanced because certain large groups of monsters get built-in resistances or vulnerabilities. Removing these resistances/vulnerabilities is not a very compelling option: on the one hand, they add a good deal of flavor and variety to monsters and, on the other, there is little point in having a damage type system unless we embrace resistances and vulnerabilities in monsters. The solution, then, is to go the opposite route, with a caveat. We will add many new group-wide resistances and vulnerabilities, but ensuring that for every damage type that is resisted by a monster group, there is another monster group of comparable size that is vulnerable to it (and vice versa). The result should be a system where damage types are relevant more often, but without having types that are clearly stronger or weaker than the rest.

We use the following assumptions as a starting point:

  • Most Undead monsters are vulnerable to Radiant damage, resistant to Necrotic damage, and immune to Poison. About 15% of monsters in the game are Undead.
  • Many monsters are resistant to Fire damage, including Devils and Fire-based monsters.

We decided to apply the following changes:

  • To streamline monster design, we implement resistance/vulnerability guidelines. Whenever the majority of a monster group tends to have a resistance or vulnerability, we make an explicit rule stating that all monsters of the group should have that trait. Hence:
    • Undead monsters have Vulnerable Radiant
    • Devil and Tiefling monsters have Resist Fire
    • Ooze monsters have Resist Acid
  • To balance damage types, we change some current resistance/vulnerability guidelines, and add some new ones as well:
    • Undead and Construct monsters have Resist Poison (instead of immunity)
    • Fey, Plant, and Swarm monsters have Vulnerable Poison
    • Aberrant, Immortal, Blind and Plant monsters have Resist Radiant
    • Shadow monsters have Vulnerable Radiant, Resist Necrotic
    • Undead monsters that are not of Shadow origin no longer have Resist Necrotic
    • Immortal monsters have Vulnerable Necrotic
    • Fire monsters have Resist Fire (in some cases instead of immunity), Vulnerable Cold
    • Cold monsters have Resist Cold
    • Cold and Plant monsters have Vulnerable Fire
    • Water monsters have Resist Acid
    • Construct monsters have Vulnerable Acid
  • Finally, we add a few resistances/vulnerabilities for flavor purposes
    • Aberrant monsters have Vulnerable Psychic
    • Construct, Plant and Eladrin monsters have Resist Psychic
    • Dwarf monsters have Resist Poison

If our proposed rules for resistances and vulnerabilities are used, these are resistances/vulnerabilities with no damage limit. Otherwise, add a resist/vulnerable value appropriate to the monster’s level (e.g. 5 per tier).

Our balancing takes into account the number of monsters of each type currently in the Compendium. You can check out the numbers we used in this spreadsheet. It is not really possible to achieve a perfect match between monster types and damage types without introducing some awkward flavor, so a few damage types still have a predominance of resisting monsters or vulnerable monsters. In particular, Poison slightly weaker than average, while Radiant leans on the stronger side. However, this effect is much smaller than with the previous rules, and not as one-sided - Poison becomes very useful against some fairly common monster types, whereas Radiant loses a lot of effectiveness against many foes.

To be honest, my ideal system for damage types would involve cutting the number of types by half or so, but that would take even more effort, and destroy any semblance of backward compatibility.

With our suggested changes, the resistances and vulnerabilities for each damage type end up as follows:

  • Poison -  R: Construct, Undead, Dwarf; V: Fey, Plant, Swarm
  • Radiant - R: Aberrant, Immortal, Blind; V:Undead, Shadow
  • Psychic - R: Construct, Plant, Eladrin; V: Aberrant
  • Necrotic - R: Shadow; V: Immortal
  • Fire - R: Fire, Devil, Tiefling; V: Plant, Cold
  • Acid - R: Ooze, Water; V: Construct
  • Cold - R: Cold, V: Fire
  • Lightning, Thunder, Force - no group-wide resistances or vulnerabilities.

Or, organized by monster type:

  • Undead - R: Poison; V: Radiant
  • Fey - V: Poison
  • Immortal - R: Radiant; V: Necrotic
  • Shadow - R: Necrotic; V: Radiant
  • Aberrant - R: Radiant; V: Psychic
  • Devil - R: Fire
  • Construct - R: Poison, Psychic; V: Acid
  • Blind - R: Radiant
  • Fire - R: Fire; V: Cold
  • Cold - R: Cold; V: Fire
  • Ooze - R: Acid
  • Plant - R: Radiant, Psychic; V: Poison, Fire
  • Water - R: Acid
  • Tiefling - R: Fire
  • Eladrin - R: Psychic
  • Dwarf - R: Poison

A note on Variable Resistance

A monster mechanic that is very relevant to the topic at hand but hasn’t been considered so far is the trait shared by all Demon monsters, Variable Resistance. The wording on this ability is rather ambiguous, and depending on your interpretation, Variable Resistance can vary in effectiveness between a minor, situational boost, to an almost permanent resistance for the five elemental damage types. I suggest using a new wording for this ability that makes it less ambiguous and a bit weaker, so that it can be considered as neutral for the purposes of damage type balance. 

Variable Resistance - At-Will - Free Action
Trigger: The character takes damage of one or more elemental damage types (elemental damage types are acid, cold, fire, lightning, thunder).
Effect: Choose one of the triggering damage types at random. After the damage is resolved, and until the end of the encounter, the character and all allies with this ability gain Resist against that damage type, and Vulnerable against another elemental damage type chosen at random. This effect ends when the monster or an ally use Variable Resistance again.

Note: A character with this ability must use it whenever it triggers. If the ability would trigger simultaneously for several allied characters, only one of them chosen at random can use it.


  1. I build all my monsters from scratch. I threw out the DMG's guidelines a long time ago, in pretty much every sense of the word. Running at epic level, I have pseudominions that have 50 HP, that can be taken down in one actual hit, but can't be autokilled easily via autodamage (ala Fire Shield and the like); stuff like that. I've lowered defenses a bit across the board, upping hit chances.

    Generally, I have enemies just default to all having the same NADs. It's boring, and there are some exceptions, but it's easier to avoid the defense fluctuation issue. The exceptions go as follows:

    "Brutes" are high fort, low reflex.

    "Skirmishers" are high reflex but not higher than AC, and have low fort.

    "Mages" and "spiritual undead" types are low fort, modest reflex, and high will.

    The balance here is that, enemy reflex will never be higher than enemy AC, so you know your vReflex attacks will never be super inaccurate. Fortitude fluctuates the most, being high/low, whereas will is generally consistent. On the other hand, since I tailor encounters to my PCs, and none of them really HAVE vWill attacks, it's largely a moot point.

    In regards to damage types, the system simply has developed so that PCs have mechanisms to ignore resistance. Yes, it kills the meaning of resistance in the first place (on the monster side anyway) but I don't consider that a bug, really, and since it requires feats/boons/whatever, which are presumably a finite resource, it's not terribly OP. Immunity is a bit more difficult to get around, but certain items are there to allow for it-and the most elementally geared character has Burn Anything (Everything?) so it's not that big of a deal.

    I really really don't endorse the "let's add more vulnerabilities into play!" model. That's like 3E, where you're playing a rogue so you may be god tier when you get 5 attacks against a human but oops! this encounter is a Stone Golem, so have fun being useless. 4E characters have their powers set not for one encounter, but for all encounters. While a "enemy is resistant in one encounter, but vulnerable in another" method may have the overall total level of usefulness of a character be level, the deviation between them is too wide. In addition, it's much easier to bypass resistance than it is for enemies to negate their own vulnerability, so a 1 for 1 conversion ("this monster is resistant, so this other monster has to be vulnerable) is ill advised.

    Really, I advise building monsters to fit your PCs, and building PCs to fit your monsters. Gear that addresses PC weaknesses (as in, something that allows characters to be effective *despite* the presence of resistance/immunity) is the simplest way of handling this. Other than that, resistances/immunity are mostly thematic.

    1. While I don't doubt that using custom monsters for a specific campaign provides excellent results, it does take a lot of effort and skill to do right. I'd rather have some rock-solid monster building guidelines, so that inexperienced DMs (or those without a ton of extra time) can always count get something useful out of the book.

      Regarding resistance removal mechanisms, they get the job done, but at the end of the day, you have all this complex system for damage types whose sole purpose is to force players to spend a feat so they can ignore it. I'd rather remove resistances altogether and treat damage types as pure flavor. But what I'd really like to have is a system where resistances and vulnerabilities can be relevant without ruining the game.

      Not that it's easy, of course. Single-element spellcasters are a popular character archetype, and the game needs to support those. Is our system robust enough to handle a Necrotic specialist adventuring with a Sun cleric ally, during an entire campaign in the Shadowfell? I want the former to feel somewhat weakened but not useless, and the latter to be advantaged but not overpowered.

      Eventually (that is, when I get to that chapter), I'd like the game to have feats and magic items that reduce (but not completely remove) resistances, at a cost that is not too steep, but remains significant. These are mostly aimed at mono-element characters - regular PCs using a variety of damage types should probably be able to cope with a power or two sometimes hitting for less.

      As for blanket vulnerabilities for monster groups, I think they should be mostly fine for isolated encounters, but probably need some compensating mechanics for heavily themed campaigns - something that does NOT remove the vulnerability (otherwise, what's the point?), but somehow makes attacks of that type dangerous or less effective. That could be handled through special environment properties, that add a critical failure chance to those attacks, or make them less accurate (though still more damaging), or something like that.

    2. I get the sense that some things really need two modes of design.

      Having a "Well, let's make this simple for inexperienced DMs" should come with the caveat "but let's not make this a straight jacket." I mean, I've found that with a decently optimized party, 4E's basic mechanics (in terms of determining enemy damage/etc) are actually ridiculously low in terms of difficulty. Using custom designs is largely there to allow for a higher level of game difficulty.

      Speaking of the Shadowfell, my campaign literally just got OUT of the shadowfell, and are now fighting against a literal army of the undead. On the other hand, MOST of these undead don't have radiant vulnerability. They're 100% poison immune, but then again, the Assassin picked up the "I bypass poison immunity" feat. Which is good, because she also has Ghost Scorpion Strike, allowing her poison attacks to bypass the insubstantial property.

      I think the "High amount of custom content" and "Low amount of custom content" styles of play are basically two entirely different games. I mean, they use the same core rules set, but it occurs to me that my methodologies would simply not work for someone who doesn't want to put in the time and effort.

  2. This comment has been removed by a blog administrator.

  3. This comment has been removed by a blog administrator.