diff --git a/cavestuff/nodes.lua b/cavestuff/nodes.lua index b26d98f..8b0e522 100644 --- a/cavestuff/nodes.lua +++ b/cavestuff/nodes.lua @@ -17,7 +17,7 @@ minetest.register_node("cavestuff:pebble_1",{ tiles = {"undergrowth_pebble.png"}, paramtype = "light", paramtype2 = "facedir", - groups = {cracky=3, stone=1}, + groups = {cracky=3, stone=1, attached_node=1}, selection_box = cbox, collision_box = cbox, on_place = function(itemstack, placer, pointed_thing) @@ -37,7 +37,7 @@ minetest.register_node("cavestuff:pebble_2",{ tiles = {"undergrowth_pebble.png"}, paramtype = "light", paramtype2 = "facedir", - groups = {cracky=3, stone=1, not_in_creative_inventory=1}, + groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1}, selection_box = cbox, collision_box = cbox, sounds = default.node_sound_stone_defaults(), @@ -50,7 +50,7 @@ minetest.register_node("cavestuff:desert_pebble_1",{ tiles = {"default_desert_stone.png"}, paramtype = "light", paramtype2 = "facedir", - groups = {cracky=3, stone=1}, + groups = {cracky=3, stone=1, attached_node=1}, selection_box = cbox, collision_box = cbox, on_place = function(itemstack, placer, pointed_thing) @@ -69,7 +69,7 @@ minetest.register_node("cavestuff:desert_pebble_2",{ tiles = {"default_desert_stone.png"}, paramtype = "light", paramtype2 = "facedir", - groups = {cracky=3, stone=1, not_in_creative_inventory=1}, + groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1}, selection_box = cbox, collision_box = cbox, sounds = default.node_sound_stone_defaults(), diff --git a/trunks/generating.lua b/trunks/generating.lua index f077f67..eeb635c 100644 --- a/trunks/generating.lua +++ b/trunks/generating.lua @@ -4,30 +4,44 @@ -- TWiGS ----------------------------------------------------------------------------------------------- -local random = math.random +local fakenode = { + name = "default:stone", -- could be anything that's guaranteed to exist at mapgen time, and isn't buildable_to + param1 = 0, + param2 = 0 +} abstract_trunks.place_twig = function(pos) - local twig_size = random(1,27) + local twig_size = math.random(1,27) - local right_here = {x=pos.x , y=pos.y+1, z=pos.z } - local north = {x=pos.x , y=pos.y+1, z=pos.z+1} - local north_east = {x=pos.x+1, y=pos.y+1, z=pos.z+1} - local east = {x=pos.x+1, y=pos.y+1, z=pos.z } - local south_east = {x=pos.x+1, y=pos.y+1, z=pos.z-1} - local south = {x=pos.x , y=pos.y+1, z=pos.z-1} - local south_west = {x=pos.x-1, y=pos.y+1, z=pos.z-1} - local west = {x=pos.x-1, y=pos.y+1, z=pos.z } - local north_west = {x=pos.x-1, y=pos.y+1, z=pos.z+1} + local right_here = {x=pos.x , y=pos.y+1, z=pos.z } + local north = {x=pos.x , y=pos.y+1, z=pos.z+1} + local north_east = {x=pos.x+1, y=pos.y+1, z=pos.z+1} + local east = {x=pos.x+1, y=pos.y+1, z=pos.z } + local south_east = {x=pos.x+1, y=pos.y+1, z=pos.z-1} + local south = {x=pos.x , y=pos.y+1, z=pos.z-1} + local south_west = {x=pos.x-1, y=pos.y+1, z=pos.z-1} + local west = {x=pos.x-1, y=pos.y+1, z=pos.z } + local north_west = {x=pos.x-1, y=pos.y+1, z=pos.z+1} + + local node_here = minetest.get_node(right_here) + local node_north = minetest.get_node(north) + local node_n_e = minetest.get_node(north_east) + local node_east = minetest.get_node(east) + local node_s_e = minetest.get_node(south_east) + local node_south = minetest.get_node(south) + local node_s_w = minetest.get_node(south_west) + local node_west = minetest.get_node(west) + local node_n_w = minetest.get_node(north_west) + + node_north = minetest.registered_nodes[node_north.name] and node_north or fakenode + node_n_e = minetest.registered_nodes[node_n_e.name] and node_n_e or fakenode + node_east = minetest.registered_nodes[node_east.name] and node_east or fakenode + node_s_e = minetest.registered_nodes[node_s_e.name] and node_s_e or fakenode + node_south = minetest.registered_nodes[node_south.name] and node_south or fakenode + node_s_w = minetest.registered_nodes[node_s_w.name] and node_s_w or fakenode + node_west = minetest.registered_nodes[node_west.name] and node_west or fakenode + node_n_w = minetest.registered_nodes[node_n_w.name] and node_n_w or fakenode - local node_here = minetest.get_node(right_here) - local node_north = minetest.get_node(north) - local node_n_e = minetest.get_node(north_east) - local node_east = minetest.get_node(east) - local node_s_e = minetest.get_node(south_east) - local node_south = minetest.get_node(south) - local node_s_w = minetest.get_node(south_west) - local node_west = minetest.get_node(west) - local node_n_w = minetest.get_node(north_west) -- small twigs if twig_size <= 16 then minetest.swap_node(right_here, {name="trunks:twig_"..random(1,4), param2=random(0,3)}) @@ -357,12 +371,13 @@ biome_lib:register_generate_plant({ if Moss_on_ground == true then abstract_trunks.grow_moss_on_ground = function(pos) local on_ground = {x=pos.x, y=pos.y+1, z=pos.z} - local moss_type = random(1,21) + local moss_type = math.random(1,21) + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(on_ground, {name="trunks:moss_fungus", param2=random(0,3)}) + minetest.swap_node(on_ground, {name="trunks:moss_with_fungus_"..rot, param2=1}) else - minetest.swap_node(on_ground, {name="trunks:moss", param2=random(0,3)}) + minetest.swap_node(on_ground, {name="trunks:moss_plain_"..rot, param2=1}) end end @@ -408,44 +423,49 @@ abstract_trunks.grow_moss_on_trunk = function(pos) local node_under = minetest.get_node(undrneath) --if minetest.get_item_group(node_under.name, "tree") < 1 then - local moss_type = random(1,41) - if minetest.registered_nodes[node_here.name].buildable_to then -- instead of check_air = true, + if minetest.registered_nodes[node_here.name].buildable_to then + local moss_type = math.random(1,41) + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(on_ground, {name="trunks:moss_fungus", param2=random(0,3) --[[1]]}) + minetest.swap_node(on_ground, {name="trunks:moss_with_fungus_"..rot, param2=1}) elseif moss_type < 22 then - minetest.swap_node(on_ground, {name="trunks:moss", param2=random(0,3) --[[1]]}) + minetest.swap_node(on_ground, {name="trunks:moss_plain_"..rot, param2=1}) end end - local moss_type = random(1,31) -- cliche of more moss at north - if minetest.registered_nodes[node_north.name].buildable_to then -- instead of check_air = true, + if minetest.registered_nodes[node_north.name].buildable_to then + local moss_type = math.random(1,31) -- cliche of more moss at north + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(at_side_n, {name="trunks:moss_fungus", param2=random(4,7)}) -- 5,4,6,7 + minetest.swap_node(at_side_n, {name="trunks:moss_with_fungus_"..rot, param2=5}) elseif moss_type < 22 then - minetest.swap_node(at_side_n, {name="trunks:moss", param2=random(4,7)}) + minetest.swap_node(at_side_n, {name="trunks:moss_plain_"..rot, param2=5}) end end - local moss_type = random(1,41) - if minetest.registered_nodes[node_east.name].buildable_to then -- instead of check_air = true, + if minetest.registered_nodes[node_east.name].buildable_to then + local moss_type = math.random(1,41) + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(at_side_e, {name="trunks:moss_fungus", param2=random(12,15)}) + minetest.swap_node(at_side_e, {name="trunks:moss_with_fungus_"..rot, param2=3}) elseif moss_type < 22 then - minetest.swap_node(at_side_e, {name="trunks:moss", param2=random(12,15)}) + minetest.swap_node(at_side_e, {name="trunks:moss_plain_"..rot, param2=3}) end end - local moss_type = random(1,41) - if minetest.registered_nodes[node_south.name].buildable_to then -- instead of check_air = true, + if minetest.registered_nodes[node_south.name].buildable_to then + local moss_type = math.random(1,41) + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(at_side_s, {name="trunks:moss_fungus", param2=random(8,11)}) + minetest.swap_node(at_side_s, {name="trunks:moss_with_fungus_"..rot, param2=4}) elseif moss_type < 22 then - minetest.swap_node(at_side_s, {name="trunks:moss", param2=random(8,11)}) + minetest.swap_node(at_side_s, {name="trunks:moss_plain_"..rot, param2=4}) end end - local moss_type = random(1,41) - if minetest.registered_nodes[node_west.name].buildable_to then -- instead of check_air = true, + if minetest.registered_nodes[node_west.name].buildable_to then + local moss_type = math.random(1,41) + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(at_side_w, {name="trunks:moss_fungus", param2=random(16,19)}) + minetest.swap_node(at_side_w, {name="trunks:moss_with_fungus_"..rot, param2=2}) elseif moss_type < 22 then - minetest.swap_node(at_side_w, {name="trunks:moss", param2=random(16,19)}) + minetest.swap_node(at_side_w, {name="trunks:moss_plain_"..rot, param2=2}) end end --end diff --git a/trunks/nodes.lua b/trunks/nodes.lua index ab273d8..2d826d3 100644 --- a/trunks/nodes.lua +++ b/trunks/nodes.lua @@ -66,42 +66,62 @@ end ----------------------------------------------------------------------------------------------- -- MoSS ----------------------------------------------------------------------------------------------- -local flat_moss = {-1/2, -1/2, -1/2, 1/2, -15/32--[[<-flickers if smaller]], 1/2} +-- wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125}, +-- wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125}, +-- wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375}, -minetest.register_node("trunks:moss", { - description = S("Moss"), - drawtype = "nodebox",--"signlike", - tiles = {"trunks_moss.png"}, - inventory_image = "trunks_moss.png", - wield_image = "trunks_moss.png", - paramtype = "light", - paramtype2 = "facedir",--"wallmounted", - sunlight_propagates = true, - walkable = false, - node_box = {type = "fixed", fixed = flat_moss}, - selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"}, - groups = {snappy = 3, flammable = 3, attached_node = 1 }, - sounds = default.node_sound_leaves_defaults(), -}) +-- was local flat_moss = {-1/2, -1/2, -1/2, 1/2, -15/32, 1/2} ------------------------------------------------------------------------------------------------ --- MoSS & FuNGuS ------------------------------------------------------------------------------------------------ -minetest.register_node("trunks:moss_fungus", { - description = S("Moss with Fungus"), - drawtype = "nodebox",--"signlike", - tiles = {"trunks_moss_fungus.png"}, - inventory_image = "trunks_moss_fungus.png", - wield_image = "trunks_moss_fungus.png", - paramtype = "light", - paramtype2 = "facedir",--"wallmounted", - sunlight_propagates = true, - walkable = false, - node_box = {type = "fixed", fixed = flat_moss}, - selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"}, - groups = {snappy = 3, flammable = 3, attached_node = 1 }, - sounds = default.node_sound_leaves_defaults(), -}) + +local cbox = { + type = "wallmounted", + wall_top = {-1/2, 1/2, -1/2, 1/2, 15/32, 1/2}, + wall_bottom = {-1/2, -1/2, -1/2, 1/2, -15/32, 1/2}, + wall_side = {-1/2, -1/2, -1/2, -15/32, 1/2, 1/2} +} + +for r = 0, 3 do + local xform = "" + if r > 0 then xform = "^[transformR"..r*90 end + + minetest.register_node("trunks:moss_plain_"..r, { + description = S("Moss"), + drawtype = "nodebox", + tiles = {"trunks_moss.png"..xform}, + inventory_image = "trunks_moss.png", + wield_image = "trunks_moss.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + node_box = cbox, + groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r}, + sounds = default.node_sound_leaves_defaults(), + drop = "trunks:moss_plain_0", + }) + + ----------------------------------------------------------------------------------------------- + -- MoSS & FuNGuS + ----------------------------------------------------------------------------------------------- + minetest.register_node("trunks:moss_with_fungus_"..r, { + description = S("Moss with Fungus"), + drawtype = "nodebox", + tiles = {"trunks_moss_fungus.png"..xform}, + inventory_image = "trunks_moss_fungus.png", + wield_image = "trunks_moss_fungus.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + node_box = cbox, + groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r}, + sounds = default.node_sound_leaves_defaults(), + drop = "trunks:moss_with_fungus_0", + }) +end + +minetest.register_alias("trunks:moss_plain", "trunks:moss_plain_0") +minetest.register_alias("trunks:moss_with_fungus", "trunks:moss_with_fungus_0") ----------------------------------------------------------------------------------------------- -- TWiGS BLoCK @@ -363,18 +383,13 @@ for i in pairs(TRuNKS) do choppy=2, oddly_breakable_by_hand=1, flammable=2, + attached_node = 1 --not_in_creative_inventory=1 -- atm in inv for testing }, --drop = "trunks:twig_1", -- not sure about this yet sounds = default.node_sound_wood_defaults(), }) - default.register_leafdecay({ - trunks = { MoD..":"..TRuNK }, - leaves = { "trunks:"..TRuNK.."root" }, - radius = 1, - }) - else minetest.log("error", string.format("[Trunks] warning: tree type '%s:%s' not found", MoD, TRuNK)) end @@ -383,3 +398,26 @@ end end minetest.register_alias("trunks:pine_trunkroot", "trunks:pine_treeroot") + +-- convert moss to wallmounted mode so that attached_node works properly. + +local fdirtowall = { + [0] = 1, + [1] = 5, + [2] = 4, + [3] = 3, + [4] = 2, +} + +minetest.register_lbm({ + name = "trunks:convert_moss_wallmounted", + label = "Convert moss to wallmounted mode", + run_at_every_load = true, + nodenames = {"trunks:moss", "trunks:moss_fungus"}, + action = function(pos, node) + local basedir = math.floor(node.param2 / 4) + local rot = node.param2 % 4 + local newname = node.name == "trunks:moss_fungus" and "trunks:moss_with_fungus" or "trunks:moss_plain" + minetest.set_node(pos, {name = newname.."_"..rot, param2 = fdirtowall[basedir] }) + end +})