1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-08 00:39:30 +02:00
ComfyFactorio/functions/unearthing_biters.lua
2020-02-14 21:10:32 +01:00

84 lines
2.6 KiB
Lua

local function create_particles(surface, position, amount)
if not surface.valid then return end
local math_random = math.random
for i = 1, amount, 1 do
local m = math_random(6, 12)
local m2 = m * 0.005
surface.create_particle({
name = "stone-particle",
position = position,
frame_speed = 0.1,
vertical_speed = 0.1,
height = 0.1,
movement = {m2 - (math_random(0, m) * 0.01), m2 - (math_random(0, m) * 0.01)}
})
end
end
local function spawn_biter(surface, position, evolution)
if not surface.valid then return end
local evo = math.floor(evolution * 1000)
local biter_chances = {
{name = "small-biter", chance = math.floor(1000 - (evo * 1.6))},
{name = "small-spitter", chance = math.floor(500 - evo * 0.8)},
{name = "medium-biter", chance = -150 + evo},
{name = "medium-spitter", chance = -75 + math.floor(evo * 0.5)},
{name = "big-biter", chance = math.floor((evo - 500) * 3)},
{name = "big-spitter", chance = math.floor((evo - 500) * 2)},
{name = "behemoth-biter", chance = math.floor((evo - 800) * 6)},
{name = "behemoth-spitter", chance = math.floor((evo - 800) * 4)}
}
local max_chance = 0
for i = 1, 8, 1 do
if biter_chances[i].chance < 0 then biter_chances[i].chance = 0 end
max_chance = max_chance + biter_chances[i].chance
end
local r = math.random(1, max_chance)
local current_chance = 0
for i = 1, 8, 1 do
current_chance = current_chance + biter_chances[i].chance
if r <= current_chance then
local biter_name = biter_chances[i].name
local p = surface.find_non_colliding_position(biter_name, position, 10, 1)
if not p then return end
surface.create_entity({name = biter_name, position = p, force = "enemy"})
return
end
end
end
local function unearthing_biters(surface, position, amount)
if not surface then return end
if not surface.valid then return end
if not position then return end
if not position.x then return end
if not position.y then return end
local evolution = game.forces.enemy.evolution_factor
local ticks = amount * 30
ticks = ticks + 90
for t = 1, ticks, 1 do
if not global.on_tick_schedule[game.tick + t] then global.on_tick_schedule[game.tick + t] = {} end
global.on_tick_schedule[game.tick + t][#global.on_tick_schedule[game.tick + t] + 1] = {
func = create_particles,
args = {surface, {x = position.x, y = position.y}, 4}
}
if t > 90 then
if t % 30 == 29 then
global.on_tick_schedule[game.tick + t][#global.on_tick_schedule[game.tick + t] + 1] = {
func = spawn_biter,
args = {surface, {x = position.x, y = position.y}, evolution}
}
end
end
end
end
return unearthing_biters