From a9d52c95f2d7e5383affd6c630eaa036065a16c1 Mon Sep 17 00:00:00 2001 From: unrealdreamz <132005717+unrealdreamz@users.noreply.github.com> Date: Mon, 18 May 2026 19:02:08 -0400 Subject: [PATCH 1/2] Stop Flame Breath cooldown from capping channel speed --- spec/System/TestSkills_spec.lua | 25 +++++++++++++++++++++++++ src/Data/SkillStatMap.lua | 3 +++ src/Modules/CalcOffence.lua | 4 +++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua index 3afa41ce0..ff4cfbc9b 100644 --- a/spec/System/TestSkills_spec.lua +++ b/spec/System/TestSkills_spec.lua @@ -229,6 +229,31 @@ describe("TestSkills", function() assert.True(baseCorruptingCryDps == build.calcsTab.mainOutput.CorruptingBloodDPS) end) + it("Flame Breath attack speed scales DPS and is not capped by its channel cooldown", function() + build.itemsTab:CreateDisplayItemFromRaw([[ + New Item + Roaring Talisman + ]]) + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + + build.skillsTab:PasteSocketGroup("Flame Breath 20/0 1") + runCallback("OnFrame") + + local baseSpeed = build.calcsTab.mainOutput.Speed + local baseDPS = build.calcsTab.mainOutput.TotalDPS + + assert.True(baseSpeed > 1) + assert.True(baseDPS > 0) + + build.configTab.input.customMods = "100% increased attack speed" + build.configTab:BuildModList() + runCallback("OnFrame") + + assert.True(build.calcsTab.mainOutput.Speed > baseSpeed * 1.9) + assert.True(build.calcsTab.mainOutput.TotalDPS > baseDPS * 1.9) + end) + it("Test Atziri's Allure - ignore curse limit", function() build.skillsTab:PasteSocketGroup("Elemental Weakness 20/0 1\nAtziri's Allure 1/0 1") build.skillsTab:PasteSocketGroup("Flammability 20/0 1\n") diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index 78811af1a..209b4bf81 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -589,6 +589,9 @@ return { ["display_this_skill_cooldown_does_not_recover_during_buff"] = { flag("NoCooldownRecoveryInDuration"), }, +["channelled_skill_do_not_go_on_cooldown_on_finishing_channel"] = { + flag("CooldownDoesNotLimitSkillSpeed"), +}, ["totem_skill_cast_speed_+%"] = { mod("Speed", "INC", nil, ModFlag.Cast, KeywordFlag.Totem), }, diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index abf822011..a296bf028 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -2741,7 +2741,9 @@ function calcs.offence(env, actor, activeSkill) end if globalOutput.Cooldown then output.Cooldown = globalOutput.Cooldown - output.Speed = m_min(output.Speed, 1 / output.Cooldown * output.Repeats) + if not skillModList:Flag(skillCfg, "CooldownDoesNotLimitSkillSpeed") then + output.Speed = m_min(output.Speed, 1 / output.Cooldown * output.Repeats) + end end if output.Cooldown and skillFlags.selfCast or skillData.maxHitRatePerEnemy or skillData.hitTimeOverride then skillFlags.notAverage = true From b56af816fb4b97ff65eb1a31e12284d23761735d Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 22 May 2026 16:32:14 +1000 Subject: [PATCH 2/2] Fix breakdown --- src/Modules/CalcOffence.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index a296bf028..763799fe7 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -2846,7 +2846,7 @@ function calcs.offence(env, actor, activeSkill) t_insert(breakdown.Speed, s_format("= %.2f ^8(eff. attack rate)", output.Speed)) end -- Cooldown: - if output.Cooldown and (1 / output.Cooldown) < output.CastRate then + if output.Cooldown and (1 / output.Cooldown) < output.CastRate and not skillModList:Flag(skillCfg, "CooldownDoesNotLimitSkillSpeed") then t_insert(breakdown.Speed, s_format("\n")) t_insert(breakdown.Speed, s_format("1 / %.2f ^8(skill cooldown)", output.Cooldown)) if output.Repeats > 1 then