You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
5.3 KiB
202 lines
5.3 KiB
-- LUALOCALS < --------------------------------------------------------- |
|
local include, nodecore, pairs, string |
|
= include, nodecore, pairs, string |
|
local string_lower |
|
= string.lower |
|
-- LUALOCALS > --------------------------------------------------------- |
|
|
|
include("rules") |
|
|
|
local modname = minetest.get_current_modname() |
|
|
|
local function reg_stone_craft(name, pattern) |
|
local piecename = modname .. ":stone_" .. string_lower(name) |
|
|
|
nodecore.register_craft({ |
|
label = "chop stones", |
|
action = "pummel", |
|
toolgroups = {choppy = 3}, |
|
nodes = { |
|
{ |
|
match = "nc_concrete:" .. name .. "_" .. pattern .. "_ply", |
|
replace = "air" |
|
} |
|
}, |
|
items = {{name = piecename, count = 3, scatter = 4}}, |
|
}) |
|
end |
|
|
|
local function reg(name, basename, basedef) |
|
local piecename = modname .. ":stone_" .. string_lower(name) |
|
if minetest.registered_nodes[piecename] then return end |
|
local desc = basedef.description or name |
|
|
|
local nodedesc_base |
|
|
|
local nameStone = string.match(desc, "(.*)stone$") |
|
if nameStone then |
|
nodedesc_base = nameStone .. " " |
|
elseif desc == "Stone" then |
|
nodedesc_base = "" |
|
else |
|
nodedesc_base = desc .. " " |
|
end |
|
|
|
local stone_selection_box = { |
|
type = "fixed", |
|
fixed = {-7/16, -8/16, -7/16, 7/16, 0/16, 7/16} |
|
} |
|
|
|
local go_node_base = { |
|
tiles = {basedef.tiles[1]}, |
|
sounds = basedef.sounds, |
|
|
|
paramtype = "light", |
|
paramtype2 = "none", |
|
|
|
groups = { |
|
snappy = 1, |
|
falling_node = 1, |
|
}, |
|
|
|
go_team = name, |
|
} |
|
|
|
minetest.register_node(":" .. piecename, nodecore.underride({ |
|
description = nodedesc_base .. "Go Stone", |
|
drawtype = "mesh", |
|
mesh = "go_stone.obj", |
|
|
|
selection_box = stone_selection_box, |
|
collision_box = stone_selection_box, |
|
|
|
mapcolor = basedef.mapcolor, |
|
|
|
groups = { |
|
falling_repose = 1, |
|
optic_opaque = 1, |
|
go_stone = 1 |
|
}, |
|
|
|
on_construct = lc_liberties.handle_placement, |
|
|
|
on_dig = lc_liberties.handle_dig, |
|
|
|
on_destruct = nodecore.smokeclear, |
|
}, go_node_base)) |
|
|
|
local territory_selection_box = { |
|
type = "fixed", |
|
fixed = {-5/16, -8/16, -5/16, 5/16, -2/16, 5/16} |
|
} |
|
|
|
-- base properties for token nodes only, which are more ephemeral than stones |
|
go_node_base = nodecore.underride({ |
|
mapcolor = {a = 0}, |
|
sunlight_propagates = true, |
|
|
|
groups = { |
|
stack_as_node = 1, |
|
}, |
|
}, go_node_base) |
|
|
|
local territory_name = modname .. ":territory_" .. string_lower(name) |
|
minetest.register_node(":" .. territory_name, nodecore.underride({ |
|
description = "Stop Stone", |
|
drawtype = "nodebox", |
|
|
|
node_box = { |
|
type = "fixed", |
|
fixed = { |
|
{-2/16, -8/16, -2/16, 2/16, -5/16, 2/16}, |
|
{-3/16, -7/16, -3/16, 3/16, -6/16, 3/16}, |
|
} |
|
}, |
|
|
|
selection_box = territory_selection_box, |
|
collision_box = territory_selection_box, |
|
|
|
node_placement_prediction = "", |
|
|
|
groups = { |
|
go_territory_marker = 1, |
|
}, |
|
|
|
on_place = lc_liberties.handle_territory_fill, |
|
|
|
on_dig = lc_liberties.handle_dig, |
|
}, go_node_base)) |
|
|
|
local ko_selection_box = { |
|
type = "fixed", |
|
fixed = {-8/16, -8/16, -8/16, 8/16, -4/16, 8/16} |
|
} |
|
|
|
minetest.register_node(":" .. modname .. ":ko_" .. string_lower(name), nodecore.underride({ |
|
description = nodedesc_base .. "Ko Stone", |
|
drawtype = "nodebox", |
|
|
|
node_box = { |
|
type = "fixed", |
|
fixed = { |
|
{-5/16, -6/16, -5/16, 5/16, -5/16, -4/16}, |
|
{5/16, -6/16, -5/16, 4/16, -5/16, 5/16}, |
|
{5/16, -6/16, 5/16, -5/16, -5/16, 4/16}, |
|
{-5/16, -6/16, 5/16, -4/16, -5/16, -5/16}, |
|
} |
|
}, |
|
|
|
selection_box = ko_selection_box, |
|
collision_box = ko_selection_box, |
|
|
|
groups = { |
|
falling_node = 0, |
|
ko_stone = 1, |
|
cheat = 1, |
|
}, |
|
|
|
drop = "", |
|
destroy_on_dig = true, |
|
silktouch = false, |
|
|
|
on_rightclick = lc_liberties.handle_click_ko, |
|
}, go_node_base)) |
|
|
|
reg_stone_craft(name, "crossy") |
|
reg_stone_craft(name, "starcrossy") |
|
|
|
nodecore.register_craft({ |
|
label = "smash stones", |
|
action = "pummel", |
|
toolgroups = {thumpy = 3}, |
|
nodes = { |
|
{ |
|
match = piecename, |
|
replace = "air" |
|
} |
|
}, |
|
items = {{name = territory_name, count = 9, scatter = 4}}, |
|
}) |
|
end |
|
|
|
local function buildall() |
|
for _, v in ipairs(nodecore.registered_concrete_etchables) do |
|
local basedef = v.name and v.basename and minetest.registered_nodes[v.basename] |
|
if basedef then |
|
reg(v.name, v.basename, basedef) |
|
end |
|
end |
|
end |
|
|
|
do |
|
local old_reg_etch = nodecore.register_concrete_etchable |
|
local function helper(...) |
|
buildall() |
|
return ... |
|
end |
|
nodecore.register_concrete_etchable = function(...) |
|
return helper(old_reg_etch(...)) |
|
end |
|
end |
|
|
|
buildall()
|
|
|