From 256d6bded7defbe58eb48425c2b1c6eb0a785ba2 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 8 Sep 2022 18:32:59 +0200 Subject: [PATCH] Add sculk veins, generate shriekers and sensors --- mods/ITEMS/mcl_sculk/init.lua | 103 ++++++++++++++---- mods/ITEMS/mcl_sculk/mod.conf | 2 +- .../mcl_sculk/textures/mcl_sculk_vein.png | Bin 0 -> 7133 bytes 3 files changed, 82 insertions(+), 23 deletions(-) create mode 100644 mods/ITEMS/mcl_sculk/textures/mcl_sculk_vein.png diff --git a/mods/ITEMS/mcl_sculk/init.lua b/mods/ITEMS/mcl_sculk/init.lua index b347ac41c..e9b01146c 100644 --- a/mods/ITEMS/mcl_sculk/init.lua +++ b/mods/ITEMS/mcl_sculk/init.lua @@ -1,7 +1,8 @@ +local S = minetest.get_translator(minetest.get_current_modname()) local spread_to = {"mcl_core:stone","mcl_core:dirt","mcl_core:sand","mcl_core:dirt_with_grass","group:grass_block","mcl_core:andesite","mcl_core:diorite","mcl_core:granite"} -local range = 16 +local range = 8 local function get_node_xp(pos) local meta = minetest.get_meta(pos) return meta:get_int("xp") @@ -25,7 +26,7 @@ local function sculk_on_destruct(pos) end minetest.register_node("mcl_sculk:sculk", { - description = ("Sculk"), + description = S("Sculk"), tiles = { { name = "mcl_sculk_sculk.png", animation = { @@ -36,9 +37,9 @@ minetest.register_node("mcl_sculk:sculk", { }, }, }, drop = "", - groups = {handy = 1, hoey = 1, building_block=1,}, + groups = {handy = 1, hoey = 1, building_block=1, sculk = 1,}, place_param2 = 1, --- sounds = , + sounds = mcl_sounds.node_sound_leaves_defaults(), is_ground_content = false, on_destruct = sculk_on_destruct, _mcl_blast_resistance = 0.2, @@ -46,16 +47,47 @@ minetest.register_node("mcl_sculk:sculk", { _mcl_silk_touch_drop = true, }) +minetest.register_node("mcl_sculk:vein", { + description = S("Sculk Vein"), + _doc_items_longdesc = S("Sculk vein."), + drawtype = "signlike", + tiles = {"mcl_sculk_vein.png"}, + inventory_image = "mcl_sculk_vein.png", + wield_image = "mcl_sculk_vein.png", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "wallmounted", + walkable = false, + climbable = true, + buildable_to = true, + selection_box = { + type = "wallmounted", + }, + stack_max = 64, + groups = { + handy = 1, axey = 1, shearsy = 1, swordy = 1, deco_block = 1, + dig_by_piston = 1, destroy_by_lava_flow = 1, sculk = 1, + }, + sounds = mcl_sounds.node_sound_leaves_defaults(), + drop = "", + _mcl_shears_drop = true, + node_placement_prediction = "", + -- Restrict placement of vines + _mcl_blast_resistance = 0.2, + _mcl_hardness = 0.2, + on_rotate = false, +}) + minetest.register_node("mcl_sculk:catalyst", { - description = ("Sculk Catalyst"), + description = S("Sculk Catalyst"), tiles = { "mcl_sculk_catalyst_top.png", "mcl_sculk_catalyst_bottom.png", "mcl_sculk_catalyst_side.png" }, drop = "", --- sounds = , - groups = {handy = 1, hoey = 1, building_block=1,}, + sounds = mcl_sounds.node_sound_leaves_defaults(), + groups = {handy = 1, hoey = 1, building_block=1, sculk = 1,}, place_param2 = 1, is_ground_content = false, on_destruct = sculk_on_destruct, @@ -66,15 +98,15 @@ minetest.register_node("mcl_sculk:catalyst", { }) minetest.register_node("mcl_sculk:sensor", { - description = ("Sculk Sensor"), + description = S("Sculk Sensor"), tiles = { "mcl_sculk_sensor_top.png", "mcl_sculk_sensor_bottom.png", "mcl_sculk_sensor_side.png" }, drop = "", --- sounds = , - groups = {handy = 1, hoey = 1, building_block=1,}, + sounds = mcl_sounds.node_sound_leaves_defaults(), + groups = {handy = 1, hoey = 1, building_block=1, sculk = 1,}, place_param2 = 1, is_ground_content = false, on_destruct = sculk_on_destruct, @@ -84,15 +116,15 @@ minetest.register_node("mcl_sculk:sensor", { _mcl_silk_touch_drop = true, }) minetest.register_node("mcl_sculk:shrieker", { - description = ("Sculk Shrieker"), + description = S("Sculk Shrieker"), tiles = { "mcl_sculk_shrieker_top.png", "mcl_sculk_shrieker_bottom.png", "mcl_sculk_shrieker_side.png" }, drop = "", --- sounds = , - groups = {handy = 1, hoey = 1, building_block=1,}, + sounds = mcl_sounds.node_sound_leaves_defaults(), + groups = {handy = 1, hoey = 1, building_block=1, sculk = 1,}, place_param2 = 1, is_ground_content = false, on_destruct = sculk_on_destruct, @@ -117,13 +149,21 @@ local function has_air(pos) end end +local function has_nonsculk(pos) + for _,v in pairs(adjacents) do + local p = vector.add(pos,v) + if minetest.get_item_group(minetest.get_node(p).name,"sculk") <= 0 and minetest.get_item_group(minetest.get_node(p).name,"solid") > 0 then return p end + end +end + local old_on_step = minetest.registered_entities["mcl_experience:orb"].on_step minetest.registered_entities["mcl_experience:orb"].on_step = function(self,dtime) local p = self.object:get_pos() - local n = minetest.get_node(vector.offset(p,0,-1,0)) + local n = minetest.find_node_near(p,2,{"mcl_sculk:sculk"}) + local nu = minetest.get_node(vector.offset(p,0,-1,0)) local ret = old_on_step(self,dtime) - if n.name == "mcl_sculk:sculk" and not self._sculkdrop then + if n and not self._sculkdrop then local c = minetest.find_node_near(p,range,{"mcl_sculk:catalyst"}) if c then local nnn = minetest.find_nodes_in_area(vector.offset(p,-range,-range,-range),vector.offset(p,range,range,range),spread_to) @@ -137,14 +177,33 @@ minetest.registered_entities["mcl_experience:orb"].on_step = function(self,dtime return vector.distance(p, a) < vector.distance(p, b) end) if nn and #nn > 0 and self._xp > 0 then - local r = math.min(math.random(#nn),self._xp) - for i=1,r do - minetest.set_node(nn[i],{name = "mcl_sculk:sculk"}) - set_node_xp(nn[i],math.floor(self._xp / r)) + local d = math.random(100) + if d <= 1 then + minetest.set_node(nn[1],{name = "mcl_sculk:shrieker"}) + set_node_xp(nn[1],math.min(1,self._xp - 10)) + self.object:remove() + return ret + elseif d <= 9 then + minetest.set_node(nn[1],{name = "mcl_sculk:sensor"}) + set_node_xp(nn[1],math.min(1,self._xp - 5)) + self.object:remove() + return ret + else + local r = math.min(math.random(#nn),self._xp) + for i=1,r do + minetest.set_node(nn[i],{name = "mcl_sculk:sculk" }) + set_node_xp(nn[i],math.floor(self._xp / r)) + end + for i=1,r do + local p = has_nonsculk(nn[i]) + if p and has_air(p) then + minetest.set_node(vector.offset(p,0,1,0),{name = "mcl_sculk:vein", param2 = 1}) + end + end + set_node_xp(nn[1],get_node_xp(nn[1]) + self._xp % r) + self.object:remove() + return ret end - set_node_xp(nn[1],get_node_xp(nn[1]) + self._xp % r) - self.object:remove() - return ret end end end diff --git a/mods/ITEMS/mcl_sculk/mod.conf b/mods/ITEMS/mcl_sculk/mod.conf index 95156561e..a7db304a4 100644 --- a/mods/ITEMS/mcl_sculk/mod.conf +++ b/mods/ITEMS/mcl_sculk/mod.conf @@ -1,3 +1,3 @@ name = mcl_sculk author = cora -depends = mcl_experience +depends = mcl_core, mcl_sounds, mcl_experience diff --git a/mods/ITEMS/mcl_sculk/textures/mcl_sculk_vein.png b/mods/ITEMS/mcl_sculk/textures/mcl_sculk_vein.png new file mode 100644 index 0000000000000000000000000000000000000000..53d62f70be53fd7efcc8efb3456d85ef39855fd3 GIT binary patch literal 7133 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 literal 0 HcmV?d00001