From 01b21d49af04f9b3251c5edfb759995dc45d5110 Mon Sep 17 00:00:00 2001 From: Maciej Kasatkin Date: Sun, 28 Oct 2012 20:03:36 +0100 Subject: [PATCH] update --- battery_box.lua | 56 +++++++---- chainsaw.lua | 11 +-- flashlight.lua | 125 +++++++++++-------------- items.lua | 48 +++++----- mining_drill.lua | 9 +- mining_laser_mk1.lua | 42 +++++++-- ores.lua | 6 +- sonic_screwdriver.lua | 9 +- textures/technic_battery.png | Bin 247 -> 4199 bytes textures/technic_mining_laser_mk1.png | Bin 358 -> 15469 bytes textures/technic_sonic_screwdriver.png | Bin 2064 -> 9794 bytes 11 files changed, 165 insertions(+), 141 deletions(-) diff --git a/battery_box.lua b/battery_box.lua index ed0b2f8..6707065 100644 --- a/battery_box.lua +++ b/battery_box.lua @@ -10,11 +10,14 @@ registered_power_tools_count=registered_power_tools_count+1 end register_power_tool ("technic:mining_drill",60000) -register_power_tool ("technic:chainsaw",40000) +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") @@ -41,8 +44,7 @@ minetest.register_craft({ minetest.register_tool("technic:battery", {description = "RE Battery", inventory_image = "technic_battery.png", -energy_charge = 0, -tool_capabilities = {max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) +tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) minetest.register_craftitem("technic:battery_box", { description = "Battery box", @@ -149,6 +151,12 @@ temp=65536-temp return math.floor(temp) 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 +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" @@ -167,10 +175,15 @@ minetest.register_abm({ elseif i==0 then hacky_swap_node(pos,"technic:battery_box") end meta:set_float("last_side_shown",i) end + +--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 item_max_charge = nil local counter=registered_power_tools_count-1 for i=1, counter,1 do @@ -179,46 +192,49 @@ minetest.register_abm({ end end if item_max_charge then - local load1=tonumber((src_item["wear"])) - load1=get_RE_item_load(load1,item_max_charge) + 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 - - load1=set_RE_item_load(load1,item_max_charge) - src_item["wear"]=tostring(load1) + 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 end +-- dischargin registered power tools if inv:is_empty("dst") == false then srcstack = inv:get_stack("dst", 1) src_item=srcstack:to_table() - if src_item["name"]== "technic:battery" then - local load1=tonumber((src_item["wear"])) - load1=get_RE_item_load(load1,10000) + 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 + 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"])) load_step=1000 if load1>0 and chargemax_charge then load_step=max_charge-charge end if load1-load_step<0 then load_step=load1 end load1=load1-load_step charge=charge+load_step - - load1=set_RE_item_load(load1,10000) - src_item["wear"]=tostring(load1) + set_RE_wear(src_item,load1,item_max_charge) + src_item["metadata"]=tostring(load1) inv:set_stack("dst", 1, src_item) end end end - meta:set_int("battery_charge",charge) - meta:set_string("infotext", "Battery box: "..charge.."/"..max_charge); local load = math.floor(charge/60000 * 100) meta:set_string("formspec", @@ -310,10 +326,10 @@ i=1 i=i+1 until false - - meta:set_float("battery_charge",charge) - meta:set_string("infotext", "Battery box: "..charge.."/"..max_charge); - + charge=math.floor(charge) + charge_string=tostring(charge) + meta:set_string("infotext", "Battery box: "..charge_string.."/"..max_charge); + meta:set_int("battery_charge",charge) end }) diff --git a/chainsaw.lua b/chainsaw.lua index dc1b409..9f69fd9 100644 --- a/chainsaw.lua +++ b/chainsaw.lua @@ -7,19 +7,18 @@ minetest.register_tool("technic:chainsaw", { on_use = function(itemstack, user, pointed_thing) if pointed_thing.type=="node" then item=itemstack:to_table() - local charge=tonumber((item["wear"])) - if charge ==0 then charge =65535 end - charge=get_RE_item_load(charge,mining_drill_max_charge) + if item["metadata"]=="" or item["metadata"]=="0" then return end --tool not charged + charge=tonumber(item["metadata"]) 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; - charge=set_RE_item_load(charge,mining_drill_max_charge) - item["wear"]=tostring(charge) + set_RE_wear(item,charge,chainsaw_max_charge) + item["metadata"]=tostring(charge) itemstack:replace(item) - end return itemstack end + end end, }) diff --git a/flashlight.lua b/flashlight.lua index a85b28c..1125246 100644 --- a/flashlight.lua +++ b/flashlight.lua @@ -29,15 +29,8 @@ end minetest.register_on_joinplayer(function(player) local player_name = player:get_player_name() table.insert(players, player_name) - last_wielded[player_name] = flashlight_weared(player) local pos = player:getpos() local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} - local wielded_item = player:get_wielded_item():get_name() - if flashlight_weared(player)==true then - -- Neuberechnung des Lichts erzwingen - minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"}) - minetest.env:add_node(rounded_pos,{type="node",name="air"}) - end player_positions[player_name] = {} player_positions[player_name]["x"] = rounded_pos.x; player_positions[player_name]["y"] = rounded_pos.y; @@ -67,59 +60,56 @@ end) minetest.register_globalstep(function(dtime) for i,player_name in ipairs(players) do local player = minetest.env:get_player_by_name(player_name) - if flashlight_weared(player)==true then - -- Fackel ist in der Hand - local pos = player:getpos() - local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} - if (last_wielded[player_name] ~= true) or (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then - -- Fackel gerade in die Hand genommen oder zu neuem Node bewegt - local is_air = minetest.env:get_node_or_nil(rounded_pos) - if is_air == nil or (is_air ~= nil and (is_air.name == "air" or is_air.name == "technic:light")) then - -- wenn an aktueller Position "air" ist, Fackellicht setzen - minetest.env:add_node(rounded_pos,{type="node",name="technic:light"}) - end - if (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then - -- wenn Position geänder, dann altes Licht löschen - local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]} - -- Neuberechnung des Lichts erzwingen - local is_light = minetest.env:get_node_or_nil(old_pos) - if is_light ~= nil and is_light.name == "technic:light" then - minetest.env:add_node(old_pos,{type="node",name="technic:light_off"}) - minetest.env:add_node(old_pos,{type="node",name="air"}) - end - end - -- gemerkte Position ist nun die gerundete neue Position - player_positions[player_name]["x"] = rounded_pos.x - player_positions[player_name]["y"] = rounded_pos.y - player_positions[player_name]["z"] = rounded_pos.z + flashlight_weared=check_for_flashlight(player) + local pos = player:getpos() + local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} + local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]} + + if last_wielded[player_name] and not flashlight_weared then --remove light, flashlight weared out or was removed from hotbar + local node=minetest.env:get_node_or_nil(old_pos) + if node then + if node.name=="technic:light" then + minetest.env:add_node(old_pos,{type="node",name="technic:light_off"}) + minetest.env:add_node(old_pos,{type="node",name="air"}) + last_wielded[player_name]=false + end + end end - last_wielded[player_name] = true; - elseif last_wielded[player_name] == true then - -- Fackel nicht in der Hand, aber beim letzten Durchgang war die Fackel noch in der Hand - local pos = player:getpos() - local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} - repeat - local is_light = minetest.env:get_node_or_nil(rounded_pos) - if is_light ~= nil and is_light.name == "technic:light" then - -- minetest.env:remove_node(rounded_pos) - -- Erzwinge Neuberechnung des Lichts - minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"}) - minetest.env:add_node(rounded_pos,{type="node",name="air"}) - end - until minetest.env:get_node_or_nil(rounded_pos) ~= "technic:light" - local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]} - repeat - is_light = minetest.env:get_node_or_nil(old_pos) - if is_light ~= nil and is_light.name == "technic:light" then - -- minetest.env:remove_node(old_pos) - -- Erzwinge Neuberechnung des Lichts - minetest.env:add_node(old_pos,{type="node",name="technic:light_off"}) - minetest.env:add_node(old_pos,{type="node",name="air"}) - end - until minetest.env:get_node_or_nil(old_pos) ~= "technic:light" - last_wielded[player_name] = true - end + player_moved=not(old_pos.x==rounded_pos.x and old_pos.y==rounded_pos.y and old_pos.z==rounded_pos.z) + if player_moved and last_wielded[player_name] and flashlight_weared then + + local node=minetest.env:get_node_or_nil(rounded_pos) + if node then + if node.name=="air" then + minetest.env:add_node(rounded_pos,{type="node",name="technic:light"}) + end + end + local node=minetest.env:get_node_or_nil(old_pos) + if node then + if node.name=="technic:light" then + minetest.env:add_node(old_pos,{type="node",name="technic:light_off"}) + minetest.env:add_node(old_pos,{type="node",name="air"}) + end + end + player_positions[player_name]["x"] = rounded_pos.x + player_positions[player_name]["y"] = rounded_pos.y + player_positions[player_name]["z"] = rounded_pos.z + + else if not last_wielded[player_name] and flashlight_weared then + local node=minetest.env:get_node_or_nil(rounded_pos) + if node then + if node.name=="air" then + minetest.env:add_node(rounded_pos,{type="node",name="technic:light"}) + end + end + player_positions[player_name]["x"] = rounded_pos.x + player_positions[player_name]["y"] = rounded_pos.y + player_positions[player_name]["z"] = rounded_pos.z + last_wielded[player_name]=true + end + + end end end) @@ -128,6 +118,7 @@ minetest.register_node("technic:light", { tile_images = {"technic_light.png"}, paramtype = "light", walkable = false, + buildable_to = true, is_ground_content = true, light_propagates = true, sunlight_propagates = true, @@ -142,6 +133,7 @@ minetest.register_node("technic:light_off", { tile_images = {"technic_light.png"}, paramtype = "light", walkable = false, + buildable_to = true, is_ground_content = true, light_propagates = true, sunlight_propagates = true, @@ -151,27 +143,24 @@ minetest.register_node("technic:light_off", { }, }) -function flashlight_weared (player) -flashlight_on=false +function check_for_flashlight (player) local inv = player:get_inventory() 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() - local charge=tonumber((item["wear"])) - if charge ==0 then charge =65535 end - charge=get_RE_item_load(charge,flashlight_max_charge) + if item["metadata"]=="" or item["metadata"]=="0" then return false end --flashlight not charghed + charge=tonumber(item["metadata"]) if charge-2>0 then - flashlight_on=true charge =charge-2; - charge=set_RE_item_load(charge,flashlight_max_charge) - item["wear"]=tostring(charge) + set_RE_wear(item,charge,flashlight_max_charge) + item["metadata"]=tostring(charge) hotbar[i]:replace(item) inv:set_stack("main",i,hotbar[i]) + return true end - return flashlight_on end end -return flashlight_on +return false end \ No newline at end of file diff --git a/items.lua b/items.lua index 0773d1f..fe479a7 100644 --- a/items.lua +++ b/items.lua @@ -52,21 +52,6 @@ minetest.register_node( "technic:diamond_block", { drop = 'craft "technic:diamond_block" 1', }) -minetest.register_craft({ - output = 'technic:red_energy_crystal', - recipe = { - {'moreores:gold_ingot', 'technic:battery', 'group:dye,basecolor_red'}, - {'technic:battery', 'technic:diamond_block', 'technic:battery'}, - {'group:dye,basecolor_red', 'technic:battery', 'moreores:gold_ingot'}, - } -}) - -minetest.register_craftitem( "technic:red_energy_crystal", { - description = "Red Energy Crystal", - inventory_image = minetest.inventorycube("technic_diamond_block_red.png", "technic_diamond_block_red.png", "technic_diamond_block_red.png"), - on_place_on_ground = minetest.craftitem_place_item, -}) - minetest.register_craft({ output = 'technic:green_energy_crystal', recipe = { @@ -76,12 +61,6 @@ minetest.register_craft({ } }) -minetest.register_craftitem( "technic:green_energy_crystal", { - description = "Green Energy Crystal", - inventory_image = minetest.inventorycube("technic_diamond_block_green.png", "technic_diamond_block_green.png", "technic_diamond_block_green.png"), - on_place_on_ground = minetest.craftitem_place_item, -}) - minetest.register_craft({ output = 'technic:blue_energy_crystal', recipe = { @@ -91,11 +70,30 @@ minetest.register_craft({ } }) -minetest.register_craftitem( "technic:blue_energy_crystal", { - description = "Blue Energy Crystal", - inventory_image = minetest.inventorycube("technic_diamond_block_blue.png", "technic_diamond_block_blue.png", "technic_diamond_block_blue.png"), - on_place_on_ground = minetest.craftitem_place_item, +minetest.register_craft({ + output = 'technic:red_energy_crystal', + recipe = { + {'moreores:gold_ingot', 'technic:battery', 'group:dye,basecolor_red'}, + {'technic:battery', 'technic:diamond_block', 'technic:battery'}, + {'group:dye,basecolor_red', 'technic:battery', 'moreores:gold_ingot'}, + } }) +minetest.register_tool("technic:blue_energy_crystal", +{description = "Blue Energy Crystal", +inventory_image = minetest.inventorycube("technic_diamond_block_blue.png", "technic_diamond_block_blue.png", "technic_diamond_block_blue.png"), +tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) + +minetest.register_tool("technic:green_energy_crystal", +{description = "Green Energy Crystal", +inventory_image = minetest.inventorycube("technic_diamond_block_green.png", "technic_diamond_block_green.png", "technic_diamond_block_green.png"), +tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) + +minetest.register_tool("technic:red_energy_crystal", +{description = "Red Energy Crystal", +inventory_image = minetest.inventorycube("technic_diamond_block_red.png", "technic_diamond_block_red.png", "technic_diamond_block_red.png"), +tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) + + diff --git a/mining_drill.lua b/mining_drill.lua index 33dfe2b..5fc5377 100644 --- a/mining_drill.lua +++ b/mining_drill.lua @@ -7,14 +7,13 @@ minetest.register_tool("technic:mining_drill", { on_use = function(itemstack, user, pointed_thing) if pointed_thing.type=="node" then item=itemstack:to_table() - local charge=tonumber((item["wear"])) - if charge ==0 then charge =65535 end - charge=get_RE_item_load(charge,mining_drill_max_charge) + 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; - charge=set_RE_item_load(charge,mining_drill_max_charge) - item["wear"]=tostring(charge) + item["metadata"]=tostring(charge) + set_RE_wear(item,charge,mining_drill_max_charge) itemstack:replace(item) end return itemstack diff --git a/mining_laser_mk1.lua b/mining_laser_mk1.lua index 76aaee8..a206bb4 100644 --- a/mining_laser_mk1.lua +++ b/mining_laser_mk1.lua @@ -1,17 +1,42 @@ laser_mk1_max_charge=40000 - local laser_shoot = function(itemstack, player, pointed_thing) + local laser_straight_mode=0 local playerpos=player:getpos() local dir=player:get_look_dir() + if pointed_thing.type=="node" then + pos=minetest.get_pointed_thing_position(pointed_thing, above) + local node = minetest.env:get_node(pos) + if node.name~="ignore" then + minetest.node_dig(pos,node,player) + end + laser_straight_mode=1 + end + direction_y=math.abs(math.floor(dir.y*100)) - print (direction_y) if direction_y>50 then entity_name="technic:laser_beam_entityV" else entity_name="technic:laser_beam_entity" end - local obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.6,z=playerpos.z},entity_name) + + if laser_straight_mode==1 then + pos1=minetest.get_pointed_thing_position(pointed_thing, under) + pos1.x=math.floor(pos1.x) + pos1.y=math.floor(pos1.y) + pos1.z=math.floor(pos1.z) + obj=minetest.env:add_entity(pos1,entity_name) + else + obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.6,z=playerpos.z},entity_name) + end if obj:get_luaentity().player == nil then obj:get_luaentity().player = player end - obj:setvelocity({x=dir.x*10, y=dir.y*10, z=dir.z*10}) + if laser_straight_mode==1 and direction_y<50 then + obj:setvelocity({x=dir.x*8, y=0, z=dir.z*8}) + else if laser_straight_mode==1 and direction_y>50 then + obj:setvelocity({x=0, y=dir.y*8, z=dir.z*8}) + end + end + if laser_straight_mode==0 then + obj:setvelocity({x=dir.x*8, y=dir.y*8, z=dir.z*8}) + end obj:setacceleration({x=0, y=0, z=0}) obj:setyaw(player:get_look_yaw()+math.pi) if obj:get_luaentity().player == nil then @@ -29,14 +54,13 @@ minetest.register_tool("technic:laser_mk1", { stack_max = 1, on_use = function(itemstack, user, pointed_thing) item=itemstack:to_table() - local charge=tonumber((item["wear"])) - if charge ==0 then charge =65535 end - charge=get_RE_item_load(charge,laser_mk1_max_charge) + if item["metadata"]=="" or item["metadata"]=="0" then return end + local charge=tonumber((item["metadata"])) if charge-400>0 then laser_shoot(item, user, pointed_thing) charge =charge-400; - charge=set_RE_item_load(charge,laser_mk1_max_charge) - item["wear"]=tostring(charge) + item["metadata"]=tostring(charge) + charge=set_RE_wear(item,charge,laser_mk1_max_charge) itemstack:replace(item) end return itemstack diff --git a/ores.lua b/ores.lua index 77d7bb7..8027f6f 100644 --- a/ores.lua +++ b/ores.lua @@ -192,10 +192,10 @@ local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, end minetest.register_on_generated(function(minp, maxp, seed) -generate_ore("technic:mineral_diamond", "default:stone", minp, maxp, seed+21, 1/11/11/11, 2, -31000, -450) -generate_ore("technic:mineral_uranium", "default:stone", minp, maxp, seed+22, 1/11/11/11, 1, -300, -100) +generate_ore("technic:mineral_diamond", "default:stone", minp, maxp, seed+21, 1/11/11/11, 4, -31000, -450) +generate_ore("technic:mineral_uranium", "default:stone", minp, maxp, seed+22, 1/10/10/10, 3, -300, -80) generate_ore("technic:mineral_chromium", "default:stone", minp, maxp, seed+23, 1/10/10/10, 2, -31000, -100) -generate_ore("technic:mineral_zinc", "default:stone", minp, maxp, seed+24, 1/9/9/9, 5, -31000, 2) +generate_ore("technic:mineral_zinc", "default:stone", minp, maxp, seed+24, 1/9/9/9, 4, -31000, 2) generate_ore("technic:marble", "default:stone", minp, maxp, seed+25, 1/128, 20, -100, -32) generate_ore("technic:granite", "default:stone", minp, maxp, seed+25, 1/128, 15, -190, -90) end) \ No newline at end of file diff --git a/sonic_screwdriver.lua b/sonic_screwdriver.lua index 77b01e8..d089778 100644 --- a/sonic_screwdriver.lua +++ b/sonic_screwdriver.lua @@ -12,9 +12,8 @@ sonic_screwdriver_max_charge=15000 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 charge=tonumber((item["wear"])) - if charge ==0 then charge =65535 end - charge=get_RE_item_load(charge,sonic_screwdriver_max_charge) + 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 @@ -34,8 +33,8 @@ sonic_screwdriver_max_charge=15000 meta:from_table(meta0) charge =charge-100; - charge=set_RE_item_load(charge,sonic_screwdriver_max_charge) - item["wear"]=tostring(charge) + item["metadata"]=tostring(charge) + set_RE_wear(item,charge,sonic_screwdriver_max_charge) itemstack:replace(item) end return itemstack diff --git a/textures/technic_battery.png b/textures/technic_battery.png index ee83b7457cf72da58b2ede68a6b06e7f5664ec80..19086783e2ca353db3c17dc0099ad840eb4ed20e 100644 GIT binary patch literal 4199 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 literal 247 zcmV3pSWQ0f8k2q{~%WpZGe=N)PD&HiT~2l(*MQ9#s5o6N`f)b1|Vw!VUU3& x8-NXu8bD72VCeuvlVt!X0U;+On1R^T0suQ+i+y*Oy}AGZ002ovPDHLkV1i(5X}bUb diff --git a/textures/technic_mining_laser_mk1.png b/textures/technic_mining_laser_mk1.png index acde392c99cb0912a28ec667c05edfb4f8355085..69dde8cee5d1f20961e92a215a771ba188fae731 100644 GIT binary patch literal 15469 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 jZQ8VH)22vcAYWGF(noa50-s`+ z!<+^Ef*ZfFDj&Hh>sYhE*v7O_mq|{@a92XU`J0!03M_K3=70E7yT(;Xjj@~MU2V&T znH!RRI#hMO`>ZC|%_6n==^fJvK}`<}+LKmE{qQgTe~DWM4f9AkXZ diff --git a/textures/technic_sonic_screwdriver.png b/textures/technic_sonic_screwdriver.png index fb61d96190c7b4a23ba7395c816a72835c773389..4d6b1301861bd85008a2a07d92d72c2b021ea2e3 100644 GIT binary patch literal 9794 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