Archive

Archive for September, 2013

From protection to mitigation

September 16, 2013 2 comments

Protection is the attribute that enables you to mitigate incoming magical damage. Just as there are five different kinds of magic damage (holy, unholy, cold, electrical, and fire), there are also five corresponding kinds of protection: “protection (holy)”, “protection (unholy)” and so on. When you see generic protection without anything in parentheses after it, as is the case on many pieces of armor, feats, etc., this means that your piece of armor (or feat, etc.) will contribute that amount to each of the five kinds of protection.

Besides protection that you find directly on gear, feats, buffs, etc., you also get some protection from wisdom and intelligence. Each point of wisdom contributes 0.5 points of holy and unholy protection; each point of intelligence contributes 0.5 points of cold, fire, and electrical protection. Wisdom and intelligence come mostly from gear, though some of it is also innate (the exact amount depends on your class and level).


(Click to enlarge.)

In the above example, we have 1213 holy protection, of which (as it turns out) 450 came from having 5/5 points in Holy Wards (passive AA perk) and the rest came from our having 1527 wisdom (of which 190 was innate and 1337 came from gear). Similarly, we have 510 cold protection, of which 450 comes from 5/5 points in Frost Wards and the rest comes from our having 120 intelligence (all of which is innate — this was taken on a ToS, so my gear didn’t have any intelligence on it). I didn’t have any gear or buffs that would be specific to just one type of protection, so the amount of holy and unholy protection is the same, and the amount of fire, cold and electrical protection is likewise the same.

But what I’m really interested in today is the little floating tooltip next to the mitigation column. We see that our holy mitigation is 17.3%, so a hit that would otherwise (if we didn’t have any mitigation) hit us for 1000 points will now hit us for only 827 points of damage. But how exactly do we get from 1213 to 16.5%, and from there to 17.3%?

As you are no doubt familiar with if you’ve been doing any tinkering with combat-related numbers, the most important magic number in Age of Conan is 36.6. It occurs in all sorts of stat-related conversions and calculations. But when it comes to protection, the magic number turns out to be 73.7. You get the initial percentage of mitigation by dividing your protection by 73.7. Sure enough, 1213 / 73.7 = 16.4586…, which the GUI rounds to one digit after the decimal point and thus shows us 16.5%, as we saw in the above image.

After that, invulnerabilities get applied. Invulnerabilities are yet another set of stats, again one for each type of damage; they were more prominent in the pre-1.05 days than now. In my case above, I just have 1% invulnerability, which, as it turns out, comes from guild city buffs: Temple III and Architect Workshop III give you +0.5% invulnerability each, to all types of magic damage. (Tier I and II versions of these buildings give +0.2% and +0.3%, respectively, but it appears that these buffs do not stack.)

So a hypothetical incoming hit of holy damage that would hit us for 1000 points if we had no mitigation or invulnerability would, in our above example, first get mitigated by our protection, which would reduce it by 16.5%, leaving about 835 points of damage. This would then be further reduced by 1% by our holy invulnerability; now, 1% of 835 is 8.35, so that leaves us with 835 – 8.35 = approx. 827 points of damage. Thus you might say that these two things together, protection and invulnerability, have mitigated 1000 − 827 = 173 points of damage, which is 17.3% of the original 1000 points.

So you might say that our overall holy mitigation is 17.3%, and this is the figure that gets shown in the main part of the GUI (which is reasonable, since when you’re getting hit by an enemy, you probably don’t care very much whether incoming damage gets mitigated by your protection or by your invulnerability, as long as it actually gets mitigated).

Let’s summarize these things with formulas:

• Mitigation from protection, in %, is mp = protection / 73.7.

• Mitigation after applying invulnerabilities, in %, is ma = 100 − (100 – mp) · (1 – invul/100), where invul is the bonus invulnerability in %.

The magic number

But how did we get the magic number 73.7? And how reliable is it? To test this, I was swapping my gear around a bit and observing the numbers in the GUI.

At one particular combination of gear, I had 667 holy protection (most of which came 5/5 points in Holy Wards, and the rest from my 434 wisdom), and the GUI showed my mitigation to be 9.1% before invuls and 10.0% afterwards. Now, we know that these numbers are rounded to one decimal point for the sake of display, so the true mitigation after invuls can be anywhere in the range [9.95, 10.05]. If you plug ma = 9.95 into the above formula for ma (with invul = 1) and solve for mp, you get mp = approx. 9.0404%; if you similarly plug ma = 10.05, you get mp = approx. 9.1414. So from the fact that ma is in the range [9.95, 10.05], we can conclude that mp is in the range [9.0404, 9.1414]. But since the GUI showed mp as 9.1%, this means that mp must be in the range [9.05, 9.15]. Combining these two things tells us that mp must be in the range [9.05, 9.1414]. If we denote the ratio protection / mp by R, we now see that R must be at least protection / 9.1414 and can be at most protection / 9.05. Since in our case, protection was 667, this tells us that R must be in the range [72.9646, 73.7016].

I repeated this experiment with a different combination of gear, where I had 1006 holy protection (some from Holy Wards, some directly on gear, and the rest coming from my 812 wisdom), and the GUI showed my holy mitigation to be 13.6% before invuls and 14.5% afterwards. If we analyze this case in the same way as we did in the previous paragraph, we now see that R must be in the range [73.6996, 74.0476].

Combining both ranges tells us that R must be in the range [73.6996, 73.7016]. So as far as I’m concerned, it’s quite hard to imagine that the correct value of R is anything else than 73.7.

(I also observed the mitigation at numerous other values of protection and any R in the above-mentioned range would be able to explain all my observations.)

Extreme invulnerabilities

Incidentally, the way invulnerabilities work has some curious consequences. For example, the ToS bubble, Serpent Transmutation, is implemented as an invulnerability buff: it gives you +133% invulnerabilty to all normal types of damage (i.e. excluding things like fall damage, drowning damage and untyped damage). If we add 1% invulnerability from guild city buffs, we now have 134% invulnerability. This means that incoming damage is reduced by 134%, so it becomes negative and therefore heals you. You get healed by 34% of the amount that you would have taken as damage if you had no invulnerabilities.

The curious thing comes as a consequence of the fact that invulnerabilities are applied after the initial mitigation from protection. You get healed by 34% of the amount of damage that is left after it has been mitigated by your protection — so the better your protection is, the less healing you will get from your bubble. You can easily verify this by plugging invul = 134 into the above formulas, or by looking at the following screenshots. We had more unholy than electrical protection, but during Serpent Transmutation our electrical mitigation was higher than our unholy mitigation:


(Click to enlarge.)

Odd wisdom and non-integral protection

We said earlier that 1 point of wisdom contributes 0.5 points of protection. You might ask what happens if your overall amount of wisdom is an odd number. For example, 227 wisdom should theoretically contribute 113.5 protection. But can your protection be a non-integer? Will it get rounded to 114? Or maybe to 113?

That’s easy enough to test. Wearing nothing but Archpriest’s Gloves of the Underworld, my ToS had 227 wisdom (190 innate + 37 from the gloves), plus another 450 protection from Holy Wards. So theoretically my protection should be 227 · 0.5 + 450 = 563.5. The GUI showed my holy protection as 563, but the tooltip next to it says that my mitigation (before invulnerabilities) is mp = 7.6%.


(Click to enlarge.)

If we trust the 73.7 ratio that we established earlier, we can see that:

  • 563 / 73.7 = approx. 7.6391
  • 563.5 / 73.7 = approx. 7.6459
  • 564 / 73.7 = approx. 7.6526

If the game had rounded our protection up to 564 before further calculations, then the resulting mp would be above 7.65% and would therefore be rounded up to 7.7% when being displayed with one digit after the decimal point.

Walking around wearing nothing but gloves is a bit uncomfortable and makes horny people stare, so let’s put some shoes on as well! Boots of the Unutterable will increase our wisdom by 104, therefore our holy protection will increase by 52 and will now be 615.5. The GUI shows it as 615 and shows the resulting mp to be 8.4%.


(Click to enlarge.)

Just like before, we can see that:

  • 615 / 73.7 = approx. 8.3446
  • 615.5 / 73.7 = approx. 8.3514
  • 616 / 73.7 = approx. 8.3582

So if the game had rounded our protection down to 615 before further calculations, the resulting mp would be below 8.35% and would therefore be displayed in the GUI as 8.3%, not 8.4%.

So we can see that neither rounding down nor up can explain our observations — the game internally works with the correct protection value even if it isn’t an integer, and this value gets rounded (down, as it happens) only for display purposes (in the “Protection” column on the left).

Some related mechanics

While making a few tests on my guardian (on which more below) I noticed the following:

Bonus Protection: this stat (you see it e.g. on a guardian’s Mental Barrier maneuver or the Juggernaut ability) affects only generic protection, not the damage-specific kinds of it. Thus it also doesn’t affect the protection you get from wisdom, intelligence, or from the Wards AA perks.

Damage Mitigation: this appears as a stat on the tooltips of Defensive Stance and a guardian’s Defense tactic. In terms of how it affects magical mitigation, it seems to be nothing else than a synonym for invulnerability. If you switch to defensive stance, just add 10 to invuls in our above formulas and everything works the same as before.

Tests with the guardian also confirmed that protection is always rounded down for the purposes of display in the first column of the Magical attributes tab. At one point I had 3310 holy protection, of which 35 came from my 70 wisdom, 450 came from Holy Wards, and the rest was in the form of generic protection on gear, Stone Skin, and Chromatic Warding. Thus you would expect that 3310 − 35 − 450 = 2825 of this protection would be affected by Mental Barrier, and switching to it should therefore give us an extra 15% · 2825 = 423.75 protection, so our holy protection should now be 3310 + 423.75 = 3733.75. So you might expect the GUI to show the protection as 3734 if it wanted to round it to an integer, but in fact it displayed 3733.

High protection

I’ve made the measurements described so far on my ToS, but fortunately I then decided to do a few tests on my guardian to see if the formulas also work there. It turns out that the formula mp = protection / 73.7 that we’ve seen so far only works as long as the resulting mitigation is no higher than 50% (which happens at 3685 protection). After that point, the mitigation is no longer a linear function of protection; it’s something sublinear, but I didn’t manage to figure out the exact formula.


(Click to enlarge.)

Each dot on the chart represents one particular combination of gear (and buffs such as Mental Barrier maneuver and the Juggernaut ability, each of which gives you +15% bonus protection). The dots are of two different colors, but this difference isn’t really important. Blue dots represent spiritual protection (i.e. holy and unholy) and purple ones represent elemental protection (i.e. fire, cold, electrical) — they were different partly because my guardian has more wisdom than intelligence (70 wis, 60 int), and partly because I equipped a Quill of Ibis with an elemental protection gem (Sanguine Radiant Sapphire: +156 elemental protection). This was convenient as it allowed me to get two different data points from each combination of armor and accessories; and as we can see, both series of dots lie on the same curve anyway.

We can see how all the dots up to 3685 protection = 50% mitigation lie on a straight line; in fact this line is shown in orange below the dots, but it’s mostly hidden by the dots themselves. From that point onwards, the measurements no longer form a straight line, but a curve which grows more and more slowly. I showed two straight lines of different slopes for comparison, to make it easier to notice how the data is not on a straight line. In between those two is a curved orange line which fits the data a lot better, though not perfectly; it is based on the formula at the end of this section.

I suspect the origins of this nonlinear relationship go back to update 1.07; see the following post by a developer named Ilaliya, replying to people who noticed that their mitigation had been decreased [source]:

I apologize this was not in the patch notes.

In order to support a level-less expansion, we had to recalculate the section of the armor formula where armor values give above 50% mitigation (not including things like defensive stance). Note this change should only really impact soldiers who are in gear greater than T1. And even then, players will only be affected in most cases by less than 1%.

This change was to make armor much more future proof, in order to accommodate the substantial power increases obtainable through the expansion. Due to how %-based mitigation works mathematically, each additional % of mitigation is more valuable than the previous %. To illustrate this, consider that someone with 50% mitigation is taking half damage. 75% mitigation is taking half-damage of that, and 87.5% is taking half damage of that. The closer you get to 100%, the fewer and fewer % mitigation it takes to continually half incoming damage. At the extreme case, someone with 99% mitigation is taking half the incoming damage as someone with 98% mitigation.

When we raised the existing stat caps for the expansion, we found the existing armor formula scaled too quickly for the new values we wanted to give out. The armor formula above the 50% mitigation mark was changed as an outcome of this. Again, we apologize for any confusion or inconvenience this may have caused you guys.

He talks here about armor (and hence physical mitigation), but I suspect that the same thing happened to protection (and magical mitigation).

So perhaps the idea is that (once your mitigation is above 50%), adding a constant amount of extra protection should decrease your incoming damage in the same proportion regardless of what your initial protection was. Or in yet other words, it should cost the same amount of protection to move your mitigation from 50% to 75% as it would cost to move it from 75% to 87.5% or from 98% to 99%.

The proportion of damage that reaches us after mitigation is 1 — mp/100 (where mp is the mitigation in percent). Let’s call this quantity d. So if we had 50% mitigation, we’d have d = 1/2; at 75% mitigation we’d have d = 1/4; at 87.5% we’d have d = 1/8 and so on. If we take the base-2 logarithm of d and multiply it by −1, the result tells us how many times damage had been halved from the initial (unmitigated) amount. This quantity, − log2 d, is what we would expect (based on Ilaliya’s post above) to be a linear function of protection. Let’s explore this idea with a chart:


(Click to enlarge.)

Here we have protection on the x-axis and − log2 d on the y-axis. Thus y = 1 corresponds to 50% mitigation; y = 1.1 corresponds to approx. 53.3% mitigation; y = 1.2 corresponds to approx. 56.5% mitigation; and y = 1.3 corresponds to approx. 59.4% mitigation. The dots are based on the same measurements as the previous chart, except that they are all the same color and that those with less than 50% mitigation have been discarded. Unfortunately, as we can see, the relationship isn’t quite linear — our dots clearly don’t all lie on a single straight line. (The red trendline is a straight line, given for comparison.)

I tried a few other ways to transform the data in the hopes of finding some sort of elegant linear function somewhere, but without success. One of the best attempts was to use a logarithmic scale on both axes. On the following chart, the x-axis shows log(protection − 50 · 73.7) and the y-axis shows log(mp). The scattering of the dots on the lower left part of the chart might seem a bit odd at first but it’s just due to the fact that our mitigation values (as we see them in the GUI) are rounded to just one digit after the decimal point. The more annoying thing happens at the right end of the chart, where we can again see that the relationship between y and x is sublinear — the dots clearly don’t all lie on a straight line.


(Click to enlarge.)

So, anyway, I don’t have a nice exact formula for computing mitigation from protection above 50%. The closest one I managed to find is:

mp ≅ 50 + (protection − 50 · 73.7 − 15)0.892 / 78.55.

If you round the result of this formula to one digit after the decimal point, it doesn’t differ by more than 0.1 from the value shown in the GUI for any of my measurements (i.e. the dots in the previous charts). (The extra −15 subtracted from the protection helps with the accuracy, but it does mean that you can’t use this formula for protections below 3701. Between 3685 (= 50 · 73.7) and 3701 you can still use the old formula, mp = protection / 73.7; again the results, rounded to one digit after the decimal point, won’t differ from those in the GUI by more than 0.1.)

This approximate formula might be potentially useful for some rough calculations, but it isn’t really satisfactory if you want to be exact. The whole reason why I started this investigation of protection was because the mitigation rounded to 0.1% as shown in the GUI was too imprecise for some of my subsequent calculations. Now we have a more precise formula for mitigation below 50%, but above 50% our formula doesn’t really have any advantages over just taking the mitigation as it is shown in the GUI.