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()
 | 
						|
 |