From bd8e289e585cdbb19e3c8eba53420b94a129440d Mon Sep 17 00:00:00 2001 From: theorangeangle <36866626+theorangeangle@users.noreply.github.com> Date: Wed, 27 Nov 2019 23:10:50 -0600 Subject: [PATCH] i wanted to add the turkey ores from the 2018 map onto the 2019 terrain but can't clear out all the errors. going to have inebriate myself and see if that makes things better or worse. -11:10pm local --- map_gen/maps/turkey.lua | 133 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/map_gen/maps/turkey.lua b/map_gen/maps/turkey.lua index 6abc7da5..194575d8 100644 --- a/map_gen/maps/turkey.lua +++ b/map_gen/maps/turkey.lua @@ -1,4 +1,6 @@ local b = require "map_gen.shared.builders" +local Random = require 'map_gen.shared.random' +local table = require 'utils.table' local pic = require "map_gen.data.presets.turkey" local RS = require 'map_gen.shared.redmew_surface' local MGSP = require 'resources.map_gen_settings' @@ -11,6 +13,136 @@ RS.set_map_gen_settings( } ) +local ore_seed = 3000 + +local turkey_pic = require 'map_gen.data.presets.turkey_bw' +local turkey = b.picture(turkey_pic) +turkey = b.invert(turkey) +local bounds = b.rectangle(turkey_pic.width, turkey_pic.height) +turkey = b.all {bounds, turkey} + +local ham = b.picture(require 'map_gen.data.presets.ham') + +ham = b.scale(ham, 64 / 127) --0.5 +turkey = b.scale(turkey, 0.2) + +local function value(base, mult, pow) + return function(x, y) + local d = math.sqrt(x * x + y * y) + return base + mult * d ^ pow + end +end + +local function non_transform(shape) + return shape +end + +local function uranium_transform(shape) + return b.scale(shape, 0.5) +end + +local function oil_transform(shape) + shape = b.scale(shape, 0.3) + shape = b.throttle_world_xy(shape, 1, 5, 1, 5) + return shape +end + +local ores = { + {weight = 150}, + {transform = non_transform, resource = 'iron-ore', value = value(250, 0.75, 1.2), weight = 16}, + {transform = non_transform, resource = 'copper-ore', value = value(200, 0.75, 1.2), weight = 10}, + {transform = non_transform, resource = 'stone', value = value(125, 0.3, 1.05), weight = 7}, + {transform = non_transform, resource = 'coal', value = value(200, 0.8, 1.075), weight = 8}, + {transform = uranium_transform, resource = 'uranium-ore', value = value(100, 0.3, 1.025), weight = 3}, + {transform = oil_transform, resource = 'crude-oil', value = value(100000, 50, 1.1), weight = 6} +} + +local total_ore_weights = {} +local ore_t = 0 +for _, v in ipairs(ores) do + ore_t = ore_t + v.weight + table.insert(total_ore_weights, ore_t) +end + +local random_ore = Random.new(ore_seed, ore_seed * 2) +local ore_pattern = {} + +for r = 1, 50 do + local row = {} + ore_pattern[r] = row + local even_r = r % 2 == 0 + for c = 1, 50 do + local even_c = c % 2 == 0 + local shape + if even_r == even_c then + shape = turkey + else + shape = ham + end + + local i = random_ore:next_int(1, ore_t) + local index = table.binary_search(total_ore_weights, i) + if (index < 0) then + index = bit32.bnot(index) + end + local ore_data = ores[index] + + local transform = ore_data.transform + if not transform then + row[c] = b.no_entity + else + local ore_shape = transform(shape) + --local ore_shape = shape + + local x = random_ore:next_int(-24, 24) + local y = random_ore:next_int(-24, 24) + ore_shape = b.translate(ore_shape, x, y) + + local ore = b.resource(ore_shape, ore_data.resource, ore_data.value) + row[c] = ore + end + end +end + +local start_turkey = + b.segment_pattern { + b.resource( + turkey, + 'iron-ore', + function() + return 1000 + end + ), + b.resource( + turkey, + 'copper-ore', + function() + return 500 + end + ), + b.resource( + turkey, + 'coal', + function() + return 750 + end + ), + b.resource( + turkey, + 'stone', + function() + return 300 + end + ) +} + +ore_pattern[1][1] = start_turkey + +local ore_grid = b.grid_pattern_full_overlap(ore_pattern, 50, 50, 96, 96) + +ore_grid = b.translate(ore_grid, -60, -20) + + Event.add( defines.events.on_tick, function(event) @@ -21,6 +153,7 @@ Event.add( end ) + pic = b.decompress(pic) local shape = b.picture(pic)