From 7500ddeffca7b37894d50b6f60eb27a4255f7256 Mon Sep 17 00:00:00 2001 From: David G Date: Tue, 17 Jul 2018 14:26:55 -0700 Subject: [PATCH] First pass with updown digging added. --- init.lua | 654 ++++++++++++++++++++++++++---------- textures/tunnelmaker_16.png | Bin 0 -> 744 bytes textures/tunnelmaker_17.png | Bin 0 -> 1027 bytes textures/tunnelmaker_18.png | Bin 0 -> 744 bytes textures/tunnelmaker_19.png | Bin 0 -> 1027 bytes textures/tunnelmaker_20.png | Bin 0 -> 744 bytes textures/tunnelmaker_21.png | Bin 0 -> 1027 bytes textures/tunnelmaker_22.png | Bin 0 -> 744 bytes textures/tunnelmaker_23.png | Bin 0 -> 1027 bytes textures/tunnelmaker_24.png | Bin 0 -> 741 bytes textures/tunnelmaker_25.png | Bin 0 -> 1026 bytes textures/tunnelmaker_26.png | Bin 0 -> 741 bytes textures/tunnelmaker_27.png | Bin 0 -> 1026 bytes textures/tunnelmaker_28.png | Bin 0 -> 741 bytes textures/tunnelmaker_29.png | Bin 0 -> 1026 bytes textures/tunnelmaker_30.png | Bin 0 -> 741 bytes textures/tunnelmaker_31.png | Bin 0 -> 1026 bytes 17 files changed, 468 insertions(+), 186 deletions(-) create mode 100644 textures/tunnelmaker_16.png create mode 100644 textures/tunnelmaker_17.png create mode 100644 textures/tunnelmaker_18.png create mode 100644 textures/tunnelmaker_19.png create mode 100644 textures/tunnelmaker_20.png create mode 100644 textures/tunnelmaker_21.png create mode 100644 textures/tunnelmaker_22.png create mode 100644 textures/tunnelmaker_23.png create mode 100644 textures/tunnelmaker_24.png create mode 100644 textures/tunnelmaker_25.png create mode 100644 textures/tunnelmaker_26.png create mode 100644 textures/tunnelmaker_27.png create mode 100644 textures/tunnelmaker_28.png create mode 100644 textures/tunnelmaker_29.png create mode 100644 textures/tunnelmaker_30.png create mode 100644 textures/tunnelmaker_31.png diff --git a/init.lua b/init.lua index be607ae..11aa143 100644 --- a/init.lua +++ b/init.lua @@ -2,6 +2,16 @@ -- Another tunnel digging mod for minetest. -- by David G (kestral246@gmail.com) +-- Version 0.9.4 +-- Major update to build in support for digging up and down. +-- Digging up and down only supports orthogonal and 45deg directions to match advtrains track. +-- To select updown direction, hold sneak key (shift) while right-clicking tunnelmaker. +-- One click selects up (Yellow 'U' on icon), second click selects down (Yellow 'D' on icon), +-- third click returns back to horizontal (no letter on icon). +-- Updown state can also be reset by rotating to different icon, or moving by some amount (still tuning this). +-- Once updown state is selected, release sneak key and use right-click like normal. +-- After digging, updown state will also be reset to horizontal. + -- Version 0.9.3 -- Tweak cdir == 2 (nw) digging pattern. -- Clean up some old debug statements. @@ -70,6 +80,15 @@ minetest.register_privilege("tunneling", {description = "Allow use of tunnelmaker tool"}) +-- Define a global variable to maintain per player state +tunnelmaker = {} + +-- Initialize players global state on player join +minetest.register_on_joinplayer(function(player) + local pname = player:get_player_name() + tunnelmaker[pname] = {updown = 0, lastdir = -1, lastpos = {x = 0, y = 0, z = 0}} +end) + local activewidth=8 --until I can find some way to get it from minetest minetest.register_globalstep(function(dtime) @@ -107,10 +126,31 @@ minetest.register_globalstep(function(dtime) --don't mess with the rest of this if they don't have a tunnelmaker --update to remove legacy get_look_yaw function if gotatunnelmaker then + local pname = player:get_player_name() local dir = player:get_look_horizontal() local angle_relative = math.deg(dir) - local tunnelmaker_image = math.floor((angle_relative/22.5) + 0.5)%16 + local rawdir = math.floor((angle_relative/22.5) + 0.5)%16 + local distance2 = function(x, y, z) + return x*x + y*y + z*z + end + + local delta = distance2((player:getpos().x - tunnelmaker[pname].lastpos.x), + (player:getpos().y - tunnelmaker[pname].lastpos.y), + (player:getpos().z - tunnelmaker[pname].lastpos.z)) + +-- if rawdir ~= tunnelmaker[pname].lastdir or pos.x ~= tunnelmaker[pname].lastpos.x or pos.y ~= tunnelmaker[pname].lastpos.y or pos.z ~= tunnelmaker[pname].lastpos.z then + + -- If rotate to different direction, or move far enough from set position, reset to horizontal + if rawdir ~= tunnelmaker[pname].lastdir or delta > 0.2 then -- tune to make distance moved feel right + tunnelmaker[pname].lastdir = rawdir + -- tunnelmaker[pname].lastpos = pos + tunnelmaker[pname].updown = 0 -- reset updown to horizontal + end + local tunnelmaker_image = rawdir -- horizontal digging maps to 0-15 + if tunnelmaker[pname].updown ~= 0 and rawdir % 2 == 0 then -- only 0,45,90 are updown capable (U:16-23,D:24-31) + tunnelmaker_image = 16 + (tunnelmaker[pname].updown - 1) * 8 + (rawdir / 2) + end --update tunnelmaker image to point at target if wielded then player:set_wielded_item("tunnelmaker:"..tunnelmaker_image) @@ -138,6 +178,22 @@ local images = { "tunnelmaker_13.png", "tunnelmaker_14.png", "tunnelmaker_15.png", + "tunnelmaker_16.png", -- 0 up + "tunnelmaker_17.png", -- 2 up + "tunnelmaker_18.png", -- 4 up + "tunnelmaker_19.png", -- 6 up + "tunnelmaker_20.png", -- 8 up + "tunnelmaker_21.png", -- 10 up + "tunnelmaker_22.png", -- 12 up + "tunnelmaker_23.png", -- 14 up + "tunnelmaker_24.png", -- 0 down + "tunnelmaker_25.png", -- 2 down + "tunnelmaker_26.png", -- 4 down + "tunnelmaker_27.png", -- 6 down + "tunnelmaker_28.png", -- 8 down + "tunnelmaker_29.png", -- 10 down + "tunnelmaker_30.png", -- 12 down + "tunnelmaker_31.png", -- 14 down } -- tests whether position is in desert-type biomes, such as desert, sandstone_desert, cold_desert, etc @@ -153,8 +209,8 @@ end -- add cobble reference block to point to next target location and to aid laying track -- in minetest 0.5.0+, desert biomes will use desert_cobble -local add_ref = function(x, z, user, pointed_thing) - local pos = vector.add(pointed_thing.under, {x=x, y=0, z=z}) +local add_ref = function(x, y0, y1, z, user, pointed_thing) + local pos = vector.add(pointed_thing.under, {x=x, y=y0, z=z}) if not minetest.is_protected(pos, user) then if is_desert(pos) then minetest.set_node(pos, {name = "default:desert_cobble"}) @@ -183,7 +239,7 @@ end -- add stone floor, if air or water or glass -- in minetest 0.5.0+, desert biomes will use desert_stone local replace_floor = function(x, y, z, user, pointed_thing) - local pos = vector.add(pointed_thing.under, {x=x, y=0, z=z}) + local pos = vector.add(pointed_thing.under, {x=x, y=y, z=z}) if not minetest.is_protected(pos, user) then local name = minetest.get_node(pos).name if name == "air" or string.match(name, "water") or name == "default:glass" then @@ -220,6 +276,14 @@ local add_light = function(spacing, user, pointed_thing) minetest.find_node_near(pos, spacing, {name = "default:torch_ceiling"}) == nil then minetest.set_node(pos, {name = "default:torch_ceiling"}) end + -- roof height can now be 5 or six so try again one higher + pos = vector.add(pointed_thing.under, {x=0, y=6, z=0}) + ceiling = minetest.get_node(vector.add(pos, {x=0, y=1, z=0})).name + if (ceiling == "default:stone" or ceiling == "default:desert_stone") and + minetest.get_node(pos).name == "air" and not minetest.is_protected(pos, user) and + minetest.find_node_near(pos, spacing, {name = "default:torch_ceiling"}) == nil then + minetest.set_node(pos, {name = "default:torch_ceiling"}) + end end -- build glass barrier to water @@ -243,215 +307,424 @@ local check_ceiling = function(x, y, z, user, pointed_thing) end -- add wall if necessary to protect from water (pink) -local aw = function(x, z, user, pointed_thing) - for y=0, 5 do +local aw = function(x, y0, y1, z, user, pointed_thing) + for y=y0, y1 do check_for_water(x, y, z, user, pointed_thing) end end -- add short endcap (light orange) -local es = function(x, z, user, pointed_thing) - for y=0, 5 do +local es = function(x, y0, y1, z, user, pointed_thing) + for y=y0, y1 do check_for_water(x, y, z, user, pointed_thing) end end -- add tall endcap (darker orange) -local et = function(x, z, user, pointed_thing) - for y=0, 6 do +local et = function(x, y0, y1, z, user, pointed_thing) + for y=y0, y1 do check_for_water(x, y, z, user, pointed_thing) end end -- dig short tunnel (light gray) -local ds = function(x, z, user, pointed_thing) - local height = 4 +local ds = function(x, y0, y1, z, user, pointed_thing) + local height = y1 check_ceiling(x, height+1, z, user, pointed_thing) check_for_water(x, height+2, z, user, pointed_thing) - for y=height, 1, -1 do -- dig from high to low + -- add_ref(x, height+2, 0, z, user, pointed_thing) -- debug debug + for y=height, y0+1, -1 do -- dig from high to low dig_single(x, y, z, user, pointed_thing) end - check_for_water(x, 0, z, user, pointed_thing) + check_for_water(x, y0, z, user, pointed_thing) end -- dig tall tunnel (light yellow) -local dt = function(x, z, user, pointed_thing) - local height = 5 +local dt = function(x, y0, y1, z, user, pointed_thing) + local height = y1 check_ceiling(x, height+1, z, user, pointed_thing) - for y=height, 1, -1 do -- dig from high to low + for y=height, y0+1, -1 do -- dig from high to low dig_single(x, y, z, user, pointed_thing) end - replace_floor(x, 0, z, user, pointed_thing) + replace_floor(x, y0, z, user, pointed_thing) end -- To shorten the code, this function takes a list of lists with {function, x-coord, y-coord} and executes them in sequence. local run_list = function(dir_list, user, pointed_thing) for i,v in ipairs(dir_list) do - v[1](v[2], v[3], user, pointed_thing) + v[1](v[2], v[3], v[4], v[5], user, pointed_thing) end end -- dig tunnel based on direction given local dig_tunnel = function(cdir, user, pointed_thing) if minetest.check_player_privs(user, "tunneling") then - if cdir == 0 then -- pointed north - run_list( {{aw,-3, 0},{aw, 3, 0},{aw,-3, 1}, - {aw, 3, 1},{aw,-3, 2},{aw, 3, 2}, - {es,-3, 3},{et,-2, 3},{et,-1, 3},{et, 0, 3},{et, 1, 3},{et, 2, 3},{es, 3, 3}, - {ds,-2, 0},{dt,-1, 0},{dt, 0, 0},{dt, 1, 0},{ds, 2, 0}, - {ds,-2, 1},{dt,-1, 1},{dt, 0, 1},{dt, 1, 1},{ds, 2, 1}, - {ds,-2, 2},{dt,-1, 2},{dt, 0, 2},{dt, 1, 2},{ds, 2, 2}, - {add_ref,0,2}}, user, pointed_thing) - elseif cdir == 1 then -- pointed north-northwest - run_list( {{aw,-3,-1},{aw,-3, 0},{aw,-4, 0},{aw,-4, 1},{aw,-4, 2}, - {aw, 3, 1},{aw, 3, 2},{aw, 2, 2},{aw, 2, 3}, - {es,-4, 3},{et,-3, 3},{et,-2, 3},{et,-1, 3},{et, 0, 3},{et, 1, 3}, - {ds,-2, 0},{dt,-1, 0},{dt, 0, 0},{dt, 1, 0}, - {ds,-3, 1},{dt,-2, 1},{dt,-1, 1},{dt, 0, 1},{dt, 1, 1},{ds, 2, 1}, - {ds,-3, 2},{dt,-2, 2},{dt,-1, 2},{dt, 0, 2},{ds, 1, 2}, - {add_ref,-1, 2}}, user, pointed_thing) - elseif cdir == 2 then -- pointed northwest - run_list( {{aw,-2,-3},{aw,-2,-2},{aw,-3,-2},{aw,-3,-1},{aw,-3,-2}, - {aw, 3, 2},{aw, 2, 2},{aw, 2, 3},{aw, 1, 3},{aw, 1, 4}, - {es,-4, 0},{es,-4, 1},{et,-3, 1},{et,-2, 1},{et,-2, 2},{et,-1, 2},{et,-1, 3},{es,-1, 4},{es, 0, 4}, - {ds,-1,-2}, - {ds,-2,-1},{dt,-1,-1}, - {ds,-3, 0},{dt,-2, 0},{dt,-1, 0},{dt, 0, 0}, - {dt,-1, 1},{dt, 0, 1},{dt, 1, 1},{ds, 2, 1}, - {dt, 0, 2},{ds, 1, 2}, - {ds, 0, 3}, - {add_ref,-1, 1}}, user, pointed_thing) - elseif cdir == 3 then -- pointed west-northwest - run_list( {{aw,-1,-3},{aw,-2,-3},{aw,-2,-2},{aw,-3,-2}, - {aw, 1, 3},{aw, 0, 3},{aw, 0, 4},{aw,-1, 4},{aw,-2, 4}, - {et,-3,-1},{et,-3, 0},{et,-3, 1},{et,-3, 2},{et,-3, 3},{es,-3, 4}, - {ds,-1,-2}, - {ds,-2,-1},{dt,-1,-1},{dt, 0,-1}, - {dt,-2, 0},{dt,-1, 0},{dt, 0, 0}, - {dt,-2, 1},{dt,-1, 1},{dt, 0, 1}, - {dt,-2, 2},{dt,-1, 2},{ds, 0, 2}, - {ds,-2, 3},{ds,-1, 3}, - {add_ref,-2, 1}}, user, pointed_thing) - elseif cdir == 4 then -- pointed west - run_list( {{aw, 0,-3},{aw,-1,-3},{aw,-2,-3}, - {aw, 0, 3},{aw,-1, 3},{aw,-2, 3}, - {es,-3,-3},{et,-3,-2},{et,-3,-1},{et,-3, 0},{et,-3, 1},{et,-3, 2},{es,-3, 3}, - {ds,-2,-2},{ds,-1,-2},{ds, 0,-2}, - {dt,-2,-1},{dt,-1,-1},{dt, 0,-1}, - {dt,-2, 0},{dt,-1, 0},{dt, 0, 0}, - {dt,-2, 1},{dt,-1, 1},{dt, 0, 1}, - {ds,-2, 2},{ds,-1, 2},{ds, 0, 2}, - {add_ref,-2, 0}}, user, pointed_thing) - elseif cdir == 5 then -- pointed west-southwest - run_list( {{aw, 1,-3},{aw, 0,-3},{aw, 0,-4},{aw,-1,-4},{aw,-2,-4}, - {aw,-1, 3},{aw,-2, 3},{aw,-2, 2},{aw,-3, 2}, - {es,-3,-4},{et,-3,-3},{et,-3,-2},{et,-3,-1},{et,-3, 0},{et,-3, 1}, - {ds,-2,-3},{ds,-1,-3}, - {dt,-2,-2},{dt,-1,-2},{ds, 0,-2}, - {dt,-2,-1},{dt,-1,-1},{dt, 0,-1}, - {dt,-2, 0},{dt,-1, 0},{dt, 0, 0}, - {ds,-2, 1},{dt,-1, 1},{dt, 0, 1}, - {ds,-1, 2}, - {add_ref,-2, -1}}, user, pointed_thing) - elseif cdir == 6 then -- pointed southwest - run_list( {{aw, 3,-2},{aw, 2,-2},{aw, 2,-3},{aw, 1,-3},{aw, 1,-4}, - {aw,-2, 3},{aw,-2, 2},{aw,-3, 2},{aw,-3, 1},{aw,-4, 1}, - {es, 0,-4},{es,-1,-4},{et,-1,-3},{et,-1,-2},{et,-2,-2},{et,-2,-1},{et,-3,-1},{es,-4,-1},{es,-4, 0}, - {ds, 0,-3}, - {dt, 0,-2},{ds, 1,-2}, - {dt,-1,-1},{dt, 0,-1},{dt, 1,-1},{ds, 2,-1}, - {ds,-3, 0},{dt,-2, 0},{dt,-1, 0},{dt, 0, 0}, - {ds,-2, 1},{dt,-1, 1}, - {ds,-1, 2}, - {add_ref,-1, -1}}, user, pointed_thing) - elseif cdir == 7 then -- pointed south-southwest - run_list( {{aw, 3,-1},{aw, 3,-2},{aw, 2,-2},{aw, 2,-3}, - {aw,-3, 1},{aw,-3, 0},{aw,-4, 0},{aw,-4,-1},{aw,-4,-2}, - {et, 1,-3},{et, 0,-3},{et,-1,-3},{et,-2,-3},{et,-3,-3},{es,-4,-3}, - {ds,-3,-2},{dt,-2,-2},{dt,-1,-2},{dt, 0,-2},{ds, 1,-2}, - {ds,-3,-1},{dt,-2,-1},{dt,-1,-1},{dt, 0,-1},{dt, 1,-1},{ds, 2,-1}, - {ds,-2, 0},{dt,-1, 0},{dt, 0, 0},{dt, 1, 0}, - {add_ref,-1, -2}}, user, pointed_thing) - elseif cdir == 8 then -- pointed south - run_list( {{aw, 3, 0},{aw, 3,-1},{aw, 3,-2}, - {aw,-3, 0},{aw,-3,-1},{aw,-3,-2}, - {es, 3,-3},{et, 2,-3},{et, 1,-3},{et, 0,-3},{et,-1,-3},{et,-2,-3},{es,-3,-3}, - {ds,-2,-2},{dt,-1,-2},{dt, 0,-2},{dt, 1,-2},{ds, 2,-2}, - {ds,-2,-1},{dt,-1,-1},{dt, 0,-1},{dt, 1,-1},{ds, 2,-1}, - {ds,-2, 0},{dt,-1, 0},{dt, 0, 0},{dt, 1, 0},{ds, 2, 0}, - {add_ref,0, -2}}, user, pointed_thing) - elseif cdir == 9 then -- pointed south-southeast - run_list( {{aw, 3, 1},{aw, 3, 0},{aw, 4, 0},{aw, 4,-1},{aw, 4,-2}, - {aw,-3,-1},{aw,-3,-2},{aw,-2,-2},{aw,-2,-3}, - {es, 4,-3},{et, 3,-3},{et, 2,-3},{et, 1,-3},{et, 0,-3},{et,-1,-3}, - {ds,-1,-2},{dt, 0,-2},{dt, 1,-2},{dt, 2,-2},{ds, 3,-2}, - {ds,-2,-1},{dt,-1,-1},{dt, 0,-1},{dt, 1,-1},{dt, 2,-1},{ds, 3,-1}, - {dt,-1, 0},{dt, 0, 0},{dt, 1, 0},{ds, 2, 0}, - {add_ref,1, -2}}, user, pointed_thing) - elseif cdir == 10 then -- pointed southeast - run_list( {{aw, 2, 3},{aw, 2, 2},{aw, 3, 2},{aw, 3, 1},{aw, 4, 1}, - {aw,-3,-2},{aw,-2,-2},{aw,-2,-3},{aw,-1,-3},{aw,-1,-4}, - {es, 4, 0},{es, 4,-1},{et, 3,-1},{et, 2,-1},{et, 2,-2},{et, 1,-2},{et, 1,-3},{es, 1,-4},{es, 0,-4}, - {ds, 0,-3}, - {ds,-1,-2},{dt, 0,-2}, - {ds,-2,-1},{dt,-1,-1},{dt, 0,-1},{dt, 1,-1}, - {dt, 0, 0},{dt, 1, 0},{dt, 2, 0},{ds, 3, 0}, - {dt, 1, 1},{ds, 2, 1}, - {ds, 1, 2}, - {add_ref,1, -1}}, user, pointed_thing) - elseif cdir == 11 then -- pointed east-southeast - run_list( {{aw, 1, 3},{aw, 2, 3},{aw, 2, 2},{aw, 3, 2}, - {aw,-1,-3},{aw, 0,-3},{aw, 0,-4},{aw, 1,-4},{aw, 2,-4}, - {et, 3, 1},{et, 3, 0},{et, 3,-1},{et, 3,-2},{et, 3,-3},{es, 3,-4}, - {ds, 1,-3},{ds, 2,-3}, - {ds, 0,-2},{dt, 1,-2},{dt, 2,-2}, - {dt, 0,-1},{dt, 1,-1},{dt, 2,-1}, - {dt, 0, 0},{dt, 1, 0},{dt, 2, 0}, - {dt, 0, 1},{dt, 1, 1},{ds, 2, 1}, - {ds, 1, 2}, - {add_ref,2, -1}}, user, pointed_thing) - elseif cdir == 12 then -- pointed east - run_list( {{aw, 0, 3},{aw, 1, 3},{aw, 2, 3}, - {aw, 0,-3},{aw, 1,-3},{aw, 2,-3}, - {es, 3, 3},{et, 3, 2},{et, 3, 1},{et, 3, 0},{et, 3,-1},{et, 3,-2},{es, 3,-3}, - {ds, 0,-2},{ds, 1,-2},{ds, 2,-2}, - {dt, 0,-1},{dt, 1,-1},{dt, 2,-1}, - {dt, 0, 0},{dt, 1, 0},{dt, 2, 0}, - {dt, 0, 1},{dt, 1, 1},{dt, 2, 1}, - {ds, 0, 2},{ds, 1, 2},{ds, 2, 2}, - {add_ref,2, 0}}, user, pointed_thing) - elseif cdir == 13 then -- pointed east-northeast - run_list( {{aw,-1, 3},{aw, 0, 3},{aw, 0, 4},{aw, 1, 4},{aw, 2, 4}, - {aw, 1,-3},{aw, 2,-3},{aw, 2,-2},{aw, 3,-2}, - {es, 3, 4},{et, 3, 3},{et, 3, 2},{et, 3, 1},{et, 3, 0},{et, 3,-1}, - {ds, 1,-2}, - {dt, 0,-1},{dt, 1,-1},{ds, 2,-1}, - {dt, 0, 0},{dt, 1, 0},{dt, 2, 0}, - {dt, 0, 1},{dt, 1, 1},{dt, 2, 1}, - {ds, 0, 2},{dt, 1, 2},{dt, 2, 2}, - {ds, 1, 3},{ds, 2, 3}, - {add_ref,2, 1}}, user, pointed_thing) - elseif cdir == 14 then -- pointed northeast - run_list( {{aw,-3, 2},{aw,-2, 2},{aw,-2, 3},{aw,-1, 3},{aw,-1, 4}, - {aw, 2,-3},{aw, 2,-2},{aw, 3,-2},{aw, 3,-1},{aw, 4,-1}, - {es, 0, 4},{es, 1, 4},{et, 1, 3},{et, 1, 2},{et, 2, 2},{et, 2, 1},{et, 3, 1},{es, 4, 1},{es, 4, 0}, - {ds, 1,-2}, - {dt, 1,-1},{ds, 2,-1}, - {dt, 0, 0},{dt, 1, 0},{dt, 2, 0},{ds, 3, 0}, - {ds,-2, 1},{dt,-1, 1},{dt, 0, 1},{dt, 1, 1}, - {ds,-1, 2},{dt, 0, 2}, - {ds, 0, 3}, - {add_ref,1, 1}}, user, pointed_thing) - elseif cdir == 15 then -- pointed north-northeast - run_list( {{aw,-3, 1},{aw,-3, 2},{aw,-2, 2},{aw,-2, 3}, - {aw, 3,-1},{aw, 3, 0},{aw, 4, 0},{aw, 4, 1},{aw, 4, 2}, - {et,-1, 3},{et, 0, 3},{et, 1, 3},{et, 2, 3},{et, 3, 3},{es, 4, 3}, - {dt,-1, 0},{dt, 0, 0},{dt, 1, 0},{ds, 2, 0}, - {ds,-2, 1},{dt,-1, 1},{dt, 0, 1},{dt, 1, 1},{dt, 2, 1},{ds, 3, 1}, - {ds,-1, 2},{dt, 0, 2},{dt, 1, 2},{dt, 2, 2},{ds, 3, 2}, - {add_ref, 1, 2}}, user, pointed_thing) +-- Dig horizontal + if cdir == 0 then -- pointed north + run_list( {{aw,-3, 0, 5, 0},{aw, 3, 0, 5, 0},{aw,-3, 0, 5, 1}, + {aw, 3, 0, 5, 1},{aw,-3, 0, 5, 2},{aw, 3, 0, 5, 2}, + {es,-3, 0, 5, 3},{et,-2, 0, 6, 3},{et,-1, 0, 6, 3},{et, 0, 0, 6, 3},{et, 1, 0, 6, 3},{et, 2, 0, 6, 3},{es, 3, 0, 5, 3}, + {ds,-2, 0, 4, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{ds, 2, 0, 4, 0}, + {ds,-2, 0, 4, 1},{dt,-1, 0, 5, 1},{dt, 0, 0, 5, 1},{dt, 1, 0, 5, 1},{ds, 2, 0, 4, 1}, + {ds,-2, 0, 4, 2},{dt,-1, 0, 5, 2},{dt, 0, 0, 5, 2},{dt, 1, 0, 5, 2},{ds, 2, 0, 4, 2}, + {add_ref, 0, 0, 0, 2}}, user, pointed_thing) + elseif cdir == 1 then -- pointed north-northwest + run_list( {{aw,-3, 0, 5,-1},{aw,-3, 0, 5, 0},{aw,-4, 0, 5, 0},{aw,-4, 0, 5, 1},{aw,-4, 0, 5, 2}, + {aw, 3, 0, 5, 1},{aw, 3, 0, 5, 2},{aw, 2, 0, 5, 2},{aw, 2, 0, 5, 3}, + {es,-4, 0, 5, 3},{et,-3, 0, 6, 3},{et,-2, 0, 6, 3},{et,-1, 0, 6, 3},{et, 0, 0, 6, 3},{et, 1, 0, 6, 3}, + {ds,-2, 0, 4, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0}, + {ds,-3, 0, 4, 1},{dt,-2, 0, 5, 1},{dt,-1, 0, 5, 1},{dt, 0, 0, 5, 1},{dt, 1, 0, 5, 1},{ds, 2, 0, 4, 1}, + {ds,-3, 0, 4, 2},{dt,-2, 0, 5, 2},{dt,-1, 0, 5, 2},{dt, 0, 0, 5, 2},{ds, 1, 0, 4, 2}, + {add_ref,-1, 0, 0, 2}}, user, pointed_thing) + elseif cdir == 2 then -- pointed northwest + run_list( {{aw,-2, 0, 5,-3},{aw,-2, 0, 5,-2},{aw,-3, 0, 5,-2},{aw,-3, 0, 5,-1},{aw,-3, 0, 5,-2}, + {aw, 3, 0, 5, 2},{aw, 2, 0, 5, 2},{aw, 2, 0, 5, 3},{aw, 1, 0, 5, 3},{aw, 1, 0, 5, 4}, + {es,-4, 0, 5, 0},{es,-4, 0, 5, 1},{et,-3, 0, 6, 1},{et,-2, 0, 6, 1},{et,-2, 0, 6, 2},{et,-1, 0, 6, 2},{et,-1, 0, 6, 3},{es,-1, 0, 5, 4},{es, 0, 0, 5, 4}, + {ds,-1, 0, 4,-2}, + {ds,-2, 0, 4,-1},{dt,-1, 0, 5,-1}, + {ds,-3, 0, 4, 0},{dt,-2, 0, 5, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0}, + {dt,-1, 0, 5, 1},{dt, 0, 0, 5, 1},{dt, 1, 0, 5, 1},{ds, 2, 0, 4, 1}, + {dt, 0, 0, 5, 2},{ds, 1, 0, 4, 2}, + {ds, 0, 0, 4, 3}, + {add_ref,-1, 0, 0, 1}}, user, pointed_thing) + elseif cdir == 3 then -- pointed west-northwest + run_list( {{aw,-1, 0, 5,-3},{aw,-2, 0, 5,-3},{aw,-2, 0, 5,-2},{aw,-3, 0, 5,-2}, + {aw, 1, 0, 5, 3},{aw, 0, 0, 5, 3},{aw, 0, 0, 5, 4},{aw,-1, 0, 5, 4},{aw,-2, 0, 5, 4}, + {et,-3, 0, 6,-1},{et,-3, 0, 6, 0},{et,-3, 0, 6, 1},{et,-3, 0, 6, 2},{et,-3, 0, 6, 3},{es,-3, 0, 5, 4}, + {ds,-1, 0, 4,-2}, + {ds,-2, 0, 4,-1},{dt,-1, 0, 5,-1},{dt, 0, 0, 5,-1}, + {dt,-2, 0, 5, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0}, + {dt,-2, 0, 5, 1},{dt,-1, 0, 5, 1},{dt, 0, 0, 5, 1}, + {dt,-2, 0, 5, 2},{dt,-1, 0, 5, 2},{ds, 0, 0, 4, 2}, + {ds,-2, 0, 4, 3},{ds,-1, 0, 4, 3}, + {add_ref,-2, 0, 0, 1}}, user, pointed_thing) + elseif cdir == 4 then -- pointed west + run_list( {{aw, 0, 0, 5,-3},{aw,-1, 0, 5,-3},{aw,-2, 0, 5,-3}, + {aw, 0, 0, 5, 3},{aw,-1, 0, 5, 3},{aw,-2, 0, 5, 3}, + {es,-3, 0, 5,-3},{et,-3, 0, 6,-2},{et,-3, 0, 6,-1},{et,-3, 0, 6, 0},{et,-3, 0, 6, 1},{et,-3, 0, 6, 2},{es,-3, 0, 5, 3}, + {ds,-2, 0, 4,-2},{ds,-1, 0, 4,-2},{ds, 0, 0, 4,-2}, + {dt,-2, 0, 5,-1},{dt,-1, 0, 5,-1},{dt, 0, 0, 5,-1}, + {dt,-2, 0, 5, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0}, + {dt,-2, 0, 5, 1},{dt,-1, 0, 5, 1},{dt, 0, 0, 5, 1}, + {ds,-2, 0, 4, 2},{ds,-1, 0, 4, 2},{ds, 0, 0, 4, 2}, + {add_ref,-2, 0, 0, 0}}, user, pointed_thing) + elseif cdir == 5 then -- pointed west-southwest + run_list( {{aw, 1, 0, 5,-3},{aw, 0, 0, 5,-3},{aw, 0, 0, 5,-4},{aw,-1, 0, 5,-4},{aw,-2, 0, 5,-4}, + {aw,-1, 0, 5, 3},{aw,-2, 0, 5, 3},{aw,-2, 0, 5, 2},{aw,-3, 0, 5, 2}, + {es,-3, 0, 5,-4},{et,-3, 0, 6,-3},{et,-3, 0, 6,-2},{et,-3, 0, 6,-1},{et,-3, 0, 6, 0},{et,-3, 0, 6, 1}, + {ds,-2, 0, 4,-3},{ds,-1, 0, 4,-3}, + {dt,-2, 0, 5,-2},{dt,-1, 0, 5,-2},{ds, 0, 0, 4,-2}, + {dt,-2, 0, 5,-1},{dt,-1, 0, 5,-1},{dt, 0, 0, 5,-1}, + {dt,-2, 0, 5, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0}, + {ds,-2, 0, 4, 1},{dt,-1, 0, 5, 1},{dt, 0, 0, 5, 1}, + {ds,-1, 0, 4, 2}, + {add_ref,-2, 0, 0,-1}}, user, pointed_thing) + elseif cdir == 6 then -- pointed southwest + run_list( {{aw, 3, 0, 5,-2},{aw, 2, 0, 5,-2},{aw, 2, 0, 5,-3},{aw, 1, 0, 5,-3},{aw, 1, 0, 5,-4}, + {aw,-2, 0, 5, 3},{aw,-2, 0, 5, 2},{aw,-3, 0, 5, 2},{aw,-3, 0, 5, 1},{aw,-4, 0, 5, 1}, + {es, 0, 0, 5,-4},{es,-1, 0, 5,-4},{et,-1, 0, 6,-3},{et,-1, 0, 6,-2},{et,-2, 0, 6,-2},{et,-2, 0, 6,-1},{et,-3, 0, 6,-1},{es,-4, 0, 5,-1},{es,-4, 0, 5, 0}, + {ds, 0, 0, 4,-3}, + {dt, 0, 0, 5,-2},{ds, 1, 0, 4,-2}, + {dt,-1, 0, 5,-1},{dt, 0, 0, 5,-1},{dt, 1, 0, 5,-1},{ds, 2, 0, 4,-1}, + {ds,-3, 0, 4, 0},{dt,-2, 0, 5, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0}, + {ds,-2, 0, 4, 1},{dt,-1, 0, 5, 1}, + {ds,-1, 0, 4, 2}, + {add_ref,-1, 0, 0,-1}}, user, pointed_thing) + elseif cdir == 7 then -- pointed south-southwest + run_list( {{aw, 3, 0, 5,-1},{aw, 3, 0, 5,-2},{aw, 2, 0, 5,-2},{aw, 2, 0, 5,-3}, + {aw,-3, 0, 5, 1},{aw,-3, 0, 5, 0},{aw,-4, 0, 5, 0},{aw,-4, 0, 5,-1},{aw,-4, 0, 5,-2}, + {et, 1, 0, 6,-3},{et, 0, 0, 6,-3},{et,-1, 0, 6, -3},{et,-2, 0, 6,-3},{et,-3, 0, 6,-3},{es,-4, 0, 5,-3}, + {ds,-3, 0, 4,-2},{dt,-2, 0, 5,-2},{dt,-1, 0, 5,-2},{dt, 0, 0, 5,-2},{ds, 1, 0, 4,-2}, + {ds,-3, 0, 4,-1},{dt,-2, 0, 5,-1},{dt,-1, 0, 5,-1},{dt, 0, 0, 5,-1},{dt, 1, 0, 5,-1},{ds, 2, 0, 4,-1}, + {ds,-2, 0, 4, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0}, + {add_ref,-1, 0, 0,-2}}, user, pointed_thing) + elseif cdir == 8 then -- pointed south + run_list( {{aw, 3, 0, 5, 0},{aw, 3, 0, 5,-1},{aw, 3, 0, 5,-2}, + {aw,-3, 0, 5, 0},{aw,-3, 0, 5,-1},{aw,-3, 0, 5,-2}, + {es, 3, 0, 5,-3},{et, 2, 0, 6,-3},{et, 1, 0, 6,-3},{et, 0, 0, 6,-3},{et,-1, 0, 6,-3},{et,-2, 0, 6,-3},{es,-3, 0, 5,-3}, + {ds,-2, 0, 4,-2},{dt,-1, 0, 5,-2},{dt, 0, 0, 5,-2},{dt, 1, 0, 5,-2},{ds, 2, 0, 4,-2}, + {ds,-2, 0, 4,-1},{dt,-1, 0, 5,-1},{dt, 0, 0, 5,-1},{dt, 1, 0, 5,-1},{ds, 2, 0, 4,-1}, + {ds,-2, 0, 4, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{ds, 2, 0, 4, 0}, + {add_ref,0, 0, 0,-2}}, user, pointed_thing) + elseif cdir == 9 then -- pointed south-southeast + run_list( {{aw, 3, 0, 5, 1},{aw, 3, 0, 5, 0},{aw, 4, 0, 5, 0},{aw, 4, 0, 5,-1},{aw, 4, 0, 5,-2}, + {aw,-3, 0, 5,-1},{aw,-3, 0, 5,-2},{aw,-2, 0, 5,-2},{aw,-2, 0, 5,-3}, + {es, 4, 0, 5,-3},{et, 3, 0, 6,-3},{et, 2, 0, 6,-3},{et, 1, 0, 6,-3},{et, 0, 0, 6,-3},{et,-1, 0, 6,-3}, + {ds,-1, 0, 4,-2},{dt, 0, 0, 5,-2},{dt, 1, 0, 5,-2},{dt, 2, 0, 5,-2},{ds, 3, 0, 4,-2}, + {ds,-2, 0, 4,-1},{dt,-1, 0, 5,-1},{dt, 0, 0, 5,-1},{dt, 1, 0, 5,-1},{dt, 2, 0, 5,-1},{ds, 3, 0, 4,-1}, + {dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{ds, 2, 0, 4, 0}, + {add_ref,1, 0, 0,-2}}, user, pointed_thing) + elseif cdir == 10 then -- pointed southeast + run_list( {{aw, 2, 0, 5, 3},{aw, 2, 0, 5, 2},{aw, 3, 0, 5, 2},{aw, 3, 0, 5, 1},{aw, 4, 0, 5, 1}, + {aw,-3, 0, 5,-2},{aw,-2, 0, 5,-2},{aw,-2, 0, 5,-3},{aw,-1, 0, 5,-3},{aw,-1, 0, 5,-4}, + {es, 4, 0, 5, 0},{es, 4, 0, 5,-1},{et, 3, 0, 6,-1},{et, 2, 0, 6,-1},{et, 2, 0, 6,-2},{et, 1, 0, 6,-2},{et, 1, 0, 6,-3},{es, 1, 0, 5,-4},{es, 0, 0, 5,-4}, + {ds, 0, 0, 4,-3}, + {ds,-1, 0, 4,-2},{dt, 0, 0, 5,-2}, + {ds,-2, 0, 4,-1},{dt,-1, 0, 5,-1},{dt, 0, 0, 5,-1},{dt, 1, 0, 5,-1}, + {dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{dt, 2, 0, 5, 0},{ds, 3, 0, 4, 0}, + {dt, 1, 0, 5, 1},{ds, 2, 0, 4, 1}, + {ds, 1, 0, 4, 2}, + {add_ref, 1, 0, 0,-1}}, user, pointed_thing) + elseif cdir == 11 then -- pointed east-southeast + run_list( {{aw, 1, 0, 5, 3},{aw, 2, 0, 5, 3},{aw, 2, 0, 5, 2},{aw, 3, 0, 5, 2}, + {aw,-1, 0, 5,-3},{aw, 0, 0, 5,-3},{aw, 0, 0, 5,-4},{aw, 1, 0, 5,-4},{aw, 2, 0, 5,-4}, + {et, 3, 0, 6, 1},{et, 3, 0, 6, 0},{et, 3, 0, 6,-1},{et, 3, 0, 6,-2},{et, 3, 0, 6,-3},{es, 3, 0, 5,-4}, + {ds, 1, 0, 4,-3},{ds, 2, 0, 4,-3}, + {ds, 0, 0, 4,-2},{dt, 1, 0, 5,-2},{dt, 2, 0, 5,-2}, + {dt, 0, 0, 5,-1},{dt, 1, 0, 5,-1},{dt, 2, 0, 5,-1}, + {dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{dt, 2, 0, 5, 0}, + {dt, 0, 0, 5, 1},{dt, 1, 0, 5, 1},{ds, 2, 0, 4, 1}, + {ds, 1, 0, 4, 2}, + {add_ref, 2, 0, 0,-1}}, user, pointed_thing) + elseif cdir == 12 then -- pointed east + run_list( {{aw, 0, 0, 5, 3},{aw, 1, 0, 5, 3},{aw, 2, 0, 5, 3}, + {aw, 0, 0, 5,-3},{aw, 1, 0, 5,-3},{aw, 2, 0, 5,-3}, + {es, 3, 0, 5, 3},{et, 3, 0, 6, 2},{et, 3, 0, 6, 1},{et, 3, 0, 6, 0},{et, 3, 0, 6,-1},{et, 3, 0, 6,-2},{es, 3, 0, 5,-3}, + {ds, 0, 0, 4,-2},{ds, 1, 0, 4,-2},{ds, 2, 0, 4,-2}, + {dt, 0, 0, 5,-1},{dt, 1, 0, 5,-1},{dt, 2, 0, 5,-1}, + {dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{dt, 2, 0, 5, 0}, + {dt, 0, 0, 5, 1},{dt, 1, 0, 5, 1},{dt, 2, 0, 5, 1}, + {ds, 0, 0, 4, 2},{ds, 1, 0, 4, 2},{ds, 2, 0, 4, 2}, + {add_ref, 2, 0, 0, 0}}, user, pointed_thing) + elseif cdir == 13 then -- pointed east-northeast + run_list( {{aw,-1, 0, 5, 3},{aw, 0, 0, 5, 3},{aw, 0, 0, 5, 4},{aw, 1, 0, 5, 4},{aw, 2, 0, 5, 4}, + {aw, 1, 0, 5,-3},{aw, 2, 0, 5,-3},{aw, 2, 0, 5,-2},{aw, 3, 0, 5,-2}, + {es, 3, 0, 5, 4},{et, 3, 0, 6, 3},{et, 3, 0, 6, 2},{et, 3, 0, 6, 1},{et, 3, 0, 6, 0},{et, 3, 0, 6,-1}, + {ds, 1, 0, 4,-2}, + {dt, 0, 0, 5,-1},{dt, 1, 0, 5,-1},{ds, 2, 0, 4,-1}, + {dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{dt, 2, 0, 5, 0}, + {dt, 0, 0, 5, 1},{dt, 1, 0, 5, 1},{dt, 2, 0, 5, 1}, + {ds, 0, 0, 4, 2},{dt, 1, 0, 5, 2},{dt, 2, 0, 5, 2}, + {ds, 1, 0, 4, 3},{ds, 2, 0, 4, 3}, + {add_ref, 2, 0, 0, 1}}, user, pointed_thing) + elseif cdir == 14 then -- pointed northeast + run_list( {{aw,-3, 0, 5, 2},{aw,-2, 0, 5, 2},{aw,-2, 0, 5, 3},{aw,-1, 0, 5, 3},{aw,-1, 0, 5, 4}, + {aw, 2, 0, 5,-3},{aw, 2, 0, 5,-2},{aw, 3, 0, 5,-2},{aw, 3, 0, 5,-1},{aw, 4, 0, 5,-1}, + {es, 0, 0, 5, 4},{es, 1, 0, 5, 4},{et, 1, 0, 6, 3},{et, 1, 0, 6, 2},{et, 2, 0, 6, 2},{et, 2, 0, 6, 1},{et, 3, 0, 6, 1},{es, 4, 0, 5, 1},{es, 4, 0, 5, 0}, + {ds, 1, 0, 4,-2}, + {dt, 1, 0, 5,-1},{ds, 2, 0, 4,-1}, + {dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{dt, 2, 0, 5, 0},{ds, 3, 0, 4, 0}, + {ds,-2, 0, 4, 1},{dt,-1, 0, 5, 1},{dt, 0, 0, 5, 1},{dt, 1, 0, 5, 1}, + {ds,-1, 0, 4, 2},{dt, 0, 0, 5, 2}, + {ds, 0, 0, 4, 3}, + {add_ref, 1, 0, 0, 1}}, user, pointed_thing) + elseif cdir == 15 then -- pointed north-northeast + run_list( {{aw,-3, 0, 5, 1},{aw,-3, 0, 5, 2},{aw,-2, 0, 5, 2},{aw,-2, 0, 5, 3}, + {aw, 3, 0, 5,-1},{aw, 3, 0, 5, 0},{aw, 4, 0, 5, 0},{aw, 4, 0, 5, 1},{aw, 4, 0, 5, 2}, + {et,-1, 0, 6, 3},{et, 0, 0, 6, 3},{et, 1, 0, 6, 3},{et, 2, 0, 6, 3},{et, 3, 0, 6, 3},{es, 4, 0, 5, 3}, + {dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{ds, 2, 0, 4, 0}, + {ds,-2, 0, 4, 1},{dt,-1, 0, 5, 1},{dt, 0, 0, 5, 1},{dt, 1, 0, 5, 1},{dt, 2, 0, 5, 1},{ds, 3, 0, 4, 1}, + {ds,-1, 0, 4, 2},{dt, 0, 0, 5, 2},{dt, 1, 0, 5, 2},{dt, 2, 0, 5, 2},{ds, 3, 0, 4, 2}, + {add_ref, 1, 0, 0, 2}}, user, pointed_thing) + +-- Dig up + elseif cdir == 16 then -- pointed north (0, dig up) + run_list( {{aw,-3, 0, 5, 0},{aw, 3, 0, 5, 0},{aw,-3, 0, 6, 1}, + {aw, 3, 0, 6, 1},{aw,-3, 1, 6, 2},{aw, 3, 1, 6, 2}, + {es,-3, 1, 6, 3},{et,-2, 1, 7, 3},{et,-1, 1, 7, 3},{et, 0, 1, 7, 3},{et, 1, 1, 7, 3},{et, 2, 1, 7, 3},{es, 3, 1, 6, 3}, + {ds,-2, 0, 4, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{ds, 2, 0, 4, 0}, + {ds,-2, 0, 5, 1},{dt,-1, 0, 6, 1},{dt, 0, 0, 6, 1},{dt, 1, 0, 6, 1},{ds, 2, 0, 5, 1}, + {ds,-2, 1, 5, 2},{dt,-1, 1, 6, 2},{dt, 0, 1, 6, 2},{dt, 1, 1, 6, 2},{ds, 2, 1, 5, 2}, + {add_ref, 0, 1, 0, 2}, + {add_ref,-1, 0, 0, 2}, -- bridge support (left and right of nextref) + {add_ref, 1, 0, 0, 2}}, user, pointed_thing) + elseif cdir == 17 then -- pointed northwest (2, dig up) + run_list( {{aw,-2, 0, 5,-3},{aw,-2, 0, 6,-2},{aw,-3, 0, 6,-2},{aw,-3, 0, 6,-1},{aw,-3, 1, 6,-2}, + {aw, 3, 0, 5, 2},{aw, 2, 0, 6, 2},{aw, 2, 0, 6, 3},{aw, 1, 0, 6, 3},{aw, 1, 1, 6, 4}, + {es,-4, 1, 6, 0},{es,-4, 1, 6, 1},{et,-3, 1, 7, 1},{et,-2, 1, 7, 1},{et,-2, 1, 7, 2},{et,-1, 1, 7, 2},{et,-1, 1, 7, 3},{es,-1, 1, 6, 4},{es, 0, 1, 6, 4}, + {ds,-1, 0, 4,-2}, + {ds,-2, 0, 5,-1},{dt,-1, 0, 5,-1}, + {ds,-3, 1, 5, 0},{dt,-2, 1, 6, 0},{dt,-1, 0, 6, 0},{dt, 0, 0, 6, 0}, + {dt,-1, 1, 6, 1},{dt, 0, 0, 6, 1},{dt, 1, 0, 5, 1},{ds, 2, 0, 4, 1}, + {dt, 0, 1, 6, 2},{ds, 1, 0, 5, 2}, + {ds, 0, 1, 5, 3}, + {add_ref,-1, 1, 0, 1}, + {add_ref,-2, 0, 0, 0}, -- bridge support (left and right of nextref) + {add_ref, 0, 0, 0, 2}}, user, pointed_thing) + elseif cdir == 18 then -- pointed west (4, dig up) + run_list( {{aw, 0, 0, 5,-3},{aw,-1, 0, 6,-3},{aw,-2, 0, 6,-3}, + {aw, 0, 0, 5, 3},{aw,-1, 0, 6, 3},{aw,-2, 0, 6, 3}, + {es,-3, 1, 6,-3},{et,-3, 1, 7,-2},{et,-3, 1, 7,-1},{et,-3, 1, 7, 0},{et,-3, 1, 7, 1},{et,-3, 1, 7, 2},{es,-3, 1, 6, 3}, + {ds,-2, 1, 5,-2},{ds,-1, 0, 5,-2},{ds, 0, 0, 4,-2}, + {dt,-2, 1, 6,-1},{dt,-1, 0, 6,-1},{dt, 0, 0, 5,-1}, + {dt,-2, 1, 6, 0},{dt,-1, 0, 6, 0},{dt, 0, 0, 5, 0}, + {dt,-2, 1, 6, 1},{dt,-1, 0, 6, 1},{dt, 0, 0, 5, 1}, + {ds,-2, 1, 5, 2},{ds,-1, 0, 5, 2},{ds, 0, 0, 4, 2}, + {add_ref,-2, 1, 0, 0}, + {add_ref,-2, 0, 0,-1}, -- bridge support (left and right of nextref) + {add_ref,-2, 0, 0, 1}}, user, pointed_thing) + + elseif cdir == 19 then -- pointed southwest (6, dig up) + run_list( {{aw, 3, 0, 5,-2},{aw, 2, 0, 6,-2},{aw, 2, 0, 6,-3},{aw, 1, 0, 6,-3},{aw, 1, 1, 6,-4}, + {aw,-2, 0, 5, 3},{aw,-2, 0, 6, 2},{aw,-3, 0, 6, 2},{aw,-3, 0, 6, 1},{aw,-4, 1, 6, 1}, + {es, 0, 1, 6,-4},{es,-1, 1, 6,-4},{et,-1, 1, 7,-3},{et,-1, 1, 7,-2},{et,-2, 1, 7,-2},{et,-2, 1, 7,-1},{et,-3, 1, 7,-1},{es,-4, 1, 6,-1},{es,-4, 1, 6, 0}, + {ds, 0, 1, 5,-3}, + {dt, 0, 1, 6,-2},{ds, 1, 0, 5,-2}, + {dt,-1, 1, 6,-1},{dt, 0, 0, 6,-1},{dt, 1, 0, 5,-1},{ds, 2, 0, 4,-1}, + {ds,-3, 1, 5, 0},{dt,-2, 1, 6, 0},{dt,-1, 0, 6, 0},{dt, 0, 0, 6, 0}, + {ds,-2, 0, 5, 1},{dt,-1, 0, 5, 1}, + {ds,-1, 0, 4, 2}, + {add_ref,-1, 1, 0,-1}, + {add_ref,-2, 0, 0, 0}, -- bridge support (left and right of nextref) + {add_ref, 0, 0, 0,-2}}, user, pointed_thing) + + elseif cdir == 20 then -- pointed south (8, dig up) + run_list( {{aw, 3, 0, 5, 0},{aw, 3, 0, 6,-1},{aw, 3, 0, 6,-2}, + {aw,-3, 0, 5, 0},{aw,-3, 0, 6,-1},{aw,-3, 0, 6,-2}, + {es, 3, 1, 6,-3},{et, 2, 1, 7,-3},{et, 1, 1, 7,-3},{et, 0, 1, 7,-3},{et,-1, 1, 7,-3},{et,-2, 1, 7,-3},{es,-3, 1, 6,-3}, + {ds,-2, 1, 5,-2},{dt,-1, 1, 6,-2},{dt, 0, 1, 6,-2},{dt, 1, 1, 6,-2},{ds, 2, 1, 5,-2}, + {ds,-2, 0, 5,-1},{dt,-1, 0, 6,-1},{dt, 0, 0, 6,-1},{dt, 1, 0, 6,-1},{ds, 2, 0, 6,-1}, + {ds,-2, 0, 4, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{ds, 2, 0, 4, 0}, + {add_ref,0, 1, 0,-2}, + {add_ref,-1, 0, 0,-2}, -- bridge support (left and right of nextref) + {add_ref, 1, 0, 0,-2}}, user, pointed_thing) + + elseif cdir == 21 then -- pointed southeast (10, dig up) + run_list( {{aw, 2, 0, 5, 3},{aw, 2, 0, 6, 2},{aw, 3, 0, 6, 2},{aw, 3, 0, 6, 1},{aw, 4, 1, 6, 1}, + {aw,-3, 0, 5,-2},{aw,-2, 0, 6,-2},{aw,-2, 0, 6,-3},{aw,-1, 0, 6,-3},{aw,-1, 1, 6,-4}, + {es, 4, 1, 6, 0},{es, 4, 1, 6,-1},{et, 3, 1, 7,-1},{et, 2, 1, 7,-1},{et, 2, 1, 7,-2},{et, 1, 1, 7,-2},{et, 1, 1, 7,-3},{es, 1, 1, 6,-4},{es, 0, 1, 6,-4}, + {ds, 0, 1, 5,-3}, + {ds,-1, 0, 5,-2},{dt, 0, 1, 6,-2}, + {ds,-2, 0, 4,-1},{dt,-1, 0, 5,-1},{dt, 0, 0, 6,-1},{dt, 1, 1, 6,-1}, + {dt, 0, 0, 6, 0},{dt, 1, 0, 6, 0},{dt, 2, 1, 6, 0},{ds, 3, 1, 5, 0}, + {dt, 1, 0, 5, 1},{ds, 2, 0, 5, 1}, + {ds, 1, 0, 4, 2}, + {add_ref, 1, 1, 0,-1}, + {add_ref, 2, 0, 0, 0}, -- bridge support (left and right of nextref) + {add_ref, 0, 0, 0,-2}}, user, pointed_thing) + + elseif cdir == 22 then -- pointed east (12, dig up) + run_list( {{aw, 0, 0, 5, 3},{aw, 1, 0, 6, 3},{aw, 2, 0, 6, 3}, + {aw, 0, 0, 5,-3},{aw, 1, 0, 6,-3},{aw, 2, 0, 6,-3}, + {es, 3, 1, 6, 3},{et, 3, 1, 7, 2},{et, 3, 1, 7, 1},{et, 3, 1, 7, 0},{et, 3, 1, 7,-1},{et, 3, 1, 7,-2},{es, 3, 1, 6,-3}, + {ds, 0, 0, 4,-2},{ds, 1, 0, 5,-2},{ds, 2, 1, 5,-2}, + {dt, 0, 0, 5,-1},{dt, 1, 0, 6,-1},{dt, 2, 1, 6,-1}, + {dt, 0, 0, 5, 0},{dt, 1, 0, 6, 0},{dt, 2, 1, 6, 0}, + {dt, 0, 0, 5, 1},{dt, 1, 0, 6, 1},{dt, 2, 1, 6, 1}, + {ds, 0, 0, 4, 2},{ds, 1, 0, 5, 2},{ds, 2, 1, 5, 2}, + {add_ref, 2, 1, 0, 0}, + {add_ref, 2, 0, 0, 1}, -- bridge support (left and right of nextref) + {add_ref, 2, 0, 0,-1}}, user, pointed_thing) + + elseif cdir == 23 then -- pointed northeast (14, dig up) + run_list( {{aw,-3, 0, 5, 2},{aw,-2, 0, 6, 2},{aw,-2, 0, 6, 3},{aw,-1, 0, 6, 3},{aw,-1, 1, 6, 4}, + {aw, 2, 0, 5,-3},{aw, 2, 0, 6,-2},{aw, 3, 0, 6,-2},{aw, 3, 0, 6,-1},{aw, 4, 1, 6,-1}, + {es, 0, 1, 6, 4},{es, 1, 1, 6, 4},{et, 1, 1, 7, 3},{et, 1, 1, 7, 2},{et, 2, 1, 7, 2},{et, 2, 1, 7, 1},{et, 3, 1, 7, 1},{es, 4, 1, 6, 1},{es, 4, 1, 6, 0}, + {ds, 1, 0, 4,-2}, + {dt, 1, 0, 5,-1},{ds, 2, 0, 5,-1}, + {dt, 0, 0, 6, 0},{dt, 1, 0, 6, 0},{dt, 2, 1, 6, 0},{ds, 3, 1, 5, 0}, + {ds,-2, 0, 4, 1},{dt,-1, 0, 5, 1},{dt, 0, 0, 6, 1},{dt, 1, 1, 6, 1}, + {ds,-1, 0, 5, 2},{dt, 0, 1, 6, 2}, + {ds, 0, 1, 5, 3}, + {add_ref, 1, 1, 0, 1}, + {add_ref, 0, 0, 0, 2}, -- bridge support (left and right of nextref) + {add_ref, 2, 0, 0, 0}}, user, pointed_thing) + +-- Dig down + elseif cdir == 24 then -- pointed north (0, dig down) + run_list( {{aw,-3, 0, 5, 0},{aw, 3, 0, 5, 0},{aw,-3,-1, 5, 1}, + {aw, 3,-1, 5, 1},{aw,-3,-1, 4, 2},{aw, 3,-1, 4, 2}, + {es,-3,-1, 4, 3},{et,-2,-1, 5, 3},{et,-1,-1, 5, 3},{et, 0,-1, 5, 3},{et, 1,-1, 5, 3},{et, 2,-1, 5, 3},{es, 3,-1, 4, 3}, + {ds,-2, 0, 4, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{ds, 2, 0, 4, 0}, + {ds,-2,-1, 4, 1},{dt,-1,-1, 5, 1},{dt, 0,-1, 5, 1},{dt, 1,-1, 5, 1},{ds, 2,-1, 4, 1}, + {ds,-2,-1, 3, 2},{dt,-1,-1, 4, 2},{dt, 0,-1, 4, 2},{dt, 1,-1, 4, 2},{ds, 2,-1, 3, 2}, + {add_ref, 0,-1, 0, 2}, + {add_ref,-1,-1, 0, 0}, -- bridge support (left and right of origin) + {add_ref, 1,-1, 0, 0}}, user, pointed_thing) + elseif cdir == 25 then -- pointed northwest (2, dig down) + run_list( {{aw,-2, 0, 5,-3},{aw,-2,-1, 5,-2},{aw,-3,-1, 5,-2},{aw,-3,-1, 5,-1},{aw,-4,-1, 4,-1}, + {aw, 3, 0, 5, 2},{aw, 2,-1, 5, 2},{aw, 2,-1, 5, 3},{aw, 1,-1, 5, 3},{aw, 1,-1, 4, 4}, + {es,-4,-1, 4, 0},{es,-4,-1, 4, 1},{et,-3,-1, 5, 1},{et,-2,-1, 6, 1},{et,-2,-1, 6, 2},{et,-1,-1, 6, 2},{et,-1,-1, 5, 3},{es,-1,-1, 4, 4},{es, 0,-1, 4, 4}, + {ds,-1, 0, 4,-2}, + {ds,-2,-1, 4,-1},{dt,-1, 0, 5,-1}, + {ds,-3,-1, 3, 0},{dt,-2,-1, 4, 0},{dt,-1,-1, 5, 0},{dt, 0, 0, 5, 0}, + {dt,-1,-1, 5, 1},{dt, 0,-1, 5, 1},{dt, 1, 0, 5, 1},{ds, 2, 0, 4, 1}, + {dt, 0,-1, 4, 2},{ds, 1,-1, 4, 2}, + {ds, 0,-1, 3, 3}, + {add_ref,-1,-1, 0, 1}, + {add_ref,-1,-1, 0,-1}, -- bridge support (left and right of origin) + {add_ref, 1,-1, 0, 1}}, user, pointed_thing) + + elseif cdir == 26 then -- pointed west (4, dig down) + run_list( {{aw, 0, 0, 5,-3},{aw,-1,-1, 5,-3},{aw,-2,-1, 4,-3}, + {aw, 0, 0, 5, 3},{aw,-1,-1, 5, 3},{aw,-2,-1, 4, 3}, + {es,-3,-1, 4,-3},{et,-3,-1, 5,-2},{et,-3,-1, 5,-1},{et,-3,-1, 5, 0},{et,-3,-1, 5, 1},{et,-3,-1, 5, 2},{es,-3,-1, 4, 3}, + {ds,-2,-1, 3,-2},{ds,-1,-1, 4,-2},{ds, 0, 0, 4,-2}, + {dt,-2,-1, 4,-1},{dt,-1,-1, 5,-1},{dt, 0, 0, 5,-1}, + {dt,-2,-1, 4, 0},{dt,-1,-1, 5, 0},{dt, 0, 0, 5, 0}, + {dt,-2,-1, 4, 1},{dt,-1,-1, 5, 1},{dt, 0, 0, 5, 1}, + {ds,-2,-1, 3, 2},{ds,-1,-1, 4, 2},{ds, 0, 0, 4, 2}, + {add_ref,-2,-1, 0, 0}, + {add_ref, 0,-1, 0, 1}, -- bridge support (left and right of origin) + {add_ref, 0,-1, 0,-1}}, user, pointed_thing) + + elseif cdir == 27 then -- pointed southwest (6, dig down) + run_list( {{aw, 3, 0, 5,-2},{aw, 2,-1, 5,-2},{aw, 2,-1, 5,-3},{aw, 1,-1, 5,-3},{aw, 1,-1, 4,-4}, + {aw,-2, 0, 5, 3},{aw,-2,-1, 5, 2},{aw,-3,-1, 5, 2},{aw,-3,-1, 5, 1},{aw,-4,-1, 4, 1}, + {es, 0,-1, 4,-4},{es,-1,-1, 4,-4},{et,-1,-1, 5,-3},{et,-1, -1, 6,-2},{et,-2,-1, 6,-2},{et,-2,-1, 6,-1},{et,-3,-1, 5,-1},{es,-4,-1, 4,-1},{es,-4,-1, 4, 0}, + {ds, 0,-1, 3,-3}, + {dt, 0,-1, 4,-2},{ds, 1,-1, 4,-2}, + {dt,-1,-1, 5,-1},{dt, 0,-1, 5,-1},{dt, 1, 0, 5,-1},{ds, 2, 0, 4,-1}, + {ds,-3,-1, 3, 0},{dt,-2,-1, 4, 0},{dt,-1,-1, 5, 0},{dt, 0, 0, 5, 0}, + {ds,-2,-1, 4, 1},{dt,-1, 0, 5, 1}, + {ds,-1, 0, 4, 2}, + {add_ref,-1,-1, 0,-1}, + {add_ref,-1,-1, 0, 1}, -- bridge support (left and right of origin) + {add_ref, 1,-1, 0,-1}}, user, pointed_thing) + + elseif cdir == 28 then -- pointed south (8, dig down) + run_list( {{aw, 3, 0, 5, 0},{aw, 3,-1, 5,-1},{aw, 3,-1, 4,-2}, + {aw,-3, 0, 5, 0},{aw,-3,-1, 5,-1},{aw,-3,-1, 4,-2}, + {es, 3,-1, 4,-3},{et, 2,-1, 5,-3},{et, 1,-1, 5,-3},{et, 0,-1, 5,-3},{et,-1,-1, 5,-3},{et,-2,-1, 5,-3},{es,-3,-1, 4,-3}, + {ds,-2,-1, 3,-2},{dt,-1,-1, 4,-2},{dt, 0,-1, 4,-2},{dt, 1,-1, 4,-2},{ds, 2,-1, 3,-2}, + {ds,-2,-1, 4,-1},{dt,-1,-1, 5,-1},{dt, 0,-1, 5,-1},{dt, 1,-1, 5,-1},{ds, 2,-1, 4,-1}, + {ds,-2, 0, 4, 0},{dt,-1, 0, 5, 0},{dt, 0, 0, 5, 0},{dt, 1, 0, 5, 0},{ds, 2, 0, 4, 0}, + {add_ref, 0,-1, 0,-2}, + {add_ref,-1,-1, 0, 0}, -- bridge support (left and right of origin) + {add_ref, 1,-1, 0, 0}}, user, pointed_thing) + + elseif cdir == 29 then -- pointed southeast (10, dig down) + run_list( {{aw, 2, 0, 5, 3},{aw, 2,-1, 5, 2},{aw, 3,-1, 5, 2},{aw, 3,-1, 5, 1},{aw, 4, 0, 5, 1}, + {aw,-3, 0, 5,-2},{aw,-2,-1, 5,-2},{aw,-2,-1, 5,-3},{aw,-1,-1, 5,-3},{aw,-1, 0, 5,-4}, + {es, 4,-1, 4, 0},{es, 4,-1, 4,-1},{et, 3,-1, 5,-1},{et, 2,-1, 6,-1},{et, 2,-1, 6,-2},{et, 1,-1, 6,-2},{et, 1,-1, 5,-3},{es, 1,-1, 4,-4},{es, 0,-1, 4,-4}, + {ds, 0,-1, 3,-3}, + {ds,-1,-1, 4,-2},{dt, 0,-1, 4,-2}, + {ds,-2, 0, 4,-1},{dt,-1, 0, 5,-1},{dt, 0,-1, 5,-1},{dt, 1,-1, 5,-1}, + {dt, 0, 0, 5, 0},{dt, 1,-1, 5, 0},{dt, 2,-1, 4, 0},{ds, 3,-1, 3, 0}, + {dt, 1, 0, 5, 1},{ds, 2,-1, 4, 1}, + {ds, 1, 0, 4, 2}, + {add_ref, 1,-1, 0,-1}, + {add_ref,-1,-1, 0,-1}, -- bridge support (left and right of origin) + {add_ref, 1,-1, 0, 1}}, user, pointed_thing) + + elseif cdir == 30 then -- pointed east (12, dig down) + run_list( {{aw, 0, 0, 5, 3},{aw, 1,-1, 5, 3},{aw, 2,-1, 4, 3}, + {aw, 0, 0, 5,-3},{aw, 1,-1, 5,-3},{aw, 2,-1, 4,-3}, + {es, 3,-1, 4, 3},{et, 3,-1, 5, 2},{et, 3,-1, 5, 1},{et, 3,-1, 5, 0},{et, 3,-1, 5,-1},{et, 3,-1, 5,-2},{es, 3,-1, 4,-3}, + {ds, 0, 0, 4,-2},{ds, 1,-1, 4,-2},{ds, 2,-1, 3,-2}, + {dt, 0, 0, 5,-1},{dt, 1,-1, 5,-1},{dt, 2,-1, 4,-1}, + {dt, 0, 0, 5, 0},{dt, 1,-1, 5, 0},{dt, 2,-1, 4, 0}, + {dt, 0, 0, 5, 1},{dt, 1,-1, 5, 1},{dt, 2,-1, 4, 1}, + {ds, 0, 0, 4, 2},{ds, 1,-1, 4, 2},{ds, 2,-1, 3, 2}, + {add_ref, 2,-1, 0, 0}, + {add_ref, 0,-1, 0, 1}, -- bridge support (left and right of origin) + {add_ref, 0,-1, 0,-1}}, user, pointed_thing) + + elseif cdir == 31 then -- pointed northeast (14, dig down) + run_list( {{aw,-3, 0, 5, 2},{aw,-2,-1, 5, 2},{aw,-2,-1, 5, 3},{aw,-1,-1, 5, 3},{aw,-1,-1, 4, 4}, + {aw, 2, 0, 5,-3},{aw, 2,-1, 5,-2},{aw, 3,-1, 5,-2},{aw, 3,-1, 5,-1},{aw, 4,-1, 4,-1}, + {es, 0,-1, 4, 4},{es, 1,-1, 4, 4},{et, 1,-1, 5, 3},{et, 1,-1, 6, 2},{et, 2,-1, 6, 2},{et, 2,-1, 6, 1},{et, 3,-1, 5, 1},{es, 4,-1, 4, 1},{es, 4,-1, 4, 0}, + {ds, 1, 0, 4,-2}, + {dt, 1, 0, 5,-1},{ds, 2,-1, 4,-1}, + {dt, 0, 0, 5, 0},{dt, 1,-1, 5, 0},{dt, 2,-1, 4, 0},{ds, 3,-1, 3, 0}, + {ds,-2, 0, 4, 1},{dt,-1, 0, 5, 1},{dt, 0,-1, 5, 1},{dt, 1,-1, 5, 1}, + {ds,-1,-1, 4, 2},{dt, 0,-1, 4, 2}, + {ds, 0,-1, 3, 3}, + {add_ref,-1,-1, 0, 1}, + {add_ref,-1,-1, 0, 0}, -- bridge support (left and right of origin) + {add_ref, 1,-1, 0,-1}}, user, pointed_thing) end - add_light(2, user, pointed_thing) -- change to 1 for more frequent lights + add_light(1, user, pointed_thing) -- change to 1 for more frequent lights (using 1 while debugging updown) end end @@ -485,19 +758,28 @@ for i,img in ipairs(images) do -- dig tunnel with right mouse click (double tap on android) -- tunneling only works if in creative mode on_place = function(itemstack, placer, pointed_thing) - local player_name = placer and placer:get_player_name() or "" + local pname = placer and placer:get_player_name() or "" local creative_enabled = (creative and creative.is_enabled_for - and creative.is_enabled_for(player_name)) - if creative_enabled and pointed_thing.type=="node" then - -- if advtrains_track, I lower positions of pointed_thing to right below track, but keep name the same. - local name = minetest.get_node(pointed_thing.under).name - if minetest.registered_nodes[name].groups.advtrains_track == 1 then - pointed_thing.under = vector.add(pointed_thing.under, {x=0, y=-1, z=0}) - pointed_thing.above = vector.add(pointed_thing.above, {x=0, y=-1, z=0}) -- don't currently use this + and creative.is_enabled_for(pname)) + if creative_enabled then + -- If sneak button held down when right-clicking tunnelmaker, toggle updown dig direction: up, down, horizontal, ... + -- Rotating or moving will reset to horizontal. + if placer:get_player_control().sneak then + tunnelmaker[pname].updown = (tunnelmaker[pname].updown + 1) % 3 + tunnelmaker[pname].lastpos = { x = placer:getpos().x, y = placer:getpos().y, z = placer:getpos().z } + -- Otherwise dig tunnel based on direction pointed and current updown direction + elseif pointed_thing.type=="node" then + -- if advtrains_track, I lower positions of pointed_thing to right below track, but keep name the same. + local name = minetest.get_node(pointed_thing.under).name + if minetest.registered_nodes[name].groups.advtrains_track == 1 then + pointed_thing.under = vector.add(pointed_thing.under, {x=0, y=-1, z=0}) + pointed_thing.above = vector.add(pointed_thing.above, {x=0, y=-1, z=0}) -- don't currently use this + end + dig_tunnel(i-1, placer, pointed_thing) + tunnelmaker[pname].updown = 0 -- reset after one use end - dig_tunnel(i-1, placer, pointed_thing) end - end, + end, -- on_place } ) end diff --git a/textures/tunnelmaker_16.png b/textures/tunnelmaker_16.png new file mode 100644 index 0000000000000000000000000000000000000000..2966857067511f71b6c9cd3a83f086eba5858850 GIT binary patch literal 744 zcmVP)i(j03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00K-&L_t(2&xO)GOcP-o z$MOIFxqEugm6z)afwt6Au|hQA)c}g@GPr0$Vj`0Gh;e2EBy zF+>Lw;$Tn-@|xPCM=4b46}hK(+~aTwkZ5%OEZ_Wok}q;jJ)8z`kuW(lAjhxn+7%E! zsO?vh*9Z|v7!95F3=k$G$^ZmV7DxfHKCIS;S_RjLKe;7TW0N?gFD!Npfbjez)w*Ps zxP+{csE5o_x#dXU!L6=nXz<5YIT)x}G062hF@V>e0RVsMrp(u#(@?)%cq>@@&VAtY5*Rz5!kfUnb!n5wvfpwh;TXXZ>=iJV2G`wbP%#D;Jzp3rq8 z9*?f-xjL>&k&E=`nZU^)vPRaF0cTr6xf%(z^W%;&6$zIHdQ&5#W5aVFhL+u)uGGY< z$E&jw=oUO<7vIbK4OR~9Xod5IB^?0f7j?(xU~htzbGhc3zcetWbhM=aptC(iDRl(_ zLiY?JMXhfFS);p?Dg87%kB483og!j89*^pJuFUPLiHvH8=&-|<5LI%3qnmaMrJOj=)vZgEEmv;G@q&C$w^fBul+IditzkEHWF(vpq@h3gw aa^p9inn8cH0W`4y0000WFU8GbZ8()Nlj2>E@cM*00U=9L_t(I%QejFPt|oC z!14F@cR7c1I5%!F(!jVF9UvHxE_8FDVr{hCTwA1D%Mt5QJ#j7Z3AIr%hEJl_#f-Aj zaGA>ot*qF{q@h+s%NaNXgbEJGIfui!{eHhsPwMptyi{)ZxTF_8##Ou@&0B`GdI_^| zFPWtaI2$wMls$)?_!H33JX=W3y@TPe#Vp(-*~m9a>Hb<#h7YU_a>}~MDLqW$`b%UY z-=Xwelo22|+>g>+td7)R=4}HzNj5e~QF{i>EZBu)qZpwkG*=#}`60|uGmcS$mCj%m z?!j8ShP8GD0Gt$>_g(-}vnMdjyob=ex(BwtX|~9z8(B{{sk)im$BC4X!acdTqRGy zf0-6-X7=7U~B?g%3n&vSO@7+Y(%lD6+A(DWHAUl$X*)`2hl zI%3CB?#)k&wRQ#DT|+^6JA>U}?g}|P)!EBhG|tQ2hiPkVrt6g{uKqNF9{(22U5vZr z0Gg`+&5lo^3?D?N$jeR9-rmgU*suJvv`Q*6!nq5h)IU&7ZMX_n#zDD}%rf@+6lT$* zC|}*%l3w@(vv@xl$4yK5AG|+!l*)>G_}`K4L z4G&;N$5D&JjNVw~U}u)$xxXkYE#XM_AOn3TQC@{%n0Tvta8mQ67e2*F&Z3EvL74$? zvLIPNu@+s&&~*S}>l+F!qs$PXfwKWhLw9dF)RUaYR(L?VWs(HCWx!BmGsO2N@W+~tGt}MqzUhO|A_;-qc zw6;Gl*{mfUFa9QYc8eZp6eHLu-pXT=-?l88?kPo_40wu3X536n+@z|qlt9o&X!Aa{ zHQmqj%{k`h=D@cF#75~pl)DgX?JCOOcvh^{5zPD+5|Q7@NssZx>3-s|7}syy;=tn% zbFj0ApC=ReE1o2K=MuWN60k|%J_Vl2qf+olOuYB?iYpivJP(SeXs3*f-ICi&w$$%< xMlkBd6>1RorVh#9GcW#zkHiQxh>_PK{{oU(aiBL~0T=)P002ovPDHLkV1i1;-Aw=h literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_18.png b/textures/tunnelmaker_18.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b3cec248c177773790745d767da0f23a7aa12c GIT binary patch literal 744 zcmVP)WFU8GbZ8()Nlj2>E@cM*00K-&L_t(2&xO)GOcP-o z$MOIFxqEugm6z)afwt6Au|hQA)c}g@GPr0$Vj`0Gh;e2EBy zF+>Lw;$Tn-@|xPCM=4b46}hK(+~aTwkZ5%OEZ_Wok}q;jJ)8z`kuW(lAjhxn+7%E! zsO?vh*9Z|v7!95F3=k$G$^ZmV7DxfHKCIS;S_RjLKe;7TW0N?gFD!Npfbjez)w*Ps zxP+{csE5o_x#dXU!L6=nXz<5YIT)x}G062hF@V>e0RVsMrp(u#(@?)%cq>@@&VAtY5*Rz5!kfUnb!n5wvfpwh;TXXZ>=iJV2G`wbP%#D;Jzp3rq8 z9*?f-xjL>&k&E=`nZU^)vPRaF0cTr6xf%(z^W%;&6$zIHdQ&5#W5aVFhL+u)uGGY< z$E&jw=oUO<7vIbK4OR~9Xod5IB^?0f7j?(xU~htzbGhc3zcetWbhM=aptC(iDRl(_ zLiY?JMXhfFS);p?Dg87%kB483og!j89*^pJuFUPLiHvH8=&-|<5LI%3qnmaMrJOj=)vZgEEmv;G@q&C$w^fBul+IditzkEHWF(vpq@h3gw aa^p9inn8cH0W`4y0000WFU8GbZ8()Nlj2>E@cM*00U=9L_t(I%QejFPt|oC z!14F@cR7c1I5%!F(!jVF9UvHxE_8FDVr{hCTwA1D%Mt5QJ#j7Z3AIr%hEJl_#f-Aj zaGA>ot*qF{q@h+s%NaNXgbEJGIfui!{eHhsPwMptyi{)ZxTF_8##Ou@&0B`GdI_^| zFPWtaI2$wMls$)?_!H33JX=W3y@TPe#Vp(-*~m9a>Hb<#h7YU_a>}~MDLqW$`b%UY z-=Xwelo22|+>g>+td7)R=4}HzNj5e~QF{i>EZBu)qZpwkG*=#}`60|uGmcS$mCj%m z?!j8ShP8GD0Gt$>_g(-}vnMdjyob=ex(BwtX|~9z8(B{{sk)im$BC4X!acdTqRGy zf0-6-X7=7U~B?g%3n&vSO@7+Y(%lD6+A(DWHAUl$X*)`2hl zI%3CB?#)k&wRQ#DT|+^6JA>U}?g}|P)!EBhG|tQ2hiPkVrt6g{uKqNF9{(22U5vZr z0Gg`+&5lo^3?D?N$jeR9-rmgU*suJvv`Q*6!nq5h)IU&7ZMX_n#zDD}%rf@+6lT$* zC|}*%l3w@(vv@xl$4yK5AG|+!l*)>G_}`K4L z4G&;N$5D&JjNVw~U}u)$xxXkYE#XM_AOn3TQC@{%n0Tvta8mQ67e2*F&Z3EvL74$? zvLIPNu@+s&&~*S}>l+F!qs$PXfwKWhLw9dF)RUaYR(L?VWs(HCWx!BmGsO2N@W+~tGt}MqzUhO|A_;-qc zw6;Gl*{mfUFa9QYc8eZp6eHLu-pXT=-?l88?kPo_40wu3X536n+@z|qlt9o&X!Aa{ zHQmqj%{k`h=D@cF#75~pl)DgX?JCOOcvh^{5zPD+5|Q7@NssZx>3-s|7}syy;=tn% zbFj0ApC=ReE1o2K=MuWN60k|%J_Vl2qf+olOuYB?iYpivJP(SeXs3*f-ICi&w$$%< xMlkBd6>1RorVh#9GcW#zkHiQxh>_PK{{oU(aiBL~0T=)P002ovPDHLkV1hk#-PHg9 literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_20.png b/textures/tunnelmaker_20.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7e9b7741a85b0dd686cd54b50cfb1afc8a8ae2 GIT binary patch literal 744 zcmVP)HqNe}=03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00K-&L_t(2&xO)GOcP-o z$MOIFxqEugm6z)afwt6Au|hQA)c}g@GPr0$Vj`0Gh;e2EBy zF+>Lw;$Tn-@|xPCM=4b46}hK(+~aTwkZ5%OEZ_Wok}q;jJ)8z`kuW(lAjhxn+7%E! zsO?vh*9Z|v7!95F3=k$G$^ZmV7DxfHKCIS;S_RjLKe;7TW0N?gFD!Npfbjez)w*Ps zxP+{csE5o_x#dXU!L6=nXz<5YIT)x}G062hF@V>e0RVsMrp(u#(@?)%cq>@@&VAtY5*Rz5!kfUnb!n5wvfpwh;TXXZ>=iJV2G`wbP%#D;Jzp3rq8 z9*?f-xjL>&k&E=`nZU^)vPRaF0cTr6xf%(z^W%;&6$zIHdQ&5#W5aVFhL+u)uGGY< z$E&jw=oUO<7vIbK4OR~9Xod5IB^?0f7j?(xU~htzbGhc3zcetWbhM=aptC(iDRl(_ zLiY?JMXhfFS);p?Dg87%kB483og!j89*^pJuFUPLiHvH8=&-|<5LI%3qnmaMrJOj=)vZgEEmv;G@q&C$w^fBul+IditzkEHWF(vpq@h3gw aa^p9inn8cH0W`4y0000WFU8GbZ8()Nlj2>E@cM*00U=9L_t(I%QejFPt|oC z!14F@cR7c1I5%!F(!jVF9UvHxE_8FDVr{hCTwA1D%Mt5QJ#j7Z3AIr%hEJl_#f-Aj zaGA>ot*qF{q@h+s%NaNXgbEJGIfui!{eHhsPwMptyi{)ZxTF_8##Ou@&0B`GdI_^| zFPWtaI2$wMls$)?_!H33JX=W3y@TPe#Vp(-*~m9a>Hb<#h7YU_a>}~MDLqW$`b%UY z-=Xwelo22|+>g>+td7)R=4}HzNj5e~QF{i>EZBu)qZpwkG*=#}`60|uGmcS$mCj%m z?!j8ShP8GD0Gt$>_g(-}vnMdjyob=ex(BwtX|~9z8(B{{sk)im$BC4X!acdTqRGy zf0-6-X7=7U~B?g%3n&vSO@7+Y(%lD6+A(DWHAUl$X*)`2hl zI%3CB?#)k&wRQ#DT|+^6JA>U}?g}|P)!EBhG|tQ2hiPkVrt6g{uKqNF9{(22U5vZr z0Gg`+&5lo^3?D?N$jeR9-rmgU*suJvv`Q*6!nq5h)IU&7ZMX_n#zDD}%rf@+6lT$* zC|}*%l3w@(vv@xl$4yK5AG|+!l*)>G_}`K4L z4G&;N$5D&JjNVw~U}u)$xxXkYE#XM_AOn3TQC@{%n0Tvta8mQ67e2*F&Z3EvL74$? zvLIPNu@+s&&~*S}>l+F!qs$PXfwKWhLw9dF)RUaYR(L?VWs(HCWx!BmGsO2N@W+~tGt}MqzUhO|A_;-qc zw6;Gl*{mfUFa9QYc8eZp6eHLu-pXT=-?l88?kPo_40wu3X536n+@z|qlt9o&X!Aa{ zHQmqj%{k`h=D@cF#75~pl)DgX?JCOOcvh^{5zPD+5|Q7@NssZx>3-s|7}syy;=tn% zbFj0ApC=ReE1o2K=MuWN60k|%J_Vl2qf+olOuYB?iYpivJP(SeXs3*f-ICi&w$$%< xMlkBd6>1RorVh#9GcW#zkHiQxh>_PK{{oU(aiBL~0T=)P002ovPDHLkV1oOz+^hfq literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_22.png b/textures/tunnelmaker_22.png new file mode 100644 index 0000000000000000000000000000000000000000..e0bf2994e36dbb5622661aa43cbdaad9bb2a44c3 GIT binary patch literal 744 zcmVP)WFU8GbZ8()Nlj2>E@cM*00K-&L_t(2&xO)GOcP-o z$MOIFxqEugm6z)afwt6Au|hQA)c}g@GPr0$Vj`0Gh;e2EBy zF+>Lw;$Tn-@|xPCM=4b46}hK(+~aTwkZ5%OEZ_Wok}q;jJ)8z`kuW(lAjhxn+7%E! zsO?vh*9Z|v7!95F3=k$G$^ZmV7DxfHKCIS;S_RjLKe;7TW0N?gFD!Npfbjez)w*Ps zxP+{csE5o_x#dXU!L6=nXz<5YIT)x}G062hF@V>e0RVsMrp(u#(@?)%cq>@@&VAtY5*Rz5!kfUnb!n5wvfpwh;TXXZ>=iJV2G`wbP%#D;Jzp3rq8 z9*?f-xjL>&k&E=`nZU^)vPRaF0cTr6xf%(z^W%;&6$zIHdQ&5#W5aVFhL+u)uGGY< z$E&jw=oUO<7vIbK4OR~9Xod5IB^?0f7j?(xU~htzbGhc3zcetWbhM=aptC(iDRl(_ zLiY?JMXhfFS);p?Dg87%kB483og!j89*^pJuFUPLiHvH8=&-|<5LI%3qnmaMrJOj=)vZgEEmv;G@q&C$w^fBul+IditzkEHWF(vpq@h3gw aa^p9inn8cH0W`4y0000WFU8GbZ8()Nlj2>E@cM*00U=9L_t(I%QejFPt|oC z!14F@cR7c1I5%!F(!jVF9UvHxE_8FDVr{hCTwA1D%Mt5QJ#j7Z3AIr%hEJl_#f-Aj zaGA>ot*qF{q@h+s%NaNXgbEJGIfui!{eHhsPwMptyi{)ZxTF_8##Ou@&0B`GdI_^| zFPWtaI2$wMls$)?_!H33JX=W3y@TPe#Vp(-*~m9a>Hb<#h7YU_a>}~MDLqW$`b%UY z-=Xwelo22|+>g>+td7)R=4}HzNj5e~QF{i>EZBu)qZpwkG*=#}`60|uGmcS$mCj%m z?!j8ShP8GD0Gt$>_g(-}vnMdjyob=ex(BwtX|~9z8(B{{sk)im$BC4X!acdTqRGy zf0-6-X7=7U~B?g%3n&vSO@7+Y(%lD6+A(DWHAUl$X*)`2hl zI%3CB?#)k&wRQ#DT|+^6JA>U}?g}|P)!EBhG|tQ2hiPkVrt6g{uKqNF9{(22U5vZr z0Gg`+&5lo^3?D?N$jeR9-rmgU*suJvv`Q*6!nq5h)IU&7ZMX_n#zDD}%rf@+6lT$* zC|}*%l3w@(vv@xl$4yK5AG|+!l*)>G_}`K4L z4G&;N$5D&JjNVw~U}u)$xxXkYE#XM_AOn3TQC@{%n0Tvta8mQ67e2*F&Z3EvL74$? zvLIPNu@+s&&~*S}>l+F!qs$PXfwKWhLw9dF)RUaYR(L?VWs(HCWx!BmGsO2N@W+~tGt}MqzUhO|A_;-qc zw6;Gl*{mfUFa9QYc8eZp6eHLu-pXT=-?l88?kPo_40wu3X536n+@z|qlt9o&X!Aa{ zHQmqj%{k`h=D@cF#75~pl)DgX?JCOOcvh^{5zPD+5|Q7@NssZx>3-s|7}syy;=tn% zbFj0ApC=ReE1o2K=MuWN60k|%J_Vl2qf+olOuYB?iYpivJP(SeXs3*f-ICi&w$$%< xMlkBd6>1RorVh#9GcW#zkHiQxh>_PK{{oU(aiBL~0T=)P002ovPDHLkV1lpE-Z}sP literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_24.png b/textures/tunnelmaker_24.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f8e3704ce90596e4ea8614b8f3928c6b3ad804 GIT binary patch literal 741 zcmVWFU8GbZ8()Nlj2>E@cM*00K!#L_t(2&xO)GOcP-M z#_{KU@2-8Xd|W>Ww6vCr4J1a(R{%wJ8C*0WF_Fobn3(EBT-Y=wjxH?5xVZQ+phm2N zF+>Lw;$RR7@|oJBM=4b46}h)}+&Nr=M2+tM<(KCXJmItQ;WS_q%EaKH7`w7(R^fP1 zKj2MVrPLvmNx@TY1Ik1~M1X>b4v|1eV@R$KwmV#*zQnd8Yg^PR&jPc+gg1PK5J_b5 zi-bj~d`K@>+K%||-RO!0hrVrB0{*&Hjb6Le47~K8$PgCg>nWw@p~%;tO2GlM_{J&b zYMN8EQfqqj?uUX=zj8P1%j7V(VB~GCxXoV-jCnhbCjoS(l9D9Z4h5C= z8$u+a^k)c*+Pm5EcfIpy=-K#5>g>c~5mn7sxNqe8^vwLGYp{3!X*i!ncdGT(AL;w*F8V>B>ub2TvVhwk0r;A&9 zV?&)*qE%(s(>}y%6t{u3Ls-jY_e*6 XtgS+{*g7Jw00000NkvXXu0mjf4Mj|p literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_25.png b/textures/tunnelmaker_25.png new file mode 100644 index 0000000000000000000000000000000000000000..499126534d66c7f307146c4f8f080cc365a6165b GIT binary patch literal 1026 zcmV+d1pWJoP)WFU8GbZ8()Nlj2>E@cM*00U-8L_t(I%RP|$OPzHb zfS>PsImdH6H*cA2sW@eJ)G6w+++bwp3XBG$Xl*bWCjHcY8PN>F0wWOzkwsUrR&zL7 z(V(Eq1Y2|2y4Yf4)8(eqmYzA!IUYTi_kBP8QhWY@hlfXHhmS~V{u5kG-)t7IbID5d+WMHxP@*2pU9B&+xUiAyh% zj(m^Ovr$HX>~J4SbFn;H#s7H94&n>3w${{&7gc)iixpEOnM)2O< zina0!N;3d3gImx%rKE1Yfxl)mhMDsKy0;9?T|j#2G*)y1JM*E;q!XnFfG=6U{x+Hwn)Z2(+F zPr!dN%?P3b^~c4EO=1M9NGzViiT=d!U=IcPey0DLr)g^yPws!2E7J)i_SKySzVPd$ z=8vJ=8~2N~@-w!(ioCLR2D-xB6>@mGqlcAfoL9OI(ALsO=c`kkKR1dV{|?Pvh`VSv znkx^@j$c3-K8Q|{lbxi!y^*o;-}z^8nPg;?lc&b0-BL+)xB_lXfN~@0CG6EH%z{Tz zzM6L=HUBAQ;V#mSo942Md^m8J@=f>L$vxC{gg1w8Vgwq6X;;rb$NzRd)KZdh@9Zj4x$_#*$ z0m%T0mFOylt^*KTT?5-j;UHEVWrhF^oHbAyx_iUE?)B+jbblDjRY^@He0H>lx86U= z&L6&}>i7_AR*K(dg1GWqNX_)4l!jT*hLe~ABh(~Dut9J&O4*M0WGOE4THm1H-!1~u z(*C?;GM4Ol;Sa&{km!MWF@p8tEq_UJ+m=MrJ;jKV22UaDX*ZLTSE(p3CJ^)y+PIVZ z8t!HK>MV1!v*0TQu~E7Y<<7@iIgj$!pAc(#6f?J(MC4DhQsaC++($eXxBgVO;3@zeFoiI4%nn_90gDLVaa;#aU)7OpW3NV9Hvj+t07*qoM6N<$f;}nTumAu6 literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_26.png b/textures/tunnelmaker_26.png new file mode 100644 index 0000000000000000000000000000000000000000..215d0089c840cbf46108a18e578a6a71891092c1 GIT binary patch literal 741 zcmVWFU8GbZ8()Nlj2>E@cM*00K!#L_t(2&xO)GOcP-M z#_{KU@2-8Xd|W>Ww6vCr4J1a(R{%wJ8C*0WF_Fobn3(EBT-Y=wjxH?5xVZQ+phm2N zF+>Lw;$RR7@|oJBM=4b46}h)}+&Nr=M2+tM<(KCXJmItQ;WS_q%EaKH7`w7(R^fP1 zKj2MVrPLvmNx@TY1Ik1~M1X>b4v|1eV@R$KwmV#*zQnd8Yg^PR&jPc+gg1PK5J_b5 zi-bj~d`K@>+K%||-RO!0hrVrB0{*&Hjb6Le47~K8$PgCg>nWw@p~%;tO2GlM_{J&b zYMN8EQfqqj?uUX=zj8P1%j7V(VB~GCxXoV-jCnhbCjoS(l9D9Z4h5C= z8$u+a^k)c*+Pm5EcfIpy=-K#5>g>c~5mn7sxNqe8^vwLGYp{3!X*i!ncdGT(AL;w*F8V>B>ub2TvVhwk0r;A&9 zV?&)*qE%(s(>}y%6t{u3Ls-jY_e*6 XtgS+{*g7Jw00000NkvXXu0mjfesW9r literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_27.png b/textures/tunnelmaker_27.png new file mode 100644 index 0000000000000000000000000000000000000000..4d67186711e8d7c9476662af389ab8bfdb7a7680 GIT binary patch literal 1026 zcmV+d1pWJoP)WFU8GbZ8()Nlj2>E@cM*00U-8L_t(I%RP|$OPzHb zfS>PsImdH6H*cA2sW@eJ)G6w+++bwp3XBG$Xl*bWCjHcY8PN>F0wWOzkwsUrR&zL7 z(V(Eq1Y2|2y4Yf4)8(eqmYzA!IUYTi_kBP8QhWY@hlfXHhmS~V{u5kG-)t7IbID5d+WMHxP@*2pU9B&+xUiAyh% zj(m^Ovr$HX>~J4SbFn;H#s7H94&n>3w${{&7gc)iixpEOnM)2O< zina0!N;3d3gImx%rKE1Yfxl)mhMDsKy0;9?T|j#2G*)y1JM*E;q!XnFfG=6U{x+Hwn)Z2(+F zPr!dN%?P3b^~c4EO=1M9NGzViiT=d!U=IcPey0DLr)g^yPws!2E7J)i_SKySzVPd$ z=8vJ=8~2N~@-w!(ioCLR2D-xB6>@mGqlcAfoL9OI(ALsO=c`kkKR1dV{|?Pvh`VSv znkx^@j$c3-K8Q|{lbxi!y^*o;-}z^8nPg;?lc&b0-BL+)xB_lXfN~@0CG6EH%z{Tz zzM6L=HUBAQ;V#mSo942Md^m8J@=f>L$vxC{gg1w8Vgwq6X;;rb$NzRd)KZdh@9Zj4x$_#*$ z0m%T0mFOylt^*KTT?5-j;UHEVWrhF^oHbAyx_iUE?)B+jbblDjRY^@He0H>lx86U= z&L6&}>i7_AR*K(dg1GWqNX_)4l!jT*hLe~ABh(~Dut9J&O4*M0WGOE4THm1H-!1~u z(*C?;GM4Ol;Sa&{km!MWF@p8tEq_UJ+m=MrJ;jKV22UaDX*ZLTSE(p3CJ^)y+PIVZ z8t!HK>MV1!v*0TQu~E7Y<<7@iIgj$!pAc(#6f?J(MC4DhQsaC++($eXxBgVO;3@zeFoiI4%nn_90gDLVaa;#aU)7OpW3NV9Hvj+t07*qoM6N<$f;s@+uK)l5 literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_28.png b/textures/tunnelmaker_28.png new file mode 100644 index 0000000000000000000000000000000000000000..3af604d2830cbf629b28d730feeae8860aa4fefb GIT binary patch literal 741 zcmVWFU8GbZ8()Nlj2>E@cM*00K!#L_t(2&xO)GOcP-M z#_{KU@2-8Xd|W>Ww6vCr4J1a(R{%wJ8C*0WF_Fobn3(EBT-Y=wjxH?5xVZQ+phm2N zF+>Lw;$RR7@|oJBM=4b46}h)}+&Nr=M2+tM<(KCXJmItQ;WS_q%EaKH7`w7(R^fP1 zKj2MVrPLvmNx@TY1Ik1~M1X>b4v|1eV@R$KwmV#*zQnd8Yg^PR&jPc+gg1PK5J_b5 zi-bj~d`K@>+K%||-RO!0hrVrB0{*&Hjb6Le47~K8$PgCg>nWw@p~%;tO2GlM_{J&b zYMN8EQfqqj?uUX=zj8P1%j7V(VB~GCxXoV-jCnhbCjoS(l9D9Z4h5C= z8$u+a^k)c*+Pm5EcfIpy=-K#5>g>c~5mn7sxNqe8^vwLGYp{3!X*i!ncdGT(AL;w*F8V>B>ub2TvVhwk0r;A&9 zV?&)*qE%(s(>}y%6t{u3Ls-jY_e*6 XtgS+{*g7Jw00000NkvXXu0mjfz2Qqp literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_29.png b/textures/tunnelmaker_29.png new file mode 100644 index 0000000000000000000000000000000000000000..9d3c36231d70ea77e3c08c3d048a6e674fe77092 GIT binary patch literal 1026 zcmV+d1pWJoP)WFU8GbZ8()Nlj2>E@cM*00U-8L_t(I%RP|$OPzHb zfS>PsImdH6H*cA2sW@eJ)G6w+++bwp3XBG$Xl*bWCjHcY8PN>F0wWOzkwsUrR&zL7 z(V(Eq1Y2|2y4Yf4)8(eqmYzA!IUYTi_kBP8QhWY@hlfXHhmS~V{u5kG-)t7IbID5d+WMHxP@*2pU9B&+xUiAyh% zj(m^Ovr$HX>~J4SbFn;H#s7H94&n>3w${{&7gc)iixpEOnM)2O< zina0!N;3d3gImx%rKE1Yfxl)mhMDsKy0;9?T|j#2G*)y1JM*E;q!XnFfG=6U{x+Hwn)Z2(+F zPr!dN%?P3b^~c4EO=1M9NGzViiT=d!U=IcPey0DLr)g^yPws!2E7J)i_SKySzVPd$ z=8vJ=8~2N~@-w!(ioCLR2D-xB6>@mGqlcAfoL9OI(ALsO=c`kkKR1dV{|?Pvh`VSv znkx^@j$c3-K8Q|{lbxi!y^*o;-}z^8nPg;?lc&b0-BL+)xB_lXfN~@0CG6EH%z{Tz zzM6L=HUBAQ;V#mSo942Md^m8J@=f>L$vxC{gg1w8Vgwq6X;;rb$NzRd)KZdh@9Zj4x$_#*$ z0m%T0mFOylt^*KTT?5-j;UHEVWrhF^oHbAyx_iUE?)B+jbblDjRY^@He0H>lx86U= z&L6&}>i7_AR*K(dg1GWqNX_)4l!jT*hLe~ABh(~Dut9J&O4*M0WGOE4THm1H-!1~u z(*C?;GM4Ol;Sa&{km!MWF@p8tEq_UJ+m=MrJ;jKV22UaDX*ZLTSE(p3CJ^)y+PIVZ z8t!HK>MV1!v*0TQu~E7Y<<7@iIgj$!pAc(#6f?J(MC4DhQsaC++($eXxBgVO;3@zeFoiI4%nn_90gDLVaa;#aU)7OpW3NV9Hvj+t07*qoM6N<$f>DUyhX4Qo literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_30.png b/textures/tunnelmaker_30.png new file mode 100644 index 0000000000000000000000000000000000000000..d46728bb031eb593f8faafc435afa912f942a0a1 GIT binary patch literal 741 zcmVWFU8GbZ8()Nlj2>E@cM*00K!#L_t(2&xO)GOcP-M z#_{KU@2-8Xd|W>Ww6vCr4J1a(R{%wJ8C*0WF_Fobn3(EBT-Y=wjxH?5xVZQ+phm2N zF+>Lw;$RR7@|oJBM=4b46}h)}+&Nr=M2+tM<(KCXJmItQ;WS_q%EaKH7`w7(R^fP1 zKj2MVrPLvmNx@TY1Ik1~M1X>b4v|1eV@R$KwmV#*zQnd8Yg^PR&jPc+gg1PK5J_b5 zi-bj~d`K@>+K%||-RO!0hrVrB0{*&Hjb6Le47~K8$PgCg>nWw@p~%;tO2GlM_{J&b zYMN8EQfqqj?uUX=zj8P1%j7V(VB~GCxXoV-jCnhbCjoS(l9D9Z4h5C= z8$u+a^k)c*+Pm5EcfIpy=-K#5>g>c~5mn7sxNqe8^vwLGYp{3!X*i!ncdGT(AL;w*F8V>B>ub2TvVhwk0r;A&9 zV?&)*qE%(s(>}y%6t{u3Ls-jY_e*6 XtgS+{*g7Jw00000NkvXXu0mjfnw?9Z literal 0 HcmV?d00001 diff --git a/textures/tunnelmaker_31.png b/textures/tunnelmaker_31.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7597120836e97a57807d8ac09864a785ce3fa8 GIT binary patch literal 1026 zcmV+d1pWJoP)WFU8GbZ8()Nlj2>E@cM*00U-8L_t(I%RP|$OPzHb zfS>PsImdH6H*cA2sW@eJ)G6w+++bwp3XBG$Xl*bWCjHcY8PN>F0wWOzkwsUrR&zL7 z(V(Eq1Y2|2y4Yf4)8(eqmYzA!IUYTi_kBP8QhWY@hlfXHhmS~V{u5kG-)t7IbID5d+WMHxP@*2pU9B&+xUiAyh% zj(m^Ovr$HX>~J4SbFn;H#s7H94&n>3w${{&7gc)iixpEOnM)2O< zina0!N;3d3gImx%rKE1Yfxl)mhMDsKy0;9?T|j#2G*)y1JM*E;q!XnFfG=6U{x+Hwn)Z2(+F zPr!dN%?P3b^~c4EO=1M9NGzViiT=d!U=IcPey0DLr)g^yPws!2E7J)i_SKySzVPd$ z=8vJ=8~2N~@-w!(ioCLR2D-xB6>@mGqlcAfoL9OI(ALsO=c`kkKR1dV{|?Pvh`VSv znkx^@j$c3-K8Q|{lbxi!y^*o;-}z^8nPg;?lc&b0-BL+)xB_lXfN~@0CG6EH%z{Tz zzM6L=HUBAQ;V#mSo942Md^m8J@=f>L$vxC{gg1w8Vgwq6X;;rb$NzRd)KZdh@9Zj4x$_#*$ z0m%T0mFOylt^*KTT?5-j;UHEVWrhF^oHbAyx_iUE?)B+jbblDjRY^@He0H>lx86U= z&L6&}>i7_AR*K(dg1GWqNX_)4l!jT*hLe~ABh(~Dut9J&O4*M0WGOE4THm1H-!1~u z(*C?;GM4Ol;Sa&{km!MWF@p8tEq_UJ+m=MrJ;jKV22UaDX*ZLTSE(p3CJ^)y+PIVZ z8t!HK>MV1!v*0TQu~E7Y<<7@iIgj$!pAc(#6f?J(MC4DhQsaC++($eXxBgVO;3@zeFoiI4%nn_90gDLVaa;#aU)7OpW3NV9Hvj+t07*qoM6N<$f`b9y2><{9 literal 0 HcmV?d00001