2017-08-12 02:20:08 +02:00
|
|
|
require("locale.gen_combined.grilledham_map_gen.builders")
|
2017-11-16 02:24:20 +02:00
|
|
|
require("locale.utils.poisson_rng")
|
2017-11-15 12:53:49 +02:00
|
|
|
|
2017-11-13 01:56:26 +02:00
|
|
|
local Thread = require "locale.utils.Thread"
|
2017-08-12 02:20:08 +02:00
|
|
|
|
2017-11-12 15:11:06 +02:00
|
|
|
|
2017-11-13 01:56:26 +02:00
|
|
|
function run_init(params)
|
|
|
|
global._tiles_hold = {}
|
|
|
|
global._decoratives_hold = {}
|
|
|
|
global._entities_hold = {}
|
|
|
|
end
|
2017-11-12 23:30:17 +02:00
|
|
|
|
2017-11-13 01:56:26 +02:00
|
|
|
function run_place_tiles(params)
|
|
|
|
local surface = params.surface
|
2017-11-13 14:05:18 +02:00
|
|
|
surface.set_tiles(global._tiles_hold, true)
|
2017-11-13 01:56:26 +02:00
|
|
|
end
|
2017-11-12 23:30:17 +02:00
|
|
|
|
2017-11-13 01:56:26 +02:00
|
|
|
function run_place_items(params)
|
|
|
|
local surface = params.surface
|
|
|
|
for _,deco in pairs(global._decoratives_hold) do
|
|
|
|
surface.create_decoratives{check_collision=false, decoratives={deco}}
|
|
|
|
end
|
|
|
|
for _, entity in ipairs(global._entities_hold) do
|
|
|
|
if surface.can_place_entity {name=entity.name, position=entity.position} then
|
|
|
|
surface.create_entity {name=entity.name, position=entity.position}
|
2017-11-12 23:30:17 +02:00
|
|
|
end
|
|
|
|
end
|
2017-11-13 01:56:26 +02:00
|
|
|
end
|
2017-11-12 23:30:17 +02:00
|
|
|
|
2017-11-13 01:56:26 +02:00
|
|
|
function run_calc_items(params)
|
|
|
|
local top_x = params.top_x
|
|
|
|
local top_y = params.top_y
|
2017-11-12 23:30:17 +02:00
|
|
|
|
|
|
|
for y = top_y, top_y + 31 do
|
|
|
|
for x = top_x, top_x + 31 do
|
|
|
|
|
|
|
|
-- local coords need to be 'centered' to allow for correct rotation and scaling.
|
|
|
|
local tile, entity = MAP_GEN(x + 0.5, y + 0.5, x, y)
|
2017-08-12 02:20:08 +02:00
|
|
|
|
2017-11-12 23:30:17 +02:00
|
|
|
if type(tile) == "boolean" and not tile then
|
2017-11-13 01:56:26 +02:00
|
|
|
table.insert( global._tiles_hold, {name = "out-of-map", position = {x, y}} )
|
2017-11-12 23:30:17 +02:00
|
|
|
elseif type(tile) == "string" then
|
2017-11-13 01:56:26 +02:00
|
|
|
table.insert( global._tiles_hold, {name = tile, position = {x, y}} )
|
|
|
|
|
|
|
|
if tile == "water" or tile == "deepwater" or tile == "water-green" or tile == "deepwater-green" then
|
|
|
|
local a = x + 1
|
|
|
|
table.insert(global._tiles_hold, {name = tile, position = {a,y}})
|
|
|
|
local a = y + 1
|
|
|
|
table.insert(global._tiles_hold, {name = tile, position = {x,a}})
|
|
|
|
local a = x - 1
|
|
|
|
table.insert(global._tiles_hold, {name = tile, position = {a,y}})
|
|
|
|
local a = y - 1
|
|
|
|
table.insert(global._tiles_hold, {name = tile, position = {x,a}})
|
|
|
|
end
|
2017-11-12 23:30:17 +02:00
|
|
|
|
|
|
|
if map_gen_decoratives then
|
|
|
|
tile_decoratives = check_decorative(tile, x, y)
|
|
|
|
for _,tbl in ipairs(tile_decoratives) do
|
2017-11-13 01:56:26 +02:00
|
|
|
table.insert(global._decoratives_hold, tbl)
|
2017-11-12 23:30:17 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
tile_entities = check_entities(tile, x, y)
|
|
|
|
for _,entity in ipairs(tile_entities) do
|
2017-11-13 01:56:26 +02:00
|
|
|
table.insert(global._entities_hold, entity)
|
2017-11-12 23:30:17 +02:00
|
|
|
end
|
2017-08-12 02:20:08 +02:00
|
|
|
end
|
2017-11-12 23:30:17 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
if entity then
|
2017-11-13 01:56:26 +02:00
|
|
|
table.insert(global._entities_hold, entity)
|
2017-11-12 23:30:17 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
2017-11-13 01:56:26 +02:00
|
|
|
end
|
2017-11-12 23:30:17 +02:00
|
|
|
|
2017-11-13 01:56:26 +02:00
|
|
|
function run_chart_update(params)
|
|
|
|
local x = params.area.left_top.x / 32
|
|
|
|
local y = params.area.left_top.y / 32
|
|
|
|
if game.forces.player.is_chunk_charted(params.surface, {x,y} ) then
|
|
|
|
-- Don't use full area, otherwise adjacent chunks get charted
|
|
|
|
game.forces.player.chart(params.surface, {{ params.area.left_top.x, params.area.left_top.y}, { params.area.left_top.x+30, params.area.left_top.y+30} } )
|
|
|
|
end
|
|
|
|
end
|
2017-11-12 23:30:17 +02:00
|
|
|
|
2017-11-13 01:56:26 +02:00
|
|
|
function run_combined_module(event)
|
|
|
|
|
|
|
|
if MAP_GEN == nil then
|
|
|
|
game.print("MAP_GEN not set")
|
|
|
|
return
|
2017-11-12 23:30:17 +02:00
|
|
|
end
|
|
|
|
|
2017-11-13 01:56:26 +02:00
|
|
|
local area = event.area
|
|
|
|
local surface = event.surface
|
|
|
|
MAP_GEN_SURFACE = surface
|
|
|
|
|
|
|
|
|
|
|
|
local top_x = area.left_top.x
|
|
|
|
local top_y = area.left_top.y
|
|
|
|
|
|
|
|
if map_gen_decoratives then
|
|
|
|
for _, e in pairs(surface.find_entities_filtered{area=area, type="decorative"}) do
|
|
|
|
e.destroy()
|
2017-11-12 23:30:17 +02:00
|
|
|
end
|
2017-11-13 01:56:26 +02:00
|
|
|
for _, e in pairs(surface.find_entities_filtered{area=area, type="tree"}) do
|
2017-11-20 18:17:30 +02:00
|
|
|
-- e.destroy() -- Leaving the trees/forests
|
2017-11-13 01:56:26 +02:00
|
|
|
end
|
|
|
|
for _, e in pairs(surface.find_entities_filtered{area=area, type="simple-entity"}) do
|
|
|
|
e.destroy()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
Thread.queue_action("run_init", {} )
|
|
|
|
|
|
|
|
Thread.queue_action("run_calc_items", {surface = event.surface, top_x = top_x, top_y = top_y})
|
|
|
|
|
|
|
|
Thread.queue_action("run_place_tiles", {surface = event.surface})
|
|
|
|
Thread.queue_action("run_place_items", {surface = event.surface})
|
|
|
|
Thread.queue_action("run_chart_update", {area = event.area, surface = event.surface} )
|
2017-11-12 23:30:17 +02:00
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
local decorative_options = {
|
|
|
|
["concrete"] = {},
|
|
|
|
["deepwater"] = {},
|
2017-11-13 14:05:18 +02:00
|
|
|
["deepwater-green"] = {
|
2017-12-28 23:45:27 +02:00
|
|
|
{"brown-carpet-grass", 100},
|
2017-11-13 14:05:18 +02:00
|
|
|
{"brown-cane-cluster", 500},
|
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["dirt-3"] = {
|
2017-12-28 23:45:27 +02:00
|
|
|
{"brown-carpet-grass", 100},
|
2017-11-13 14:05:18 +02:00
|
|
|
{"brown-cane-cluster", 200},
|
2017-12-28 23:45:27 +02:00
|
|
|
{"sand-rock-small", 150},
|
2017-11-13 14:05:18 +02:00
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["dirt-6"] = {
|
2017-12-28 23:45:27 +02:00
|
|
|
{"sand-rock-small", 150},
|
2017-11-13 14:05:18 +02:00
|
|
|
{"red-asterisk", 45},
|
|
|
|
{"red-desert-bush", 12},
|
2017-12-28 23:45:27 +02:00
|
|
|
{"rock-medium", 375},
|
2017-11-13 14:05:18 +02:00
|
|
|
|
|
|
|
|
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["grass-1"] = {
|
|
|
|
{"green-carpet-grass-1", 3},
|
|
|
|
{"green-hairy-grass-1", 7},
|
2017-11-12 23:30:17 +02:00
|
|
|
{"green-bush-mini", 10},
|
|
|
|
{"green-pita", 6},
|
2017-12-28 20:11:25 +02:00
|
|
|
{"green-small-grass-1", 12},
|
2017-11-12 23:30:17 +02:00
|
|
|
{"green-asterisk", 25},
|
|
|
|
{"green-bush-mini", 7},
|
2017-11-13 14:05:18 +02:00
|
|
|
{"garballo", 20},
|
2017-11-12 23:30:17 +02:00
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["grass-3"] = {
|
|
|
|
{"green-carpet-grass-1", 12},
|
|
|
|
{"green-hairy-grass-1", 28},
|
2017-11-13 01:56:26 +02:00
|
|
|
{"green-bush-mini", 40},
|
|
|
|
{"green-pita", 24},
|
2017-12-28 20:11:25 +02:00
|
|
|
{"green-small-grass-1", 48},
|
2017-11-13 01:56:26 +02:00
|
|
|
{"green-asterisk", 100},
|
|
|
|
{"green-bush-mini", 28},
|
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["grass-2"] = {
|
|
|
|
{"green-hairy-grass-1", 56},
|
2017-11-13 01:56:26 +02:00
|
|
|
{"green-bush-mini", 80},
|
|
|
|
{"green-pita", 48},
|
2017-12-28 20:11:25 +02:00
|
|
|
{"green-small-grass-1", 96},
|
2017-11-13 01:56:26 +02:00
|
|
|
{"green-asterisk", 200},
|
|
|
|
{"green-bush-mini", 56},
|
2017-11-13 14:05:18 +02:00
|
|
|
{"brown-cane-cluster", 100},
|
2017-12-28 23:45:27 +02:00
|
|
|
{"brown-carpet-grass", 100},
|
2017-11-13 01:56:26 +02:00
|
|
|
},
|
2017-11-12 23:30:17 +02:00
|
|
|
["hazard-concrete-left"] = {},
|
|
|
|
["hazard-concrete-right"] = {},
|
|
|
|
["lab-dark-1"] = {},
|
|
|
|
["lab-dark-2"] = {},
|
2017-11-13 01:56:26 +02:00
|
|
|
["red-desert"] = {
|
2017-12-28 23:45:27 +02:00
|
|
|
{"brown-carpet-grass", 35},
|
2017-11-13 01:56:26 +02:00
|
|
|
{"orange-coral-mini", 45},
|
|
|
|
{"red-asterisk", 45},
|
|
|
|
{"red-desert-bush", 12},
|
2017-12-28 23:45:27 +02:00
|
|
|
{"rock-medium", 375},
|
|
|
|
{"sand-rock-small", 200},
|
|
|
|
{"sand-rock-small", 30},
|
2017-11-13 01:56:26 +02:00
|
|
|
},
|
|
|
|
["red-desert-dark"] = {
|
2017-12-28 23:45:27 +02:00
|
|
|
{"brown-carpet-grass", 70},
|
2017-11-13 01:56:26 +02:00
|
|
|
{"orange-coral-mini", 90},
|
|
|
|
{"red-asterisk", 90},
|
|
|
|
{"red-desert-bush", 35},
|
2017-12-28 23:45:27 +02:00
|
|
|
{"rock-medium", 375},
|
|
|
|
{"sand-rock-small", 200},
|
|
|
|
{"sand-rock-small", 150},
|
2017-11-13 01:56:26 +02:00
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["sand-1"] = {
|
2017-12-28 23:45:27 +02:00
|
|
|
{"brown-carpet-grass", 35},
|
2017-11-13 14:05:18 +02:00
|
|
|
{"orange-coral-mini", 45},
|
|
|
|
{"red-asterisk", 45},
|
|
|
|
{"brown-asterisk", 45},
|
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["sand-3"] = {
|
2017-12-28 23:45:27 +02:00
|
|
|
{"brown-carpet-grass", 35},
|
2017-11-13 14:05:18 +02:00
|
|
|
{"orange-coral-mini", 45},
|
|
|
|
{"brown-asterisk", 45},
|
|
|
|
},
|
2017-11-12 23:30:17 +02:00
|
|
|
["stone-path"] = {},
|
|
|
|
["water"] = {},
|
|
|
|
["water-green"] = {},
|
|
|
|
["out-of-map"] = {},
|
|
|
|
}
|
|
|
|
|
|
|
|
function check_decorative(tile, x, y)
|
|
|
|
local options = decorative_options[tile]
|
|
|
|
local tile_decoratives = {}
|
|
|
|
|
|
|
|
for _,e in ipairs(options) do
|
|
|
|
name = e[1]
|
|
|
|
high_roll = e[2]
|
2017-11-15 14:41:34 +02:00
|
|
|
if poisson_rng_next(high_roll / 2 ) == 1 then
|
2017-11-12 23:30:17 +02:00
|
|
|
table.insert(tile_decoratives, {name=name, amount=1, position={x,y}})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
return tile_decoratives
|
|
|
|
end
|
|
|
|
|
|
|
|
local entity_options = {
|
|
|
|
["concrete"] = {},
|
|
|
|
["deepwater"] = {},
|
|
|
|
["deepwater-green"] = {},
|
2017-11-13 14:05:18 +02:00
|
|
|
["water"] = {},
|
|
|
|
["water-green"] = {},
|
2017-12-28 20:11:25 +02:00
|
|
|
["dirt-3"] = {
|
2017-11-13 14:05:18 +02:00
|
|
|
{"tree-01", 500},
|
|
|
|
{"tree-06", 300},
|
|
|
|
{"tree-07", 800},
|
|
|
|
{"tree-09", 2000},
|
|
|
|
{"stone-rock", 400},
|
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["dirt-6"] = {
|
2017-11-13 14:05:18 +02:00
|
|
|
{"tree-06", 150},
|
|
|
|
{"tree-07", 400},
|
|
|
|
{"tree-09", 1000},
|
|
|
|
{"stone-rock", 300},
|
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["grass-1"] = {
|
2017-11-13 14:05:18 +02:00
|
|
|
{"tree-01", 150},
|
2017-11-12 23:30:17 +02:00
|
|
|
{"tree-04", 400},
|
2017-11-13 14:05:18 +02:00
|
|
|
{"tree-06", 400},
|
2017-11-12 23:30:17 +02:00
|
|
|
{"tree-07", 400},
|
|
|
|
{"tree-09", 1000},
|
|
|
|
{"stone-rock", 400},
|
|
|
|
{"green-coral", 10000},
|
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["grass-3"] = {
|
2017-11-13 14:05:18 +02:00
|
|
|
{"tree-02", 400},
|
|
|
|
{"tree-03", 400},
|
|
|
|
{"tree-04", 800},
|
|
|
|
{"tree-06", 300},
|
|
|
|
{"tree-07", 800},
|
|
|
|
{"tree-08", 400},
|
|
|
|
{"tree-09", 2000},
|
|
|
|
{"stone-rock", 400},
|
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["grass-2"] = {
|
2017-11-13 14:05:18 +02:00
|
|
|
{"tree-04", 800},
|
|
|
|
{"tree-06", 300},
|
|
|
|
{"tree-07", 400},
|
|
|
|
{"tree-09", 1000},
|
|
|
|
{"dry-tree", 1000},
|
|
|
|
{"stone-rock", 200},
|
|
|
|
},
|
2017-11-12 23:30:17 +02:00
|
|
|
["hazard-concrete-left"] = {},
|
|
|
|
["hazard-concrete-right"] = {},
|
|
|
|
["lab-dark-1"] = {},
|
|
|
|
["lab-dark-2"] = {},
|
2017-11-13 01:56:26 +02:00
|
|
|
["red-desert"] = {
|
|
|
|
{"dry-tree", 400},
|
|
|
|
{"dry-hairy-tree", 400},
|
|
|
|
{"tree-06", 500},
|
|
|
|
{"tree-06", 500},
|
|
|
|
{"tree-01", 500},
|
|
|
|
{"tree-02", 500},
|
|
|
|
{"tree-03", 500},
|
2017-12-28 23:45:27 +02:00
|
|
|
{"sand-rock-big", 200},
|
|
|
|
{"sand-rock-big", 400},
|
2017-11-13 01:56:26 +02:00
|
|
|
{"red-desert-rock-huge-02", 400},
|
|
|
|
},
|
|
|
|
["red-desert-dark"] = {
|
|
|
|
{"dry-tree", 400},
|
|
|
|
{"dry-hairy-tree", 400},
|
|
|
|
{"tree-06", 500},
|
|
|
|
{"tree-06", 500},
|
|
|
|
{"tree-01", 500},
|
|
|
|
{"tree-02", 500},
|
|
|
|
{"tree-03", 500},
|
2017-12-28 23:45:27 +02:00
|
|
|
{"sand-rock-big", 200},
|
|
|
|
{"sand-rock-big", 400},
|
2017-11-13 01:56:26 +02:00
|
|
|
{"red-desert-rock-huge-02", 400},
|
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["sand-1"] = {
|
2017-11-13 14:05:18 +02:00
|
|
|
{"dry-tree", 1000},
|
|
|
|
{"dry-hairy-tree", 1000},
|
|
|
|
{"dead-tree", 1000},
|
|
|
|
{"stone-rock", 150},
|
|
|
|
|
|
|
|
},
|
2017-12-28 20:11:25 +02:00
|
|
|
["sand-3"] = {
|
2017-11-13 14:05:18 +02:00
|
|
|
{"dead-tree", 1000},
|
|
|
|
{"dry-tree", 1000},
|
|
|
|
{"dry-hairy-tree", 1000},
|
|
|
|
{"stone-rock", 150},
|
|
|
|
|
|
|
|
},
|
2017-11-12 23:30:17 +02:00
|
|
|
["stone-path"] = {},
|
|
|
|
["out-of-map"] = {},
|
|
|
|
}
|
|
|
|
|
|
|
|
function check_entities(tile, x, y)
|
|
|
|
local options = entity_options[tile]
|
|
|
|
local tile_entity_list = {}
|
|
|
|
|
|
|
|
for _,e in ipairs(options) do
|
|
|
|
name = e[1]
|
|
|
|
high_roll = e[2]
|
2017-11-15 14:41:34 +02:00
|
|
|
if poisson_rng_next( high_roll / 2 ) == 1 then
|
2017-11-12 23:30:17 +02:00
|
|
|
table.insert(tile_entity_list, {name=name, position={x,y}})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
return tile_entity_list
|
2017-11-12 15:11:06 +02:00
|
|
|
end
|