From 4552095babc28a0811cdb3a8c3c0024d3afac787 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Sat, 29 Aug 2026 20:13:37 +0000 Subject: [PATCH 1/4] Apply changes from https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/10254 --- spec/System/TestSkills_spec.lua.rej | 12 ++++++++++++ src/Modules/CalcOffence.lua | 8 ++++++++ 2 files changed, 20 insertions(+) create mode 100644 spec/System/TestSkills_spec.lua.rej diff --git a/spec/System/TestSkills_spec.lua.rej b/spec/System/TestSkills_spec.lua.rej new file mode 100644 index 0000000000..60ac3cf3f2 --- /dev/null +++ b/spec/System/TestSkills_spec.lua.rej @@ -0,0 +1,12 @@ +diff a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua (rejected hunks) +@@ -331,8 +331,8 @@ describe("TestSkills", function() + runCallback("OnFrame") + + local genericEfficiencyCost = build.calcsTab.mainOutput.ManaCost +- -- Test actual behavior: 12/1.25 = 9.6 (not rounded) +- assert.True(math.abs(genericEfficiencyCost - 9.6) < 0.001) ++ -- The game rounds 12 / 1.25 = 9.6 after applying efficiency. ++ assert.are.equals(10, genericEfficiencyCost) + + -- Test multiple efficiency sources stacking additively + build.configTab.input.customMods = "25% increased Cost Efficiency\n25% increased Mana Cost Efficiency" diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index bcb2940da3..135d33be60 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -2160,6 +2160,10 @@ function calcs.offence(env, actor, activeSkill) end -- Apply cost efficiency (similar to reservation efficiency) output[costName] = m_max(0, output[costName] / costEfficiency) + if val.upfront and not val.percent then + -- The game stores upfront resource costs as whole numbers after efficiency. + output[costName] = round(output[costName]) + end output[costName] = m_max(0, output[costName] + val.totalCost) if val.type == "Mana" and hybridLifeCost > 0 then -- Life/Mana Mastery output[costName] = m_max(0, m_floor((1 - hybridLifeCost) * output[costName])) @@ -2173,6 +2177,10 @@ function calcs.offence(env, actor, activeSkill) output[costName] = m_max(0, moreType * output[costName]) -- Apply cost efficiency for unaffected costs too output[costName] = m_max(0, output[costName] / costEfficiency) + if val.upfront and not val.percent then + -- The game stores upfront resource costs as whole numbers after efficiency. + output[costName] = round(output[costName]) + end output[costName] = m_max(0, output[costName] + val.totalCost) output[costNameRaw] = val.baseCostRaw and m_max(0, m_max(0, (1 + inc / 100) * (val.baseCostRaw + val.baseCostNoMult) * moreType / costEfficiency) + val.totalCost) end From cc60ed99fb22e0d1fd6d74d49399f0cbcc37043b Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Sun, 30 Aug 2026 08:23:37 +1000 Subject: [PATCH 2/4] Fix test --- spec/System/TestSkills_spec.lua | 4 ++-- spec/System/TestSkills_spec.lua.rej | 12 ------------ 2 files changed, 2 insertions(+), 14 deletions(-) delete mode 100644 spec/System/TestSkills_spec.lua.rej diff --git a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua index b79900658e..823347ea53 100644 --- a/spec/System/TestSkills_spec.lua +++ b/spec/System/TestSkills_spec.lua @@ -465,8 +465,8 @@ describe("TestSkills", function() runCallback("OnFrame") local genericEfficiencyCost = build.calcsTab.mainOutput.ManaCost - -- Test actual behavior: 9/1.25 = 7.2 (not rounded) - assert.True(math.abs(genericEfficiencyCost - 7.2) < 0.001) + The game rounds 9 / 1.25 = 7.2 after applying efficiency. + assert.are.equals(7, genericEfficiencyCost) -- Test multiple efficiency sources stacking additively build.configTab.input.customMods = "25% increased Cost Efficiency\n25% increased Mana Cost Efficiency" diff --git a/spec/System/TestSkills_spec.lua.rej b/spec/System/TestSkills_spec.lua.rej deleted file mode 100644 index 60ac3cf3f2..0000000000 --- a/spec/System/TestSkills_spec.lua.rej +++ /dev/null @@ -1,12 +0,0 @@ -diff a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua (rejected hunks) -@@ -331,8 +331,8 @@ describe("TestSkills", function() - runCallback("OnFrame") - - local genericEfficiencyCost = build.calcsTab.mainOutput.ManaCost -- -- Test actual behavior: 12/1.25 = 9.6 (not rounded) -- assert.True(math.abs(genericEfficiencyCost - 9.6) < 0.001) -+ -- The game rounds 12 / 1.25 = 9.6 after applying efficiency. -+ assert.are.equals(10, genericEfficiencyCost) - - -- Test multiple efficiency sources stacking additively - build.configTab.input.customMods = "25% increased Cost Efficiency\n25% increased Mana Cost Efficiency" From 3c79500d1ae798957edb5719dcf25d6308c669c1 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Sun, 30 Aug 2026 08:24:07 +1000 Subject: [PATCH 3/4] Comment --- spec/System/TestSkills_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua index 823347ea53..b74d4a89da 100644 --- a/spec/System/TestSkills_spec.lua +++ b/spec/System/TestSkills_spec.lua @@ -465,7 +465,7 @@ describe("TestSkills", function() runCallback("OnFrame") local genericEfficiencyCost = build.calcsTab.mainOutput.ManaCost - The game rounds 9 / 1.25 = 7.2 after applying efficiency. + -- The game rounds 9 / 1.25 = 7.2 after applying efficiency. assert.are.equals(7, genericEfficiencyCost) -- Test multiple efficiency sources stacking additively From 14aacff4251ee30ecc8fa24af7436c6182fb8d90 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Sun, 30 Aug 2026 08:29:27 +1000 Subject: [PATCH 4/4] Fix test --- spec/System/TestSkills_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua index b74d4a89da..66fe9623fd 100644 --- a/spec/System/TestSkills_spec.lua +++ b/spec/System/TestSkills_spec.lua @@ -487,7 +487,7 @@ describe("TestSkills", function() runCallback("OnFrame") local finalCost = build.calcsTab.mainOutput.ManaCost - assert.True(math.abs(finalCost - 8.67) < 0.1) -- floor(9 * 1.5) / 1.5 + assert.are.equals(9, finalCost) -- round(floor(9 * 1.5) / 1.5) end) it("Test socket group pasting with corruption levels and count", function()