From 5cb73952ce19f4a21850f28cb6a0352bfe26d2dc Mon Sep 17 00:00:00 2001 From: AiTechEye <40591179+AiTechEye@users.noreply.github.com> Date: Tue, 26 Jun 2018 09:04:59 +0200 Subject: [PATCH] Add files via upload --- aliveai_threat_eletric/depends.txt | 4 + aliveai_threat_eletric/init.lua | 502 ++++++++++++++++++ aliveai_threat_eletric/readme.txt | 1 + .../textures/aliveai_threat_eletric_core.png | Bin 0 -> 1909 bytes .../textures/aliveai_threat_eletric_core2.png | Bin 0 -> 1877 bytes .../aliveai_threat_eletric_stungun.png | Bin 0 -> 322 bytes .../aliveai_threat_eletric_terminator.png | Bin 0 -> 2050 bytes ...aliveai_threats_quantum_monster_lights.png | Bin 0 -> 383 bytes 8 files changed, 507 insertions(+) create mode 100644 aliveai_threat_eletric/depends.txt create mode 100644 aliveai_threat_eletric/init.lua create mode 100644 aliveai_threat_eletric/readme.txt create mode 100644 aliveai_threat_eletric/textures/aliveai_threat_eletric_core.png create mode 100644 aliveai_threat_eletric/textures/aliveai_threat_eletric_core2.png create mode 100644 aliveai_threat_eletric/textures/aliveai_threat_eletric_stungun.png create mode 100644 aliveai_threat_eletric/textures/aliveai_threat_eletric_terminator.png create mode 100644 aliveai_threat_eletric/textures/aliveai_threats_quantum_monster_lights.png diff --git a/aliveai_threat_eletric/depends.txt b/aliveai_threat_eletric/depends.txt new file mode 100644 index 0000000..5433dee --- /dev/null +++ b/aliveai_threat_eletric/depends.txt @@ -0,0 +1,4 @@ +default +aliveai +aliveai_electric +nitroglycerine? \ No newline at end of file diff --git a/aliveai_threat_eletric/init.lua b/aliveai_threat_eletric/init.lua new file mode 100644 index 0000000..ee67611 --- /dev/null +++ b/aliveai_threat_eletric/init.lua @@ -0,0 +1,502 @@ +aliveai_threat_eletric={} + +minetest.register_craft({ + output = "aliveai_threat_eletric:secam_off", + recipe = { + {"default:steel_ingot", "dye:black", "default:steel_ingot"}, + {"default:glass", "aliveai_threat_eletric:core2", "default:glass"}, + {"default:steel_ingot", "dye:black", "default:steel_ingot"}, + } +}) + + +minetest.register_tool("aliveai_threat_eletric:core", { + description = "High voltage core", + inventory_image = "aliveai_threat_eletric_core.png", + on_use=function(itemstack, user, pointed_thing) + local pos1,pos2=aliveai_electric.dir(user,pointed_thing) + local obs,pos,hit=aliveai_electric.getobjects(pos1,pos2) + aliveai_electric.lightning1(obs,pos,hit) + itemstack:add_wear(65535/20) + return itemstack + end, + on_place=function(itemstack, user, pointed_thing) + itemstack:take_item() + aliveai_threat_eletric.explode(user:get_pos(),20) + return itemstack + end +}) + +minetest.register_tool("aliveai_threat_eletric:core2", { + description = "Lightning core", + inventory_image = "aliveai_threat_eletric_core2.png", + on_use=function(itemstack, user, pointed_thing) + local pos1,pos2=aliveai_electric.dir(user,pointed_thing) + local obs,pos,hit=aliveai_electric.getobjects(pos1,pos2) + aliveai_electric.lightning2(obs,pos,hit) + itemstack:add_wear(65535/20) + return itemstack + end, + on_place=function(itemstack, user, pointed_thing) + itemstack:take_item() + aliveai_threat_eletric.explode(user:get_pos(),30) + return itemstack + end +}) + +minetest.register_tool("aliveai_threat_eletric:stungun", { + description = "Stungun", + inventory_image = "aliveai_threat_eletric_stungun.png", + on_use=function(itemstack, user, pointed_thing) + if pointed_thing.type=="object" then + aliveai_electric.hit(pointed_thing.ref,15) + itemstack:add_wear(65535/20) + return itemstack + end + end +}) + + +minetest.register_craft({ + output = "aliveai_threat_eletric:stungun", + recipe = { + {"default:steel_ingot","default:mese_crystal_fragment","default:steel_ingot"}, + {"default:steel_ingot","default:mese_crystal","default:steel_ingot"}, + {"default:steel_ingot","dye:black","default:steel_ingot"}, + } +}) + + +aliveai.create_bot({ + drop_dead_body=0, + attack_players=1, + name="eletric_terminator3", + team="nuke", + texture="aliveai_threat_eletric_terminator.png^[colorize:#00ff0033", + attacking=1, + talking=0, + light=0, + arm=4, + building=0, + escape=0, + start_with_items={["default:steel_ingot"]=4,["aliveai_threat_eletric:stungun"]=1}, + type="monster", + dmg=5, + hp=200, + name_color="", + attack_chance=3, + damage_by_blocks=0, + on_step=function(self,dtime) + if self.fight and aliveai.visiable(self,self.fight) then + local p=self.object:get_pos() + self.temper=3 + local a=aliveai.random_pos(self.fight:get_pos(),2,3) + if a then self.object:setpos(a) end + aliveai.lookat(self,self.fight:get_pos()) + if aliveai.def(p,"buildable_to") then + minetest.set_node(p,{name="aliveai_electric:chock"}) + elseif aliveai.def({x=p.x,y=p.y+1,z=p.z},"buildable_to") then + minetest.set_node({x=p.x,y=p.y+1,z=p.z},{name="aliveai_electric:chock"}) + end + end + end, + on_load=function(self) + self.hp2=self.object:get_hp() + self.move.speed=4 + end, + spawn=function(self) + self.hp2=self.object:get_hp() + self.move.speed=4 + end, + on_blow=function(self) + aliveai.kill(self) + self.death(self,self.object,self.object:getpos()) + end, + death=function(self,puncher,pos) + if not self.exx then + self.exx=1 + local pos=self.object:get_pos() + minetest.add_particlespawner({ + amount = 20, + time =0.1, + minpos = pos, + maxpos = pos, + minvel = {x=-10, y=10, z=-10}, + maxvel = {x=10, y=50, z=10}, + minacc = {x=0, y=-3, z=0}, + maxacc = {x=0, y=-8, z=0}, + minexptime = 3, + maxexptime = 1, + minsize = 1, + maxsize = 8, + texture = "default_steel_block.png", + collisiondetection = true, + }) + aliveai_threat_eletric.explode(pos,2) + aliveai.die(self) + end + end, + on_punched=function(self,puncher) + if self.hp2-self.hp<5 then + self.object:set_hp(self.hp2) + self.hp=self.hp2 + if aliveai.team(puncher)~="nuke" then aliveai_electric.hit(puncher) end + return self + end + local pos=self.object:get_pos() + minetest.add_particlespawner({ + amount = 20, + time=0.2, + minpos = {x=pos.x+0.5,y=pos.y+0.5,z=pos.z+0.5}, + maxpos = {x=pos.x-0.5,y=pos.y-0.5,z=pos.z-0.5}, + minvel = {x=-0.1, y=-0.1, z=-0.1}, + maxvel = {x=0.1, y=0.1, z=0.1}, + minacc = {x=0, y=0, z=0}, + maxacc = {x=0, y=0, z=0}, + minexptime = 0.5, + maxexptime = 1, + minsize = 0.5, + maxsize = 2, + texture = "aliveai_electric_vol.png", + }) + end +}) + +aliveai.create_bot({ + drop_dead_body=0, + attack_players=1, + name="eletric_terminator", + team="nuke", + texture="aliveai_threat_eletric_terminator.png", + attacking=1, + talking=0, + light=0, + building=0, + escape=0, + start_with_items={["default:steel_ingot"]=4,["aliveai_threat_eletric:core"]=1}, + type="monster", + dmg=9, + hp=200, + name_color="", + attack_chance=3, + damage_by_blocks=0, + on_step=function(self,dtime) + if self.fight and math.random(1,3)==1 and aliveai.visiable(self,self.fight) and aliveai.viewfield(self,self.fight) then + local pos=self.object:get_pos() + local ta=self.fight:get_pos() + aliveai.lookat(self,ta) + aliveai.use(self) + end + end, + on_load=function(self) + self.hp2=self.object:get_hp() + end, + spawn=function(self) + self.hp2=self.object:get_hp() + end, + on_blow=function(self) + aliveai.kill(self) + self.death(self,self.object,self.object:getpos()) + end, + death=function(self,puncher,pos) + if not self.exx then + self.exx=1 + local pos=self.object:get_pos() + minetest.add_particlespawner({ + amount = 20, + time =0.1, + minpos = pos, + maxpos = pos, + minvel = {x=-10, y=10, z=-10}, + maxvel = {x=10, y=50, z=10}, + minacc = {x=0, y=-3, z=0}, + maxacc = {x=0, y=-8, z=0}, + minexptime = 3, + maxexptime = 1, + minsize = 1, + maxsize = 8, + texture = "default_steel_block.png", + collisiondetection = true, + }) + aliveai_threat_eletric.explode(pos,10) + aliveai.die(self) + end + end, + on_punching=function(self,target) + local pos=target:get_pos() + if math.random(1,3)==1 and minetest.registered_nodes[minetest.get_node(pos).name] and minetest.registered_nodes[minetest.get_node(pos).name].buildable_to then + minetest.set_node(pos, {name="aliveai_threat_eletric:lightning"}) + end + end, + on_punched=function(self,puncher) + if self.hp2-self.hp<5 then + self.object:set_hp(self.hp2) + self.hp=self.hp2 + if aliveai.team(puncher)~="nuke" then aliveai_electric.hit(puncher) end + return self + end + local pos=self.object:get_pos() + minetest.add_particlespawner({ + amount = 20, + time=0.2, + minpos = {x=pos.x+0.5,y=pos.y+0.5,z=pos.z+0.5}, + maxpos = {x=pos.x-0.5,y=pos.y-0.5,z=pos.z-0.5}, + minvel = {x=-0.1, y=-0.1, z=-0.1}, + maxvel = {x=0.1, y=0.1, z=0.1}, + minacc = {x=0, y=0, z=0}, + maxacc = {x=0, y=0, z=0}, + minexptime = 0.5, + maxexptime = 1, + minsize = 0.5, + maxsize = 2, + texture = "aliveai_electric_vol.png", + }) + end +}) + +aliveai.create_bot({ + drop_dead_body=0, + attack_players=1, + name="eletric_terminator2", + team="nuke", + texture="aliveai_threat_eletric_terminator.png^[colorize:#fa7fff44", + attacking=1, + talking=0, + light=0, + building=0, + escape=0, + start_with_items={["default:steel_ingot"]=4,["aliveai_threat_eletric:core2"]=1}, + type="monster", + dmg=9, + hp=200, + name_color="", + attack_chance=3, + floating=1, + damage_by_blocks=0, + on_step=function(self,dtime) + if self.fight and math.random(1,3)==1 and aliveai.visiable(self,self.fight) and aliveai.viewfield(self,self.fight) then + local pos=self.object:get_pos() + local ta=self.fight:get_pos() + aliveai.lookat(self,ta) + aliveai.use(self) + end + end, + on_load=function(self) + self.hp2=self.object:get_hp() + end, + spawn=function(self) + self.hp2=self.object:get_hp() + end, + on_blow=function(self) + aliveai.kill(self) + self.death(self,self.object,self.object:getpos()) + end, + death=function(self,puncher,pos) + if not self.exx then + self.exx=1 + local pos=self.object:get_pos() + minetest.add_particlespawner({ + amount = 20, + time =0.1, + minpos = pos, + maxpos = pos, + minvel = {x=-10, y=10, z=-10}, + maxvel = {x=10, y=50, z=10}, + minacc = {x=0, y=-3, z=0}, + maxacc = {x=0, y=-8, z=0}, + minexptime = 3, + maxexptime = 1, + minsize = 1, + maxsize = 8, + texture = "default_steel_block.png", + collisiondetection = true, + }) + aliveai_threat_eletric.explode(pos,10) + aliveai.die(self) + end + end, + on_punching=function(self,target) + aliveai_electric.hit(target,10) + end, + on_punched=function(self,puncher) + if self.hp2-self.hp<5 then + self.object:set_hp(self.hp2) + self.hp=self.hp2 + if aliveai.team(puncher)~="nuke" then + if aliveai.is_bot(puncher) then aliveai.dying(puncher:get_luaentity(),1) end + aliveai.punchdmg(puncher,15) + aliveai_electric.hit(puncher) + end + return self + end + local pos=self.object:get_pos() + minetest.add_particlespawner({ + amount = 20, + time=0.2, + minpos = {x=pos.x+0.5,y=pos.y+0.5,z=pos.z+0.5}, + maxpos = {x=pos.x-0.5,y=pos.y-0.5,z=pos.z-0.5}, + minvel = {x=-0.1, y=-0.1, z=-0.1}, + maxvel = {x=0.1, y=0.1, z=0.1}, + minacc = {x=0, y=0, z=0}, + maxacc = {x=0, y=0, z=0}, + minexptime = 0.5, + maxexptime = 1, + minsize = 0.5, + maxsize = 2, + texture = "aliveai_electric_vol.png", + }) + end +}) + + +aliveai_threat_eletric.explode=function(pos,r) + for _, ob in ipairs(minetest.get_objects_inside_radius(pos, r*2)) do + if not (ob:get_luaentity() and ob:get_luaentity().itemstring) then + local pos2=ob:get_pos() + local d=math.max(1,vector.distance(pos,pos2)) + local dmg=(8/d)*r + ob:punch(ob,1,{full_punch_interval=1,damage_groups={fleshy=dmg}},nil) + else + ob:get_luaentity().age=890 + end + local pos2=ob:get_pos() + if aliveai.def(pos2,"buildable_to") then + minetest.set_node(pos2, {name="aliveai_electric:lightning_clump"}) + end + end + + for _, ob in ipairs(minetest.get_objects_inside_radius(pos, r*2)) do + local pos2=ob:get_pos() + local d=math.max(1,vector.distance(pos,pos2)) + local dmg=(8/d)*r + if ob:get_luaentity() then + ob:setvelocity({x=(pos2.x-pos.x)*dmg, y=(pos2.y-pos.y)*dmg, z=(pos2.z-pos.z)*dmg}) + elseif ob:is_player() then + aliveai_nitroglycerine.new_player=ob + minetest.add_entity(pos2, "aliveai_nitroglycerine:playerp"):setvelocity({x=(pos2.x-pos.x)*dmg, y=(pos2.y-pos.y)*dmg, z=(pos2.z-pos.z)*dmg}) + aliveai_nitroglycerine.new_player=nil + end + end + minetest.sound_play("aliveai_nitroglycerine_nuke", {pos=pos, gain = 0.5, max_hear_distance = r*4}) +end + +if aliveai_nitroglycerine then +minetest.register_craft({ + output = "aliveai_threat_eletric:timed_ebumb 2", + recipe = { + {"default:steel_ingot","default:coal_lump","default:steel_ingot"}, + {"default:steel_ingot","default:mese_crystal","default:steel_ingot"}, + {"","",""}, + } +}) +minetest.register_node("aliveai_threat_eletric:timed_ebumb", { + description = "Timed bomb", + tiles = {"aliveai_threats_c4_controller.png^[colorize:#fa7fff55"}, + groups = {dig_immediate = 2,mesecon = 2,flammable = 5}, + sounds = default.node_sound_wood_defaults(), + on_blast=function(pos) + minetest.set_node(pos,{name="air"}) + minetest.after(0.1, function(pos) + aliveai_threat_eletric.explode(pos,7) + aliveai_nitroglycerine.explode(pos,{radius=3,set="air"}) + end,pos) + end, + on_timer=function(pos, elapsed) + minetest.registered_nodes["aliveai_threat_eletric:timed_ebumb"].on_blast(pos) + end, + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local meta=minetest.get_meta(pos) + if meta:get_int("b")==1 then return end + meta:set_int("b",1) + minetest.get_node_timer(pos):start(5) + minetest.sound_play("aliveai_threats_on", {pos=pos, gain = 1, max_hear_distance = 7}) + end, + mesecons = {effector = + {action_on=function(pos) + minetest.registered_nodes["aliveai_threat_eletric:timed_ebumb"].on_rightclick(pos) + end + } + }, + on_burn = function(pos) + minetest.registered_nodes["aliveai_threat_eletric:timed_ebumb"].on_rightclick(pos) + end, + on_ignite = function(pos, igniter) + minetest.registered_nodes["aliveai_threat_eletric:timed_ebumb"].on_rightclick(pos) + end, +}) +end + + + +minetest.register_node("aliveai_threat_eletric:secam_off", { + description = "Lightning security cam", + tiles = {"aliveai_threats_cam2.png^[colorize:#fa7fff44"}, + drawtype = "nodebox", + walkable=false, + groups = {dig_immediate = 3}, + sounds = default.node_sound_glass_defaults(), + is_ground_content = false, + paramtype = "light", + paramtype2 = "facedir", + node_box = {type="fixed", + fixed={ {-0.2, -0.5, -0.2, 0.2, -0.4, 0.2}, + {-0.1, -0.2, -0.1, 0.1, -0.4, 0.1}} + + }, + on_place = minetest.rotate_node, + on_construct = function(pos) + minetest.get_meta(pos):set_string("infotext","click to activate and secure") + end, +on_rightclick = function(pos, node, player, itemstack, pointed_thing) + minetest.set_node(pos, {name ="aliveai_threat_eletric:secam", param1 = node.param1, param2 = node.param2}) + minetest.get_meta(pos):set_string("team",aliveai.team(player)) + if minetest.get_node(pos).param2==21 then + minetest.get_meta(pos):set_int("y",-1) + else + minetest.get_meta(pos):set_int("y",1) + end + minetest.get_node_timer(pos):start(1) + minetest.sound_play("aliveai_threats_on", {pos=pos, gain = 1, max_hear_distance = 15}) +end, +}) + +minetest.register_node("aliveai_threat_eletric:secam", { + description = "Lightning security cam", + tiles = { + { + name = "aliveai_threats_cam1.png^[colorize:#fa7fff44", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + }, + }, + drawtype = "nodebox", + walkable=false, + groups = {dig_immediate = 3,stone=1,not_in_creative_inventory=1}, + sounds = default.node_sound_glass_defaults(), + is_ground_content = false, + paramtype = "light", + paramtype2 = "facedir", + drop="aliveai_threat_eletric:secam_off", + node_box = {type="fixed", + fixed={ {-0.2, -0.5, -0.2, 0.2, -0.4, 0.2}, + {-0.1, -0.2, -0.1, 0.1, -0.4, 0.1}} + }, +on_timer=function(pos, elapsed) + local t=minetest.get_meta(pos):get_string("team") + for i, ob in pairs(minetest.get_objects_inside_radius(pos, 15)) do + local te=aliveai.team(ob) + local obpos=ob:get_pos() + obpos={x=obpos.x,y=obpos.y-1,z=obpos.z} + if te~="" and te~="animal" and te~=t and aliveai.gethp(ob)>0 and not (aliveai.is_bot(ob) and ob:get_luaentity().dying) and aliveai.visiable(pos,obpos) then + local obs,pos2=aliveai_electric.getobjects({x=pos.x,y=pos.y+minetest.get_meta(pos):get_int("y"),z=pos.z},obpos) + aliveai_electric.lightning2(obs,pos2) + return true + end + end + return true + end, +}) diff --git a/aliveai_threat_eletric/readme.txt b/aliveai_threat_eletric/readme.txt new file mode 100644 index 0000000..3521336 --- /dev/null +++ b/aliveai_threat_eletric/readme.txt @@ -0,0 +1 @@ +electric threat for aliveai \ No newline at end of file diff --git a/aliveai_threat_eletric/textures/aliveai_threat_eletric_core.png b/aliveai_threat_eletric/textures/aliveai_threat_eletric_core.png new file mode 100644 index 0000000000000000000000000000000000000000..4c868f1a8883d40d18c8ac837770b460c4f2a012 GIT binary patch literal 1909 zcmV-*2a5QKP)WFU8GbZ8()Nlj2>E@cM*00!AfL_t(o!|j(zY+Okh z$A4At^;>$k-Q9M)jNP8>iDM^>Lc)-V7~lkA5fVb;4gw@NazJnajYc4G0D-s+2Q&gC z4s1dQ32EdELIh2a39N!-rZPV9Eu-R|w}uQ;TW2~i9QMB)IS^z>dyRrUSqdsX%Q zKlooa@g$vRJI(-b95~f~j{_cX4fqRio{;O6yd6DNfZ2|72>2Q>2jl_Eh}s&U0r*-b z1Y*De8o+l6`B^1zd;bx@Y{$t1F99DiqV`avS(fgg1CkJNZ@kKeO7wJvA4e+fN4}PE zfED1&m9+i(zXdScah?TU1tx*C=>(S2G+kIRN?IVLKh<^JTE;nLE2($^TxU9m0z4S?K}K! z@-#ulMRGR+T308xQ77MQu{`#v`PDtg&Wcv3==mzl5JV)Jz~?Gy`!|mR@FU>;uJP+igXBwm};Vk}|7g9^5D@Q-bfEXc(z`#YvLE>|dgbi(9|sX;mnF;?13 zLk!ap1DvmUNMbBaqdh^FtXjODpR|+-z?w*y8)a4 zq!z^*X2hP2YN2}I{UnqC6ppazkt0UuNO=!uiXpY7%S@;>vb2%FWO*Nsuz?Vrm}X&= zLhV`sDZ!AU@9*et0LP4|ZPGQQ(vzgRm&e1TgN{#(hD(y0)nz0hL#oEj>N=mEp5z%6 zMYWAiM2wD0l8^+KY8@9{4Ar>`?)3duqjG}=;%Z&Zrok{8`Uk6tv0pc z_tkL(!U>cSwPWDQZUC2nc0?jjN>R^`m$RL1-r88<&1w^ifHVyZI>hL7NK&Uji$Owk zmaB`TX^rn5#84(0WkkafJ)ll=!eG_UKA0go>`pu?ELf14fd8x z#Aqxo-Dah>LY8eTx+Ljg(Pg!I4KpRks2-~8;Ucg%)~F19em;t=NfkvZ%*nW~6Mp~C zuHvr)P0vmQDvG#WI(}Am3k&Aj5-kj7$|F2iv=~sE45=*!RGk4;$5IX_iv}SH4wQ?8 ztxb&0p@r3n!)HaH5Kf@9$n}9AR?>ENSAa^|ezULb+QN$hTvsj3e0(HTvlh&?C3aL7 zM`XBAQ|QF^pBN1vixxidc8&ZkwXiVrnGxYQ(1?_mGXr1CtOMWsSIG$AD?r_|6Rz;0 z2v-&sj(uXrlXLSk7hWUUSi|YoX(+*tir7&R<5SRUZ7^5)17YLH{KCWIuqh zMEG~LA&pRB6MJ?d1iHY>yE%UxRXhlMA9xW+n_bU9N{tXn04lHDounB-28AChFJ(r6 z53B=UsHE*bK8?Cy4tTkr$x>!JFuY7c-WzW^f%5D`+%Hnvz_)={Drwt&+LcieI0?J} vJO@nlH`o>6b>L6Hl}h^YE2ID0f8G8L-c21~)Pez^00000NkvXXu0mjfypLre literal 0 HcmV?d00001 diff --git a/aliveai_threat_eletric/textures/aliveai_threat_eletric_core2.png b/aliveai_threat_eletric/textures/aliveai_threat_eletric_core2.png new file mode 100644 index 0000000000000000000000000000000000000000..3ced5c45f36ec29fd4a7ef6c6880ae41c1841ad4 GIT binary patch literal 1877 zcmV-b2demqP)WFU8GbZ8()Nlj2>E@cM*00y~9L_t(o!|j({Y+Oeb z$A2?(ckbTxdhNA$H=E$ZNt-|t)p5#4Ng%>dno3oLfTuiI72*X6kl+y{1TUbd0*ME{ zgoIEL!a`M%iV&1kEs@-WG@)(OjY$zoq{NBcI?k@w_S$>*e#{IHy9sF&iv%L^07n|l z9o=*0{O{Z|=YJ0TuZy@B<*D(o2s{iN=*=TQ1pEy+4V>}d!jW2F?kj+)@o*3D4PZYo z2xQwjR)7M?#X1En5CTo$`yTxING*u|BLGw5;UI7nc&x4CVb7>+&a)mMy{@eQSa!edNnogKptV7@`@RiA0aN^$rFf|@N2>c2d1@fMsWQ9{+M+khEK_W%c({)%>7XXsf zrC?T_>*QkH0*+4Bf*;=#fT{6t7x2rrjvo-#D-WZx_UD{_KsC0!2Y6=q+H~dW<_Rq#2eDgCWulE*2EH&^3x0Pu0DcNQ8G3fO zAn}p9zUxfH=tNLCm6NRZJ33j5_P`Te^OkWGQ}A1g@s?xN#xrk*nW}b4NzrlForrR= zzU;xlBeh`VR)6v~=lg(<0s{q!7G%YiHw2Z5pmK5u8fAmXTZS@%K_$pbsQyM$eMun# z!9vmS*AfV+$9A6yUF>{e$cmzHx~=1p6uxx(2g}>m-)if)9QsMNBZO>@EWEP!ps1WZ zCs`YC3}pn$LOpbNzmU`xBo~L9T$?bMr2Brg-*IJ=BX~4dS=zQR-Em47r1XsPfiFKh z9`@Z4z|?qH21awS_6ttQSY)nzez7|7=bU8zNrNY0J#k!UD6U>toE=$2tij@Fk@<$= zLPO!bV97{m1ddAsf~V@0iKdjZ9$NH!scP#um%`zVPGCP!4n6A&A!Jl;Txv;}&BKre zo5JO$!n9%g>q~e*Ckv4W)^HpS3q*D4QtH%=c*_Ex*a*P;0f{my z1RfTmbSjtP{BBmQuXmk$7A}8eh|LqjeDXBx*=ETVKuUP^<6S);&>qy4;IZaFNg^>w z(ewAvMgaD;b?g^G2F_=Hy)@#`6g)^REOub)*(Fj5JIjXcFDmA~4*jE!y=8~>K=t%m z#!-05p|Vg`YD7zkaf+gF3fR68fZ<%MZ(hrcq;RXEvc0V5!C+P*bD+wGxdFw%^8z&N ze67VJ$5WJr_T$~HJ>I z#SayUvM|m+$uP}`+xH1KI)NGxrQnQ6I5*s!>!^^`6g&w*7R=5H+h1Q|c3I+nrr2{7 zHqAROK4F;ORm4chYtTxNI)~{%d&SMITZ;!ok#B*^8v%F&aP3rDhvgJ${b0){iWI4Z za$ra`yt99ZXc=DH2d^H2Q?r7r*Ayb{{+#YwOqo=QjfI zCeYGGCC)keuNQZ0vhco_VbgPpzARMp(AM3XkXeJI4&Ew=6vj@)RPzv6P0Kjq$KeAV z3yYN(q`KXIv}wY_CrE<3>RU@J-;kG|B`*8#OY&d7|Gk zbD-hIP9sS^Yskn9W74n`-@<5GVGd_#8OPESj%^LW<~2K0T-iF2h!9EQQYB(-)K4aB z!TN?=Fj))E_G-J95++ILxMN;g-O^^}K*Q136kJ_btRL^7J#G#xEXCk0OCGo`*tKS7 zPCzvgAvt0fMShZt^#bsNe?>+BUj^!El<6p8jJ9d%n6zWZOAFJVUV=k!!|-e$?S{ZL zyQ6&w-aD`ORKsy@@Z$7~ma)V|;M0gL+;j!l-)gbrFHu9bSJ?q>GyOxA+$-D^#_ z8~80y@%^YzAXVg)6ha8=G9-ZDMz*skVQ^UbNL>gvjWQ{)4m`b)^Sh~vhkzdfj{lw{MY3lqmu@AZl?Av P00000NkvXXu0mjfzlL+K literal 0 HcmV?d00001 diff --git a/aliveai_threat_eletric/textures/aliveai_threat_eletric_stungun.png b/aliveai_threat_eletric/textures/aliveai_threat_eletric_stungun.png new file mode 100644 index 0000000000000000000000000000000000000000..260c2f07fbf69dce69ac565025e87a791f3ad8c7 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_q%L5N5oWCSL&*WH0gbb!C6ZE-%W$?p=H$2`F^l)5S3);_%z+)_jK*1Y9r96w%vk zapS+*rpDBTb1<&`U9$7hDn{Eq ze1%6tnd*+8%H;0g&`e+x=k=(N``E&)Fs(w^$e1m@IILE1?t|luoX6Ao?YUNbv`G@X z&v)YZx%Z!nS=ASPb*|X;++BFWvFS`jG9{f4E=Mo;_~f$ig(LFJRTeLV4z@=x`1|BA zXT-y^4Bmgl5_-iMthoP)cs!A!p zy}M`}?B!Xex&aUbf$Un{NrR}Gp1(K6@$R$z~3X%b#cE{tAiruF^CbMx9xq^>81BT!G}|9sDB)N#%Z2O`(F!_KZ%-h0_;D&S?(TM0{(1|5z_G*Z-QC6P zVuH*{3IK0Q13(2oKG46TbAo8DWm#R$@%u~yfalM}`NogGg>IUd7N|>Wh&}}@5CjVZ z8yE#aKoLcp%?&se8PDzjf4lG=SI_|X`a3G#6JO%~`!@mb4fd8C2T0$%NBU{F1q8`e zA-ICZ`8VF8&EsJyoyN#&y!xA8^7_wDQOFl4Xa&A|@&_FM-uKZA1EsqSPfw-uMar#Z zP#>fpI$ZVvN@qJ70J*P&nao<%!J4XJ7zRcK2qo2QV|n7weGplPBN3P^q* z4eiZU_A{9^Ov^-R_MtvVZ~9T1eLIfOH*!>&w`*FCSd3Zm$y9u0) zZk#@uQ~&%I06%->Wkf|nQY7*@m5=^#1%NxtD*y}+hw<#|Bz1KfHJK%ou`9#tm2C_t zC=s%agh`jhaeh>JBtbLlB$*wDx!7^vQ@`1<|cA^QTGs zb~wBT-=0oV)AKmJZj5veK@?cNIg7&qnq~m-AfK!F!_AT#fHzLPy0aiC`F*%NGQQ?U zR%YTzy=`Q#X31u=QIZ_w^Cohj3Bf7QHF}Vhdy7~YB(Khp z&*#bM7MfKcZkPm|4*uxO0`L{XLo}Bm;B@SG3y4ai2T_(-{dgIpppm>fgK6rRhKXFn zgXA4%3w8#3Tz2N#0{uvm1KI0F^15w%qflXwWf3<_7EP5!6J9VB0B)Gs^9L%z_kM8Z z>_uxk_H`%0mAi3zJ&m;V1z5Qouj02$>is0QmX-iGxGvksKS}$#0Wb^$r_%<$mc9Uq z*vA$8qtM7eh(sh>C7YazJ^j0Y)9EZ_yQMEs#n+?Dq6$+nMg~F^^2wD6p)x-qxQF^K#KO{Gme()SBy_yPndmHQw2l@NW7z>ul zJsHMPO6Y%`A+DGF3T!t zDj^gWqjM$akLn6BQ^m7>{f~>b?UJqoaBQfb_R%nJ|L$TD^6>v35>zt)%X7=L23rAG zo?8as@V?zO`EvcD^IhV@l0T}m9t1lRMd!3UV^Jq~|J@l}9b`)IiI8gx{z3{d-M7;a3l zxQ-1)o%YdiRRG#Y!yKK8F{@W62raW^GPaU!Mb58%@vE;(riqr!;9XVe5G5Xm?+gc- zoQm<^LWUu^35QyseKbtR&|X5r2M7%xpkrt+-e4PvNEBZ(&vk8;wWT%of2J4VL6&R( zzRe5Y9wR$%XRPn|b4;AQM3<;=H?Q)!jsU~2yh!AO+hk3XFAN^w&`Zyk_*&=Fk;^~b z)|+5GDh@a8PTB73sTgCU;i^HXeKcI5TeKY+2tjm?L?l|OoBw97~jnoL>$Uvyn0+Um*lJh4&nBa$v15b7m92`GFA`&GZ zPck@uq~yS(@||UwE;>{GT|Nevf0t9~R#?|x&{c@eapt+PC;sm>abxL~1KFeU<@0_m zeluCo`OO9)qH_$6A7TF82vWe$;7g-hCS=R=Hy@z|w&VC#3r=~ai#m_H3@zv?oslTr gWsYqpL7UP409)mL?Aa530000007*qoM6N<$f}_{PfB*mh literal 0 HcmV?d00001 diff --git a/aliveai_threat_eletric/textures/aliveai_threats_quantum_monster_lights.png b/aliveai_threat_eletric/textures/aliveai_threats_quantum_monster_lights.png new file mode 100644 index 0000000000000000000000000000000000000000..f839fb73480b9cd5173e66aaeca10cd2427620b1 GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DjSK$uZf!>a)($X?><>&pI+iCcuhDF5r5Qw$7@Jf1F&Ar_~XPBQFkcHnWH@2>rn ztz^nc!4rWQ)Al;eD!F3mFh#kgSRvPQ_M~Zg<~P{#1$~Y&pA^eJd8p@Y{(pOAR#jQk zy>bjUPR_Jd|FAWwI+#{UwLD>k=K2?_$}`L b8{;S4Z&6^~cVsOvs2Dt5{an^LB{Ts5GKZL` literal 0 HcmV?d00001