science-extra-trigger-techs/data-updates.lua

Wed, 27 Aug 2025 10:26:12 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Wed, 27 Aug 2025 10:26:12 +0300
changeset 19
adbc5c74f279
permissions
-rw-r--r--

Lots of stuff

19
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
1 ---@type table<string, int>
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
2 local min_science_requirements = {}
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
3
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
4 -- Extract tech tier from the name
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
5 -- e.g. "military-3" => 3
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
6 ---@param name string
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
7 local function tech_level(name)
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
8 local a, b = string.find(name, "-%d+$")
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
9 if a == nil
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
10 then
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
11 return nil
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
12 else
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
13 return tonumber(string.sub(name, a+1, b))
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
14 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
15 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
16
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
17 for _, technology in pairs(data.raw["technology"])
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
18 do
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
19 if technology.unit
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
20 then
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
21 local prerequisites = {}
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
22 for _, prereq in pairs(technology.prerequisites or {})
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
23 do
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
24 prerequisites[prereq] = 1
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
25 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
26 local unit_count = 50
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
27 if technology.unit.count
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
28 then
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
29 unit_count = technology.unit.count
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
30 elseif technology.unit.count_formula
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
31 then
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
32 local level = tech_level(technology.name) or 1
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
33 unit_count = math.max(1, helpers.evaluate_expression(technology.unit.count_formula, {l = level, L = level}))
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
34 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
35 for _, ing in pairs(technology.unit.ingredients or {})
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
36 do
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
37 if prerequisites[ing[1]]
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
38 then
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
39 local count = math.min(500, ing[2] * unit_count / 5)
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
40 if not min_science_requirements[ing[1]]
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
41 then
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
42 min_science_requirements[ing[1]] = count
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
43 else
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
44 min_science_requirements[ing[1]] = math.min(min_science_requirements[ing[1]], count)
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
45 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
46 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
47 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
48 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
49 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
50
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
51 for _, technology in pairs(data.raw["technology"])
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
52 do
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
53 local science_pack = nil
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
54 for _, effect in pairs(technology.effects or {})
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
55 do
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
56 if effect.type == "unlock-recipe" and min_science_requirements[effect.recipe]
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
57 then
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
58 science_pack = effect.recipe
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
59 break
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
60 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
61 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
62 if science_pack ~= nil
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
63 then
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
64 ---@type data.TechnologyPrototype
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
65 local trigger_tech = {
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
66 type = "technology",
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
67 name = technology.name.."-2",
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
68 research_trigger = {
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
69 type = "craft-item",
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
70 item = science_pack,
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
71 count = math.min(500, min_science_requirements[science_pack]),
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
72 },
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
73 icon = technology.icon,
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
74 icons = technology.icons,
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
75 icon_size = technology.icon_size,
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
76 prerequisites = {technology.name},
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
77 upgrade = true,
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
78 }
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
79 technology["_science_extra_trigger_technology"] = technology.name.."-2"
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
80 data:extend{trigger_tech}
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
81 end
adbc5c74f279 Lots of stuff
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
82 end

mercurial