From 67bde482e18c3710217e350a2604769e8076e93a Mon Sep 17 00:00:00 2001 From: FaceDeer Date: Sun, 7 Aug 2022 18:21:47 -0600 Subject: [PATCH] split mapgen compatibility code into its own file --- df_dependencies/init.lua | 2 +- df_dependencies/mapgen.lua | 88 +++++++++++++++++++++++++++++++++++++ df_dependencies/misc.lua | 89 -------------------------------------- df_dependencies/nodes.lua | 5 ++- 4 files changed, 93 insertions(+), 91 deletions(-) create mode 100644 df_dependencies/mapgen.lua diff --git a/df_dependencies/init.lua b/df_dependencies/init.lua index 3041261..97030c4 100644 --- a/df_dependencies/init.lua +++ b/df_dependencies/init.lua @@ -17,7 +17,6 @@ df_dependencies.select_required = function(def) end assert(count ~= 0, "Unable to find item for dependency set " .. dump(def)) assert(count == 1, "Found more than one item for dependency set " .. dump(def)) - --assert(total == 2, "number of options other than two for " .. dump(def)) return ret end @@ -36,6 +35,7 @@ dofile(modpath.."/nodes.lua") dofile(modpath.."/sounds.lua") dofile(modpath.."/helper_functions.lua") dofile(modpath.."/misc.lua") +dofile(modpath.."/mapgen.lua") local mods_required = "" local mods_sorted = {} diff --git a/df_dependencies/mapgen.lua b/df_dependencies/mapgen.lua new file mode 100644 index 0000000..c0de9ae --- /dev/null +++ b/df_dependencies/mapgen.lua @@ -0,0 +1,88 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +local prefix = "dfcaverns_" +-- NOTE: These defaults are from df_caverns' config. Update them if those change. + +local lowest_elevation = tonumber(minetest.settings:get(prefix.."sunless_sea_min")) or -2512 +if minetest.settings:get_bool(prefix.."enable_oil_sea", true) then + lowest_elevation = (tonumber(minetest.settings:get(prefix.."oil_sea_level")) or -2700) +end +if minetest.settings:get_bool(prefix.."enable_lava_sea", true) then + lowest_elevation = (tonumber(minetest.settings:get(prefix.."lava_sea_level")) or -2900) +end +if minetest.settings:get_bool(prefix.."enable_underworld", true) then + lowest_elevation = (tonumber(minetest.settings:get(prefix.."underworld_level")) or -3200) +end +if minetest.settings:get_bool(prefix.."enable_primordial", true) then + lowest_elevation = (tonumber(minetest.settings:get(prefix.."primordial_min")) or -4032) +end +lowest_elevation = lowest_elevation - 193 -- add a little buffer space + +df_dependencies.mods_required.mcl_init = true +df_dependencies.mods_required.mcl_worlds = true +df_dependencies.mods_required.mcl_strongholds = true +df_dependencies.mods_required.mcl_compatibility = true +df_dependencies.mods_required.mcl_mapgen = true + +local old_overworld_min + +if minetest.get_modpath("mcl_init") then -- Mineclone 2 + old_overworld_min = mcl_vars.mg_overworld_min -- remember this for weather control + + mcl_vars.mg_overworld_min = lowest_elevation + mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min + mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min + 10 + mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000 + + -- Important note. This doesn't change the values for the various ores and mobs and biomes and whatnot that have already been registered. + -- to keep things consistent, add dependencies to + + dofile(minetest.get_modpath(minetest.get_current_modname()).."/ores.lua") + + -- never mind - add dependency on mcl_strongholds and these will get generated before overworld_min gets changed. + --if minetest.get_modpath("mcl_structures") and minetest.get_modpath("mcl_strongholds") then + -- local elevation_delta = old_overworld_min - lowest_elevation + -- local strongholds = mcl_structures.get_structure_data("stronghold") + -- mcl_structures.register_structure_data("stronghold", strongholds) + --end +end +if minetest.get_modpath("mcl_compatibility") then -- Mineclone 5 + old_overworld_min = mcl_vars.mg_overworld_min -- remember this for weather control + + mcl_vars.mg_overworld_min = lowest_elevation + mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min + mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_overworld_min+4 + mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min+6 + mcl_vars.mg_lava = false + mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000 + mcl_vars.mg_realm_barrier_overworld_end_max = mcl_vars.mg_end_max + mcl_vars.mg_realm_barrier_overworld_end_min = mcl_vars.mg_end_max-11 +end +if minetest.get_modpath("mcl_mapgen") then -- Mineclone 5 + old_overworld_min = mcl_mapgen.overworld.min -- remember this for weather control + + mcl_mapgen.overworld.min = lowest_elevation + mcl_mapgen.overworld.bedrock_min = mcl_mapgen.overworld.min + mcl_mapgen.overworld.bedrock_max = mcl_mapgen.overworld.bedrock_min + (mcl_mapgen.bedrock_is_rough and 4 or 0) + mcl_mapgen.overworld.lava_max = mcl_mapgen.overworld.min+6 + mcl_mapgen.overworld.railcorridors_height_min = -50 + mcl_mapgen.overworld.railcorridors_height_max = -2 + + mcl_mapgen.end_.max = mcl_mapgen.overworld.min - 2000 + mcl_mapgen.realm_barrier_overworld_end_max = mcl_mapgen.end_.max + mcl_mapgen.realm_barrier_overworld_end_min = mcl_mapgen.end_.max - 11 + + if mcl_mapgen.on_settings_changed then + mcl_mapgen.on_settings_changed() + end +end +if minetest.get_modpath("mcl_worlds") then + local old_has_weather = mcl_worlds.has_weather + mcl_worlds.has_weather = function(pos) + -- No weather in the deep caverns + if pos.y >= lowest_elevation and pos.y <= old_overworld_min then + return false + end + return old_has_weather(pos) + end +end diff --git a/df_dependencies/misc.lua b/df_dependencies/misc.lua index 5379d60..3f30846 100644 --- a/df_dependencies/misc.lua +++ b/df_dependencies/misc.lua @@ -41,92 +41,3 @@ df_dependencies.texture_wood = select_required({default="default_wood.png", mcl_ df_dependencies.texture_mineral_coal = select_required({default="default_mineral_coal.png", mcl_core="mcl_core_coal_ore.png"}) -- MCL's coal texture isn't transparent, but is only used with gas seeps and should work fine that way df_dependencies.texture_glass_bottle = select_required({vessels="vessels_glass_bottle.png", mcl_potions="mcl_potions_potion_bottle.png"}) df_dependencies.texture_meselamp = "dfcaverns_glow_mese.png" - ---------------------------------------- mapgen - -local prefix = "dfcaverns_" --- NOTE: These defaults are from df_caverns' config. Update them if those change. - -local lowest_elevation = tonumber(minetest.settings:get(prefix.."sunless_sea_min")) or -2512 -if minetest.settings:get_bool(prefix.."enable_oil_sea", true) then - lowest_elevation = (tonumber(minetest.settings:get(prefix.."oil_sea_level")) or -2700) -end -if minetest.settings:get_bool(prefix.."enable_lava_sea", true) then - lowest_elevation = (tonumber(minetest.settings:get(prefix.."lava_sea_level")) or -2900) -end -if minetest.settings:get_bool(prefix.."enable_underworld", true) then - lowest_elevation = (tonumber(minetest.settings:get(prefix.."underworld_level")) or -3200) -end -if minetest.settings:get_bool(prefix.."enable_primordial", true) then - lowest_elevation = (tonumber(minetest.settings:get(prefix.."primordial_min")) or -4032) -end -lowest_elevation = lowest_elevation - 193 -- add a little buffer space - -df_dependencies.mods_required.mcl_init = true -df_dependencies.mods_required.mcl_worlds = true -df_dependencies.mods_required.mcl_strongholds = true -df_dependencies.mods_required.mcl_compatibility = true -df_dependencies.mods_required.mcl_mapgen = true - -local old_overworld_min - -if minetest.get_modpath("mcl_init") then -- Mineclone 2 - old_overworld_min = mcl_vars.mg_overworld_min -- remember this for weather control - - mcl_vars.mg_overworld_min = lowest_elevation - mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min - mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min + 10 - mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000 - - -- Important note. This doesn't change the values for the various ores and mobs and biomes and whatnot that have already been registered. - -- to keep things consistent, add dependencies to - - dofile(minetest.get_modpath(minetest.get_current_modname()).."/ores.lua") - - -- never mind - add dependency on mcl_strongholds and these will get generated before overworld_min gets changed. - --if minetest.get_modpath("mcl_structures") and minetest.get_modpath("mcl_strongholds") then - -- local elevation_delta = old_overworld_min - lowest_elevation - -- local strongholds = mcl_structures.get_structure_data("stronghold") - -- mcl_structures.register_structure_data("stronghold", strongholds) - --end -end -if minetest.get_modpath("mcl_compatibility") then -- Mineclone 5 - old_overworld_min = mcl_vars.mg_overworld_min -- remember this for weather control - - mcl_vars.mg_overworld_min = lowest_elevation - mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min - mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_overworld_min+4 - mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min+6 - mcl_vars.mg_lava = false - mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000 - mcl_vars.mg_realm_barrier_overworld_end_max = mcl_vars.mg_end_max - mcl_vars.mg_realm_barrier_overworld_end_min = mcl_vars.mg_end_max-11 -end -if minetest.get_modpath("mcl_mapgen") then -- Mineclone 5 - old_overworld_min = mcl_mapgen.overworld.min -- remember this for weather control - - mcl_mapgen.overworld.min = lowest_elevation - mcl_mapgen.overworld.bedrock_min = mcl_mapgen.overworld.min - mcl_mapgen.overworld.bedrock_max = mcl_mapgen.overworld.bedrock_min + (mcl_mapgen.bedrock_is_rough and 4 or 0) - mcl_mapgen.overworld.lava_max = mcl_mapgen.overworld.min+6 - mcl_mapgen.overworld.railcorridors_height_min = -50 - mcl_mapgen.overworld.railcorridors_height_max = -2 - - mcl_mapgen.end_.max = mcl_mapgen.overworld.min - 2000 - mcl_mapgen.realm_barrier_overworld_end_max = mcl_mapgen.end_.max - mcl_mapgen.realm_barrier_overworld_end_min = mcl_mapgen.end_.max - 11 - - if mcl_mapgen.on_settings_changed then - mcl_mapgen.on_settings_changed() - end -end -if minetest.get_modpath("mcl_worlds") then - local old_has_weather = mcl_worlds.has_weather - mcl_worlds.has_weather = function(pos) - -- No weather in the deep caverns - if pos.y >= lowest_elevation and pos.y <= old_overworld_min then - return false - end - return old_has_weather(pos) - end -end diff --git a/df_dependencies/nodes.lua b/df_dependencies/nodes.lua index b21d5bf..499b23c 100644 --- a/df_dependencies/nodes.lua +++ b/df_dependencies/nodes.lua @@ -7,6 +7,9 @@ local function select_required(...) end local ret = df_dependencies.select_required(newdef) minetest.after(0, function() + -- "after" needs to be used here because some of these nodes actually get registered in DF Caverns itself + -- stair nodes, for example, depend on the stairs mod but get registered from here. Kind of weird but + -- one goes to war with the mods one has. assert(minetest.registered_items[ret] ~= nil, "Node " .. ret .. " was returned by a selection call but is not registered.") end) return ret @@ -42,7 +45,7 @@ df_dependencies.node_name_gravel = select_required("default:gravel", "mcl_core:g df_dependencies.node_name_ice = select_required("default:ice", "mcl_core:ice") df_dependencies.node_name_junglewood = select_required("default:junglewood", "mcl_core:junglewood") df_dependencies.node_name_lava_source = select_required("default:lava_source", "mcl_core:lava_source") -df_dependencies.node_name_mese_crystal = select_required("default:mese_crystal", "mesecons:redstone") -- TODO make sure this is properly balanced. Also, mesecons mod conflict with non-mcl mesecons? +df_dependencies.node_name_mese_crystal = select_required("default:mese_crystal", "mesecons:redstone") df_dependencies.node_name_mossycobble = select_required("default:mossycobble", "mcl_core:mossycobble") df_dependencies.node_name_obsidian = select_required("default:obsidian", "mcl_core:obsidian") df_dependencies.node_name_paper = select_required("default:paper", "mcl_core:paper")