Initial commit
							
								
								
									
										0
									
								
								biomes.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										98
									
								
								black_cap.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,98 @@ | ||||
| -- internationalization boilerplate | ||||
| local MP = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local S, NS = dofile(MP.."/intllib.lua") | ||||
|  | ||||
| --stem | ||||
| minetest.register_node("dfcaverns:black_cap_stem", { | ||||
| 	description = S("Black Cap Stem"), | ||||
| 	tiles = {"dfcaverns_black_cap_top.png","dfcaverns_black_cap_top.png","dfcaverns_black_cap_side.png",}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| }) | ||||
|  | ||||
| --cap | ||||
| minetest.register_node("dfcaverns:black_cap", { | ||||
| 	description = S("Black Cap"), | ||||
| 	tiles = {"dfcaverns_black_cap_top.png","dfcaverns_black_cap_top.png","dfcaverns_black_cap_side.png^[transformR90",}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| }) | ||||
|  | ||||
| --gills | ||||
| minetest.register_node("dfcaverns:black_cap_gills", { | ||||
| 	description = S("Black Cap Gills"), | ||||
| 	tiles = {"dfcaverns_black_cap_gills.png"}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
| 	drawtype = "plantlike", | ||||
| 	paramtype = "light", | ||||
| 	drop = { | ||||
| 		max_items = 1, | ||||
| 		items = { | ||||
| 			{ | ||||
| 				items = {'dfcaverns:black_cap_sapling'}, | ||||
| 				rarity = 10, | ||||
| 			}, | ||||
| 			{ | ||||
| 				items = {'dfcaverns:black_cap_gills'}, | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| -- sapling | ||||
| minetest.register_node("dfcaverns:black_cap_sapling", { | ||||
| 	description = S("Black Cap Spawn"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = 1.0, | ||||
| 	tiles = {"dfcaverns_spore_tree_sapling.png"}, | ||||
| 	inventory_image = "dfcaverns_spore_tree_sapling.png", | ||||
| 	wield_image = "dfcaverns_spore_tree_sapling.png", | ||||
| 	paramtype = "light", | ||||
| 	sunlight_propagates = true, | ||||
| 	walkable = false, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} | ||||
| 	}, | ||||
| 	groups = {snappy = 2, dig_immediate = 3, flammable = 2, | ||||
| 		attached_node = 1, sapling = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
|  | ||||
| 	on_construct = function(pos) | ||||
| 		minetest.get_node_timer(pos):start(math.random(dfcaverns.config.black_cap_min_growth_delay,dfcaverns.config.black_cap_max_growth_delay)) | ||||
| 	end, | ||||
| 	 | ||||
| 	on_timer = function(pos) | ||||
| 		minetest.set_node(pos, {name="air"}) | ||||
| 		dfcaverns.spawn_black_cap(pos) | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| dfcaverns.spawn_black_cap = function(pos) | ||||
| 	local x, y, z = pos.x, pos.y, pos.z | ||||
| 	local stem_height = math.random(1,5) | ||||
| 	local cap_radius = math.random(2,3) | ||||
| 	local maxy = y + stem_height + 3 | ||||
| 	 | ||||
| 	local c_stem = minetest.get_content_id("dfcaverns:black_cap_stem") | ||||
| 	local c_cap  = minetest.get_content_id("dfcaverns:black_cap") | ||||
| 	local c_gills  = minetest.get_content_id("dfcaverns:black_cap_gills") | ||||
|  | ||||
| 	local vm = minetest.get_voxel_manip() | ||||
| 	local minp, maxp = vm:read_from_map( | ||||
| 		{x = x - cap_radius, y = y, z = z - cap_radius}, | ||||
| 		{x = x + cap_radius, y = maxy + 3, z = z + cap_radius} | ||||
| 	) | ||||
| 	local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) | ||||
| 	local data = vm:get_data() | ||||
|  | ||||
| 	subterrane:giant_shroom(area:indexp(pos), area, data, c_stem, c_cap, c_gills, stem_height, cap_radius) | ||||
| 	 | ||||
| 	vm:set_data(data) | ||||
| 	vm:write_to_map() | ||||
| 	vm:update_map() | ||||
| end | ||||
							
								
								
									
										118
									
								
								blood_thorn.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,118 @@ | ||||
| -------------------------------------------------- | ||||
| -- Blood thorn | ||||
|  | ||||
| -- Max trunk height 	5 | ||||
| -- red with purple mottling | ||||
| -- High density wood | ||||
| -- Depth 3 | ||||
|  | ||||
| -- internationalization boilerplate | ||||
| local MP = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local S, NS = dofile(MP.."/intllib.lua") | ||||
|  | ||||
| minetest.register_node("dfcaverns:blood_thorn", { | ||||
| 	description = S("Blood Thorn Trunk"), | ||||
| 	tiles = {"dfcaverns_blood_thorn_top.png", "dfcaverns_blood_thorn_top.png", | ||||
| 		"dfcaverns_blood_thorn_side.png"}, | ||||
| 	paramtype2 = "facedir", | ||||
| 	groups = {choppy = 3, flammable = 2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| 	on_place = minetest.rotate_node, | ||||
| }) | ||||
|  | ||||
| minetest.register_node("dfcaverns:blood_thorn_spike", { | ||||
| 	description = S("Blood Thorn Spike"), | ||||
| 	tiles = {"dfcaverns_blood_thorn_spike_side.png^[transformR90", "dfcaverns_blood_thorn_spike_side.png^[transformR270", "dfcaverns_blood_thorn_spike_side.png", "dfcaverns_blood_thorn_spike_side.png^[transformR180", "dfcaverns_blood_thorn_spike_front.png", "dfcaverns_blood_thorn_spike_front.png"}, | ||||
| 	groups = {choppy = 3, flammable = 2, fall_damage_add_percent=100}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| 	drawtype = "nodebox", | ||||
| 	climbable = true, | ||||
| 	damage_per_second = 1, | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	node_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = { | ||||
| 			{-0.1875, -0.1875, 0.1875, 0.1875, 0.1875, 0.5}, -- base | ||||
| 			{-0.125, -0.125, -0.125, 0.125, 0.125, 0.1875}, -- mid | ||||
| 			{-0.0625, -0.0625, -0.5, 0.0625, 0.0625, -0.125}, -- tip | ||||
| 		} | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| local spike_directions = {{x=0,y=0,z=1}, {x=0,y=0,z=-1}, {x=1,y=0,z=0}, {x=-1,y=0,z=0}} | ||||
|  | ||||
| function dfcaverns.grow_blood_thorn(pos, node) | ||||
| 	if node.param2 >= 4 then | ||||
| 		return | ||||
| 	end | ||||
| 	pos.y = pos.y - 1 | ||||
| 	if minetest.get_item_group(minetest.get_node(pos).name, "sand") == 0 then | ||||
| 		return | ||||
| 	end | ||||
| 	pos.y = pos.y + 1 | ||||
| 	local height = 0 | ||||
| 	while node.name == "dfcaverns:blood_thorn" and height < 4 do | ||||
| 		height = height + 1 | ||||
| 		pos.y = pos.y + 1 | ||||
| 		node = minetest.get_node(pos) | ||||
| 	end | ||||
| 	if height == 6 or node.name ~= "air" then | ||||
| 		return | ||||
| 	end | ||||
| --	if minetest.get_node_light(pos) < 13 then | ||||
| --		return | ||||
| --	end | ||||
| 	minetest.set_node(pos, {name = "dfcaverns:blood_thorn"}) | ||||
| 	 | ||||
| 	local dir = spike_directions[math.random(1,4)] | ||||
| 	local spike_pos = vector.add(pos, dir) | ||||
| 	if minetest.get_node(spike_pos).name == "air" then | ||||
| 		local facedir = minetest.dir_to_facedir(vector.multiply(dir, -1)) | ||||
| 		minetest.set_node(spike_pos, {name="dfcaverns:blood_thorn_spike", param2=facedir}) | ||||
| 	end | ||||
| 	dir = spike_directions[math.random(1,4)] | ||||
| 	spike_pos = vector.add(pos, dir) | ||||
| 	if minetest.get_node(spike_pos).name == "air" then | ||||
| 		local facedir = minetest.dir_to_facedir(vector.multiply(dir, -1)) | ||||
| 		minetest.set_node(spike_pos, {name="dfcaverns:blood_thorn_spike", param2=facedir}) | ||||
| 	end | ||||
| 	return true | ||||
| end | ||||
|  | ||||
| minetest.register_abm({ | ||||
| 	label = "Grow Blood Thorn", | ||||
| 	nodenames = {"dfcaverns:blood_thorn"}, | ||||
| 	catch_up = true, | ||||
| 	neighbors = {"group:sand"}, | ||||
| 	interval = dfcaverns.config.blood_thorn_growth_interval, | ||||
| 	chance = dfcaverns.config.blood_thorn_growth_chance, | ||||
| 	action = function(pos, node) | ||||
| 		dfcaverns.grow_blood_thorn(pos, node) | ||||
| 	end | ||||
| }) | ||||
|  | ||||
| function dfcaverns.spawn_blood_thorn(pos) | ||||
| 	local height = math.random(3,5) | ||||
| 	for i = 0, height do | ||||
| 		if minetest.get_node(pos).name == "air" then | ||||
| 			minetest.set_node(pos, {name="dfcaverns:blood_thorn"}) | ||||
| 			 | ||||
| 			local dir = spike_directions[math.random(1,4)] | ||||
| 			local spike_pos = vector.add(pos, dir) | ||||
| 			if minetest.get_node(spike_pos).name == "air" then | ||||
| 				local facedir = minetest.dir_to_facedir(vector.multiply(dir, -1)) | ||||
| 				minetest.set_node(spike_pos, {name="dfcaverns:blood_thorn_spike", param2=facedir}) | ||||
| 			end | ||||
| 			dir = spike_directions[math.random(1,4)] | ||||
| 			spike_pos = vector.add(pos, dir) | ||||
| 			if minetest.get_node(spike_pos).name == "air" then | ||||
| 				local facedir = minetest.dir_to_facedir(vector.multiply(dir, -1)) | ||||
| 				minetest.set_node(spike_pos, {name="dfcaverns:blood_thorn_spike", param2=facedir}) | ||||
| 			end | ||||
| 		else | ||||
| 			break | ||||
| 		end | ||||
| 		pos.y = pos.y + 1 | ||||
| 	end | ||||
| end | ||||
							
								
								
									
										46
									
								
								config.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,46 @@ | ||||
| local CONFIG_FILE_PREFIX = "dfcaverns_" | ||||
|  | ||||
| dfcaverns.config = {} | ||||
|  | ||||
| local print_settingtypes = true | ||||
|  | ||||
| local function setting(stype, name, default, description) | ||||
| 	local value | ||||
| 	if stype == "bool" then | ||||
| 		value = minetest.setting_getbool(CONFIG_FILE_PREFIX..name) | ||||
| 	elseif stype == "string" then | ||||
| 		value = minetest.setting_get(CONFIG_FILE_PREFIX..name) | ||||
| 	elseif stype == "int" or stype == "float" then | ||||
| 		value = tonumber(minetest.setting_get(CONFIG_FILE_PREFIX..name)) | ||||
| 	end | ||||
| 	if value == nil then | ||||
| 		value = default | ||||
| 	end | ||||
| 	dfcaverns.config[name] = value | ||||
| 	 | ||||
| 	if print_settingtypes then | ||||
| 		minetest.debug(CONFIG_FILE_PREFIX..name.." ("..description..") "..stype.." "..tostring(default)) | ||||
| 	end	 | ||||
| end | ||||
|  | ||||
| local trees = { | ||||
| 	{name="fungiwood", min_delay=2400, max_delay=4800, min_depth=-100, max_depth=-31000}, | ||||
| 	{name="tunnel_tube", min_delay=2400, max_delay=4800, min_depth=-100, max_depth=-31000}, | ||||
| 	{name="spore_tree", min_delay=2400, max_delay=4800, min_depth=-100, max_depth=-31000}, | ||||
| 	{name="black_cap", min_delay=2400, max_delay=4800, min_depth=-100, max_depth=-31000}, | ||||
| 	{name="nether_cap", min_delay=2400, max_delay=4800, min_depth=-100, max_depth=-31000}, | ||||
| 	{name="goblin_cap", min_delay=2400, max_delay=4800, min_depth=-100, max_depth=-31000}, | ||||
| 	{name="tower_cap", min_delay=2400, max_delay=4800, min_depth=-100, max_depth=-31000}, | ||||
| } | ||||
|  | ||||
| for _, tree in pairs(trees) do | ||||
| 	setting("int", tree.name.."_min_growth_delay", tree.min_delay, tree.name.." minimum sapling growth delay") | ||||
| 	setting("int", tree.name.."_max_growth_delay", tree.max_delay, tree.name.." maximum sapling growth delay") | ||||
| 	setting("int", tree.name.."_min_depth", tree.min_depth, tree.name.." minimum sapling growth depth") | ||||
| 	setting("int", tree.name.."_max_depth", tree.max_depth, tree.name.." maximum sapling growth depth") | ||||
| end | ||||
|  | ||||
| setting("int", "blood_thorn_growth_interval", 12, "blood_thorn growth ABM interval") | ||||
| setting("int", "blood_thorn_growth_chance", 83, "blood_thorn growth ABM interval") | ||||
| setting("int", "blood_thorn_min_depth", -100, "blood_thorn minimum sapling growth depth") | ||||
| setting("int", "blood_thorn_max_depth", -31000, "blood_thorn maximum sapling growth depth") | ||||
							
								
								
									
										3
									
								
								depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | ||||
| default | ||||
| subterrane | ||||
| farming | ||||
							
								
								
									
										173
									
								
								fungiwood.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,173 @@ | ||||
| -------------------------------------------------- | ||||
| -- Fungiwood | ||||
|  | ||||
| -- fine grain | ||||
| -- Max trunk height 	8  | ||||
| -- depth 1-2 | ||||
|  | ||||
| -- internationalization boilerplate | ||||
| local MP = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local S, NS = dofile(MP.."/intllib.lua") | ||||
|  | ||||
| minetest.register_node("dfcaverns:fungiwood", { | ||||
| 	description = S("Fungiwood Trunk"), | ||||
| 	tiles = {"dfcaverns_fungiwood.png"}, | ||||
| 	paramtype2 = "facedir", | ||||
| 	is_ground_content = false, | ||||
| 	groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
|  | ||||
| 	on_place = minetest.rotate_node | ||||
| }) | ||||
|  | ||||
| minetest.register_node("dfcaverns:fungiwood_shelf",{ | ||||
| 	description = S("Fungiwood Shelf"), | ||||
| 	tiles = {"dfcaverns_fungiwood.png", "dfcaverns_fungiwood_shelf_underside.png", "dfcaverns_fungiwood.png"}, | ||||
| 	drawtype = "nodebox", | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	node_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = { | ||||
| 			{-0.5, 0.375, -0.5, 0.5, 0.5, 0.5}, -- NodeBox1 | ||||
| 			{-0.5, 0.3125, -0.0625, 0.5, 0.375, 0.0625}, -- NodeBox2 | ||||
| 			{-0.0625, 0.3125, -0.5, 0.0625, 0.375, 0.5}, -- NodeBox3 | ||||
| 		} | ||||
| 	}, | ||||
| 	is_ground_content = false, | ||||
| 	groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, | ||||
| 	drop = { | ||||
| 		max_items = 1, | ||||
| 		items = { | ||||
| 			{items = {"dfcaverns:fungiwood_sapling"}, rarity = 20}, | ||||
| 			{items = {"dfcaverns:fungiwood_shelf"}} | ||||
| 		} | ||||
| 	}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
|  | ||||
| 	after_place_node = default.after_place_leaves, | ||||
| }) | ||||
|  | ||||
|  | ||||
| minetest.register_node("dfcaverns:fungiwood_sapling", { | ||||
| 	description = S("Fungiwood Spawn"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = 1.0, | ||||
| 	tiles = {"dfcaverns_fungiwood_sapling.png"}, | ||||
| 	inventory_image = "dfcaverns_fungiwood_sapling.png", | ||||
| 	wield_image = "dfcaverns_fungiwood_sapling.png", | ||||
| 	paramtype = "light", | ||||
| 	sunlight_propagates = true, | ||||
| 	walkable = false, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} | ||||
| 	}, | ||||
| 	groups = {snappy = 2, dig_immediate = 3, flammable = 2, | ||||
| 		attached_node = 1, sapling = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
|  | ||||
| 	on_construct = function(pos) | ||||
| 		minetest.get_node_timer(pos):start(math.random(dfcaverns.config.fungiwood_min_growth_delay,dfcaverns.config.fungiwood_max_growth_delay)) | ||||
| 	end, | ||||
| 	 | ||||
| 	on_timer = function(pos) | ||||
| 		minetest.set_node(pos, {name="air"}) | ||||
| 		dfcaverns.spawn_fungiwood(pos) | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| function dfcaverns.spawn_fungiwood(pos) | ||||
| 	local x, y, z = pos.x, pos.y, pos.z | ||||
| 	local maxy = y + math.random(6, 10) -- Trunk top | ||||
|  | ||||
| 	local c_air = minetest.get_content_id("air") | ||||
| 	local c_ignore = minetest.get_content_id("ignore") | ||||
| 	local c_fungiwood = minetest.get_content_id("dfcaverns:fungiwood") | ||||
| 	local c_fungiwood_shelf  = minetest.get_content_id("dfcaverns:fungiwood_shelf") | ||||
|  | ||||
| 	local vm = minetest.get_voxel_manip() | ||||
| 	local minp, maxp = vm:read_from_map( | ||||
| 		{x = x - 3, y = y, z = z - 3}, | ||||
| 		{x = x + 3, y = maxy + 3, z = z + 3} | ||||
| 	) | ||||
| 	local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) | ||||
| 	local data = vm:get_data() | ||||
|  | ||||
| 	-- Upper branches layer | ||||
| 	local dev = 3 | ||||
| 	for yy = maxy - 2, maxy do | ||||
| 		for zz = z - dev, z + dev do | ||||
| 			local vi = a:index(x - dev, yy, zz) | ||||
| 			local via = a:index(x - dev, yy + 1, zz) | ||||
| 			for xx = x - dev, x + dev do | ||||
| 				if math.random() < 0.95 - dev * 0.05 then | ||||
| 					local node_id = data[vi] | ||||
| 					if node_id == c_air or node_id == c_ignore then | ||||
| 						data[vi] = c_fungiwood_shelf | ||||
| 					end | ||||
| 				end | ||||
| 				vi  = vi + 1 | ||||
| 				via = via + 1 | ||||
| 			end | ||||
| 		end | ||||
| 		dev = dev - 1 | ||||
| 	end | ||||
|  | ||||
| 	-- Lower branches layer | ||||
| 	local my = 0 | ||||
| 	for i = 1, 20 do -- Random 2x2 squares of shelf | ||||
| 		local xi = x + math.random(-3, 2) | ||||
| 		local yy = maxy + math.random(-6, -5) | ||||
| 		local zi = z + math.random(-3, 2) | ||||
| 		if yy > my then | ||||
| 			my = yy | ||||
| 		end | ||||
| 		for zz = zi, zi+1 do | ||||
| 			local vi = a:index(xi, yy, zz) | ||||
| 			local via = a:index(xi, yy + 1, zz) | ||||
| 			for xx = xi, xi + 1 do | ||||
| 				local node_id = data[vi] | ||||
| 				if node_id == c_air or node_id == c_ignore then | ||||
| 					data[vi] = c_fungiwood_shelf | ||||
| 				end | ||||
| 				vi  = vi + 1 | ||||
| 				via = via + 1 | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	dev = 2 | ||||
| 	for yy = my + 1, my + 2 do | ||||
| 		for zz = z - dev, z + dev do | ||||
| 			local vi = a:index(x - dev, yy, zz) | ||||
| 			local via = a:index(x - dev, yy + 1, zz) | ||||
| 			for xx = x - dev, x + dev do | ||||
| 				if math.random() < 0.95 - dev * 0.05 then | ||||
| 					local node_id = data[vi] | ||||
| 					if node_id == c_air or node_id == c_ignore then | ||||
| 						data[vi] = c_fungiwood_shelf | ||||
| 					end | ||||
| 				end | ||||
| 				vi  = vi + 1 | ||||
| 				via = via + 1 | ||||
| 			end | ||||
| 		end | ||||
| 		dev = dev - 1 | ||||
| 	end | ||||
|  | ||||
| 	-- Trunk | ||||
| 	for yy = y, maxy do | ||||
| 		local vi = a:index(x, yy, z) | ||||
| 		local node_id = data[vi] | ||||
| 		if node_id == c_air or node_id == c_ignore or | ||||
| 				node_id == c_fungiwood_shelf then | ||||
| 			data[vi] = c_fungiwood | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	vm:set_data(data) | ||||
| 	vm:write_to_map() | ||||
| 	vm:update_map() | ||||
| end | ||||
|  | ||||
							
								
								
									
										98
									
								
								goblin_cap.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,98 @@ | ||||
| -- internationalization boilerplate | ||||
| local MP = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local S, NS = dofile(MP.."/intllib.lua") | ||||
|  | ||||
| --stem | ||||
| minetest.register_node("dfcaverns:goblin_cap_stem", { | ||||
| 	description = S("Goblin Cap Stem"), | ||||
| 	tiles = {"dfcaverns_goblin_cap_stem.png"}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| }) | ||||
|  | ||||
| --cap | ||||
| minetest.register_node("dfcaverns:goblin_cap", { | ||||
| 	description = S("Goblin Cap"), | ||||
| 	tiles = {"dfcaverns_goblin_cap.png"}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| }) | ||||
|  | ||||
| --gills | ||||
| minetest.register_node("dfcaverns:goblin_cap_gills", { | ||||
| 	description = S("Goblin Cap Gills"), | ||||
| 	tiles = {"dfcaverns_goblin_cap_gills.png"}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
| 	drawtype = "plantlike", | ||||
| 	paramtype = "light", | ||||
| 	drop = { | ||||
| 		max_items = 1, | ||||
| 		items = { | ||||
| 			{ | ||||
| 				items = {'dfcaverns:goblin_cap_sapling'}, | ||||
| 				rarity = 15, | ||||
| 			}, | ||||
| 			{ | ||||
| 				items = {'dfcaverns:goblin_cap_gills'}, | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| -- sapling | ||||
| minetest.register_node("dfcaverns:goblin_cap_sapling", { | ||||
| 	description = S("Goblin Cap Spawn"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = 1.0, | ||||
| 	tiles = {"dfcaverns_spore_tree_sapling.png"}, | ||||
| 	inventory_image = "dfcaverns_spore_tree_sapling.png", | ||||
| 	wield_image = "dfcaverns_spore_tree_sapling.png", | ||||
| 	paramtype = "light", | ||||
| 	sunlight_propagates = true, | ||||
| 	walkable = false, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} | ||||
| 	}, | ||||
| 	groups = {snappy = 2, dig_immediate = 3, flammable = 2, | ||||
| 		attached_node = 1, sapling = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
|  | ||||
| 	on_construct = function(pos) | ||||
| 		minetest.get_node_timer(pos):start(math.random(dfcaverns.config.goblin_cap_min_growth_delay,dfcaverns.config.goblin_cap_max_growth_delay)) | ||||
| 	end, | ||||
| 	 | ||||
| 	on_timer = function(pos) | ||||
| 		minetest.set_node(pos, {name="air"}) | ||||
| 		dfcaverns.spawn_goblin_cap(pos) | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| dfcaverns.spawn_goblin_cap = function(pos) | ||||
| 	local x, y, z = pos.x, pos.y, pos.z | ||||
| 	local stem_height = math.random(1,3) | ||||
| 	local cap_radius = math.random(3,6) | ||||
| 	local maxy = y + stem_height + 3 | ||||
| 	 | ||||
| 	local c_stem = minetest.get_content_id("dfcaverns:goblin_cap_stem") | ||||
| 	local c_cap  = minetest.get_content_id("dfcaverns:goblin_cap") | ||||
| 	local c_gills  = minetest.get_content_id("dfcaverns:goblin_cap_gills") | ||||
|  | ||||
| 	local vm = minetest.get_voxel_manip() | ||||
| 	local minp, maxp = vm:read_from_map( | ||||
| 		{x = x - cap_radius, y = y, z = z - cap_radius}, | ||||
| 		{x = x + cap_radius, y = maxy + 3, z = z + cap_radius} | ||||
| 	) | ||||
| 	local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) | ||||
| 	local data = vm:get_data() | ||||
|  | ||||
| 	subterrane:giant_shroom(area:indexp(pos), area, data, c_stem, c_cap, c_gills, stem_height, cap_radius) | ||||
| 	 | ||||
| 	vm:set_data(data) | ||||
| 	vm:write_to_map() | ||||
| 	vm:update_map() | ||||
| end | ||||
							
								
								
									
										55
									
								
								ground_cover.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,55 @@ | ||||
| -- internationalization boilerplate | ||||
| local MP = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local S, NS = dofile(MP.."/intllib.lua") | ||||
|  | ||||
| -------------------------------------------------- | ||||
| -- Cave moss | ||||
|  | ||||
| -- cyan/dark cyan | ||||
|  | ||||
| minetest.register_node("dfcaverns:cobble_cave_moss", { | ||||
| 	description = S("Cobblestone With Cave Moss"), | ||||
| 	tiles = {"default_cobble.png^dfcaverns_cave_moss.png", "default_cobble.png", "default_cobble.png^dfcaverns_cave_moss_side.png"}, | ||||
| 	drop = "default:cobble", | ||||
| 	is_ground_content = false, | ||||
| 	groups = {cracky = 3, stone = 2}, | ||||
| 	sounds = default.node_sound_stone_defaults(), | ||||
| }) | ||||
|  | ||||
| minetest.register_abm{ | ||||
| 	label = "cave moss spread", | ||||
| 	nodenames = {"default:cobble"}, | ||||
| 	neighbors = {"dfcaverns:cobble_cave_moss"}, | ||||
| 	interval = 30, | ||||
| 	chance = 10, | ||||
| 	catch_up = true, | ||||
| 	action = function(pos) | ||||
| 		minetest.swap_node(pos, {name="dfcaverns:cobble_cave_moss"}) | ||||
| 	end, | ||||
| } | ||||
|  | ||||
| -------------------------------------------------- | ||||
| -- floor fungus | ||||
|  | ||||
| -- white/yellow | ||||
|  | ||||
| minetest.register_node("dfcaverns:cobble_floor_fungus", { | ||||
| 	description = S("Cobblestone With Floor Fungus"), | ||||
| 	tiles = {"default_cobble.png^dfcaverns_floor_fungus.png", "default_cobble.png", "default_cobble.png^dfcaverns_floor_fungus_side.png"}, | ||||
| 	drops= "default:cobble", | ||||
| 	is_ground_content = false, | ||||
| 	groups = {cracky = 3, stone = 2}, | ||||
| 	sounds = default.node_sound_stone_defaults(), | ||||
| }) | ||||
|  | ||||
| minetest.register_abm{ | ||||
| 	label = "floor fungus spread", | ||||
| 	nodenames = {"default:cobble"}, | ||||
| 	neighbors = {"dfcaverns:cobble_floor_fungus"}, | ||||
| 	interval = 30, | ||||
| 	chance = 10, | ||||
| 	catch_up = true, | ||||
| 	action = function(pos) | ||||
| 		minetest.swap_node(pos, {name="dfcaverns:cobble_floor_fungus"}) | ||||
| 	end, | ||||
| } | ||||
							
								
								
									
										20
									
								
								init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,20 @@ | ||||
| dfcaverns = {} | ||||
|  | ||||
| --grab a shorthand for the filepath of the mod | ||||
| local modpath = minetest.get_modpath(minetest.get_current_modname()) | ||||
|  | ||||
| --load companion lua files | ||||
| dofile(modpath.."/config.lua") | ||||
|  | ||||
| dofile(modpath.."/ground_cover.lua") | ||||
| dofile(modpath.."/plants.lua") | ||||
|  | ||||
| -- Trees | ||||
| dofile(modpath.."/blood_thorn.lua") | ||||
| dofile(modpath.."/fungiwood.lua") | ||||
| dofile(modpath.."/tunnel_tube.lua") | ||||
| dofile(modpath.."/spore_tree.lua") | ||||
| dofile(modpath.."/black_cap.lua") | ||||
| dofile(modpath.."/nether_cap.lua") | ||||
| dofile(modpath.."/goblin_cap.lua") | ||||
| dofile(modpath.."/tower_cap.lua") | ||||
							
								
								
									
										45
									
								
								intllib.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,45 @@ | ||||
|  | ||||
| -- Fallback functions for when `intllib` is not installed. | ||||
| -- Code released under Unlicense <http://unlicense.org>. | ||||
|  | ||||
| -- Get the latest version of this file at: | ||||
| --   https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua | ||||
|  | ||||
| local function format(str, ...) | ||||
| 	local args = { ... } | ||||
| 	local function repl(escape, open, num, close) | ||||
| 		if escape == "" then | ||||
| 			local replacement = tostring(args[tonumber(num)]) | ||||
| 			if open == "" then | ||||
| 				replacement = replacement..close | ||||
| 			end | ||||
| 			return replacement | ||||
| 		else | ||||
| 			return "@"..open..num..close | ||||
| 		end | ||||
| 	end | ||||
| 	return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) | ||||
| end | ||||
|  | ||||
| local gettext, ngettext | ||||
| if minetest.get_modpath("intllib") then | ||||
| 	if intllib.make_gettext_pair then | ||||
| 		-- New method using gettext. | ||||
| 		gettext, ngettext = intllib.make_gettext_pair() | ||||
| 	else | ||||
| 		-- Old method using text files. | ||||
| 		gettext = intllib.Getter() | ||||
| 	end | ||||
| end | ||||
|  | ||||
| -- Fill in missing functions. | ||||
|  | ||||
| gettext = gettext or function(msgid, ...) | ||||
| 	return format(msgid, ...) | ||||
| end | ||||
|  | ||||
| ngettext = ngettext or function(msgid, msgid_plural, n, ...) | ||||
| 	return format(n==1 and msgid or msgid_plural, ...) | ||||
| end | ||||
|  | ||||
| return gettext, ngettext | ||||
							
								
								
									
										122
									
								
								nether_cap.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,122 @@ | ||||
| -- internationalization boilerplate | ||||
| local MP = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local S, NS = dofile(MP.."/intllib.lua") | ||||
|  | ||||
| --stem | ||||
| minetest.register_node("dfcaverns:nether_cap_stem", { | ||||
| 	description = S("Nether Cap Stem"), | ||||
| 	tiles = {"dfcaverns_nether_cap_stem.png"}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, puts_out_fire = 1, cools_lava = 1}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| }) | ||||
|  | ||||
| --cap | ||||
| minetest.register_node("dfcaverns:nether_cap", { | ||||
| 	description = S("Nether Cap"), | ||||
| 	tiles = {"dfcaverns_nether_cap.png"}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, puts_out_fire = 1, cools_lava = 1 }, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| }) | ||||
|  | ||||
| --gills | ||||
| minetest.register_node("dfcaverns:nether_cap_gills", { | ||||
| 	description = S("Nether Cap Gills"), | ||||
| 	tiles = {"dfcaverns_nether_cap_gills.png"}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {snappy = 3, leafdecay = 3, leaves = 1, puts_out_fire = 1, cools_lava = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
| 	drawtype = "plantlike", | ||||
| 	paramtype = "light", | ||||
| 	drop = { | ||||
| 		max_items = 1, | ||||
| 		items = { | ||||
| 			{ | ||||
| 				items = {'dfcaverns:nether_cap_sapling'}, | ||||
| 				rarity = 10, | ||||
| 			}, | ||||
| 			{ | ||||
| 				items = {'dfcaverns:nether_cap_gills'}, | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| -- sapling | ||||
| minetest.register_node("dfcaverns:nether_cap_sapling", { | ||||
| 	description = S("Nether Cap Spawn"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = 1.0, | ||||
| 	tiles = {"dfcaverns_spore_tree_sapling.png"}, | ||||
| 	inventory_image = "dfcaverns_spore_tree_sapling.png", | ||||
| 	wield_image = "dfcaverns_spore_tree_sapling.png", | ||||
| 	paramtype = "light", | ||||
| 	sunlight_propagates = true, | ||||
| 	walkable = false, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} | ||||
| 	}, | ||||
| 	groups = {snappy = 2, dig_immediate = 3,  | ||||
| 		attached_node = 1, sapling = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
|  | ||||
| 	on_construct = function(pos) | ||||
| 		minetest.get_node_timer(pos):start(math.random(dfcaverns.config.nether_cap_min_growth_delay,dfcaverns.config.nether_cap_max_growth_delay)) | ||||
| 	end, | ||||
| 	 | ||||
| 	on_timer = function(pos) | ||||
| 		minetest.set_node(pos, {name="air"}) | ||||
| 		dfcaverns.spawn_nether_cap(pos) | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| dfcaverns.spawn_nether_cap = function(pos) | ||||
| 	local x, y, z = pos.x, pos.y, pos.z | ||||
| 	local stem_height = math.random(1,3) | ||||
| 	local cap_radius = math.random(2,3) | ||||
| 	local maxy = y + stem_height + 3 | ||||
| 	 | ||||
| 	local c_stem = minetest.get_content_id("dfcaverns:nether_cap_stem") | ||||
| 	local c_cap  = minetest.get_content_id("dfcaverns:nether_cap") | ||||
| 	local c_gills  = minetest.get_content_id("dfcaverns:nether_cap_gills") | ||||
|  | ||||
| 	local vm = minetest.get_voxel_manip() | ||||
| 	local minp, maxp = vm:read_from_map( | ||||
| 		{x = x - cap_radius, y = y, z = z - cap_radius}, | ||||
| 		{x = x + cap_radius, y = maxy + 3, z = z + cap_radius} | ||||
| 	) | ||||
| 	local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) | ||||
| 	local data = vm:get_data() | ||||
|  | ||||
| 	subterrane:giant_shroom(area:indexp(pos), area, data, c_stem, c_cap, c_gills, stem_height, cap_radius) | ||||
| 	 | ||||
| 	vm:set_data(data) | ||||
| 	vm:write_to_map() | ||||
| 	vm:update_map() | ||||
| end | ||||
|  | ||||
| minetest.register_abm{ | ||||
| 	label = "nether cap water freezing", | ||||
| 	nodenames = {"default:water_source", "default:river_water_source",}, | ||||
| 	neighbors = {"dfcaverns:nether_cap_stem", "dfcaverns:nether_cap", "dfcaverns:nether_cap_gills"}, | ||||
| 	interval = 1, | ||||
| 	chance = 5, | ||||
| 	catch_up = true, | ||||
| 	action = function(pos) | ||||
| 		minetest.swap_node(pos, {name="default:ice"}) | ||||
| 	end, | ||||
| } | ||||
|  | ||||
| minetest.register_abm{ | ||||
| 	label = "nether cap flowing water freezing", | ||||
| 	nodenames = {"default:water_flowing",  "default:river_water_flowing"}, | ||||
| 	neighbors = {"dfcaverns:nether_cap_stem", "dfcaverns:nether_cap", "dfcaverns:nether_cap_gills"}, | ||||
| 	interval = 1, | ||||
| 	chance = 1, | ||||
| 	catch_up = true, | ||||
| 	action = function(pos) | ||||
| 		minetest.swap_node(pos, {name="default:snow"}) | ||||
| 	end, | ||||
| } | ||||
							
								
								
									
										50
									
								
								plants.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,50 @@ | ||||
| -- internationalization boilerplate | ||||
| local MP = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local S, NS = dofile(MP.."/intllib.lua") | ||||
|  | ||||
| ----------------------------------------------------------------------- | ||||
| -- Plants | ||||
|  | ||||
|  | ||||
| -------------------------------------------------- | ||||
| -- Cave wheat | ||||
|  | ||||
| -- stalks. White | ||||
|  | ||||
| farming.register_plant("dfcaverns:cave_wheat", { | ||||
| 	description = "Cave wheat seed", | ||||
| 	paramtype2 = "meshoptions", | ||||
| 	inventory_image = "dfcaverns_cave_wheat_seed.png", | ||||
| 	steps = 8, | ||||
| 	minlight = 0, | ||||
| 	maxlight = 8, | ||||
| 	fertility = {"grassland", "desert"}, | ||||
| 	groups = {flammable = 4}, | ||||
| 	place_param2 = 3, | ||||
| }) | ||||
|  | ||||
| -------------------------------------------------- | ||||
| -- Dimple cup | ||||
|  | ||||
| -- royal blue | ||||
|  | ||||
| -------------------------------------------------- | ||||
| -- Pig tail | ||||
|  | ||||
| -- Twisting stalks. Gray | ||||
|  | ||||
| -------------------------------------------------- | ||||
| -- Plump helmet | ||||
|  | ||||
| -- Purple, rounded tops | ||||
|  | ||||
| -------------------------------------------------- | ||||
| -- Quarry Bush | ||||
|  | ||||
| -- Gray leaves | ||||
| -- Produces rock nuts | ||||
|  | ||||
| -------------------------------------------------- | ||||
| -- Sweet Pod | ||||
|  | ||||
| -- Round shape, red | ||||
							
								
								
									
										32
									
								
								settingtypes.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,32 @@ | ||||
| dfcaverns_fungiwood_min_growth_delay (fungiwood minimum sapling growth delay) int 2400 | ||||
| dfcaverns_fungiwood_max_growth_delay (fungiwood maximum sapling growth delay) int 4800 | ||||
| dfcaverns_fungiwood_min_depth (fungiwood minimum sapling growth depth) int -100 | ||||
| dfcaverns_fungiwood_max_depth (fungiwood maximum sapling growth depth) int -31000 | ||||
| dfcaverns_tunnel_tube_min_growth_delay (tunnel_tube minimum sapling growth delay) int 2400 | ||||
| dfcaverns_tunnel_tube_max_growth_delay (tunnel_tube maximum sapling growth delay) int 4800 | ||||
| dfcaverns_tunnel_tube_min_depth (tunnel_tube minimum sapling growth depth) int -100 | ||||
| dfcaverns_tunnel_tube_max_depth (tunnel_tube maximum sapling growth depth) int -31000 | ||||
| dfcaverns_spore_tree_min_growth_delay (spore_tree minimum sapling growth delay) int 2400 | ||||
| dfcaverns_spore_tree_max_growth_delay (spore_tree maximum sapling growth delay) int 4800 | ||||
| dfcaverns_spore_tree_min_depth (spore_tree minimum sapling growth depth) int -100 | ||||
| dfcaverns_spore_tree_max_depth (spore_tree maximum sapling growth depth) int -31000 | ||||
| dfcaverns_black_cap_min_growth_delay (black_cap minimum sapling growth delay) int 2400 | ||||
| dfcaverns_black_cap_max_growth_delay (black_cap maximum sapling growth delay) int 4800 | ||||
| dfcaverns_black_cap_min_depth (black_cap minimum sapling growth depth) int -100 | ||||
| dfcaverns_black_cap_max_depth (black_cap maximum sapling growth depth) int -31000 | ||||
| dfcaverns_nether_cap_min_growth_delay (nether_cap minimum sapling growth delay) int 2400 | ||||
| dfcaverns_nether_cap_max_growth_delay (nether_cap maximum sapling growth delay) int 4800 | ||||
| dfcaverns_nether_cap_min_depth (nether_cap minimum sapling growth depth) int -100 | ||||
| dfcaverns_nether_cap_max_depth (nether_cap maximum sapling growth depth) int -31000 | ||||
| dfcaverns_goblin_cap_min_growth_delay (goblin_cap minimum sapling growth delay) int 2400 | ||||
| dfcaverns_goblin_cap_max_growth_delay (goblin_cap maximum sapling growth delay) int 4800 | ||||
| dfcaverns_goblin_cap_min_depth (goblin_cap minimum sapling growth depth) int -100 | ||||
| dfcaverns_goblin_cap_max_depth (goblin_cap maximum sapling growth depth) int -31000 | ||||
| dfcaverns_tower_cap_min_growth_delay (tower_cap minimum sapling growth delay) int 2400 | ||||
| dfcaverns_tower_cap_max_growth_delay (tower_cap maximum sapling growth delay) int 4800 | ||||
| dfcaverns_tower_cap_min_depth (tower_cap minimum sapling growth depth) int -100 | ||||
| dfcaverns_tower_cap_max_depth (tower_cap maximum sapling growth depth) int -31000 | ||||
| dfcaverns_blood_thorn_growth_interval (blood_thorn growth ABM interval) int 12 | ||||
| dfcaverns_blood_thorn_growth_chance (blood_thorn growth ABM interval) int 83 | ||||
| dfcaverns_blood_thorn_min_depth (blood_thorn minimum sapling growth depth) int -100 | ||||
| dfcaverns_blood_thorn_max_depth (blood_thorn maximum sapling growth depth) int -31000 | ||||
							
								
								
									
										166
									
								
								spore_tree.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,166 @@ | ||||
| -------------------------------------------------- | ||||
| -- Spore Tree | ||||
|  | ||||
| -- Teal | ||||
| -- raining spores | ||||
| -- Max trunk height 	5 | ||||
| -- depth 2-3 | ||||
|  | ||||
| -- internationalization boilerplate | ||||
| local MP = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local S, NS = dofile(MP.."/intllib.lua") | ||||
|  | ||||
| minetest.register_node("dfcaverns:spore_tree", { | ||||
| 	description = S("Spore Tree"), | ||||
| 	tiles = {"dfcaverns_spore_tree_top.png", "dfcaverns_spore_tree_top.png", "dfcaverns_spore_tree.png"}, | ||||
| 	paramtype2 = "facedir", | ||||
| 	is_ground_content = false, | ||||
| 	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
|  | ||||
| 	on_place = minetest.rotate_node, | ||||
| 	 | ||||
| 	on_rightclick = function(pos, node, player, itemstack, pointed_thing) | ||||
| 		minetest.set_node(pos, {name="air"}) | ||||
| 		minetest.spawn_tree(pos, dfcaverns.spore_tree_model) | ||||
| 	end, | ||||
| 	 | ||||
| }) | ||||
|  | ||||
| minetest.register_node("dfcaverns:spore_tree_frond", { | ||||
| 	description = S("Spore Tree Frond"), | ||||
| 	waving = 1, | ||||
| 	tiles = {"dfcaverns_spore_tree.png"}, | ||||
| 	is_ground_content = false, | ||||
| 	groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, | ||||
| 	walkable = false, | ||||
| 	climbable = true, | ||||
| 	 | ||||
| 	drawtype = "nodebox", | ||||
| 	paramtype = "light", | ||||
| 	node_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = { | ||||
| 			{-0.0625, -0.5, -0.0625, 0.0625, 0.5, 0.0625}, | ||||
| 			{-0.0625, -0.0625, -0.5, 0.0625, 0.0625, 0.5}, | ||||
| 			{-0.5, -0.0625, -0.0625, 0.5, 0.0625, 0.0625}, | ||||
| 		} | ||||
| 	}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
|  | ||||
| 	after_place_node = default.after_place_leaves, | ||||
| }) | ||||
|  | ||||
| minetest.register_node("dfcaverns:spore_tree_pod", { | ||||
| 	description = S("Spore Tree Fruiting Body"), | ||||
| 	waving = 1, | ||||
| 	tiles = {"dfcaverns_spore_tree.png"}, | ||||
| 	is_ground_content = false, | ||||
| 	groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, | ||||
| 	walkable = false, | ||||
| 	climbable = true, | ||||
| 	 | ||||
| 	drawtype = "nodebox", | ||||
| 	paramtype = "light", | ||||
| 	node_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = { | ||||
| 			{-0.0625, -0.5, -0.0625, 0.0625, 0.5, 0.0625},  | ||||
| 			{-0.0625, -0.0625, -0.5, 0.0625, 0.0625, 0.5},  | ||||
| 			{-0.5, -0.0625, -0.0625, 0.5, 0.0625, 0.0625},  | ||||
| 			{-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, | ||||
| 		} | ||||
| 	}, | ||||
| 	 | ||||
| 	drop = { | ||||
| 		max_items = 1, | ||||
| 		items = { | ||||
| 			{ | ||||
| 				items = {'dfcaverns:spore_tree_sapling'}, | ||||
| 				rarity = 10, | ||||
| 			}, | ||||
| 			{ | ||||
| 				items = {'dfcaverns:spore_tree_frond'}, | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
|  | ||||
| 	after_place_node = default.after_place_leaves, | ||||
| }) | ||||
|  | ||||
|  | ||||
| minetest.register_node("dfcaverns:spore_tree_sapling", { | ||||
| 	description = S("Spore Tree Spawn"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = 1.0, | ||||
| 	tiles = {"dfcaverns_spore_tree_sapling.png"}, | ||||
| 	inventory_image = "dfcaverns_spore_tree_sapling.png", | ||||
| 	wield_image = "dfcaverns_spore_tree_sapling.png", | ||||
| 	paramtype = "light", | ||||
| 	sunlight_propagates = true, | ||||
| 	walkable = false, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} | ||||
| 	}, | ||||
| 	groups = {snappy = 2, dig_immediate = 3, flammable = 2, | ||||
| 		attached_node = 1, sapling = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
|  | ||||
| 	on_construct = function(pos) | ||||
| 		minetest.get_node_timer(pos):start(math.random(dfcaverns.config.spore_tree_min_growth_delay,dfcaverns.config.spore_tree_max_growth_delay)) | ||||
| 	end, | ||||
| 	 | ||||
| 	on_timer = function(pos) | ||||
| 		minetest.set_node(pos, {name="air"}) | ||||
| 		minetest.spawn_tree(pos, dfcaverns.spore_tree_def) | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| dfcaverns.spore_tree_def={ | ||||
| 	axiom="TTdddA", | ||||
| 	rules_a="[&&&Tdd&&FF][&&&++++Tdd&&FF][&&&----Tdd&&FF]", | ||||
| 	rules_d="T", | ||||
| 	trunk="dfcaverns:spore_tree", | ||||
| 	leaves="dfcaverns:spore_tree_frond", | ||||
| 	leaves2="dfcaverns:spore_tree_pod", | ||||
| 	leaves2_chance=30, | ||||
| 	angle=30, | ||||
| 	iterations=2, | ||||
| 	random_level=0, | ||||
| 	trunk_type="single", | ||||
| 	thin_branches=true, | ||||
| } | ||||
|  | ||||
| dfcaverns.spawn_spore_tree = function(pos) | ||||
| 	minetest.spawn_tree(pos, dfcaverns.spore_tree_def) | ||||
| end | ||||
|  | ||||
| minetest.register_abm{ | ||||
| 	label = "spore tree raining spores", | ||||
| 	nodenames = {"dfcaverns:spore_tree_pod"}, | ||||
| 	interval = 1, | ||||
| 	chance = 30, | ||||
| 	catch_up = false, | ||||
| 	action = function(pos) | ||||
| 		minetest.add_particlespawner({ | ||||
| 			amount = 1, | ||||
| 			time = 1, | ||||
| 			minpos = pos, | ||||
| 			maxpos = pos, | ||||
| 			minvel = {x=-0.1, y=-1, z=-0.1}, | ||||
| 			maxvel = {x=0.1, y=-1, z=0.1}, | ||||
| 			minacc = {x=0, y=0, z=0}, | ||||
| 			maxacc = {x=0, y=0, z=0}, | ||||
| 			minexptime = 3, | ||||
| 			maxexptime = 3, | ||||
| 			minsize = 10, | ||||
| 			maxsize = 10, | ||||
| 			collisiondetection = false, | ||||
| 			vertical = false, | ||||
| 			texture = "farming_wheat_seed.png", | ||||
| 		}) | ||||
| 		 | ||||
| 	end, | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								textures/caverealms_fungi.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 150 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/caverealms_mycena.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 216 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/caverealms_mycena_powder.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 156 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_black_cap_gills.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 215 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_black_cap_side.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 385 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_black_cap_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 240 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_blood_thorn_side.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 507 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_blood_thorn_spike_front.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 237 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_blood_thorn_spike_side.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 302 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_blood_thorn_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 502 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_moss.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 985 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_moss_side.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 521 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_wheat.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 398 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_wheat_1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 173 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_wheat_2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 218 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_wheat_3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 282 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_wheat_4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 321 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_wheat_5.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 367 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_wheat_6.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 392 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_wheat_7.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 406 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_wheat_8.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 441 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_cave_wheat_seed.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 242 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_floor_fungus.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 888 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_floor_fungus_side.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 542 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_fungiwood.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 389 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_fungiwood_sapling.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 479 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_fungiwood_shelf_underside.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 836 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_goblin_cap.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 358 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_goblin_cap_gills.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 223 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_goblin_cap_stem.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 402 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_nether_cap.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 287 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_nether_cap_gills.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 366 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_nether_cap_stem.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 883 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_puffball.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 691 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_spore_tree.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_spore_tree_sapling.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 793 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_spore_tree_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 656 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_tower_cap.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 260 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_tower_cap_gills.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 141 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_tunnel_tube.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 560 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/dfcaverns_tunnel_tube_sapling.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 458 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/farming_cotton.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 166 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/farming_cotton_1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 110 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/farming_cotton_2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 120 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/farming_cotton_3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 144 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/farming_cotton_4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 150 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/farming_cotton_5.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 159 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/farming_cotton_6.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 164 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/farming_cotton_7.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 170 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/farming_cotton_8.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 196 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/farming_cotton_seed.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 150 B | 
							
								
								
									
										9
									
								
								textures/license.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,9 @@ | ||||
| dftrees_blood_thorn - derived from default cactus | ||||
| dftrees_black_cap	- derived from default coal block | ||||
| dftrees_goblin_cap 	- derived from default red coral | ||||
| dftrees_cave_moss and floor_fungus 	- derived from caverealms algae | ||||
| dftrees_spore_tree	- derived from default aspen bark | ||||
| dftrees_tower_cap 	- derived from default dead coral | ||||
| dftrees_tower_cap_gills - from caverealms mushroom gills | ||||
| dftrees_cave_wheat	- derived from farming wheat | ||||
| dftrees_tunnel_tube	- derived from moretrees palm tree bark | ||||
							
								
								
									
										98
									
								
								tower_cap.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,98 @@ | ||||
| -- internationalization boilerplate | ||||
| local MP = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local S, NS = dofile(MP.."/intllib.lua") | ||||
|  | ||||
| --stem | ||||
| minetest.register_node("dfcaverns:tower_cap_stem", { | ||||
| 	description = S("Tower Cap Stem"), | ||||
| 	tiles = {"dfcaverns_tower_cap.png"}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| }) | ||||
|  | ||||
| --cap | ||||
| minetest.register_node("dfcaverns:tower_cap", { | ||||
| 	description = S("Tower Cap"), | ||||
| 	tiles = {"dfcaverns_tower_cap.png"}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| }) | ||||
|  | ||||
| --gills | ||||
| minetest.register_node("dfcaverns:tower_cap_gills", { | ||||
| 	description = S("Tower Cap Gills"), | ||||
| 	tiles = {"dfcaverns_tower_cap_gills.png"}, | ||||
| 	is_ground_content = true, | ||||
| 	groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
| 	drawtype = "plantlike", | ||||
| 	paramtype = "light", | ||||
| 	drop = { | ||||
| 		max_items = 1, | ||||
| 		items = { | ||||
| 			{ | ||||
| 				items = {'dfcaverns:tower_cap_sapling'}, | ||||
| 				rarity = 20, | ||||
| 			}, | ||||
| 			{ | ||||
| 				items = {'dfcaverns:tower_cap_gills'}, | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| -- sapling | ||||
| minetest.register_node("dfcaverns:tower_cap_sapling", { | ||||
| 	description = S("Tower Cap Spawn"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = 1.0, | ||||
| 	tiles = {"dfcaverns_spore_tree_sapling.png"}, | ||||
| 	inventory_image = "dfcaverns_spore_tree_sapling.png", | ||||
| 	wield_image = "dfcaverns_spore_tree_sapling.png", | ||||
| 	paramtype = "light", | ||||
| 	sunlight_propagates = true, | ||||
| 	walkable = false, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} | ||||
| 	}, | ||||
| 	groups = {snappy = 2, dig_immediate = 3, flammable = 2, | ||||
| 		attached_node = 1, sapling = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
|  | ||||
| 	on_construct = function(pos) | ||||
| 		minetest.get_node_timer(pos):start(math.random(dfcaverns.config.tower_cap_min_growth_delay,dfcaverns.config.tower_cap_max_growth_delay)) | ||||
| 	end, | ||||
| 	 | ||||
| 	on_timer = function(pos) | ||||
| 		minetest.set_node(pos, {name="air"}) | ||||
| 		dfcaverns.spawn_tower_cap(pos) | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| dfcaverns.spawn_tower_cap = function(pos) | ||||
| 	local x, y, z = pos.x, pos.y, pos.z | ||||
| 	local stem_height = math.random(4,10) | ||||
| 	local cap_radius = math.random(4,6) | ||||
| 	local maxy = y + stem_height + 3 | ||||
| 	 | ||||
| 	local c_stem = minetest.get_content_id("dfcaverns:tower_cap_stem") | ||||
| 	local c_cap  = minetest.get_content_id("dfcaverns:tower_cap") | ||||
| 	local c_gills  = minetest.get_content_id("dfcaverns:tower_cap_gills") | ||||
|  | ||||
| 	local vm = minetest.get_voxel_manip() | ||||
| 	local minp, maxp = vm:read_from_map( | ||||
| 		{x = x - cap_radius, y = y, z = z - cap_radius}, | ||||
| 		{x = x + cap_radius, y = maxy + 3, z = z + cap_radius} | ||||
| 	) | ||||
| 	local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) | ||||
| 	local data = vm:get_data() | ||||
|  | ||||
| 	subterrane:giant_shroom(area:indexp(pos), area, data, c_stem, c_cap, c_gills, stem_height, cap_radius) | ||||
| 	 | ||||
| 	vm:set_data(data) | ||||
| 	vm:write_to_map() | ||||
| 	vm:update_map() | ||||
| end | ||||
							
								
								
									
										105
									
								
								tunnel_tube.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,105 @@ | ||||
| -------------------------------------------------- | ||||
| -- Tunnel tube | ||||
|  | ||||
| -- Magenta | ||||
| -- curving trunk | ||||
| -- Max trunk height 	8 | ||||
| -- depth 2-3 | ||||
|  | ||||
| -- internationalization boilerplate | ||||
| local MP = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local S, NS = dofile(MP.."/intllib.lua") | ||||
|  | ||||
| minetest.register_node("dfcaverns:tunnel_tube", { | ||||
| 	description = S("Tunnel Tube"), | ||||
| 	tiles = {"dfcaverns_tunnel_tube.png"}, | ||||
| 	paramtype2 = "facedir", | ||||
| 	drawtype = "nodebox", | ||||
| 	paramtype = "light", | ||||
| 	groups = {choppy = 3, oddly_breakable_by_hand=1, flammable = 2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| 	on_place = minetest.rotate_node, | ||||
| 	 | ||||
| 	node_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = { | ||||
| 			{-8/16,-8/16,-8/16,-4/16,8/16,8/16}, | ||||
| 			{4/16,-8/16,-8/16,8/16,8/16,8/16}, | ||||
| 			{-4/16,-8/16,-8/16,4/16,8/16,-4/16}, | ||||
| 			{-4/16,-8/16,8/16,4/16,8/16,4/16}, | ||||
| 		}, | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| minetest.register_node("dfcaverns:tunnel_tube_nodule", { | ||||
| 	description = S("Tunnel Tube Fruiting Body"), | ||||
| 	tiles = {"dfcaverns_tunnel_tube.png^[brighten"}, | ||||
| 	paramtype2 = "facedir", | ||||
| 	groups = {choppy = 3, oddly_breakable_by_hand=1, flammable = 2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| 	on_place = minetest.rotate_node, | ||||
| 	 | ||||
| 	drop = { | ||||
| 		max_items = 3, | ||||
| 		items = { | ||||
| 			{ | ||||
| 				items = {'dfcaverns:tunnel_tube_sapling'}, | ||||
| 				rarity = 2, | ||||
| 			}, | ||||
| 			{ | ||||
| 				items = {'dfcaverns:tunnel_tube_sapling'}, | ||||
| 				rarity = 2, | ||||
| 			}, | ||||
| 			{ | ||||
| 				items = {'dfcaverns:tunnel_tube_sapling'}, | ||||
| 				rarity = 2, | ||||
| 			}, | ||||
| 		} | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| dfcaverns.tunnel_tube_def = { | ||||
| 	axiom="FFcccccc&FFFFFdddR", | ||||
| 	rules_c="/", | ||||
| 	rules_d="F", | ||||
| 	trunk="dfcaverns:tunnel_tube", | ||||
| 	angle=20, | ||||
| 	iterations=2, | ||||
| 	random_level=0, | ||||
| 	trunk_type="single", | ||||
| 	thin_branches=true, | ||||
| 	fruit="dfcaverns:tunnel_tube_nodule", | ||||
| 	fruit_chance=0 | ||||
| } | ||||
|  | ||||
| minetest.register_node("dfcaverns:tunnel_tube_sapling", { | ||||
| 	description = S("Tunnel Tube Spawn"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = 1.0, | ||||
| 	tiles = {"dfcaverns_tunnel_tube_sapling.png"}, | ||||
| 	inventory_image = "dfcaverns_tunnel_tube_sapling.png", | ||||
| 	wield_image = "dfcaverns_tunnel_tube_sapling.png", | ||||
| 	paramtype = "light", | ||||
| 	sunlight_propagates = true, | ||||
| 	walkable = false, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} | ||||
| 	}, | ||||
| 	groups = {snappy = 2, dig_immediate = 3, flammable = 2, | ||||
| 		attached_node = 1, sapling = 1}, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
|  | ||||
| 	on_construct = function(pos) | ||||
| 		minetest.get_node_timer(pos):start(math.random(dfcaverns.config.tunnel_tube_min_growth_delay,dfcaverns.config.tunnel_tube_max_growth_delay)) | ||||
| 	end, | ||||
| 	 | ||||
| 	on_timer = function(pos) | ||||
| 		minetest.set_node(pos, {name="air"}) | ||||
| 		minetest.spawn_tree(pos, dfcaverns.tunnel_tube_def) | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| dfcaverns.spawn_tunnel_tube = function(pos) | ||||
| 	minetest.spawn_tree(pos, dfcaverns.tunnel_tube_def) | ||||
| end | ||||