From b374e8ee95187703fcd285645716cffbdb127ec4 Mon Sep 17 00:00:00 2001 From: Gael-de-Sailly Date: Tue, 18 Jan 2022 14:25:37 +0100 Subject: [PATCH] Create settings_default.json to store default values for settings Move noise parameters to settings.lua --- init.lua | 1 - noises.lua | 80 ------------------------------------------- pregenerate.lua | 1 + settings.lua | 78 +++++++++++++++++++++++++++++------------ settings_default.json | 68 ++++++++++++++++++++++++++++++++++++ 5 files changed, 125 insertions(+), 103 deletions(-) delete mode 100644 noises.lua create mode 100644 settings_default.json diff --git a/init.lua b/init.lua index 9bc3084..f90e693 100644 --- a/init.lua +++ b/init.lua @@ -21,7 +21,6 @@ use_biomes = use_biomes and minetest.global_exists('default') and not use_biomeg if use_biomegen_mod then biomegen.set_elevation_chill(elevation_chill) end -dofile(modpath .. 'noises.lua') local heightmaps = dofile(modpath .. 'heightmap.lua') diff --git a/noises.lua b/noises.lua deleted file mode 100644 index 0b005ce..0000000 --- a/noises.lua +++ /dev/null @@ -1,80 +0,0 @@ -local def_setting = mapgen_rivers.define_setting - -mapgen_rivers.noise_params = { - base = def_setting('np_base', 'noise', { - offset = 0, - scale = 300, - seed = 2469, - octaves = 8, - spread = {x=2048, y=2048, z=2048}, - persist = 0.6, - lacunarity = 2, - flags = "eased", - }), - - distort_x = def_setting('np_distort_x', 'noise', { - offset = 0, - scale = 1, - seed = -4574, - spread = {x=64, y=32, z=64}, - octaves = 3, - persistence = 0.75, - lacunarity = 2, - }), - - distort_z = def_setting('np_distort_z', 'noise', { - offset = 0, - scale = 1, - seed = -7940, - spread = {x=64, y=32, z=64}, - octaves = 3, - persistence = 0.75, - lacunarity = 2, - }), - - distort_amplitude = def_setting('np_distort_amplitude', 'noise', { - offset = 0, - scale = 10, - seed = 676, - spread = {x=1024, y=1024, z=1024}, - octaves = 5, - persistence = 0.5, - lacunarity = 2, - flags = "absvalue", - }), - - heat = minetest.get_mapgen_setting_noiseparams('mg_biome_np_heat'), - heat_blend = minetest.get_mapgen_setting_noiseparams('mg_biome_np_heat_blend'), -} - --- Convert to number because Minetest API is not able to do it cleanly... -for name, np in pairs(mapgen_rivers.noise_params) do - for field, value in pairs(np) do - if field ~= 'flags' and type(value) == 'string' then - np[field] = tonumber(value) or value - elseif field == 'spread' then - for dir, v in pairs(value) do - value[dir] = tonumber(v) or v - end - end - end -end - -local heat = mapgen_rivers.noise_params.heat -local base = mapgen_rivers.noise_params.base -local settings = mapgen_rivers.settings -heat.offset = heat.offset + settings.sea_level * settings.elevation_chill -base.spread.x = base.spread.x / settings.blocksize -base.spread.y = base.spread.y / settings.blocksize -base.spread.z = base.spread.z / settings.blocksize - -for name, np in pairs(mapgen_rivers.noise_params) do - local lac = np.lacunarity or 2 - if lac > 1 then - local omax = math.floor(math.log(math.min(np.spread.x, np.spread.y, np.spread.z)) / math.log(lac))+1 - if np.octaves > omax then - minetest.log("warning", "[mapgen_rivers] Noise " .. name .. ": 'octaves' reduced to " .. omax) - np.octaves = omax - end - end -end diff --git a/pregenerate.lua b/pregenerate.lua index 184482c..7e97e48 100644 --- a/pregenerate.lua +++ b/pregenerate.lua @@ -5,6 +5,7 @@ local blocksize = mapgen_rivers.settings.blocksize local tectonic_speed = mapgen_rivers.settings.tectonic_speed local np_base = table.copy(mapgen_rivers.noise_params.base) +np_base.spread = vector.divide(np_base.spread, blocksize) local evol_params = mapgen_rivers.settings.evol_params diff --git a/settings.lua b/settings.lua index 7714a11..2d64a40 100644 --- a/settings.lua +++ b/settings.lua @@ -19,13 +19,33 @@ end mtsettings:set("mapgen_rivers_version", mapgen_rivers.version) mgrsettings:set("version", mapgen_rivers.version) +local defaults +do + local f = io.open(mapgen_rivers.modpath .. "/settings_default.json") + defaults = minetest.parse_json(f:read("*all")) + f:close() +end + +-- Convert strings to numbers in noise params because Minetest API is not able to do it cleanly... +local function clean_np(np) + for field, value in pairs(np) do + if field ~= 'flags' and type(value) == 'string' then + np[field] = tonumber(value) or value + elseif field == 'spread' then + for dir, v in pairs(value) do + value[dir] = tonumber(v) or v + end + end + end +end + function mapgen_rivers.define_setting(name, dtype, default) if dtype == "number" or dtype == "string" then local v = mgrsettings:get(name) if v == nil then v = mtsettings:get('mapgen_rivers_' .. name) if v == nil then - v = default + v = defaults[name] end mgrsettings:set(name, v) end @@ -39,7 +59,7 @@ function mapgen_rivers.define_setting(name, dtype, default) if v == nil then v = mtsettings:get_bool('mapgen_rivers_' .. name) if v == nil then - v = default + v = defaults[name] end mgrsettings:set_bool(name, v) end @@ -49,10 +69,11 @@ function mapgen_rivers.define_setting(name, dtype, default) if v == nil then v = mtsettings:get_np_group('mapgen_rivers_' .. name) if v == nil then - v = default + v = defaults[name] end mgrsettings:set_np_group(name, v) end + clean_np(v) return v end end @@ -60,33 +81,46 @@ end local def_setting = mapgen_rivers.define_setting mapgen_rivers.settings = { - center = def_setting('center', 'bool', true), - blocksize = def_setting('blocksize', 'number', 15), + center = def_setting('center', 'bool'), + blocksize = def_setting('blocksize', 'number'), sea_level = tonumber(minetest.get_mapgen_setting('water_level')), - min_catchment = def_setting('min_catchment', 'number', 3600), - river_widening_power = def_setting('river_widening_power', 'number', 0.5), - riverbed_slope = def_setting('riverbed_slope', 'number', 0.4), - distort = def_setting('distort', 'bool', true), - biomes = def_setting('biomes', 'bool', true), - glaciers = def_setting('glaciers', 'bool', false), - glacier_factor = def_setting('glacier_factor', 'number', 8), - elevation_chill = def_setting('elevation_chill', 'number', 0.25), + min_catchment = def_setting('min_catchment', 'number'), + river_widening_power = def_setting('river_widening_power', 'number'), + riverbed_slope = def_setting('riverbed_slope', 'number'), + distort = def_setting('distort', 'bool'), + biomes = def_setting('biomes', 'bool'), + glaciers = def_setting('glaciers', 'bool'), + glacier_factor = def_setting('glacier_factor', 'number'), + elevation_chill = def_setting('elevation_chill', 'number'), - grid_x_size = def_setting('grid_x_size', 'number', 1000), - grid_z_size = def_setting('grid_z_size', 'number', 1000), + grid_x_size = def_setting('grid_x_size', 'number'), + grid_z_size = def_setting('grid_z_size', 'number'), evol_params = { - K = def_setting('river_erosion_coef', 'number', 0.5), - m = def_setting('river_erosion_power', 'number', 0.4), - d = def_setting('diffusive_erosion', 'number', 0.5), - compensation_radius = def_setting('compensation_radius', 'number', 50), + K = def_setting('river_erosion_coef', 'number'), + m = def_setting('river_erosion_power', 'number'), + d = def_setting('diffusive_erosion', 'number'), + compensation_radius = def_setting('compensation_radius', 'number'), }, - tectonic_speed = def_setting('tectonic_speed', 'number', 70), - evol_time = def_setting('evol_time', 'number', 10), - evol_time_step = def_setting('evol_time_step', 'number', 1), + tectonic_speed = def_setting('tectonic_speed', 'number'), + evol_time = def_setting('evol_time', 'number'), + evol_time_step = def_setting('evol_time_step', 'number'), load_all = mtsettings:get_bool('mapgen_rivers_load_all') } +mapgen_rivers.noise_params = { + base = def_setting("np_base", "noise"), + distort_x = def_setting("np_distort_x", "noise"), + distort_z = def_setting("np_distort_z", "noise"), + distort_amplitude = def_setting("np_distort_amplitude", "noise"), + + heat = minetest.get_mapgen_setting_noiseparams('mg_biome_np_heat'), + heat_blend = minetest.get_mapgen_setting_noiseparams('mg_biome_np_heat_blend'), +} + +mapgen_rivers.noise_params.heat.offset = mapgen_rivers.noise_params.heat.offset + + mapgen_rivers.settings.sea_level * mapgen_rivers.settings.elevation_chill + local function write_settings() mgrsettings:write() end diff --git a/settings_default.json b/settings_default.json new file mode 100644 index 0000000..15d32d1 --- /dev/null +++ b/settings_default.json @@ -0,0 +1,68 @@ +{ + "version": "1.0.2", + + "center": true, + "water_level": 1, + "blocksize": 15, + "min_catchment": 3600, + "river_widening_power": 0.5, + "riverbed_slope": 0.4, + "distort": true, + "biomes": true, + "glaciers": false, + "glacier_factor": 8, + "elevation_chill": 0.25, + + "grid_x_size": 1000, + "grid_z_size": 1000, + "river_erosion_coef": 0.5, + "river_erosion_power": 0.4, + "diffusive_erosion": 0.5, + "compensation_radius": 50, + "tectonic_speed": 70, + "evol_time": 10, + "evol_time_step": 1, + "load_all": false, + + "np_base": { + "offset": 0, + "scale": 300, + "seed": 2469, + "octaves": 8, + "spread": {"x": 2048, "y": 2048, "z": 2048}, + "persist": 0.6, + "lacunarity": 2.0, + "flags": "eased" + }, + + "np_distort_x": { + "offset": 0, + "scale": 1, + "seed": -4574, + "octaves": 3, + "spread": {"x": 64, "y": 32, "z": 64}, + "persist": 0.75, + "lacunarity": 2.0 + }, + + "np_distort_z": { + "offset": 0, + "scale": 1, + "seed": -7940, + "octaves": 3, + "spread": {"x": 64, "y": 32, "z": 64}, + "persist": 0.75, + "lacunarity": 2.0 + }, + + "np_distort_amplitude": { + "offset": 0, + "scale": 10, + "seed": 676, + "octaves": 5, + "spread": {"x": 1024, "y": 1024, "z": 1024}, + "persist": 0.5, + "lacunarity": 2.0, + "flags": "absvalue" + } +}