From a7d0ae726e72d964de3e0f7fd235cfe8c35e02a4 Mon Sep 17 00:00:00 2001 From: Xevion Date: Wed, 11 Dec 2024 21:43:46 -0600 Subject: [PATCH] multiplier applicator logic --- data-final-fixes.lua | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/data-final-fixes.lua b/data-final-fixes.lua index dc09c73..6cbaebb 100644 --- a/data-final-fixes.lua +++ b/data-final-fixes.lua @@ -41,5 +41,34 @@ for name, technology in pairs(data.raw.technology) do log(name .. " : trigger=" .. technology.research_trigger.type) end + -- TODO: Reduce multiplier precision to 3 decimal places + + -- don't apply multiplier if it would do nothing + if (multiplier == 1) then + goto continue; + elseif (multiplier <= 0) then + log("Multiplier is less than 0, skipping " .. name .. " (" .. multiplier .. ")") + goto continue; + end + + -- Multiplier has been calculated, apply it + if (technology.unit.count_formula) then + -- formula-based + if (multiplier < 1) then + -- if multiplier is less than 100%, we need to ensure the result is at least 1 + -- MathExpression has a max() function for formulas + technology.unit.count_formula = 'max(1, ' .. technology.unit.count_formula .. ')*' .. multiplier + else + technology.unit.count_formula = '(' .. technology.unit.count_formula .. ')*' .. multiplier + end + else + -- simple count + if (multiplier < 1) then + technology.unit.count = math.max(math.ceil(technology.unit.count*multiplier), 1) + else + technology.unit.count = technology.unit.count*multiplier; + end + end + ::continue:: end \ No newline at end of file