hades_revisited/mods/columnia/columnia.lua

472 lines
12 KiB
Lua

local S = minetest.get_translator("columnia")
columnia.registered_materials = {}
function columnia.register_all(craft, desc, image, groups, sounds, mat)
if not mat then
mat = string.gsub(craft, ":", "_")
end
if not desc then
desc = minetest.registered_items[craft].description
end
if not image then
image = minetest.registered_items[craft].tiles[1]
end
if not groups then
groups = table.copy(minetest.registered_items[craft].groups)
end
groups.not_in_creative_inventory = 1
groups.wood = nil
groups.cloth = nil
groups.stone = nil
groups.claybricks = nil
groups.colwood = nil
if not sounds then
sounds = minetest.registered_items[craft].sounds
end
local on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then
return itemstack
end
local p0 = pointed_thing.under
local p1 = pointed_thing.above
local param2 = 0
local placer_pos = placer:get_pos()
if placer_pos then
local dir = {
x = p1.x - placer_pos.x,
y = p1.y - placer_pos.y,
z = p1.z - placer_pos.z
}
param2 = minetest.dir_to_facedir(dir)
end
if p0.y-1 == p1.y then
param2 = param2 + 20
if param2 == 21 then
param2 = 23
elseif param2 == 23 then
param2 = 21
end
end
return minetest.item_place(itemstack, placer, pointed_thing, param2)
end
columnia.registered_materials[craft] = mat
-- Make it a world-aligned tile if align_style is not set
local tile
if type(image) == "table" then
tile = table.copy(image)
if tile.align_style == nil then
tile.align_style = "world"
end
else
tile = { name = image, align_style = "world" }
end
local tiles = {tile}
minetest.register_node("columnia:column_mid_"..mat, {
description = S("@1 Column", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.25, -0.5, -0.25, 0.25, 0.5, 0.25},
}
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_top_"..mat,
})
local mod_screwdriver = minetest.get_modpath("screwdriver")
local on_rotate_column_top, on_rotate_column_bottom
if mod_screwdriver then
on_rotate_column_top = function(pos, node, user, mode, new_param2)
if mode == screwdriver.ROTATE_AXIS then
node.name = "columnia:column_bottom_"..mat
minetest.swap_node(pos, node)
return false
end
end
on_rotate_column_bottom = function(pos, node, user, mode, new_param2)
if mode == screwdriver.ROTATE_AXIS then
node.name = "columnia:column_top_"..mat
minetest.swap_node(pos, node)
return false
end
end
end
minetest.register_node("columnia:column_top_"..mat, {
description = S("@1 Column Top", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.25, -0.5, -0.25, 0.25, 0, 0.25},
{-0.375, 0, -0.375, 0.375, 0.25, 0.375},
{-0.5, 0.25, -0.5, 0.5, 0.5, 0.5},
},
},
on_place = on_place,
on_rotate = on_rotate_column_top,
sounds = sounds,
_hades_shaper_next = "columnia:column_bottom_"..mat,
})
minetest.register_node("columnia:column_bottom_"..mat, {
description = S("@1 Column Bottom", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
{-0.375, -0.25, -0.375, 0.375, 0, 0.375},
{-0.25, 0, -0.25, 0.25, 0.5, 0.25},
},
},
on_place = on_place,
on_rotate = on_rotate_column_bottom,
sounds = sounds,
_hades_shaper_next = "columnia:column_mid_"..mat,
})
minetest.register_node("columnia:column_crosslink_"..mat, {
description = S("@1 Column Crosslink", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.25, -0.5, -0.25, 0.25, 0.5, 0.25},
{-0.5, 0, -0.25, 0.5, 0.5, 0.25},
{-0.25, 0, -0.5, 0.25, 0.5, 0.5},
{-0.4375, 0.0625, -0.4375, 0.4375, 0.4375, 0.4375},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
})
minetest.register_node("columnia:column_link_"..mat, {
description = S("@1 Column Link", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.5, 0, -0.25, 0.5, 0.5, 0.25},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_linktee_"..mat,
})
minetest.register_node("columnia:column_linkdown_"..mat, {
description = S("@1 Column Link Down", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.5, 0, -0.25, 0.5, 0.5, 0.25},
{-0.125, -0.5, -0.125, 0.125, 0, 0.125},
{-0.1875, -0.5, -0.1875, 0.1875, -0.375, 0.1875},
{-0.1875, -0.125, -0.1875, 0.1875, 0, 0.1875},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_linktee_down_"..mat,
})
minetest.register_node("columnia:column_linkcross_"..mat, {
description = S("@1 Column Link Cross", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.25, 0, -0.5, 0.25, 0.5, 0.5},
{-0.5, 0, -0.25, 0.5, 0.5, 0.25},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_linkangle_"..mat,
})
minetest.register_node("columnia:column_linkcrossdown_"..mat, {
description = S("@1 Column Link Cross Down", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.25, 0, -0.5, 0.25, 0.5, 0.5},
{-0.5, 0, -0.25, 0.5, 0.5, 0.25},
{-0.1875, -0.125, -0.1875, 0.1875, 0, 0.1875},
{-0.1875, -0.5, -0.1875, 0.1875, -0.375, 0.1875},
{-0.125, -0.375, -0.125, 0.125, -0.125, 0.125},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_linkangle_down_"..mat,
})
minetest.register_node("columnia:column_linkvertical_"..mat, {
description = S("@1 Column Link Vertical", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.1875, 0.375, -0.1875, 0.1875, 0.5, 0.1875},
{-0.125, -0.375, -0.125, 0.125, -0.125, 0.125},
{-0.1875, -0.125, -0.1875, 0.1875, 0.125, 0.1875},
{-0.1875, -0.5, -0.1875, 0.1875, -0.375, 0.1875},
{-0.125, 0.125, -0.125, 0.125, 0.375, 0.125},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
})
minetest.register_node("columnia:column_linkangle_"..mat, {
description = S("@1 Column Link Corner", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.25, 0, -0.25, 0.5, 0.5, 0.25},
{-0.25, 0, -0.5, 0.25, 0.5, -0.25},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_link_"..mat,
})
minetest.register_node("columnia:column_linkangle_down_"..mat, {
description = S("@1 Column Link Corner Down", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.25, 0, -0.25, 0.5, 0.5, 0.25},
{-0.25, 0, -0.5, 0.25, 0.5, -0.25},
{-0.1875, -0.125, -0.1875, 0.1875, 0, 0.1875},
{-0.1875, -0.5, -0.1875, 0.1875, -0.375, 0.1875},
{-0.125, -0.375, -0.125, 0.125, -0.125, 0.125},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_linkdown_"..mat,
})
minetest.register_node("columnia:column_linktee_"..mat, {
description = S("@1 Column Link T-Form", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.5, 0, -0.25, 0.5, 0.5, 0.25},
{-0.25, 0, -0.5, 0.25, 0.5, -0.25},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_linkcross_"..mat,
})
minetest.register_node("columnia:column_linktee_down_"..mat, {
description = S("@1 Column Link T-Form Down", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.5, 0, -0.25, 0.5, 0.5, 0.25},
{-0.25, 0, -0.5, 0.25, 0.5, -0.25},
{-0.1875, -0.125, -0.1875, 0.1875, 0, 0.1875},
{-0.1875, -0.5, -0.1875, 0.1875, -0.375, 0.1875},
{-0.125, -0.375, -0.125, 0.125, -0.125, 0.125},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_linkcrossdown_"..mat,
})
minetest.register_node("columnia:column_stairsub_"..mat, {
description = S("@1 Stair Substructure", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
--sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5},
{-0.5, -0.5, 0.4375, 0.5, 0.4375, 0.5},
{-0.5, -0.4375, 0.375, 0.5, 0.4375, 0.4375},
{-0.5, -0.375, 0.3125, 0.5, 0.4375, 0.375},
{-0.5, -0.3125, 0.25, 0.5, 0.4375, 0.3125},
{-0.5, -0.25, 0.1875, 0.5, 0.4375, 0.25},
{-0.5, -0.1875, 0.125, 0.5, 0.4375, 0.1875},
{-0.5, -0.125, 0.0625, 0.5, 0.4375, 0.125},
{-0.5, -0.0625, 0, 0.5, 0.4375, 0.0625},
{-0.5, 0, -0.0625, 0.5, 0.4375, 0},
{-0.5, 0.0625, -0.125, 0.5, 0.4375, -0.0625},
{-0.5, 0.125, -0.1875, 0.5, 0.4375, -0.125},
{-0.5, 0.1875, -0.25, 0.5, 0.4375, -0.1875},
{-0.5, 0.25, -0.3125, 0.5, 0.4375, -0.25},
{-0.5, 0.3125, -0.375, 0.5, 0.4375, -0.3125},
{-0.5, 0.375, -0.4375, 0.5, 0.4375, -0.375},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_stairsubpillar_"..mat,
})
minetest.register_node("columnia:column_stairsubpillar_"..mat, {
description = S("@1 Stair Substructure Pillar", desc),
drawtype = "nodebox",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
--sunlight_propagates = true,
is_ground_content = false,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5},
{-0.5, -0.5, 0.4375, 0.5, 0.4375, 0.5},
{-0.5, -0.4375, 0.375, 0.5, 0.4375, 0.4375},
{-0.5, -0.375, 0.3125, 0.5, 0.4375, 0.375},
{-0.5, -0.3125, 0.25, 0.5, 0.4375, 0.3125},
{-0.5, -0.25, 0.1875, 0.5, 0.4375, 0.25},
{-0.5, -0.1875, 0.125, 0.5, 0.4375, 0.1875},
{-0.5, -0.125, 0.0625, 0.5, 0.4375, 0.125},
{-0.5, -0.0625, 0, 0.5, 0.4375, 0.0625},
{-0.5, 0, -0.0625, 0.5, 0.4375, 0},
{-0.5, 0.0625, -0.125, 0.5, 0.4375, -0.0625},
{-0.5, 0.125, -0.1875, 0.5, 0.4375, -0.125},
{-0.5, 0.1875, -0.25, 0.5, 0.4375, -0.1875},
{-0.5, 0.25, -0.3125, 0.5, 0.4375, -0.25},
{-0.5, 0.3125, -0.375, 0.5, 0.4375, -0.3125},
{-0.5, 0.375, -0.4375, 0.5, 0.4375, -0.375},
{-0.25, -0.5, -0.25, 0.25, 0.4375, 0.25},
},
},
on_place = on_place,
on_rotate = "simple",
sounds = sounds,
_hades_shaper_next = "columnia:column_stairsub_"..mat,
})
end