From bd5b1d22c8fb3bd3e434e7adfcbe564df793c8ff Mon Sep 17 00:00:00 2001 From: FaceDeer Date: Mon, 27 Jan 2020 20:34:30 -0700 Subject: [PATCH] "Overgenerate" caverns to open up border regions (#11) Previously, only nodes strictly within the map block were being carved out as open space. This meant that multi-node decorations (such as giant mushrooms) would collide with walls and ceilings that would be carved out by adjacent block generation later, leaving them sliced off. Now Subterrane carves out border regions too. Make note of the is_ground_content function, put all your decoration nodes into this to prevent them from being removed. Can't rely on just is_ground_function node properties for most situations, it's too simplistic. --- README.md | 1 + features.lua | 1 - init.lua | 172 +++++++++++++--------- legacy.lua | 6 +- mod.conf | 5 +- screenshot.png | Bin 23098 -> 10567 bytes settingtypes.txt | 2 +- textures/subterrane_dripstone_streaks.png | Bin 465 -> 381 bytes 8 files changed, 108 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index 3fd8536..695aedb 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ cave_layer_def is a table of the form: columns = -- optional, a column_def table for producing truly enormous dripstone formations. See below for definition. Set to nil to disable columns. double_frequency = -- when set to true, uses the absolute value of the cavern field to determine where to place caverns instead. This effectively doubles the number of large non-connected caverns. on_decorate = -- optional, a function that is given a table of indices and a variety of other mapgen information so that it can place custom decorations on floors and ceilings. It is given the parameters (minp, maxp, seed, vm, cavern_data, area, data). See below for the cavern_data table's member definitions. + is_ground_content = -- optional, a function that takes a content_id and returns true if caverns should be carved through that node type. If not provided it defaults to a "is_ground_content" test. } ``` diff --git a/features.lua b/features.lua index 538135d..e424d7a 100644 --- a/features.lua +++ b/features.lua @@ -75,7 +75,6 @@ subterrane.register_stalagmite_nodes = function(base_name, base_node_def, drop_b base_node_def.drawtype = "nodebox" base_node_def.paramtype = "light" base_node_def.paramtype2 = "facedir" - base_node_def.is_ground_content = true base_node_def.node_box = {type = "fixed"} local def1 = deep_copy(base_node_def) diff --git a/init.lua b/init.lua index 013084e..c147325 100644 --- a/init.lua +++ b/init.lua @@ -181,6 +181,15 @@ local clear_node_arrays = function() cavern_data.tunnel_ceiling_count = 0 cavern_data.tunnel_floor_count = 0 cavern_data.column_count = 0 + +-- for k,v in pairs(cavern_ceiling_nodes) do cavern_ceiling_nodes[k] = nil end +-- for k,v in pairs(cavern_floor_nodes) do cavern_floor_nodes[k] = nil end +-- for k,v in pairs(warren_ceiling_nodes) do warren_ceiling_nodes[k] = nil end +-- for k,v in pairs(warren_floor_nodes) do warren_floor_nodes[k] = nil end +-- for k,v in pairs(tunnel_ceiling_nodes) do tunnel_ceiling_nodes[k] = nil end +-- for k,v in pairs(tunnel_floor_nodes) do tunnel_floor_nodes[k] = nil end +-- for k,v in pairs(column_nodes) do column_nodes[k] = nil end + close_node_arrays() end @@ -202,6 +211,7 @@ end -- columns = -- optional, a column_def table for producing truly enormous dripstone formations. See below for definition. Set to nil to disable columns. -- double_frequency = -- when set to true, uses the absolute value of the cavern field to determine where to place caverns instead. This effectively doubles the number of large non-connected caverns. -- decorate = -- optional, a function that is given a table of indices and a variety of other mapgen information so that it can place custom decorations on floors and ceilings. It is given the parameters (minp, maxp, seed, vm, cavern_data, area, data). See below for the cavern_data table's member definitions. +-- is_ground_content = -- optional, a function that takes a content_id and returns true if caverns should be carved through that node type. If not provided it defaults to a "is_ground_content" test. --} -- column_def @@ -315,11 +325,15 @@ subterrane.register_layer = function(cave_layer_def) c_warren_column = nil end + local is_ground_content = cave_layer_def.is_ground_content + if is_ground_content == nil then + is_ground_content = mapgen_helper.is_ground_content + end + -- On generated ---------------------------------------------------------------------------------- minetest.register_on_generated(function(minp, maxp, seed) - --if out of range of cave definition limits, abort if minp.y > YMAX or maxp.y < YMIN then return @@ -336,8 +350,10 @@ minetest.register_on_generated(function(minp, maxp, seed) end local vm, data, data_param2, area = mapgen_helper.mapgen_vm_data_param2() - local nvals_cave, cave_area = mapgen_helper.perlin3d("subterrane:cave", minp, maxp, np_cave) --cave noise for structure - local nvals_wave = mapgen_helper.perlin3d("subterrane:wave", minp, maxp, np_wave) --wavy structure of cavern ceilings and floors + local emin = area.MinEdge + local emax = area.MaxEdge + local nvals_cave, cave_area = mapgen_helper.perlin3d("subterrane:cave", emin, emax, np_cave) --cave noise for structure + local nvals_wave = mapgen_helper.perlin3d("subterrane:wave", emin, emax, np_wave) --wavy structure of cavern ceilings and floors -- pre-average everything so that the final values can be passed -- along to the decorate function if it wants them @@ -350,12 +366,9 @@ minetest.register_on_generated(function(minp, maxp, seed) local warrens_uninitialized = true local nvals_warrens - -- The interp_yxz iterator iterates upwards in columns along the y axis. - -- starts at miny, goes to maxy, then switches to a new x,z and repeats. - local cave_iterator = cave_area:iterp_yxz(minp, maxp) - - local previous_y = minp.y + local previous_y = emin.y local previous_node_state = outside_region + local this_node_state = outside_region local column_points = nil local column_weight = nil @@ -367,14 +380,22 @@ minetest.register_on_generated(function(minp, maxp, seed) cavern_data.cave_area = cave_area cavern_data.cavern_def = cave_layer_def - for vi, x, y, z in area:iterp_yxz(minp, maxp) do - local vi3d = cave_iterator() -- for use with noise data + -- The interp_yxz iterator iterates upwards in columns along the y axis. + -- starts at miny, goes to maxy, then switches to a new x,z and repeats. + for vi, x, y, z in area:iterp_yxz(emin, emax) do + -- We're "over-generating" when carving out the empty space of the cave volume so that decorations + -- can slop over the boundaries of the mapblock without being cut off. + -- We only want to add vi to the various decoration node lists if we're actually whithin the mapblock. + local is_within_current_mapblock = mapgen_helper.is_pos_within_box({x=x, y=y, z=z}, minp, maxp) if y < previous_y then -- we've switched to a new column previous_node_state = outside_region + else + previous_node_state = this_node_state end previous_y = y + this_node_state = inside_ground local cave_local_threshold if y < y_blend_min then @@ -385,7 +406,7 @@ minetest.register_on_generated(function(minp, maxp, seed) cave_local_threshold = TCAVE end - local cave_value = nvals_cave[vi3d] + local cave_value = nvals_cave[vi] if double_frequency then if cave_value < 0 then cave_value = -cave_value @@ -403,28 +424,29 @@ minetest.register_on_generated(function(minp, maxp, seed) end -- inside a giant cavern - if cave_value > cave_local_threshold then + if cave_value > cave_local_threshold then local column_value = 0 if column_def then if column_points == nil then - column_points = subterrane.get_column_points(minp, maxp, column_def) + column_points = subterrane.get_column_points(emin, maxp, column_def) column_weight = column_def.weight end column_value = subterrane.get_column_value({x=x, y=y, z=z}, column_points) end if column_value > 0 and cave_value - column_value * column_weight < cave_local_threshold then - data[vi] = c_column -- add a column node - previous_node_state = inside_column - else - data[vi] = c_cavern_air --hollow it out to make the cave - cavern_data.contains_cavern = true - if previous_node_state == inside_ground then - -- we just entered the cavern from below - cavern_data.cavern_floor_count = cavern_data.cavern_floor_count + 1 - cavern_floor_nodes[cavern_data.cavern_floor_count] = vi - area.ystride + if is_ground_content(data[vi]) then + data[vi] = c_column -- add a column node + end + this_node_state = inside_column + else + if is_ground_content(data[vi]) then + data[vi] = c_cavern_air --hollow it out to make the cave + end + this_node_state = inside_cavern + if is_within_current_mapblock then + cavern_data.contains_cavern = true end - previous_node_state = inside_cavern end end @@ -437,11 +459,11 @@ minetest.register_on_generated(function(minp, maxp, seed) if cave_value <= cave_local_threshold and cave_value > warren_area_threshold then if warren_area_uninitialized then - nvals_warren_area = mapgen_helper.perlin3d("subterrane:warren_area", minp, maxp, np_warren_area) -- determine which areas are spongey with warrens + nvals_warren_area = mapgen_helper.perlin3d("subterrane:warren_area", emin, emax, np_warren_area) -- determine which areas are spongey with warrens warren_area_uninitialized = false end - local warren_area_value = nvals_warren_area[vi3d] + local warren_area_value = nvals_warren_area[vi] if warren_area_value > warren_area_variability_threshold then -- we're in a warren-containing area if solidify_lava and c_lava_set[data[vi]] then @@ -449,7 +471,7 @@ minetest.register_on_generated(function(minp, maxp, seed) end if warrens_uninitialized then - nvals_warrens = mapgen_helper.perlin3d("subterrane:warrens", minp, maxp, np_warrens) --spongey warrens + nvals_warrens = mapgen_helper.perlin3d("subterrane:warrens", emin, emax, np_warrens) --spongey warrens warrens_uninitialized = false end @@ -458,14 +480,14 @@ minetest.register_on_generated(function(minp, maxp, seed) local cave_value_edge = math.min(1, (cave_value - warren_area_threshold) * 20) -- make 0.3 = 0 and 0.25 = 1 to produce a border gradient local warren_area_value_edge = math.min(1, warren_area_value * 50) -- make 0 = 0 and 0.02 = 1 to produce a border gradient - local warren_value = nvals_warrens[vi3d] + local warren_value = nvals_warrens[vi] local warren_local_threshold = warren_threshold + (2 - warren_area_value_edge - cave_value_edge) if warren_value > warren_local_threshold then local column_value = 0 if column_def then if column_points == nil then - column_points = subterrane.get_column_points(minp, maxp, column_def) + column_points = subterrane.get_column_points(emin, emax, column_def) column_weight = column_def.weight end column_value = subterrane.get_column_value({x=x, y=y, z=z}, column_points) @@ -473,18 +495,19 @@ minetest.register_on_generated(function(minp, maxp, seed) if column_value > 0 and column_value + (warren_local_threshold - warren_value) * column_weight > 0 then if c_warren_column then - data[vi] = c_warren_column -- add a column node - previous_node_state = inside_column + if is_ground_content(data[vi]) then + data[vi] = c_warren_column -- add a column node + end + this_node_state = inside_column end else - data[vi] = c_warren_air --hollow it out to make the cave - cavern_data.contains_warren = true - if previous_node_state == inside_ground then - -- we just entered the warren from below - cavern_data.warren_floor_count = cavern_data.warren_floor_count + 1 - warren_floor_nodes[cavern_data.warren_floor_count] = vi - area.ystride + if is_ground_content(data[vi]) then + data[vi] = c_warren_air --hollow it out to make the cave end - previous_node_state = inside_warren + if is_within_current_mapblock then + cavern_data.contains_warren = true + end + this_node_state = inside_warren end end end @@ -493,43 +516,48 @@ minetest.register_on_generated(function(minp, maxp, seed) -- If decorate is defined, we want to track all this stuff if decorate ~= nil then local c_current_node = data[vi] - local current_node_is_open = mapgen_helper.buildable_to(c_current_node) - - if previous_node_state == inside_column then - -- in this case previous node state is actually current node state, - -- we placed a column node during this loop - cavern_data.column_count = cavern_data.column_count + 1 - column_nodes[cavern_data.column_count] = vi - elseif previous_node_state == inside_ground and current_node_is_open then - -- we just entered a tunnel from below - cavern_data.tunnel_floor_count = cavern_data.tunnel_floor_count + 1 - tunnel_floor_nodes[cavern_data.tunnel_floor_count] = vi-area.ystride - previous_node_state = inside_tunnel - elseif previous_node_state ~= inside_ground and not current_node_is_open then - if previous_node_state == inside_cavern then - --we just left the cavern from below - cavern_data.cavern_ceiling_count = cavern_data.cavern_ceiling_count + 1 - cavern_ceiling_nodes[cavern_data.cavern_ceiling_count] = vi - elseif previous_node_state == inside_warren then - --we just left the cavern from below - cavern_data.warren_ceiling_count = cavern_data.warren_ceiling_count + 1 - warren_ceiling_nodes[cavern_data.warren_ceiling_count] = vi - elseif previous_node_state == inside_tunnel then - -- we just left a tunnel from below - cavern_data.tunnel_ceiling_count = cavern_data.tunnel_ceiling_count + 1 - tunnel_ceiling_nodes[cavern_data.tunnel_ceiling_count] = vi - end - - -- if we laid down a column node we don't want to switch to "inside ground", - -- if we hit air next node then it'll get flagged as a floor node and we don't want that for columns - if previous_node_state ~= inside_column then - previous_node_state = inside_ground + local current_node_is_open = c_current_node == c_air -- mapgen_helper.buildable_to(c_current_node) + if current_node_is_open and this_node_state == inside_ground then + -- we're in a preexisting open space (tunnel). + this_node_state = inside_tunnel + end + + if is_within_current_mapblock then + if this_node_state == inside_column then + cavern_data.column_count = cavern_data.column_count + 1 + column_nodes[cavern_data.column_count] = vi + elseif previous_node_state ~= this_node_state and previous_node_state ~= inside_column then + if previous_node_state == inside_ground then + if this_node_state == inside_tunnel then + -- we just entered a tunnel from below. + cavern_data.tunnel_floor_count = cavern_data.tunnel_floor_count + 1 + tunnel_floor_nodes[cavern_data.tunnel_floor_count] = vi-area.ystride + elseif this_node_state == inside_cavern then + -- we just entered the cavern from below + cavern_data.cavern_floor_count = cavern_data.cavern_floor_count + 1 + cavern_floor_nodes[cavern_data.cavern_floor_count] = vi - area.ystride + elseif this_node_state == inside_warren then + -- we just entered the warren from below + cavern_data.warren_floor_count = cavern_data.warren_floor_count + 1 + warren_floor_nodes[cavern_data.warren_floor_count] = vi - area.ystride + end + elseif this_node_state == inside_ground then + if previous_node_state == inside_tunnel then + -- we just left a tunnel from below + cavern_data.tunnel_ceiling_count = cavern_data.tunnel_ceiling_count + 1 + tunnel_ceiling_nodes[cavern_data.tunnel_ceiling_count] = vi + elseif previous_node_state == inside_cavern then + --we just left the cavern from below + cavern_data.cavern_ceiling_count = cavern_data.cavern_ceiling_count + 1 + cavern_ceiling_nodes[cavern_data.cavern_ceiling_count] = vi + elseif previous_node_state == inside_warren then + --we just left the cavern from below + cavern_data.warren_ceiling_count = cavern_data.warren_ceiling_count + 1 + warren_ceiling_nodes[cavern_data.warren_ceiling_count] = vi + end + end end end - else - -- This will prevent any values from being inserted into the node lists, saving - -- a bunch of memory and processor time - previous_node_state = outside_region end end diff --git a/legacy.lua b/legacy.lua index c93fb98..6372d57 100644 --- a/legacy.lua +++ b/legacy.lua @@ -3,7 +3,7 @@ local enable_legacy = minetest.setting_getbool("subterrane_enable_legacy_dripstone") -if enable_legacy == nil or enable_legacy == true then +if enable_legacy then subterrane.register_stalagmite_nodes("subterrane:dry_stal", { description = "Dry Dripstone", @@ -18,7 +18,6 @@ minetest.register_node("subterrane:dry_flowstone", { description = "Dry Flowstone", tiles = {"default_stone.png^[brighten"}, groups = {cracky = 3, stone = 1}, - is_ground_content = true, drop = 'default:cobble', sounds = default.node_sound_stone_defaults(), }) @@ -38,7 +37,6 @@ minetest.register_node("subterrane:wet_flowstone", { description = "Wet Flowstone", tiles = {"default_stone.png^[brighten^subterrane_dripstone_streaks.png"}, groups = {cracky = 3, stone = 1, subterrane_wet_dripstone = 1}, - is_ground_content = true, drop = 'default:cobble', sounds = default.node_sound_stone_defaults(), }) @@ -435,7 +433,7 @@ end local grid_size = mapgen_helper.block_size * 4 function subterrane:vertically_consistent_randomp(pos) - local next_seed = math.random(1, 2^31) + local next_seed = math.floor(math.random() * 2^31) math.randomseed(minetest.hash_node_position({x=pos.x, y=0, z=pos.z})) local output = math.random() math.randomseed(next_seed) diff --git a/mod.conf b/mod.conf index ef7e49c..2886dcb 100644 --- a/mod.conf +++ b/mod.conf @@ -1 +1,4 @@ -name = subterrane \ No newline at end of file +name = subterrane +description = A mapgen helper mod that facilitates the creation of vast underground caverns +depends = default, mapgen_helper +optional_depends = intllib \ No newline at end of file diff --git a/screenshot.png b/screenshot.png index dd86231e5337a3be7f29537c7665fbe17aa9c9b7..53518176ea44bca375f7e72cc14e3a0d58a22eeb 100644 GIT binary patch literal 10567 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 YAFZ{EKR1co{Lv8zJbucr+Xu|~e=T*>-2eap literal 23098 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 k0E)4;Q^Wt4^S_s0*L`7A%%+>sB1 zTXM*lgJp=rBok_=*j@F7*tzIdrw*CJA2P9!vS? zN1ji!o)m&RjIh%3yOqgZ#;eS`o(;ZX4NDCl@f%M{;~+PyxG4EG9%9sRnNyzUSs$8NL^vv?PHK@?dREj?Ozco#T_P;nf_S z*NdEeKG|*ybRHL@_4=eO(0NqudwtRt===aD^L)~Jbnc4Ihq-F?$@}V)KbEG02aKZ9 QQUCw|07*qoM6N<$g0KUvRR910