From 50ef8af09fc5f5cf14b80a126173bab276fa1145 Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Tue, 30 Jun 2026 01:40:29 -0500 Subject: [PATCH 1/5] Gem Studded - Green mod --- src/Data/ModCache.lua | 2 +- src/Modules/ModParser.lua | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index dbff22a269..4e112e4670 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -5901,7 +5901,7 @@ c["Grants effect of Guided Freezing Shrine"]={nil,"Grants effect of Guided Freez c["Grants effect of Guided Meteoric Shrine"]={nil,"Grants effect of Guided Meteoric Shrine "} c["Grants effect of Guided Tempest Shrine"]={nil,"Grants effect of Guided Tempest Shrine "} c["Grants up to your maximum Rage on use"]={nil,"Grants up to your maximum Rage on use "} -c["Green: 40% less Movement Speed Penalty from using Skills while Moving"]={nil,"Green: 40% less Movement Speed Penalty from using Skills while Moving "} +c["Green: 40% less Movement Speed Penalty from using Skills while Moving"]={{[1]={[1]={type="Condition",var="MostNumerousGreenSocketedSupports"},flags=0,keywordFlags=0,name="MovementSpeedPenalty",type="MORE",value=-40}},nil} c["Grenade Skills Fire an additional Projectile"]={{[1]={[1]={skillType=159,type="SkillType"},flags=1024,keywordFlags=0,name="ProjectileCount",type="BASE",value=1}},nil} c["Grenade Skills have +1 Cooldown Use"]={{[1]={[1]={skillType=159,type="SkillType"},flags=0,keywordFlags=0,name="AdditionalCooldownUses",type="BASE",value=1}},nil} c["Grenades have 15% chance to activate a second time"]={{[1]={[1]={skillType=159,type="SkillType"},flags=0,keywordFlags=0,name="GrenadeActivateTwice",type="BASE",value=15}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index cf425b6ce3..5a063b2cdc 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3367,7 +3367,9 @@ local specialModList = { ["blue: skills have (%d+)%% less cost"] = function(count) return { mod("ManaCost", "MORE", -count, { type = "Condition", var = "MostNumerousBlueSocketedSupports" }) } end, - + ["green: (%d+)%% less movement speed penalty from using skills while moving"] = function(num) return { + mod("MovementSpeedPenalty", "MORE", -num, { type = "Condition", var = "MostNumerousGreenSocketedSupports" }) + } end, -- Monk - Stormweaver ["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) }, @@ -6223,13 +6225,13 @@ end -- NOTE: conditional mods with "Immune to ..." cannot be handled for PoE2 as they no longer start with "You are..." or similar prefixes that trigger a "FLAG" mod specialModList["immune to (.-) w?h?i[lf]e? (.*)"] = = function(_, debuff, cond) -- NOTE: this only handles cases for which unconditional immunity mods exist to avoid false positives that don't actually get calculated - + -- look for static or dynamically phrased base immunity mod local searchPrefix1 = "immun[ei]t?y? to " .. ailment and string.lower(debuff) local searchPrefix2 = "immune to " .. ailment and string.lower(debuff) local lowerAilment = ailment and string.lower(ailment) or "" local validDebuff = (specialModList[searchPrefix1 .. lowerAilment] or specialModList[searchPrefix2 .. lowerAilment]) and true or false - + -- look if condition exists -- todo make more dynamic local tagKey = (validDebuff and cond) and "while " .. string.lower(cond) @@ -6771,7 +6773,7 @@ local function parseMod(line, order) effect = getEffectFromStatus(effectLine) effect = combineToUpper(effect) end - + if type(effect) == "table" then modName = { effect[1] .. "Immune", effect[2] .. "Immune" } modType = { type(modValue) == "table" and modValue.type or "FLAG", type(modValue) == "table" and modValue.type or "FLAG" } From 92132ca83d5ef58ef2fdf8d8ce0807acb1cc5499 Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Tue, 30 Jun 2026 02:52:59 -0500 Subject: [PATCH 2/5] Storm's Rebuke --- src/Data/ModCache.lua | 2 +- src/Modules/ModParser.lua | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 4e112e4670..7b896114bc 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -5415,7 +5415,7 @@ c["Fork an additional time Chain an additional time Chain from Terrain an additi c["Fork an additional time Chain an additional time Chain from Terrain an additional time Cannot collide with targets"]={nil,"Fork an additional time Chain an additional time Chain from Terrain an additional time Cannot collide with targets "} c["Frenzy or Power Charge"]={nil,"Frenzy or Power Charge "} c["Fully Armour Broken enemies you kill with Hits Shatter"]={nil,"Fully Armour Broken enemies you kill with Hits Shatter "} -c["Fully Broken Armour you inflict also increases Cold and Lightning Damage Taken from Hits"]={nil,"Fully Broken Armour you inflict also increases Cold and Lightning Damage Taken from Hits "} +c["Fully Broken Armour you inflict also increases Cold and Lightning Damage Taken from Hits"]={{[1]={flags=0,keywordFlags=0,name="ArmourBreakColdDamageTaken",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ArmourBreakLightningDamageTaken",type="FLAG",value=true}},nil} c["Fully Broken Armour you inflict also increases Fire Damage Taken from Hits"]={{[1]={flags=0,keywordFlags=0,name="ArmourBreakFireDamageTaken",type="FLAG",value=true}},nil} c["Fully Broken Armour you inflict increases all Damage Taken from Hits instead"]={{[1]={[1]={effectName="ImplodingImpacts",effectType="Buff",type="GlobalEffect"},flags=0,keywordFlags=0,name="FullyBrokenArmourIncreasesAllDamageFromHits",type="FLAG",value=true}},nil} c["Gain 0% to 40% increased Movement Speed at random when Hit, until Hit again"]={{[1]={flags=0,keywordFlags=0,name="Condition:HaveGamblesprint",type="FLAG",value=true}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 5a063b2cdc..000ffb3d6d 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -5551,6 +5551,10 @@ local specialModList = { -- Misc ["fully broken armour effects also apply to fire damage taken from hits"] = { flag("ArmourBreakFireDamageTaken"), }, ["fully broken armour you inflict also increases fire damage taken from hits"] = { flag("ArmourBreakFireDamageTaken"), }, + ["fully broken armour you inflict also increases cold and lightning damage taken from hits"] = { + flag("ArmourBreakColdDamageTaken"), + flag("ArmourBreakLightningDamageTaken"), + }, ["can't use c?h?e?s?t? ?b?o?d?y? ?armour"] = { mod("CanNotUseBody", "Flag", 1, { type = "DisablesItem", slotName = "Body Armour" }) }, --["can't use helmets"] = { mod("CanNotUseHelmet", "Flag", 1, { type = "DisablesItem", slotName = "Helmet" }) }, -- this one does not work due to being on a passive? ["can't use helmet"] = { mod("CanNotUseHelmet", "Flag", 1, { type = "DisablesItem", slotName = "Helmet" }) }, -- this is to allow for custom mod without saying the other is parsed From dac8a03415cd5d481b1fa6df49b1255c208736de Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Tue, 30 Jun 2026 02:55:55 -0500 Subject: [PATCH 3/5] Arcane Mixtures --- src/Data/ModCache.lua | 3 +-- src/Modules/ModParser.lua | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 7b896114bc..6ff1e01035 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1131,8 +1131,7 @@ c["10% increased Blind Effect"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifie c["10% increased Block chance"]={{[1]={flags=0,keywordFlags=0,name="BlockChance",type="INC",value=10}},nil} c["10% increased Cast Speed"]={{[1]={flags=16,keywordFlags=0,name="Speed",type="INC",value=10}},nil} c["10% increased Cast Speed if you've Attacked Recently"]={{[1]={[1]={type="Condition",var="AttackedRecently"},flags=16,keywordFlags=0,name="Speed",type="INC",value=10}},nil} -c["10% increased Cast Speed if you've used a Mana Flask Recently"]={{[1]={flags=16,keywordFlags=0,name="Speed",type="INC",value=10}}," if you've used a Mana Flask Recently "} -c["10% increased Cast Speed if you've used a Mana Flask Recently Mana Flasks gain 0.1 charges per Second"]={{[1]={flags=16,keywordFlags=0,name="Speed",type="INC",value=10}}," if you've used a Mana Flask Recently Mana Flasks gain 0.1 charges per Second "} +c["10% increased Cast Speed if you've used a Mana Flask Recently"]={{[1]={[1]={type="Condition",var="UsingManaFlask"},flags=16,keywordFlags=0,name="Speed",type="INC",value=10}},nil} c["10% increased Cast Speed when on Full Life"]={{[1]={[1]={type="Condition",var="FullLife"},flags=16,keywordFlags=0,name="Speed",type="INC",value=10}},nil} c["10% increased Cast Speed while Chilled"]={{[1]={[1]={type="Condition",var="Chilled"},flags=16,keywordFlags=0,name="Speed",type="INC",value=10}},nil} c["10% increased Cast Speed while Ignited"]={{[1]={[1]={type="Condition",var="Ignited"},flags=16,keywordFlags=0,name="Speed",type="INC",value=10}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 000ffb3d6d..8c2c9a3511 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1870,6 +1870,7 @@ local modTagList = { ["during any life flask effect"] = { tag = { type = "Condition", var = "UsingLifeFlask" } }, ["if you've used a life flask in the past 10 seconds"] = { tag = { type = "Condition", var = "UsingLifeFlask" } }, ["if you've used a mana flask in the past 10 seconds"] = { tag = { type = "Condition", var = "UsingManaFlask" } }, + ["if you've used a mana flask recently"] = { tag = { type = "Condition", var = "UsingManaFlask" } }, ["while you have no life flask uses left"] = { tag = { type = "Condition", var = "NoLifeFlaskUsesLeft" } }, ["during effect of any life or mana flask"] = { tag = { type = "Condition", varList = { "UsingManaFlask", "UsingLifeFlask" } } }, ["while on consecrated ground"] = { tag = { type = "Condition", var = "OnConsecratedGround" } }, From fe1224192a5b72e4512b6f673074d87c0f737d8b Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Tue, 30 Jun 2026 03:08:04 -0500 Subject: [PATCH 4/5] Scarred Faith - ES above armour mod --- src/Data/ModCache.lua | 2 +- src/Modules/ModParser.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 6ff1e01035..097c61cb82 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -6972,7 +6972,7 @@ c["You can only Socket Sapphire Jewels in this item"]={{[1]={flags=0,keywordFlag c["You can wield Two-Handed Axes, Maces and Swords in one hand"]={{[1]={flags=0,keywordFlags=0,name="GiantsBlood",type="FLAG",value=true}},nil} c["You cannot Recover Energy Shield from Regeneration"]={nil,"You cannot Recover Energy Shield from Regeneration "} c["You cannot Recover Energy Shield from Regeneration You cannot Recover Energy Shield to above Armour"]={nil,"You cannot Recover Energy Shield from Regeneration You cannot Recover Energy Shield to above Armour "} -c["You cannot Recover Energy Shield to above Armour"]={nil,"You cannot Recover Energy Shield to above Armour "} +c["You cannot Recover Energy Shield to above Armour"]={{[1]={flags=0,keywordFlags=0,name="ArmourESRecoveryCap",type="FLAG",value=true}},nil} c["You cannot Sprint"]={{[1]={flags=0,keywordFlags=0,name="Condition:CannotSprint",type="FLAG",value=true}},nil} c["You cannot be Chilled for 6 seconds after being Chilled"]={nil,"You cannot be Chilled for 6 seconds after being Chilled "} c["You cannot be Chilled for 6 seconds after being Chilled You cannot be Frozen for 6 seconds after being Frozen"]={nil,"You cannot be Chilled for 6 seconds after being Chilled You cannot be Frozen for 6 seconds after being Frozen "} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 8c2c9a3511..1046ef2d0c 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -5588,7 +5588,7 @@ local specialModList = { ["(%d+)%% increased accuracy rating against enemies you mark"] = function(num) return { mod("AccuracyVsEnemy", "INC", num, { type = "ActorCondition", actor = "enemy", var = "Marked" } ) } end, ["(%d+)%% more accuracy rating against enemies you mark"] = function(num) return { mod("AccuracyVsEnemy", "MORE", num, { type = "ActorCondition", actor = "enemy", var = "Marked" } ) } end, ["%+(%d+) to accuracy against bleeding enemies"] = function(num) return { mod("AccuracyVsEnemy", "BASE", num, { type = "ActorCondition", actor = "enemy", var = "Bleeding" } ) } end, - ["cannot recover energy shield to above armour"] = { flag("ArmourESRecoveryCap") }, + ["y?o?u? ?cannot recover energy shield to above armour"] = { flag("ArmourESRecoveryCap") }, ["cannot recover energy shield to above evasion rating"] = { flag("EvasionESRecoveryCap") }, ["warcries empower (%d+) additional attacks?"] = function(num) return { mod("ExtraEmpoweredAttacks", "BASE", num) } end, ["warcries empower an additional attack"] = function(num) return { mod("ExtraEmpoweredAttacks", "BASE", 1) } end, From 5c1ec23d14e7a09c203b0947bf18803d3253eab8 Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Tue, 30 Jun 2026 03:12:39 -0500 Subject: [PATCH 5/5] Furious Wellspring - no loss of rage --- src/Data/ModCache.lua | 6 +----- src/Modules/ModParser.lua | 1 + 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 097c61cb82..f708ab2323 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -6324,11 +6324,7 @@ c["Necromantic Talisman"]={{[1]={flags=0,keywordFlags=0,name="Keystone",type="LI c["Never deal Critical Hits"]={{[1]={flags=0,keywordFlags=0,name="NeverCrit",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="Condition:NeverCrit",type="FLAG",value=true}},nil} c["No Charge requirement for placing Totems"]={nil,"No Charge requirement for placing Totems "} c["No Charge requirement for placing Totems Totems reserve 75 Spirit each"]={nil,"No Charge requirement for placing Totems Totems reserve 75 Spirit each "} -c["No Inherent loss of Rage"]={nil,"No Inherent loss of Rage "} -c["No Inherent loss of Rage Regenerate 6% of your maximum Rage per second"]={nil,"No Inherent loss of Rage Regenerate 6% of your maximum Rage per second "} -c["No Inherent loss of Rage Regenerate 6% of your maximum Rage per second Increases and Reductions to Mana Regeneration Rate also apply to Rage Regeneration Rate"]={nil,"No Inherent loss of Rage Regenerate 6% of your maximum Rage per second Increases and Reductions to Mana Regeneration Rate also apply to Rage Regeneration Rate "} -c["No Inherent loss of Rage Regenerate 6% of your maximum Rage per second Increases and Reductions to Mana Regeneration Rate also apply to Rage Regeneration Rate Skills have +5 to Rage cost"]={nil,"No Inherent loss of Rage Regenerate 6% of your maximum Rage per second Increases and Reductions to Mana Regeneration Rate also apply to Rage Regeneration Rate Skills have +5 to Rage cost "} -c["No Inherent loss of Rage Regenerate 6% of your maximum Rage per second Increases and Reductions to Mana Regeneration Rate also apply to Rage Regeneration Rate Skills have +5 to Rage cost +7 to Maximum Rage"]={{[1]={flags=0,keywordFlags=0,name="RageCost",type="BASE",value=7}},"No Inherent loss of Regenerate 6% of your per second Increases and Reductions to Mana Regeneration Rate also apply to Rage Regeneration Rate Skills have +5 to Rage to Maximum Rage "} +c["No Inherent loss of Rage"]={{[1]={flags=0,keywordFlags=0,name="InherentRageLossIsPrevented",type="FLAG",value=true}},nil} c["No Inherent loss of Rage during effect"]={nil,"No Inherent loss of Rage during effect "} c["No Inherent loss of Rage during effect 50% increased Duration"]={nil,"No Inherent loss of Rage during effect 50% increased Duration "} c["No Movement Speed Penalty while Shield is Raised"]={{[1]={[1]={skillType=262,type="SkillType"},flags=0,keywordFlags=0,name="MovementSpeedPenalty",type="MORE",value=-100}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 1046ef2d0c..18dd97fd96 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -5847,6 +5847,7 @@ local specialModList = { ["rage grants spell damage instead of attack damage"] = { flag("Condition:RageSpellDamage") }, ["inherent loss of rage is (%d+)%% slower"] = function(num) return { mod("InherentRageLoss", "INC", -num) } end, ["inherent loss of rage is (%d+)%% faster"] = function(num) return { mod("InherentRageLoss", "INC", num) } end, + ["no inherent loss of rage"] = { flag("InherentRageLossIsPrevented") }, ["inherent rage loss starts (%d+) seconds? later"] = function(num) return { mod("InherentRageLossDelay", "BASE", num) } end, ["your critical damage bonus is (%d+)%%"] = function(num) return { mod("CritMultiplier", "OVERRIDE", num) } end, ["base critical hit chance for attacks with weapons is ([%d%.]+)%%"] = function(num) return { mod("WeaponBaseCritChance", "OVERRIDE", num) } end,