local to_effect = function(effects) local result = {} for k, effect in pairs (effects) do local type = effect.type if type == "ammo-damage" then result[k] = function(force) force.set_ammo_damage_modifier(effect.ammo_category, force.get_ammo_damage_modifier(effect.ammo_category) + effect.modifier) end elseif type == "turret-attack" then result[k] = function(force) force.set_turret_attack_modifier(effect.turret_id, force.get_turret_attack_modifier(effect.turret_id) + effect.modifier) end elseif type == "gun-speed" then result[k] = function(force) force.set_gun_speed_modifier(effect.ammo_category, force.get_gun_speed_modifier(effect.ammo_category) + effect.modifier) end elseif type == "maximum-following-robots-count" then result[k] = function(force) force.maximum_following_robot_count = force.maximum_following_robot_count + effect.modifier end elseif type == "mining-drill-productivity-bonus" then result[k] = function(force) force.mining_drill_productivity_bonus = force.mining_drill_productivity_bonus + effect.modifier end else error(type.." - This type has no relevant upgrade effect") end end return result end local floor = math.floor local upgrades = {} upgrades.physical_projectile_damage = { modifier = "+10%", sprite = "technology/physical-projectile-damage-7", caption = {"technology-name.physical-projectile-damage"}, price = function(x) return floor((1 + x)) * 200 end, effect = to_effect( { { type = "ammo-damage", ammo_category = "bullet", modifier = 0.1 }, { type = "turret-attack", turret_id = "gun-turret", modifier = 0.1 }, { type = "ammo-damage", ammo_category = "shotgun-shell", modifier = 0.1 }, { type = "ammo-damage", ammo_category = "cannon-shell", modifier = 0.1 } }) } upgrades.weapon_shooting_speed = { modifier = "+10%", sprite = "technology/weapon-shooting-speed-4", caption = {"technology-name.weapon-shooting-speed"}, price = function(x) return floor((1 + x)) * 200 end, effect = to_effect( { { type = "gun-speed", ammo_category = "bullet", modifier = 0.1 }, { type = "gun-speed", ammo_category = "shotgun-shell", modifier = 0.1 }, { type = "gun-speed", ammo_category = "rocket", modifier = 0.1 } }) } upgrades.stronger_explosives = { modifier = "+25%", sprite = "technology/stronger-explosives-7", caption = {"technology-name.stronger-explosives"}, price = function(x) return floor((1 + x)) * 200 end, effect = to_effect( { { type = "ammo-damage", ammo_category = "rocket", modifier = 0.25 }, { type = "ammo-damage", ammo_category = "grenade", modifier = 0.25 }, { type = "ammo-damage", ammo_category = "landmine", modifier = 0.25 } }) } upgrades.refined_flammables = { modifier = "+10%", sprite = "technology/refined-flammables-3", caption = {"technology-name.refined-flammables"}, price = function(x) return floor((1 + x)) * 500 end, effect = to_effect( { { type = "ammo-damage", ammo_category = "flamethrower", modifier = 0.1 }, { type = "turret-attack", turret_id = "flamethrower-turret", modifier = 0.1 } }) } upgrades.energy_weapons_damage = { modifier = "+20%", sprite = "technology/laser-weapons-damage-4", caption = {"technology-name.laser-weapons-damage"}, price = function(x) return floor((1 + x)) * 200 end, effect = to_effect( { { type = "ammo-damage", ammo_category = "laser", modifier = 0.2 } }) } upgrades.laser_turret_shooting_speed = { modifier = "+10%", sprite = "technology/laser-shooting-speed-6", caption = {"technology-name.laser-shooting-speed"}, price = function(x) return floor((1 + x)) * 200 end, effect = to_effect( { { type = "gun-speed", ammo_category = "laser", modifier = 0.1 } }) } upgrades.mining_productivity = { modifier = "+10%", sprite = "technology/mining-productivity-1", caption = {"technology-name.mining-productivity"}, price = function(x) return floor((1 + x)) * 500 end, effect = to_effect( { { type = "mining-drill-productivity-bonus", modifier = 0.1 } }) } upgrades.following_robot_count = { modifier = "+5", sprite = "technology/follower-robot-count-1", caption = {"technology-name.follower-robot-count"}, price = function(x) return floor((1 + x)) * 100 end, effect = to_effect( { { type = "maximum-following-robots-count", modifier = 5 } }) } return upgrades