Ships No One Understood Armour Resistances Correctly

Hey, hey!

I'm glad my clickbaity title lured you into this thread. But bare with me! It's true.

The backstory
About 1.5 years ago, I noticed, that one of my FDL builds had different resistances on its hull than was reported by coriolis. But for the love of god - taleden (edsy developer) and I were not able to figure out what went wrong. About two to three weeks ago, CMDR Flynxi King approached taleden and me with a different build for which coriolis (and edsy) reported wrong values. This was a promising counter-example because it was straightforward. So I sat down and gathered some data - stared at it for quite a while, and in the end, taleden managed to crack the code.

I already explained how I thought resistance stacking would work, 2.5 years ago in this thread: https://forums.frontier.co.uk/threads/this-is-how-resistance-stacking-works.439830/

But here's the updated version.

The Mechanic
So what are we actually talking about right now? We're thinking about the following problems:
  • Suppose you have a shield generator and three shield booster with the resistance augmented blueprint applied. What is the overall thermal/kinetic/explosive resistance of your shields?
  • Suppose you have reactive surface components with 4 hull reinforcement packages on your ship. What is the overall thermal/kinetic/explosive resistance of your ship?
We're not thinking about why your A-rated G5 resistance augmented shield booster gives you a boost of 17% for each resistance type. We take these values for granted. Let us first understand resistances properly. Internally, the game handles resistances as damage multipliers, i.e. as the factor for the damage to calculate the damage you actually receive in the end. If you have 30% thermal resistance, thermal damage received is multiplied with 0.7 - this is the damage multiplier. The damage multiplier for a 60% resistance is 0.4. So far, so good.

The naive stance to take on how resistances might be stacked is: Resistances are stacked multiplicatively. So if I have mirrored surface composites (50% thermal resistance) and two 3D hull reinforcement packages (1.5% thermal resistance) installed, one would intuitively think, that this nets you:
0.5 * 0.985 * 0.985 = 0.4851125
as a damage multiplier or ~51.49% resistance. However, this is not the case.

The reason for this are diminishing returns. How these work in principle was described by
FDev themselves back in the days. The idea behind them is the following:
  • The problem: With an infinite number of resistances stacked, i.e. damage multipliers below 1, you could approach a damage multiplier of 0 (100% resistance) as close as you would like. Practically, you could never receive no damage, but you could receive almost no damage. How can you avoid that?
  • The solution: Remap parts of the resistance space. In the post I linked above, it is described that the range of damage multipliers from 0 to 0.5 is remapped to 0.25 and 0.5. So every resistance you receive by shield boosters or hull reinforcement packages that exceeds a resistance of 50% is halved. The maximum resistance you could ever achieve in this model is 75%.
However, this is also not the case. The mechanics work (for the most part) the same way, but the numbers are different.

Shields
For shields, the following holds:
  • Resistances are stacked multiplicatively.
  • Diminishing returns start at: shield_generator_damage_mult * 0.7
  • Diminshing returns end at: (shield_generator_damage_mult * 0.7) / 2
Bottom line: Shield generator resistances mostly work as you would expect. Only that diminishing returns do not start at 50% but at some number that is dependent on the base resistance of the shield generator. Also, the maximum resistance depends on the base resistance of the shield generator.

Put differently: For shield generators, the range

[0, shield_generator_damage_mult * 0.7]
is remapped into the range
[(shield_generator_damage_mult * 0.7) / 2, (shield_generator_damage_mult * 0.7)].

This is a visualization of how the effects work on shields. The dashed line indicates the diminishing returns being applied.
resistance_stacking_shields.png


Alloys
So here are the new parts.
  • Resistances are stacked multiplicatively.
  • Diminishing returns start at: min(0.7, alloy_damage_mult, first_hrp_damage_mult, second_hrp_damage_mult, ...)
  • Diminishing returns end at: 0.35
  • Diminishing returns are applied, if the resulting damage multiplier is smaller than 0.7 - not if all damage multipliers multiplied again are below the start of diminishing returns.
Bottom line: Alloy resistances work basically the same way as to shield generators, only that the maximum resistance is set in stone. This means that additional resistances being added after having exceeded the start of diminishing returns are not halved but "however-close-you-already-are-to-the-maximum"-ed. They may be divided by three if your highest armour-related resistance on the ship (i.e. including HRPs) happens to be 47.5%. They may be divided by 4 if your highest resistances happens to be 56.25%, etc.

But the last point is especially weird. This can lead to your resistance being boosted by diminishing returns - not actually diminished. If your damage multiplier is between 0.7 and whatever your diminishing returns start value is, e.g. suppose you have mirrored surface composites (50% thermal resistance) equipped and one hull reinforcement package with G5 kinetic resistance (-8.35% thermal resistance), your thermal resistance is not
0.5 * 1.0835 = 0.54175
Or in other words, your resistance is not ~45.83%. Your resistance is actually 48.7% - better than it "should" be. This happens because you remap a value into a range that it will not end up in.

Put differently: For alloys most of the time (weird things happen if you are between 0.7 and the upper limit of the ranges), the range
[0, min(0.7, alloy_damage_mult, first_hrp_damage_mult, second_hrp_damage_mult, ...)]
is remapped into the range
[0.35, min(0.7, alloy_damage_mult, first_hrp_damage_mult, second_hrp_damage_mult, ...)].

This is a visualization of how the effects work for alloys. The dashed line indicates the diminishing returns being applied.
resistance_stacking_alloys.png


Conclusions
Shields
  • If you want high resistances, you should start with a high shield generator resistance.
  • These are the theoretically best resistances you can ever achieve with shield generators:
    • Explosive: 82.5%
    • Kinetic: 90.34% (best thermal resistance, in this case, is 51.7%)
    • Thermal: 80.68% (best kinetic resistance, in this case, is 74.8%)
Alloys
  • It's complicated...
  • If you want high resistances, you can:
    • Start with a high armour resistance, but then HRPs won't do much. But also, negative HRP resistance won't hurt much!
    • Start with some high HRP resistance. It's easy to overcome a negative base resistance on your alloys then.
  • For all types of resistances, the theoretical maximum you can ever achieve is 65%.
 
Well done. unfortunately this has been well known for a long time has demonstrated
here: https://cmdrs-toolbox.com/guides/shield-mechanics
and here:
Source: https://www.youtube.com/watch?v=qSlfF_nfXec&ab_channel=DowntoEarthAstronomy

It is also the basis for the automatic shield tester: https://cmdrs-toolbox.com/shield-tester

There are two things to note here. First:

No One Understood Armour Resistances Correctly

Second, both sources explain diminishing returns wrong. They state that diminishing returns for shields start at a damage multiplier of 0.7 straight which is false.
 
Source: https://youtu.be/XymXskyKTgg?t=56

CrimsonGamer99 demonstrated how you can abuse the Armor resistance calculation.
once the min(0.7, alloy_damage_mult, first_hrp_damage_mult, second_hrp_damage_mult, ...) is below 0.63 (likely this is how the game is implemented), the slop of the line to the end of diminishing return point (0, 0.35) becomes negative, thus any negative resistance using HRP will in fact decrease the damage multiplier ( increase the effective resistance)

with -237.84% effective HRP thermal resistance (338% effective HRP damage multiplier) and a 72.4% thermal resistance Core you can get 90% thermal resistance.
with -372.97% effective HRP thermal resistance ( which is not possible) you are 100% immune to thermal damage. :)

1716679942560.png
 
Back
Top Bottom