Move nyancats into a separate mod
Nyancats are independent in the default mod. Nothing else uses them or their code. Separating it into a separate mod makes it easier for subgames to remove them. It also makes it easier for a mod to depend on nyancats, as lots of subgames don't have them. Default/mapgen.lua: Register biomes, ores and decorations in singlenode mapgen. These were never disabled anyway because singlenode was removed from the world creation menu.
							
								
								
									
										12
									
								
								game_api.txt
									
									
									
									
									
								
							
							
						
						@@ -250,6 +250,18 @@ Give Initial Stuff API
 | 
			
		||||
^ str is a comma separated list of initial stuff
 | 
			
		||||
^ Adds items to the list of items to be given
 | 
			
		||||
 | 
			
		||||
Nyancat API
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
`nyancat.place(pos, facedir, length)`
 | 
			
		||||
 | 
			
		||||
^ Place a cat at `pos` facing `facedir` with tail length `length`
 | 
			
		||||
  Only accepts facedir 0-3, if facedir > 3 then it will be interpreted as facedir = 0
 | 
			
		||||
 | 
			
		||||
`nyancat.generate(minp, maxp, seed)`
 | 
			
		||||
 | 
			
		||||
^ Called by `minetest.register_on_generated`. To disable nyancat generation,
 | 
			
		||||
  you can redefine nyancat.generate() to be an empty function
 | 
			
		||||
 | 
			
		||||
TNT API
 | 
			
		||||
----------
 | 
			
		||||
 
 | 
			
		||||
@@ -51,10 +51,6 @@ RealBadAngel's animated water (WTFPL):
 | 
			
		||||
  default_water_flowing_animated.png
 | 
			
		||||
 | 
			
		||||
VanessaE (WTFPL):
 | 
			
		||||
  default_nc_back.png
 | 
			
		||||
  default_nc_front.png
 | 
			
		||||
  default_nc_rb.png
 | 
			
		||||
  default_nc_side.png
 | 
			
		||||
  default_desert_sand.png
 | 
			
		||||
  default_desert_stone.png
 | 
			
		||||
  default_sand.png
 | 
			
		||||
 
 | 
			
		||||
@@ -39,8 +39,6 @@ minetest.register_alias("locked_chest", "default:chest_locked")
 | 
			
		||||
minetest.register_alias("cobble", "default:cobble")
 | 
			
		||||
minetest.register_alias("mossycobble", "default:mossycobble")
 | 
			
		||||
minetest.register_alias("steelblock", "default:steelblock")
 | 
			
		||||
minetest.register_alias("nyancat", "default:nyancat")
 | 
			
		||||
minetest.register_alias("nyancat_rainbow", "default:nyancat_rainbow")
 | 
			
		||||
minetest.register_alias("sapling", "default:sapling")
 | 
			
		||||
minetest.register_alias("apple", "default:apple")
 | 
			
		||||
 | 
			
		||||
@@ -77,4 +75,3 @@ minetest.register_alias("default:pinewood", "default:pine_wood")
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("default:ladder", "default:ladder_wood")
 | 
			
		||||
minetest.register_alias("default:sign_wall", "default:sign_wall_wood")
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -888,18 +888,6 @@ minetest.register_craft({
 | 
			
		||||
	burntime = 30,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "default:nyancat",
 | 
			
		||||
	burntime = 1,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "default:nyancat_rainbow",
 | 
			
		||||
	burntime = 1,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "group:sapling",
 | 
			
		||||
@@ -935,4 +923,3 @@ minetest.register_craft({
 | 
			
		||||
	recipe = "default:dry_grass_1",
 | 
			
		||||
	burntime = 2,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ function default.register_ores()
 | 
			
		||||
	-- Clay
 | 
			
		||||
	-- This first to avoid clay in sand blobs
 | 
			
		||||
 | 
			
		||||
	minetest.register_ore({ 
 | 
			
		||||
	minetest.register_ore({
 | 
			
		||||
		ore_type        = "blob",
 | 
			
		||||
		ore             = "default:clay",
 | 
			
		||||
		wherein         = {"default:sand"},
 | 
			
		||||
@@ -70,7 +70,7 @@ function default.register_ores()
 | 
			
		||||
 | 
			
		||||
	-- Sand
 | 
			
		||||
 | 
			
		||||
	minetest.register_ore({ 
 | 
			
		||||
	minetest.register_ore({
 | 
			
		||||
		ore_type        = "blob",
 | 
			
		||||
		ore             = "default:sand",
 | 
			
		||||
		wherein         = {"default:stone", "default:sandstone",
 | 
			
		||||
@@ -1464,73 +1464,16 @@ function default.register_decorations()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- Generate nyan cats
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
-- All mapgens except singlenode
 | 
			
		||||
 | 
			
		||||
function default.make_nyancat(pos, facedir, length)
 | 
			
		||||
	local tailvec = {x = 0, y = 0, z = 0}
 | 
			
		||||
	if facedir == 0 then
 | 
			
		||||
		tailvec.z = 1
 | 
			
		||||
	elseif facedir == 1 then
 | 
			
		||||
		tailvec.x = 1
 | 
			
		||||
	elseif facedir == 2 then
 | 
			
		||||
		tailvec.z = -1
 | 
			
		||||
	elseif facedir == 3 then
 | 
			
		||||
		tailvec.x = -1
 | 
			
		||||
	else
 | 
			
		||||
		facedir = 0
 | 
			
		||||
		tailvec.z = 1
 | 
			
		||||
	end
 | 
			
		||||
	local p = {x = pos.x, y = pos.y, z = pos.z}
 | 
			
		||||
	minetest.set_node(p, {name = "default:nyancat", param2 = facedir})
 | 
			
		||||
	for i = 1, length do
 | 
			
		||||
		p.x = p.x + tailvec.x
 | 
			
		||||
		p.z = p.z + tailvec.z
 | 
			
		||||
		minetest.set_node(p, {name = "default:nyancat_rainbow", param2 = facedir})
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function default.generate_nyancats(minp, maxp, seed)
 | 
			
		||||
	local height_min = -31000
 | 
			
		||||
	local height_max = -32
 | 
			
		||||
	if maxp.y < height_min or minp.y > height_max then
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	local y_min = math.max(minp.y, height_min)
 | 
			
		||||
	local y_max = math.min(maxp.y, height_max)
 | 
			
		||||
	local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
 | 
			
		||||
	local pr = PseudoRandom(seed + 9324342)
 | 
			
		||||
	local max_num_nyancats = math.floor(volume / (16 * 16 * 16))
 | 
			
		||||
	for i = 1, max_num_nyancats do
 | 
			
		||||
		if pr:next(0, 1000) == 0 then
 | 
			
		||||
			local x0 = pr:next(minp.x, maxp.x)
 | 
			
		||||
			local y0 = pr:next(minp.y, maxp.y)
 | 
			
		||||
			local z0 = pr:next(minp.z, maxp.z)
 | 
			
		||||
			local p0 = {x = x0, y = y0, z = z0}
 | 
			
		||||
			default.make_nyancat(p0, pr:next(0, 3), pr:next(3, 15))
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- Detect mapgen to select functions
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
-- Mods using singlenode mapgen can call these functions to enable
 | 
			
		||||
-- the use of minetest.generate_ores or minetest.generate_decorations
 | 
			
		||||
 | 
			
		||||
local mg_name = minetest.get_mapgen_setting("mg_name")
 | 
			
		||||
if mg_name == "v6" then
 | 
			
		||||
	default.register_ores()
 | 
			
		||||
	default.register_mgv6_decorations()
 | 
			
		||||
	minetest.register_on_generated(default.generate_nyancats)
 | 
			
		||||
elseif mg_name ~= "singlenode" then
 | 
			
		||||
else
 | 
			
		||||
	default.register_biomes()
 | 
			
		||||
	default.register_ores()
 | 
			
		||||
	default.register_decorations()
 | 
			
		||||
	minetest.register_on_generated(default.generate_nyancats)
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -178,8 +178,6 @@ Misc
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
default:cloud
 | 
			
		||||
default:nyancat
 | 
			
		||||
default:nyancat_rainbow
 | 
			
		||||
 | 
			
		||||
--]]
 | 
			
		||||
 | 
			
		||||
@@ -1902,26 +1900,3 @@ minetest.register_node("default:cloud", {
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
	groups = {not_in_creative_inventory = 1},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("default:nyancat", {
 | 
			
		||||
	description = "Nyan Cat",
 | 
			
		||||
	tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
 | 
			
		||||
		"default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	groups = {cracky = 2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	legacy_facedir_simple = true,
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("default:nyancat_rainbow", {
 | 
			
		||||
	description = "Nyan Cat Rainbow",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90",
 | 
			
		||||
		"default_nc_rb.png", "default_nc_rb.png"
 | 
			
		||||
	},
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	groups = {cracky = 2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								mods/nyancat/README.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,29 @@
 | 
			
		||||
Minetest Game mod: nyancat
 | 
			
		||||
==========================
 | 
			
		||||
 | 
			
		||||
License of source code:
 | 
			
		||||
-----------------------
 | 
			
		||||
Copyright (C) 2011-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software; you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
the Free Software Foundation; either version 2.1 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
http://www.gnu.org/licenses/lgpl-2.1.html
 | 
			
		||||
 | 
			
		||||
License of media (textures and sounds)
 | 
			
		||||
--------------------------------------
 | 
			
		||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
 | 
			
		||||
http://creativecommons.org/licenses/by-sa/3.0/
 | 
			
		||||
 | 
			
		||||
Authors of media files
 | 
			
		||||
-----------------------
 | 
			
		||||
Everything not listed in here:
 | 
			
		||||
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
 | 
			
		||||
 | 
			
		||||
VanessaE (WTFPL):
 | 
			
		||||
  default_nc_back.png
 | 
			
		||||
  default_nc_front.png
 | 
			
		||||
  default_nc_rb.png
 | 
			
		||||
  default_nc_side.png
 | 
			
		||||
							
								
								
									
										1
									
								
								mods/nyancat/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
default
 | 
			
		||||
							
								
								
									
										84
									
								
								mods/nyancat/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,84 @@
 | 
			
		||||
minetest.register_node("nyancat:nyancat", {
 | 
			
		||||
	description = "Nyan Cat",
 | 
			
		||||
	tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
 | 
			
		||||
		"default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	groups = {cracky = 2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	legacy_facedir_simple = true,
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("nyancat:nyancat_rainbow", {
 | 
			
		||||
	description = "Nyan Cat Rainbow",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90",
 | 
			
		||||
		"default_nc_rb.png", "default_nc_rb.png"
 | 
			
		||||
	},
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	groups = {cracky = 2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "nyancat:nyancat",
 | 
			
		||||
	burntime = 1,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "nyancat:nyancat_rainbow",
 | 
			
		||||
	burntime = 1,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
nyancat = {}
 | 
			
		||||
 | 
			
		||||
function nyancat.place(pos, facedir, length)
 | 
			
		||||
	if facedir > 3 then
 | 
			
		||||
		facedir = 0
 | 
			
		||||
	end
 | 
			
		||||
	local tailvec = minetest.facedir_to_dir(facedir)
 | 
			
		||||
	local p = {x = pos.x, y = pos.y, z = pos.z}
 | 
			
		||||
	minetest.set_node(p, {name = "nyancat:nyancat", param2 = facedir})
 | 
			
		||||
	for i = 1, length do
 | 
			
		||||
		p.x = p.x + tailvec.x
 | 
			
		||||
		p.z = p.z + tailvec.z
 | 
			
		||||
		minetest.set_node(p, {name = "nyancat:nyancat_rainbow", param2 = facedir})
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function nyancat.generate(minp, maxp, seed)
 | 
			
		||||
	local height_min = -31000
 | 
			
		||||
	local height_max = -32
 | 
			
		||||
	if maxp.y < height_min or minp.y > height_max then
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	local y_min = math.max(minp.y, height_min)
 | 
			
		||||
	local y_max = math.min(maxp.y, height_max)
 | 
			
		||||
	local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
 | 
			
		||||
	local pr = PseudoRandom(seed + 9324342)
 | 
			
		||||
	local max_num_nyancats = math.floor(volume / (16 * 16 * 16))
 | 
			
		||||
	for i = 1, max_num_nyancats do
 | 
			
		||||
		if pr:next(0, 1000) == 0 then
 | 
			
		||||
			local x0 = pr:next(minp.x, maxp.x)
 | 
			
		||||
			local y0 = pr:next(minp.y, maxp.y)
 | 
			
		||||
			local z0 = pr:next(minp.z, maxp.z)
 | 
			
		||||
			local p0 = {x = x0, y = y0, z = z0}
 | 
			
		||||
			nyancat.place(p0, pr:next(0, 3), pr:next(3, 15))
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_on_generated(function(minp, maxp, seed)
 | 
			
		||||
	nyancat.generate(minp, maxp, seed)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
-- Legacy
 | 
			
		||||
minetest.register_alias("default:nyancat", "nyancat:nyancat")
 | 
			
		||||
minetest.register_alias("default:nyancat_rainbow", "nyancat:nyancat_rainbow")
 | 
			
		||||
minetest.register_alias("nyancat", "nyancat:nyancat")
 | 
			
		||||
minetest.register_alias("nyancat_rainbow", "nyancat:nyancat_rainbow")
 | 
			
		||||
default.make_nyancat = nyancat.place
 | 
			
		||||
default.generate_nyancats = nyancat.generate
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 186 B After Width: | Height: | Size: 186 B  | 
| 
		 Before Width: | Height: | Size: 204 B After Width: | Height: | Size: 204 B  | 
| 
		 Before Width: | Height: | Size: 137 B After Width: | Height: | Size: 137 B  | 
| 
		 Before Width: | Height: | Size: 148 B After Width: | Height: | Size: 148 B  |