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