1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-08 00:39:30 +02:00
ComfyFactorio/functions/unearthing_biters.lua
2019-08-20 22:33:47 +02:00

82 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_entity({
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 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