From b95fd301cc474e2c0aed7f5ad431fd4892c8286b Mon Sep 17 00:00:00 2001 From: grilledham Date: Mon, 25 Jun 2018 15:32:04 +0100 Subject: [PATCH] tiny ores --- map_gen/ores/tiny_ores.lua | 64 ++++++++++++++++++++++++++++++++++++++ map_layout.lua | 1 + 2 files changed, 65 insertions(+) create mode 100644 map_gen/ores/tiny_ores.lua diff --git a/map_gen/ores/tiny_ores.lua b/map_gen/ores/tiny_ores.lua new file mode 100644 index 00000000..3874ae58 --- /dev/null +++ b/map_gen/ores/tiny_ores.lua @@ -0,0 +1,64 @@ +local Global = require 'utils.global' + +local resource_rate = 768 +local seed = 1234 + +local generator + +Global.register_init( + {}, + function(tbl) + tbl.generator = game.create_random_generator() + end, + function(tbl) + generator = tbl.generator + end +) + +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 ores = { + {'iron-ore', value(40000, 20, 1.5), 100}, + {'copper-ore', value(40000, 20, 1.5), 60}, + {'coal', value(40000, 20, 1.25), 25}, + {'stone', value(20000, 20, 1.25), 15}, + {'uranium-ore', value(5000, 5, 1.35), 5}, + {'crude-oil', value(600000, 200, 1.25), 4} +} + +local total_weights = {} +local t = 0 +for _, v in ipairs(ores) do + t = t + v[3] + table.insert(total_weights, t) +end + +t = resource_rate * t +table.insert(ores, {false}) +table.insert(total_weights, t) + +return function(x, y) + local r_seed = bit32.band(x * 374761393 + y * 668265263 + seed, 4294967295) + generator.re_seed(r_seed) + local i = generator(t) + + local index = table.binary_search(total_weights, i) + if (index < 0) then + index = bit32.bnot(index) + end + + local ore_data = ores[index] + local ore = ore_data[1] + if not ore then + return + end + + local amount = ore_data[2](x, y) + + return {name = ore, amount = amount} +end diff --git a/map_layout.lua b/map_layout.lua index 84085e46..74873d3d 100644 --- a/map_layout.lua +++ b/map_layout.lua @@ -103,6 +103,7 @@ local entity_modules = { --require "map_gen.ores.fluffy_rainbows", --require "map_gen.ores.harmonic_gen", --require "map_gen.ores.resource_clustertruck" + --require "map_gen.ores.tiny_ores" } local terrain_modules = {