PB&J Pup.

Replace possibly trademarked artwork with royalty free and
OK for commercial use artwork.

The Pup appears by default but does not alias the Nyan Cat nodes
away. For that you will have to enable the setting. A settingtypes.txt
is provided to make that really easy. This allows people to get
an out-of-tree mod and not have their Nyan nodes disappear.

The mod can also be disabled entirely this way for those who don't
want it.

There's some eatser eggs in here as well. Instead of making the
nodes burnable, they are edible, and make you bark and howl. And
perhaps something else too.
This commit is contained in:
Auke Kok 2017-03-21 22:34:42 -07:00 committed by paramat
parent 91182d6a9e
commit 9b45e7b3e9
19 changed files with 172 additions and 155 deletions

@ -1,16 +0,0 @@
Minetest Game mod: nyancat
==========================
See license.txt for license information.
Authors of source code
----------------------
Originally by celeron55, Perttu Ahola <celeron55@gmail.com> (LGPL 2.1)
Various Minetest developers and contributors (LGPL 2.1)
Authors of media files
----------------------
VanessaE (CC BY-SA 3.0):
nyancat_front.png
nyancat_back.png
nyancat_side.png
nyancat_rainbow.png

@ -1,89 +0,0 @@
minetest.register_node("nyancat:nyancat", {
description = "Nyan Cat",
tiles = {"nyancat_side.png", "nyancat_side.png", "nyancat_side.png",
"nyancat_side.png", "nyancat_back.png", "nyancat_front.png"},
paramtype = "light",
light_source = default.LIGHT_MAX,
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 = {
"nyancat_rainbow.png^[transformR90",
"nyancat_rainbow.png^[transformR90",
"nyancat_rainbow.png"
},
paramtype = "light",
light_source = default.LIGHT_MAX,
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

@ -1,50 +0,0 @@
License of source code
----------------------
GNU Lesser General Public License, version 2.1
Copyright (C) 2011-2016 celeron55, Perttu Ahola <celeron55@gmail.com>
Copyright (C) 2012-2016 Various Minetest developers and contributors
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.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details:
https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
Licenses of media (textures)
----------------------------
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
Copyright (C) 2012-2016 VanessaE
You are free to:
Share — copy and redistribute the material in any medium or format.
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following terms:
Attribution — You must give appropriate credit, provide a link to the license, and
indicate if changes were made. You may do so in any reasonable manner, but not in any way
that suggests the licensor endorses you or your use.
ShareAlike — If you remix, transform, or build upon the material, you must distribute
your contributions under the same license as the original.
No additional restrictions — You may not apply legal terms or technological measures that
legally restrict others from doing anything the license permits.
Notices:
You do not have to comply with the license for elements of the material in the public
domain or where your use is permitted by an applicable exception or limitation.
No warranties are given. The license may not give you all of the permissions necessary
for your intended use. For example, other rights such as publicity, privacy, or moral
rights may limit how you use the material.
For more details:
http://creativecommons.org/licenses/by-sa/3.0/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 B

136
mods/pbj_pup/init.lua Normal file

@ -0,0 +1,136 @@
--[[
Minetest's official Peanut Butter & Jelly Pup mod
]]--
local enable = minetest.setting_getbool("pbj_pup_enable")
if enable == false then
return
end
local function howl(ttl, player)
if not player then
return
end
ttl = ttl - 15
if ttl < 0 then
return
end
minetest.sound_play("pbj_pup_howl", {object = player, loop = false})
minetest.do_item_eat(5, nil, ItemStack("pbj_pup:pbj_pup"), player, nil)
minetest.after(15, howl, ttl, player)
end
--
-- nodes
--
minetest.register_node("pbj_pup:pbj_pup", {
description = "PB&J Pup",
tiles = {
"pbj_pup_sides.png",
"pbj_pup_jelly.png",
"pbj_pup_sides.png",
"pbj_pup_sides.png",
"pbj_pup_back.png",
"pbj_pup_front.png"
},
paramtype = "light",
light_source = default.LIGHT_MAX,
paramtype2 = "facedir",
groups = {cracky = 2},
is_ground_content = false,
legacy_facedir_simple = true,
sounds = default.node_sound_defaults(),
stack_max = 1,
on_use = function(itemstack, user, pointed_thing)
howl(300, user)
itemstack:take_item()
return itemstack
end,
})
minetest.register_node("pbj_pup:pbj_pup_candies", {
description = "PB&J Pup Candies",
tiles = {{
name = "pbj_pup_candies_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1.6
}
}},
paramtype = "light",
light_source = default.LIGHT_MAX,
paramtype2 = "facedir",
groups = {cracky = 2},
is_ground_content = false,
stack_max = 5,
sounds = default.node_sound_defaults(),
on_use = function(itemstack, user, pointed_thing)
minetest.do_item_eat(5, nil, itemstack, user, pointed_thing)
minetest.sound_play("pbj_pup_barks", {object = user, loop = false})
itemstack:take_item()
return itemstack
end,
})
--
-- mapgen
--
local gen = minetest.setting_getbool("pbj_pup_generate")
if gen == nil or gen then
local function 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 = "pbj_pup:pbj_pup", param2 = facedir})
for i = 1, length do
p.x = p.x + tailvec.x
p.z = p.z + tailvec.z
minetest.set_node(p, {name = "pbj_pup:pbj_pup_candies", param2 = facedir})
end
end
local function 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 = math.floor(volume / (16 * 16 * 16))
for i = 1, max_num 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}
place(p0, pr:next(0, 3), pr:next(3, 15))
end
end
end
minetest.register_on_generated(generate)
end
--
-- compat
--
if minetest.setting_getbool("pbj_pup_alias_nyancat") then
minetest.register_alias("default:nyancat", "pbj_pup:pbj_pup")
minetest.register_alias("default:nyancat_rainbow","pbj_pup:pbj_pup_candies")
minetest.register_alias("nyancat", "pbj_pup:pbj_pup")
minetest.register_alias("nyancat_rainbow", "pbj_pup:pbj_pup_candies")
minetest.register_alias("nyancat:nyancat", "pbj_pup:pbj_pup")
minetest.register_alias("nyancat:nyancat_rainbow", "pbj_pup:pbj_pup_candies")
end

26
mods/pbj_pup/license.md Normal file

@ -0,0 +1,26 @@
## PB&J Pup
PB&J Pup is a parody on the "Nyan Cat" TM toasted poptart meme.
## License and Copyright
(C) 2017 Vanessa Ezekowitz, Auke Kok, celeron55
* All Code: LGPL-2.1+
* All Images: CC-BY-4.0
## Sounds
* `pbj_pup_barks.ogg`:
Artist: Tomlija <tshesound@gmail.com>
License: CC-BY-3.0
Url: http://freesound.org/people/Tomlija/sounds/97392/
* `pbj_pup_howl.ogg`:
Copyright 2013 Iwan Gabovitch (qubodup)
License: CC-BY-3.0
Url: http://freesound.org/people/qubodup/sounds/193394/

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

@ -43,3 +43,13 @@ share_bones_time (Bone share time) int 1200 0
# Replaces old stairs with new ones. Only required for older worlds. # Replaces old stairs with new ones. Only required for older worlds.
enable_stairs_replace_abm (Replace old stairs) bool false enable_stairs_replace_abm (Replace old stairs) bool false
# Enable the PB&J Pup mod entirely
pbj_pup_enable (Enable PB&J pup mod) bool true
# Generate PB&J Pup blocks in the world
pbj_pup_generate (Generate PBJ Pup blocks in world) bool true
# Let the PB&J Pup mod replace Nyan Cat nodes
pbj_pup_alias_nyancat (Replace Nyan Cat blocks) bool false