local b = require "map_gen.shared.builders" local pic = require "map_gen.data.presets.goat" pic = b.decompress(pic) local goat1 = b.picture(pic) goat1 = b.invert(goat1) local crop = b.rectangle(pic.width, pic.height) goat1 = b.all{goat1, crop} local floor = b.translate(b.rectangle(pic.width, 32), 0 , (pic.height / 2) + 12) local goats = { floor, goat1 } local sf = 0.75 local tf = 0.7 local s = 1 local t = 0 for i = 1, 5 do s = s * sf t = t + (s * tf * pic.height) local goat = b.translate(b.scale(goat1, s, s), 0, -t) table.insert( goats, goat ) end local ceiling = b.translate(b.rectangle(pic.width, 32), 0 , -t - 32) table.insert( goats, ceiling ) local shape = b.translate(b.any(goats), 0, (t / 2) - 60) -- for custom goat ores --[[ local function rot(table) local len = #table local copy = {} for i = 1, len -1 do copy[i+1] = table[i] end copy[1] = table[len] return copy end local patch = b.flip_x(goat1) --patch = b.throttle_xy(patch, 1, 2, 1 ,2) local iron_patch = b.resource(b.scale(patch,0.12,0.12), "iron-ore", function(x,y) return 500 end) local copper_patch = b.resource(b.scale(patch,0.12,0.12), "copper-ore", function(x,y) return 500 end) local coal_patch = b.resource(b.scale(patch,0.12,0.12), "coal", function(x,y) return 500 end) local stone_patch = b.resource(b.scale(patch,0.12,0.12), "stone", function(x,y) return 500 end) local uraniumn_patch = b.resource(b.scale(patch,0.12,0.12), "uraniumn-ore", function(x,y) return 500 end) local oil_patch = b.resource(b.scale(patch,0.12,0.12), "crude-oil", function(x,y) return 500 end) local patch1 = b.translate(b.scale(patch,0.2,0.2),0,170) local patch2 = b.translate(b.scale(patch,0.15,0.15),0,25) local patch3 = b.translate(b.scale(patch,0.12,0.12),0,-88) local patch4 = b.translate(b.scale(patch,0.1,0.1),0,-173) local patch5 = b.translate(b.scale(patch,0.08,0.08),0,-238) local patch6 = b.translate(b.scale(patch,0.04,0.04),0,-282) local patch_table = { patch1, patch2, patch3, patch4, patch5, patch6 } local function do_nothing(builder, x, y) return builder(x, y) end local function throttle(builder, x, y) if x % 4 < 1 and y % 4 < 1 then return builder(x, y) else return false end end local function linear(base, mult) return function(x, y) return base + (math.abs(x) + math.abs(y)) * mult end end local res1 = {do_nothing, "iron-ore", linear(500, 1) } local res2 = {do_nothing,"copper-ore", linear(400, 0.8) } local res3 = {do_nothing,"coal", linear(400, 0.7) } local res4 = {do_nothing,"stone", linear(200, 0.6) } local res5 = {do_nothing,"uranium-ore", linear(50, 0.1) } local res6 = {throttle, "crude-oil", linear(18750, 300) } local res_table = { res2, res3, res4, res5, res6, res1 } local res_tables = {} for i = 1, 6 do table.insert(res_tables, res_table) res_table = rot(res_table) end local function res_builder(x, y, world_x, world_y) local col_pos = math.floor(world_x / ISLAND_X_DISTANCE + 0.5) local row_pos = math.floor(world_y / ISLAND_Y_DISTANCE + 0.5) local offset = ((math.abs(col_pos) + math.abs(row_pos)) % 6) + 1 local rt = res_tables[offset] for k, v in ipairs(patch_table) do local r = rt[k] local f = r[1] local name = r[2] local amount = r[3] if f(v,x,y) then return name, amount(world_x, world_y) end end end --local patches = b.any(patch_table) --local iron = b.resource(patches,"iron-ore", function(x,y) return 400 end) --local iron_goat = b.apply_entity(shape, iron) local res_goat = b.apply_entity(shape, res_builder) shape = res_goat --]] local shape2 = b.flip_x(shape) local shape3 = b.flip_y(shape) local shape4 = b.flip_y(shape2) local pattern = { {shape, shape2}, {shape3, shape4}, } local map = b.grid_pattern(pattern, 2, 2, pic.width, pic.height + t - 105) map = b.change_map_gen_collision_tile(map,"water-tile", "water-green") return map