Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Data/ModCache.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5373,7 +5373,7 @@ c["Increases and Reductions to Minion Attack Speed also affect you"]={{[1]={flag
c["Increases and Reductions to Minion Damage also affect you"]={{[1]={flags=0,keywordFlags=0,name="MinionDamageAppliesToPlayer",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ImprovedMinionDamageAppliesToPlayer",type="MAX",value=100}},nil}
c["Increases and Reductions to Projectile Speed also apply to Damage with Bows"]={{[1]={flags=0,keywordFlags=0,name="ProjectileSpeedAppliesToBowDamage",type="FLAG",value=true}},nil}
c["Increases and Reductions to Spell damage also apply to Attacks"]={{[1]={flags=0,keywordFlags=0,name="SpellDamageAppliesToAttacks",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ImprovedSpellDamageAppliesToAttacks",type="MAX",value=100}},nil}
c["Inevitable Critical Hits"]={nil,"Inevitable Critical Hits "}
c["Inevitable Critical Hits"]={{[1]={flags=0,keywordFlags=0,name="InevitableCriticalHits",type="FLAG",value=true}},nil}
c["Infinite Parry Range"]={nil,"Infinite Parry Range "}
c["Infinite Parry Range 50% increased Parried Debuff Duration"]={nil,"Infinite Parry Range 50% increased Parried Debuff Duration "}
c["Inflict Abyssal Wasting on Hit"]={nil,"Inflict Abyssal Wasting on Hit "}
Expand Down
30 changes: 30 additions & 0 deletions src/Modules/CalcOffence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3685,6 +3685,36 @@ function calcs.offence(env, actor, activeSkill)
if pass == 1 then
-- Apply crit multiplier
allMult = allMult * output.CritMultiplier
elseif activeSkill.skillModList:Flag(nil, "InevitableCriticalHits") then
-- Calculate average number of rerolls for a non-crit
-- Use pre-effective so we don't consider accuracy, which already scales DPS
local critChance = output.PreEffectiveCritChance

-- Consider lucky crits because they were only applied post-effective
-- (not that they exist in POE2 for now, but just in case)
if skillModList:Flag(cfg, "CritChanceLucky") then
critChance = (1 - (1 - critChance / 100) ^ 2) * 100
end

local avgNumRerolls = 100 / critChance - 1
local critBonusMultiplier = 1 - m_min(1, .3 * avgNumRerolls)

-- Crit multiplier includes the base 100%, +some% bonus
-- but this penalty only applies to the some% bonus
local bonusMult = output.CritMultiplier - 1
local modifiedBonus = bonusMult * critBonusMultiplier
local newCritMult = 1 + modifiedBonus
allMult = allMult * newCritMult

if breakdown then
t_insert(breakdown[damageType], "")
t_insert(breakdown[damageType], "Inevitable Criticals: ")
t_insert(breakdown[damageType], s_format(" Base Crit Bonus: +%.2f%%", bonusMult * 100))
t_insert(breakdown[damageType], s_format(" Avg Num Rerolls: %.2f", avgNumRerolls))
t_insert(breakdown[damageType], s_format(" Avg Crit Bonus: +%.2f%%", modifiedBonus * 100))
t_insert(breakdown[damageType], s_format("x %.2f ^8(Inevitable Crit Multiplier)", newCritMult))
t_insert(breakdown[damageType], "")
end
end
damageTypeHitMin = damageTypeHitMin * allMult
damageTypeHitMax = damageTypeHitMax * allMult
Expand Down
1 change: 1 addition & 0 deletions src/Modules/ModParser.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3305,6 +3305,7 @@ local specialModList = {
mod("EnemyModifier", "LIST", { mod = mod("LightningExposure", "BASE", -20) }, { type = "ActorCondition", actor = "enemy", var = "EnemyInPresence" }),
},
-- Druid -- Oracle
["inevitable critical hits"] = { flag("InevitableCriticalHits") },
["walk the paths not taken"] = {},
["gain the benefits of bonded modifiers on runes and idols"] = {
flag("Condition:CanUseBondedModifiers"),
Expand Down
Loading