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:
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:
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:
Shields
For shields, the following holds:
Put differently: For shield generators, the range
This is a visualization of how the effects work on shields. The dashed line indicates the diminishing returns being applied.
Alloys
So here are the new parts.
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
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
This is a visualization of how the effects work for alloys. The dashed line indicates the diminishing returns being applied.
Conclusions
Shields
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?
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%.
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
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.
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.
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.
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%)
- 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%.