From e23f87d20c59c1a9fa0fbb3e887a87072f57d5e8 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Thu, 21 Feb 2013 22:01:49 +0100 Subject: [PATCH] Reworked power tools, new drills --- technic/battery_box.lua | 196 ++++----- technic/battery_box_mv.lua | 108 ++--- technic/cans.lua | 56 +-- technic/chainsaw.lua | 12 +- technic/flashlight.lua | 43 +- technic/helpers.lua | 10 + technic/init.lua | 4 +- technic/mining_drill.lua | 390 ++++++++++++++++-- technic/mining_laser_mk1.lua | 19 +- technic/sonic_screwdriver.lua | 112 ++--- technic/textures/technic_mining_drill_mk2.png | Bin 0 -> 1901 bytes technic/textures/technic_mining_drill_mk3.png | Bin 0 -> 1900 bytes technic/textures/technic_tool_mode1.png | Bin 0 -> 361 bytes technic/textures/technic_tool_mode2.png | Bin 0 -> 571 bytes technic/textures/technic_tool_mode3.png | Bin 0 -> 622 bytes technic/textures/technic_tool_mode4.png | Bin 0 -> 455 bytes technic/textures/technic_tool_mode5.png | Bin 0 -> 535 bytes technic/textures/technic_tool_mode6.png | Bin 0 -> 633 bytes technic/textures/technic_tool_mode7.png | Bin 0 -> 481 bytes technic/textures/technic_tool_mode8.png | Bin 0 -> 692 bytes technic/textures/technic_tool_mode9.png | Bin 0 -> 623 bytes 21 files changed, 648 insertions(+), 302 deletions(-) create mode 100644 technic/helpers.lua create mode 100644 technic/textures/technic_mining_drill_mk2.png create mode 100644 technic/textures/technic_mining_drill_mk3.png create mode 100644 technic/textures/technic_tool_mode1.png create mode 100644 technic/textures/technic_tool_mode2.png create mode 100644 technic/textures/technic_tool_mode3.png create mode 100644 technic/textures/technic_tool_mode4.png create mode 100644 technic/textures/technic_tool_mode5.png create mode 100644 technic/textures/technic_tool_mode6.png create mode 100644 technic/textures/technic_tool_mode7.png create mode 100644 technic/textures/technic_tool_mode8.png create mode 100644 technic/textures/technic_tool_mode9.png diff --git a/technic/battery_box.lua b/technic/battery_box.lua index d36bca1..0e08d74 100644 --- a/technic/battery_box.lua +++ b/technic/battery_box.lua @@ -18,19 +18,12 @@ power_tools[registered_power_tools_count].tool_name=string1 power_tools[registered_power_tools_count].max_charge=max_charge end -register_power_tool ("technic:mining_drill",60000) -register_power_tool ("technic:chainsaw",30000) -register_power_tool ("technic:laser_mk1",40000) + register_power_tool ("technic:battery",10000) -register_power_tool ("technic:sonic_screwdriver",15000) -register_power_tool ("technic:flashlight",30000) register_power_tool ("technic:red_energy_crystal",100000) register_power_tool ("technic:green_energy_crystal",250000) register_power_tool ("technic:blue_energy_crystal",500000) -minetest.register_alias("battery", "technic:battery") -minetest.register_alias("battery_box", "technic:battery_box") - minetest.register_craft({ output = 'technic:battery 1', recipe = { @@ -143,7 +136,6 @@ minetest.register_node("technic:battery_box"..i, { }) end - LV_nodes_visited = {} function get_RE_item_load (load1,max_load) @@ -163,13 +155,12 @@ end function set_RE_wear (item_stack,load1,max_load) local temp=65536-math.floor(load1/max_load*65535) item_stack["wear"]=tostring(temp) -return item_stack +return item_stack end minetest.register_abm({ nodenames = {"technic:battery_box","technic:battery_box1","technic:battery_box2","technic:battery_box3","technic:battery_box4", - "technic:battery_box5","technic:battery_box6","technic:battery_box7","technic:battery_box8" - }, + "technic:battery_box5","technic:battery_box6","technic:battery_box7","technic:battery_box8"}, interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) @@ -185,51 +176,73 @@ minetest.register_abm({ meta:set_float("last_side_shown",i) end ---loading registered power tools +--loading registered power tools local inv = meta:get_inventory() if inv:is_empty("src")==false then - srcstack = inv:get_stack("src", 1) - src_item=srcstack:to_table() - item_meta=srcstack:get_metadata() - if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item + local srcstack = inv:get_stack("src", 1) + local src_item=srcstack:to_table() + local src_meta=get_item_meta(src_item["metadata"]) - local item_max_charge = nil - local counter=registered_power_tools_count - for i=1, counter,1 do - if power_tools[i].tool_name==src_item["name"] then - item_max_charge=power_tools[i].max_charge + local item_max_charge=nil + for i=1,registered_power_tools_count,1 do + if power_tools[i].tool_name==src_item["name"] then + src_meta=get_item_meta(src_item["metadata"]) + if src_meta==nil then + src_meta={} + src_meta["technic_power_tool"]=true + src_meta["charge"]=0 + else + if src_meta["technic_power_tool"]==nil then + src_meta["technic_power_tool"]=true + src_meta["charge"]=0 + end + end + item_max_charge=power_tools[i].max_charge + end end - end - if item_max_charge then - load1=tonumber((src_item["metadata"])) - load_step=1000 - if load10 then - if charge-load_step<0 then load_step=charge end - if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end - load1=load1+load_step - charge=charge-load_step - set_RE_wear(src_item,load1,item_max_charge) - src_item["metadata"]=tostring(load1) - inv:set_stack("src", 1, src_item) - end - meta:set_int("battery_charge",charge) - end + + if item_max_charge then + load1=src_meta["charge"] + load_step=1000 + if load10 then + if charge-load_step<0 then load_step=charge end + if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end + load1=load1+load_step + charge=charge-load_step + set_RE_wear(src_item,load1,item_max_charge) + src_meta["charge"]=load1 + src_item["metadata"]=set_item_meta(src_meta) + inv:set_stack("src", 1, src_item) + end + meta:set_int("battery_charge",charge) + end end -- dischargin registered power tools if inv:is_empty("dst") == false then srcstack = inv:get_stack("dst", 1) src_item=srcstack:to_table() - local item_max_charge = nil - local counter=registered_power_tools_count-1 - for i=1, counter,1 do - if power_tools[i].tool_name==src_item["name"] then - item_max_charge=power_tools[i].max_charge - end + local src_meta=get_item_meta(src_item["metadata"]) + local item_max_charge=nil + for i=1,registered_power_tools_count,1 do + if power_tools[i].tool_name==src_item["name"] then + src_meta=get_item_meta(src_item["metadata"]) + if src_meta==nil then + src_meta={} + src_meta["technic_power_tool"]=true + src_meta["charge"]=0 + else + if src_meta["technic_power_tool"]==nil then + src_meta["technic_power_tool"]=true + src_meta["charge"]=0 + end + end + item_max_charge=power_tools[i].max_charge + end end + if item_max_charge then - if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal - local load1=tonumber((src_item["metadata"])) + local load1=src_meta["charge"] load_step=1000 if load1>0 and chargemax_charge then load_step=max_charge-charge end @@ -237,7 +250,8 @@ minetest.register_abm({ load1=load1-load_step charge=charge+load_step set_RE_wear(src_item,load1,item_max_charge) - src_item["metadata"]=tostring(load1) + src_meta["charge"]=load1 + src_item["metadata"]=set_item_meta(src_meta) inv:set_stack("dst", 1, src_item) end end @@ -247,18 +261,10 @@ minetest.register_abm({ local load = math.floor(charge/60000 * 100) meta:set_string("formspec", - "invsize[8,9;]".. + battery_box_formspec.. "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:".. - (load)..":technic_power_meter_fg.png]".. - "list[current_name;src;3,1;1,1;]".. - "image[4,1;1,1;technic_battery_reload.png]".. - "list[current_name;dst;5,1;1,1;]".. - "label[0,0;Battery box]".. - "label[3,0;Charge]".. - "label[5,0;Discharge]".. - "label[1,3;Power level]".. - "list[current_player;main;0,5;8,4;]") - + (load)..":technic_power_meter_fg.png]") + local pos1={} pos1.y=pos.y-1 @@ -269,15 +275,15 @@ minetest.register_abm({ meta1 = minetest.env:get_meta(pos1) if meta1:get_float("cablelike")~=1 then return end - local LV_nodes = {} - local PR_nodes = {} - local RE_nodes = {} + local LV_nodes = {} + local PR_nodes = {} + local RE_nodes = {} - LV_nodes[1]={} - LV_nodes[1].x=pos1.x - LV_nodes[1].y=pos1.y - LV_nodes[1].z=pos1.z - LV_nodes[1].visited=false + LV_nodes[1]={} + LV_nodes[1].x=pos1.x + LV_nodes[1].y=pos1.y + LV_nodes[1].z=pos1.z + LV_nodes[1].visited=false table_index=1 @@ -344,45 +350,45 @@ end }) function add_new_cable_node (LV_nodes,pos1) -local i=1 + local i=1 repeat if LV_nodes[i]==nil then break end if pos1.x==LV_nodes[i].x and pos1.y==LV_nodes[i].y and pos1.z==LV_nodes[i].z then return false end i=i+1 until false -LV_nodes[i]={} -LV_nodes[i].x=pos1.x -LV_nodes[i].y=pos1.y -LV_nodes[i].z=pos1.z -LV_nodes[i].visited=false -return true + LV_nodes[i]={} + LV_nodes[i].x=pos1.x + LV_nodes[i].y=pos1.y + LV_nodes[i].z=pos1.z + LV_nodes[i].visited=false + return true end function check_LV_node (PR_nodes,RE_nodes,LV_nodes,i) - local pos1={} - pos1.x=LV_nodes[i].x - pos1.y=LV_nodes[i].y - pos1.z=LV_nodes[i].z - LV_nodes[i].visited=true - new_node_added=false - - pos1.x=pos1.x+1 - check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) - pos1.x=pos1.x-2 - check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) - pos1.x=pos1.x+1 - - pos1.y=pos1.y+1 - check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) - pos1.y=pos1.y-2 - check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) - pos1.y=pos1.y+1 + local pos1={} + pos1.x=LV_nodes[i].x + pos1.y=LV_nodes[i].y + pos1.z=LV_nodes[i].z + LV_nodes[i].visited=true + new_node_added=false - pos1.z=pos1.z+1 - check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) - pos1.z=pos1.z-2 - check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) - pos1.z=pos1.z+1 + pos1.x=pos1.x+1 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.x=pos1.x-2 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.x=pos1.x+1 + + pos1.y=pos1.y+1 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.y=pos1.y-2 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.y=pos1.y+1 + + pos1.z=pos1.z+1 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.z=pos1.z-2 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.z=pos1.z+1 return new_node_added end diff --git a/technic/battery_box_mv.lua b/technic/battery_box_mv.lua index b8f4e5e..8fc6dc7 100644 --- a/technic/battery_box_mv.lua +++ b/technic/battery_box_mv.lua @@ -85,7 +85,7 @@ minetest.register_node("technic:mv_battery_box"..i, { battery_charge = 0 max_charge = 300000 last_side_shown=0 - end, + end, can_dig = function(pos,player) local meta = minetest.env:get_meta(pos); local inv = meta:get_inventory() @@ -122,51 +122,73 @@ minetest.register_abm({ meta:set_float("last_side_shown",i) end ---loading registered power tools +--loading registered power tools local inv = meta:get_inventory() if inv:is_empty("src")==false then - srcstack = inv:get_stack("src", 1) - src_item=srcstack:to_table() - item_meta=srcstack:get_metadata() - if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item + local srcstack = inv:get_stack("src", 1) + local src_item=srcstack:to_table() + local src_meta=get_item_meta(src_item["metadata"]) - local item_max_charge = nil - local counter=registered_power_tools_count - for i=1, counter,1 do - if power_tools[i].tool_name==src_item["name"] then - item_max_charge=power_tools[i].max_charge + local item_max_charge=nil + for i=1,registered_power_tools_count,1 do + if power_tools[i].tool_name==src_item["name"] then + src_meta=get_item_meta(src_item["metadata"]) + if src_meta==nil then + src_meta={} + src_meta["technic_power_tool"]=true + src_meta["charge"]=0 + else + if src_meta["technic_power_tool"]==nil then + src_meta["technic_power_tool"]=true + src_meta["charge"]=0 + end + end + item_max_charge=power_tools[i].max_charge + end end - end - if item_max_charge then - load1=tonumber((src_item["metadata"])) - load_step=4000 - if load10 then - if charge-load_step<0 then load_step=charge end - if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end - load1=load1+load_step - charge=charge-load_step - set_RE_wear(src_item,load1,item_max_charge) - src_item["metadata"]=tostring(load1) - inv:set_stack("src", 1, src_item) - end - meta:set_int("battery_charge",charge) - end + + if item_max_charge then + load1=src_meta["charge"] + load_step=4000 + if load10 then + if charge-load_step<0 then load_step=charge end + if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end + load1=load1+load_step + charge=charge-load_step + set_RE_wear(src_item,load1,item_max_charge) + src_meta["charge"]=load1 + src_item["metadata"]=set_item_meta(src_meta) + inv:set_stack("src", 1, src_item) + end + meta:set_int("battery_charge",charge) + end end -- dischargin registered power tools if inv:is_empty("dst") == false then srcstack = inv:get_stack("dst", 1) src_item=srcstack:to_table() - local item_max_charge = nil - local counter=registered_power_tools_count-1 - for i=1, counter,1 do - if power_tools[i].tool_name==src_item["name"] then - item_max_charge=power_tools[i].max_charge - end + local src_meta=get_item_meta(src_item["metadata"]) + local item_max_charge=nil + for i=1,registered_power_tools_count,1 do + if power_tools[i].tool_name==src_item["name"] then + src_meta=get_item_meta(src_item["metadata"]) + if src_meta==nil then + src_meta={} + src_meta["technic_power_tool"]=true + src_meta["charge"]=0 + else + if src_meta["technic_power_tool"]==nil then + src_meta["technic_power_tool"]=true + src_meta["charge"]=0 + end + end + item_max_charge=power_tools[i].max_charge + end end + if item_max_charge then - if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal - local load1=tonumber((src_item["metadata"])) + local load1=src_meta["charge"] load_step=4000 if load1>0 and chargemax_charge then load_step=max_charge-charge end @@ -174,7 +196,8 @@ minetest.register_abm({ load1=load1-load_step charge=charge+load_step set_RE_wear(src_item,load1,item_max_charge) - src_item["metadata"]=tostring(load1) + src_meta["charge"]=load1 + src_item["metadata"]=set_item_meta(src_meta) inv:set_stack("dst", 1, src_item) end end @@ -182,19 +205,12 @@ minetest.register_abm({ meta:set_int("battery_charge",charge) - local load = math.floor(charge/300000 * 100) + local load = math.floor((charge/300000) * 100) meta:set_string("formspec", - "invsize[8,9;]".. + mv_battery_box_formspec.. "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:".. - (load)..":technic_power_meter_fg.png]".. - "list[current_name;src;3,1;1,1;]".. - "image[4,1;1,1;technic_battery_reload.png]".. - "list[current_name;dst;5,1;1,1;]".. - "label[0,0;MV Battery box]".. - "label[3,0;Charge]".. - "label[5,0;Discharge]".. - "label[1,3;Power level]".. - "list[current_player;main;0,5;8,4;]") + (load)..":technic_power_meter_fg.png]" + ) local pos1={} diff --git a/technic/cans.lua b/technic/cans.lua index d50a621..78ff413 100644 --- a/technic/cans.lua +++ b/technic/cans.lua @@ -77,19 +77,20 @@ minetest.register_tool("technic:lava_can", { stack_max = 1, liquids_pointable = true, on_use = function(itemstack, user, pointed_thing) - + if pointed_thing.type ~= "node" then return end + n = minetest.env:get_node(pointed_thing.under) item=itemstack:to_table() local load=nil if item["metadata"]=="" then load=0 else load=tonumber(item["metadata"]) end - if n.name == "default:water_source" then + if n.name == "default:lava_source" then if load+1<17 then minetest.env:add_node(pointed_thing.under, {name="air"}) - load=load+1; + load=load+1; item["metadata"]=tostring(load) - set_RE_wear(item,load,water_can_max_load) + set_RE_wear(item,load,lava_can_max_load) itemstack:replace(item) end return itemstack @@ -101,7 +102,7 @@ minetest.register_tool("technic:lava_can", { minetest.env:add_node(pointed_thing.under, {name="default:lava_source"}) load=load-1; item["metadata"]=tostring(load) - set_RE_wear(item,load,water_can_max_load) + set_RE_wear(item,load,lava_can_max_load) itemstack:replace(item) return itemstack end @@ -111,52 +112,9 @@ minetest.register_tool("technic:lava_can", { minetest.env:add_node(pointed_thing.above, {name="default:lava_source"}) load=load-1; item["metadata"]=tostring(load) - set_RE_wear(item,load,water_can_max_load) + set_RE_wear(item,load,lava_can_max_load) itemstack:replace(item) return itemstack end - - if pointed_thing.type ~= "node" then - return end - - n = minetest.env:get_node(pointed_thing.under) - if n.name == "default:lava_source" then - item=itemstack:to_table() - local load=tonumber((item["wear"])) - if load==0 then load =65535 end - load=get_RE_item_load(load,lava_can_max_load) - if load+1<9 then - minetest.env:add_node(pointed_thing.under, {name="air"}) - load=load+1; - load=set_RE_item_load(load,lava_can_max_load) - item["wear"]=tostring(load) - itemstack:replace(item) - end - return itemstack - end - item=itemstack:to_table() - load=tonumber((item["wear"])) - if load==0 then load =65535 end - load=get_RE_item_load(load,lava_can_max_load) - if load==0 then return end - - if n.name == "default:lava_flowing" then - minetest.env:add_node(pointed_thing.under, {name="default:lava_source"}) - load=load-1; - load=set_RE_item_load(load,lava_can_max_load) - item["wear"]=tostring(load) - itemstack:replace(item) - return itemstack - end - - n = minetest.env:get_node(pointed_thing.above) - if n.name == "air" then - minetest.env:add_node(pointed_thing.above, {name="default:lava_source"}) - load=load-1; - load=set_RE_item_load(load,lava_can_max_load) - item["wear"]=tostring(load) - itemstack:replace(item) - return itemstack - end end, }) diff --git a/technic/chainsaw.lua b/technic/chainsaw.lua index 9970935..eb12732 100644 --- a/technic/chainsaw.lua +++ b/technic/chainsaw.lua @@ -1,4 +1,5 @@ chainsaw_max_charge=30000 +register_power_tool ("technic:chainsaw",chainsaw_max_charge) minetest.register_tool("technic:chainsaw", { description = "Chainsaw", @@ -7,14 +8,17 @@ minetest.register_tool("technic:chainsaw", { on_use = function(itemstack, user, pointed_thing) if pointed_thing.type=="node" then item=itemstack:to_table() - if item["metadata"]=="" or item["metadata"]=="0" then return end --tool not charged - charge=tonumber(item["metadata"]) + local meta=get_item_meta(item["metadata"]) + if meta==nil then return false end --tool not charghed + if meta["charge"]==nil then return false end + charge=meta["charge"] charge_to_take=600; if charge-charge_to_take>0 then charge_to_take=chainsaw_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,charge_to_take) charge=charge-charge_to_take; set_RE_wear(item,charge,chainsaw_max_charge) - item["metadata"]=tostring(charge) + meta["charge"]=charge + item["metadata"]=set_item_meta(meta) itemstack:replace(item) return itemstack end @@ -56,4 +60,4 @@ function chainsaw_dig_it (pos, player,charge_to_take) end return charge_to_take -end \ No newline at end of file +end diff --git a/technic/flashlight.lua b/technic/flashlight.lua index e773cfc..f6e4dc2 100644 --- a/technic/flashlight.lua +++ b/technic/flashlight.lua @@ -1,23 +1,25 @@ -- original code comes from walkin_light mod by Echo http://minetest.net/forum/viewtopic.php?id=2621 flashlight_max_charge=30000 +register_power_tool ("technic:flashlight",flashlight_max_charge) - minetest.register_tool("technic:flashlight", { - description = "Flashlight", - inventory_image = "technic_flashlight.png", +minetest.register_tool("technic:flashlight", { + description = "Flashlight", + inventory_image = "technic_flashlight.png", stack_max = 1, - on_use = function(itemstack, user, pointed_thing) - end, - }) - - minetest.register_craft({ - output = "technic:flashlight", - recipe = { - {"technic:rubber","glass","technic:rubber"}, - {"technic:stainless_steel_ingot","technic:battery","technic:stainless_steel_ingot"}, - {"","technic:battery",""} - } - }) + on_use = function(itemstack, user, pointed_thing) + end, + }) + +minetest.register_craft({ +output = "technic:flashlight", +recipe = { + {"technic:rubber","glass","technic:rubber"}, + {"technic:stainless_steel_ingot","technic:battery","technic:stainless_steel_ingot"}, + {"","technic:battery",""} + } +}) + local players = {} local player_positions = {} local last_wielded = {} @@ -152,13 +154,16 @@ local hotbar=inv:get_list("main") for i=1,8,1 do if hotbar[i]:get_name() == "technic:flashlight" then - item=hotbar[i]:to_table() - if item["metadata"]=="" or item["metadata"]=="0" then return false end --flashlight not charghed - charge=tonumber(item["metadata"]) + local item=hotbar[i]:to_table() + local meta=get_item_meta(item["metadata"]) + if meta==nil then return false end --flashlight not charghed + if meta["charge"]==nil then return false end + charge=meta["charge"] if charge-2>0 then charge =charge-2; set_RE_wear(item,charge,flashlight_max_charge) - item["metadata"]=tostring(charge) + meta["charge"]=charge + item["metadata"]=set_item_meta(meta) hotbar[i]:replace(item) inv:set_stack("main",i,hotbar[i]) return true diff --git a/technic/helpers.lua b/technic/helpers.lua new file mode 100644 index 0000000..3fee5bb --- /dev/null +++ b/technic/helpers.lua @@ -0,0 +1,10 @@ +function get_item_meta (string) + if string.find(string, "return {") then + return minetest.deserialize(string) + else return nil + end +end + +function set_item_meta (table) + return minetest.serialize(table) +end diff --git a/technic/init.lua b/technic/init.lua index 0706b0f..8ffa9c7 100644 --- a/technic/init.lua +++ b/technic/init.lua @@ -1,9 +1,11 @@ --- Minetest 0.4.4 : technic +-- Minetest 0.4.4d1 : technic modpath=minetest.get_modpath("technic") --Read technic config file dofile(modpath.."/config.lua") +--helper functions +dofile(modpath.."/helpers.lua") -- world gen dofile(modpath.."/ores.lua") diff --git a/technic/mining_drill.lua b/technic/mining_drill.lua index 4ccfc95..ecaab65 100644 --- a/technic/mining_drill.lua +++ b/technic/mining_drill.lua @@ -1,25 +1,9 @@ mining_drill_max_charge=60000 - -minetest.register_tool("technic:mining_drill", { - description = "Mining Drill", - inventory_image = "technic_mining_drill.png", - stack_max = 1, - on_use = function(itemstack, user, pointed_thing) - if pointed_thing.type=="node" then - item=itemstack:to_table() - if item["metadata"]=="" or item["metadata"]=="0" then return end --tool not charged - charge=tonumber(item["metadata"]) - if charge-200>0 then - drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user) - charge =charge-200; - item["metadata"]=tostring(charge) - set_RE_wear(item,charge,mining_drill_max_charge) - itemstack:replace(item) - end - return itemstack - end - end, -}) +mining_drill_mk2_max_charge=240000 +mining_drill_mk3_max_charge=960000 +mining_drill_power_usage=200 +mining_drill_mk2_power_usage=600 +mining_drill_mk3_power_usage=1800 minetest.register_craft({ output = 'technic:mining_drill', @@ -29,21 +13,373 @@ minetest.register_craft({ {'', 'technic:red_energy_crystal', 'moreores:copper_ingot'}, } }) +minetest.register_craft({ + output = 'technic:mining_drill_mk2', + recipe = { + {'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'}, + {'technic:stainless_steel_ingot', 'technic:mining_drill', 'technic:stainless_steel_ingot'}, + {'', 'technic:green_energy_crystal', ''}, + } +}) +minetest.register_craft({ + output = 'technic:mining_drill_mk3', + recipe = { + {'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'}, + {'technic:stainless_steel_ingot', 'technic:mining_drill_mk2', 'technic:stainless_steel_ingot'}, + {'', 'technic:blue_energy_crystal', ''}, + } +}) +function drill_dig_it (pos, player,drill_type,mode) + + local charge + if mode==1 then + drill_dig_it0 (pos,player) + end + + if mode==2 then -- 3 deep + dir=drill_dig_it1(player) + if dir==0 then -- x+ + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + end + if dir==1 then -- x- + drill_dig_it0 (pos,player) + pos.x=pos.x-1 + drill_dig_it0 (pos,player) + pos.x=pos.x-1 + drill_dig_it0 (pos,player) + end + if dir==2 then -- z+ + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + end + if dir==3 then -- z- + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + end + end + + if mode==3 then -- 3 wide + dir=drill_dig_it1(player) + if dir==0 or dir==1 then -- x + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z-2 + drill_dig_it0 (pos,player) + end + if dir==2 or dir==3 then -- z + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) + end + end + + if mode==4 then -- 3 tall, selected in the middle + drill_dig_it0 (pos,player) + pos.y=pos.y+1 + drill_dig_it0 (pos,player) + pos.y=pos.y-2 + drill_dig_it0 (pos,player) + end + if mode==5 then -- 3 x 3 + local dir=player:get_look_dir() + if math.abs(dir.y)<0.5 then + dir=drill_dig_it1(player) + if dir==0 or dir==1 then -- x + drill_dig_it2(pos,player) + end + if dir==2 or dir==3 then -- z + drill_dig_it3(pos,player) + end + else + drill_dig_it4(pos,player) + end + end + + if drill_type==1 then charge=mining_drill_power_usage end + if drill_type==2 then + if mode==1 then charge=mining_drill_mk2_power_usage end + if (mode==2 or mode==3 or mode==4) then charge=mining_drill_mk2_power_usage*3 end + end + if drill_type==3 then + if mode==1 then charge=mining_drill_power_usage end + if (mode==2 or mode==3 or mode==4) then charge=mining_drill_mk2_power_usage*6 end + if mode==5 then charge=mining_drill_mk2_power_usage*9 end + end + minetest.sound_play("mining_drill", {pos = pos, gain = 1.0, max_hear_distance = 10,}) + return charge +end - - -function drill_dig_it (pos, player) +function drill_dig_it0 (pos,player) local node=minetest.env:get_node(pos) if node.name == "air" or node.name == "ignore" then return end if node.name == "default:lava_source" then return end if node.name == "default:lava_flowing" then return end if node.name == "default:water_source" then minetest.env:remove_node(pos) return end if node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end - - minetest.sound_play("mining_drill", {pos = pos, gain = 1.0, max_hear_distance = 10,}) minetest.node_dig(pos,node,player) +end -end \ No newline at end of file +function drill_dig_it1 (player) + local dir=player:get_look_dir() + if math.abs(dir.x)>math.abs(dir.z) then + if dir.x>0 then return 0 end + return 1 + end + if dir.z>0 then return 2 end + return 3 +end + +function drill_dig_it2 (pos,player) + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z-2 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + pos.y=pos.y+1 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z-2 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + pos.y=pos.y-2 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z-2 + drill_dig_it0 (pos,player) +end +function drill_dig_it3 (pos,player) + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + pos.y=pos.y+1 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + pos.y=pos.y-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) +end + +function drill_dig_it4 (pos,player) + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + pos.z=pos.z-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) +end + +register_power_tool ("technic:mining_drill",mining_drill_max_charge) +minetest.register_tool("technic:mining_drill", { + description = "Mining Drill Mk1", + inventory_image = "technic_mining_drill.png", + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type=="node" then + item=itemstack:to_table() + local meta=get_item_meta(item["metadata"]) + if meta==nil then return false end --tool not charghed + if meta["charge"]==nil then return false end + charge=meta["charge"] + if charge-mining_drill_power_usage>0 then + charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,1,1) + charge =charge-mining_drill_power_usage; + meta["charge"]=charge + item["metadata"]=set_item_meta(meta) + set_RE_wear(item,charge,mining_drill_max_charge) + itemstack:replace(item) + end + return itemstack + end + end, +}) + +minetest.register_tool("technic:mining_drill_mk2", { + description = "Mining Drill Mk2", + inventory_image = "technic_mining_drill_mk2.png", + on_use = function(itemstack, user, pointed_thing) + mining_drill_mk2_handler(itemstack,user,pointed_thing) + return itemstack + end, +}) +register_power_tool ("technic:mining_drill_mk2",mining_drill_mk2_max_charge) + +for i=1,4,1 do +register_power_tool ("technic:mining_drill_mk2_"..i,mining_drill_mk2_max_charge) +minetest.register_tool("technic:mining_drill_mk2_"..i, { + description = "Mining Drill Mk2 in Mode "..i, + inventory_image = "technic_mining_drill_mk2.png^technic_tool_mode"..i..".png", + wield_image = "technic_mining_drill_mk2.png", + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + mining_drill_mk2_handler(itemstack,user,pointed_thing) + return itemstack + end, +}) +end + +minetest.register_tool("technic:mining_drill_mk3", { + description = "Mining Drill Mk3", + inventory_image = "technic_mining_drill_mk3.png", + on_use = function(itemstack, user, pointed_thing) + mining_drill_mk3_handler(itemstack,user,pointed_thing) + return itemstack + end, +}) +register_power_tool ("technic:mining_drill_mk3",mining_drill_mk3_max_charge) + +for i=1,5,1 do +register_power_tool ("technic:mining_drill_mk3_"..i,mining_drill_mk3_max_charge) +minetest.register_tool("technic:mining_drill_mk3_"..i, { + description = "Mining Drill Mk3 in Mode "..i, + inventory_image = "technic_mining_drill_mk3.png^technic_tool_mode"..i..".png", + wield_image = "technic_mining_drill_mk3.png", + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + mining_drill_mk3_handler(itemstack,user,pointed_thing) + return itemstack + end, +}) +end + +function mining_drill_mk2_handler (itemstack,user,pointed_thing) + local keys=user:get_player_control() + local player_name=user:get_player_name() + local item=itemstack:to_table() + meta=get_item_meta(item["metadata"]) + if meta==nil or keys["sneak"]==true then return mining_drill_mk2_setmode(user,itemstack) end + if meta["mode"]==nil then return mining_drill_mk2_setmode(user,itemstack) end + if pointed_thing.type~="node" then return end + if meta["charge"]==nil then return false end + charge=meta["charge"] + if charge-mining_drill_power_usage>0 then + local charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,2,meta["mode"]) + charge=charge-charge_to_take; + if charge<0 then charge=0 end + meta["charge"]=charge + item["metadata"]=set_item_meta(meta) + set_RE_wear(item,charge,mining_drill_mk2_max_charge) + itemstack:replace(item) + end + return itemstack +end + +function mining_drill_mk3_handler (itemstack,user,pointed_thing) + local keys=user:get_player_control() + local player_name=user:get_player_name() + local item=itemstack:to_table() + meta=get_item_meta(item["metadata"]) + if meta==nil or keys["sneak"]==true then return mining_drill_mk3_setmode(user,itemstack) end + if meta["mode"]==nil then return mining_drill_mk3_setmode(user,itemstack) end + if pointed_thing.type~="node" then return end + if meta["charge"]==nil then return false end + charge=meta["charge"] + if charge-mining_drill_power_usage>0 then + print(dump(meta)) + local charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,3,meta["mode"]) + charge=charge-charge_to_take; + if charge<0 then charge=0 end + meta["charge"]=charge + item["metadata"]=set_item_meta(meta) + set_RE_wear(item,charge,mining_drill_mk3_max_charge) + itemstack:replace(item) + end + return itemstack +end + +mining_drill_mode_text={ +{"Single node."}, +{"3 nodes deep."}, +{"3 modes wide."}, +{"3 modes tall."}, +{"3x3 nodes."}, +} + +function mining_drill_mk2_setmode(user,itemstack) + local player_name=user:get_player_name() + local item=itemstack:to_table() + local meta=get_item_meta(item["metadata"]) + if meta==nil then + meta={} + mode=0 + end + if meta["mode"]==nil then + minetest.chat_send_player(player_name,"Hold shift and use to change Mining Drill Mk2 modes.") + meta["mode"]=0 + mode=0 + end + mode=(meta["mode"]) + mode=mode+1 + if mode>=5 then mode=1 end + minetest.chat_send_player(player_name, "Mining Drill Mk2 mode : "..mode.." - "..mining_drill_mode_text[mode][1] ) + item["name"]="technic:mining_drill_mk2_"..mode + meta["mode"]=mode + item["metadata"]=set_item_meta(meta) + itemstack:replace(item) + return itemstack +end + +function mining_drill_mk3_setmode(user,itemstack) + local player_name=user:get_player_name() + local item=itemstack:to_table() + local meta=get_item_meta(item["metadata"]) + if meta==nil then + meta={} + mode=0 + end + if meta["mode"]==nil then + minetest.chat_send_player(player_name,"Hold shift and use to change Mining Drill Mk3 modes.") + meta["mode"]=0 + mode=0 + end + mode=(meta["mode"]) + mode=mode+1 + if mode>=6 then mode=1 end + minetest.chat_send_player(player_name, "Mining Drill Mk3 mode : "..mode.." - "..mining_drill_mode_text[mode][1] ) + item["name"]="technic:mining_drill_mk3_"..mode + meta["mode"]=mode + item["metadata"]=set_item_meta(meta) + itemstack:replace(item) + return itemstack +end diff --git a/technic/mining_laser_mk1.lua b/technic/mining_laser_mk1.lua index a206bb4..87c121d 100644 --- a/technic/mining_laser_mk1.lua +++ b/technic/mining_laser_mk1.lua @@ -1,4 +1,6 @@ laser_mk1_max_charge=40000 +register_power_tool ("technic:laser_mk1",laser_mk1_max_charge) + local laser_shoot = function(itemstack, player, pointed_thing) local laser_straight_mode=0 local playerpos=player:getpos() @@ -10,7 +12,7 @@ local laser_shoot = function(itemstack, player, pointed_thing) minetest.node_dig(pos,node,player) end laser_straight_mode=1 - end + end direction_y=math.abs(math.floor(dir.y*100)) if direction_y>50 then entity_name="technic:laser_beam_entityV" @@ -54,13 +56,16 @@ minetest.register_tool("technic:laser_mk1", { stack_max = 1, on_use = function(itemstack, user, pointed_thing) item=itemstack:to_table() - if item["metadata"]=="" or item["metadata"]=="0" then return end - local charge=tonumber((item["metadata"])) + local meta=get_item_meta(item["metadata"]) + if meta==nil then return false end --tool not charghed + if meta["charge"]==nil then return false end + charge=meta["charge"] if charge-400>0 then laser_shoot(item, user, pointed_thing) - charge =charge-400; - item["metadata"]=tostring(charge) - charge=set_RE_wear(item,charge,laser_mk1_max_charge) + charge =charge-400; + set_RE_wear(item,charge,laser_mk1_max_charge) + meta["charge"]=charge + item["metadata"]=set_item_meta(meta) itemstack:replace(item) end return itemstack @@ -171,4 +176,4 @@ function lazer_it (pos, player) if node.name == "air" or node.name == "ignore" or node.name == "default:lava_source" or node.name == "default:lava_flowing" then return end if node.name == "default:water_source" or node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end if player then minetest.node_dig(pos,node,player) end -end \ No newline at end of file +end diff --git a/technic/sonic_screwdriver.lua b/technic/sonic_screwdriver.lua index d089778..ffd2984 100644 --- a/technic/sonic_screwdriver.lua +++ b/technic/sonic_screwdriver.lua @@ -1,55 +1,59 @@ sonic_screwdriver_max_charge=15000 - - minetest.register_tool("technic:sonic_screwdriver", { - description = "Sonic Screwdriver", - inventory_image = "technic_sonic_screwdriver.png", - on_use = function(itemstack, user, pointed_thing) - -- Must be pointing to facedir applicable node - if pointed_thing.type~="node" then return end - local pos=minetest.get_pointed_thing_position(pointed_thing,above) - local node=minetest.env:get_node(pos) - local node_name=node.name - if minetest.registered_nodes[node_name].paramtype2 == "facedir" or minetest.registered_nodes[node_name].paramtype2 == "wallmounted" then - if node.param2==nil then return end - item=itemstack:to_table() - if item["metadata"]=="" or item["metadata"]=="0" then return end - local charge=tonumber((item["metadata"])) - if charge-100>0 then - minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.3, max_hear_distance = 10,}) - local n = node.param2 - if minetest.registered_nodes[node_name].paramtype2 == "facedir" then - n = n+1 - if n == 4 then n = 0 end - else - n = n+1 - if n == 6 then n = 0 end - end - -- hacky_swap_node, unforunatly. - local meta = minetest.env:get_meta(pos) - local meta0 = meta:to_table() - node.param2 = n - minetest.env:set_node(pos,node) - meta = minetest.env:get_meta(pos) - meta:from_table(meta0) - - charge =charge-100; - item["metadata"]=tostring(charge) - set_RE_wear(item,charge,sonic_screwdriver_max_charge) - itemstack:replace(item) - end - return itemstack - else - return itemstack - end - end, - - }) - - minetest.register_craft({ - output = "technic:sonic_screwdriver", - recipe = { - {"technic:diamond"}, - {"technic:battery"}, - {"technic:stainless_steel_ingot"} - } - }) +register_power_tool ("technic:sonic_screwdriver",sonic_screwdriver_max_charge) + +minetest.register_tool("technic:sonic_screwdriver", { + description = "Sonic Screwdriver", + inventory_image = "technic_sonic_screwdriver.png", + on_use = function(itemstack, user, pointed_thing) + -- Must be pointing to facedir applicable node + if pointed_thing.type~="node" then return end + local pos=minetest.get_pointed_thing_position(pointed_thing,above) + local node=minetest.env:get_node(pos) + local node_name=node.name + if minetest.registered_nodes[node_name].paramtype2 == "facedir" or minetest.registered_nodes[node_name].paramtype2 == "wallmounted" then + if node.param2==nil then return end + item=itemstack:to_table() + local meta1=get_item_meta(item["metadata"]) + if meta1==nil then return false end --tool not charghed + if meta1["charge"]==nil then return false end + charge=meta1["charge"] + if charge-100>0 then + minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.3, max_hear_distance = 10,}) + local n = node.param2 + if minetest.registered_nodes[node_name].paramtype2 == "facedir" then + n = n+1 + if n == 4 then n = 0 end + else + n = n+1 + if n == 6 then n = 0 end + end + -- hacky_swap_node, unforunatly. + local meta = minetest.env:get_meta(pos) + local meta0 = meta:to_table() + node.param2 = n + minetest.env:set_node(pos,node) + meta = minetest.env:get_meta(pos) + meta:from_table(meta0) + + charge=charge-100; + meta1["charge"]=charge + item["metadata"]=set_item_meta(meta1) + set_RE_wear(item,charge,sonic_screwdriver_max_charge) + itemstack:replace(item) + end + return itemstack + else + return itemstack + end + end, + + }) + +minetest.register_craft({ + output = "technic:sonic_screwdriver", + recipe = { + {"technic:diamond"}, + {"technic:battery"}, + {"technic:stainless_steel_ingot"} + } +}) diff --git a/technic/textures/technic_mining_drill_mk2.png b/technic/textures/technic_mining_drill_mk2.png new file mode 100644 index 0000000000000000000000000000000000000000..30be719b0585841cd9b8dcfbdc6d4df99dae54bb GIT binary patch literal 1901 zcmV-z2a@=SP)Px#24YJ`L;z6$egJukhSA0V000SaNLh0L01l=A01l=Bhuo=e00007bV*G`2i*b_ z78x}72aGQO00!+zL_t(o!^M?bY!ufW#=moBW_R}D^#yyq%wlX}YzJ^-?|N;p0|_!9 zoP;W*(9#x6FH+J*QKhO<^U#+(L`qvVm8zUw4*! z14ceKWOKRd^;~YuZIc>r41Vy@|4M)YfUac^+Dl4b>O6e>J%C?WS66?^)b$Z(iRUjl z3)ePp-+2rGg27*}`Ag8nnb?;l}|O{}TF=Ju}dEll4!lyX(lbexga?K@CY-#`q>f!1B!B%|fTY(D=0 zoF18^lSdW5{~Tj1vStEWYCakI`jbbxL#?j5`psxq@5R}_pTp$P``ET)CjzalB$3Ud zZQo;L{^P4K^0~u`qMT)n&8rBHF(gVk~|$xkW`$Zr)NK!{M9)3!2lNH z49z?DAkgvvu3otUET>?KHiu{$Pxuu7$rxj)RZYO|_8giYzfmqbWYXSzKYDt4P~|DX zYwz?SITuCS&fWM@<9+DAbP1+Wz*5~Eh<1jo?Di9Go^1^VYgaXa#xncc8M|lG+|=!s ziux^(Z6e+s97ZY;$G(00(Wq46{NQCIW3yPEkHJ>Aj0_C8bBidTyizjseLlbcWQ?)Q z7ZR9CEb@}7>O^@>-FM*hz!D@_9C)~MJ1R?@IP=~mq*w&0sR{6gaR7j^Y@onRIQTLw z)8nO<)#X!^(=o=fMXvw=T$1oyGBSk?RTbP@=0W2IA1a&XRUkP;aPqkk3Ixg=hiUVo#XF0>;c5ufIwes0wQxABuXqIj5FQ?m6H1>T zoL@Br5l3J8Hon^JfWs@pQz=7qiICjlza3zi98*>fd^wBy4I;Np%LEWNO;ai=19wqX zHAV}U~CS;~n8N&&bi zrMaRq@L3pRDP?2bo4MTb<8$g<*^wjP#Ez~`%vMaJtf2(etyPe#?U?JEL;1WD5AAj! zSd+q;ArDX9AtoWDk5ZhCMj5}CfcW1Ys6&Gj!BG4D6kF=2v#e~7_d(bl-KbSUNNXB? z{nHoVO1SXMagO!tG`#$lj2qWEp%Mo`AWC*#bO`?wZSC!?T6*c?riN{$3p2OT*!?JG z#>Nnv7{G~N?ZbxBWjy=y>zJG%u&wh#DCCgUG!R05aryG)XICu%0PXD^59V{(^Hg%# z&b=Ens=g@{ zE5I1L8I49WjIl8mjV5EU*icPPjX66z+nvc|k_!t9vd81W-o1Ot($W%{nVC5x2*N|M zEW_b&*euH;hGB>R?6Fwv6#;7iW9(hO-=89c{E||dzIpRzr_1HyUayxV5(&;Zhr{6@ znx=70(+H*XMOl`gibNvCui##Ebac={q3~P7FrI2^YT_=Ji!jEJN~L(AP%sH0 {V z!aXmdRZwjhMzbVISXx?wAPCSjjqAE@P)dKGs_O5H{tZ`3TU%RAp-|{^I-M=Oy}cX& z866!(Hk-{-N_$mRefgecv>Jwohi6JlOWBDNC*bq>$oTj;ve|5sQu?^6s;?H+1z&_v zDAcBDns0D$5T{R{=8;HbUY6y@!r^duRafy!2?PQnA>=Jx*Y}E|I7unpt*YwOs=J^_ n2`3?>mr{Bv91h3s_5MEr1;i#QZa&nm00000NkvXXu0mjfAPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01l=A01l=Bhuo=e00007bV*G`2i*b_ z7Y7RL<-}|N00!(yL_t(o!^M|dP+P|x#=qTjj&vk}1Q>)YfsKuU5aSq$iw(tf2HRs2 zyR8#@ns#E+NoSlklXlW}CVuEk9x~IZC+SOD_xjMzv@dNEC%zzi;B6rlz1S&q?D%i4vhw3-z&x!gl= zx@D3|Jn0VvE-}U;>n1==E+iVicH)Wl#(GypmoVA?F1GJ(L$JP{#4|ZG z95_T4KD+@Vmp$h9`!6!a=GLVLs;Xu9h4A43c&f5U?^0xE)JCByR3o-Lq`lM$-2|3LU-8A74 zb6$a)tv@Or4Bv2fK606>+u_>5*6dnd-mHqAz(7@wHn35ya?0Tb7| zkdWHJxd2N`0p;uW6cRLFsNw z*RU~f17?LXOx-JjWy+v7_kR|k5=?agC7vV>*IYu^Kq&-jofRnkYB(I$RvZBUga-!Z z38jw_&Tklkh{sR;49Tr8gF31q=4}F%+@Q9CPZZ#m4z4F*(_^SC6S-wtCV+XOnWKhEyImB-)|M9Jayd{+VObVW zBoaiDq}Lc@3IO>1{vVj8x!LFQ)ft9S#~6Em#Swhsc7#HYQc4xevRVnH!65F9>y7`?r{yr-wfbUK~iuq^9A&iN1RcDu?sw`rPY5<(tV6y5+}uocUH_$F7|+zy)Nq%}MHpj9CX-y(b(0YCqM|52y1!oh z9R3=mhGEo6l7!{uWe9=*RaLpBX$GbAyNaUxdezr(r8G1&lH=O_Pb2NV$zcR?>5~43cd7naSVw# zoSd>iu!Cdr-~XSk^0(>7|1;RI(a=!F_S>|Hjd2R*(NF&`X4n3If3N9dFvGrT!>9dI zmwu?v$(p$$cjx^6C;t~6%3=e8wr_oYJAQnBU%zox`oe9@X1SH;etge=TF>W~)}|e9 zClqqtsaxa5uD`6x%*@Qq3mXsAJ7vw3V3X*vO1Q$v{ElH(igUL1!~gg9{Y|a-^~E~o z&CAR0dD_^R{_or|Bd{xV)%5f4@*e$9KR>G_+&3#q?(n%-eaXy63=tfE8pQVgU*IYz xd_@gt*RL?2#R(!kO@RhnZU;3aSexY-7{dPhJSu4^P)Px#24YJ`L;z6$egJukhSA0V000SaNLh0L01l=A01l=Bhuo=e00007bV*G`2i*b_ z78@r{kFRq800Fy6L_t(o!|l{fNK{c62H^KzoyG)h92>_J1Q~;{l}ygXDIqsS_=Aap zgbS$<13?5C7+i%yv=U)J5QVXYb&cA!a36_3AQUEgWjq}72huj;G+Fw(5PuSDHFs9$ z*`AN{e&6}vXs|(7=XJ(nyV%;_w6nEZvcsRX`RL8hK*Pg2 zWM3(Tu3y3deMX()~wF6r{X+53rn7_Q3{i9Ust4dawFj8 z=eaPYFgfv|lK1a<{~4b2AE}|fkUimAc)V4RVhl~q6YzMPaHJnaIWyAmX>wb$t%0h$ z9*#yM|E&pyy76XwRkNi50Jt5@WjwwQ{es)izks4BilQiratH>@slD8d0v-SW002ov JPDHLkV1l|t^_>6! literal 0 HcmV?d00001 diff --git a/technic/textures/technic_tool_mode3.png b/technic/textures/technic_tool_mode3.png new file mode 100644 index 0000000000000000000000000000000000000000..cd099a718d102eab991a137506fa107848c76c19 GIT binary patch literal 622 zcmV-!0+IcRP)Px#24YJ`L;z6$egJukhSA0V000SaNLh0L01l=A01l=Bhuo=e00007bV*G`2i*b_ z78^P(iNmS@00HhvL_t(o!|l^aXj4%X#_|8nONzW2heT;4G%dtLT{$eQrj!aoDk35Y zh%Sm&T^J)sMX4aTQV^HUT2aBN5p+>nq^KZO!HMEVL~U#usY0n5Bo56B@3=~+xb?bv zzumc9IG1z2tI(ixPeiiWA`_oWSeA`pC}wy)ghD14E{>?FcisQGc{&vqpRa~(9ozBF zT!>3~u*JeE6&QMPmE7oexp#kDp-W;zP_l2&%0PdMBojetTJDowJHzts%}L4UGV=V% z4oN10f==t#&66$d4RYwjNs9 zV}22wXf1S zf!IpFlu9;h*96$wu@ARkVNt5tKmPG)|q#s!F|N@hkw!4s@Ay@Umc*m{Qv-W2Tl`>c+nQZbSf;-h?jWVX3W|K6bf4`e*PHa#`Vj*di{-C zx5xDUf^;e@!`UK*f`x4hhN1BLYG`b%t**u4a5x+ehr?0v8y17P2LZMHod5s;07*qo IM6N<$g1Iph-v9sr literal 0 HcmV?d00001 diff --git a/technic/textures/technic_tool_mode4.png b/technic/textures/technic_tool_mode4.png new file mode 100644 index 0000000000000000000000000000000000000000..62f50d78ea1929c39125eaca2fe7fac35cc375be GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Y)RhkE)0PT zbqtl=Z5NLLMK}vQB8wRq_?Ce%WBZ+z`9MMT5>H=O_Pb2NVluq9Ny^haSVw# zoSd@2u%mzK|N76@(%I6|+}ai&zh`80LD;3`7bP+wx| zv!&!f|NMGMlhVr%|GdBd-{`_w#;|FJ{#)PbmY8RIuOnR6S4Kcm@Av*)PLms_wzex; zrx7 zkdP#Ge8HkahYQ|VEOJR%xQ%%NZ+b#P!iDRP+u3(6QDJYh@%46M1A@Ffu{Alnn6$kU v*L*#oA;G#hL8PZC(16SBpaxKV0t18J>8xTV;X*55C^LAv`njxgN@xNA6$-#& literal 0 HcmV?d00001 diff --git a/technic/textures/technic_tool_mode5.png b/technic/textures/technic_tool_mode5.png new file mode 100644 index 0000000000000000000000000000000000000000..c9183149ebcd5776cd54f8ee526c897bfb68fcd4 GIT binary patch literal 535 zcmV+y0_gpTP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01l=A01l=Bhuo=e00007bV*G`2i*b_ z7CR!VVSio#00EatL_t(o!|jw!D8peK$G^|^C!1+yYqK>jVv381GE3Pak&9;SKIgf8roHSq>s+=B4cKB`Nb#n|b*;nOT;L=k|O~Pru*c`TTz0r-y+P z&PpSN!|y+88jTtNu;agDUp2<#az}-MmX_v|_IrK75P81;1)bhhUb@6E&K&8Gf7I{`prgN5W} z2Pr|B&QBM}?K1HfNTkMXCM7775|pXDER(oK@E0uZ8FCTuG})-D<2&ct8Z!+I6aWBT zBDc`%Q}|8iX|hq^Xp$x;imA$JB)7{%n;TA2E>=ki$~4$-|B?T{f5lxLxl~lBhs)gp ztu_Z>4D|7a=cf~lPt0Ow?u>C20DzwEJUR|M;XV`v5ujEx7!9ddTfb%y2m}IwKp+q# Z@CmaXiQa_oA`Som002ovPDHLkV1iW)=t}?q literal 0 HcmV?d00001 diff --git a/technic/textures/technic_tool_mode6.png b/technic/textures/technic_tool_mode6.png new file mode 100644 index 0000000000000000000000000000000000000000..9268f47c194e97c303e6fea0f827da0e41de0167 GIT binary patch literal 633 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=DkBK$x-p&dPkCAbW|YuPggqCSh>~lcb~mAX9#Nx;TbJ9DY01 z*JDbcNZWktGyRvZL?k~Bc#3UIn!UWytRAQio17QKiIxLTzkLze(|}`j77_iDbMs_ zyez^rHTBB1yyWkC=E~c}uD&lVlYR8iYQ2kp%ZnEl{kLUVmTEjP-ZM{gf!=Voz+88ubxvx8ck@;>Hl++2S@?A={|&9!XT?4EzjvuA0@Z=XE#rG;NOYsZAs zwTm_;dgy)Mr)!j`UCLuNo4H}xGdUq)^G=st9zI_lmi)3P{-*W!I$yUL^RhoyzmI;d zOM8B8#@yeFmd#sh^!L@VGj~IU&F3B9o(k- QfT@7N)78&qol`;+01fyOcmMzZ literal 0 HcmV?d00001 diff --git a/technic/textures/technic_tool_mode7.png b/technic/textures/technic_tool_mode7.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba572ad38863c4aef41ec1675189861bc78e573 GIT binary patch literal 481 zcmV<70UrK|P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01l=A01l=Bhuo=e00007bV*G`2i*b_ z7Xb+)wlYuv00Ci1L_t(o!|jvLD}!MG$3M@0cxPJ^D;sSL32QeJau8C^(n{?pj{X3- z5EpS*&Ikv8fM1Er4!f|(L84}UTr}I%-W~^0uPvv&J3XK4^R4Iee7`*c6Y%*oStv+^ z09}_@tpZ(_SS*4_*u&}BtN6)^a$nxycgT2r``=6~HqG(LivX~dTOjq67u`KkLj$@l zIoKbhy>pIyE`{A@`OVwRm>`}0G&CCwR?DW)6aWwRI|Ktxa|QkqYIdPH>H%0c XIJRJf$Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01l=A01l=Bhuo=e00007bV*G`2i*b_ z7XcQozCWb^00J~gL_t(o!|jw!NK{c6hM#l2V~$OTMdKirl?u9&&{c(mO4`D#Orm8! zCYBMikO)gDa3O`RO0*wZ2oVt)Q7So+NiDJ@B%+)qMMn)YrA8eb=g!wc5?8I}E`s|k z5AWf;=kPs8VFIU5ZWpg_oj?%8iubu#4n=Ug>j7}O3YeG-VoCvB^h}ef=})g{KijXlkk>ZkPIPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01l=A01l=Bhuo=e00007bV*G`2i*b_ z7Xc(@X>KI|00HkwL_t(o!|l|uYZFl%2k`I3G@fEeN|S0R225#7hc*ss$u*K%MIAyY z?Q~?ZN-be}Ga6M6fyuh7J~bL|w!Vq39-3=n@mbcqfIR*u+TNoZQzz3|d^D z(|y+W9={*&ecw-lAW1dI50&qz)lA6pF7)-fkz4pE?cC=SRebi=HSF1Y5R$_Q%Q8`2 ze*wc-VqxX81d)}cg8cW42&z#=hT65q( zljQ?wG=4xx1AhN*nA=|g08{5fNW=rJC%AC#5CA}OIMHlcVj6h4T$S?q3;^JGERB&^ zCzMDBqlypF*o}Xl5%MMGZihKGb_Fik2LLde8+iL>9>*dxuq+d*n!>BsUnF63;Cgyh zdiwk(>opSqu(fUB>g65)Kz(BkUQe6YL6nFGn18n3y50VMH%CuR0s!V8SXe&G-@z1?f$3B?qlyoa;Y(<9c>xleo1c)^9-^>P z#h*7LEQHgkZkEdp)W7}8K)ct4-X1qH*^&gC&1SRNY&P2tKLH@9$s4eYe02Z-002ov JPDHLkV1fuS3eo@o literal 0 HcmV?d00001