2018-01-21 17:31:20 +02:00
map_gen_decoratives = false -- Generate our own decoratives
map_gen_rows_per_tick = 8 -- Inclusive integer between 1 and 32. Used for map_gen_threaded, higher numbers will generate map quicker but cause more lag.
-- Recommend to use generate, but generate_not_threaded may be useful for testing / debugging.
--require "map_gen.shared.generate_not_threaded"
2018-01-19 23:33:54 +02:00
require " map_gen.shared.generate "
2017-08-25 07:27:50 +02:00
local inner_circle = invert ( circle_builder ( 48 ) )
local outer_circle = circle_builder ( 64 )
2018-02-23 14:18:32 +02:00
local square = invert ( rectangle_builder ( 1000 , 1000 ) )
2017-08-25 07:27:50 +02:00
square = rotate ( square , degrees ( 45 ) )
2018-02-23 14:18:32 +02:00
square = translate ( square , math.sqrt ( 2 ) * 500 , 0 )
2017-08-25 07:27:50 +02:00
2018-02-23 14:18:32 +02:00
local circle = compound_and ( { inner_circle , outer_circle , square } )
2017-08-25 07:27:50 +02:00
2018-02-23 14:18:32 +02:00
local line1 = rectangle_builder ( 77 , 16 )
2017-08-25 07:27:50 +02:00
line1 = rotate ( line1 , degrees ( 45 ) )
2018-02-23 14:18:32 +02:00
line1 = translate ( line1 , 66.5 , 12.6875 )
2017-08-25 07:27:50 +02:00
2017-08-27 19:15:07 +02:00
local line2 = rectangle_builder ( 45 , 16 )
2017-08-25 07:27:50 +02:00
local line2 = rotate ( line2 , degrees ( - 45 ) )
2018-02-23 14:18:32 +02:00
line2 = translate ( line2 , 55.5 , - 23.6875 )
2017-08-25 07:27:50 +02:00
--line2 =change_tile(line2, true, "water")
2018-02-23 14:18:32 +02:00
local half = compound_or ( { line2 , line1 , circle } )
2017-08-25 07:27:50 +02:00
2017-08-27 01:29:17 +02:00
half = translate ( half , - 79.1875 , 0 )
2018-02-23 14:18:32 +02:00
local map = compound_or ( { half , flip_xy ( half ) } )
2017-08-25 07:27:50 +02:00
2017-08-27 19:15:07 +02:00
map = scale ( map , 11 , 11 )
2017-08-25 07:27:50 +02:00
2017-08-25 16:35:53 +02:00
local function research_finished ( event )
local tech = event.research . name
if tech == " rocket-silo " then
game.forces [ " player " ] . recipes [ " rocket-silo " ] . enabled = false
end
end
Event.register ( defines.events . on_research_finished , research_finished )
local function max_axis_distance ( world_x , world_y , target_x , target_y )
local x = math.abs ( world_x - target_x )
local y = math.abs ( world_y - target_y )
2018-02-23 14:18:32 +02:00
2017-08-25 16:35:53 +02:00
return math.max ( x , y )
end
local function distance ( world_x , world_y , target_x , target_y )
return math.abs ( world_x - target_x ) + math.abs ( world_y - target_y )
end
local init = false
local safe_distance = 480
2018-02-23 14:18:32 +02:00
local function effect ( x , y , world_x , world_y , tile , entity , surface )
2017-08-25 16:35:53 +02:00
if not init then
init = true
2018-02-23 14:18:32 +02:00
game.forces [ " player " ] . chart ( surface , { { - 32 , - 32 } , { 31 , 31 } } )
2017-08-25 16:35:53 +02:00
end
2018-02-23 14:18:32 +02:00
if world_x == 0 and world_y == 0 then
for _ , e in ipairs ( surface.find_entities ( { { - 5 , - 5 } , { 5 , 5 } } ) ) do
2017-08-25 16:35:53 +02:00
e.destroy ( )
2018-02-23 14:18:32 +02:00
end
2017-08-25 16:35:53 +02:00
2018-02-23 14:18:32 +02:00
local e = surface.create_entity ( { name = " rocket-silo " , position = { 0 , 0 } , force = " player " } )
2017-08-25 16:35:53 +02:00
e.destructible = false
e.minable = false
end
2018-02-23 14:18:32 +02:00
--[[
if max_axis_distance ( world_x , world_y , - 2144 , 0 ) < safe_distance then
for _ , e in ipairs ( surface.find_entities_filtered ( { force = " enemy " , position = { world_x , world_y } } ) ) do
e.destroy ( )
end
2017-08-25 16:35:53 +02:00
elseif max_axis_distance ( world_x , world_y , 2144 , 0 ) < safe_distance then
2018-02-23 14:18:32 +02:00
for _ , e in ipairs ( surface.find_entities_filtered ( { force = " enemy " , position = { world_x , world_y } } ) ) do
e.destroy ( )
2017-08-25 16:35:53 +02:00
end
2018-02-23 14:18:32 +02:00
end
2017-08-25 16:35:53 +02:00
for _ , e in ipairs ( surface.find_entities_filtered ( { type = " resource " , area = { { world_x , world_y } , { world_x + 1 , world_y + 1 } } } ) ) do -- I want to use position but for some reason it doesn't seem to work for ores.
2018-02-23 14:18:32 +02:00
local dist1 = distance ( world_x , world_y , - 2144 , 0 )
local dist2 = distance ( world_x , world_y , 2144 , 0 )
local amount = math.min ( dist1 , dist2 )
local name = e.name
if name == " iron-ore " then
amount = 800 + 0.4 * amount
elseif name == " copper-ore " then
amount = 700 + 0.35 * amount
elseif name == " coal " then
amount = 600 + 0.3 * amount
elseif name == " stone " then
amount = 400 + 0.2 * amount
elseif name == " uranium-ore " then
amount = 300 + 0.15 * amount
elseif name == " crude-oil " then
amount = 50000 + 50 * amount
2017-08-25 16:35:53 +02:00
end
2018-02-23 14:18:32 +02:00
e.amount = amount
end
--]]
return tile , entity
2017-08-25 16:35:53 +02:00
end
map = apply_effect ( map , effect )
2017-08-28 08:09:15 +02:00
require " spawn_control "
add_spawn ( " left " , - 88 , - 88 )
add_spawn ( " right " , 88 , 88 )
2017-08-25 16:35:53 +02:00
2017-08-25 07:27:50 +02:00
return map