diff --git a/code/defines/obj/clothing/gloves.dm b/code/defines/obj/clothing/gloves.dm index 11dde80f14..b0a349e241 100644 --- a/code/defines/obj/clothing/gloves.dm +++ b/code/defines/obj/clothing/gloves.dm @@ -60,7 +60,6 @@ siemens_coefficient = 0 protective_temperature = 1100 heat_transfer_coefficient = 0.05 - canremove = 0 /obj/item/clothing/gloves/stungloves/ name = "Stungloves" diff --git a/code/defines/obj/clothing/head.dm b/code/defines/obj/clothing/head.dm index a90b606c3d..55cea8a97d 100644 --- a/code/defines/obj/clothing/head.dm +++ b/code/defines/obj/clothing/head.dm @@ -188,7 +188,6 @@ icon_state = "s-ninja" item_state = "s-ninja_mask" radiation_protection = 0.25 - canremove = 0 see_face = 1 /obj/item/clothing/head/helmet/swat diff --git a/code/defines/obj/clothing/shoes.dm b/code/defines/obj/clothing/shoes.dm index e41652e9c8..7e44948ff2 100644 --- a/code/defines/obj/clothing/shoes.dm +++ b/code/defines/obj/clothing/shoes.dm @@ -33,11 +33,10 @@ name = "ninja shoes" desc = "A pair of running shoes, excellent for running and even better for smashing skulls." icon_state = "s-ninja" - slowdown = -1 + slowdown = 0 protective_temperature = 700 permeability_coefficient = 0.01 flags = NOSLIP - canremove = 0 /obj/item/clothing/shoes/white name = "White Shoes" diff --git a/code/defines/obj/clothing/suit.dm b/code/defines/obj/clothing/suit.dm index 9d03dc4d3b..59271a796b 100644 --- a/code/defines/obj/clothing/suit.dm +++ b/code/defines/obj/clothing/suit.dm @@ -248,10 +248,10 @@ /obj/item/clothing/suit/armor/swat name = "swat suit" desc = "A heavily armored suit that protects against moderate damage. Used in special operations." - icon_state = "deathcommando" + icon_state = "deathsquad" item_state = "swat_suit" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - slowdown = 0.5 + slowdown = 1 allowed = list(/obj/item/weapon/gun,/obj/item/weapon/ammo,/obj/item/weapon/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) // FIRE SUITS @@ -360,12 +360,14 @@ icon_state = "s-ninja" item_state = "s-ninja_suit" allowed = list(/obj/item/weapon/gun,/obj/item/weapon/ammo,/obj/item/weapon/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) - slowdown = 0 + slowdown = 1 radiation_protection = 0.75 - canremove = 0 + var/affecting = null var/active = 0 var/charge = 10000.0 var/maxcharge = 10000.0//Super high capacity charge but abilities eat a chunk of it./N + var/initialize = 0 + var/sbombs = 10.0 /obj/item/clothing/suit/space/pirate name = "pirate coat" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index f67d70cd1f..8ddbfdf1f8 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -1259,9 +1259,10 @@ Total SMES charging rate should not exceed total power generation rate, or an ov throwforce = 1//Throwing or dropping the item deletes it. throw_speed = 1 throw_range = 1 - w_class = 4.0//So you can't hide in your pocket or some such. + w_class = 4.0//So you can't hide it in your pocket or some such. flags = FPRINT | TABLEPASS | NOSHIELD var/affecting = null + var/datum/effects/system/spark_spread/spark_system /obj/item/weapon/table_parts name = "table parts" diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index a024601203..468d0f704d 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -128,6 +128,13 @@ src.operating = -1 if(istype(I, /obj/item/weapon/blade)) if(istype(src, /obj/machinery/door/airlock)) + var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src.loc, 'blade1.ogg', 50, 1) + playsound(src.loc, "sparks", 50, 1) + for(var/mob/O in viewers(user, 3)) + O.show_message(text("\blue The door has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2) if((!src:arePowerSystemsOn()) || (stat & NOPOWER) || src:isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) var/obj/door_assembly/temp var/failsafe=0 @@ -145,16 +152,12 @@ temp.anchored=0 step_away(temp,usr,15) else del(temp) - for(var/mob/O in viewers(user, 3)) - O.show_message(text("\blue The door has been sliced open by [] with an energy blade and kicked out of the way!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2) del(src) return else src:welded = 0 src:locked = 0 update_icon() - for(var/mob/O in viewers(user, 3)) - O.show_message(text("\blue The door has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2) flick("door_spark", src) sleep(6) open() diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index 82bf9d2001..542a848076 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -57,16 +57,23 @@ invisibility = 2 density = 1 var/lasers = 0 - var/health = 18 + var/health = 40 var/obj/machinery/turretcover/cover = null var/popping = 0 var/wasvalid = 0 var/lastfired = 0 var/shot_delay = 30 //3 seconds between shots + var/datum/effects/system/spark_spread/spark_system use_power = 1 idle_power_usage = 50 active_power_usage = 300 +/obj/machinery/turret/New() + src.spark_system = new /datum/effects/system/spark_spread + spark_system.set_up(5, 0, src) + spark_system.attach(src) + ..() + /obj/machinery/turretcover name = "pop-up turret cover" icon = 'turrets.dmi' @@ -275,14 +282,23 @@ /obj/machinery/turret/bullet_act(flag) if (flag == PROJECTILE_BULLET) - src.health -= 4 + src.health -= 17 else if (flag == PROJECTILE_TASER) //taser src.health -= 1 else if(flag == PROJECTILE_PULSE) - src.health -= 10 + src.health -= 30 else src.health -= 2 + src.spark_system.start() + if (src.health <= 0) + src.die() + return +/obj/machinery/turret/attackby(obj/item/weapon/W, mob/user)//I can't believe no one added this before/N + ..() + playsound(src.loc, 'smash.ogg', 60, 1) + src.spark_system.start() + src.health -= W.force * 0.5 if (src.health <= 0) src.die() return @@ -377,7 +393,7 @@ for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message(text("\red [] has slashed at []!", M, src), 1) - src.health -= 4 + src.health -= 15 if (src.health <= 0) src.die() else diff --git a/code/game/objects/items/clothing.dm b/code/game/objects/items/clothing.dm index 6a4ea6ce39..19a7bc4298 100644 --- a/code/game/objects/items/clothing.dm +++ b/code/game/objects/items/clothing.dm @@ -294,21 +294,148 @@ NINJA MASK ..() //SPESS NINJA STUFF -/obj/item/clothing/suit/space/space_ninja/verb/toggle() + +/obj/item/clothing/suit/space/space_ninja/New() +//Fix for the examine issue mentioned below. Followup: this doesn't fix anything. I'll need to take a look at how examine works. + src.verbs += /obj/item/clothing/suit/space/space_ninja/proc/init + +/obj/item/clothing/suit/space/space_ninja/proc/init() + set name = "Initialize Suit" + set desc = "Initializes the suit for field operation." + set category = "Object" + + if(usr.mind&&usr.mind.special_role=="Space Ninja"&&usr:wear_suit==src&&!src.initialize) + var/mob/living/carbon/human/U = usr + U << "\blue Now initializing..." + sleep(40) + if(!istype(U.head, /obj/item/clothing/head/helmet/space/space_ninja)) + U << "\red ERROR: 100113 UNABLE TO LOCATE HEAD GEAR\nABORTING..." + return + if(!istype(U.shoes, /obj/item/clothing/shoes/space_ninja)) + U << "\red ERROR: 122011 UNABLE TO LOCATE FOOT GEAR\nABORTING..." + return + if(!istype(U.gloves, /obj/item/clothing/gloves/space_ninja)) + U << "\red ERROR: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING..." + return + U << "\blue Securing external locking mechanism...\nNeural-net established." + U.head:canremove=0 + U.shoes:canremove=0 + U.gloves:canremove=0 + src.canremove=0 + sleep(40) + U << "\blue Extending neural-net interface...\nNow monitoring brain wave pattern..." + sleep(40) + if(U.stat==2) + U << "\red FATAL ERROR: 344--93#&&21 BRAIN WAV3 PATT$RN RED\nA-A-AB0RTING..." + return + U << "\blue Linking neural-net interface...\nPattern \green GREEN\blue, continuing operation." + sleep(40) + U << "\blue VOID-shift device status: ONLINE.\nCLOAK-tech device status: ONLINE." + sleep(40) + U << "\blue Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: [src.charge]." + sleep(40) + U << "\blue All systems operational. Welcome to SpiderOS, [U.real_name]." + U.verbs += /mob/proc/ninjashift + U.verbs += /mob/proc/ninjajaunt + U.verbs += /mob/proc/ninjasmoke + U.verbs += /mob/proc/ninjapulse + U.verbs += /mob/proc/ninjablade + U.mind.special_verbs += /mob/proc/ninjashift + U.mind.special_verbs += /mob/proc/ninjajaunt + U.mind.special_verbs += /mob/proc/ninjasmoke + U.mind.special_verbs += /mob/proc/ninjapulse + U.mind.special_verbs += /mob/proc/ninjablade + src.verbs -= /obj/item/clothing/suit/space/space_ninja/proc/init + src.verbs += /obj/item/clothing/suit/space/space_ninja/proc/deinit + src.verbs += /obj/item/clothing/suit/space/space_ninja/proc/toggle + src.initialize=1 + src.affecting=U + src.slowdown=0 + U.shoes:slowdown-- + else + if(usr.mind&&usr.mind.special_role=="Space Ninja") + usr << "\red You do not understand how this suit functions." + else if(usr:wear_suit!=src) + usr << "\red You must be wearing the suit to use this function." + else if(src.initialize) + usr << "\red The suit is already functioning." + else + usr << "\red You cannot use this function at this time." + return + +/obj/item/clothing/suit/space/space_ninja/proc/deinit() + set name = "De-Initialize Suit" + set desc = "Begins procedure to remove the suit." + set category = "Object" + + if(!src.initialize) + usr << "\red The suit is not initialized." + return + if(alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No")=="No") + return + + var/mob/living/carbon/human/U = usr + + U << "\blue Now de-initializing..." + sleep(40) + U.verbs -= /mob/proc/ninjashift + U.verbs -= /mob/proc/ninjajaunt + U.verbs -= /mob/proc/ninjasmoke + U.verbs -= /mob/proc/ninjapulse + U.verbs -= /mob/proc/ninjablade + U.mind.special_verbs -= /mob/proc/ninjashift + U.mind.special_verbs -= /mob/proc/ninjajaunt + U.mind.special_verbs -= /mob/proc/ninjasmoke + U.mind.special_verbs -= /mob/proc/ninjapulse + U.mind.special_verbs -= /mob/proc/ninjablade + U << "\blue Logging off, [U:real_name]. Shutting down SpiderOS." + sleep(40) + U << "\blue Primary system status: OFFLINE.\nBackup system status: OFFLINE." + sleep(40) + U << "\blue VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE." + sleep(40) + if(U.stat==2||U.health<=0) + U << "\red FATAL ERROR: 412--GG##&77 BRAIN WAV3 PATT$RN RED\nI-I-INITIATING S-SELf DeStrCuCCCT%$#@@!!$^#!..." + spawn(10) + U << "\red #3#" + spawn(20) + U << "\red #2#" + spawn(30) + U << "\red #1#: G00DBYE" + U.gib() + return + U << "\blue Disconnecting neural-net interface...\greenSuccess\blue." + sleep(40) + U << "\blue Disengaging neural-net interface...\greenSuccess\blue." + sleep(40) + if(istype(U.head, /obj/item/clothing/head/helmet/space/space_ninja)) + U.head.canremove=1 + if(istype(U.shoes, /obj/item/clothing/shoes/space_ninja)) + U.shoes:canremove=1 + U.shoes:slowdown++ + if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)) + U.gloves:canremove=1 + src.canremove=1 + U << "\blue Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED." + src.verbs += /obj/item/clothing/suit/space/space_ninja/proc/init + src.verbs -= /obj/item/clothing/suit/space/space_ninja/proc/deinit + src.verbs -= /obj/item/clothing/suit/space/space_ninja/proc/toggle + src.initialize=0 + src.affecting=null + src.slowdown=1 + return + +/obj/item/clothing/suit/space/space_ninja/proc/toggle() set name = "Toggle Stealth" set desc = "Toggles the internal CLOAK-tech on or off." set category = "Object" + if(usr:wear_suit!=src||!src.initialize) + usr << "\red You suit must be worn and active to use this function." + return if(src.active) spawn(0) - var/atom/movable/overlay/animation = new(usr.loc) - animation.icon = 'mob.dmi' - animation.icon_state = "blank" - animation.layer = usr.layer + 1 - animation.master = usr - flick("uncloak", animation) - sleep(15) - del(animation) + anim(usr.loc,'mob.dmi',usr,"uncloak") src.active=0 usr << "\blue You are now visible." for(var/mob/O in oviewers(usr, null)) @@ -316,14 +443,7 @@ NINJA MASK else spawn(0) - var/atom/movable/overlay/animation = new(usr.loc) - animation.icon = 'mob.dmi' - animation.icon_state = "blank" - animation.layer = usr.layer + 1 - animation.master = usr - flick("cloak", animation) - sleep(15) - del(animation) + anim(usr.loc,'mob.dmi',usr,"cloak") src.active=1 usr << "\blue You are now invisible to normal detection." for(var/mob/O in oviewers(usr, null)) @@ -335,13 +455,18 @@ NINJA MASK //Doesn't really make any sense /obj/item/clothing/suit/space/space_ninja/examine() ..() - if(src.active) - usr << "The CLOAK-tech device is active." - else - usr << "The CLOAK-tech device is offline." + if(src.initialize) + usr << "All systems operational. Current energy capacity: [src.charge]." + if(src.active) + usr << "The CLOAK-tech device is active." + else + usr << "The CLOAK-tech device is offline." +/obj/item/clothing/mask/gas/space_ninja/New() + src.verbs += /obj/item/clothing/mask/gas/space_ninja/proc/togglev + src.verbs += /obj/item/clothing/mask/gas/space_ninja/proc/switchm -/obj/item/clothing/mask/gas/space_ninja/verb/togglev() +/obj/item/clothing/mask/gas/space_ninja/proc/togglev() set name = "Toggle Voice" set desc = "Toggles the voice synthesizer on or off." set category = "Object" @@ -385,7 +510,7 @@ NINJA MASK usr << "The voice synthesizer is already deactivated." return -/obj/item/clothing/mask/gas/space_ninja/verb/switchm() +/obj/item/clothing/mask/gas/space_ninja/proc/switchm() set name = "Switch Mode" set desc = "Switches between Night Vision, Meson, or Thermal vision modes." set category = "Object" diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index b413f96b3e..f5d400425f 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -53,9 +53,14 @@ STUN BATON // BLADE -//Two procs to delete the item if dropped or thrown. //Most of the other special functions are handled in their own files. +/obj/item/weapon/blade/New() + src.spark_system = new /datum/effects/system/spark_spread + spark_system.set_up(5, 0, src) + spark_system.attach(src) + return + /obj/item/weapon/blade/dropped() del(src) return diff --git a/code/game/objects/secstorage/secstorage.dm b/code/game/objects/secstorage/secstorage.dm index 6681038558..686c20bbea 100644 --- a/code/game/objects/secstorage/secstorage.dm +++ b/code/game/objects/secstorage/secstorage.dm @@ -102,6 +102,11 @@ overlays += image('storage.dmi', icon_locking) locked = 0 if(istype(W, /obj/item/weapon/blade)) + var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src.loc, 'blade1.ogg', 50, 1) + playsound(src.loc, "sparks", 50, 1) user << "You slice through the lock on [src]." else user << "You short out the lock on [src]." diff --git a/code/game/objects/secure_closets.dm b/code/game/objects/secure_closets.dm index fb24cd56a9..169baa0bb7 100644 --- a/code/game/objects/secure_closets.dm +++ b/code/game/objects/secure_closets.dm @@ -172,6 +172,11 @@ src.locked = 0 src.icon_state = src.icon_broken if(istype(W, /obj/item/weapon/blade)) + var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src.loc, 'blade1.ogg', 50, 1) + playsound(src.loc, "sparks", 50, 1) for(var/mob/O in viewers(user, 3)) O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2) else diff --git a/code/game/objects/storage/crates.dm b/code/game/objects/storage/crates.dm index f8961aa204..472c8459fe 100644 --- a/code/game/objects/storage/crates.dm +++ b/code/game/objects/storage/crates.dm @@ -252,7 +252,7 @@ overlays += emag overlays += sparks spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface* - playsound(src.loc, 'sparks4.ogg', 75, 1) + playsound(src.loc, "sparks", 60, 1) src.locked = 0 src.broken = 1 user << "\blue You unlock the [src]." diff --git a/code/game/objects/tables_racks.dm b/code/game/objects/tables_racks.dm index 3cf15f3c85..d03232cdc8 100644 --- a/code/game/objects/tables_racks.dm +++ b/code/game/objects/tables_racks.dm @@ -126,6 +126,11 @@ return if(istype(W, /obj/item/weapon/blade)) + var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src.loc, 'blade1.ogg', 50, 1) + playsound(src.loc, "sparks", 50, 1) for(var/mob/O in viewers(user, 4)) O.show_message(text("\blue The table was sliced apart by []!", user), 1, text("\red You hear metal coming apart."), 2) new /obj/item/weapon/table_parts( src.loc ) @@ -189,6 +194,11 @@ return if(istype(W, /obj/item/weapon/blade)) + var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src.loc, 'blade1.ogg', 50, 1) + playsound(src.loc, "sparks", 50, 1) for(var/mob/O in viewers(user, 4)) O.show_message(text("\blue The reinforced table was sliced apart by []!", user), 1, text("\red You hear metal coming apart."), 2) new /obj/item/weapon/table_parts/reinforced( src.loc ) diff --git a/code/game/turf.dm b/code/game/turf.dm index b0d5a380fe..39b70d042e 100644 --- a/code/game/turf.dm +++ b/code/game/turf.dm @@ -361,9 +361,18 @@ return else if(istype(W, /obj/item/weapon/blade)) - dismantle_wall(1) - for(var/mob/O in viewers(user, 5)) - O.show_message(text("\blue The wall was sliced through by []!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2) + var/turf/T = user.loc + user << "\blue Now slicing through wall." + W:spark_system.start() + playsound(src.loc, "sparks", 50, 1) + sleep(70) + if ((user.loc == T && user.equipped() == W)) + W:spark_system.start() + playsound(src.loc, 'blade1.ogg', 50, 1) + playsound(src.loc, "sparks", 50, 1) + dismantle_wall(1) + for(var/mob/O in viewers(user, 5)) + O.show_message(text("\blue The wall was sliced apart by []!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2) return else if(istype(W,/obj/item/apc_frame)) @@ -424,14 +433,8 @@ user << "\blue You removed the support rods." W:welding = 1 - if(istype(W, /obj/item/weapon/blade)) - var/turf/T = user.loc - user << "\blue Slicing through reinforced wall." - sleep(100) - if ((user.loc == T && user.equipped() == W)) - dismantle_wall(1) - for(var/mob/O in viewers(user, 5)) - O.show_message(text("\blue The reinforced wall was sliced through by []!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2) + else if(istype(W, /obj/item/weapon/blade)) + user << "\blue This wall is too thick to slice through. You will need to find a different path." return else if (istype(W, /obj/item/weapon/wrench)) diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index 395dc6abff..1dc8b88160 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -176,7 +176,7 @@ Useful for copy pasta since I'm lazy.*/ set category = "Fun" set name = "Spawn Space Ninja" - set desc = "Spawns a space ninja for when you just need a teenager with attitude." + set desc = "Spawns a space ninja for when you need a teenager with attitude." if(!src.authenticated || !src.holder) src << "Only administrators may use this command." return @@ -249,24 +249,12 @@ Useful for copy pasta since I'm lazy.*/ new_ninja.internal = OXYTANK //So the poor ninja has something to breath when they spawn in spess. new_ninja.internals.icon_state = "internal1" - new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan. The dreaded \red SPACE NINJA!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training! \nYour current mission is: \red [input]" - - new_ninja.verbs += /mob/proc/ninjashift - new_ninja.verbs += /mob/proc/ninjajaunt - new_ninja.verbs += /mob/proc/ninjasmoke - new_ninja.verbs += /mob/proc/ninjapulse - new_ninja.verbs += /mob/proc/ninjablade - new_ninja.mind.special_verbs += /mob/proc/ninjashift - new_ninja.mind.special_verbs += /mob/proc/ninjajaunt - new_ninja.mind.special_verbs += /mob/proc/ninjasmoke - new_ninja.mind.special_verbs += /mob/proc/ninjapulse - new_ninja.mind.special_verbs += /mob/proc/ninjablade + new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan, [new_ninja.real_name]. The dreaded \red SPACE NINJA!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training (initialize your suit by right clicking on it)! \nYour current mission is: \red [input]" message_admins("\blue [admin_name] has spawned [new_ninja.key] as a Space Ninja. Hide yo children!", 1) log_admin("[admin_name] used Spawn Space Ninja.") - //SPACE NINJA ABILITIES /* @@ -306,6 +294,7 @@ Useful for copy pasta since I'm lazy.*/ var/datum/effects/system/bad_smoke_spread/smoke = new /datum/effects/system/bad_smoke_spread() smoke.set_up(10, 0, src.loc) smoke.start() + playsound(src.loc, 'bamf.ogg', 50, 2) //subtract cost(5) @@ -369,11 +358,17 @@ Useful for copy pasta since I'm lazy.*/ return picked = pick(turfs) spawn(0) + playsound(src.loc, "sparks", 50, 1) anim(mobloc,'mob.dmi',src,"phaseout") src.loc = picked spawn(0) + var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src.loc, 'Deconstruct.ogg', 50, 1) + playsound(src.loc, "sparks", 50, 1) anim(src.loc,'mob.dmi',src,"phasein") spawn(0) //Any living mobs in teleport area are gibbed. @@ -387,7 +382,7 @@ Useful for copy pasta since I'm lazy.*/ /mob/proc/ninjashift(var/turf/T in oview()) set name = "Phase Shift" set desc = "Utilizes the internal VOID-shift device to rapidly transit to a destination in view." - set category = null//So it does not show up on the panel can still be right-clicked. + set category = null//So it does not show up on the panel but can still be right-clicked. if(src.stat) src << "\red You must be conscious to do this." @@ -401,11 +396,17 @@ Useful for copy pasta since I'm lazy.*/ var/turf/mobloc = get_turf(src.loc) spawn(0) + playsound(src.loc, 'sparks4.ogg', 50, 1) anim(mobloc,'mob.dmi',src,"phaseout") src.loc = T spawn(0) + var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src.loc, 'Deconstruct.ogg', 50, 1) + playsound(src.loc, 'sparks2.ogg', 50, 1) anim(src.loc,'mob.dmi',src,"phasein") spawn(0) //Any living mobs in teleport area are gibbed. @@ -447,6 +448,8 @@ Useful for copy pasta since I'm lazy.*/ if(!src.get_active_hand()&&!istype(src.get_inactive_hand(), /obj/item/weapon/blade)) var/obj/item/weapon/blade/W = new() + W.spark_system.start() + playsound(src.loc, "sparks", 50, 1) src.put_in_hand(W) /* /mob/proc/ninjastar(var/mob/living/M in oview()) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index c3aad767a4..90811f1409 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -11,7 +11,7 @@ emote("deathgasp") //let the world KNOW WE ARE DEAD //For ninjas exploding when they die./N - if (src.mind&&src.mind.special_role == "Space Ninja") + if (istype(src.wear_suit, /obj/item/clothing/suit/space/space_ninja)&&src.wear_suit:initialize) var/location = src.loc explosion(location, 1, 2, 3, 4) diff --git a/sound/weapons/blade1.ogg b/sound/weapons/blade1.ogg new file mode 100644 index 0000000000..b590ffc9fd Binary files /dev/null and b/sound/weapons/blade1.ogg differ