1316 lines
40 KiB
Lua
1316 lines
40 KiB
Lua
local S = minetest.get_translator("sf_nodes")
|
|
local NS = function(s) return s end
|
|
|
|
local WOOD_WALL_LIMIT = 6/16
|
|
local CHAINLINK_LIMIT = 6/16
|
|
local RAILING_LIMIT = 6/16
|
|
local RAILING_HEIGHT = 4/16
|
|
local TABLE_PLATE_LIMIT = 7/16
|
|
local TABLE_LEG_LIMIT = 7/16
|
|
local TORCH_LIGHT = 8
|
|
local PROTRUDING_LEAVES_MULTIPLY_COLOR = "#d0d0d0"
|
|
local PLANTLIKE_OFFSET_LEVELS = 15
|
|
|
|
local EDITOR = minetest.settings:get_bool("sf_editor", false) or minetest.settings:get_bool("creative_mode", false)
|
|
|
|
sf_nodes = {}
|
|
|
|
local make_leveled_node = function(nodename, description)
|
|
local def = minetest.registered_nodes[nodename]
|
|
local new_groups
|
|
if def.groups then
|
|
new_groups = table.copy(def.groups)
|
|
else
|
|
new_groups = {}
|
|
end
|
|
new_groups.leveled_node = 1
|
|
minetest.register_node(nodename.."_level", {
|
|
description = description,
|
|
tiles = def.tiles,
|
|
groups = new_groups,
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "leveled",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
use_texture_alpha = def.use_texture_alpha,
|
|
walkable = def.walkable,
|
|
paramtype = "light",
|
|
paramtype2 = "leveled",
|
|
place_param2 = 32,
|
|
sounds = def.sounds,
|
|
|
|
-- Store name of original node
|
|
_sf_unleveled_node_variant = nodename,
|
|
})
|
|
|
|
minetest.override_item(nodename, {
|
|
-- Store name of leveled node in the original node
|
|
_sf_leveled_node_variant = nodename.."_level"
|
|
})
|
|
end
|
|
local make_sound_variant_node = function(nodename, description, reverb_sound)
|
|
local def = table.copy(minetest.registered_nodes[nodename])
|
|
def.sounds = reverb_sound
|
|
def.description = description
|
|
def._sf_unreverb = nodename
|
|
if EDITOR and def.tiles and def.tiles[1] then
|
|
if type(def.tiles[1]) == "string" then
|
|
def.tiles[1] = "("..def.tiles[1] .. ")^sf_nodes_reverb_overlay.png"
|
|
elseif type(def.tiles[1]) == "table" and def.tiles[1].name then
|
|
def.tiles[1].name = "("..def.tiles[1].name .. ")^sf_nodes_reverb_overlay.png"
|
|
end
|
|
end
|
|
minetest.register_node(nodename .. "_reverb", def)
|
|
minetest.override_item(nodename, {
|
|
_sf_reverb = nodename .. "_reverb",
|
|
})
|
|
end
|
|
|
|
sf_nodes.update_plantlike_offset_node = function(pos)
|
|
local node = minetest.get_node(pos)
|
|
local def = minetest.registered_nodes[node.name]
|
|
if not def then
|
|
return
|
|
end
|
|
local below = table.copy(pos)
|
|
below.y = below.y - 1
|
|
local node_below = minetest.get_node(below)
|
|
|
|
local new_offset
|
|
if minetest.get_item_group(node_below.name, "leveled_node") == 1 then
|
|
local p2i = 64 - node_below.param2
|
|
new_offset = math.floor(p2i / 4)
|
|
new_offset = math.max(0, math.min(PLANTLIKE_OFFSET_LEVELS, new_offset))
|
|
else
|
|
new_offset = 0
|
|
end
|
|
|
|
local offset_group_val = minetest.get_item_group(node.name, "plantlike_offset")
|
|
if offset_group_val > 0 then
|
|
if new_offset > 0 then
|
|
node.name = string.sub(node.name, 1, string.len(node.name) - 2) .. string.format("%02d", new_offset)
|
|
minetest.set_node(pos, node)
|
|
else
|
|
node.name = def._sf_plantlike_base_node
|
|
minetest.set_node(pos, node)
|
|
end
|
|
elseif offset_group_val < 0 then
|
|
if new_offset > 0 then
|
|
node.name = def._sf_plantlike_offset_nodename_prefix .. string.format("%02d", new_offset)
|
|
minetest.set_node(pos, node)
|
|
else
|
|
if node_below.name == "air" then
|
|
minetest.remove_node(pos)
|
|
minetest.set_node(below, node)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
local make_plantlike_offset_nodes = function(nodename)
|
|
local def = minetest.registered_nodes[nodename]
|
|
for i=1, PLANTLIKE_OFFSET_LEVELS do
|
|
local hue = -(i-1)*12
|
|
local snum = string.format("%02d", i)
|
|
local new_box = table.copy(def.selection_box)
|
|
new_box.fixed[2] = -0.5 - (i/16)
|
|
new_box.fixed[5] = new_box.fixed[5] - (i/16)
|
|
minetest.register_node(nodename.."_offset_"..snum, {
|
|
walkable = false,
|
|
description = S("@1 (offset @2)", def.description, i),
|
|
tiles = def.tiles,
|
|
wield_image = def.tiles[1],
|
|
inventory_image = "("..def.tiles[1]..")^(sf_nodes_offset_overlay.png^[hsl:"..hue..":0:0)",
|
|
drawtype = "mesh",
|
|
mesh = "sf_nodes_plantlike_offset_"..i..".obj",
|
|
use_texture_alpha = "clip",
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1, plantlike_offset = i },
|
|
selection_box = new_box,
|
|
waving = 1,
|
|
drop = nodename,
|
|
_sf_plantlike_base_node = nodename,
|
|
visual_scale = def.visual_scale,
|
|
})
|
|
local orig_def = minetest.registered_nodes[nodename]
|
|
local groups = table.copy(orig_def.groups or {})
|
|
groups.plantlike_offset = -1
|
|
minetest.override_item(nodename, {
|
|
_sf_plantlike_offset_nodename_prefix = nodename.."_offset_",
|
|
groups = groups,
|
|
on_construct = function(pos)
|
|
sf_nodes.update_plantlike_offset_node(pos)
|
|
end,
|
|
})
|
|
end
|
|
end
|
|
|
|
minetest.register_node("sf_nodes:dirt", {
|
|
description = S("Dirt"),
|
|
tiles = {{ name = "sf_nodes_dirt.png", align_style="world", scale=2 }},
|
|
sounds = sf_sounds.node_sound_dirt_defaults(),
|
|
groups = { editor_breakable = 1 },
|
|
})
|
|
make_leveled_node("sf_nodes:dirt", S("Leveled Dirt"))
|
|
|
|
minetest.register_node("sf_nodes:coarse_dirt", {
|
|
description = S("Coarse Dirt"),
|
|
tiles = {{ name = "sf_nodes_coarse_dirt.png", align_style="world", scale=2 }},
|
|
sounds = sf_sounds.node_sound_dirt_defaults(),
|
|
groups = { editor_breakable = 1 },
|
|
})
|
|
make_leveled_node("sf_nodes:coarse_dirt", S("Leveled Coarse Dirt"))
|
|
|
|
|
|
minetest.register_node("sf_nodes:grass_block", {
|
|
description = S("Grass Block"),
|
|
tiles = {
|
|
{ name = "sf_nodes_grass_cover.png", align_style="world", scale=2 },
|
|
},
|
|
sounds = sf_sounds.node_sound_dirt_defaults(),
|
|
groups = { editor_breakable = 1 },
|
|
})
|
|
make_leveled_node("sf_nodes:grass_block", S("Leveled Grass Block"))
|
|
|
|
minetest.register_node("sf_nodes:mud", {
|
|
description = S("Mud"),
|
|
tiles = { "sf_nodes_mud.png" },
|
|
groups = { editor_breakable = 1, mud = 1 },
|
|
sounds = sf_sounds.node_sound_mud_defaults(),
|
|
})
|
|
make_leveled_node("sf_nodes:mud", S("Leveled Mud"))
|
|
|
|
|
|
minetest.register_node("sf_nodes:snow", {
|
|
description = S("Snow"),
|
|
tiles = { "sf_nodes_snow.png" },
|
|
groups = { editor_breakable = 1, snow = 1 },
|
|
sounds = sf_sounds.node_sound_snow_defaults(),
|
|
})
|
|
make_leveled_node("sf_nodes:snow", S("Leveled Snow"))
|
|
|
|
minetest.register_node("sf_nodes:gravel", {
|
|
description = S("Gravel"),
|
|
tiles = { "sf_nodes_gravel.png" },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_gravel_defaults(),
|
|
})
|
|
make_leveled_node("sf_nodes:gravel", S("Leveled Gravel"))
|
|
|
|
minetest.register_node("sf_nodes:stone", {
|
|
description = S("Stone"),
|
|
tiles = { { name = "sf_nodes_stone.png", align_style = "world", scale = 2 } },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
make_leveled_node("sf_nodes:stone", S("Leveled Stone"))
|
|
make_sound_variant_node("sf_nodes:stone", S("Reverb Stone"), sf_sounds.node_sound_stone_reverb_defaults())
|
|
make_sound_variant_node("sf_nodes:stone_level", S("Reverb Leveled Stone"), sf_sounds.node_sound_stone_reverb_defaults())
|
|
|
|
minetest.register_node("sf_nodes:stone_tile", {
|
|
description = S("Stone Tile"),
|
|
tiles = { { name = "sf_nodes_stone_tile.png", align_style = "world", scale = 2 } },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
make_sound_variant_node("sf_nodes:stone_tile", S("Reverb Stone Tile"), sf_sounds.node_sound_stone_reverb_defaults())
|
|
|
|
minetest.register_node("sf_nodes:stone_tile_big", {
|
|
description = S("Big Stone Tile"),
|
|
tiles = {
|
|
{ name = "sf_nodes_stone_tile_big.png", align_style = "world", scale = 2 },
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
make_sound_variant_node("sf_nodes:stone_tile_big", S("Reverb Big Stone Tile"), sf_sounds.node_sound_stone_reverb_defaults())
|
|
|
|
minetest.register_node("sf_nodes:stone_tile_huge", {
|
|
description = S("Huge Stone Tile"),
|
|
tiles = {
|
|
{ name = "sf_nodes_stone_tile_huge.png", align_style = "world", scale = 2 },
|
|
{ name = "sf_nodes_stone_tile_huge.png", align_style = "world", scale = 2 },
|
|
{ name = "sf_nodes_stone_smooth.png", align_style = "world", scale = 2 },
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
make_sound_variant_node("sf_nodes:stone_tile_huge", S("Reverb Huge Stone Tile"), sf_sounds.node_sound_stone_reverb_defaults())
|
|
|
|
minetest.register_node("sf_nodes:stone_brick", {
|
|
description = S("Stone Brick"),
|
|
tiles = { { name = "sf_nodes_stone_brick.png", align_style = "world", scale = 2 } },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
make_sound_variant_node("sf_nodes:stone_brick", S("Reverb Stone Brick"), sf_sounds.node_sound_stone_reverb_defaults())
|
|
|
|
minetest.register_node("sf_nodes:stone_smooth", {
|
|
description = S("Smooth Stone"),
|
|
tiles = { { name = "sf_nodes_stone_smooth.png", align_style = "world", scale = 2 } },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
make_leveled_node("sf_nodes:stone_smooth", S("Leveled Smooth Stone"))
|
|
make_sound_variant_node("sf_nodes:stone_smooth", S("Reverb Smooth Stone"), sf_sounds.node_sound_stone_reverb_defaults())
|
|
make_sound_variant_node("sf_nodes:stone_smooth_level", S("Reverb Leveled Smooth Stone"), sf_sounds.node_sound_stone_reverb_defaults())
|
|
|
|
minetest.register_node("sf_nodes:white_stone", {
|
|
description = S("White Stone"),
|
|
tiles = { { name = "sf_nodes_white_stone.png", align_style = "world", scale = 2 } },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
make_leveled_node("sf_nodes:white_stone", S("Leveled White Stone"))
|
|
|
|
minetest.register_node("sf_nodes:white_stone_tile", {
|
|
description = S("White Stone Tile"),
|
|
tiles = { { name = "sf_nodes_white_stone_tile.png", align_style = "world", scale = 2 } },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:white_stone_tile_big", {
|
|
description = S("Big White Stone Tile"),
|
|
tiles = {
|
|
{ name = "sf_nodes_white_stone_tile_big.png", align_style = "world", scale = 2 },
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:white_stone_brick", {
|
|
description = S("White Stone Brick"),
|
|
tiles = { { name = "sf_nodes_white_stone_brick.png", align_style = "world", scale = 2 } },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:white_stone_smooth", {
|
|
description = S("Smooth White Stone"),
|
|
tiles = { { name = "sf_nodes_white_stone_smooth.png", align_style = "world", scale = 2 } },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
make_leveled_node("sf_nodes:white_stone_smooth", S("Leveled Smooth White Stone"))
|
|
|
|
|
|
|
|
local pebbles = {
|
|
1, 2, 3, 4, 5, 6, 7
|
|
}
|
|
for p=1, #pebbles do
|
|
local size = pebbles[p]
|
|
minetest.register_node("sf_nodes:pebble_"..size, {
|
|
description = S("Pebble (size @1)", size),
|
|
tiles = { { name = "sf_nodes_stone.png", align_style = "world", scale = 2 } },
|
|
paramtype = "light",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -size/16, -0.5, -size/16, size/16, (size/16)-0.5, size/16 }
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
end
|
|
|
|
minetest.register_node("sf_nodes:pedestal", {
|
|
description = S("Pedestal"),
|
|
tiles = { "sf_nodes_pedestal_top.png", "sf_nodes_pedestal_side.png" },
|
|
groups = { editor_breakable = 1 },
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, 6/16, -0.5, 0.5, 0.5, 0.5 }, -- plate
|
|
{ -5/16, -7/16, -5/16, 5/16, 6/16, 5/16 }, -- body
|
|
{ -0.5, -0.5, -0.5, 0.5, -7/16, 0.5 }, -- base
|
|
},
|
|
},
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:concrete", {
|
|
description = S("Concrete"),
|
|
tiles = { "sf_nodes_concrete.png" },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
make_leveled_node("sf_nodes:concrete", S("Leveled Concrete"))
|
|
|
|
local wconcrete_tiles
|
|
if EDITOR then
|
|
wconcrete_tiles = { "sf_nodes_concrete.png^sf_nodes_weak_concrete_overlay.png" }
|
|
else
|
|
wconcrete_tiles = { "sf_nodes_concrete.png" }
|
|
end
|
|
minetest.register_node("sf_nodes:weak_concrete", {
|
|
description = S("Weak Concrete"),
|
|
tiles = wconcrete_tiles,
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_stone_defaults(),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:tree", {
|
|
description = S("Tree"),
|
|
paramtype2 = "facedir",
|
|
tiles = {
|
|
"sf_nodes_tree_top.png",
|
|
"sf_nodes_tree_top.png",
|
|
"sf_nodes_tree.png",
|
|
},
|
|
groups = { editor_breakable = 1, tree = 1 },
|
|
sounds = sf_sounds.node_sound_tree_defaults(0.9),
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
return minetest.rotate_and_place(itemstack, placer, pointed_thing, EDITOR, { force_facedir = true })
|
|
end,
|
|
})
|
|
|
|
local small_tree_names = {
|
|
[2] = NS("Tiny Tree"),
|
|
[4] = NS("Mini Tree"),
|
|
[6] = NS("Small Tree"),
|
|
}
|
|
for i=2, 6, 2 do
|
|
minetest.register_node("sf_nodes:tree_small_"..i, {
|
|
description = S(small_tree_names[i]),
|
|
paramtype2 = "facedir",
|
|
tiles = {
|
|
"sf_nodes_tree_top_small_"..i..".png",
|
|
"sf_nodes_tree_top_small_"..i..".png",
|
|
"sf_nodes_tree_small_"..i..".png",
|
|
},
|
|
paramtype = "light",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -i/16, -0.5, -i/16, i/16, 0.5, i/16 },
|
|
},
|
|
groups = { editor_breakable = 1, tree = 1, tree_small = i },
|
|
sounds = sf_sounds.node_sound_tree_defaults(0.9),
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
return minetest.rotate_and_place(itemstack, placer, pointed_thing, EDITOR, { force_facedir = true })
|
|
end,
|
|
})
|
|
minetest.register_node("sf_nodes:tree_small_"..i.."x", {
|
|
description = S("@1 Extension", S(small_tree_names[i])),
|
|
tiles = {
|
|
"sf_nodes_tree_top_small_"..i..".png",
|
|
"sf_nodes_tree_top_small_"..i..".png",
|
|
"sf_nodes_tree_small_"..i..".png",
|
|
},
|
|
paramtype = "light",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -i/16, -1.5+(1/128), -i/16, i/16, 0.5, i/16 },
|
|
},
|
|
groups = { editor_breakable = 1, tree = 1, tree_small = i, tree_small_extension = 1 },
|
|
sounds = sf_sounds.node_sound_tree_defaults(0.9),
|
|
})
|
|
|
|
end
|
|
|
|
minetest.register_node("sf_nodes:leaves", {
|
|
description = S("Decidious Leaves"),
|
|
drawtype = "allfaces_optional",
|
|
paramtype = "light",
|
|
tiles = { "sf_nodes_leaves.png" },
|
|
groups = { editor_breakable = 1, leaves = 1 },
|
|
sounds = sf_sounds.node_sound_leaves_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:leaves_protrusion", {
|
|
description = S("Protruding Decidious Leaves"),
|
|
drawtype = "plantlike",
|
|
paramtype = "light",
|
|
paramtype2 = "wallmounted",
|
|
sunlight_propagates = true,
|
|
tiles = { "sf_nodes_leaves_plantlike.png" },
|
|
groups = { editor_breakable = 1, leaves_protrusion = 1 },
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 1/16, 0.5 },
|
|
},
|
|
visual_scale = 1.3,
|
|
sounds = sf_sounds.node_sound_leaves_defaults(),
|
|
walkable = false,
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("sf_nodes:conifer_needles", {
|
|
description = S("Conifer Needles"),
|
|
drawtype = "allfaces_optional",
|
|
paramtype = "light",
|
|
tiles = { "sf_nodes_conifer_needles.png" },
|
|
groups = { editor_breakable = 1, leaves = 1 },
|
|
sounds = sf_sounds.node_sound_leaves_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:conifer_needles_protrusion", {
|
|
description = S("Protruding Conifer Needles"),
|
|
paramtype = "light",
|
|
paramtype2 = "wallmounted",
|
|
groups = { editor_breakable = 1, leaves_protrusion = 1 },
|
|
tiles = { "sf_nodes_conifer_needles_plantlike.png^[multiply:"..PROTRUDING_LEAVES_MULTIPLY_COLOR },
|
|
drawtype = "plantlike",
|
|
walkable = false,
|
|
visual_scale = 1.2,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 },
|
|
},
|
|
})
|
|
|
|
|
|
minetest.register_node("sf_nodes:wood", {
|
|
description = S("Wooden Planks"),
|
|
tiles = { "sf_nodes_wood.png" },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_wood_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:plank", {
|
|
description = S("Wooden Plank"),
|
|
tiles = { "sf_nodes_wood_plank.png" },
|
|
paramtype = "light",
|
|
paramtype2 = "4dir",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, 6/16, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_wood_defaults(1.2),
|
|
})
|
|
minetest.register_node("sf_nodes:metal_plate", {
|
|
description = S("Metal Plate"),
|
|
tiles = { {name="sf_nodes_rusty_metal_soft.png", align_style="world", scale=2} },
|
|
paramtype = "light",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, 6/16, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_metal_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:industrial_light", {
|
|
description = S("Industrial Light"),
|
|
tiles = { "sf_nodes_industrial_light.png" },
|
|
paramtype = "light",
|
|
light_source = 10,
|
|
sunlight_propagates = true,
|
|
drawtype = "nodebox",
|
|
paramtype2 = "wallmounted",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -4/16, -0.5, -4/16, 4/16, 5/16, 4/16 },
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_metal_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:metal", {
|
|
description = S("Metal"),
|
|
tiles = { {name="sf_nodes_rusty_metal_soft.png", align_style="world", scale=2} },
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_metal_defaults(),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:plank_small", {
|
|
description = S("Small Wooden Plank"),
|
|
tiles = { "sf_nodes_wood_plank_small.png" },
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
drawtype = "nodebox",
|
|
paramtype2 = "4dir",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, 6/16, -2/16, 0.5, 0.5, 2/16 },
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_wood_defaults(1.4),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:chainlink", {
|
|
description = S("Chainlink Fence"),
|
|
tiles = {
|
|
"sf_nodes_chainlink_side.png",
|
|
"sf_nodes_chainlink_side.png",
|
|
"sf_nodes_chainlink_side.png",
|
|
"sf_nodes_chainlink_side.png",
|
|
"sf_nodes_chainlink.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "4dir",
|
|
use_texture_alpha = "clip",
|
|
sunlight_propagates = true,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, -CHAINLINK_LIMIT },
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:railing", {
|
|
description = S("Railing"),
|
|
tiles = {
|
|
"sf_nodes_rusty_metal.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "4dir",
|
|
use_texture_alpha = "clip",
|
|
sunlight_propagates = true,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -5/16, -0.5, -0.5, -3/16, RAILING_HEIGHT-1/16, -RAILING_LIMIT }, -- left pole
|
|
{ 3/16, -0.5, -0.5, 5/16, RAILING_HEIGHT-1/16, -RAILING_LIMIT }, -- right pole
|
|
{ -0.5, RAILING_HEIGHT-1/16, -0.5, 0.5, RAILING_HEIGHT, -RAILING_LIMIT }, -- rail
|
|
},
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_metal_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:railing_corner", {
|
|
description = S("Inner Railing Corner"),
|
|
tiles = {
|
|
"sf_nodes_rusty_metal.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "4dir",
|
|
use_texture_alpha = "clip",
|
|
sunlight_propagates = true,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -5/16, -0.5, -0.5, -3/16, RAILING_HEIGHT-1/16, -RAILING_LIMIT }, -- left pole
|
|
{ 3/16, -0.5, -0.5, 5/16, RAILING_HEIGHT-1/16, -RAILING_LIMIT }, -- right pole
|
|
{ -0.5, -0.5, -5/16, -RAILING_LIMIT, RAILING_HEIGHT-1/16, -3/16 }, -- front pole
|
|
{ -0.5, -0.5, 3/16, -RAILING_LIMIT, RAILING_HEIGHT-1/16, 5/16 }, -- back pole
|
|
{ -0.5, RAILING_HEIGHT-1/16, -0.5, 0.5, RAILING_HEIGHT, -RAILING_LIMIT }, -- rail left-right
|
|
{ -0.5, RAILING_HEIGHT-1/16, -RAILING_LIMIT, -RAILING_LIMIT, RAILING_HEIGHT, 0.5 } -- rail front-back
|
|
},
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_metal_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:railing_corner_outer", {
|
|
description = S("Outer Railing Corner"),
|
|
tiles = {
|
|
"sf_nodes_rusty_metal.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "4dir",
|
|
use_texture_alpha = "clip",
|
|
sunlight_propagates = true,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, RAILING_HEIGHT-1/16, -0.5, -RAILING_LIMIT, RAILING_HEIGHT, -RAILING_LIMIT }, -- rail piece
|
|
},
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_metal_defaults(),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:wood_wall", {
|
|
description = S("Wooden Wall"),
|
|
tiles = { { name = "sf_nodes_wood.png", align_style = "world" } },
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "4dir",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, -WOOD_WALL_LIMIT },
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_wood_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:wood_wall_corner_inner", {
|
|
description = S("Inner Wooden Corner Wall"),
|
|
tiles = { { name = "sf_nodes_wood.png", align_style = "world" } },
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "4dir",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { { -0.5, -0.5, -0.5, -WOOD_WALL_LIMIT, 0.5, 0.5 },
|
|
{ -WOOD_WALL_LIMIT, -0.5, -0.5, 0.5, 0.5, -WOOD_WALL_LIMIT }
|
|
},
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_wood_defaults(),
|
|
})
|
|
minetest.register_node("sf_nodes:wood_wall_corner_outer", {
|
|
description = S("Outer Wooden Corner Wall"),
|
|
tiles = { { name = "sf_nodes_wood.png", align_style = "world" } },
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "4dir",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { { WOOD_WALL_LIMIT, -0.5, -0.5, 0.5, 0.5, -WOOD_WALL_LIMIT } },
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_wood_defaults(),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:wood_table2_piece", {
|
|
description = S("Table Piece"),
|
|
tiles = { { name = "sf_nodes_wood.png", align_style = "world" } },
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "4dir",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, TABLE_PLATE_LIMIT, -0.5, 0.5, 0.5, 0.5 }, -- plate
|
|
{ -0.5, -0.5, -0.5, -TABLE_LEG_LIMIT, TABLE_PLATE_LIMIT, -TABLE_LEG_LIMIT }, -- leg 1
|
|
{ -0.5, -0.5, TABLE_LEG_LIMIT, -TABLE_LEG_LIMIT, TABLE_PLATE_LIMIT, 0.5 }, -- leg 2
|
|
},
|
|
},
|
|
groups = { editor_breakable = 1 },
|
|
sounds = sf_sounds.node_sound_wood_defaults(),
|
|
})
|
|
|
|
|
|
local darkness_pointable, darkness_drawtype, darkness_tiles
|
|
if EDITOR then
|
|
darkness_pointable = true
|
|
darkness_drawtype = "allfaces"
|
|
darkness_tiles = { "sf_nodes_darkness.png" }
|
|
else
|
|
darkness_pointable = false
|
|
darkness_drawtype = "airlike"
|
|
darkness_tiles = nil
|
|
end
|
|
|
|
minetest.register_node("sf_nodes:darkness", {
|
|
description = S("Darkness"),
|
|
pointable = darkness_pointable,
|
|
walkable = false,
|
|
drawtype = darkness_drawtype,
|
|
tiles = darkness_tiles,
|
|
paramtype = "light",
|
|
wield_image = "sf_nodes_darkness.png",
|
|
inventory_image = "sf_nodes_darkness.png",
|
|
groups = { editor_breakable = 1 },
|
|
})
|
|
|
|
local liquid_pointable
|
|
if EDITOR then
|
|
liquid_pointable = true
|
|
else
|
|
liquid_pointable = false
|
|
end
|
|
|
|
local make_liquid_node = function(nodename, tile, description, description_flowing, description_puddle, post_effect_color)
|
|
minetest.register_node(nodename, {
|
|
description = description,
|
|
pointable = liquid_pointable,
|
|
walkable = false,
|
|
tiles = { tile },
|
|
post_effect_color = post_effect_color,
|
|
post_effect_color_shaded = true,
|
|
drawtype = "liquid",
|
|
paramtype = "light",
|
|
use_texture_alpha = "blend",
|
|
sounds = sf_sounds.node_sound_water_defaults(),
|
|
liquid_move_physics = true,
|
|
move_resistance = 1,
|
|
groups = { editor_breakable = 1 },
|
|
liquid_alternative_source = nodename,
|
|
liquid_alternative_flowing = nodename.."_flowing",
|
|
liquid_range = 2,
|
|
})
|
|
minetest.register_node(nodename.."_flowing", {
|
|
description = description_flowing,
|
|
pointable = liquid_pointable,
|
|
walkable = false,
|
|
tiles = { tile },
|
|
special_tiles = {
|
|
{ name = tile, backface_culling = false },
|
|
{ name = tile, backface_culling = false },
|
|
},
|
|
post_effect_color = post_effect_color,
|
|
post_effect_color_shaded = true,
|
|
drawtype = "flowingliquid",
|
|
paramtype = "light",
|
|
use_texture_alpha = "blend",
|
|
sounds = sf_sounds.node_sound_water_defaults(),
|
|
liquid_move_physics = true,
|
|
move_resistance = 1,
|
|
groups = { editor_breakable = 1 },
|
|
liquid_alternative_source = nodename,
|
|
liquid_alternative_flowing = nodename.."_flowing",
|
|
liquid_range = 2,
|
|
})
|
|
|
|
|
|
|
|
local def = minetest.registered_nodes[nodename]
|
|
minetest.register_node(nodename.."_puddle", {
|
|
description = description_puddle,
|
|
pointable = liquid_pointable,
|
|
walkable = false,
|
|
tiles = { tile, "blank.png" },
|
|
post_effect_color = post_effect_color,
|
|
post_effect_color_shaded = true,
|
|
groups = { editor_breakable = 1, leveled_node = 1, puddle = 1 },
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "leveled",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
use_texture_alpha = "blend",
|
|
walkable = false,
|
|
paramtype = "light",
|
|
paramtype2 = "leveled",
|
|
place_param2 = 32,
|
|
sounds = sf_sounds.node_sound_puddle_defaults(),
|
|
liquid_move_physics = false,
|
|
move_resistance = 0,
|
|
})
|
|
end
|
|
|
|
make_liquid_node("sf_nodes:water", "sf_nodes_water.png", S("Water"), S("Flowing Water"), S("Water Puddle"), {r=45,g=106,b=183,a=64})
|
|
make_liquid_node("sf_nodes:dirty_water", "sf_nodes_dirty_water.png", S("Dirty Water"), S("Flowing Dirty Water"), S("Dirty Water Puddle"), {r=199,g=156,b=107,a=107})
|
|
|
|
-- HACK: This is a special mud with puddle footstep sounds.
|
|
-- It may only be placed below puddle nodes because the puddle nodes
|
|
-- themselves fail to play the puddle sound when placed above a solid node.
|
|
minetest.register_node("sf_nodes:puddle_mud", {
|
|
description = S("Puddle Mud"),
|
|
tiles = { "sf_nodes_puddle_mud.png" },
|
|
groups = { editor_breakable = 1, mud = 2 },
|
|
sounds = sf_sounds.node_sound_puddle_defaults(),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:torch_floor", {
|
|
description = S("Torch (floor)"),
|
|
tiles = {
|
|
"sf_nodes_torch_floor_top.png",
|
|
"sf_nodes_torch_floor_bottom.png",
|
|
"sf_nodes_torch_floor_side.png",
|
|
},
|
|
paramtype = "light",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -1/16, -0.5, -1/16, 1/16, 0, 1/16 }, -- stick
|
|
},
|
|
},
|
|
light_source = TORCH_LIGHT,
|
|
groups = { editor_breakable = 1, torch = 1 },
|
|
walkable = false,
|
|
})
|
|
minetest.register_node("sf_nodes:torch_wall", {
|
|
description = S("Torch (wall)"),
|
|
tiles = {
|
|
"sf_nodes_torch_wall_top.png",
|
|
"sf_nodes_torch_wall_bottom.png",
|
|
"sf_nodes_torch_wall_side.png",
|
|
},
|
|
paramtype = "light",
|
|
paramtype2 = "4dir",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -1/16, 0, 5/16, 1/16, 1/16, 0.5 }, -- holder 1
|
|
{ -1/16, -3/16, 5/16, 1/16, -2/16, 0.5 }, -- holder 2
|
|
{ -1/16, -4/16, 3/16, 1/16, 4/16, 5/16 }, -- stick
|
|
},
|
|
},
|
|
light_source = TORCH_LIGHT,
|
|
groups = { editor_breakable = 1, torch = 1 },
|
|
walkable = false,
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:ladder", {
|
|
description = S("Wooden Ladder"),
|
|
tiles = { "sf_nodes_ladder_top.png",
|
|
"sf_nodes_ladder_bottom.png",
|
|
"sf_nodes_ladder_side.png",
|
|
"sf_nodes_ladder_side.png",
|
|
"sf_nodes_ladder.png",
|
|
"sf_nodes_ladder.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
use_texture_alpha = "clip",
|
|
paramtype2 = "4dir",
|
|
walkable = false,
|
|
climbable = true,
|
|
groups = { editor_breakable = 1 },
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, -0.5, 6/16, -6/16, 0.5, 0.5 }, -- left stick
|
|
{ 6/16, -0.5, 6/16, 0.5, 0.5, 0.5 }, -- right stick
|
|
{ -6/16, 5/16, 6/16, 6/16, 7/16, 0.5 }, -- rung 1
|
|
{ -6/16, 1/16, 6/16, 6/16, 3/16, 0.5 }, -- rung 2
|
|
{ -6/16, -3/16, 6/16, 6/16, -1/16, 0.5 }, -- rung 3
|
|
{ -6/16, -7/16, 6/16, 6/16, -5/16, 0.5 }, -- rung 4
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, 6/16, 0.5, 0.5, 0.5 },
|
|
},
|
|
sounds = sf_sounds.node_sound_wood_defaults(1.4),
|
|
})
|
|
minetest.register_node("sf_nodes:metal_ladder", {
|
|
description = S("Metal Ladder"),
|
|
tiles = { "sf_nodes_metal_ladder_top.png",
|
|
"sf_nodes_metal_ladder_bottom.png",
|
|
"sf_nodes_metal_ladder_side.png",
|
|
"sf_nodes_metal_ladder_side.png",
|
|
"sf_nodes_metal_ladder.png",
|
|
"sf_nodes_metal_ladder.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
use_texture_alpha = "clip",
|
|
paramtype2 = "4dir",
|
|
walkable = false,
|
|
climbable = true,
|
|
groups = { editor_breakable = 1 },
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, -0.5, 6/16, -6/16, 0.5, 0.5 }, -- left stick
|
|
{ 6/16, -0.5, 6/16, 0.5, 0.5, 0.5 }, -- right stick
|
|
{ -6/16, 5/16, 6/16, 6/16, 7/16, 0.5 }, -- rung 1
|
|
{ -6/16, 1/16, 6/16, 6/16, 3/16, 0.5 }, -- rung 2
|
|
{ -6/16, -3/16, 6/16, 6/16, -1/16, 0.5 }, -- rung 3
|
|
{ -6/16, -7/16, 6/16, 6/16, -5/16, 0.5 }, -- rung 4
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, 6/16, 0.5, 0.5, 0.5 },
|
|
},
|
|
sounds = sf_sounds.node_sound_metal_defaults(1.4),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:metal_ladder_x", {
|
|
description = S("Metal Ladder Extension"),
|
|
tiles = { "sf_nodes_metal_ladder_top.png",
|
|
"sf_nodes_metal_ladder_bottom.png",
|
|
"sf_nodes_metal_ladder_side.png",
|
|
"sf_nodes_metal_ladder_side.png",
|
|
"sf_nodes_metal_ladder.png",
|
|
"sf_nodes_metal_ladder.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
use_texture_alpha = "clip",
|
|
paramtype2 = "4dir",
|
|
walkable = false,
|
|
climbable = true,
|
|
groups = { editor_breakable = 1 },
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, -1.5, 6/16, -6/16, 0.5, 0.5 }, -- left stick
|
|
{ 6/16, -1.5, 6/16, 0.5, 0.5, 0.5 }, -- right stick
|
|
{ -6/16, 5/16, 6/16, 6/16, 7/16, 0.5 }, -- rung 1
|
|
{ -6/16, 1/16, 6/16, 6/16, 3/16, 0.5 }, -- rung 2
|
|
{ -6/16, -3/16, 6/16, 6/16, -1/16, 0.5 }, -- rung 3
|
|
{ -6/16, -7/16, 6/16, 6/16, -5/16, 0.5 }, -- rung 4
|
|
|
|
{ -6/16, -9/16, 6/16, 6/16, -11/16, 0.5 }, -- rung 5
|
|
{ -6/16, -13/16, 6/16, 6/16, -15/16, 0.5 }, -- rung 5
|
|
{ -6/16, -17/16, 6/16, 6/16, -19/16, 0.5 }, -- rung 5
|
|
{ -6/16, -21/16, 6/16, 6/16, -23/16, 0.5 }, -- rung 5
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -1.5, 6/16, 0.5, 0.5, 0.5 },
|
|
},
|
|
sounds = sf_sounds.node_sound_metal_defaults(1.4),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:fern", {
|
|
walkable = false,
|
|
description = S("Fern"),
|
|
tiles = { "sf_nodes_fern.png" },
|
|
drawtype = "mesh",
|
|
mesh = "sf_nodes_plantlike.obj",
|
|
use_texture_alpha = "clip",
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1 },
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -6/16, -0.5, -6/16, 6/16, 0.5, 6/16 },
|
|
},
|
|
waving = 1,
|
|
})
|
|
make_plantlike_offset_nodes("sf_nodes:fern")
|
|
|
|
minetest.register_node("sf_nodes:grass", {
|
|
walkable = false,
|
|
description = S("Small Grass"),
|
|
tiles = { "sf_nodes_grass.png" },
|
|
drawtype = "mesh",
|
|
mesh = "sf_nodes_plantlike.obj",
|
|
use_texture_alpha = "clip",
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1 },
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -6/16, -0.5, -6/16, 6/16, 0, 6/16 },
|
|
},
|
|
waving = 1,
|
|
})
|
|
make_plantlike_offset_nodes("sf_nodes:grass")
|
|
|
|
minetest.register_node("sf_nodes:grass_2", {
|
|
walkable = false,
|
|
description = S("Medium Grass"),
|
|
tiles = { "sf_nodes_grass_2.png" },
|
|
drawtype = "mesh",
|
|
mesh = "sf_nodes_plantlike.obj",
|
|
use_texture_alpha = "clip",
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1 },
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -6/16, -0.5, -6/16, 6/16, 0, 6/16 },
|
|
},
|
|
waving = 1,
|
|
visual_scale = 1.1,
|
|
})
|
|
make_plantlike_offset_nodes("sf_nodes:grass_2")
|
|
|
|
minetest.register_node("sf_nodes:grass_3", {
|
|
walkable = false,
|
|
description = S("Tall Grass"),
|
|
tiles = { "sf_nodes_grass_3.png" },
|
|
drawtype = "mesh",
|
|
mesh = "sf_nodes_plantlike.obj",
|
|
use_texture_alpha = "clip",
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1 },
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -7/16, -0.5, -7/16, 7/16, 0.5, 7/16 },
|
|
},
|
|
waving = 1,
|
|
visual_scale = 1.2,
|
|
})
|
|
make_plantlike_offset_nodes("sf_nodes:grass_3")
|
|
|
|
|
|
minetest.register_node("sf_nodes:ivy", {
|
|
walkable = false,
|
|
description = S("Ivy"),
|
|
tiles = { "sf_nodes_ivy.png" },
|
|
drawtype = "signlike",
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
paramtype2 = "wallmounted",
|
|
groups = { editor_breakable = 1 },
|
|
selection_box = {
|
|
type = "wallmounted",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, -7/16 },
|
|
},
|
|
})
|
|
minetest.register_node("sf_nodes:ivy_sprouting", {
|
|
walkable = false,
|
|
description = S("Sprouting Ivy"),
|
|
tiles = { "sf_nodes_ivy_sprouting.png" },
|
|
drawtype = "signlike",
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
paramtype2 = "wallmounted",
|
|
groups = { editor_breakable = 1 },
|
|
selection_box = {
|
|
type = "wallmounted",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, -7/16 },
|
|
},
|
|
})
|
|
minetest.register_node("sf_nodes:ivy_root", {
|
|
walkable = false,
|
|
description = S("Ivy Root"),
|
|
tiles = { "sf_nodes_ivy_root.png" },
|
|
drawtype = "signlike",
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
paramtype2 = "wallmounted",
|
|
groups = { editor_breakable = 1 },
|
|
selection_box = {
|
|
type = "wallmounted",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, -7/16 },
|
|
},
|
|
})
|
|
|
|
|
|
|
|
local spikeplant_weak_tiles
|
|
if EDITOR then
|
|
spikeplant_weak_tiles = { "sf_nodes_spikeplant_weak.png" }
|
|
else
|
|
spikeplant_weak_tiles = { "sf_nodes_spikeplant.png" }
|
|
end
|
|
|
|
-- Same as normal shadow bush, except it is supposed to be destroyed
|
|
-- by a special event at the shadow bush barrier in the Dead Forest.
|
|
minetest.register_node("sf_nodes:spikeplant_weak", {
|
|
description = S("Weak Shadow Bush"),
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1, leaves = 1, disable_jump = 1 },
|
|
drawtype = "allfaces_optional",
|
|
tiles = spikeplant_weak_tiles,
|
|
move_resistance = 1,
|
|
damage_per_second = 1,
|
|
walkable = true,
|
|
collision_box = {
|
|
type = "fixed",
|
|
fixed = {-6/16, -0.5, -6/16, 6/16, 6/16, 6/16},
|
|
},
|
|
sounds = sf_sounds.node_sound_leaves_defaults(0.8),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:spikeplant", {
|
|
description = S("Shadow Bush"),
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1, leaves = 1, disable_jump = 1 },
|
|
tiles = { "sf_nodes_spikeplant.png" },
|
|
drawtype = "allfaces_optional",
|
|
move_resistance = 1,
|
|
damage_per_second = 1,
|
|
walkable = true,
|
|
collision_box = {
|
|
type = "fixed",
|
|
fixed = {-6/16, -0.5, -6/16, 6/16, 6/16, 6/16},
|
|
},
|
|
sounds = sf_sounds.node_sound_leaves_defaults(0.8),
|
|
})
|
|
minetest.register_node("sf_nodes:spikeplant_inner", {
|
|
description = S("Branchy Shadow Bush"),
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1, leaves = 1, disable_jump = 1 },
|
|
tiles = { "sf_nodes_spikeplant_inner.png" },
|
|
drawtype = "allfaces_optional",
|
|
move_resistance = 2,
|
|
damage_per_second = 2,
|
|
walkable = true,
|
|
collision_box = {
|
|
type = "fixed",
|
|
fixed = {-6/16, -0.5, -6/16, 6/16, 6/16, 6/16},
|
|
},
|
|
sounds = sf_sounds.node_sound_leaves_defaults(0.8),
|
|
})
|
|
minetest.register_node("sf_nodes:spikeplant_protrusion", {
|
|
description = S("Protuding Shadow Bush"),
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1, leaves_protrusion = 1, disable_jump = 1 },
|
|
tiles = { "sf_nodes_spikeplant_plantlike.png" },
|
|
drawtype = "plantlike",
|
|
paramtype2 = "wallmounted",
|
|
move_resistance = 1,
|
|
walkable = false,
|
|
damage_per_second = 1,
|
|
sounds = sf_sounds.node_sound_leaves_defaults(0.8),
|
|
})
|
|
minetest.register_node("sf_nodes:spikeplant_angled", {
|
|
description = S("Angled Shadow Bush"),
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1 },
|
|
tiles = { "sf_nodes_spikeplant_plantlike.png" },
|
|
drawtype = "plantlike",
|
|
paramtype2 = "meshoptions",
|
|
move_resistance = 1,
|
|
walkable = false,
|
|
damage_per_second = 1,
|
|
place_param2 = 4,
|
|
sounds = sf_sounds.node_sound_leaves_defaults(0.8),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:bush", {
|
|
description = S("Bush"),
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1, leaves = 1 },
|
|
tiles = { "sf_nodes_bush.png" },
|
|
drawtype = "allfaces_optional",
|
|
collision_box = {
|
|
type = "fixed",
|
|
fixed = {-6/16, -6/16, -6/16, 6/16, 6/16, 6/16},
|
|
},
|
|
sounds = sf_sounds.node_sound_leaves_defaults(1.1),
|
|
})
|
|
minetest.register_node("sf_nodes:bush_protrusion", {
|
|
description = S("Protruding Bush"),
|
|
paramtype = "light",
|
|
paramtype2 = "wallmounted",
|
|
groups = { editor_breakable = 1, leaves_protrusion = 1 },
|
|
tiles = { "sf_nodes_bush_plantlike.png" },
|
|
drawtype = "plantlike",
|
|
walkable = false,
|
|
visual_scale = 1.2,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-6/16, -0.5, -6/16, 6/16, 0, 6/16 },
|
|
},
|
|
sounds = sf_sounds.node_sound_leaves_defaults(1.1),
|
|
})
|
|
|
|
|
|
minetest.register_node("sf_nodes:light_crystal", {
|
|
description = S("Light Crystal"),
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
light_source = minetest.LIGHT_MAX,
|
|
drawtype = "nodebox",
|
|
groups = { editor_breakable = 1, dig_immediate = 3 },
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -2/16, -0.5, -2/16, 2/16, 2/16, 2/16 }, -- center piece
|
|
{ -4/16, -0.5, -1/16, 4/16, -2/16, 1/16 }, -- low piece 1
|
|
{ -1/16, -0.5, -4/16, 1/16, -2/16, 4/16 }, -- low piece 2
|
|
{ -3/16, -0.5, -3/16, 3/16, -7/16, 3/16 }, -- flatty
|
|
},
|
|
},
|
|
tiles = {{ name = "sf_nodes_light_crystal.png" }},
|
|
use_texture_alpha = "blend",
|
|
sounds = {
|
|
dug = { name = "sf_nodes_crystal_collect", gain = 0.25 },
|
|
place = { name = "sf_nodes_crystal_collect", gain = 0.35, pitch = 0.9 },
|
|
},
|
|
drop = "",
|
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
|
if EDITOR then
|
|
return
|
|
end
|
|
local count = sf_resources.get_resource_count(digger, "sf_resources:light_crystal")
|
|
count = count + 1
|
|
sf_resources.set_resource_count(digger, "sf_resources:light_crystal", count)
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:campfire_off", {
|
|
description = S("Campfire"),
|
|
drawtype = "mesh",
|
|
mesh = "sf_nodes_campfire.obj",
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1, campfire = 1 },
|
|
tiles = {
|
|
"blank.png",
|
|
"blank.png",
|
|
{ name = "sf_nodes_campfire_top.png", backface_culling = true },
|
|
{ name = "sf_nodes_campfire_side.png", backface_culling = true },
|
|
},
|
|
use_texture_alpha = "clip",
|
|
walkable = false,
|
|
selection_box = { type = "fixed", fixed = { -6/16, -0.5, -6/16, 6/16, -6/16, 6/16 }},
|
|
sounds = sf_sounds.node_sound_dirt_defaults(),
|
|
})
|
|
|
|
minetest.register_node("sf_nodes:campfire_on", {
|
|
description = S("Campfire with Fire"),
|
|
drawtype = "mesh",
|
|
mesh = "sf_nodes_campfire.obj",
|
|
paramtype = "light",
|
|
groups = { editor_breakable = 1, campfire = 2 },
|
|
tiles = {
|
|
{ name="sf_nodes_campfire_fire_anim.png", animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 0.49 } },
|
|
{ name="sf_nodes_campfire_fire_anim.png", animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 0.5 } },
|
|
{ name = "sf_nodes_campfire_top.png", backface_culling = true },
|
|
{ name = "sf_nodes_campfire_side.png", backface_culling = true },
|
|
},
|
|
use_texture_alpha = "clip",
|
|
walkable = false,
|
|
light_source = minetest.LIGHT_MAX,
|
|
selection_box = { type = "fixed", fixed = { -6/16, -0.5, -6/16, 6/16, -6/16, 6/16 }},
|
|
sounds = sf_sounds.node_sound_dirt_defaults(),
|
|
damage_per_second = 1,
|
|
on_rightclick = function(pos, node, clicker)
|
|
if not clicker or not clicker:is_player() then
|
|
return
|
|
end
|
|
sf_upgrade.show_upgrade_formspec(clicker)
|
|
end,
|
|
on_construct = function(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("infotext", S("Campfire (rightclick to upgrade)"))
|
|
end,
|
|
})
|
|
|
|
-- Warning: This node is very bouncy. Always put another solid node
|
|
-- above it (like an invisible barrier)
|
|
-- to make sure the player can't bounce into space!
|
|
minetest.register_node("sf_nodes:shadow_barrier", {
|
|
description = S("Shadow Barrier"),
|
|
drawtype = "glasslike",
|
|
paramtype = "light",
|
|
-- Bounces the player heavily off when walking into it
|
|
groups = { editor_breakable = 1, bouncy = 225 },
|
|
tiles = {
|
|
{ name = "sf_nodes_shadow_barrier.png", backface_culling = true, animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 4, }},
|
|
},
|
|
use_texture_alpha = "blend",
|
|
walkable = true,
|
|
})
|
|
local ib_pointable, ib_drawtype, ib_tiles
|
|
if EDITOR then
|
|
ib_pointable = true
|
|
ib_drawtype = "allfaces"
|
|
ib_tiles = { "sf_nodes_invisible_barrier.png" }
|
|
else
|
|
ib_pointable = false
|
|
ib_drawtype = "airlike"
|
|
ib_tiles = nil
|
|
end
|
|
minetest.register_node("sf_nodes:invisible_barrier", {
|
|
description = S("Invisible Barrier"),
|
|
drawtype = ib_drawtype,
|
|
tiles = ib_tiles,
|
|
wield_image = "sf_nodes_invisible_barrier.png",
|
|
inventory_image = "sf_nodes_invisible_barrier.png",
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
groups = { editor_breakable = 1 },
|
|
walkable = true,
|
|
pointable = ib_pointable,
|
|
})
|
|
|
|
local ki_pointable, ki_drawtype, ki_tiles, ki_dmg
|
|
if EDITOR then
|
|
ki_pointable = true
|
|
ki_drawtype = "allfaces"
|
|
ki_tiles = { "sf_nodes_killer.png" }
|
|
ki_dmg = 0
|
|
else
|
|
ki_pointable = false
|
|
ki_drawtype = "airlike"
|
|
ki_tiles = nil
|
|
ki_dmg = 20
|
|
end
|
|
minetest.register_node("sf_nodes:killer", {
|
|
description = S("Killer"),
|
|
drawtype = ki_drawtype,
|
|
tiles = ki_tiles,
|
|
wield_image = "sf_nodes_killer.png",
|
|
inventory_image = "sf_nodes_killer.png",
|
|
paramtype = "light",
|
|
visual_scale = 0.5,
|
|
sunlight_propagates = true,
|
|
groups = { editor_breakable = 1 },
|
|
walkable = false,
|
|
pointable = ki_pointable,
|
|
damage_per_second = ki_dmg,
|
|
})
|
|
|