Skip to content
Snippets Groups Projects
nodes.lua 4.33 KiB
minetest.register_node("loud_walking:plate_glass", {
	description = "Plate Glass",
	drawtype = "glasslike",
	paramtype = "light",
	sunlight_propagates = true,
	tiles = {"loud_walking_plate_glass.png"},
	light_source = 8,
	use_texture_alpha = true,
	is_ground_content = false,
	groups = {cracky = 3, level=1},
	sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("loud_walking:scrith", {
	description = "Scrith",
	paramtype = "light",
	tiles = {"default_obsidian.png"},
	use_texture_alpha = true,
	is_ground_content = false,
	groups = {},
	sounds = default.node_sound_stone_defaults(),
})

local node = loud_walking.clone_node("default:glass")
node.groups = {}
minetest.register_node("loud_walking:transparent_scrith", node)

minetest.register_node("loud_walking:controls", {
	description = "Alien control system",
	paramtype = "light",
	tiles = {"loud_walking_controls.png"},
	use_texture_alpha = true,
	is_ground_content = false,
	groups = {},
	sounds = default.node_sound_stone_defaults(),
	on_punch = function(pos, node, puncher, pointed_thing)
		if not puncher:is_player() then
			return
		end

		local sr = math.random(20)
		if sr < 3 then
			puncher:set_hp(puncher:get_hp() - sr)
		elseif sr < 6 then
			local pos = puncher:getpos()
			pos.x = pos.x + (math.random(-50, 50) * 160)
			pos.y = pos.y + (math.random(-50, 50) * 160)
			pos.z = pos.z + (math.random(-50, 50) * 160)
			if pos.x > -31000 and pos.x < 31000 and pos.y > -31000 and pos.y < 31000 and pos.z > -31000 and pos.z < 31000 then
				puncher:setpos(pos)
			end
		elseif sr == 6 then
			for z1 = -4, 4 do
				for y1 = -4, 4 do
					for x1 = -4, 4 do
						local p = {x = pos.x + x1, y = pos.y + y1, z = pos.z + z1}
						local node = minetest.get_node(p)
						if node and node.name == "air" then
							minetest.set_node(p, {name="fire:basic_flame"})
						end
					end
				end
			end
		elseif sr == 7 then
			puncher:set_hp(20)
		elseif sr == 8 then
			minetest.set_timeofday(math.random(100)/100)
		elseif sr == 9 then
			local pos = puncher:getpos()
			for z1 = -1, 1 do
				for x1 = -1, 1 do
					minetest.set_node({x = pos.x + x1, y = pos.y - 1, z = pos.z + z1}, {name="air"})
				end
			end
		elseif sr == 10 then
			minetest.set_node(pos, {name="air"})
		else
			minetest.chat_send_player(puncher:get_player_name(), "Please do not press this button again.")
		end
	end
})

loud_walking.decorations = {}
do
	for i, odeco in pairs(minetest.registered_decorations) do
		local deco = {}
		if odeco.biomes then
			deco.biomes = {}
			for _, b in pairs(odeco.biomes) do
				deco.biomes[b] = true
			end
		end

		deco.deco_type = odeco.deco_type
		deco.decoration = odeco.decoration
		deco.schematic = odeco.schematic
		deco.fill_ratio = odeco.fill_ratio

		if odeco.noise_params then
			deco.fill_ratio = (odeco.noise_params.scale + odeco.noise_params.offset)
		end

		local nod = minetest.registered_nodes[deco.decoration]
		if nod and nod.groups and nod.groups.flower then
			deco.flower = true
		end

		loud_walking.decorations[#loud_walking.decorations+1] = deco
	end
end

local function register_flower(name, desc, biomes, chance)
	local groups = {}
	groups.snappy = 3
	groups.flammable = 2
	groups.flower = 1
	groups.flora = 1
	groups.attached_node = 1

	minetest.register_node("loud_walking:" .. name, {
		description = desc,
		drawtype = "plantlike",
		waving = 1,
		tiles = {"loud_walking_" .. name .. ".png"},
		inventory_image = "loud_walking_" .. name .. ".png",
		wield_image = "flowers_" .. name .. ".png",
		sunlight_propagates = true,
		paramtype = "light",
		walkable = false,
		buildable_to = true,
		stack_max = 99,
		groups = groups,
		sounds = default.node_sound_leaves_defaults(),
		selection_box = {
			type = "fixed",
			fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
		}
	})

	local bi = {}
	if biomes then
		bi = {}
		for _, b in pairs(biomes) do
			bi[b] = true
		end
	end

	loud_walking.decorations[#loud_walking.decorations+1] = {
		deco_type = "simple",
		place_on = {"default:dirt_with_grass"},
		biomes = bi,
		fill_ratio = chance,
		flower = true,
		decoration = "loud_walking:"..name,
	}
end

register_flower("orchid", "Orchid", {"rainforest", "rainforest_swamp"}, 0.025)
register_flower("bird_of_paradise", "Bird of Paradise", {"rainforest", "desertstone_grassland"}, 0.025)
register_flower("gerbera", "Gerbera", {"savanna", "rainforest", "desertstone_grassland"}, 0.005)
print(dump(loud_walking.decorations))