diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index bab988d5c..b0a85c5c1 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -4620,8 +4620,7 @@ c["Critical Hits cannot Extract Impale 31 to 49 Physical Thorns damage"]={nil,"C c["Critical Hits do not deal extra Damage"]={{[1]={flags=0,keywordFlags=0,name="NoCritMultiplier",type="FLAG",value=true}},nil} c["Critical Hits ignore Enemy Monster Elemental Resistances"]={{[1]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="IgnoreElementalResistances",type="FLAG",value=true}},nil} c["Critical Hits ignore non-negative Enemy Monster Elemental Resistances"]={{[1]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="IgnoreNonNegativeEleRes",type="FLAG",value=true}},nil} -c["Critical Hits inflict Impale"]={nil,"Critical Hits inflict Impale "} -c["Critical Hits inflict Impale Critical Hits cannot Extract Impale"]={nil,"Critical Hits inflict Impale Critical Hits cannot Extract Impale "} +c["Critical Hits inflict Impale"]={{[1]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=262144,name="ImpaleChance",type="BASE",value=100}},nil} c["Critical Hits with Daggers have a 25% chance to Poison the Enemy"]={{[1]={[1]={type="Condition",var="CriticalStrike"},flags=524288,keywordFlags=0,name="PoisonChance",type="BASE",value=25}},nil} c["Critical Hits with Spells apply 3 Stack of Critical Weakness"]={nil,"Critical Hits with Spells apply 3 Stack of Critical Weakness "} c["Critical Hits with Spells apply 5 Stacks of Critical Weakness"]={nil,"Critical Hits with Spells apply 5 Stacks of Critical Weakness "} diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index 1e2c80fc6..2382619a0 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -1575,6 +1575,12 @@ return { mod("EnemyImpalePhysicalDamageReduction", "BASE", nil), mult = -1, }, +["impale_magnitude_+%"] = { + mod("ImpaleEffect", "MORE", nil), +}, +["active_skill_impale_magnitude_+%_final"] = { + mod("ImpaleEffect", "MORE", nil), +}, ["support_brink_hit_damage_stun_multiplier_+%_final"] = { mod("EnemyHeavyStunBuildup", "MORE", nil), }, diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 3e87cc8ac..7dd27de4e 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -4448,13 +4448,20 @@ function calcs.offence(env, actor, activeSkill) local source, output, cfg, breakdown = pass.source, pass.output, pass.cfg, pass.breakdown -- Legacy PoE1 ailments (to be removed later): Scorched, Brittle, Sapped, Impale - output.ImpaleChance = 0 - output.ImpaleChanceOnCrit = 0 output.ScorchChance = 0 output.BrittleChance = 0 output.SappedChance = 0 output.ChaosPoisonChance = 0 + cfg.skillCond["CriticalStrike"] = true + if not skillFlags.hit then + output.ImpaleChanceOnCrit = 0 + else + output.ImpaleChanceOnCrit = env.mode_effective and m_min(100, skillModList:Sum("BASE", cfg, "ImpaleChance")) or 0 + end + cfg.skillCond["CriticalStrike"] = false + output.ImpaleChance = env.mode_effective and m_min(100, skillModList:Sum("BASE", cfg, "ImpaleChance")) or 0 + -- address Weapon1H interaction with Ailment for nodes like Coated Arms (PoE1: Sleight of Hand) -- bit.and on cfg.flags confirms if the skill has the 1H flag -- if so, bit.or on the targetCfg (e.g. dotCfg) to guarantee for calculations like Sum("INC") and breakdown @@ -5368,7 +5375,7 @@ function calcs.offence(env, actor, activeSkill) if breakdown then breakdown.ImpaleStoredDamage = {} - t_insert(breakdown.ImpaleStoredDamage, "10% ^8(base value)") + t_insert(breakdown.ImpaleStoredDamage, (data.misc.ImpaleStoredDamageBase * 100).."% ^8(base value)") t_insert(breakdown.ImpaleStoredDamage, s_format("x %.2f ^8(increased effectiveness)", storedExpectedDamageModifier)) t_insert(breakdown.ImpaleStoredDamage, s_format("= %.1f%%", output.ImpaleStoredDamage)) diff --git a/src/Modules/CalcSetup.lua b/src/Modules/CalcSetup.lua index 72ebcbf77..168d33bbd 100644 --- a/src/Modules/CalcSetup.lua +++ b/src/Modules/CalcSetup.lua @@ -42,7 +42,7 @@ function calcs.initModDB(env, modDB) modDB:NewMod("BloodChargesMax", "BASE", 5, "Base") modDB:NewMod("MaxLifeLeechRate", "BASE", 20, "Base") modDB:NewMod("MaxManaLeechRate", "BASE", 20, "Base") - modDB:NewMod("ImpaleStacksMax", "BASE", 5, "Base") + modDB:NewMod("ImpaleStacksMax", "BASE", 60, "Base") modDB:NewMod("IgniteStacksMax", "BASE", 1, "Base") modDB:NewMod("BleedStacksMax", "BASE", 1, "Base") modDB:NewMod("PoisonStacksMax", "BASE", 1, "Base") diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 721a75876..7da955adb 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -1499,7 +1499,7 @@ Huge sets the radius to 11. { var = "conditionImpaledRecently", type = "check", ifCond = "ImpaledRecently", label = "Impaled an enemy recently?", apply = function(val, modList, enemyModLIst) modList:NewMod("Condition:ImpaledRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "multiplierImpalesOnEnemy", type = "countAllowZero", label = "# of Impales on enemy (if not maximum):", ifFlag = "impale", apply = function(val, modList, enemyModList) + { var = "multiplierImpalesOnEnemy", type = "countAllowZero", label = "# of Impales Extracted on enemy:", ifFlag = "impale", defaultPlaceholderState = 1, apply = function(val, modList, enemyModList) enemyModList:NewMod("Multiplier:ImpaleStacks", "BASE", val, "Config", { type = "Condition", var = "Combat" }) end }, { var = "multiplierFragileRegrowth", type = "count", label = "# of Fragile Regrowth Stacks:", ifMult = "FragileRegrowthCount", apply = function(val, modList, enemyModList) diff --git a/src/Modules/Data.lua b/src/Modules/Data.lua index a92579ce6..ee3fb19aa 100644 --- a/src/Modules/Data.lua +++ b/src/Modules/Data.lua @@ -205,7 +205,7 @@ data.misc = { -- magic numbers PoisonDurationBase = data.gameConstants["BasePoisonDuration"], IgnitePercentBase = data.gameConstants["IgniteHitDamagePercentPerMinute"] / 60 / 100, IgniteDurationBase = data.gameConstants["BaseIgniteDuration"], - ImpaleStoredDamageBase = 0.1, + ImpaleStoredDamageBase = 0.3, TrapTriggerRadiusBase = 10, MineDetonationRadiusBase = 60, MineAuraRadiusBase = 35, diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index a13144ac8..63660cddc 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -580,7 +580,9 @@ local modNameList = { ["to impale enemies on hit"] = "ImpaleChance", ["to impale on spell hit"] = { "ImpaleChance", flags = ModFlag.Spell }, ["impale effect"] = "ImpaleEffect", + ["impale magnitude"] = "ImpaleEffect", ["effect of impales you inflict"] = "ImpaleEffect", + ["magnitude of impales you inflict"] = "ImpaleEffect", ["effects of impale inflicted"] = "ImpaleEffect", -- typo / old wording change ["effect of impales inflicted"] = "ImpaleEffect", ["magnitude of impales inflicted"] = "ImpaleEffect", @@ -3959,6 +3961,7 @@ local specialModList = { } end, ["(%d+)%% chance for blade vortex and blade blast to impale enemies on hit"] = function(num) return { mod("ImpaleChance", "BASE", num, { type = "SkillName", skillNameList = { "Blade Vortex", "Blade Blast" }, includeTransfigured = true }) } end, ["critical hits with spells inflict impale"] = { mod("ImpaleChance", "BASE", 100, nil, ModFlag.Spell, { type = "Condition", var = "CriticalStrike" }) }, + ["critical hits inflict impale"] = { mod("ImpaleChance", "BASE", 100, nil, 0, KeywordFlag.Hit, { type = "Condition", var = "CriticalStrike" }) }, ["(%d+)%% chance on hitting an enemy for all impales on that enemy to last for an additional hit"] = function(num) return { mod("ImpaleAdditionalDurationChance", "BASE", num) } end,