Did I Hit?

2023-04-20 Update: The mathematics in this article has been presented in a supplement, avaiable on on DriveThruRPG with a pay-what-you-want pricing scheme.

Modern Dungeons and Dragons (3rd Edition Onwards) have all adopted a unified hit resolution system.

d20+Attack ModArmour Class    Hit\text{d20} + \text{Attack Mod} \ge \text{Armour Class} \implies \text{Hit}

Those well versed in gaming history, or experienced in Old-School Systems, will almost certainly be familiar with the older variant of this, introduced in 2nd Edition: THAC0.

d20+Attack ModTHAC0Armour Class    Hit\text{d20} + \text{Attack Mod} \ge \text{THAC0} - \text{Armour Class} \implies \text{Hit}

Those versed in mathematics will notice a significant difference with this sytem. Armour Class essentially acts as a bonus to your attack roll (simmilar to an attackers own Attack Mod). This is more clear as I rewrite it as this equivalent formula.

d20+Attack Mod+Armour ClassTHAC0    Hit\text{d20} + \text{Attack Mod} + \text{Armour Class} \ge \text{THAC0} \implies \text{Hit}

This therefore gives us that in older editions, lower armour class was better. This might seem alien to modern gamers, but it does make a sort of sence: "First Class Armour" is better than "Third Class Armour" after all.

So, this gives us two clear different forms of armour class. The modern sort: bigger is better, which is called "Ascending Armour Class"; and the old-school sort: lower is better, which is called "Descending Armour Class".

We'll call these aa_\uparrow and aa_\downarrow from now on to avoid confusion. We're also going to start calling the Attack Modifier mm, the THAC0 tt and the d20 Dice roll DD to keep things brief.

D+ma    HitD + m \ge a_\uparrow \implies \text{Hit}
D+mta    HitD + m \ge t - a_\downarrow \implies \text{Hit}

Unfortunatley for this article to progress, we're going to need to break down that mm a little bit further too. There are three properties that usually contribute to mm, the capability of the attacker (a modifier from strength or dexterity) mam_a, the experience of the attacker (profficiency bonus, skill bonuses, other things which improve significantly over time) mtm_t, and the bonus given by any magical weapon mmm_m. The significant part of this system is that the improvement over time mtm_t is not present in older systems, which represent it instead by improving THAC0.

D+ma+mt+mma    HitD + m_a + m_t + m_m \ge a_\uparrow \implies \text{Hit}
D+ma+mmta    HitD + m_a + m_m \ge t - a_\downarrow \implies \text{Hit}

Now we've managed to write the expression out in full, it's clear that as ma+mmm_a+m_m is common to both, we can ignore it for our comparison of these systems (for any algebra, assume they are just part of DD, we can always bring them out later if we need them). There's also a nice algebra trick we can do, which is to acknowledge we'd probably like to isolate aa_\downarrow on the right hand side of our expression, so that the information the player knows (their own statistics) is on the left, and the information the DM knows (enemy armour class) is on the right. This article isn't going to make any statements about the idea of DMs telling players the enemy AC, we will simply assume it's going to be in the DMs pervue for the time being.

D+mta    HitD + m_t \ge a_\uparrow \implies \text{Hit}
tDa    Hitt - D \le a_\downarrow \implies \text{Hit}

So, we have essentially got four terms here to play around with. mt,t,a,am_t, t, a_\uparrow, a_\downarrow. These four terms are currently organised such that they are related in pairs. For our purposes going forward, I think it's going to be useful to look at ways we can relate things in an unexpected way. First of all, the relationship between mtm_t and tt. Both are a measure of a persons experience and combat prowess, mtm_t increases over time: typically from 00. While tt decreases over time, for the oldest editions of D&D this decreases from 1919. So it might be fair to express the relationship as:

0+t=19mt0 + t = 19 - m_t

With 00 being the fact that mtm_t starts at 00, and 1919 being the fact that tt starts at 1919. If you have different values of these for whatever system you are looking at, feel free to make adjustments here.

The next values worth equating are aa_\uparrow and aa_\downarrow. We can take advantage of the fact that tt and mtm_t should always sum to 1919 to extrapolate that the same should be true for aa_\uparrow and aa_\downarrow, in order to keep the probability to hit the same.

t+mt=a+a_=19t + m*t = a*\uparrow + a\_\downarrow = 19

We can now use these, and DD, to build up four ways to evaluate probability to hit.

D+mta    HitD + m_t \ge a_\uparrow \implies\text{Hit}
D+19ta    HitD + 19 - t \ge a_\uparrow \implies\text{Hit}
tDa    Hitt - D \le a_\downarrow \implies\text{Hit}
19mtDa    Hit19 - m_t - D \le a_\downarrow \implies\text{Hit}

Of these structures, the most commonly used resolution method other than the two standard ones introduced so far is seen in the final row, rearranged to the following form.

D+mt+a19    HitD + m_t + a_\downarrow \ge 19 \implies\text{Hit}

This system is usually called "Target 20" after the fact it was popularised in a game that had 20 as the base THAC0 rather than 19. This system is particularly elegant, as it allows player to simply add numbers together to resolve hitting. The player can call out the sum of their dice roll and attack bonus, the DM can add the creatures armour class, and comparing with 19 can determine if a hit was achieved. The astute might note that this is equivalent of simply subtracting the aa_\downarrow from 1919 in order to calculate aa_\uparrow, and while this is true, addition is an easier mental model when working with creatures that already have a descending armour class written. Ultimately as a DM, I will likely perform this a=19aa_\uparrow = 19 - a_\downarrow conversion to obtain a single target number, but the equivalence of these systems provides flexibility.

This has another large benefit of compatability. Most monster stat blocks provided in old-school resources will use descending armour class. Especially those written in the era the games were created in (as ascending armour class was not popularised at that time). Using the "Target 19" system allows for using these without any mental conversion. However it eliminates THAC0 which often causes undue confusion for modern players, and allows them to keep their more familiar bonuses to hit.

There is one other system I'd like to look at. It's a form of 'Sandwich AC' where your goal is to roll as high as possible without going over. Stated simply.

a<Dmta_\uparrow' < D \le m_t'

As before, mtm_t represents a value that improves with experience, and aa_\uparrow is an armour value for which higher is better. I have represented these with a ' as we are going to need to do a little bit more work to get these values.

For this system, enemy armour values have a minimum of 1 and increase (typically, they may not exceed mt1m_t'-1 to allow a player to always have a chance to hit). The players own "attack bonus" (which is now a roll under target) also needs to start significantly higher. Ultimately, we would like to say an unarmoured foe has a specific armour value we would like to be the base. The worst AC that most systems are designed around is a=9a_\downarrow=9 which is a=10a_\uparrow = 10, as these are the default for an "unarmoured person". Sometimes ACs lower than these occur, but to my knowledge none are present in the 1981 Expert Edition of D&D, and as that's the easiest for me to search I'm going to treat them as a non entity for now.

So, with an ascending AC of 10 base being converted to an ascending AC of 1 base, we need to subtract 9 from all ascending ACs (a=a9a_\uparrow'=a_\uparrow-9) to get this roll between style AC. Alternatively the new a=10aa_\uparrow'=10-a_\downarrow. To the best of my knowledge, the most powerful old school monster in the afformentioned version I play is a Greater Elemental, Gold Dragon, or Dragon Turtle, each with an a=2a_\downarrow=-2. This gives them an easily attainable a=12a_\uparrow'=12. Meaning to hit the most powerful creatures, you must roll a 12 or higher, and under another as yet undetermined target number. This range from 1 to 12 seems entirely reasonable to me.

Next, we need to figure out the target roll under number. The simplest way for us to do this is to look at our pre-existing to hit resolution values. In the 1981 edition I run, the best possible mtm_t a fighter can have is +9. They can then get a further +3+3 from their strength and a +3+3 from a magic weapon, but we'll address this later. Intuitively, it would be nice if the strongest possible fighter had mtm_t' of 20: meaning that they are only limited by the opponents armour class. This would be equivalent to t=10t=10 or mt=9m_t=9, so therefore we might want to do mt=mt+11m_t'=m_t+11. We can't just go with what feels intuitively nice, we want to also capture the rough correct probabilities.

Let's start by looking at a level 1 fighter versus an unarmoured target, using a traditional ascending system to give us aa_\uparrow and mtm_t.

D+maD + m \ge a_\uparrow
D+010D + 0 \ge 10
D10D \ge 10
55 in 100 chance\text{55 in 100 chance}

Lets contrast this with the system I'm proposing.

a<Dmta_\uparrow' < D \le m_t'
1<D111 < D \le 11
50 in 100 chance\text{50 in 100 chance}

It being slightly lower is obvious undesirable. +11+11 provides such a nice parity of 2020 being the highest possible a person can acheive however, so I think the more sensible thing to do here is to lose the property I was originally trying to maintain of a 1 always missing, and allow AC to be one lower (meaning to hit an unarmoued target, you simply need to beat your own targer number). With this, we get:


This gives us again, with a level 1 fighter versus an unarmoured target.

a<Dmta_\uparrow' < D \le m_t'
0<D110 < D \le 11
55 in 100 chance\text{55 in 100 chance}

For a level 14 fighter versus a target in plate mail with a shield

D+maD + m \ge a_\uparrow
D+917D + 9 \ge 17
D8D \ge 8
65 in 100 chance\text{65 in 100 chance}
a<Dmta_\uparrow' < D \le m_t'
7<D207 < D \le 20
65 in 100 chance\text{65 in 100 chance}

It seems our setup works.

Now onto the more difficult task of dealing with those two values we've been ignoring this entire time. mmm_m and mam_a. Unfortunately, as bigger isn't always better in this system, adding them to DD would be unfairly punishing to the player, and adding them to mtm_t' would make them uneccessary to sufficiently advanced adventurers. To resolve this, I would simply leave them as a number of points players can add to their dice roll if they want to. This avoids the issue of them punishing players. The simplest way to state this is that your weapon modifier and strength allow you to increase your roll to hit up to but not above your target number.

Related Posts