diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index 35079bf39..1f3fa36bd 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -2708,7 +2708,18 @@ function calcs.perform(env, skipEHP) ["Chill"] = { condition = "Chilled", mods = function(num) - local mods = { modLib.createMod("ActionSpeed", "INC", -num, "Chill", { type = "Condition", var = "Chilled" }) } + local mods = { } + + if modDB:Flag(nil, "ChillCanStack") then + t_insert(mods, modLib.createMod("DamageTaken", "INC", num, "Shock", { type = "Condition", var = "Shocked" }, { type = "Multiplier", var = "ShockStacks", limit = modDB:Override(nil, "ShockStacksMax") or modDB:Sum("BASE", nil, "ShockStacksMax")})) + output["CurrentChill"] = num * m_min(enemyDB:Sum("BASE", nil, "Multiplier:ChillStacks"), modDB:Override(nil, "ChillStacksMax") or modDB:Sum("BASE", nil, "ChillStacksMax")) + if breakdown then + t_insert(mods, modLib.createMod("ActionSpeed", "INC", -num, "Chill Stacks", { type = "Condition", var = "Chilled" }, { type = "Multiplier", var = "ShockStacks", limit = modDB:Override(nil, "ShockStacksMax") or modDB:Sum("BASE", nil, "ShockStacksMax")})) + end + else + t_insert(mods, modLib.createMod("ActionSpeed", "INC", -num, "Chill", { type = "Condition", var = "Chilled" })) + end + if output.HasBonechill and (hasGuaranteedBonechill or enemyDB:Sum("BASE", nil, "ChillVal") > 0) then t_insert(mods, modLib.createMod("ColdDamageTaken", "INC", num, "Bonechill", { type = "Condition", var = "Chilled" })) end diff --git a/src/Modules/CalcSetup.lua b/src/Modules/CalcSetup.lua index f9ead33f1..96b6ba5ab 100644 --- a/src/Modules/CalcSetup.lua +++ b/src/Modules/CalcSetup.lua @@ -56,6 +56,7 @@ function calcs.initModDB(env, modDB) modDB:NewMod("BallistaPlacementTime", "BASE", 0.35, "Base") modDB:NewMod("ActiveTotemLimit", "BASE", 1, "Base") modDB:NewMod("ShockStacksMax", "BASE", 1, "Base") + modDB:NewMod("ChillStacksMax", "BASE", 1, "Base") modDB:NewMod("ScorchStacksMax", "BASE", 1, "Base") modDB:NewMod("MovementSpeed", "INC", -30, "Base", { type = "Condition", var = "Maimed" }) modDB:NewMod("Evasion", "INC", -15, "Base", { type = "Condition", var = "Maimed" }) diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 49dc5781a..e4ad086d7 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -1547,6 +1547,9 @@ Huge sets the radius to 11. enemyModList:NewMod("ChillVal", "BASE", val, "Chill", { type = "Condition", var = "ChilledConfig" }) enemyModList:NewMod("DesiredChillVal", "BASE", val, "Chill", { type = "Condition", var = "ChilledConfig", neg = true }) end }, + { var = "ChillStacks", type = "count", label = "^xADAA47Chill ^7Stacks", ifFlag = "ChillCanStack", ifOption = "conditionEnemyChilled", defaultPlaceholderState = 1, tooltip = "Amount of stacks of ^xADAA47Chill ^7applied to the enemy.", apply = function(val, modList, enemyModList) + enemyModList:NewMod("Multiplier:ChillStacks", "BASE", val, "Config", { type = "Condition", var = "Effective" }) + end }, { var = "conditionEnemyChilledByYourHits", type = "check", ifEnemyCond = "ChilledByYourHits", label = "Is the enemy ^x3F6DB3Chilled ^7by your Hits?", apply = function(val, modList, enemyModList) enemyModList:NewMod("Condition:Chilled", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) enemyModList:NewMod("Condition:ChilledByYourHits", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) diff --git a/src/Modules/Data.lua b/src/Modules/Data.lua index 564d84754..855880b88 100644 --- a/src/Modules/Data.lua +++ b/src/Modules/Data.lua @@ -300,7 +300,7 @@ data.nonElementalAilmentTypeList = { "Bleed", "Poison" } data.nonDamagingAilment = { ["Chill"] = { associatedType = "Cold", alt = false, default = 10, min = 5, max = data.gameConstants["ChillMaxEffect"], precision = 0, duration = data.gameConstants["BaseChillDuration"] }, ["Freeze"] = { associatedType = "Cold", alt = false, default = nil, min = 0.3, max = 3, precision = 2, duration = data.gameConstants["FreezeDuration"] }, - ["Shock"] = { associatedType = "Lightning", alt = false, default = 15, min = 5, max = 50, precision = 0, duration = data.gameConstants["BaseShockDuration"] }, + ["Shock"] = { associatedType = "Lightning", alt = false, default = 20, min = 20, max = 20, precision = 0, duration = data.gameConstants["BaseShockDuration"] }, } -- Used in ModStoreClass:ScaleAddMod(...) to identify high precision modifiers diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 773b6d68f..4e5ba1f55 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -2551,6 +2551,12 @@ local specialModList = { flag("ColdCanShock"), flag("ChaosCanShock"), }, + ["all damage from hits contributes to chill magnitude"] = { + flag("PhysicalCanChill"), + flag("FireCanChill"), + flag("LightningCanChill"), + flag("ChaosCanChill"), + }, ["all damage can shock"] = { flag("PhysicalCanShock"), flag("FireCanShock"), @@ -2783,6 +2789,10 @@ local specialModList = { -- Mercenary - Gemling ["attribute requirements of gems can be satisi?fied by your highest attribute"] = { flag("GemAttributeRequirementsSatisfiedByHighestAttribute") }, ["you can use two copies of the same support gem in different skills"] = { mod("MaxSupportGemCopies", "OVERRIDE", 2) }, + -- 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) }, + ["your chills can slow targets by up to a maximum of (%d+)%%"] = function(num) return { mod("ChillMax", "OVERRIDE", num)} end, -- Item local modifiers ["has no sockets"] = { flag("NoSockets") }, ["reflects your other ring"] = {