|  |  |  | @ -27,28 +27,6 @@ local solid_drawtypes = { | 
			
		
	
		
			
				
					|  |  |  |  |     glasslike_framed = true, | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | local smokecontrol | 
			
		
	
		
			
				
					|  |  |  |  | if nodecore.smokeclear then | 
			
		
	
		
			
				
					|  |  |  |  |     smokecontrol = function(pos, smoke,smoke2) | 
			
		
	
		
			
				
					|  |  |  |  |         local existing = _check_position_uncached(pos) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if smoke then | 
			
		
	
		
			
				
					|  |  |  |  |              | 
			
		
	
		
			
				
					|  |  |  |  |         else | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         --if smoke then | 
			
		
	
		
			
				
					|  |  |  |  |         --    nodecore.smokefx(pos, smoke, smoke2 or 1) | 
			
		
	
		
			
				
					|  |  |  |  |         --else | 
			
		
	
		
			
				
					|  |  |  |  |         --    nodecore.smokeclear(pos) | 
			
		
	
		
			
				
					|  |  |  |  |         --end | 
			
		
	
		
			
				
					|  |  |  |  |     end | 
			
		
	
		
			
				
					|  |  |  |  | else | 
			
		
	
		
			
				
					|  |  |  |  |     smokecontrol = function(pos, smoke) end | 
			
		
	
		
			
				
					|  |  |  |  | end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | --[[ | 
			
		
	
		
			
				
					|  |  |  |  | E: air | 
			
		
	
		
			
				
					|  |  |  |  | E_: other empty | 
			
		
	
	
		
			
				
					|  |  |  | @ -110,6 +88,42 @@ local function check_position(pos) | 
			
		
	
		
			
				
					|  |  |  |  |     return ret | 
			
		
	
		
			
				
					|  |  |  |  | end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | local function set_and_cache(pos, value) | 
			
		
	
		
			
				
					|  |  |  |  |     nodecore.set_loud(pos, value) | 
			
		
	
		
			
				
					|  |  |  |  |     cache[minetest.hash_node_position(pos)] = _check_position_uncached(pos) | 
			
		
	
		
			
				
					|  |  |  |  | end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | local smokecontrol | 
			
		
	
		
			
				
					|  |  |  |  | if nodecore.smokeclear then | 
			
		
	
		
			
				
					|  |  |  |  |     smokecontrol = function(pos, smoke) | 
			
		
	
		
			
				
					|  |  |  |  |         local existing = check_position(pos) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if existing:sub(1, 1) == "S" then | 
			
		
	
		
			
				
					|  |  |  |  |             local node = minetest.get_node(pos) | 
			
		
	
		
			
				
					|  |  |  |  |             node.param2 = smoke | 
			
		
	
		
			
				
					|  |  |  |  |             minetest.swap_node(pos, node) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             if smoke then | 
			
		
	
		
			
				
					|  |  |  |  |                 nodecore.smokefx(pos, 60, smoke) | 
			
		
	
		
			
				
					|  |  |  |  |             else | 
			
		
	
		
			
				
					|  |  |  |  |                 nodecore.smokeclear(pos) | 
			
		
	
		
			
				
					|  |  |  |  |             end | 
			
		
	
		
			
				
					|  |  |  |  |         else | 
			
		
	
		
			
				
					|  |  |  |  |             if smoke then | 
			
		
	
		
			
				
					|  |  |  |  |                 nodecore.smokefx(pos, smoke, 1) | 
			
		
	
		
			
				
					|  |  |  |  |             else | 
			
		
	
		
			
				
					|  |  |  |  |                 nodecore.smokeclear(pos) | 
			
		
	
		
			
				
					|  |  |  |  |             end | 
			
		
	
		
			
				
					|  |  |  |  |         end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     end | 
			
		
	
		
			
				
					|  |  |  |  | else | 
			
		
	
		
			
				
					|  |  |  |  |     smokecontrol = function(pos, smoke) end | 
			
		
	
		
			
				
					|  |  |  |  | end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | -- check for walls, physical or implied | 
			
		
	
		
			
				
					|  |  |  |  | local function edge_check(pos, dir, terminate) | 
			
		
	
		
			
				
					|  |  |  |  |     local under = check_position(pos + down) | 
			
		
	
	
		
			
				
					|  |  |  | @ -209,7 +223,7 @@ local function board_clear_fx(basepos) | 
			
		
	
		
			
				
					|  |  |  |  |                 local groups = minetest.registered_nodes[minetest.get_node(newpos).name].groups | 
			
		
	
		
			
				
					|  |  |  |  |                 if groups then | 
			
		
	
		
			
				
					|  |  |  |  |                     if groups.ko_stone then | 
			
		
	
		
			
				
					|  |  |  |  |                         nodecore.set_loud(newpos, {name = "air"}) | 
			
		
	
		
			
				
					|  |  |  |  |                         set_and_cache(newpos, {name = "air"}) | 
			
		
	
		
			
				
					|  |  |  |  |                     end | 
			
		
	
		
			
				
					|  |  |  |  |                     smokecontrol(newpos) | 
			
		
	
		
			
				
					|  |  |  |  |                 end | 
			
		
	
	
		
			
				
					|  |  |  | @ -373,9 +387,9 @@ function lc_liberties.handle_placement(pos) | 
			
		
	
		
			
				
					|  |  |  |  |                     local under = check_position(v2 + down) | 
			
		
	
		
			
				
					|  |  |  |  |                     if (under:sub(1, 1) == "W") and (under:len() > 1) then | 
			
		
	
		
			
				
					|  |  |  |  |                         nodecore.sound_play("nc_fire_ignite", {gain = 1, pos = pos}) | 
			
		
	
		
			
				
					|  |  |  |  |                         nodecore.set_loud(v2, {name = firenode}) | 
			
		
	
		
			
				
					|  |  |  |  |                         set_and_cache(v2, {name = firenode}) | 
			
		
	
		
			
				
					|  |  |  |  |                     else | 
			
		
	
		
			
				
					|  |  |  |  |                         nodecore.set_loud(v2, {name = "air"}) | 
			
		
	
		
			
				
					|  |  |  |  |                         set_and_cache(v2, {name = "air"}) | 
			
		
	
		
			
				
					|  |  |  |  |                     end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                     count = count + 1 | 
			
		
	
	
		
			
				
					|  |  |  | @ -395,7 +409,7 @@ function lc_liberties.handle_placement(pos) | 
			
		
	
		
			
				
					|  |  |  |  |         local captures = check_captures(pos) | 
			
		
	
		
			
				
					|  |  |  |  |         if captures.capture then | 
			
		
	
		
			
				
					|  |  |  |  |             local stone = minetest.get_node(pos).name | 
			
		
	
		
			
				
					|  |  |  |  |             nodecore.set_loud(pos, {name = "air"}) | 
			
		
	
		
			
				
					|  |  |  |  |             set_and_cache(pos, {name = "air"}) | 
			
		
	
		
			
				
					|  |  |  |  |             nodecore.item_eject(pos, stone, 5) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             return | 
			
		
	
	
		
			
				
					|  |  |  | @ -404,7 +418,7 @@ function lc_liberties.handle_placement(pos) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     board_clear_fx(pos) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     smokecontrol(pos, 300, 2+#allcaptured) | 
			
		
	
		
			
				
					|  |  |  |  |     smokecontrol(pos, 2+#allcaptured) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     for i = #allcaptured, 1, -1 do | 
			
		
	
		
			
				
					|  |  |  |  |         local chosen = math.random(1, i) | 
			
		
	
	
		
			
				
					|  |  |  | @ -413,7 +427,7 @@ function lc_liberties.handle_placement(pos) | 
			
		
	
		
			
				
					|  |  |  |  |     end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     if ko then | 
			
		
	
		
			
				
					|  |  |  |  |         nodecore.set_loud(ko.pos, {name = modname .. ":ko_" .. ko.stone}) | 
			
		
	
		
			
				
					|  |  |  |  |         set_and_cache(ko.pos, {name = modname .. ":ko_" .. ko.stone}) | 
			
		
	
		
			
				
					|  |  |  |  |     end | 
			
		
	
		
			
				
					|  |  |  |  | end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -442,7 +456,7 @@ function lc_liberties.handle_territory_fill(itemstack, placer, pointed_thing) | 
			
		
	
		
			
				
					|  |  |  |  |             local reg_item = minetest.registered_items[under.name] | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             if reg_item and reg_item.groups and reg_item.groups.go_stone then | 
			
		
	
		
			
				
					|  |  |  |  |                 nodecore.set_loud(pointed_thing.above, {name = modname .. ":territory_" .. reg_item.go_team}) | 
			
		
	
		
			
				
					|  |  |  |  |                 set_and_cache(pointed_thing.above, {name = modname .. ":territory_" .. reg_item.go_team}) | 
			
		
	
		
			
				
					|  |  |  |  |                 itemstack:set_count(itemstack:get_count() - 1) | 
			
		
	
		
			
				
					|  |  |  |  |                 return itemstack | 
			
		
	
		
			
				
					|  |  |  |  |             end | 
			
		
	
	
		
			
				
					|  |  |  | @ -454,7 +468,7 @@ function lc_liberties.handle_territory_fill(itemstack, placer, pointed_thing) | 
			
		
	
		
			
				
					|  |  |  |  |             local piece = modname .. ":territory_" .. territories.team | 
			
		
	
		
			
				
					|  |  |  |  |             local count = 0 | 
			
		
	
		
			
				
					|  |  |  |  |             for i, v in pairs(territories.stones) do | 
			
		
	
		
			
				
					|  |  |  |  |                 nodecore.set_loud(v, {name = piece}) | 
			
		
	
		
			
				
					|  |  |  |  |                 set_and_cache(v, {name = piece}) | 
			
		
	
		
			
				
					|  |  |  |  |                 count = count + 1 | 
			
		
	
		
			
				
					|  |  |  |  |             end | 
			
		
	
		
			
				
					|  |  |  |  |             itemstack:set_count(itemstack:get_count() - count) | 
			
		
	
	
		
			
				
					|  |  |  | @ -477,7 +491,7 @@ function lc_liberties.handle_dig(pos, node, digger) | 
			
		
	
		
			
				
					|  |  |  |  |         local count = 0 | 
			
		
	
		
			
				
					|  |  |  |  |         for i, v in pairs(connected_group(pos)) do | 
			
		
	
		
			
				
					|  |  |  |  |             count = count + 1 | 
			
		
	
		
			
				
					|  |  |  |  |             nodecore.set_loud(v, {name = "air"}) | 
			
		
	
		
			
				
					|  |  |  |  |             set_and_cache(v, {name = "air"}) | 
			
		
	
		
			
				
					|  |  |  |  |         end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         multi_eject(pos, stone, 1, count, digger and digger:get_inventory()) | 
			
		
	
	
		
			
				
					|  |  |  | @ -492,7 +506,7 @@ function lc_liberties.handle_click_ko(pos, node, clicker, itemstack, pointed_thi | 
			
		
	
		
			
				
					|  |  |  |  |     local handnode = minetest.registered_nodes[itemstack:get_name()] | 
			
		
	
		
			
				
					|  |  |  |  |     if handnode and handnode.groups.go_stone and | 
			
		
	
		
			
				
					|  |  |  |  |             handnode.go_team ~= minetest.registered_nodes[node.name].go_team then | 
			
		
	
		
			
				
					|  |  |  |  |         nodecore.set_loud(pos, {name = handnode.name}) | 
			
		
	
		
			
				
					|  |  |  |  |         set_and_cache(pos, {name = handnode.name}) | 
			
		
	
		
			
				
					|  |  |  |  |         itemstack:set_count(itemstack:get_count() - 1) | 
			
		
	
		
			
				
					|  |  |  |  |     end | 
			
		
	
		
			
				
					|  |  |  |  |     return itemstack | 
			
		
	
	
		
			
				
					|  |  |  | 
 |