1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-06 00:23:49 +02:00
ComfyFactorio/maps/pitch_black/difficulty.lua
2021-03-24 20:14:55 +01:00

100 lines
2.5 KiB
Lua

local Public = {}
local score_values = {
['small-spitter'] = 1,
['small-biter'] = 1,
['medium-spitter'] = 3,
['medium-biter'] = 3,
['big-spitter'] = 5,
['big-biter'] = 5,
['behemoth-spitter'] = 10,
['behemoth-biter'] = 10,
['small-worm-turret'] = 4,
['medium-worm-turret'] = 6,
['big-worm-turret'] = 8,
['behemoth-worm-turret'] = 10,
['biter-spawner'] = 16,
['spitter-spawner'] = 16
}
function Public.set_daytime_difficulty(surface)
local daytime = surface.daytime
if daytime < 0.30 then
surface.peaceful_mode = true
else
surface.peaceful_mode = false
end
end
function Public.set_biter_difficulty()
local daytime = global.daytime
local daytime_extra_life_modifier = (-0.30 + daytime) * 2
if daytime_extra_life_modifier < 0 then
daytime_extra_life_modifier = 0
end
local extra_lifes = global.map_score * 0.0001 * daytime + daytime_extra_life_modifier
global.biter_reanimator.forces[2] = extra_lifes
end
function Public.add_score(entity)
local value = score_values[entity.name]
if not value then
return
end
global.map_score = global.map_score + value
end
function Public.fleeing_biteys(entity, cause)
local surface = entity.surface
if not surface.peaceful_mode then
return
end
if not cause then
return
end
if not cause.valid then
return
end
if entity.type ~= 'unit' then
return
end
local unit_groups = {}
local position = entity.position
local units = surface.find_entities_filtered({type = 'unit', force = 'enemy', area = {{position.x - 16, position.y - 16}, {position.x + 16, position.y + 16}}})
for _, unit in pairs(units) do
local unit_group = unit.unit_group
if unit_group then
if unit_group.valid then
if not unit_groups[unit_group.group_number] then
unit_groups[unit_group.group_number] = unit_group
end
end
else
unit.set_command(
{
type = defines.command.flee,
from = cause,
distraction = defines.distraction.none
}
)
end
end
for _, group in pairs(unit_groups) do
group.set_command(
{
type = defines.command.flee,
from = cause,
distraction = defines.distraction.none
}
)
end
end
return Public