Remove spores from mushrooms.

These have almost no value gameplay wise. Mushrooms spread
by their very nature into appropriate soil nearby, and
harvesting spores is something only scientists do. Actual
mushroom farmers leave a few mushrooms and put on more
manure, and keep the light off.

Modify the growth ABM to test for light levels and attempt
to plant a similar mushroom nearby (+/- 2 x,z, +/- y). Light
at both source and destination needs to be low enough. I've
tuned it to be 3-4 spaces from a torch.

Mushrooms will die in full sunlight, but they can survive under
trees and may grow out at night anywhere.

Removed obsolete textures.

Remove unused nodes and provide aliases for them.

Aliased obsolete nodes so no unknown item nodes appear.

Mushrooms die only in full sunlight (light level 15).
This commit is contained in:
Auke Kok 2015-12-14 23:53:27 -08:00 committed by paramat
parent 82299b94dc
commit 32bdb9a393
3 changed files with 64 additions and 100 deletions

@ -124,61 +124,11 @@ minetest.register_abm({
-- Mushrooms -- Mushrooms
-- --
local mushrooms_datas = { minetest.register_node("flowers:mushroom_red", {
{"brown", 2}, description = "Red Mushroom",
{"red", -6} tiles = {"flowers_mushroom_red.png"},
} inventory_image = "flowers_mushroom_red.png",
wield_image = "flowers_mushroom_red.png",
for _, m in pairs(mushrooms_datas) do
local name, nut = m[1], m[2]
-- Register fertile mushrooms
-- These are placed by mapgen and the growing ABM.
-- These drop an infertile mushroom, and 0 to 3 spore
-- nodes with an average of 1.25 per mushroom, for
-- a slow multiplication of mushrooms when farming.
minetest.register_node("flowers:mushroom_fertile_" .. name, {
description = string.sub(string.upper(name), 0, 1) ..
string.sub(name, 2) .. " Fertile Mushroom",
tiles = {"flowers_mushroom_" .. name .. ".png"},
inventory_image = "flowers_mushroom_" .. name .. ".png",
wield_image = "flowers_mushroom_" .. name .. ".png",
drawtype = "plantlike",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flammable = 3, attached_node = 1,
not_in_creative_inventory = 1},
drop = {
items = {
{items = {"flowers:mushroom_" .. name}},
{items = {"flowers:mushroom_spores_" .. name}, rarity = 4},
{items = {"flowers:mushroom_spores_" .. name}, rarity = 2},
{items = {"flowers:mushroom_spores_" .. name}, rarity = 2}
}
},
sounds = default.node_sound_leaves_defaults(),
on_use = minetest.item_eat(nut),
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
}
})
-- Register infertile mushrooms
-- These do not drop spores, to avoid the use of repeated digging
-- and placing of a single mushroom to generate unlimited spores.
minetest.register_node("flowers:mushroom_" .. name, {
description = string.sub(string.upper(name), 0, 1) ..
string.sub(name, 2) .. " Mushroom",
tiles = {"flowers_mushroom_" .. name .. ".png"},
inventory_image = "flowers_mushroom_" .. name .. ".png",
wield_image = "flowers_mushroom_" .. name .. ".png",
drawtype = "plantlike", drawtype = "plantlike",
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
@ -186,58 +136,72 @@ for _, m in pairs(mushrooms_datas) do
buildable_to = true, buildable_to = true,
groups = {snappy = 3, flammable = 3, attached_node = 1}, groups = {snappy = 3, flammable = 3, attached_node = 1},
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
on_use = minetest.item_eat(nut), on_use = minetest.item_eat(-5),
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
} }
}) })
-- Register mushroom spores minetest.register_node("flowers:mushroom_brown", {
description = "Brown Mushroom",
minetest.register_node("flowers:mushroom_spores_" .. name, { tiles = {"flowers_mushroom_brown.png"},
description = string.sub(string.upper(name), 0, 1) .. inventory_image = "flowers_mushroom_brown.png",
string.sub(name, 2) .. " Mushroom Spores", wield_image = "flowers_mushroom_brown.png",
drawtype = "signlike", drawtype = "plantlike",
tiles = {"flowers_mushroom_spores_" .. name .. ".png"},
inventory_image = "flowers_mushroom_spores_" .. name .. ".png",
wield_image = "flowers_mushroom_spores_" .. name .. ".png",
paramtype = "light", paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true, sunlight_propagates = true,
walkable = false, walkable = false,
buildable_to = true, buildable_to = true,
groups = {snappy = 3, flammable = 3, attached_node = 1},
sounds = default.node_sound_leaves_defaults(),
on_use = minetest.item_eat(1),
selection_box = { selection_box = {
type = "wallmounted", type = "fixed",
}, fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
groups = {dig_immediate = 3, attached_node = 1}, }
}) })
end
-- Register growing ABM
-- mushroom spread and death
minetest.register_abm({ minetest.register_abm({
nodenames = {"flowers:mushroom_spores_brown", "flowers:mushroom_spores_red"}, nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"},
interval = 11, interval = 11,
chance = 50, chance = 50,
action = function(pos, node) action = function(pos, node)
local node_under = minetest.get_node_or_nil({x = pos.x, if minetest.get_node_light(pos, nil) == 15 then
y = pos.y - 1, z = pos.z}) minetest.remove_node(pos)
end
local random = {
x = pos.x + math.random(-2,2),
y = pos.y + math.random(-1,1),
z = pos.z + math.random(-2,2)
}
local random_node = minetest.get_node_or_nil(random)
if not random_node then
return
end
if random_node.name ~= "air" then
return
end
local node_under = minetest.get_node_or_nil({x = random.x,
y = random.y - 1, z = random.z})
if not node_under then if not node_under then
return return
end end
if minetest.get_item_group(node_under.name, "soil") ~= 0 and if minetest.get_item_group(node_under.name, "soil") ~= 0 and
minetest.get_node_light(pos, nil) <= 13 then minetest.get_node_light(pos, nil) <= 9 and
if node.name == "flowers:mushroom_spores_brown" then minetest.get_node_light(random, nil) <= 9 then
minetest.set_node(pos, {name = "flowers:mushroom_fertile_brown"}) minetest.set_node(random, {name = node.name})
elseif node.name == "flowers:mushroom_spores_red" then
minetest.set_node(pos, {name = "flowers:mushroom_fertile_red"})
end
end end
end end
}) })
-- these old mushroom related nodes can be simplified now
minetest.register_alias("flowers:mushroom_spores_brown", "flowers:mushroom_brown")
minetest.register_alias("flowers:mushroom_spores_red", "flowers:mushroom_red")
minetest.register_alias("flowers:mushroom_fertile_brown", "flowers:mushroom_brown")
minetest.register_alias("flowers:mushroom_fertile_red", "flowers:mushroom_red")
-- --
-- Waterlily -- Waterlily

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 B