mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-10 00:43:27 +02:00
667 lines
27 KiB
Lua
667 lines
27 KiB
Lua
local math_abs = math.abs
|
|
local math_random = math.random
|
|
local Map_functions = require "tools.map_functions"
|
|
local simplex_noise = require 'utils.simplex_noise'.d2
|
|
local Public = {}
|
|
|
|
local hatchery_position = {x = 200, y = 0}
|
|
local table_tiles = {
|
|
[1] = "concrete",
|
|
[2] = "refined-concrete",
|
|
[3] = "stone-path",
|
|
}
|
|
local function get_replacement_tile(surface, position)
|
|
for i = 1, 128, 1 do
|
|
local vectors = {{0, i}, {0, i * -1}, {i, 0}, {i * -1, 0}}
|
|
table.shuffle_table(vectors)
|
|
for k, v in pairs(vectors) do
|
|
local tile = surface.get_tile(position.x + v[1], position.y + v[2])
|
|
if not tile.collides_with("resource-layer") then return tile.name end
|
|
end
|
|
end
|
|
return "grass-1"
|
|
end
|
|
|
|
local function place_market(surface, position, team_force)
|
|
local market = surface.create_entity({name = "market", position = position, force = team_force})
|
|
market.minable = false
|
|
return market
|
|
end
|
|
|
|
local function kill_entities_combat_zone(surface, table_area)
|
|
for _, ent in pairs(surface.find_entities_filtered{area = table_area, type = "resource"}) do ent.destroy() end
|
|
for _, entity in ipairs(surface.find_entities_filtered{ area= table_area, type="tree"}) do entity.destroy() end
|
|
end
|
|
|
|
local function create_markets(surface)
|
|
local wall = surface.create_entity({name = "stone-wall", position = {-15, -174}, force = "spectator"})
|
|
wall.destructible=false
|
|
wall.minable=false
|
|
local wall = surface.create_entity({name = "stone-wall", position = {15, -174}, force = "spectator"})
|
|
wall.destructible=false
|
|
wall.minable=false
|
|
local wall = surface.create_entity({name = "stone-wall", position = {-15, 174}, force = "spectator"})
|
|
wall.destructible=false
|
|
wall.minable=false
|
|
local wall = surface.create_entity({name = "stone-wall", position = {15, 174}, force = "spectator"})
|
|
wall.destructible=false
|
|
wall.minable=false
|
|
surface.create_entity({name = "electric-beam", position = {-15, -174}, source = {-15, -174}, target = {15,-174}})
|
|
surface.create_entity({name = "electric-beam", position = {-15, 174}, source = {-15, 174}, target = {15,174}})
|
|
local x = hatchery_position.x
|
|
local y = hatchery_position.y
|
|
for i=169, 200, 1 do
|
|
for j=1, 100, 1 do
|
|
if math.sqrt((i*-1+160)*(i*-1+160)+(j-50)*(j-50))>=38 and math.sqrt((i*-1+160)*(i*-1+160)+(j-50)*(j-50))<=40 then
|
|
if j== 50 or j== 49 or j==51 then else
|
|
local wall = surface.create_entity({name = "stone-wall", position = {i*-1, j-50}, force = "west"})
|
|
wall.destructible=false
|
|
wall.minable=false
|
|
end
|
|
end
|
|
end
|
|
end
|
|
for i=169, 200, 1 do
|
|
for j=1, 100, 1 do
|
|
if math.sqrt((i-160)*(i-160)+(j-50)*(j-50))>=38 and math.sqrt((i-160)*(i-160)+(j-50)*(j-50))<=40 then
|
|
if j== 50 or j== 49 or j==51 then else
|
|
local wall = surface.create_entity({name = "stone-wall", position = {i, j-50}, force = "east"})
|
|
wall.destructible=false
|
|
wall.minable=false
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local position = {(x * -1)+2, 0}
|
|
local e = place_market(surface, position, "west")
|
|
global.market1=e
|
|
|
|
local energy_source = {type = "electric", buffer_capacity = "10GJ", usage_priority = "tertiary", input_flow_limit = "1GW", output_flow_limit = "0W", drain="0W"}
|
|
local eei = surface.create_entity({type = "electric-energy-interface", name = "electric-energy-interface", energy_source = energy_source, position = {-200,-2}, force = "west"})
|
|
local ep = surface.create_entity({name = "small-electric-pole", position = {-200,-5}, force = "west"})
|
|
|
|
ep.destructible=false
|
|
ep.minable=false
|
|
eei.operable = false
|
|
eei.destructible=false
|
|
eei.minable=false
|
|
eei.electric_buffer_size = 100000000
|
|
eei.power_usage = 48000000
|
|
eei.power_production = 1
|
|
|
|
--surface.create_entity({name = "small-worm-turret", position = {x * -1 + 6, 0}, force = "west"})
|
|
|
|
global.map_forces.west.hatchery = e
|
|
global.map_forces.east.target = e
|
|
|
|
local position = {x-2, 0}
|
|
local f = place_market(surface, position, "east")
|
|
global.market=f
|
|
|
|
local energy_source = {type = "electric", buffer_capacity = "10GJ", usage_priority = "tertiary", input_flow_limit = "1GW", output_flow_limit = "0W", drain="0W"}
|
|
local eei2 = surface.create_entity({type = "electric-energy-interface", name = "electric-energy-interface", energy_source = energy_source, position = {201,-2}, force = "east"})
|
|
local ep2 = surface.create_entity({name = "small-electric-pole", position = {200,-5}, force = "east"})
|
|
|
|
ep2.destructible=false
|
|
ep2.minable=false
|
|
eei2.operable = false
|
|
eei2.destructible=false
|
|
eei2.minable=false
|
|
eei2.electric_buffer_size = 100000000
|
|
eei2.power_usage = 48000000
|
|
eei2.power_production = 1
|
|
--surface.create_entity({name = "small-worm-turret", position = {x - 6, 0}, force = "east"})
|
|
global.map_forces.east.hatchery = f
|
|
global.map_forces.west.target = f
|
|
|
|
--global.map_forces.east.spawn = {x=137,y=0}
|
|
--global.map_forces.west.spawn = {x=-137,y=0}
|
|
|
|
local area ={{-174,-150},{174,150}}
|
|
kill_entities_combat_zone(surface, area)
|
|
|
|
local te = surface.create_entity({name = "tree-09-red", position = {137,0}, force = "neutral"})
|
|
local tw = surface.create_entity({name = "tree-04", position = {-137,0}, force = "neutral"})
|
|
te.minable =false
|
|
tw.minable = false
|
|
te.destructible = false
|
|
tw.destructible = false
|
|
end
|
|
|
|
local function draw_noise_ore_patch(position, name, surface, radius, richness)
|
|
if not position then return end
|
|
if not name then return end
|
|
if not surface then return end
|
|
if not radius then return end
|
|
if not richness then return end
|
|
local seed = game.surfaces[1].map_gen_settings.seed
|
|
local noise_seed_add = 25000
|
|
local richness_part = richness / radius
|
|
for y = radius * -3, radius * 3, 1 do
|
|
for x = radius * -3, radius * 3, 1 do
|
|
local pos = {x = x + position.x + 0.5, y = y + position.y + 0.5}
|
|
local noise_1 = simplex_noise(pos.x * 0.0125, pos.y * 0.0125, seed)
|
|
local noise_2 = simplex_noise(pos.x * 0.1, pos.y * 0.1, seed + 25000)
|
|
local noise = noise_1 + noise_2 * 0.12
|
|
local distance_to_center = math.sqrt(x^2 + y^2)
|
|
local a = richness - richness_part * distance_to_center
|
|
if distance_to_center < radius - math.abs(noise * radius * 0.85) and a > 1 then
|
|
if surface.can_place_entity({name = name, position = pos, amount = a}) then
|
|
|
|
surface.create_entity{name = name, position = pos, amount = a}
|
|
|
|
local mirror_pos = {x = pos.x * -1, y = pos.y }
|
|
surface.create_entity{name = name, position = mirror_pos, amount = a}
|
|
|
|
for _, e in pairs(surface.find_entities_filtered({position = pos, name = {"wooden-chest", "gun-turret"}})) do
|
|
e.destroy()
|
|
end
|
|
for _, e in pairs(surface.find_entities_filtered({position = mirror_pos, name = {"wooden-chest", "gun-turret"}})) do
|
|
e.destroy()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function first_ore_generate(surface)
|
|
local area = {{250, -50}, {300, 50}}
|
|
local ores = {}
|
|
ores["iron-ore"] = surface.count_entities_filtered({name = "iron-ore", area = area})
|
|
ores["copper-ore"] = surface.count_entities_filtered({name = "copper-ore", area = area})
|
|
ores["coal"] = surface.count_entities_filtered({name = "coal", area = area})
|
|
ores["stone"] = surface.count_entities_filtered({name = "stone", area = area})
|
|
for ore, ore_count in pairs(ores) do
|
|
if ore_count < 1000 or ore_count == nil then
|
|
local pos = {}
|
|
for a = 1, 32, 1 do
|
|
pos = {x = math_random(250, 300), y = math_random(-50, 50)}
|
|
if surface.can_place_entity({name = "coal", position = pos, amount = 1}) then
|
|
break
|
|
end
|
|
end
|
|
draw_noise_ore_patch(pos, ore, surface, math_random(18, 24), math_random(1500, 2000))
|
|
end
|
|
end
|
|
end
|
|
|
|
local function mirror_chunk(event, source_surface, x_modifier)
|
|
local surface = event.surface
|
|
local left_top = event.area.left_top
|
|
local offset = 0
|
|
if x_modifier == -1 then offset = 32 end
|
|
local mirror_left_top = {x = left_top.x * x_modifier - offset, y = left_top.y}
|
|
|
|
source_surface.request_to_generate_chunks(mirror_left_top, 1)
|
|
source_surface.force_generate_chunk_requests()
|
|
|
|
local mirror_area = {{mirror_left_top.x , mirror_left_top.y}, {mirror_left_top.x + 32, mirror_left_top.y + 32}}
|
|
|
|
for _, tile in pairs(source_surface.find_tiles_filtered({area = mirror_area})) do
|
|
surface.set_tiles({{name = tile.name, position = {x = tile.position.x * x_modifier, y = tile.position.y}}}, true)
|
|
end
|
|
for _, entity in pairs(source_surface.find_entities_filtered({area = mirror_area})) do
|
|
if surface.can_place_entity({name = entity.name, position = {x = entity.position.x * x_modifier, y = entity.position.y}}) then
|
|
entity.clone({position = {x = entity.position.x * x_modifier, y = entity.position.y}, surface = surface, force = "neutral"})
|
|
end
|
|
end
|
|
for _, decorative in pairs(source_surface.find_decoratives_filtered{area = mirror_area}) do
|
|
surface.create_decoratives{
|
|
check_collision=false,
|
|
decoratives={{name = decorative.decorative.name, position = {x = decorative.position.x * x_modifier, y = decorative.position.y}, amount = decorative.amount}}
|
|
}
|
|
end
|
|
end
|
|
|
|
local function combat_area(event)
|
|
local surface = event.surface
|
|
local left_top = event.area.left_top
|
|
|
|
if left_top.y >= 15 then return end
|
|
if left_top.y < -15 then return end
|
|
|
|
local replacement_tile = "landfill"
|
|
local tile = surface.get_tile({8,0})
|
|
if tile then replacement_tile = tile.name end
|
|
|
|
for _, tile in pairs(surface.find_tiles_filtered({area = event.area})) do
|
|
-- if tile.name == "water" or tile.name == "deepwater" then
|
|
-- surface.set_tiles({{name = replacement_tile, position = tile.position}}, true)
|
|
-- end
|
|
-- if tile.position.x >= -4 and tile.position.x < 4 then
|
|
-- surface.set_tiles({{name = "water-shallow", position = tile.position}}, true)
|
|
-- end
|
|
end
|
|
--[[
|
|
for _, entity in pairs(surface.find_entities_filtered({type = {"resource", "cliff"}, area = event.area})) do
|
|
entity.destroy()
|
|
end
|
|
]]
|
|
end
|
|
|
|
local function is_out_of_map(p)
|
|
--if math.sqrt((p.x*p.x)+(p.y*p.y))<30 then return end
|
|
--if math.sqrt((p.x*p.x)+(p.y*p.y))<30 then return end
|
|
if math.sqrt((p.x+90)*(p.x+90)+(p.y+100)*(p.y+100))<15 then return true end
|
|
if math.sqrt((p.x+90)*(p.x+90)+(p.y+100)*(p.y+100))<45 and p.y <=-100 then return end
|
|
if math.sqrt((p.x-30)*(p.x-30)+(p.y+100)*(p.y+100))<15 then return true end
|
|
if math.sqrt((p.x-30)*(p.x-30)+(p.y+100)*(p.y+100))<45 and p.y <=-100 then return end
|
|
if math.sqrt((p.x-90)*(p.x-90)+(p.y-100)*(p.y-100))<15 then return true end
|
|
if math.sqrt((p.x-90)*(p.x-90)+(p.y-100)*(p.y-100))<45 and p.y >=100 then return end
|
|
if math.sqrt((p.x+30)*(p.x+30)+(p.y-100)*(p.y-100))<15 then return true end
|
|
if math.sqrt((p.x+30)*(p.x+30)+(p.y-100)*(p.y-100))<45 and p.y >=100 then return end
|
|
if math.sqrt((p.x+135)*(p.x+135)+(p.y)*(p.y))<30 and p.y >=0 and p.x >= -135 then return end
|
|
if math.sqrt((p.x-135)*(p.x-135)+(p.y)*(p.y))<30 and p.y <=0 and p.x <= 135 then return end
|
|
if p.x >= -15 and p.x <= 15 and ( p.y<=100 and p.y >= -100) then return end
|
|
if p.x >= -75 and p.x <= -45 and ( p.y<=100 and p.y >= -100) then return end
|
|
if p.x >= 45 and p.x <= 75 and ( p.y<=100 and p.y >= -100) then return end
|
|
if p.x >= -135 and p.x <= -105 and ( p.y<=0 and p.y >= -100) then return end
|
|
if p.x >= 105 and p.x <= 135 and ( p.y<=100 and p.y >= 0) then return end
|
|
if p.x > -105 and p.x <= -75 and ( p.y>=-15 and p.y <= 15) then return true end
|
|
if p.x >= 75 and p.x < 105 and ( p.y>=-15 and p.y <= 15) then return true end
|
|
if p.y < 30 and p.y >= -30 and p.x >= 135 then return end
|
|
if p.y < 30 and p.y >= -30 and p.x <= -135 then return end
|
|
if p.x * 0.5 >= math_abs(p.y)+50 then return end
|
|
if p.x * -0.5 > math_abs(p.y)+50 then return end
|
|
return true
|
|
end
|
|
|
|
local function out_of_map_area(event)
|
|
local surface = event.surface
|
|
local left_top = event.area.left_top
|
|
|
|
for x = -1, 32, 1 do
|
|
for y = -1, 32, 1 do
|
|
local p = {x = left_top.x + x, y = left_top.y + y}
|
|
if is_out_of_map(p) then
|
|
if (p.x == -137 or p.x == -138 or p.x == -102 or p.x == -103 or p.x == -78 or p.x == -77 or p.x == -42 or p.x == -43 or p.x == -17 or p.x == -18 or p.x == 17 or p.x == 18 or p.x == 42 or p.x == 43 or p.x == 77 or p.x == 78) and (p.y == -32 or p.y == -33 or p.y == -95 or p.y == -96) then
|
|
surface.set_tiles({{name = "hazard-concrete-right", position = p}}, true)
|
|
if (p.x == -137 and p.y == -32) and surface.can_place_entity({name="substation", position = {p.x,p.y}, force = 'neutral'}) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -137 and p.y == -95) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -102 and p.y == -32) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -102 and p.y == -95) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -77 and p.y == -32) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -77 and p.y == -95) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -42 and p.y == -32) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -42 and p.y == -95) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -17 and p.y == -32) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -17 and p.y == -95) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 18 and p.y == -32) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 18 and p.y == -95) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 43 and p.y == -32) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 43 and p.y == -95) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 78 and p.y == -32) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 78 and p.y == -95) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
elseif (p.x == 137 or p.x == 138 or p.x == 102 or p.x == 103 or p.x == 78 or p.x == 77 or p.x == 42 or p.x == 43 or p.x == 17 or p.x == 18 or p.x == -17 or p.x == -18 or p.x == -42 or p.x == -43 or p.x == -77 or p.x == -78) and (p.y == 32 or p.y == 33 or p.y == 95 or p.y == 96) then
|
|
surface.set_tiles({{name = "hazard-concrete-right", position = p}}, true)
|
|
if (p.x == 138 and p.y == 33) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 138 and p.y == 96) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 103 and p.y == 33) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 103 and p.y == 96) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 78 and p.y == 33) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 78 and p.y == 96) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 43 and p.y == 33) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 43 and p.y == 96) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 18 and p.y == 33) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == 18 and p.y == 96) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -17 and p.y == 33) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -17 and p.y == 96) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -42 and p.y == 33) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -42 and p.y == 96) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -77 and p.y == 33) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
if (p.x == -77 and p.y == 96) then
|
|
local e = surface.create_entity({name="substation", position = {p.x,p.y}, force = 'neutral'})
|
|
e.destructible=false
|
|
e.minable=false
|
|
end
|
|
else
|
|
surface.set_tiles({{name = "out-of-map", position = p}}, true)
|
|
end
|
|
else
|
|
if p.x >=-210 and p.x <=210 then
|
|
local this_tile = surface.get_tile(p)
|
|
local replacement_tile = "landfill"
|
|
if this_tile.name == "water" or this_tile.name == "deepwater" then
|
|
surface.set_tiles({{name = replacement_tile, position = this_tile.position}}, true)
|
|
end
|
|
end
|
|
end
|
|
|
|
if( p.x ==-135 or p.x == 75 ) and (p.y >= -200 and p.y <= -175 ) then
|
|
local this_tile = surface.get_tile(p)
|
|
local replacement_tile = "hazard-concrete-right"
|
|
surface.set_tiles({{name = replacement_tile, position = this_tile.position}}, true)
|
|
end
|
|
if( p.x >=-135 and p.x <= 75 ) and (p.y == -200 or p.y == -175 ) then
|
|
local this_tile = surface.get_tile(p)
|
|
local replacement_tile = "hazard-concrete-right"
|
|
surface.set_tiles({{name = replacement_tile, position = this_tile.position}}, true)
|
|
end
|
|
if( p.x >=-15 and p.x <= 15 ) and p.y == -174 then
|
|
local this_tile = surface.get_tile(p)
|
|
local replacement_tile = "hazard-concrete-right"
|
|
surface.set_tiles({{name = replacement_tile, position = this_tile.position}}, true)
|
|
end
|
|
if p.x >-135 and p.x < 75 and p.y>-200 and p.y<-175 then
|
|
local this_tile = surface.get_tile(p)
|
|
local nb_rand=math.random(3)
|
|
local replacement_tile = table_tiles[nb_rand]
|
|
surface.set_tiles({{name = replacement_tile, position = this_tile.position}}, true)
|
|
end
|
|
|
|
|
|
if( p.x == -75 or p.x == 135 ) and (p.y <= 200 and p.y >= 175 ) then
|
|
local this_tile = surface.get_tile(p)
|
|
local replacement_tile = "hazard-concrete-left"
|
|
surface.set_tiles({{name = replacement_tile, position = this_tile.position}}, true)
|
|
end
|
|
if( p.x >=-75 and p.x <= 135 ) and (p.y == 200 or p.y == 175 ) then
|
|
local this_tile = surface.get_tile(p)
|
|
local replacement_tile = "hazard-concrete-left"
|
|
surface.set_tiles({{name = replacement_tile, position = this_tile.position}}, true)
|
|
end
|
|
if( p.x >=-15 and p.x <= 15 ) and p.y == 174 then
|
|
local this_tile = surface.get_tile(p)
|
|
local replacement_tile = "hazard-concrete-left"
|
|
surface.set_tiles({{name = replacement_tile, position = this_tile.position}}, true)
|
|
end
|
|
if p.x >-75 and p.x < 135 and p.y<200 and p.y>175 then
|
|
local this_tile = surface.get_tile(p)
|
|
local nb_rand=math.random(3)
|
|
local replacement_tile = table_tiles[nb_rand]
|
|
surface.set_tiles({{name = replacement_tile, position = this_tile.position}}, true)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local scrap_vectors = {}
|
|
for x = -5, 5, 1 do
|
|
for y = -5, 5, 1 do
|
|
if math.sqrt(x^2 + y^2) <= 5 then
|
|
scrap_vectors[#scrap_vectors + 1] = {x, y}
|
|
end
|
|
end
|
|
end
|
|
|
|
local function generate_scrap(event)
|
|
local distance_to_center = math.sqrt(event.area.left_top.x ^ 2 + event.area.left_top.y ^ 2)
|
|
|
|
local worms = event.surface.find_entities_filtered({area = event.area, type = "turret"})
|
|
if #worms == 0 then return end
|
|
|
|
for _, e in pairs(worms) do
|
|
if math_random(1,2) == 1 then
|
|
for c = 1, math_random(2,12), 1 do
|
|
local vector = scrap_vectors[math_random(1, #scrap_vectors)]
|
|
local position = {e.position.x + vector[1], e.position.y + vector[2]}
|
|
if e.surface.can_place_entity({name = "mineable-wreckage", position = position, force = "neutral"}) then
|
|
e.surface.create_entity({name = "mineable-wreckage", position = position, force = "neutral"})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
local function on_chunk_generated(event)
|
|
local source_surface = game.surfaces["mirror_terrain"]
|
|
if not source_surface then return end
|
|
if not source_surface.valid then return end
|
|
if event.surface.index == source_surface.index then return end
|
|
local left_top = event.area.left_top
|
|
if left_top.x >= 0 then
|
|
mirror_chunk(event, source_surface, 1)
|
|
else
|
|
mirror_chunk(event, source_surface, -1)
|
|
end
|
|
|
|
out_of_map_area(event)
|
|
|
|
if left_top.x >= -150 and left_top.x < 150 then combat_area(event) end
|
|
if left_top.x == 256 and left_top.y == 256 then
|
|
create_markets(event.surface)
|
|
first_ore_generate(event.surface)
|
|
end
|
|
if left_top.x <= -500 and left_top.x >= -1500 then
|
|
local density = -0.003 * left_top.x -0.5
|
|
local floor_density = math.floor(density)
|
|
for i = 0, floor_density, 1 do
|
|
if math.random(100)<=10 then
|
|
local rand_x = math.random(33)-1
|
|
local rand_y = math.random(33)-1
|
|
local pos = {x =left_top.x + rand_x, y = left_top.y + rand_y}
|
|
--local position = envent.surface.find_non_colliding_position("big-worm-turret", pos, 8, 1)
|
|
if pos.x * -0.5 > math_abs(pos.y)+50 and event.surface.can_place_entity({name = "small-worm-turret", position = pos, force = "east"}) then
|
|
event.surface.create_entity({name = "small-worm-turret", position = pos, force = "east"})
|
|
generate_scrap(event)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if left_top.x <= -1500 and left_top.x >= -2500 then
|
|
local density = -0.003 * left_top.x -2.5
|
|
local floor_density = math.floor(density)
|
|
for i = 0, floor_density, 1 do
|
|
if math.random(100)<=10 then
|
|
local rand_x = math.random(33)-1
|
|
local rand_y = math.random(33)-1
|
|
local pos = {x =left_top.x + rand_x, y = left_top.y + rand_y}
|
|
--local position = envent.surface.find_non_colliding_position("big-worm-turret", pos, 8, 1)
|
|
if pos.x * -0.5 > math_abs(pos.y)+50 and event.surface.can_place_entity({name = "medium-worm-turret", position = pos, force = "east"}) then
|
|
event.surface.create_entity({name = "medium-worm-turret", position = pos, force = "east"})
|
|
generate_scrap(event)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if left_top.x <= -2500 then
|
|
local density = -0.003 * left_top.x -5.5
|
|
local floor_density = math.floor(density)
|
|
if floor_density > 4 then floor_density = 4 end
|
|
for i = 0, floor_density, 1 do
|
|
if math.random(100)<=10 then
|
|
local rand_x = math.random(33)-1
|
|
local rand_y = math.random(33)-1
|
|
local pos = {x =left_top.x + rand_x, y = left_top.y + rand_y}
|
|
--local position = envent.surface.find_non_colliding_position("big-worm-turret", pos, 8, 1)
|
|
if pos.x * -0.5 > math_abs(pos.y)+50 and event.surface.can_place_entity({name = "big-worm-turret", position = pos, force = "east"}) then
|
|
event.surface.create_entity({name = "big-worm-turret", position = pos, force = "east"})
|
|
generate_scrap(event)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if left_top.x >= 500 and left_top.x <= 1500 then
|
|
local density = 0.003 * left_top.x -0.5
|
|
local floor_density = math.floor(density)
|
|
for i = 0, floor_density, 1 do
|
|
if math.random(100)<=10 then
|
|
local rand_x = math.random(33)-1
|
|
local rand_y = math.random(33)-1
|
|
local pos = {x =left_top.x + rand_x, y = left_top.y + rand_y}
|
|
--local position = envent.surface.find_non_colliding_position("big-worm-turret", pos, 8, 1)
|
|
if pos.x * 0.5 > math_abs(pos.y)+50 and event.surface.can_place_entity({name = "small-worm-turret", position = pos, force = "west"}) then
|
|
event.surface.create_entity({name = "small-worm-turret", position = pos, force = "west"})
|
|
generate_scrap(event)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if left_top.x >= 1500 and left_top.x <= 2500 then
|
|
local density = 0.003 * left_top.x -2.5
|
|
local floor_density = math.floor(density)
|
|
for i = 0, floor_density, 1 do
|
|
if math.random(100)<=10 then
|
|
local rand_x = math.random(33)-1
|
|
local rand_y = math.random(33)-1
|
|
local pos = {x =left_top.x + rand_x, y = left_top.y + rand_y}
|
|
--local position = envent.surface.find_non_colliding_position("big-worm-turret", pos, 8, 1)
|
|
if pos.x * 0.5 > math_abs(pos.y)+50 and event.surface.can_place_entity({name = "medium-worm-turret", position = pos, force = "west"}) then
|
|
event.surface.create_entity({name = "medium-worm-turret", position = pos, force = "west"})
|
|
generate_scrap(event)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if left_top.x >= 2500 then
|
|
local density = 0.003 * left_top.x -5.5
|
|
local floor_density = math.floor(density)
|
|
if floor_density > 4 then floor_density=4 end
|
|
for i = 0, floor_density, 1 do
|
|
if math.random(100)<=10 then
|
|
local rand_x = math.random(33)-1
|
|
local rand_y = math.random(33)-1
|
|
local pos = {x =left_top.x + rand_x, y = left_top.y + rand_y}
|
|
--local position = envent.surface.find_non_colliding_position("big-worm-turret", pos, 8, 1)
|
|
if pos.x * 0.5 > math_abs(pos.y)+50 and event.surface.can_place_entity({name = "big-worm-turret", position = pos, force = "west"}) then
|
|
event.surface.create_entity({name = "big-worm-turret", position = pos, force = "west"})
|
|
generate_scrap(event)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
if left_top.x > 320 then return end
|
|
if left_top.x < -320 then return end
|
|
if left_top.y > 320 then return end
|
|
if left_top.y < -320 then return end
|
|
|
|
game.forces.west.chart(event.surface, {{left_top.x, left_top.y},{left_top.x + 31, left_top.y + 31}})
|
|
game.forces.east.chart(event.surface, {{left_top.x, left_top.y},{left_top.x + 31, left_top.y + 31}})
|
|
end
|
|
|
|
|
|
local event = require 'utils.event'
|
|
event.add(defines.events.on_chunk_generated, on_chunk_generated)
|
|
|
|
return Public
|