Update and Improve Elemental Ailment Calculation#61
Conversation
Adds support for Ghost Shrouds; mod parsing, config option, and override.
This reverts commit eeca005.
- Moves Shock and Freeze calculations to its own Calc box - Adds calculation for total increased effect of Shock and Freeze - Adds similar calculations for Chill(total increased effect and duration mod) - Shock and Chill calculations updated to their 3.9.0 threshold of about ~0.4% of enemy life - Freeze calculation updated to include Freeze Effect - Updated the default Shock value to 15% in a couple of places (Namely when the player is Shocked and the "Is Enemy Shocked?" tooltip)
NickRyder
left a comment
There was a problem hiding this comment.
Thanks for looking into this!
I believe all your formulas are currently incorrect, so please revise them - and I'll take a look afterwards.
| { label = "Inc. Freeze Effect", flag = "freeze", { format = "{0:output:FreezeEffectMod}%", | ||
| { label = "Player modifiers", modName = "EnemyFreezeEffect", cfg = "skill" }, | ||
| { label = "Enemy modifiers", modName = "SelfFreezeEffect", enemy = true }, |
There was a problem hiding this comment.
Freeze Effect currently has no impact on the game, as confirmed by MarkGGG here:
https://www.reddit.com/r/pathofexile/comments/6t25ie/increased_effect_of_nondamaging_ailments_on/
| combineStat("ShockEffectMod", "AVERAGE") | ||
| combineStat("FreezeChance", "AVERAGE") | ||
| combineStat("FreezeDurationMod", "AVERAGE") | ||
| combineStat("FreezeEffectMod", "AVERAGE") |
There was a problem hiding this comment.
FreezeEffectMod has no affect in the game currently:
https://www.reddit.com/r/pathofexile/comments/6t25ie/increased_effect_of_nondamaging_ailments_on/
| if baseFreezeVal > 0 then | ||
| skillFlags.freeze = true | ||
| skillFlags.chill = true | ||
| output.FreezeEffectMod = skillModList:Sum("INC", cfg, "EnemyFreezeEffect") |
There was a problem hiding this comment.
FreezeEffect currently has no affect in the game:
https://www.reddit.com/r/pathofexile/comments/6t25ie/increased_effect_of_nondamaging_ailments_on/
| output.ShockEffectMod = skillModList:Sum("INC", cfg, "EnemyShockEffect") | ||
| if breakdown then | ||
| t_insert(breakdown.ShockDPS, s_format("For shock to apply, target must have no more than %d life.", baseVal * 20 * output.ShockDurationMod)) | ||
| t_insert(breakdown.ShockDPS, s_format("For shock to apply, target must have no more than %d life.", baseVal * 250 * output.ShockDurationMod * (1 + output.ShockEffectMod / 100))) |
There was a problem hiding this comment.
This formula is incorrect:
.05 = (1+increased_effect/100) * 1/2(damage_dealt/ailment_threshold)^(.4)
which implies
ailment_threshold = -((100 + increased_effect)^(5/2) damage_dealt)/(100 sqrt(10))
Also please update the wording to indicated
- minimum shock of 5%,
- target must have no more than %d ailment threshold
| output.ChillDurationMod = 1 + skillModList:Sum("INC", cfg, "EnemyChillDuration") / 100 | ||
| if breakdown then | ||
| t_insert(breakdown.FreezeDPS, s_format("For freeze to apply, target must have no more than %d life.", baseVal * 20 * output.FreezeDurationMod)) | ||
| t_insert(breakdown.FreezeDPS, s_format("For freeze to apply, target must have no more than %d life.", baseFreezeVal * 20 * output.FreezeDurationMod * (1 + output.FreezeEffectMod / 100))) |
There was a problem hiding this comment.
The freeze formula did not change this patch:
freeze_duration = (1+freezeDuration/100)*6*(damage/ailment_threshold)
minimal freeze is .3 seconds.
.3= (1+freezeDuration/100)*6*(damage/ailment_threshold)
Please solve for damage appropriately here and update the text to indicate the length of minimal freeze and the fact its out of ailment_threshold and not life.
| if breakdown then | ||
| t_insert(breakdown.FreezeDPS, s_format("For freeze to apply, target must have no more than %d life.", baseVal * 20 * output.FreezeDurationMod)) | ||
| t_insert(breakdown.FreezeDPS, s_format("For freeze to apply, target must have no more than %d life.", baseFreezeVal * 20 * output.FreezeDurationMod * (1 + output.FreezeEffectMod / 100))) | ||
| t_insert(breakdown.ChillDPS, s_format("For chill to apply, target must have no more than %d life.", baseChillVal * 250 * output.ChillDurationMod * (1 + output.ChillEffectMod / 100))) |
There was a problem hiding this comment.
This is incorrect - please reference the shock comment above
|
Also generically it should be noted that this is the life needed to get ailments on the average hit. This is not equivalent to the average life needed to get your ailment over all your hits. If you damage distribution is pretty narrow this distinction is not particularly important, but for builds with large damage distributions (like change to deal double damage, crit, lightning damage) these numbers will be very different (if you roll high on all of those you will freeze an opponent with much less life than displayed). |
Learned that Effect of Freeze does nothing because it's an on/off state, not something that can be scaled/increased. Removed the inc. freeze effect display and also fixed calculation for highest life total you can freeze.
Updated the calculations to use the actual equations rather than simplified ones. Also added information to the tooltips that indicate that the minimum Chill/Shock that will be applied and for how long.
|
Alright, I updated all the calculations and made it so the tooltips mention that the minimums are 5% for 2 seconds(0.3 seconds for Freeze). Also changed "life" to "ailment threshold". Also, I did try to add a note explaining what Ailment Threshold is, but I couldn't get it to fit into the tooltip properly. Here's what it looked like before I removed it(tooltip wasn't final): As you can see, the note goes down a bit into the "Player modifiers" label on the table. I tried a few things but all of them had caveats:
I couldn't figure out any way of just adding an extra blank line or something so that it has more space, so I just removed it. If anyone knows how to do that, it's pretty simple to add the note back in. |
| output.ShockEffectMod = skillModList:Sum("INC", cfg, "EnemyShockEffect") | ||
| if breakdown then | ||
| t_insert(breakdown.ShockDPS, s_format("For shock to apply, target must have no more than %d life.", baseVal * 20 * output.ShockDurationMod)) | ||
| t_insert(breakdown.ShockDPS, s_format("For the minimum 5%% Shock to apply for 2 seconds, target must have no more than %d Ailment Threshold.", (((100 + output.ShockEffectMod)^(2.5)) * baseVal) / (100 * m_sqrt(10)))) |
There was a problem hiding this comment.
The duration of the shock should be affected by output.ShockDurationMod above, or left out.
| if breakdown then | ||
| t_insert(breakdown.FreezeDPS, s_format("For freeze to apply, target must have no more than %d life.", baseVal * 20 * output.FreezeDurationMod)) | ||
| t_insert(breakdown.FreezeDPS, s_format("For freeze to apply for the minimum of 0.3 seconds, target must have no more than %d Ailment Threshold.", baseFreezeVal * 20 * output.FreezeDurationMod)) | ||
| t_insert(breakdown.ChillDPS, s_format("For the minimum 5%% Chill to apply for 2 seconds, target must have no more than %d Ailment Threshold.", (((100 + output.ChillEffectMod)^(2.5)) * baseChillVal) / (100 * m_sqrt(10)))) |
There was a problem hiding this comment.
Duration should like wise be affected by output.ChillDurationMod
|
Looking much better! thanks for tending to these. As far as Ailment Threshold goes we should probably see if there is any data in the ggpk to be more accurate, but you can leave it without an explanation for now. A few small nits about incorrect duration numbers, and then looking good! |

(Also, as you can see in the ModParser change, the "EnemyFreezeEffect" mod has been misspelled in PoB as "EnemyFreezeEffech" for a long time and it didn't matter because that mod wasn't actually used anywhere)