From 3661cb61e37ee6b7a8818f7a28e9102fb0674e54 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Mon, 11 Jul 2016 17:55:17 +0100 Subject: [PATCH] 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. --- game_api.txt | 12 +++ mods/default/README.txt | 4 - mods/default/aliases.lua | 3 - mods/default/crafting.lua | 13 --- mods/default/mapgen.lua | 63 +------------ mods/default/nodes.lua | 25 ------ mods/nyancat/README.txt | 29 ++++++ mods/nyancat/depends.txt | 1 + mods/nyancat/init.lua | 84 ++++++++++++++++++ .../textures/default_nc_back.png | Bin .../textures/default_nc_front.png | Bin .../textures/default_nc_rb.png | Bin .../textures/default_nc_side.png | Bin 13 files changed, 129 insertions(+), 105 deletions(-) create mode 100644 mods/nyancat/README.txt create mode 100644 mods/nyancat/depends.txt create mode 100644 mods/nyancat/init.lua rename mods/{default => nyancat}/textures/default_nc_back.png (100%) rename mods/{default => nyancat}/textures/default_nc_front.png (100%) rename mods/{default => nyancat}/textures/default_nc_rb.png (100%) rename mods/{default => nyancat}/textures/default_nc_side.png (100%) diff --git a/game_api.txt b/game_api.txt index e04a33b4..581d76cc 100644 --- a/game_api.txt +++ b/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 ---------- diff --git a/mods/default/README.txt b/mods/default/README.txt index 41dd1eb0..85c5a4ef 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -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 diff --git a/mods/default/aliases.lua b/mods/default/aliases.lua index 63fe59b2..1259ac0e 100644 --- a/mods/default/aliases.lua +++ b/mods/default/aliases.lua @@ -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") - diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua index 3bfce07c..1151f47b 100644 --- a/mods/default/crafting.lua +++ b/mods/default/crafting.lua @@ -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, }) - diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 7d0b0fd4..52aa294c 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -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 diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index 86d5565c..31e063d4 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -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(), -}) diff --git a/mods/nyancat/README.txt b/mods/nyancat/README.txt new file mode 100644 index 00000000..95850c92 --- /dev/null +++ b/mods/nyancat/README.txt @@ -0,0 +1,29 @@ +Minetest Game mod: nyancat +========================== + +License of source code: +----------------------- +Copyright (C) 2011-2012 celeron55, Perttu Ahola + +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 + +VanessaE (WTFPL): + default_nc_back.png + default_nc_front.png + default_nc_rb.png + default_nc_side.png diff --git a/mods/nyancat/depends.txt b/mods/nyancat/depends.txt new file mode 100644 index 00000000..4ad96d51 --- /dev/null +++ b/mods/nyancat/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/nyancat/init.lua b/mods/nyancat/init.lua new file mode 100644 index 00000000..6c1d9036 --- /dev/null +++ b/mods/nyancat/init.lua @@ -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 diff --git a/mods/default/textures/default_nc_back.png b/mods/nyancat/textures/default_nc_back.png similarity index 100% rename from mods/default/textures/default_nc_back.png rename to mods/nyancat/textures/default_nc_back.png diff --git a/mods/default/textures/default_nc_front.png b/mods/nyancat/textures/default_nc_front.png similarity index 100% rename from mods/default/textures/default_nc_front.png rename to mods/nyancat/textures/default_nc_front.png diff --git a/mods/default/textures/default_nc_rb.png b/mods/nyancat/textures/default_nc_rb.png similarity index 100% rename from mods/default/textures/default_nc_rb.png rename to mods/nyancat/textures/default_nc_rb.png diff --git a/mods/default/textures/default_nc_side.png b/mods/nyancat/textures/default_nc_side.png similarity index 100% rename from mods/default/textures/default_nc_side.png rename to mods/nyancat/textures/default_nc_side.png