From 165036233010e5519036125ec0ae20442b667664 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 3 Oct 2025 12:40:29 +1000 Subject: [PATCH 1/2] Add support for Embitter Adds the conversion of other damage gains to instead to apply to only Cold damage Tested with the Rune that grants each element and it converts each one individually Decided to not try and convert each mod for the pupose of a neater breakdown as I believe it might cause more issues and be pretty computationally expensive as there are a lot of conversion mods it would have to check and convert --- src/Data/Skills/sup_int.lua | 5 +++++ src/Export/Skills/sup_int.txt | 5 +++++ src/Modules/CalcOffence.lua | 6 +++++- src/Modules/CalcSections.lua | 31 ++++++++++++++++--------------- src/Modules/CalcSetup.lua | 3 ++- src/Modules/Data.lua | 4 ++-- 6 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/Data/Skills/sup_int.lua b/src/Data/Skills/sup_int.lua index 119cac9261..c2dba6adb8 100644 --- a/src/Data/Skills/sup_int.lua +++ b/src/Data/Skills/sup_int.lua @@ -2049,6 +2049,11 @@ skills["SupportEmbitterPlayer"] = { label = "Embitter", incrementalEffectiveness = 0.054999999701977, statDescriptionScope = "gem_stat_descriptions", + statMap = { + ["all_damage_gained_as_cold_instead"] = { + flag("DamageGainIsOnlyCold"), + }, + }, baseFlags = { }, stats = { diff --git a/src/Export/Skills/sup_int.txt b/src/Export/Skills/sup_int.txt index 172ee01dfe..f8d5f30111 100644 --- a/src/Export/Skills/sup_int.txt +++ b/src/Export/Skills/sup_int.txt @@ -442,6 +442,11 @@ statMap = { #skill SupportEmbitterPlayer #set SupportEmbitterPlayer +statMap = { + ["all_damage_gained_as_cold_instead"] = { + flag("DamageGainIsOnlyCold"), + }, +}, #mods #skillEnd diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 72619e29e1..6d620e3d80 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -2170,7 +2170,11 @@ function calcs.offence(env, actor, activeSkill) "Skill"..damageType.."DamageGainAs"..toType, isElemental[damageType] and "SkillElementalDamageGainAs"..toType or nil, damageType ~= "Chaos" and "SkillNonChaosDamageGainAs"..toType or nil), 0) - activeSkill.gainTable[damageType][toType] = (globalGain + skillGain) / 100 + if skillModList:Flag(skillCfg, "DamageGainIsOnlyCold") and toType ~= "Cold" then + activeSkill.gainTable[damageType]["Cold"] = (activeSkill.gainTable[damageType]["Cold"] or 0) + (globalGain + skillGain) / 100 + else + activeSkill.gainTable[damageType][toType] = (activeSkill.gainTable[damageType][toType] or 0) + (globalGain + skillGain) / 100 + end end end diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index 3fde851089..962ae79419 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -30,6 +30,7 @@ local function fillConvert(damageType) table.insert(convert, damageType.."DamageConvertTo"..type) table.insert(convert, "DamageGainAs"..type) table.insert(convert, damageType.."DamageGainAs"..type) + table.insert(convert, "DamageGainIsOnly"..type) if type ~= "Chaos" and type ~= "Physical" then table.insert(convert, "ElementalDamageConvertTo"..type) @@ -153,23 +154,23 @@ return { { format = "{0:output:TotalMin} to {0:output:TotalMax}", }, { format = "{0:output:PhysicalMin} to {0:output:PhysicalMax}", { breakdown = "Physical" }, - { label = "Conversions", modType = "BASE", cfg = "skill", modName = physicalConvert }, + { label = "Conversions", cfg = "skill", modName = physicalConvert }, }, { format = "{0:output:LightningMin} to {0:output:LightningMax}", { breakdown = "Lightning" }, - { label = "Conversions", modType = "BASE", cfg = "skill", modName = lightningConvert }, + { label = "Conversions", cfg = "skill", modName = lightningConvert }, }, { format = "{0:output:ColdMin} to {0:output:ColdMax}", { breakdown = "Cold" }, - { label = "Conversions", modType = "BASE", cfg = "skill", modName = coldConvert }, + { label = "Conversions", cfg = "skill", modName = coldConvert }, }, { format = "{0:output:FireMin} to {0:output:FireMax}", { breakdown = "Fire" }, - { label = "Conversions", modType = "BASE", cfg = "skill", modName = fireConvert }, + { label = "Conversions", cfg = "skill", modName = fireConvert }, }, { format = "{0:output:ChaosMin} to {0:output:ChaosMax}", { breakdown = "Chaos" }, - { label = "Conversions", modType = "BASE", cfg = "skill", modName = chaosConvert }, + { label = "Conversions", cfg = "skill", modName = chaosConvert }, }, }, { label = "Skill Average Hit", notFlag = "attack", { format = "{1:output:AverageHit}", { breakdown = "AverageHit" }, }, }, @@ -225,23 +226,23 @@ return { { format = "{0:output:MainHand.TotalMin} to {0:output:MainHand.TotalMax}", }, { format = "{0:output:MainHand.PhysicalMin} to {0:output:MainHand.PhysicalMax}", { breakdown = "MainHand.Physical" }, - { label = "Conversions", modType = "BASE", cfg = "weapon1", modName = physicalConvert }, + { label = "Conversions", cfg = "weapon1", modName = physicalConvert }, }, { format = "{0:output:MainHand.LightningMin} to {0:output:MainHand.LightningMax}", { breakdown = "MainHand.Lightning" }, - { label = "Conversions", modType = "BASE", cfg = "weapon1", modName = lightningConvert }, + { label = "Conversions", cfg = "weapon1", modName = lightningConvert }, }, { format = "{0:output:MainHand.ColdMin} to {0:output:MainHand.ColdMax}", { breakdown = "MainHand.Cold" }, - { label = "Conversions", modType = "BASE", cfg = "weapon1", modName = coldConvert }, + { label = "Conversions", cfg = "weapon1", modName = coldConvert }, }, { format = "{0:output:MainHand.FireMin} to {0:output:MainHand.FireMax}", { breakdown = "MainHand.Fire" }, - { label = "Conversions", modType = "BASE", cfg = "weapon1", modName = fireConvert }, + { label = "Conversions", cfg = "weapon1", modName = fireConvert }, }, { format = "{0:output:MainHand.ChaosMin} to {0:output:MainHand.ChaosMax}", { breakdown = "MainHand.Chaos" }, - { label = "Conversions", modType = "BASE", cfg = "weapon1", modName = chaosConvert }, + { label = "Conversions", cfg = "weapon1", modName = chaosConvert }, }, }, { label = "MH Average Hit", bgCol = colorCodes.MAINHANDBG, flag = "weapon1Attack", { format = "{1:output:MainHand.AverageHit}", { breakdown = "MainHand.AverageHit" }, }, }, @@ -297,23 +298,23 @@ return { { format = "{0:output:OffHand.TotalMin} to {0:output:OffHand.TotalMax}", }, { format = "{0:output:OffHand.PhysicalMin} to {0:output:OffHand.PhysicalMax}", { breakdown = "OffHand.Physical" }, - { label = "Conversions", modType = "BASE", cfg = "weapon2", modName = physicalConvert }, + { label = "Conversions", cfg = "weapon2", modName = physicalConvert }, }, { format = "{0:output:OffHand.LightningMin} to {0:output:OffHand.LightningMax}", { breakdown = "OffHand.Lightning" }, - { label = "Conversions", modType = "BASE", cfg = "weapon2", modName = lightningConvert }, + { label = "Conversions", cfg = "weapon2", modName = lightningConvert }, }, { format = "{0:output:OffHand.ColdMin} to {0:output:OffHand.ColdMax}", { breakdown = "OffHand.Cold" }, - { label = "Conversions", modType = "BASE", cfg = "weapon2", modName = coldConvert }, + { label = "Conversions", cfg = "weapon2", modName = coldConvert }, }, { format = "{0:output:OffHand.FireMin} to {0:output:OffHand.FireMax}", { breakdown = "OffHand.Fire" }, - { label = "Conversions", modType = "BASE", cfg = "weapon2", modName = fireConvert }, + { label = "Conversions", cfg = "weapon2", modName = fireConvert }, }, { format = "{0:output:OffHand.ChaosMin} to {0:output:OffHand.ChaosMax}", { breakdown = "OffHand.Chaos" }, - { label = "Conversions", modType = "BASE", cfg = "weapon2", modName = chaosConvert }, + { label = "Conversions", cfg = "weapon2", modName = chaosConvert }, }, }, { label = "OH Average Hit", bgCol = colorCodes.OFFHANDBG, flag = "weapon2Attack", { format = "{1:output:OffHand.AverageHit}", { breakdown = "OffHand.AverageHit" }, }, }, diff --git a/src/Modules/CalcSetup.lua b/src/Modules/CalcSetup.lua index 8e7dc52539..03309708d3 100644 --- a/src/Modules/CalcSetup.lua +++ b/src/Modules/CalcSetup.lua @@ -70,7 +70,8 @@ function calcs.initModDB(env, modDB) modDB:NewMod("Damage", "MORE", -10, "Base", { type = "Condition", var = "Debilitated"}) modDB:NewMod("Condition:Burning", "FLAG", true, "Base", { type = "IgnoreCond" }, { type = "Condition", var = "Ignited" }) modDB:NewMod("Condition:Poisoned", "FLAG", true, "Base", { type = "IgnoreCond" }, { type = "MultiplierThreshold", var = "PoisonStack", threshold = 1 }) - modDB:NewMod("ShockBase", "BASE", 20, "Base", { type = "ActorCondition", actor = "enemy", var = "Shocked" }) + modDB:NewMod("ShockBase", "BASE", data.gameConstants["BaseShockMagnitude"], "Base", { type = "ActorCondition", actor = "enemy", var = "Shocked" }) + modDB:NewMod("ChillBase", "BASE", 30, "Base", { type = "ActorCondition", actor = "enemy", var = "Chilled" }) modDB:NewMod("Blind", "FLAG", true, "Base", { type = "Condition", var = "Blinded" }) modDB:NewMod("Chill", "FLAG", true, "Base", { type = "Condition", var = "Chilled" }) modDB:NewMod("Freeze", "FLAG", true, "Base", { type = "Condition", var = "Frozen" }) diff --git a/src/Modules/Data.lua b/src/Modules/Data.lua index 257dc107ce..e49616b8e2 100644 --- a/src/Modules/Data.lua +++ b/src/Modules/Data.lua @@ -337,9 +337,9 @@ data.nonDamagingAilmentTypeList = { "Chill", "Freeze", "Shock" } 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"] }, + ["Chill"] = { associatedType = "Cold", alt = false, default = 30, min = 30, 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 = 20, min = 20, max = 100, precision = 0, duration = data.gameConstants["BaseShockDuration"] }, + ["Shock"] = { associatedType = "Lightning", alt = false, default = data.gameConstants["BaseShockMagnitude"], min = data.gameConstants["BaseShockMagnitude"], max = 100, precision = 0, duration = data.gameConstants["BaseShockDuration"] }, } data.defaultAilmentDamageTypes = { From 10320b82d750b7890b7b9d073a1d7def540fb51a Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 3 Oct 2025 12:42:29 +1000 Subject: [PATCH 2/2] Base chill change --- src/Data/ModCache.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index a47ea67104..b7bc76418d 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -5172,7 +5172,7 @@ c["Offerings have 15% increased Maximum Life"]={nil,"Offerings have 15% increase c["Offerings have 30% increased Maximum Life"]={nil,"Offerings have 30% increased Maximum Life "} c["Offerings have 30% increased Maximum Life Recover 3% of maximum Life when you create an Offering"]={nil,"Offerings have 30% increased Maximum Life Recover 3% of maximum Life when you create an Offering "} c["Offerings have 30% reduced Maximum Life"]={nil,"Offerings have 30% reduced Maximum Life "} -c["On Freezing Enemies create Chilled Ground"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="OnChilledGround"},flags=0,keywordFlags=0,name="ChillBase",type="BASE",value=10}},nil} +c["On Freezing Enemies create Chilled Ground"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="OnChilledGround"},flags=0,keywordFlags=0,name="ChillBase",type="BASE",value=30}},nil} c["On Heavy Stunning a Rare or Unique Enemy, your next Attack within 4 seconds will be Ancestrally Boosted"]={nil,"On Heavy Stunning a Rare or Unique Enemy, your next Attack within 4 seconds will be Ancestrally Boosted "} c["On Hitting an Enemy while a Life Flask is at full Charges, 40% of its Charges are consumed"]={nil,"On Hitting an Enemy while a Life Flask is at full Charges, 40% of its Charges are consumed "} c["On Hitting an Enemy while a Life Flask is at full Charges, 40% of its Charges are consumed Gain 1% of damage as Physical damage for 3 seconds per Charge consumed this way"]={nil,"On Hitting an Enemy while a Life Flask is at full Charges, 40% of its Charges are consumed Gain 1% of damage as Physical damage for 3 seconds per Charge consumed this way "}