From 96632bfd804b0f9bbc27946eb753c8b51afedc2a Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Fri, 8 May 2026 19:57:14 -0500 Subject: [PATCH 1/6] re-enable impale, add parsing for Bonestorm's more impale magnitude --- src/Data/SkillStatMap.lua | 3 +++ src/Modules/CalcOffence.lua | 9 +++++++-- src/Modules/ModParser.lua | 2 ++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index 1e2c80fc6..c11935a9a 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -1575,6 +1575,9 @@ return { mod("EnemyImpalePhysicalDamageReduction", "BASE", nil), mult = -1, }, +["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..aa96c87c5 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -4448,13 +4448,18 @@ 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 + output.ImpaleChance = env.mode_effective and m_min(100, skillModList:Sum("BASE", cfg, "ImpaleChance")) or 0 + 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 + -- 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 diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index a13144ac8..e9e79a92f 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", From 1c4b33fe156f1ac7d99c19a67ffcbf870fb61826 Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Fri, 8 May 2026 20:09:55 -0500 Subject: [PATCH 2/6] his vile intrusion statmap --- src/Data/SkillStatMap.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index c11935a9a..2382619a0 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -1575,6 +1575,9 @@ return { mod("EnemyImpalePhysicalDamageReduction", "BASE", nil), mult = -1, }, +["impale_magnitude_+%"] = { + mod("ImpaleEffect", "MORE", nil), +}, ["active_skill_impale_magnitude_+%_final"] = { mod("ImpaleEffect", "MORE", nil), }, From ebd1dbd9abc29a2c2449697cd6651439ddf2b719 Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Fri, 8 May 2026 20:38:44 -0500 Subject: [PATCH 3/6] dreadfist, crit applied impales --- src/Data/ModCache.lua | 3 +-- src/Modules/CalcOffence.lua | 4 +++- src/Modules/ModParser.lua | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) 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/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index aa96c87c5..2aeb5da6d 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -4453,12 +4453,14 @@ function calcs.offence(env, actor, activeSkill) output.SappedChance = 0 output.ChaosPoisonChance = 0 - output.ImpaleChance = env.mode_effective and m_min(100, skillModList:Sum("BASE", cfg, "ImpaleChance")) or 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 diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index e9e79a92f..63660cddc 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3961,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, From b69ffa13a463baa5eaeb2a4b30688669274e881c Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Fri, 8 May 2026 20:46:30 -0500 Subject: [PATCH 4/6] update base impale stored damage from 10% to 30% --- src/Modules/Data.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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, From 891d925441152f94fdd3fc6c713eec31f5246d43 Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Fri, 8 May 2026 20:56:24 -0500 Subject: [PATCH 5/6] fix breakdown --- src/Modules/CalcOffence.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 2aeb5da6d..7dd27de4e 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -5375,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)) From c01fcf5a4d8a0ae5bd8b0a4ab2daf393b43b6211 Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Fri, 8 May 2026 21:00:40 -0500 Subject: [PATCH 6/6] update maximum stacks, update config option wording and add a placeholder --- src/Modules/CalcSetup.lua | 2 +- src/Modules/ConfigOptions.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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)