mirror of
https://github.com/Refactorio/RedMew.git
synced 2024-12-16 10:19:27 +02:00
104 lines
2.8 KiB
Lua
104 lines
2.8 KiB
Lua
local b = require 'map_gen.shared.builders'
|
|
|
|
local seed1 = 320420
|
|
local seed2 = 420320
|
|
|
|
local patch = b.rectangular_spiral(5)
|
|
local bounds = b.rectangle(46, 43)
|
|
bounds = b.translate(bounds, 0, 3)
|
|
patch = b.all {bounds, patch}
|
|
|
|
local small_patch = b.rectangular_spiral(5)
|
|
local small_bounds = b.rectangle(25, 33)
|
|
small_bounds = b.translate(small_bounds, -1, -2)
|
|
small_patch = b.all {small_bounds, small_patch}
|
|
|
|
local value = b.manhattan_value
|
|
|
|
local empty = function()
|
|
return nil
|
|
end
|
|
local iron = b.resource(patch, 'iron-ore', value(250, 3))
|
|
local copper = b.resource(patch, 'copper-ore', value(250, 3))
|
|
local stone = b.resource(patch, 'stone', value(250, 2))
|
|
local coal = b.resource(patch, 'coal', value(250, 2))
|
|
local uranium = b.resource(small_patch, 'uranium-ore', value(125, 2))
|
|
local oil = b.resource(b.throttle_world_xy(small_patch, 1, 5, 1, 5), 'crude-oil', value(50000, 250))
|
|
|
|
local patches = {
|
|
{empty, 300},
|
|
{iron, 20},
|
|
{copper, 12},
|
|
{stone, 4},
|
|
{coal, 6},
|
|
{uranium, 2},
|
|
{oil, 4}
|
|
}
|
|
|
|
local Random = require 'map_gen.shared.random'
|
|
local random = Random.new(seed1, seed2)
|
|
|
|
local total_weights = {}
|
|
local t = 0
|
|
for _, v in ipairs(patches) do
|
|
t = t + v[2]
|
|
table.insert(total_weights, t)
|
|
end
|
|
|
|
local p_cols = 50
|
|
local p_rows = 50
|
|
local pattern = {}
|
|
|
|
for _ = 1, p_cols do
|
|
local row = {}
|
|
table.insert(pattern, row)
|
|
for _ = 1, p_rows do
|
|
local i = random:next_int(1, t)
|
|
|
|
local index = table.binary_search(total_weights, i)
|
|
if (index < 0) then
|
|
index = bit32.bnot(index)
|
|
end
|
|
|
|
local shape = patches[index][1]
|
|
|
|
local flip = random:next_int(1, 4)
|
|
if flip == 2 then
|
|
shape = b.flip_x(shape)
|
|
elseif flip == 3 then
|
|
shape = b.flip_y(shape)
|
|
elseif flip == 4 then
|
|
shape = b.flip_xy(shape)
|
|
end
|
|
|
|
table.insert(row, shape)
|
|
end
|
|
end
|
|
|
|
patches = b.grid_pattern(pattern, p_cols, p_rows, 96, 96)
|
|
|
|
local spiral = b.rectangular_spiral(96)
|
|
|
|
local map = b.apply_entity(spiral, patches)
|
|
|
|
local start_iron = b.resource(b.full_shape, 'stone', function() return 800 end)
|
|
local start_copper = b.resource(b.full_shape, 'coal', function() return 400 end)
|
|
local start_stone = b.resource(b.full_shape, 'copper-ore', function() return 800 end)
|
|
local start_coal = b.resource(b.full_shape, 'iron-ore', function() return 1600 end)
|
|
local start_spiral = b.segment_pattern({start_iron, start_copper, start_stone, start_coal})
|
|
|
|
start_spiral = b.apply_entity(patch, start_spiral)
|
|
start_spiral = b.any{start_spiral, b.full_shape}
|
|
start_spiral = b.translate(start_spiral, 0, -5)
|
|
|
|
map = b.choose(b.rectangle(96), start_spiral, map)
|
|
|
|
map = b.change_map_gen_collision_tile(map, 'water-tile', 'grass-1')
|
|
|
|
local sea = b.tile('water')
|
|
sea = b.fish(sea, 0.00125)
|
|
|
|
map = b.if_else(map, sea)
|
|
|
|
return map
|