|
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)) * 250 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)) * 250 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)) * 250 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/energy-weapons-damage-4", |
|
caption = {"technology-name.energy-weapons-damage"}, |
|
price = function(x) return floor((1 + x)) * 250 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)) * 250 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 |