274 lines
7.0 KiB
Lua
274 lines
7.0 KiB
Lua
|
|
--[[
|
|
|
|
nodes.lua - basic node blocks for Inside The Box
|
|
|
|
]]--
|
|
|
|
-- table format:
|
|
-- [1] name, also used for texture
|
|
-- [2] true for stair/slab
|
|
-- [3] tool if diggable version needs to be added
|
|
-- [4] color versions?
|
|
|
|
local nodes = {
|
|
{"bricks_clay", true, "pickaxe"},
|
|
{"bricks_limestone", true, "pickaxe"},
|
|
{"bricks_marble", true, "pickaxe"},
|
|
{"bricks_sandstone", true, "pickaxe"},
|
|
{"bricks_stone", true, "pickaxe"},
|
|
{"bricks_stone_moss", true, "pickaxe"},
|
|
{"cobble", true, "pickaxe"},
|
|
{"cobble_moss", true, "pickaxe"},
|
|
{"limestone", true, "pickaxe"},
|
|
{"marble", true, "pickaxe"},
|
|
{"sandstone", true, "pickaxe"},
|
|
{"stone", true, "pickaxe"},
|
|
{"stone_moss", true, "pickaxe"},
|
|
{"glass", false, "pickaxe"},
|
|
{"bronze", false, "pickaxe"},
|
|
{"gold", false, "pickaxe"},
|
|
{"iron", false, "pickaxe"},
|
|
{"clay", false, "shovel"},
|
|
{"dirt", false, "shovel"},
|
|
{"gravel", false, "shovel"},
|
|
{"sand", false, "shovel"},
|
|
{"leaves_light", false, "axe"},
|
|
{"leaves_medium", false, "axe"},
|
|
{"leaves_dark", false, "axe"},
|
|
{"wood_dark", true, "axe"},
|
|
{"wood_light", true, "axe"},
|
|
{"wood_medium", true, "axe"},
|
|
{"grass", false, false},
|
|
}
|
|
|
|
local function make_stair_slab(name, groups, b1, b2)
|
|
minetest.register_node("nodes:" .. name .. b1 .. "_stairs", {
|
|
description = name .. " stairs" .. b2,
|
|
tiles = {name .. ".png"},
|
|
drawtype = "mesh",
|
|
mesh = "stairs_stair.obj",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = groups,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-1/2, -1/2, -1/2, 1/2, 0, 1/2},
|
|
{-1/2, 0, 0, 1/2, 1/2, 1/2},
|
|
},
|
|
},
|
|
collision_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-1/2, -1/2, -1/2, 1/2, 0, 1/2},
|
|
{-1/2, 0, 0, 1/2, 1/2, 1/2},
|
|
},
|
|
},
|
|
})
|
|
minetest.register_node("nodes:" .. name .. b1 .. "_slab", {
|
|
description = name .. " slab" .. b2,
|
|
tiles = {name .. ".png"},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = groups,
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2},
|
|
},
|
|
})
|
|
end
|
|
|
|
for _, v in pairs(nodes) do
|
|
local groups = {node = 1}
|
|
if v[3] then
|
|
-- register diggable node version
|
|
groups[v[3]] = 3
|
|
minetest.register_node("nodes:" .. v[1] .. "_breakable", {
|
|
description = v[1] .. " (breakable)",
|
|
tiles = {v[1] .. ".png"},
|
|
groups = groups,
|
|
})
|
|
if v[2] then
|
|
make_stair_slab(v[1], groups, "_breakable", " (breakable)")
|
|
end
|
|
end
|
|
minetest.register_node("nodes:" .. v[1], {
|
|
description = v[1],
|
|
tiles = {v[1] .. ".png"},
|
|
groups = {node = 1},
|
|
})
|
|
if v[2] then
|
|
make_stair_slab(v[1], {node = 1}, "", "")
|
|
walls.register("nodes:" .. v[1] .. "_wall", v[1] .. " Wall", v[1] .. ".png", nil) -- default.node_sound_stone_defaults())
|
|
end
|
|
|
|
end
|
|
|
|
for _, v in pairs({"yellow", "white", "violet", "red",
|
|
"pink", "orange", "magenta", "grey",
|
|
"green", "dark_grey", "dark_green", "cyan",
|
|
"brown", "blue", "black"}) do
|
|
minetest.register_node("nodes:wool_" .. v, {
|
|
description = v .. " wool",
|
|
tiles = {"wool_" .. v .. ".png"},
|
|
groups = {node = 1},
|
|
})
|
|
minetest.register_node("nodes:wool_" .. v .. "_breakable", {
|
|
description = v .. " wool (breakable",
|
|
tiles = {"wool_" .. v .. ".png"},
|
|
groups = {axe = 1, node = 1},
|
|
})
|
|
end
|
|
|
|
-- trunks
|
|
minetest.register_node("nodes:trunk_light", {
|
|
description = "Light Trunk (breakable)",
|
|
tiles = {"trunk_light_top.png", "trunk_light_top.png", "trunk_light.png"},
|
|
groups = {axe = 1, node = 1},
|
|
})
|
|
|
|
minetest.register_node("nodes:trunk_light", {
|
|
description = "Light Trunk",
|
|
tiles = {"trunk_light_top.png", "trunk_light_top.png", "trunk_light.png"},
|
|
groups = {node = 1},
|
|
})
|
|
|
|
minetest.register_node("nodes:trunk_medium", {
|
|
description = "Medium Trunk (breakable)",
|
|
tiles = {"trunk_medium_top.png", "trunk_medium_top.png", "trunk_medium.png"},
|
|
groups = {axe = 1, node = 1},
|
|
})
|
|
|
|
minetest.register_node("nodes:trunk_medium", {
|
|
description = "medium Trunk",
|
|
tiles = {"trunk_medium_top.png", "trunk_medium_top.png", "trunk_medium.png"},
|
|
groups = {node = 1},
|
|
})
|
|
|
|
minetest.register_node("nodes:trunk_dark", {
|
|
description = "Dark Trunk (breakable)",
|
|
tiles = {"trunk_dark_top.png", "trunk_dark_top.png", "trunk_dark.png"},
|
|
groups = {axe = 1, node = 1},
|
|
})
|
|
|
|
minetest.register_node("nodes:trunk_dark", {
|
|
description = "Dark Trunk",
|
|
tiles = {"trunk_dark_top.png", "trunk_dark_top.png", "trunk_dark.png"},
|
|
groups = {node = 1},
|
|
})
|
|
|
|
-- barrier
|
|
minetest.register_node("nodes:barrier", {
|
|
description = "Barrier",
|
|
pointable = true, -- make it easy to understand that it's a barrier
|
|
drawtype = "allfaces_optional",
|
|
tiles = {"itb_blank.png"},
|
|
sunlight_propagates = true,
|
|
paramtype = "light",
|
|
collision_box = {
|
|
type = "fixed",
|
|
-- oversized to prevent crawling through
|
|
fixed = {-1,-1,-1,1,1,1},
|
|
},
|
|
})
|
|
|
|
-- light fixtures
|
|
for _, v in pairs({14, 11, 8, 0}) do
|
|
minetest.register_node("nodes:lamp_bar_" .. v, {
|
|
description = "A Lamp (" .. v .. ")",
|
|
light_source = v,
|
|
sunlight_propagates = true,
|
|
tiles = {"lamp_bar.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {-1, 1/4, 1/4, 1, 1/2, 1/2},
|
|
},
|
|
groups = {node = 1},
|
|
on_rotate = screwdriver.rotate_simple()
|
|
})
|
|
end
|
|
|
|
minetest.register_node("nodes:lamp_bar_broken", {
|
|
description = "A Broken Lamp (flickering)",
|
|
light_source = 8,
|
|
sunlight_propagates = true,
|
|
tiles = {"lamp_bar.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {-1, 1/4, 1/4, 1, 1/2, 1/2},
|
|
},
|
|
groups = {node = 1},
|
|
on_rotate = screwdriver.rotate_simple(),
|
|
on_timer = function(pos)
|
|
local node = minetest.get_node(pos)
|
|
minetest.set_node(pos, {name = "nodes:lamp_bar_broken_off", param2 = node.param2})
|
|
end,
|
|
on_construct = function(pos)
|
|
minetest.get_node_timer(pos):start(math.random(50)/10)
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("nodes:lamp_bar_broken_off", {
|
|
description = "A Broken Lamp (flickering, off)",
|
|
sunlight_propagates = true,
|
|
tiles = {"lamp_bar.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {-1, 1/4, 1/4, 1, 1/2, 1/2},
|
|
},
|
|
groups = {node = 1},
|
|
on_rotate = screwdriver.rotate_simple(),
|
|
on_timer = function(pos)
|
|
local node = minetest.get_node(pos)
|
|
minetest.set_node(pos, {name = "nodes:lamp_bar_broken", param2 = node.param2})
|
|
end,
|
|
on_construct = function(pos)
|
|
minetest.get_node_timer(pos):start(math.random(50)/10)
|
|
end,
|
|
})
|
|
|
|
for _, wood in ipairs({"wood_dark", "wood_light", "wood_medium"}) do
|
|
fences.register_fence("nodes:fence_" .. wood, {
|
|
description = wood .. " Fence",
|
|
texture = wood .. "_fence.png",
|
|
inventory_image = "default_fence_overlay.png^" .. wood .. ".png^default_fence_overlay.png^[makealpha:255,126,126",
|
|
wield_image = "default_fence_overlay.png^" .. wood .. ".png^default_fence_overlay.png^[makealpha:255,126,126",
|
|
groups = {node = 1},
|
|
-- sounds = default.node_sound_wood_defaults()
|
|
})
|
|
end
|
|
|
|
|
|
-- special nodes
|
|
-- water
|
|
-- lava
|
|
-- tnt
|
|
-- fire
|
|
-- fire_permanent
|
|
|
|
|
|
-- chests:
|
|
-- empty (fake) chest
|
|
-- chest-with-key
|
|
-- chest-with-tool
|
|
|
|
|
|
-- vegetation:
|
|
-- grass variants
|
|
-- flowers
|
|
-- soil and vegetation
|
|
|
|
|
|
-- doors -> mech?
|