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