From 84ce75ce598901265124c7dc125b411da3256dca Mon Sep 17 00:00:00 2001 From: Brian Taylor Date: Sat, 20 Jun 2026 09:22:05 -0400 Subject: [PATCH 1/3] Support Vestige of Darkness physical-to-chill/freeze modifier Implements the unique helmet "Vestige of Darkness" (Tenebrous Crown) affix "Physical damage from Hits Contributes to Chill Magnitude and Freeze Buildup", which was previously unparsed. Adds a ModParser rule emitting the PhysicalCanChill and PhysicalCanFreeze flags, which the offence calc's canDoAilment() gate already uses to let a non-default damage type feed Chill magnitude and Freeze buildup. Updates the stale ModCache.lua entry (the line was cached as unrecognised) and adds a system spec covering the behaviour. Co-Authored-By: Claude Opus 4.8 (1M context) --- spec/System/TestAilments_spec.lua | 29 +++++++++++++++++++++++++++++ src/Data/ModCache.lua | 3 +-- src/Modules/ModParser.lua | 3 +++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/spec/System/TestAilments_spec.lua b/spec/System/TestAilments_spec.lua index 83f6ac5f2d..4875d92556 100644 --- a/spec/System/TestAilments_spec.lua +++ b/spec/System/TestAilments_spec.lua @@ -28,4 +28,33 @@ describe("TestAilments", function() assert.are.equals(1.1, build.calcsTab.mainOutput.PoisonEffMult) end) + + it("physical damage contributes to chill and freeze with Vestige of Darkness modifier", function() + -- High flat physical, no cold, so any chill/freeze must come from physical + build.itemsTab:CreateDisplayItemFromRaw([[ + New Item + Razor Quarterstaff + Quality: 20 + Adds 40000 to 60000 Physical Damage + ]]) + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + build.skillsTab:PasteSocketGroup("Quarterstaff Strike 1/0 1") + runCallback("OnFrame") + build.calcsTab:BuildOutput() + runCallback("OnFrame") + + -- Baseline: physical hits cannot chill or freeze + assert.are.equals(0, build.calcsTab.mainOutput.FreezeBuildupAvg) + + build.configTab.input.customMods = "Physical damage from Hits Contributes to Chill Magnitude and Freeze Buildup" + build.configTab:BuildModList() + runCallback("OnFrame") + build.calcsTab:BuildOutput() + runCallback("OnFrame") + + -- Physical hits now contribute to freeze buildup and chill + assert.True(build.calcsTab.mainOutput.FreezeBuildupAvg > 0) + assert.True((build.calcsTab.mainOutput.ChillDuration or 0) > 0) + end) end) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index e2846de0d0..423b81e215 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -6431,8 +6431,7 @@ c["Physical Damage is Pinning"]={{[1]={flags=0,keywordFlags=0,name="PhysicalCanP c["Physical Damage of Enemies Hitting you is Unlucky"]={nil,"Physical Damage of Enemies Hitting you is Unlucky "} c["Physical Damage of Enemies Hitting you is Unlucky Convert All Armour to Evasion Rating"]={nil,"Physical Damage of Enemies Hitting you is Unlucky Convert All Armour to Evasion Rating "} c["Physical Spell Critical Hits build Pin"]={{[1]={[1]={type="Condition",var="CriticalStrike"},flags=2,keywordFlags=16,name="CanPin",type="FLAG",value=true}},nil} -c["Physical damage from Hits Contributes to Chill Magnitude and Freeze Buildup"]={nil,"Physical damage from Hits Contributes to Chill Magnitude and Freeze Buildup "} -c["Physical damage from Hits Contributes to Chill Magnitude and Freeze Buildup Enemies in your Presence are Blinded"]={nil,"Physical damage from Hits Contributes to Chill Magnitude and Freeze Buildup Enemies in your Presence are Blinded "} +c["Physical damage from Hits Contributes to Chill Magnitude and Freeze Buildup"]={{[1]={flags=0,keywordFlags=0,name="PhysicalCanChill",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="PhysicalCanFreeze",type="FLAG",value=true}},nil} c["Pin Enemies which are Primed for Pinning"]={nil,"Pin Enemies which are Primed for Pinning "} c["Pin Enemies which are Primed for Pinning Require 4 fewer enemies to be Surrounded"]={nil,"Pin Enemies which are Primed for Pinning Require 4 fewer enemies to be Surrounded "} c["Pinned Enemies cannot deal Critical Hits"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Pinned"},flags=0,keywordFlags=0,name="NeverCrit",type="FLAG",value=true}}},[2]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Pinned"},flags=0,keywordFlags=0,name="Condition:NeverCrit",type="FLAG",value=true}}}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index ee818e796d..77f4ac37c7 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -4066,6 +4066,9 @@ local specialModList = { flag("ColdCanIgnite"), flag("ColdCanShock"), flag("LightningCanIgnite"), flag("LightningCanChill"), flag("LightningCanFreeze"), }, + ["physical damage from hits contributes to chill magnitude and freeze buildup"] = { + flag("PhysicalCanChill"), flag("PhysicalCanFreeze"), + }, -- Bleed ["melee attacks cause bleeding"] = { mod("BleedChance", "BASE", 100, nil, ModFlag.Melee) }, ["attacks cause bleeding when hitting cursed enemies"] = { mod("BleedChance", "BASE", 100, nil, ModFlag.Attack, { type = "ActorCondition", actor = "enemy", var = "Cursed" }) }, From dde82deb3de111c85da665bc3ce2b70cb140de8b Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Mon, 29 Jun 2026 17:58:37 +1000 Subject: [PATCH 2/3] No need for test --- spec/System/TestAilments_spec.lua | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/spec/System/TestAilments_spec.lua b/spec/System/TestAilments_spec.lua index 4875d92556..83f6ac5f2d 100644 --- a/spec/System/TestAilments_spec.lua +++ b/spec/System/TestAilments_spec.lua @@ -28,33 +28,4 @@ describe("TestAilments", function() assert.are.equals(1.1, build.calcsTab.mainOutput.PoisonEffMult) end) - - it("physical damage contributes to chill and freeze with Vestige of Darkness modifier", function() - -- High flat physical, no cold, so any chill/freeze must come from physical - build.itemsTab:CreateDisplayItemFromRaw([[ - New Item - Razor Quarterstaff - Quality: 20 - Adds 40000 to 60000 Physical Damage - ]]) - build.itemsTab:AddDisplayItem() - runCallback("OnFrame") - build.skillsTab:PasteSocketGroup("Quarterstaff Strike 1/0 1") - runCallback("OnFrame") - build.calcsTab:BuildOutput() - runCallback("OnFrame") - - -- Baseline: physical hits cannot chill or freeze - assert.are.equals(0, build.calcsTab.mainOutput.FreezeBuildupAvg) - - build.configTab.input.customMods = "Physical damage from Hits Contributes to Chill Magnitude and Freeze Buildup" - build.configTab:BuildModList() - runCallback("OnFrame") - build.calcsTab:BuildOutput() - runCallback("OnFrame") - - -- Physical hits now contribute to freeze buildup and chill - assert.True(build.calcsTab.mainOutput.FreezeBuildupAvg > 0) - assert.True((build.calcsTab.mainOutput.ChillDuration or 0) > 0) - end) end) From bbe2b35eb90baeb4ab767a714a483068085a1cdb Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Mon, 29 Jun 2026 18:00:23 +1000 Subject: [PATCH 3/3] Move mod line --- src/Modules/ModParser.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 77f4ac37c7..ff558bfd15 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3896,6 +3896,7 @@ local specialModList = { ["your chaos damage can ignite"] = { flag("ChaosCanIgnite") }, ["chaos damage can ignite, chill and shock"] = { flag("ChaosCanIgnite"), flag("ChaosCanChill"), flag("ChaosCanShock") }, ["your physical damage can chill"] = { flag("PhysicalCanChill") }, + ["physical damage from hits contributes to chill magnitude and freeze buildup"] = { flag("PhysicalCanChill"), flag("PhysicalCanFreeze") }, ["your physical damage can shock"] = { flag("PhysicalCanShock") }, ["your physical damage can freeze"] = { flag("PhysicalCanFreeze") }, ["your lightning damage can freeze"] = { flag("LightningCanFreeze") }, @@ -4066,9 +4067,6 @@ local specialModList = { flag("ColdCanIgnite"), flag("ColdCanShock"), flag("LightningCanIgnite"), flag("LightningCanChill"), flag("LightningCanFreeze"), }, - ["physical damage from hits contributes to chill magnitude and freeze buildup"] = { - flag("PhysicalCanChill"), flag("PhysicalCanFreeze"), - }, -- Bleed ["melee attacks cause bleeding"] = { mod("BleedChance", "BASE", 100, nil, ModFlag.Melee) }, ["attacks cause bleeding when hitting cursed enemies"] = { mod("BleedChance", "BASE", 100, nil, ModFlag.Attack, { type = "ActorCondition", actor = "enemy", var = "Cursed" }) },