diff --git a/spec/System/TestAttacks_spec.lua b/spec/System/TestAttacks_spec.lua index a65a117053..96db4a8292 100644 --- a/spec/System/TestAttacks_spec.lua +++ b/spec/System/TestAttacks_spec.lua @@ -30,6 +30,50 @@ describe("TestAttacks", function() assert.are.equals(2 + 0.25, build.calcsTab.mainOutput.CritMultiplier) end) + local function setupBoneshatter(weaponRaw, supports, configInput) + newBuild() + build.itemsTab:CreateDisplayItemFromRaw(weaponRaw) + build.itemsTab:AddDisplayItem() + build.skillsTab:PasteSocketGroup("Boneshatter 20/0 1" .. (supports or "")) + build.mainSocketGroup = 1 + for var, value in pairs(configInput or { }) do + build.configTab.input[var] = value + end + build.configTab:BuildModList() + runCallback("OnFrame") + return build.calcsTab.mainOutput + end + + local plainGreathammer = [[ + New Item + Cultist Greathammer + ]] + + it("applies keyword-flagged MORE Critical Damage Bonus to attacks", function() + -- Base Critical Damage Bonus is 100%, so CritMultiplier = 1 + 1.0 * increased * more + local increased = setupBoneshatter(plainGreathammer, nil, { customMods = "50% increased Critical Damage Bonus with Attacks" }) + assert.are.equals(2.5, increased.CritMultiplier) + + local more = setupBoneshatter(plainGreathammer, nil, { customMods = "50% more Critical Damage Bonus with Attacks" }) + assert.are.equals(2.5, more.CritMultiplier) + end) + + it("applies conditional MORE Accuracy when attacks are Empowered by an attack-flagged source", function() + -- The Empty Roar grants Condition:Empowered with ModFlag.Attack; Unerring Power grants more Accuracy while Empowered + local emptyRoar = [[ + Rarity: UNIQUE + The Empty Roar + Cultist Greathammer + All Attacks count as Empowered Attacks + ]] + local unsupported = setupBoneshatter(emptyRoar).MainHand.Accuracy + local supported = setupBoneshatter(emptyRoar, "\nUnerring Power 1/0 1").MainHand.Accuracy + local configEmpowered = setupBoneshatter(plainGreathammer, "\nUnerring Power 1/0 1", { conditionEmpowered = true }).MainHand.Accuracy + + assert.is_true(supported > unsupported) + assert.are.equals(configEmpowered, supported) + end) + it("local Critical Damage Bonus on a weapon does not apply to spells (issue #2199)", function() -- baseline: a spell's crit multi with a plain quarterstaff (no local crit damage) build.itemsTab:CreateDisplayItemFromRaw([[ diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 960a5e16d4..10967931b0 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -2709,8 +2709,8 @@ function calcs.offence(env, actor, activeSkill) local baseVsEnemy = skillModList:Sum("BASE", cfg, "Accuracy", "AccuracyVsEnemy") local inc = skillModList:Sum("INC", cfg, "Accuracy") local incVsEnemy = skillModList:Sum("INC", cfg, "Accuracy", "AccuracyVsEnemy") - local more = skillModList:More("MORE", cfg, "Accuracy") - local moreVsEnemy = skillModList:More("MORE", cfg, "Accuracy", "AccuracyVsEnemy") + local more = skillModList:More(cfg, "Accuracy") + local moreVsEnemy = skillModList:More(cfg, "Accuracy", "AccuracyVsEnemy") local enemyDistance = env.modDB:Sum("BASE", nil, "Multiplier:enemyDistance") / 10 or 25 local enemyDistanceCapped = m_max(m_min(enemyDistance * 10, data.misc.AccuracyFalloffEnd), data.misc.AccuracyFalloffStart) @@ -3084,7 +3084,7 @@ function calcs.offence(env, actor, activeSkill) globalBreakdown.ReloadTime = { } local baseReloadTime = source.ReloadTime local incReloadSpeed = skillModList:Sum("INC", skillCfg, "ReloadSpeed") - local moreReloadSpeed = skillModList:More("MORE", skillCfg, "ReloadSpeed") + local moreReloadSpeed = skillModList:More(skillCfg, "ReloadSpeed") t_insert(globalBreakdown.ReloadTime, s_format(" 1.00s / %.2f ^8(base reload time)", baseReloadTime)) t_insert(globalBreakdown.ReloadTime, s_format("= %.2f ^8(base reload rate)", 1 / baseReloadTime)) t_insert(globalBreakdown.ReloadTime, s_format("\n")) @@ -3982,7 +3982,7 @@ function calcs.offence(env, actor, activeSkill) else local extraDamage = skillModList:Sum("BASE", cfg, "CritMultiplier") / 100 local extraDamageInc = 1 + skillModList:Sum("INC", cfg, "CritMultiplier") / 100 - local extraDamageMore = skillModList:More("MORE", cfg, "CritMultiplier") + local extraDamageMore = skillModList:More(cfg, "CritMultiplier") extraDamage = extraDamage * extraDamageInc * extraDamageMore local multiOverride = skillModList:Override(skillCfg, "CritMultiplier") if multiOverride then