\( % shorthand \newcommand{\attack}{\mathrm{atk}} \newcommand{\total}{\mathrm{tot}} \newcommand{\thresh}{\mathrm{th}} \newcommand{\weighted}{\mathrm{wt}} \newcommand{\crit}{\mathrm{c}} \newcommand{\hit}{\mathrm{h}} \newcommand{\miss}{\mathrm{m}} \newcommand{\fail}{\mathrm{f}} \newcommand{\save}{\mathrm{s}} % creatures \newcommand{\CR}{\mathit{CR}} \newcommand{\LV}{\mathit{L}} %\newcommand{\PC}{\mathrm{PC}} %\newcommand{\NPC}{\mathrm{NPC}} \newcommand{\NPC}{\mathrm{n}} \newcommand{\NPCs}{\mathrm{n}} \newcommand{\PC}{\mathrm{p}} \newcommand{\PCs}{\mathrm{p}} % general \newcommand{\AC}{\mathit{AC}} \newcommand{\HP}{\mathit{HP}} \newcommand{\AB}{\mathit{AB}} \newcommand{\SB}{\mathit{SB}} \newcommand{\DC}{\mathit{DC}} \newcommand{\HD}{\mathit{HD}} \newcommand{\CON}{\mathit{CM}} \newcommand{\rounds}{\mathit{R}} % damage \newcommand{\DPR}{\mathit{DPR}} \newcommand{\DPRcrit}{\DPR_{\crit}} \newcommand{\DPRhit}{\DPR_{\hit}} \newcommand{\DPRfail}{\DPR_{\fail}} \newcommand{\DPRsave}{\DPR_{\save}} \newcommand{\Nattacks}{\mathit{N}_{\attack}} % experience \newcommand{\XP}{\mathit{XP}} \newcommand{\eAC}{\mathit{eAC}} \newcommand{\eDPR}{\mathit{eDPR}} \newcommand{\eHP}{\mathit{eHP}} % encounter multiplier \newcommand{\EM}{\mathit{EM}} \newcommand{\W}{\mathit{W}} \)

Introduction

When it comes to monsters, challenge rating (CR) is the metric most often used to describe a monster’s overall combat strength. However, rather than relying on CR, the rules for encounter building in the Basic Rules opt for using monster experience points (XP) instead. This suggests that XP is a more direct measure of a monster’s true combat strength than CR, and that the XP values assigned to each CR were not arbitrarily chosen.

If XP values are not arbitrary and are, in fact, proportional to a monster’s total combat strength then that means we should be able to calculate a monster’s XP value from their offensive and defensive stat, similarly to how the DMG uses those stats to calculate a monster’s CR. Being able to calculate the XP for each monster individually would also provide us with a continuum of XP values to pull from when designing encounters, rather than the fixed XP values assigned to each CR.

In this post, I review one such method for calculating monster XP (the only method I’ve come across, to be fair). I show how it compares to listed XP values for published monsters, and how it can be used to improve our understanding of modifying monsters and balancing encounters. You can find a summary of the dataset used for this analysis here.

Calculating XP

The math behind this one is a bit complicated. For those interested in a full derivation, check out my post XP and Encounter Balancing. For the purposes of this analysis, though, I’ll be skipping the derivation and focusing on the conclusions for calculating monster XP instead.

With that out of the way, XP in 5th edition is proportional to the product of a monster’s effective hit points \((\eHP\,)\) and effective damage per round \((\eDPR\,)\), \begin{equation} \label{eq:XP-simple} \XP_{\NPC} = \frac{1}{4} \eHP \cdot \eDPR\,, \end{equation} which can be approximated as, \begin{equation} %\XP_{\NPC} = \frac{1}{4} \HP \cdot \DPRhit \left(1 + 0.077\left(\AC + \AB - 15\right)\right)\,, \XP_{\NPC} = \frac{1}{4}\HP \cdot \DPRhit \left( \frac{ \AC + \AB - 2 }{13} \right)\,, \label{eq:XP-full} \end{equation} where \(\HP\) is the monster’s average hit points, \(\AC\) is their effective armor class, \(\DPRhit\) is their average damage per round assuming all attacks hit, and \(\AB\) is their effective attack bonus.

When calculating a monster’s XP using Eqn. \eqref{eq:XP-full}, I’ll be following the same guidance given in “Creating a Monster” from chapter 9 of the DMG for calculating monster CR values. The key components of which are outlined below.

  • Three Round Encounters. Combat is assumed to last three rounds. Contributions to \(\AC\), \(\AB\), and \(\DPRhit\) are averaged over over these rounds, while contributions to \(\HP\) are added together.

  • Limited Area of Effect Targets. Abilities capable of targeting an area of effect (AoE) are assumed to only hit a modest number of target. This number is typically two for standard sized AoE abilities, like the fireball spell.

Example: Air Elemental

With the basic equations defined, lets look at an example monster to better understand how they work. For this example, I’ll be using the air elemental published in the Basic Rules, the stat block of which is shown below.



Air Elemental

Large elemental, neutral

Armor Class

15

Hit Points

90 (12d10 + 24)

Speed

0 ft., fly 90 ft. (hover)

STR

14 (+2)

DEX

20 (+5)

CON

14 (+2)

INT

6 (-2)

WIS

10 (+0)

CHA

6 (-2)

Damage Resistances

lightning, thunder; bludgeoning, piercing, and slashing from nonmagical attacks

Damage Immunities

poison

Condition Immunities

exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained, unconscious

Senses

darkvision 60 ft., passive Perception 10

Languages

Auran

Challenge

5 (1,800 XP)

Air Form.

The elemental can enter a hostile creature’s space and stop there. It can move through a space as narrow as 1 inch wide without squeezing.

Actions

Multiattack.

The elemental makes two slam attacks.

Slam.

Melee Weapon Attack: +8 to hit, reach 5 ft., one target. Hit: 14 (2d8 + 5) bludgeoning damage.

Whirlwind (Recharge 4–6).

Each creature in the elemental’s space must make a DC 13 Strength saving throw. On a failure, a target takes 15 (3d8 + 2) bludgeoning damage and is flung up 20 feet away from the elemental in a random direction and knocked prone. If a thrown target strikes an object, such as a wall or floor, the target takes 3 (1d6) bludgeoning damage for every 10 feet it was thrown. If the target is thrown at another creature, that creature must succeed on a DC 13 Dexterity saving throw or take the same damage and be knocked prone.

If the saving throw is successful, the target takes half the bludgeoning damage and isn’t flung away or knocked prone.


For defensive stats, the air elemental has 90 (12d10 + 24) HP and an AC of 15. Because the air elemental has resistances to multiple damage types - including bludgeoning, piercing, and slashing from nonmagical attacks - the DMG recommends multiplying its HP by 1.5 for an adjusted total of 135 HP.

On the offensive side of the equation, the air elemental can use its Multiattack or Whirlwind action during its turn. The Multiattack action allows the air elemental to make two Slam attacks for a total of 28 (4d8 + 10) bludgeoning damage with an AB of +8.

The Whirlwind action requires a DC 13 Strength saving throw, which is roughly equivalent to a +5 attack bonus, and deals 15.5 (3d8 + 2) bludgeoning damage to creatures who fail their save, with an additional 3.5 (1d6) bludgeoning damage if the creature is thrown into an object. Assuming the extra damage is always applied and that two targets are affected, the action deals 38 bludgeoning damage in total.

Assuming the air elemental is able to use Whirlwind once and Multiattack twice during a three round encounter, their average \(\DPRhit\) would be 31 and their effective attack bonus would be around +7.

Feeding these values into Eqn. \eqref{eq:XP-full} gives 1,610 XP, while only 89% of the creature’s listed value of 1,800 XP, is still high enough to qualify it as a CR 5 monster. This tells us that the air elemental is likely on the weaker side of of CR 5. And, given how much its HP was adjusted to account for its multiple resistances, when facing PCs with access to magical weapons its combat strength will be more on the lower side of CR 4, and possibly even on the upper side of CR 3 depending on how its played.

Not only does this method for calculating a monster’s XP give us additional insights into how tough the monster might be for our PCs, it also gives us an easy method for adjusting monster’s to fit our needs. When facing PCs with magical weapons, we can increase the air elemental’s hit points by 50% to compensate for their resistances being less valuable. Alternatively, if we it to be a more offensively oriented monster, we could increase the damage of each of the air elemental’s actions by 50% instead.

Full Comparison

To check the accuracy of this approach, I applied Eqn. \eqref{eq:XP-full} to monsters with CRs of 1 or more, taken from official 5th edition source books. I used the same adjusted HP, AC, DPR, and AB values I used previously in Calculating Monster CR. A comparison of the calculated XP values and listed XP values is shown in Fig. 1 below.

Figure 1: Calculated XP mean (line) and 60% confidence interval (shaded region) vs listed XP.

The general trend shows a strong correlation between the two, however, there are some small differences. Namely, that this method tends to underestimate monster XP at low CRs and slightly overestimates it at high CRs.

Figure 2: Calculated CR mean and 60% confidence interval vs listed CR.

Next, I converted the calculated XP values to their equivalent CR for each monster. As Fig. 2 illustrates, the CRs calculated using this method are generally in good agreement with the CRs listed in the monsters’ stat blocks, with the vast majority of monsters having a calculated CR within +/- 1 of their listed value.

Figure 3: Shows the difference between the calculated CR and the listed CR as a function of CR for both calculated XP and CR calculated using the method given in the DMG.

When compared with the method for calculating CR in the DMG, as shown in Fig. 3, the results are also quite close. Both tend to underestimate monster CRs at the lower end of the CR spectrum, and both tend to overestimate it as well at the higher end.

Conclusion

In conclusion, I have demonstrated how XP can be calculated directly from monster stat blocks with good accuracy for the majority of published monsters, and that those XP values can be used to accurately estimate a monster’s CR.

This understanding of XP highlights new and intuitive ways we can adjust monsters to better match any one particular group. There is a lot more I could dive into here regarding XP calculations for published monsters but I think those are topics best left for a later post.