From 8c5650bc5e24bd26ea35adbb50d211a6062b2278 Mon Sep 17 00:00:00 2001 From: Dimencia Date: Wed, 31 Dec 2025 12:41:09 -0500 Subject: [PATCH 1/2] Tag companion skilltypes, update calcoffence to filter for them --- src/Data/ModCache.lua | 18 +++++++++--------- src/Modules/CalcOffence.lua | 14 +++++++++++++- src/Modules/ModParser.lua | 2 +- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index bea812bcb..eda0e8247 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -4589,17 +4589,17 @@ c["Cold Damage from Hits Contributes to Flammability and Ignite Magnitudes inste c["Cold Resistance is unaffected by Area Penalties"]={nil,"Cold Resistance is unaffected by Area Penalties "} c["Cold Resistance is unaffected by Area Penalties Fire Resistance is unaffected by Area Penalties"]={nil,"Cold Resistance is unaffected by Area Penalties Fire Resistance is unaffected by Area Penalties "} c["Combo count loss occurs 20% slower"]={nil,"Combo count loss occurs 20% slower "} -c["Companions deal 12% increased Damage"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=12}}}},nil} -c["Companions deal 15% increased Damage"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=15}}}},nil} -c["Companions deal 60% increased damage against Immobilised enemies"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="enemy",type="ActorCondition",var="Immobilised"},flags=0,keywordFlags=0,name="Damage",type="INC",value=60}}}},nil} +c["Companions deal 12% increased Damage"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="Damage",type="INC",value=12}}}},nil} +c["Companions deal 15% increased Damage"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="Damage",type="INC",value=15}}}},nil} +c["Companions deal 60% increased damage against Immobilised enemies"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={skillType=219,type="SkillType"},[2]={actor="enemy",type="ActorCondition",var="Immobilised"},flags=0,keywordFlags=0,name="Damage",type="INC",value=60}}}},nil} c["Companions gain your Strength"]={{[1]={flags=0,keywordFlags=0,name="StrengthAddedToCompanions",type="FLAG",value=true}},nil} c["Companions have +1 to each Defence for every 2 of that Defence you have"]={{}," each Defence for every 2 of that Defence you have "} -c["Companions have +12% to all Elemental Resistances"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=12}}}},nil} -c["Companions have +30% to Chaos Resistance"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=30}}}},nil} -c["Companions have +30% to all Elemental Resistances"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=30}}}},nil} -c["Companions have 10% increased Area of Effect"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="AreaOfEffect",type="INC",value=10}}}},nil} -c["Companions have 12% increased maximum Life"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Life",type="INC",value=12}}}},nil} -c["Companions have 20% increased maximum Life"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Life",type="INC",value=20}}}},nil} +c["Companions have +12% to all Elemental Resistances"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=12}}}},nil} +c["Companions have +30% to Chaos Resistance"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=30}}}},nil} +c["Companions have +30% to all Elemental Resistances"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=30}}}},nil} +c["Companions have 10% increased Area of Effect"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="AreaOfEffect",type="INC",value=10}}}},nil} +c["Companions have 12% increased maximum Life"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="Life",type="INC",value=12}}}},nil} +c["Companions have 20% increased maximum Life"]={{[1]={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={skillType=219,type="SkillType"},flags=0,keywordFlags=0,name="Life",type="INC",value=20}}}},nil} c["Companions in your Presence have Onslaught while you are Shapeshifted"]={nil,"Companions in your Presence have Onslaught while you are Shapeshifted "} c["Consume all Rage when Shapeshifting to Human form to recover 1% of maximum life per Rage Consumed"]={nil,"Consume all Rage when Shapeshifting to Human form to recover 1% of maximum life per Rage Consumed "} c["Consuming Glory grants you 3% increased Attack damage per Glory consumed for 6 seconds, up to 60%"]={nil,"Consuming Glory grants you 3% increased Attack damage per Glory consumed for 6 seconds, up to 60% "} diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index eeab60788..1c4326b28 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -696,7 +696,19 @@ function calcs.offence(env, actor, activeSkill) for _, value in ipairs(skillModList:List(tempCfg, "MinionModifier")) do if value.mod.name == "Damage" and value.mod.type == "INC" then local mod = value.mod - skillModList:NewMod("Damage", "INC", mod.value, mod.source, mod.flags, mod.keywordFlags, unpack(mod)) + + -- Ensure we only accept skills tagged as companion skills + local valid = false + for _, tag in ipairs(mod) do + if tag.type == "SkillType" and tag.skillType == SkillType.CreatesCompanion then + valid = true + break + end + end + + if valid then + skillModList:NewMod("Damage", "INC", mod.value, mod.source, mod.flags, mod.keywordFlags, unpack(mod)) + end end end end diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 9c5ca0e15..f81256ac6 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1231,7 +1231,7 @@ local preFlagList = { ["^summoned sentinels have "] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillNameList = { "Herald of Purity", "Dominating Blow", "Absolution" }, includeTransfigured = true } }, ["^raised zombies' slam attack has "] = { addToMinion = true, tag = { type = "SkillId", skillId = "ZombieSlam" } }, ["^raised spectres, raised zombies, and summoned skeletons have "] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillNameList = { "Raise Spectre", "Raise Zombie", "Summon Skeletons" }, includeTransfigured = true } }, - ["^companions [hd][ae][va][el] "] = { addToMinion = true, addToMinionTag = { type = "SkillType", skillType = SkillType.CreatesCompanion } }, + ["^companions [hd][ae][va][el] "] = { addToMinion = true, addToMinionTag = { type = "SkillType", skillType = SkillType.CreatesCompanion }, tag = { type = "SkillType", skillType = SkillType.CreatesCompanion } }, -- Totem/trap/mine ["^attacks used by totems have "] = { flags = ModFlag.Attack, keywordFlags = KeywordFlag.Totem }, ["^spells cast by totems [hd][ae][va][el] "] = { flags = ModFlag.Spell, keywordFlags = KeywordFlag.Totem }, From f62e5a4493b3486eff4de443f35a93392fcea577 Mon Sep 17 00:00:00 2001 From: Dimencia Date: Sun, 11 Jan 2026 06:26:47 -0500 Subject: [PATCH 2/2] Add regression test --- spec/System/TestAttacks_spec.lua | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/spec/System/TestAttacks_spec.lua b/spec/System/TestAttacks_spec.lua index ce1b60373..6fe122a78 100644 --- a/spec/System/TestAttacks_spec.lua +++ b/spec/System/TestAttacks_spec.lua @@ -99,4 +99,35 @@ describe("TestAttacks", function() local incSpeed = build.calcsTab.mainEnv.player.activeSkillList[1].skillModList:Sum("INC", nil, "Speed") assert.are.equals(incSpeed, 99) end) + + it("does not include minion damage with inspiring ally", function() + local baseDamage = build.calcsTab.mainOutput.MainHand.AverageHit + + build.configTab.input.customMods = "Increases and Reductions to Companion Damage also apply to you" + build.configTab:BuildModList() + runCallback("OnFrame") + build.calcsTab:BuildOutput() + runCallback("OnFrame") + + -- No damage change + assert.are.equals(baseDamage, build.calcsTab.mainOutput.MainHand.AverageHit) + + build.configTab.input.customMods = build.configTab.input.customMods .. "\nminions deal 12% increased damage" + build.configTab:BuildModList() + runCallback("OnFrame") + build.calcsTab:BuildOutput() + runCallback("OnFrame") + + -- No damage change + assert.are.equals(baseDamage, build.calcsTab.mainOutput.MainHand.AverageHit) + + build.configTab.input.customMods = build.configTab.input.customMods .. "\ncompanions deal 12% increased damage" + build.configTab:BuildModList() + runCallback("OnFrame") + build.calcsTab:BuildOutput() + runCallback("OnFrame") + + -- Damage should be higher + assert.is_true(build.calcsTab.mainOutput.MainHand.AverageHit > baseDamage) + end) end) \ No newline at end of file