From dac7c534a211fe6e4a09de36fe1a6bc4b14168ad Mon Sep 17 00:00:00 2001 From: grilledham Date: Sat, 18 Aug 2018 12:39:00 +0100 Subject: [PATCH] updates --- map_gen/presets/fruit_loops.lua | 113 +++++++++++++++++++------------- 1 file changed, 69 insertions(+), 44 deletions(-) diff --git a/map_gen/presets/fruit_loops.lua b/map_gen/presets/fruit_loops.lua index 3a41f853..e34c6560 100644 --- a/map_gen/presets/fruit_loops.lua +++ b/map_gen/presets/fruit_loops.lua @@ -6,12 +6,13 @@ This map has isolated areas, it's recommend turning biters to peaceful to reduce local b = require 'map_gen.shared.builders' -- change these to change the pattern. -local seed1 = 99999 -local seed2 = 66666 +local seed1 = 17000 +local seed2 = seed1 * 2 -local function value(base, mult) +local function value(base, mult, pow) return function(x, y) - return mult * (math.abs(x) + math.abs(y)) + base + local d = math.sqrt(x * x + y * y) + return base + mult * d ^ pow end end @@ -21,12 +22,12 @@ local small_circle = b.circle(24) local ring = b.all {big_circle, b.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)} + {resource_type = 'iron-ore', value = value(75, 0.25, 1.15)}, + {resource_type = 'copper-ore', value = value(65, 0.2, 1.15)}, + {resource_type = 'stone', value = value(50, 0.2, 1.1)}, + {resource_type = 'coal', value = value(50, 0.15, 1.1)}, + {resource_type = 'uranium-ore', value = value(50, 0.1, 1.075)}, + {resource_type = 'crude-oil', value = value(17500, 25, 1.15)} } local iron = b.resource(b.full_shape, ores[1].resource_type, ores[1].value) @@ -34,7 +35,7 @@ local copper = b.resource(b.full_shape, ores[2].resource_type, ores[2].value) local stone = b.resource(b.full_shape, ores[3].resource_type, ores[3].value) local coal = b.resource(b.full_shape, ores[4].resource_type, ores[4].value) local uranium = b.resource(b.full_shape, ores[5].resource_type, ores[5].value) -local oil = b.resource(b.throttle_world_xy(b.full_shape, 1, 4, 1, 4), ores[6].resource_type, ores[6].value) +local oil = b.resource(b.throttle_world_xy(b.full_shape, 1, 8, 1, 8), ores[6].resource_type, ores[6].value) local function striped(_, _, world) local t = (world.x + world.y) % 4 + 1 @@ -43,7 +44,7 @@ local function striped(_, _, world) return { name = ore.resource_type, position = {world.x, world.y}, - amount = 3 * ore.value(world.x, world.y) + amount = 5 * ore.value(world.x, world.y) } end @@ -54,7 +55,7 @@ local function sprinkle(_, _, world) return { name = ore.resource_type, position = {world.x, world.y}, - amount = 3 * ore.value(world.x, world.y) + amount = 5 * ore.value(world.x, world.y) } end @@ -70,37 +71,60 @@ local segmented = b.segment_pattern({iron, copper, stone, coal}) local tree = b.entity(b.throttle_world_xy(b.full_shape, 1, 3, 1, 3), 'tree-01') -local start_iron = b.resource(ring, ores[1].resource_type, value(500, 0.5)) -local start_copper = b.resource(ring, ores[2].resource_type, value(400, 0.5)) -local start_stone = b.resource(ring, ores[3].resource_type, value(300, 0.5)) -local start_coal = b.resource(ring, ores[4].resource_type, value(300, 0.5)) +local function constant(x) + return function() + return x + end +end + +local tree_shape = b.throttle_world_xy(big_circle, 1, 3, 1, 3) +tree_shape = b.subtract(tree_shape, b.translate(b.circle(6), 0, 32)) + +local start_iron = b.resource(small_circle, ores[1].resource_type, constant(750)) +local start_copper = b.resource(small_circle, ores[2].resource_type, constant(600)) +local start_stone = b.resource(small_circle, ores[3].resource_type, constant(600)) +local start_coal = b.resource(small_circle, ores[4].resource_type, constant(600)) local start_segmented = b.segment_pattern({start_iron, start_copper, start_stone, start_coal}) -local start_tree = b.entity(b.throttle_world_xy(small_circle, 1, 3, 1, 3), 'tree-01') +local start_tree = b.entity(tree_shape, 'tree-01') + +local worm_names = { + 'small-worm-turret', + 'medium-worm-turret', + 'big-worm-turret' +} + +local max_worm_chance = 1 / 128 +local worm_chance_factor = 1 / (192 * 512) -local worm_names = {'small-worm-turret', 'medium-worm-turret', 'big-worm-turret'} -local factor = 1 / (1024 * 32) -local max_chance = 1 / 8 local function worms(_, _, world) - local d = math.sqrt(world.x * world.x + world.y * world.y) + local wx, wy = world.x, world.y + local d = math.sqrt(wx * wx + wy * wy) - if d < 64 then - return nil - end + local worm_chance = d - 128 - local lvl - if d < 192 then - lvl = 1 - elseif d < 384 then - lvl = 2 - else - lvl = 3 - end + if worm_chance > 0 then + worm_chance = worm_chance * worm_chance_factor + worm_chance = math.min(worm_chance, max_worm_chance) - local chance = math.min(max_chance, d * factor) - - if math.random() < chance then - local worm_id = math.random(1, lvl) - return {name = worm_names[worm_id]} + if math.random() < worm_chance then + if d < 256 then + return {name = 'small-worm-turret'} + else + local max_lvl + local min_lvl + if d < 512 then + max_lvl = 2 + min_lvl = 1 + else + max_lvl = 3 + min_lvl = 2 + end + local lvl = math.random() ^ (512 / d) * max_lvl + lvl = math.ceil(lvl) + lvl = math.clamp(lvl, min_lvl, 3) + return {name = worm_names[lvl]} + end + end end end @@ -113,21 +137,22 @@ local oil_loop = b.apply_entities(ring, {oil, worms}) local striped_loop = b.apply_entities(ring, {striped, worms}) local sprinkle_loop = b.apply_entities(ring, {sprinkle, worms}) local segmented_loop = b.apply_entities(ring, {segmented, worms}) -local tree_loop = b.apply_entity(ring, tree) -local rock_loop = b.apply_entity(ring, rocks) -local start_loop = b.apply_entity(big_circle, b.any {start_segmented, start_tree}) +local tree_loop = b.apply_entities(ring, {tree, worms}) +local rock_loop = b.apply_entities(ring, {rocks, worms}) +local start_loop = b.apply_entities(big_circle, {start_segmented, start_tree}) +start_loop = b.translate(start_loop, 0, -32) local loops = { {striped_loop, 3}, {sprinkle_loop, 3}, {segmented_loop, 3}, - {tree_loop, 6}, - {rock_loop, 6}, + {tree_loop, 9}, + {rock_loop, 9}, {iron_loop, 20}, {copper_loop, 12}, {stone_loop, 9}, {coal_loop, 9}, - {uranium_loop, 3}, + {uranium_loop, 1}, {oil_loop, 9} }