From 9328f2ca9ada003e389e46a838f5cc157b64190d Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 6 May 2026 10:40:39 +0200 Subject: [PATCH] Fix Blade Blast default stage cap Blade Blast uses a stage count for blade hits per cast/per second. Its modeled maximum was set to 900, so defaulting staged skills to their maximum stages overinflated Blade Blast damage. Use the skill tooltip cap of 50 blades instead and cover the default plus over-cap input. Fixes PathOfBuildingCommunity/PathOfBuilding#9836 --- spec/System/TestSkills_spec.lua | 32 ++++++++++++++++++++++++++++++++ src/Data/Skills/act_dex.lua | 2 +- src/Export/Skills/act_dex.txt | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua index 9c846685df..831ac25466 100644 --- a/spec/System/TestSkills_spec.lua +++ b/spec/System/TestSkills_spec.lua @@ -100,6 +100,38 @@ describe("TestAttacks", function() assert.True(build.calcsTab.mainEnv.enemyDB:Sum("BASE", nil, "FireResist") < 0) end) + it("Defaults Blade Blast to the skill's blade cap", function() + build.skillsTab:PasteSocketGroup("Blade Blast 20/0 1\n") + runCallback("OnFrame") + + local mainSocketGroup = build.skillsTab.socketGroupList[build.mainSocketGroup] + local activeSkill = mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill] + local calcsSkillSelectControls = build.calcsTab.sectionList[1].controls + build:RefreshSkillSelectControls(calcsSkillSelectControls, build.calcsTab.input.skill_number, "Calcs") + + assert.are.equals("50", build.controls.mainSkillStageCount.buf) + assert.are.equals("50", calcsSkillSelectControls.mainSkillStageCount.buf) + assert.are.equals(50, activeSkill.skillData.stagesMax) + assert.are.equals(50, activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:BladeBlastStage")) + assert.are.equals(49, activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:BladeBlastStageAfterFirst")) + + local cappedAverageDamage = build.calcsTab.mainOutput.AverageDamage + local cappedTotalDPS = build.calcsTab.mainOutput.TotalDPS + local cappedCombinedDPS = build.calcsTab.mainOutput.CombinedDPS + activeSkill.activeEffect.srcInstance.skillStageCount = 51 + build.modFlag = true + build.buildFlag = true + runCallback("OnFrame") + + activeSkill = mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill] + assert.are.equals("51", build.controls.mainSkillStageCount.buf) + assert.are.equals(50, activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:BladeBlastStage")) + assert.are.equals(49, activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:BladeBlastStageAfterFirst")) + assert.are.equals(cappedAverageDamage, build.calcsTab.mainOutput.AverageDamage) + assert.are.equals(cappedTotalDPS, build.calcsTab.mainOutput.TotalDPS) + assert.are.equals(cappedCombinedDPS, build.calcsTab.mainOutput.CombinedDPS) + end) + it("Test Adrenaline affecting blight max stage count", function() build.skillsTab:PasteSocketGroup("Blight 20/0 1\n") runCallback("OnFrame") diff --git a/src/Data/Skills/act_dex.lua b/src/Data/Skills/act_dex.lua index 0f6f31b301..be59e217d0 100644 --- a/src/Data/Skills/act_dex.lua +++ b/src/Data/Skills/act_dex.lua @@ -1382,7 +1382,7 @@ skills["BladeBlast"] = { area = true, }, baseMods = { - mod("Multiplier:BladeBlastMaxStages", "BASE", 900, 0, 0), + mod("Multiplier:BladeBlastMaxStages", "BASE", 50, 0, 0), skill("dpsBaseMultiplier", 1, { type = "Multiplier", var = "BladeBlastStage" }), }, qualityStats = { diff --git a/src/Export/Skills/act_dex.txt b/src/Export/Skills/act_dex.txt index ab609d55d3..7da4a605fa 100644 --- a/src/Export/Skills/act_dex.txt +++ b/src/Export/Skills/act_dex.txt @@ -237,7 +237,7 @@ local skills, mod, flag, skill = ... activeSkill.skillData.hitTimeOverride = 1 end end, -#baseMod mod("Multiplier:BladeBlastMaxStages", "BASE", 900, 0, 0) +#baseMod mod("Multiplier:BladeBlastMaxStages", "BASE", 50, 0, 0) #baseMod skill("dpsBaseMultiplier", 1, { type = "Multiplier", var = "BladeBlastStage" }) #mods