--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/science-extra-trigger-techs/data-updates.lua Wed Aug 27 10:26:12 2025 +0300 @@ -0,0 +1,82 @@ +---@type table<string, int> +local min_science_requirements = {} + +-- Extract tech tier from the name +-- e.g. "military-3" => 3 +---@param name string +local function tech_level(name) + local a, b = string.find(name, "-%d+$") + if a == nil + then + return nil + else + return tonumber(string.sub(name, a+1, b)) + end +end + +for _, technology in pairs(data.raw["technology"]) +do + if technology.unit + then + local prerequisites = {} + for _, prereq in pairs(technology.prerequisites or {}) + do + prerequisites[prereq] = 1 + end + local unit_count = 50 + if technology.unit.count + then + unit_count = technology.unit.count + elseif technology.unit.count_formula + then + local level = tech_level(technology.name) or 1 + unit_count = math.max(1, helpers.evaluate_expression(technology.unit.count_formula, {l = level, L = level})) + end + for _, ing in pairs(technology.unit.ingredients or {}) + do + if prerequisites[ing[1]] + then + local count = math.min(500, ing[2] * unit_count / 5) + if not min_science_requirements[ing[1]] + then + min_science_requirements[ing[1]] = count + else + min_science_requirements[ing[1]] = math.min(min_science_requirements[ing[1]], count) + end + end + end + end +end + +for _, technology in pairs(data.raw["technology"]) +do + local science_pack = nil + for _, effect in pairs(technology.effects or {}) + do + if effect.type == "unlock-recipe" and min_science_requirements[effect.recipe] + then + science_pack = effect.recipe + break + end + end + if science_pack ~= nil + then + ---@type data.TechnologyPrototype + local trigger_tech = { + type = "technology", + name = technology.name.."-2", + research_trigger = { + type = "craft-item", + item = science_pack, + count = math.min(500, min_science_requirements[science_pack]), + }, + icon = technology.icon, + icons = technology.icons, + icon_size = technology.icon_size, + prerequisites = {technology.name}, + upgrade = true, + } + technology["_science_extra_trigger_technology"] = technology.name.."-2" + data:extend{trigger_tech} + end +end