cs / factorio /data /base /scenarios /wave-defense /wave_defense_upgrades.lua
enemy7's picture
Upload 1553 files
898c672
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