1
0
mirror of https://github.com/Refactorio/RedMew.git synced 2024-12-12 10:04:40 +02:00
RedMew/map_gen/presets/fruit_loops.lua
2018-03-27 16:16:17 +01:00

157 lines
5.4 KiB
Lua

--[[
This map uses custom ore gen. When generating the map, under the resource settings tab use Size = 'None' for all resources.
This map removes and adds it's own water, in terrain settings use water frequency = very low and water size = only in starting area.
This map has isolated areas, it's recommend turning biters to peaceful to reduce stress on the pathfinder.
]]
map_gen_decoratives = false -- Generate our own decoratives
map_gen_rows_per_tick = 4 -- 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"
require "map_gen.shared.generate"
-- change these to change the pattern.
local seed1 = 9999
local seed2 = 6666
local function value(base, mult)
return function(x, y)
return mult * (math.abs(x) + math.abs(y)) + base
end
end
local big_circle = circle_builder(48)
local small_circle = circle_builder(24)
local ring = compound_and{big_circle, invert(small_circle)}
local ores =
{
{resource_type = "iron-ore", value = value(125, 0.5)},
{resource_type = "copper-ore", value = value(100, 0.4)},
{resource_type = "stone", value = value(100, 0.2)},
{resource_type = "coal", value = value(100, 0.1)},
{resource_type = "uranium-ore", value = value(50, 0.1)},
{resource_type = "crude-oil", value = value(10000, 50)},
}
local iron = resource_module_builder(full_builder, ores[1].resource_type, ores[1].value)
local copper = resource_module_builder(full_builder, ores[2].resource_type, ores[2].value)
local stone = resource_module_builder(full_builder, ores[3].resource_type, ores[3].value)
local coal = resource_module_builder(full_builder, ores[4].resource_type, ores[4].value)
local uranium = resource_module_builder(full_builder, ores[5].resource_type, ores[5].value)
local oil = resource_module_builder(throttle_world_xy(full_builder, 1, 4, 1, 4), ores[6].resource_type, ores[6].value)
local function striped(x, y, world_x, world_y, surface)
local t = (world_x + world_y) % 4 + 1
local ore = ores[t]
return {
name = ore.resource_type,
position = {world_x, world_y},
amount = ore.value(world_x, world_y)
}
end
local function sprinkle(x, y, world_x, world_y, surface)
local t = math.random(1, 4)
local ore = ores[t]
return {
name = ore.resource_type,
position = {world_x, world_y},
amount = ore.value(world_x, world_y)
}
end
local segmented = segment_pattern_builder({iron, copper, stone, coal})
local tree = spawn_entity(throttle_world_xy(full_builder, 1, 3, 1, 3), "tree-01")
local start_iron = resource_module_builder(ring, ores[1].resource_type, value(500, 0.5))
local start_copper = resource_module_builder(ring, ores[2].resource_type, value(400, 0.5))
local start_stone = resource_module_builder(ring, ores[3].resource_type, value(300, 0.5))
local start_coal = resource_module_builder(ring, ores[4].resource_type, value(300, 0.5))
local start_segmented = segment_pattern_builder({start_iron, start_copper, start_stone, start_coal})
local start_tree = spawn_entity(throttle_world_xy(small_circle, 1, 3, 1, 3), "tree-01")
local iron_loop = builder_with_resource(ring, iron)
local copper_loop = builder_with_resource(ring, copper)
local stone_loop = builder_with_resource(ring, stone)
local coal_loop = builder_with_resource(ring, coal)
local uranium_loop = builder_with_resource(ring, uranium)
local oil_loop = builder_with_resource(ring, oil)
local striped_loop = builder_with_resource(ring, striped)
local sprinkle_loop = builder_with_resource(ring, sprinkle)
local segmented_loop = builder_with_resource(ring, segmented)
local tree_loop = builder_with_resource(ring, tree)
local start_loop = builder_with_resource(big_circle, compound_or{start_segmented, start_tree})
local loops =
{
{striped_loop, 3},
{sprinkle_loop, 3},
{segmented_loop, 3},
{tree_loop, 6},
{iron_loop, 24},
{copper_loop, 12},
{stone_loop, 9},
{coal_loop, 9},
{uranium_loop, 9},
{oil_loop, 9},
}
local Random = require "map_gen.shared.random"
local random = Random.new(seed1, seed2)
local total_weights = {}
local t = 0
for _, v in pairs(loops) do
t = t + v[2]
table.insert(total_weights, t)
end
local p_cols = 50
local p_rows = 50
local pattern = {}
for c = 1, p_cols do
local row = {}
table.insert(pattern, row)
for r = 1, p_rows do
if c == 1 and r == 1 then
table.insert(row, start_loop)
else
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 = loops[index][1]
local x = random:next_int(-32, 32)
local y = random:next_int(-32, 32)
shape = translate(shape, x, y)
table.insert(row, shape)
end
end
end
local map = grid_pattern_full_overlap_builder(pattern, p_cols, p_rows, 128, 128)
map = change_map_gen_collision_tile(map, "water-tile", "grass-1")
local sea = change_tile(full_builder, true, "water")
local sea = spawn_fish(sea, 0.025)
map = shape_or_else(map, sea)
--map = translate(map, -32, 0)
--map = scale(map, 1, 1)
return map