From e5cc8b6ac18aabaaf11f1d9194dcf4e1ec7bab9c Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Sat, 16 May 2026 17:38:24 -0500 Subject: [PATCH 1/3] add support for Lich's Price of Power add support for Stormweaver's Multiplying Squalls add support for Acolyte of Chayula's Unravelling --- src/Data/ModCache.lua | 6 +++--- src/Modules/ConfigOptions.lua | 16 ++++++++++++++++ src/Modules/ModParser.lua | 9 ++++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index bab988d5c9..f65a2baa48 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -285,7 +285,7 @@ c["+2 to Level of all Skills with a Strength requirement"]={{[1]={flags=0,keywor c["+2 to Level of all Skills with an Intelligence requirement"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={gemRequirements={reqInt=1},key="level",keyOfScaledMod="value",keyword="all",value=2}}},nil} c["+2 to Level of all Spell Skills"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keyword="spell",value=2}}},nil} c["+2 to Level of all Wolf Pack Skills"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keyword="wolf pack",value=2}}},nil} -c["+2 to Limit for Elemental Skills"]={{}," Limit for Elemental Skills "} +c["+2 to Limit for Elemental Skills"]={{[1]={[1]={skillTypeList={[1]=29,[2]=28,[3]=30},type="SkillType"},flags=0,keywordFlags=0,name="AdditionalCooldownUses",type="BASE",value=2}},nil} c["+2 to Maximum Endurance Charges"]={{[1]={flags=0,keywordFlags=0,name="EnduranceChargesMax",type="BASE",value=2}},nil} c["+2 to Maximum Frenzy Charges"]={{[1]={flags=0,keywordFlags=0,name="FrenzyChargesMax",type="BASE",value=2}},nil} c["+2 to Maximum Power Charges"]={{[1]={flags=0,keywordFlags=0,name="PowerChargesMax",type="BASE",value=2}},nil} @@ -5278,7 +5278,7 @@ c["Grants Skill: Time Snap"]={{[1]={flags=0,keywordFlags=0,name="ExtraSkill",typ c["Grants Skill: Unbound Avatar"]={{[1]={flags=0,keywordFlags=0,name="ExtraSkill",type="LIST",value={level=1,skillId="UnboundAvatarPlayer"}}},nil} c["Grants Skill: Void Illusion"]={{[1]={flags=0,keywordFlags=0,name="ExtraSkill",type="LIST",value={level=1,skillId="VoidIllusionPlayer"}}},nil} c["Grants Thaumaturgical Dynamism"]={nil,"Grants Thaumaturgical Dynamism "} -c["Grants Unravelling"]={nil,"Grants Unravelling "} +c["Grants Unravelling"]={{[1]={flags=0,keywordFlags=0,name="Unravelling",type="FLAG",value=true}},nil} c["Grants a Frenzy Charge on use"]={nil,"Grants a Frenzy Charge on use "} c["Grants a Power Charge on use"]={nil,"Grants a Power Charge on use "} c["Grants effect of Dreaming Gloom Shrine"]={nil,"Grants effect of Dreaming Gloom Shrine "} @@ -5988,7 +5988,7 @@ c["Spells Cast by Totems have 5% increased Cast Speed"]={{[1]={flags=18,keywordF c["Spells Cast by Totems have 6% increased Cast Speed"]={{[1]={flags=18,keywordFlags=16384,name="Speed",type="INC",value=6}},nil} c["Spells Gain 12% of Damage as extra Chaos Damage"]={{[1]={flags=2,keywordFlags=0,name="DamageGainAsChaos",type="BASE",value=12}},nil} c["Spells Gain 5% of Damage as extra Chaos Damage"]={{[1]={flags=2,keywordFlags=0,name="DamageGainAsChaos",type="BASE",value=5}},nil} -c["Spells consume a Power Charge if able to deal 40% more Damage"]={nil,"Spells consume a Power Charge if able to deal 40% more Damage "} +c["Spells consume a Power Charge if able to deal 40% more Damage"]={{[1]={[1]={threshold=1,type="MultiplierThreshold",var="RemovablePowerCharge"},flags=0,keywordFlags=131072,name="Damage",type="MORE",value=40}},nil} c["Spells fire 4 additional Projectiles"]={{[1]={flags=2,keywordFlags=0,name="ProjectileCount",type="BASE",value=4}},nil} c["Spells fire Projectiles in a circle"]={nil,"Projectiles in a circle "} c["Spells for which this Sacrifice was fully made deal 30% more Damage"]={nil,"Spells for which this Sacrifice was fully made deal 30% more Damage "} diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 721a758769..ae61219016 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -641,6 +641,22 @@ local configSettings = { { var = "conditionInsane", type = "check", label = "Are you Insane?", ifCond = "Insane", apply = function(val, modList, enemyModList) modList:NewMod("Condition:Insane", "FLAG", true, "Config") end }, + { var = "conditionUnravelling", type = "list", label = "Acolyte's Unravelling:", ifFlag = "Unravelling", tooltip = "While affected by Unravelling, your ^xD02090Chaos^7 Damage randomly either also contributes to ^x3F6DB3Freeze^7 buildup,\n^xB97123Ignite^7 chance and magnitude, or ^xADAA47Shock^7 chance - changing which it contributes to every two seconds. ", + list = { + {val="NONE",label="None"}, + {val="Freeze",label="Unravelling Frost"}, + {val="Ignite",label="Unravelling Flame"}, + {val="Shock",label="Unravelling Bolt"}, + {val="ALL",label="All"}, + }, apply = function(val, modList, enemyModList) + if val == "ALL" then + modList:NewMod("ChaosCanFreeze", "FLAG", true, "Config") + modList:NewMod("ChaosCanIgnite", "FLAG", true, "Config") + modList:NewMod("ChaosCanShock", "FLAG", true, "Config") + elseif val ~= "NONE" then + modList:NewMod("ChaosCan"..val, "FLAG", true, "Config") + end + end }, { label = "Vigilant Strike:", ifSkill = "Vigilant Strike" }, { var = "VigilantStrikeBypassCD", type = "check", label = "Bypass CD?", ifSkill = "Vigilant Strike", defaultState = true, apply = function(val, modList, enemyModList) modList:NewMod("CooldownRecovery", "OVERRIDE", 0, "Config", { type = "SkillName", skillName = "Vigilant Strike" }) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index a13144ac8b..912e03b287 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3088,7 +3088,8 @@ local specialModList = { ["while you are not on low mana, you and allies in your presence have unholy might"] = { mod("ExtraAura", "LIST", { mod = flag("Condition:UnholyMight")}, { type = "Condition", var = "LowMana", neg = true }) }, ["(%d+)%% increased magnitude of unholy might buffs you grant per (%d+) maximum mana"] = function(num, _, num2) return { mod("ExtraAura", "LIST", { mod = mod("Multiplier:UnholyMightMagnitude", "BASE", num, { type = "PerStat", stat = "Mana", div = tonumber(num2), actor = "parent"}), { type = "GlobalEffect", effectName = "BlackenedHeart", effectType = "Aura", unscalable = true}}) } end, ["non%-channelling spells cost an additional (%d+)%% of maximum energy shield"] = function(num) return { mod("ESCostBase", "BASE", 1, nil, 0, KeywordFlag.Spell, { type = "PercentStat", percent = num, stat = "EnergyShield", floor = true }, { type = "SkillType", skillType = SkillType.Channel, neg = true } )} end, - ["non%-channelling spells consume a power charge if able to deal (%d+)%% more damage"] = function(num) return { mod("Damage", "MORE", num, nil, 0,KeywordFlag.Spell, { type = "SkillType", skillType = SkillType.Channel, neg = true }, { type = "MultiplierThreshold", var = "RemovablePowerCharge", threshold = 1 })} end, + ["non%-channelling spells consume a power charge if able to deal (%d+)%% more damage"] = function(num) return { mod("Damage", "MORE", num, nil, 0,KeywordFlag.Spell, { type = "SkillType", skillType = SkillType.Channel, neg = true }, { type = "MultiplierThreshold", var = "RemovablePowerCharge", threshold = 1, scalar = "ConsumedPowerChargeEffect" })} end, + ["spells consume a power charge if able to deal (%d+)%% more damage"] = function(num) return { mod("Damage", "MORE", num, nil, 0, KeywordFlag.Spell, { type = "MultiplierThreshold", var = "RemovablePowerCharge", threshold = 1 })} end, ["no inherent mana regeneration"] = { flag("Condition:NoInherentManaRegen") }, ["%+1 ring slot"] = { flag("AdditionalRingSlot") }, ["regenerate (%D+) equal to (%d+)%% of maximum (%D+) per second"] = function(_, resource1, num, resource2) return { mod( combineToUpper(resource1) .. "Regen", "BASE", 1, { type = "PercentStat", stat = combineToUpper(resource2), percent = num } )} end, @@ -3280,6 +3281,9 @@ local specialModList = { ["targets can be affected by two of your shocks at the same time"] = { flag("ShockCanStack"), mod("ShockStacksMax", "OVERRIDE", 2) }, ["targets can be affected by two of your chills at the same time"] = { flag("ChillCanStack"), mod("ChillStacksMax", "OVERRIDE", 2) }, ["your chills can slow targets by up to a maximum of (%d+)%%"] = function(num) return { mod("ChillMax", "OVERRIDE", num)} end, + ["%+(%d+) to limit for elemental skills"] = function(num) return { + mod("AdditionalCooldownUses", "BASE", num, { type = "SkillType", skillTypeList = { SkillType.Cold, SkillType.Fire, SkillType.Lightning }}) + } end, -- Monk - Chayula ["base maximum darkness is (%d+)"] = function(num) return { flag("PlayerHasDarkness"), mod("Darkness", "BASE", num) } end, ["removes all spirit"] = { mod("Spirit", "OVERRIDE", 0) }, @@ -3291,6 +3295,9 @@ local specialModList = { flag("ManaLeechBasedOnElementalDamage"), flag("ManaLeechBasedOnChaosDamage"), }, + ["grants unravelling"] = { + flag("Unravelling") + }, -- Monk - Invoker ["critical hits ignore non%-negative enemy monster elemental resistances"] = { flag("IgnoreNonNegativeEleRes", { type = "Condition", var = "CriticalStrike" }) }, ["(%d+)%% chance on shocking enemies to created shocked ground"] = { mod("ShockBase", "BASE", data.nonDamagingAilment["Shock"].default, { type = "ActorCondition", actor = "enemy", var = "OnShockedGround" }) }, From 2438d0431f1a20f5d637382a749b3e6b63d551c4 Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Sat, 16 May 2026 20:51:06 -0500 Subject: [PATCH 2/3] move unravel NewMod to CalcPerform --- src/Modules/CalcPerform.lua | 5 +++++ src/Modules/ConfigOptions.lua | 16 ++++------------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index cd5a2bc12d..5f51713ca8 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -651,6 +651,11 @@ local function doActorMisc(env, actor) local effect = m_max(m_floor(70 * calcLib.mod(modDB, nil, "SelfChillEffect")), 0) modDB:NewMod("ActionSpeed", "INC", -effect, "Freeze") end + if modDB:Flag(nil, "Unravelling") then + modDB:NewMod("ChaosCanFreeze", "FLAG", true, { type = "Condition", var = "ColdUnravel"}) + modDB:NewMod("ChaosCanIgnite", "FLAG", true, { type = "Condition", var = "FireUnravel"}) + modDB:NewMod("ChaosCanShock", "FLAG", true, { type = "Condition", var = "LightningUnravel"}) + end if modDB:Flag(nil, "CanLeechLifeOnFullLife") and not modDB:Flag(nil, "GhostReaver") then condList["Leeching"] = true condList["LeechingLife"] = true diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index ae61219016..d276dee276 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -643,19 +643,11 @@ local configSettings = { end }, { var = "conditionUnravelling", type = "list", label = "Acolyte's Unravelling:", ifFlag = "Unravelling", tooltip = "While affected by Unravelling, your ^xD02090Chaos^7 Damage randomly either also contributes to ^x3F6DB3Freeze^7 buildup,\n^xB97123Ignite^7 chance and magnitude, or ^xADAA47Shock^7 chance - changing which it contributes to every two seconds. ", list = { - {val="NONE",label="None"}, - {val="Freeze",label="Unravelling Frost"}, - {val="Ignite",label="Unravelling Flame"}, - {val="Shock",label="Unravelling Bolt"}, - {val="ALL",label="All"}, + {val="Cold",label="Unravelling Frost"}, + {val="Fire",label="Unravelling Flame"}, + {val="Lightning",label="Unravelling Bolt"}, }, apply = function(val, modList, enemyModList) - if val == "ALL" then - modList:NewMod("ChaosCanFreeze", "FLAG", true, "Config") - modList:NewMod("ChaosCanIgnite", "FLAG", true, "Config") - modList:NewMod("ChaosCanShock", "FLAG", true, "Config") - elseif val ~= "NONE" then - modList:NewMod("ChaosCan"..val, "FLAG", true, "Config") - end + modList:NewMod("Condition:"..val.."Unravel", "FLAG", true, "Config") end }, { label = "Vigilant Strike:", ifSkill = "Vigilant Strike" }, { var = "VigilantStrikeBypassCD", type = "check", label = "Bypass CD?", ifSkill = "Vigilant Strike", defaultState = true, apply = function(val, modList, enemyModList) From a56e33e1b0fa7ac496b8fe0209d88b7f3540fcd0 Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Sat, 16 May 2026 20:56:36 -0500 Subject: [PATCH 3/3] remove old code --- src/Modules/ModParser.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 912e03b287..9359cd14a6 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3088,7 +3088,7 @@ local specialModList = { ["while you are not on low mana, you and allies in your presence have unholy might"] = { mod("ExtraAura", "LIST", { mod = flag("Condition:UnholyMight")}, { type = "Condition", var = "LowMana", neg = true }) }, ["(%d+)%% increased magnitude of unholy might buffs you grant per (%d+) maximum mana"] = function(num, _, num2) return { mod("ExtraAura", "LIST", { mod = mod("Multiplier:UnholyMightMagnitude", "BASE", num, { type = "PerStat", stat = "Mana", div = tonumber(num2), actor = "parent"}), { type = "GlobalEffect", effectName = "BlackenedHeart", effectType = "Aura", unscalable = true}}) } end, ["non%-channelling spells cost an additional (%d+)%% of maximum energy shield"] = function(num) return { mod("ESCostBase", "BASE", 1, nil, 0, KeywordFlag.Spell, { type = "PercentStat", percent = num, stat = "EnergyShield", floor = true }, { type = "SkillType", skillType = SkillType.Channel, neg = true } )} end, - ["non%-channelling spells consume a power charge if able to deal (%d+)%% more damage"] = function(num) return { mod("Damage", "MORE", num, nil, 0,KeywordFlag.Spell, { type = "SkillType", skillType = SkillType.Channel, neg = true }, { type = "MultiplierThreshold", var = "RemovablePowerCharge", threshold = 1, scalar = "ConsumedPowerChargeEffect" })} end, + ["non%-channelling spells consume a power charge if able to deal (%d+)%% more damage"] = function(num) return { mod("Damage", "MORE", num, nil, 0,KeywordFlag.Spell, { type = "SkillType", skillType = SkillType.Channel, neg = true }, { type = "MultiplierThreshold", var = "RemovablePowerCharge", threshold = 1 })} end, ["spells consume a power charge if able to deal (%d+)%% more damage"] = function(num) return { mod("Damage", "MORE", num, nil, 0, KeywordFlag.Spell, { type = "MultiplierThreshold", var = "RemovablePowerCharge", threshold = 1 })} end, ["no inherent mana regeneration"] = { flag("Condition:NoInherentManaRegen") }, ["%+1 ring slot"] = { flag("AdditionalRingSlot") },