diff --git a/code/defines/obj/clothing/mask.dm b/code/defines/obj/clothing/mask.dm
index 4cdfab72dfc..50996932256 100644
--- a/code/defines/obj/clothing/mask.dm
+++ b/code/defines/obj/clothing/mask.dm
@@ -37,10 +37,11 @@
/obj/item/clothing/mask/gas/space_ninja
name = "ninja mask"
- desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement. Can disguise your voice."
+ desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement."
icon_state = "s-ninja"
item_state = "s-ninja_mask"
- vchange = 1
+ var/mode = 1// 1=Night Vision |2=Thermal |3=Meson
+ vchange = 0
/obj/item/clothing/mask/gas/voice
name = "gas mask"
diff --git a/code/defines/obj/clothing/suit.dm b/code/defines/obj/clothing/suit.dm
index 4fd18d12cfb..76d76c03581 100644
--- a/code/defines/obj/clothing/suit.dm
+++ b/code/defines/obj/clothing/suit.dm
@@ -347,6 +347,8 @@
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
radiation_protection = 0.75
+ var/active = 0
+ var/energy = 100
/obj/item/clothing/suit/space/pirate
name = "pirate coat"
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index fc20e18a10b..2f2eaa41659 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -68,8 +68,12 @@
for (var/mob/O in viewers(src, null))
if (get_dist(src, O) > src.range)
continue
- if ((istype(O, /mob/living/carbon/human) && (istype(O:glasses, /obj/item/clothing/glasses/sunglasses))))
- continue
+ if (istype(O, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = O
+ if (istype(H.glasses, /obj/item/clothing/glasses/sunglasses)) continue
+ if (istype(H.head, /obj/item/clothing/head/helmet/welding))
+ if(!H.head:up) continue
+ if (istype(H.wear_mask, /obj/item/clothing/mask/gas/space_ninja)) continue
if (istype(O, /mob/living/carbon/alien))//So aliens don't get flashed (they have no external eyes)/N
continue
diff --git a/code/game/objects/devices/flash.dm b/code/game/objects/devices/flash.dm
index 181f1d3c454..ae1dfb1a6c4 100644
--- a/code/game/objects/devices/flash.dm
+++ b/code/game/objects/devices/flash.dm
@@ -13,9 +13,11 @@
if (istype(H.head, /obj/item/clothing/head/helmet/welding))
if(!H.head:up)
safety = 1
+ if (istype(H.wear_mask, /obj/item/clothing/mask/gas/space_ninja))
+ safety = 1
if (istype(M, /mob/living/carbon/alien))//So aliens don't get flashed (they have no external eyes)/N
safety = 1
- if(isrobot(user))
+ if (isrobot(user))
spawn(0)
var/atom/movable/overlay/animation = new(user.loc)
animation.layer = user.layer + 1
diff --git a/code/game/objects/items/clothing.dm b/code/game/objects/items/clothing.dm
index 98d02ce367c..60b922dd446 100644
--- a/code/game/objects/items/clothing.dm
+++ b/code/game/objects/items/clothing.dm
@@ -8,7 +8,8 @@ SWAT SUIT
CHAMELEON JUMPSUIT
DEATH COMMANDO GAS MASK
THERMAL GLASSES
-
+NINJA SUIT
+NINJA MASK
*/
@@ -290,4 +291,101 @@ THERMAL GLASSES
M.disabilities |= 1
spawn(100)
M.disabilities &= ~1
- ..()
\ No newline at end of file
+ ..()
+
+//SPESS NINJA STUFF
+/obj/item/clothing/suit/space/space_ninja/verb/toggle()
+ set name = "Toggle Stealth"
+ set desc = "Toggles the internal CLOAK-tech on or off."
+ set category = "Object"
+
+ 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)
+ src.active=0
+ usr << "\blue You are now visible."
+ for(var/mob/O in oviewers(usr, null))
+ O << "[usr.name] appears from thin air!"
+
+ 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)
+ src.active=1
+ usr << "\blue You are now invisible to normal detection."
+ for(var/mob/O in oviewers(usr, null))
+ O << "[usr.name] vanishes into thin air!"
+
+//So apparently, examine won't show up as a verb when
+//viewing an object equipped on the hud
+//and that object having other verbs?
+//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."
+
+
+/obj/item/clothing/mask/gas/space_ninja/verb/togglev()
+ set name = "Toggle Voice"
+ set desc = "Toggles the voice synthesizer on or off."
+ set category = "Object"
+ if(src.vchange==0)
+ src.vchange=1
+ usr << "You enable the voice voice synthesizer."
+ else
+ src.vchange=0
+ usr << "You disable the voice synthesizer."
+
+/obj/item/clothing/mask/gas/space_ninja/verb/switchm()
+ set name = "Switch Mode"
+ set desc = "Switches between Night Vision, Meson, or Thermal vision modes."
+ set category = "Object"
+ //Have to reset these manually since life.dm is retarded like that. Go figure.
+ switch(src.mode)
+ if(1)
+ src.mode=2
+ usr.see_in_dark = 2
+ usr << "Switching mode to Thermal Scanner."
+ if(2)
+ src.mode=3
+ usr.see_invisible = 0
+ usr.sight &= ~SEE_MOBS
+ usr << "Switching mode to Meson Scanner."
+ if(3)
+ src.mode=1
+ usr.sight &= ~SEE_TURFS
+ usr << "Switching mode to Night Vision."
+
+/obj/item/clothing/mask/gas/space_ninja/examine()
+ ..()
+ var/mode = "Night Vision"
+ var/voice = "inactive"
+ switch(src.mode)
+ if(1)
+ mode = "Night Vision"
+ if(2)
+ mode = "Thermal Scanner"
+ if(3)
+ mode = "Meson Scanner"
+ if(src.vchange==0)
+ voice = "inactive"
+ else
+ voice = "active"
+ usr << "[mode] is active."
+ usr << "Voice mimicking algorithm is [voice]."
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/guns_ammo.dm b/code/game/objects/items/weapons/guns_ammo.dm
index 1cba26e8e7f..d592756120c 100644
--- a/code/game/objects/items/weapons/guns_ammo.dm
+++ b/code/game/objects/items/weapons/guns_ammo.dm
@@ -510,7 +510,6 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
/obj/item/weapon/gun/detectiverevolver/attack(mob/M as mob, mob/user as mob)
src.add_fingerprint(user)
- var/mob/living/carbon/human/H = M
var/detective = (istype(user:w_uniform, /obj/item/clothing/under/det) && istype(user:head, /obj/item/clothing/head/det_hat) && istype(user:wear_suit, /obj/item/clothing/suit/det_suit))
// ******* Check
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index 758c378ab7c..6ff7bc1a8b1 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -141,10 +141,10 @@ KNIFE
M.weakened += 1
M.bruteloss += 2
if(prob(50))
- playsound(M, 'trayhit1.wav', 50, 1)
+ //playsound(M, 'trayhit1.wav', 50, 1)
return
else
- playsound(M, 'trayhit2.wav', 50, 1) //sound playin'
+ //playsound(M, 'trayhit2.wav', 50, 1) //sound playin'
return //it always returns, but I feel like adding an extra return just for safety's sakes. EDIT; Oh well I won't :3
@@ -155,12 +155,12 @@ KNIFE
else
M.bruteloss +=5
if(prob(50))
- playsound(M, 'trayhit1.wav', 50, 1)
+ //playsound(M, 'trayhit1.wav', 50, 1)
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] slams [] with the tray!", user, M), 1)
return
else
- playsound(M, 'trayhit2.wav', 50, 1) //we applied the damage, we played the sound, we showed the appropriate messages. Time to return and stop the proc
+ //playsound(M, 'trayhit2.wav', 50, 1) //we applied the damage, we played the sound, we showed the appropriate messages. Time to return and stop the proc
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] slams [] with the tray!", user, M), 1)
return
@@ -171,11 +171,11 @@ KNIFE
if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES)))
M << "\red You get slammed in the face with the tray, against your mask!"
if(prob(50))
- playsound(M, 'trayhit1.wav', 50, 1)
+ //playsound(M, 'trayhit1.wav', 50, 1)
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] slams [] with the tray!", user, M), 1)
else
- playsound(M, 'trayhit2.wav', 50, 1) //sound playin'
+ //playsound(M, 'trayhit2.wav', 50, 1) //sound playin'
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] slams [] with the tray!", user, M), 1)
if(prob(10))
@@ -189,11 +189,11 @@ KNIFE
else //No eye or head protection, tough luck!
M << "\red You get slammed in the face with the tray!"
if(prob(50))
- playsound(M, 'trayhit1.wav', 50, 1)
+ // playsound(M, 'trayhit1.wav', 50, 1)
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] slams [] in the face with the tray!", user, M), 1)
else
- playsound(M, 'trayhit2.wav', 50, 1) //sound playin' again
+ //playsound(M, 'trayhit2.wav', 50, 1) //sound playin' again
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] slams [] in the face with the tray!", user, M), 1)
if(prob(30))
diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm
index b2dc2c4b699..6f3770952f9 100644
--- a/code/modules/admin/verbs/striketeam.dm
+++ b/code/modules/admin/verbs/striketeam.dm
@@ -216,7 +216,7 @@ Useful for copy pasta since I'm lazy.*/
new_ninja.equip_if_possible(new /obj/item/clothing/gloves/space_ninja(new_ninja), new_ninja.slot_gloves)
new_ninja.equip_if_possible(new /obj/item/clothing/head/helmet/space/space_ninja(new_ninja), new_ninja.slot_head)
new_ninja.equip_if_possible(new /obj/item/clothing/mask/gas/space_ninja(new_ninja), new_ninja.slot_wear_mask)
-// new_ninja.equip_if_possible(new /obj/item/clothing/glasses/thermal(new_ninja), new_ninja.slot_glasses) //These look ugly without the mask. And you will be able to take off the mask.
+// new_ninja.equip_if_possible(new /obj/item/clothing/glasses/thermal(new_ninja), new_ninja.slot_glasses) //No longer necessary.
new_ninja.equip_if_possible(new /obj/item/device/flashlight(new_ninja), new_ninja.slot_belt)
new_ninja.equip_if_possible(new /obj/item/weapon/plastique(new_ninja), new_ninja.slot_r_store)
new_ninja.equip_if_possible(new /obj/item/weapon/plastique(new_ninja), new_ninja.slot_l_store)
@@ -255,12 +255,14 @@ Useful for copy pasta since I'm lazy.*/
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/phaseshift
- new_ninja.verbs += /mob/proc/phasejaunt
- new_ninja.verbs += /mob/proc/smokebomb
- new_ninja.mind.special_verbs += /mob/proc/phaseshift
- new_ninja.mind.special_verbs += /mob/proc/phasejaunt
- new_ninja.mind.special_verbs += /mob/proc/smokebomb
+ 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.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
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.")
@@ -269,7 +271,8 @@ Useful for copy pasta since I'm lazy.*/
//Smoke
//Summons smoke in radius of user.
-/mob/proc/smokebomb()
+//Not sure why this would be useful (it's not) but whatever. Ninjas need their smoke bombs.
+/mob/proc/ninjasmoke()
set name = "Smoke Bomb"
set desc = "Blind your enemies momentarily with a well-placed smoke bomb."
set category = "Ninja"
@@ -283,12 +286,12 @@ 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()
- //subtract cost
+ //subtract cost(LOW)
//9-10 Tile Teleport
//Click to to teleport 9-10 tiles in direction facing.
-/mob/proc/phasejaunt()
+/mob/proc/ninjajaunt()
set name = "Phase Jaunt"
set desc = "Utilizes the internal VOID-shift device to rapidly transit in direction facing."
set category = "Ninja"
@@ -365,11 +368,16 @@ Useful for copy pasta since I'm lazy.*/
flick("phasein", animation)
sleep(15)
del(animation)
- //subtract cost
+
+ spawn(0) //Any living mobs in teleport area are gibbed.
+ for(var/mob/living/M in picked)
+ if(M==src) continue
+ M.gib()
+ //subtract cost(MED)
//Right Click Teleport
//Right click to teleport somewhere, almost exactly like admin jump to turf.
-/mob/proc/phaseshift(var/turf/T in oview())
+/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 = "Ninja"
@@ -406,16 +414,31 @@ Useful for copy pasta since I'm lazy.*/
flick("phasein", animation)
sleep(15)
del(animation)
- //subtract cost
-/*
+ spawn(0) //Any living mobs in teleport area are gibbed.
+ for(var/mob/living/M in T)
+ if(M==src) continue
+ M.gib()
+ //subtract cost(HIGH)
+
//EMP Pulse
//Disables nearby tech equipment.
-name = ""
-tab = "ninja"
-desc = ""
-cost = 0
+/mob/proc/ninjapulse()
+ set name = "EM Burst"
+ set desc = "Disable any nearby technology with a electro-magnetic pulse."
+ set category = "Ninja"
+ if(src.stat)
+ src << "\red You must be conscious to do this."
+ return
+ //add energy cost check
+ //add warning message for low energy
+
+ empulse(src, 4, 6) //Procs sure are nice. Slihgtly weaker than wizard's disable tch.
+
+ //subtract cost(HIGH)
+
+/*
//Summon Energy Blade
//Summons a blade of energy in active hand.
name = ""
@@ -423,21 +446,7 @@ tab = "ninja"
desc = ""
cost = 0
-//Toggle vision
-//Toggles between heat, meson, and night vision. Will be a function of the mask.
-switch()
- if(1)
- src.sight |= SEE_TURFS
- src.blahblah.mode=2
- if(2)
- src.see_in_dark = 5
- src.blahblah.mode=3
- if(3)
- src.sight |= SEE_MOBS
- src.blahblah.mode=1
-
-//Toggle Stealth
-Will be a function of the suit, much like a regular cloak.
+//Make untrackable by AI.
*/
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 224ecb0edf9..0599da7da9c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1337,6 +1337,11 @@
shielded = 2
break
+ for (var/obj/item/clothing/suit/space/space_ninja/S in src)
+ if (S.active)
+ shielded = 2
+ break
+
if (shielded == 2)
src.invisibility = 2
else
@@ -2696,7 +2701,7 @@
var/obj/item/clothing/gloves/G = src.gloves
siemens_coeff = G.siemens_coefficient
return ..(shock_damage,source,siemens_coeff)
-
+
/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn)
..()
src.UpdateDamageIcon()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index e930a1d27bc..f83b2b24771 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -110,7 +110,7 @@
::::::::::::::::::::::::"~-,_::::::::::::::"~-,_:::"-,/|/\::::::::::: \::: \"-/|::|
:::::::::::::::::::::::::::::::"~-,__:::::::::::',"-,:::"_|/\:|\: : : : \::\":/|\|
::::::::::::::::::::::::::::::::::::::::"~-,_:::::\:::\:::"~/_:|:|\: : : '-,\::"::,'\
-:::::::::::::::::::::::::::::::::::::::::::::::"-,_:'-,::\:::::::"-,|:||\,-, : '-,\:::|-'-„
+:::::::::::::::::::::::::::::::::::::::::::::::"-,_:'-,::\:::::::"-,|:||\,-, : '-,\:::|-'-
:::::::::::::::::::::::::::::::::::::::::::::::::: ::,-,'"-:"~,:::::"/_/::|-/\--';;\:::/: ||\-,
:::::::::::::::::::::::::::::::::::::::::::::::::: :/...'-,::::::"~„::::"-,/_:|:/\:/|/|/|_/:|
:::::::::::::::::::::::::::::::::::::::::::::::::: |......"-,::::::::"~-:::::""~~~"¯:::|
@@ -723,9 +723,24 @@
src.see_in_dark = 8
if(!src.druggy)
src.see_invisible = 2
+
+ else if (istype(src.wear_mask, /obj/item/clothing/mask/gas/space_ninja))
+ switch(src.wear_mask:mode)
+ if(1)
+ src.see_in_dark = 5
+ if(!src.druggy)
+ src.see_invisible = 0
+ if(2)
+ src.sight |= SEE_MOBS
+ if(!src.druggy)
+ src.see_invisible = 2
+ if(3)
+ src.sight |= SEE_TURFS
+ if(!src.druggy)
+ src.see_invisible = 0
+
else if (istype(src.glasses, /obj/item/clothing/glasses/meson))
src.sight |= SEE_TURFS
- src.see_in_dark = 3
if(!src.druggy)
src.see_invisible = 0
else if (istype(src.glasses, /obj/item/clothing/glasses/night))
@@ -734,9 +749,9 @@
src.see_invisible = 0
else if (istype(src.glasses, /obj/item/clothing/glasses/thermal))
src.sight |= SEE_MOBS
- src.see_in_dark = 4
if(!src.druggy)
src.see_invisible = 2
+
else if (src.stat != 2)
src.sight &= ~SEE_TURFS
src.sight &= ~SEE_MOBS
@@ -756,10 +771,9 @@
if(!seer)
src.see_invisible = 0
- if (istype(src.glasses, /obj/item/clothing/glasses/sunglasses))
+ else if (istype(src.glasses, /obj/item/clothing/glasses/sunglasses))
src.see_in_dark = 1
-
- if (istype(src.head, /obj/item/clothing/head/helmet/welding))
+ else if (istype(src.head, /obj/item/clothing/head/helmet/welding))
if(!src.head:up && tinted_weldhelh)
src.see_in_dark = 1
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index 11b5585cac4..23ea4516e01 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ