From 92d9cb139957df7494206ca39313a1d5ea112568 Mon Sep 17 00:00:00 2001 From: FaceDeer Date: Tue, 10 Nov 2020 21:04:11 -0700 Subject: [PATCH] add statues to underworld mapgen --- df_caverns/underworld.lua | 23 +++++++++++++++++++++++ df_underworld_items/hunter_statue.lua | 5 ++++- df_underworld_items/slade.lua | 5 ++++- hunter_statue/init.lua | 1 + 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/df_caverns/underworld.lua b/df_caverns/underworld.lua index 7aee0ae..9850f31 100644 --- a/df_caverns/underworld.lua +++ b/df_caverns/underworld.lua @@ -9,6 +9,8 @@ local bones_loot_path = minetest.get_modpath("bones_loot") local named_waypoints_path = minetest.get_modpath("named_waypoints") local namegen_path = minetest.get_modpath("namegen") +local hunters_enabled = minetest.get_modpath("hunter_statue") and df_underworld_items.config.underworld_hunter_statues + local name_pit = function() end local name_ruin = function() end @@ -555,6 +557,27 @@ minetest.register_on_generated(function(minp, maxp, seed) end end + if hunters_enabled then + local x = math.random(minp.x, maxp.x) + local z = math.random(minp.z, maxp.z) + local index2d = mapgen_helper.index2d(emin, emax, x, z) + local abs_cave = math.abs(nvals_cave[index2d]) -- range is from 0 to approximately 2, with 0 being connected and 2s being islands + local wave = nvals_wave[index2d] * wave_mult + local floor_height = math.floor(abs_cave * floor_mult + median + floor_displace + wave)-1 + local zone = math.abs(nvals_zone[index2d]) + if math.random() < zone / 2 then -- hunters are more common in the built-up areas + for y = floor_height, floor_height+20 do + local target_pos = {x=x, y=y, z=z} + local target_node = minetest.get_node(target_pos) + if minetest.get_item_group(target_node.name, "slade") == 0 then + minetest.set_node(target_pos, {name="df_underworld_items:hunter_statue"}) + break + end + end + end + + end + local time_taken = os.clock() - t_start -- how long this chunk took, in seconds mapgen_helper.record_time("df_caverns underworld", time_taken) end) diff --git a/df_underworld_items/hunter_statue.lua b/df_underworld_items/hunter_statue.lua index b8fa639..949870c 100644 --- a/df_underworld_items/hunter_statue.lua +++ b/df_underworld_items/hunter_statue.lua @@ -13,7 +13,10 @@ if minetest.get_modpath("hunter_statue") and df_underworld_items.config.underwor groups = {hunter_statue = 1, falling_node = 1, immortal = 1}, other_overrides = { can_dig = function(pos, player) - return minetest.check_player_privs(player, "server") + if player then + return minetest.check_player_privs(player, "server") + end + return false end, } }) diff --git a/df_underworld_items/slade.lua b/df_underworld_items/slade.lua index 1ea265c..5f84fb1 100644 --- a/df_underworld_items/slade.lua +++ b/df_underworld_items/slade.lua @@ -3,7 +3,10 @@ local S = df_underworld_items.S local invulnerable = df_underworld_items.config.invulnerable_slade and not minetest.settings:get_bool("creative_mode") local server_diggable_only = function(pos, player) - return minetest.check_player_privs(player, "server") + if player then + return minetest.check_player_privs(player, "server") + end + return false end local add_immortality = function(slade_def) diff --git a/hunter_statue/init.lua b/hunter_statue/init.lua index 86a358e..a1e362f 100644 --- a/hunter_statue/init.lua +++ b/hunter_statue/init.lua @@ -139,6 +139,7 @@ hunter_statue.register_hunter_statue = function(node_name, statue_def) minetest.set_node(test_above, {name="air"}) -- some kind of filler node? node.param2 = new_facedir minetest.set_node(test_base, node) + minetest.check_for_falling({x=pos.x, y=pos.y+1, z=pos.z}) minetest.sound_play({name="hunter_statue_brick_step"}, {pos = pos}) return end