TL;DR: Make the diminishing returns of Damage Attenuation use a single formula that ensures a higher DPS always, predictably, and consistently leads to a higher actual DPS.
I know most people don't care about math but the recent discussions around the DR of Liches is a perfect example of how math has substantial gameplay impacts. The math matters, if you want good gameplay you have to have good math. I’ll be splitting this into a couple sections, each getting deeper down the well.
What is Damage Attenuation?
Damage attenuation is that annoying damage reduction (DR) effect that is currently making bad weapons better than good weapons when fighting Liches/Sisters. From what I’ve gathered this is done using your weapons stats. The game calculates a DPS based on the current stats of your weapon, including buffs from Warframe abilities, then applies a DR based on that DPS. This sounds simple but my lord DE has done everything in their power to make it complicated.
For example, Eidolons have four different calculations for their fancy DR. Which equation is used is based on if it is a critical hit or not and a ratio of DPS to fire rate.
Another example is Deimos Saxum. These guys have six different DR values, each their own equation that scales with DPS, which one is used is also based on DPS. None of these equations take crits into account (so crits effectively ignore the DR) and the damage from status effects have their own special DR.
Demolishers (the Disruption enemies) use a similar system to Deimos Saxum but they also get the benefit of having six equations for their status effect damage.
There isn’t any information as to what formulas Liches and Sisters use but I would be surprised if it weren’t equally as convoluted as the above.
If the above sounds like a load of cow poo then I am happy to say I 100% agree. Before we get to solutions I can see some saying “kill it with fire, remove all the fancy DR.” Before we get there I think it is important to go through why DE has put these things in place.
Why is Damage Attenuation?
At its most basic premise it is supposed to be a damage reduction scaling system that makes for a more consistent time to kill of an enemy across all levels of progression. It is supposed to make it so less geared players can do the same content as highly geared players where neither party has a 'bad' experience.
With the absurd levels of power scaling it is basically impossible for DE to pick a static EHP value for an enemy that won't be trivialized by late-game players but decent for earlier players (star chart bosses), satisfying for late-game players but impossible for mid-game players (Eidolons), or more commonly is both trivialized by late game players and annoying for early to mid-game (Demolysts). The number go up is just too strong to make an enemy a threat without also making them absurd.
The presence of damage attenuation isn't inherently bad. While it is effectively just a band-aid on a broken system it is better than nothing if you want to make bosses that feel like bosses. I personally wish it didn't exist but its presence is wanted by DE so we are stuck with it.
The problem with DE's current implementation is can be simplified to a single key issue, it isn't consistent. The damage reduction uses calculations done at the arsenal-level that don't properly correlate to in-game performance. It isn't making enemies more resistant to our damage, it is making our weapons deal less damage based on their stats. In a perfect world the outcome of those things would be the same, problem is that Warframe isn't simple. A DPS calculation doesn't tell the whole picture.
My approach was to first change the frame for reference from theoretical damage to actual damage. As enemies take damage the become more resistant to damage, your weapons are still pumping out the same amount of raw number. Then I used a smooth Damage Reduction formula to make the results of the DR feel predictable to the player. And finally the DR diminishes over time so this isn't just an enemy getting infinitely tanky until they die, the DR value eventually stops increasing as you shoot.
Better Damage Attenuation
Enemies gain Damage Reduction relative to health lost. This damage reduction is applied as a buff to an enemy, it affects all players equally. The damage reduction diminishes over time through having the amount of health lost only account for the past two seconds.
Over the first two seconds of damaging an enemy their DR will increase relative to how much damage you are doing. If you stopped shooting the enemy for two seconds the DR would fully reset. In practice if you continually shoot an enemy the DR would eventually settle on a static value (if the damage you are dealing is consistent). The more damage you are dealing the higher this ‘homeostasis DR’ is.
Because this is based on the amount of damage an enemy has taken it is “fair” to all incoming sources of damage and avenues of us buffing our own damage. If you hit a Sonar spot the enemy will take considerably more damage, thus it will have a higher DR. Self buffs, enemy debuffs, even abilities are all treated the same because the frame of reference is on the enemy.
That’s a lot of words without me saying what it is. I’ve been avoiding this part because math is scary, but here it goes, behold… a better damage attenuation.
[Actual Damage] is the final damage that you deal to the enemy.
[SUM] is the amount of damage the enemy has taken in the past two seconds.
[Damage] is the amount of damage you would have done after all other modifiers (abilities, crit, resistances, armor, etcetera) but before damage attenuation.
That… looks kinda scary, I get it. I just complained about how damage attenuation is too complicated and then I show you this. Hear me out though, the way it works is fairly simple and is based on an existing DR formula, armor.
How is Better Damage Attenuation
Go ahead and skip this section if all you care about is the results.
To explain how this works and my thought process I am going to break each part of the equation down piece by piece. Before that though, the core principles of how this DR works comes from armor so it is best to start there. I am going to explain things as if you know nothing about the math behind Warframe. I want to try and convince everyone that this formula works well so I have to assume a base knowledge of nothing. Apologies in advance if you are versed in the math of Warframe, I will mention a lot of things you already know.
Armor is often a point of debate but the contention should really be pointed at armor scaling, not the formula that converts armor to damage reduction. What this formula does is linearly increase an enemy’s effective hit points. For every 300 armor an enemy gets an additional 1x multiplier of health. For example, an enemy with 100 health and zero armor has an EHP of 100 (1x). If it has 300 armor it has an EHP of 200 (2x). If it has 600 armor it has an EHP of 300 (3x). This same math applies to a Warframe’s armor if you wanted a better understanding of how useful it is to build armor. An important part of this is that the difference between 0 and 1 armor is the same as the difference between 1000 and 1001 armor.
This is good ole’ faithful armor DR. Hopefully I explained what armor does well enough so explaining how it does it will make sense. The green blocks are the armor value and the orange block determines how strongly the armor turns into damage reduction. If you made the orange value 500 then you would need 500 armor to add a 1x multiplier to an enemy’s EHP. Increasing the value of the orange block decreases how potent the armor value is and vice versa.
To find actual damage you deal to an armored enemy you use the following.
The damage reduction from the armor formula first needs to be converted into damage taken. You don’t simply multiply DR by damage because then a higher DR would lead to a more damage… that’s not right. To convert damage reduction (the yellow block) into ‘damage taken’ all you do is subtract it from 1 (the purple block). Then multiply that by damage (blue block).
Hopefully this weird color-coding thing I am doing will help. Now to show how this transfers over to the damage attenuation formula.
Damage attenuation is a damage reduction so just like armor it needs to be converted into ‘damage taken’. Focusing on the yellow part….
And look… it is just the armor DR formula again (but a little bit bigger). The reason I chose to go with the armor formula as the core goes back to how it linearly increases an enemy’s EHP. You can add significant values of “armor” and the effect on combat won’t get out of control. I went with a significantly higher value in the orange block because this DR is meant to be reigning in the extreme high end of our damage.
The “armor” value is composed of two parts, the total [SUM] of damage taken in the last two seconds and… another thing. The [SUM] is what drives most of this formula. This number gets bigger over time, increasing the “armor” value, which increases the DR. About that pink part…
The first version I made of this did not have this section at all. The problem this created was that the first hit would be completely unaffected by this DR. If you used a sniper rifle it would ignore all of this fancy DR and one-shot enemies as if it did not existed. And if you didn’t manage to one-shot the enemy it would give you a substantial head start on killing the enemy.
To fix this I tried having this part just be [Damage]. The result was an inverse situation where weapons that hit slow and hard were majorly gimped in the long run when compared to high fire rate weapons.
I needed to meet in the middle somehow, the [Damage] value was a good start but it needed to be reduced as to make it not overbearing. So like any rational person I put an armor formula inside my armor formula. Yellow is another armor DR formula and the purple converts it into damage taken. This DR needs to balance reducing the impact of hard hitting, slow rate of fire items without gimping them in the long run.
Using both [Damage] and [SUM] in this made for the best balance in testing. I tried everything from just [Damage] in the armor DR to squaring the formula to just having static values. This made for the best balance between shot term alpha damage and long term sustained damage when comparing hit rates. Not much more to say on this.
The 100,000 and the two second window I have written this around isn’t the end-all-be-all of this formula. The two second window would likely be subject to change based on in game testing. The 100,000 is interesting because there is potential for it to differ depending on the enemy it is on. In general the higher this number the less impactful the damage attenuation is. On one end this could be scaled to be higher in end-game situations where it is expected that you are well geared. On the other end it could be reduced if the content takes place where most players weren’t progressed very far. This is an additional knob for DE to use to fine tune combat encounters. For example Jackal, being a new player boss, may use a value of 10,000. An Eidolon on the other hand may use a value of 500,000. The window time should probably be consistent across all enemies but there is also some potential there to change the number to fit the combat situation.
A long shot idea would be to have this value scale with enemy level, something like [Enemy Level]*10,000. Higher level enemies would be less resistant to damage as it is expected that you will be better geared to go against them (keep in mind they also have exponentially increasing EHP as they level up). Theoretically it makes for the experience of fighting an enemy with damage attenuation even more consistent as you progress through the game. How this would work in practice is far too complicated to surmise with just spreadsheets, but it would be an interesting thing to try. Something like this is impossible to imagine with how damage attenuation currently works, that’s the benefit of making a single equation that scales off only a single variable.
Hopefully that made sense… Now to get into lots of example numbers.
Results of Better Damage Attenuation
The first thing to show off is the “homeostasis DR” from earlier.
This shows how the damage reduction increases and decreases over time. That pointed tip is the drop off after the initial two seconds. You can then see that it slightly overcorrects before increasing again and becoming stable at the end of the time period. That DR it becomes stable at is directly to DPS.
A problem with the chart above is that it is using “perfect” DPS where every hit is of an equal damage value. This makes for pretty charts but it isn’t realistic, in practice our damage is far more inconsistent between crits, missing some shots, the occasional melee attack, etcetera.
Both the lines above have an average DPS of 200,000 over eight seconds where they are both dealing damage ten times per second. The damage values of the blue line randomly range from 17 to 52,728. This looks like a massive win to me, even when the damage per hit varies wildly the formula makes for a consistent homeostasis DR relative to the average DPS. For the next few examples I’ll be using “perfect” DPS to make the trends as clear as possible, this is here to show that even under imperfect conditions everything holds up.
This is showing a range of DPS between 5,000 and 1,000,000. Personally I’m not a big fan of using DR to show how this all works because DR only exists in numbers, what really matters is how much damage you are doing.
This I think gives a far better picture as to what is going on. The grey line is how much damage you would be dealing if the attenuated DR did not exist. Orange line is your DPS after the fancy DR. Everything comes together here, you can see how at lower DPS that the impact of this DR is far lower. It also shows that no matter what a higher DPS will always be higher. If you want to do more damage the answer will ALWAYS be to do more damage. This also visualizes that while the reduction in damage is significant, there is still a noticeable advantage to attempting to go for more damage. The difference between 600,000 DPS and 1,000,000 DPS isn’t the 66% increase it originally was but it still is 36% more.
There is a not-insignificant flaw in this formula that is the difference between low and high hit rate things. For the example I’ll have two cases, one that hits 40 times per second and another that hits 2.5 times per second. The Homeostasis DR is the DR after 8 seconds and the first hit DR is the DR applied to the first instance of damage. “Hits to Catch Up” is how many hits it takes for the 40 case to deal the damage dealt by the first hit of the 2.5 case. The higher the number the longer it takes for these two cases to become equal.
This clearly shows that the formula isn’t perfect. At “reasonable” DPS levels everything works fairly well. After a million DPS things fall apart a bit. I don’t see too much of a problem with this, it holds up solid where it matters and even when it breaks it isn’t the end of the world. After the eight seconds the total damage done of all the above cases flips back to being basically even with a slight favor towards the high hit rate. Yes, high alpha damage things will ignore a portion of the DR, but the amount of min/maxing you have to do to reach those points makes me think that the people who go through that kinda deserve it.
One more chart to emphasize that I don’t think this matters that much.
This is showing the total amount of damage dealt to an enemy over four seconds. This is assuming a hit rate of 10 per second and an average DPS of 1,000,000. Randomized hit values range from 0.1 to 416,000. I randomized this a few dozen times and this is the worst discrepancy between the perfect and imperfect I could manage. The theoretical flaw with high single instance damage doesn’t extend into practical examples.
That final chart is what really convinced me that this could work. Theoretical stuff is great and all but pretty equations have a tendency to break under randomization. It isn’t perfect, there is technically an imbalance, but no damage attenuation formula can be perfect. You would have to be able to see the future and retroactively change the DR with hindsight to actually be fair. DE doesn’t have a time machine to my knowledge so “perfect” is out of the question. In my opinion the formula I’ve rambled on about is as close as we can get to something that is fair.
Should we Damage Attenuation?
I’m putting this at the end because I don’t want my hot takes here to overshadow anything.
Progression is important. We spend hundreds to thousands of hours making ourselves more powerful. Adding a mechanic that levels the playing field, effectively devaluing our time spent powering up, just plain suck. While I like this formula I cam up with more than any humans should reasonably like numbers, the last thing I think is good for the game is to slap it on everything.
However… the more I think about the variety of places it has been used to more I side with DE. If the damage attenuation wasn’t an inconsistent load of horse poo it mostly makes sense.
Demolishers: Disruption is just a regular game mode that everyone is supposed to be able to play. Unfortunately the mechanics of Disruption make for potentially a wildly different experience between well geared players and everyone else. Demolishers aren’t just an enemy, they’re a mechanical objective. Applying attenuated damage to Demolishers makes that experience more consistent, everyone has to spend a moment to burst down these targets and everyone is able to burst down these targets. This is exactly what damage attenuation is for. That said, this is just a basic mission type. Well geared players with nutty builds being able to one-shot Demolishers isn’t hurting much. It is an empowering experience to go from struggling with these guys to being able to wile them out the same you would a Lancer. I’m not convinced either way of these enemies should have damage attenuation.
Nox: Yes, Nox currently have a light version of Damage Attenuation applied to their body. Generally, I would say adding damage attenuation to common spawn units is a massive mistake. Nox make me reconsider that. Using Damage Attenuation to encourage an enemy mechanic is a solid way to avoid making all other means of killing an enemy outside their mechanic impossible. Especially in the current predicament were having where single target has no place in the face of AoE, damage attenuation has a ton of potential to create a more common niche for single target things. More enemies like Nox that have damage attenuation when you aren’t engaging with their mechanic has a tone of potential to spice up gameplay.
Deimos Saxum (the two-legged dangling ball sack things): Deimos Saxum have a mechanic, you pop their two leg things then you are able to hard DPS their body. As it stands damage attenuation applies to Saxum even after their mechanic is dealt with which is… bad. On top of full body damage attenuation Saxum already have a flat 80% DR on their body before their mechanic is dealt with. Replace that 80% DR with damage attenuation then having breaking both leg things remove damage attenuation from the full body of Saxum.
Deimos Jugulus (the towering phallic mortar things): If these guys were not spawned constantly and were treated as a mini boss on the Cambion Drift I may be okay with this. As it stands though these guys are basically a common spawn unit with no mechanic to get past damage attenuation. Jugulus should just be tanks of EHP, able to be one-shot with ease by well geared players. Alternately their spawn rate could be substantially decreased, and threat level could be substantially increased. Or they could have a basic mechanic like Nox where only their body uses damage attenuation.
Deimos Therid (Infested Ancient 2.0): Why… these are essentially a basic Infested unit, they aren’t special mechanically and don’t add anything unique to the battlefield besides a change of scenery. They shouldn't have any damage attenuation unless there are significantly reworked to do something besides spit goo at you.
Eidolons: Get rid of it. Eidolons are a gear-check boss so having them gimp your gear just doesn’t make sense. It especially doesn’t make sense that this DR is applied to our Amps.
Lephantis: To my knowledge this is patient zero for damage attenuation. How it currently works is a mystery, although most things point to it being a soft cap on per-hit damage. One shotting Lephanits is a good chuckle but it takes away from one of the most imposing (and better designed) bosses in the game. It taking a few shots to take Lephantis down at all player levels is something I can understand.
Orphix: I think these things are probably one of the best use cases for damage attenuation. While rewarding well geared players with big number is important, this enemy represents an entire phase of a combat encounter. The mission is designed in a way for it to be a point in time where everyone focuses on the big baddie, not a quick one-shot that the majority of the party ignores.
Liches and Sisters: The thing that started all of this… Yes, I think these enemies should retain damage attenuation. These enemies represent a narrative thread as much as they do a combat encounter, a fight against your nemesis shouldn’t be over in a single shot.
As mentioned far earlier there is room to change the strength of damage attenuation by simply changing the 100,000 for something else. An enemy like the Orphix should have a higher value as you are expected go specifically gear into DPS’ing them down. On the other hand an enemy like Nox should have a lower value to make it more difficult to ignore their special mechanic.
By making Damage Attenuation a consistent and easy to adjust mechanic DE has a better tool in their toolbox that can be used to craft more interesting combat. And for us players it makes for a fair squish that still rewards our progression. It is a win win.
Thanks for coming to my ted talk.