diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 5eb6c3b54fc..b0e8290ffee 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -13,7 +13,7 @@
/obj/structure/ninjatele
name = "Long-Distance Teleportation Console"
- desc = "A console used to send a Spider Clan agent long distances rapidly."
+ desc = "A console used to send a Spider Clan operative long distances rapidly."
icon = 'icons/obj/ninjaobjects.dmi'
icon_state = "teleconsole"
anchored = 1
diff --git a/code/modules/clothing/spacesuits/space_ninja.dm b/code/modules/clothing/spacesuits/space_ninja.dm
index 96d33a488ed..03ffac852a0 100644
--- a/code/modules/clothing/spacesuits/space_ninja.dm
+++ b/code/modules/clothing/spacesuits/space_ninja.dm
@@ -1,3 +1,5 @@
+// ** BEGIN NINJA CLOTHING DEFINES **
+
/obj/item/clothing/head/helmet/space/space_ninja
desc = "What may appear to be a simple black garment is in fact a highly sophisticated nano-weave helmet. Standard issue ninja gear."
name = "ninja hood"
@@ -30,6 +32,214 @@
var/materialEnabled = 0
var/thermalEnabled = 0
+/obj/item/clothing/suit/space/space_ninja
+ name = "ninja suit"
+ desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
+ icon_state = "s-ninja"
+ item_state = "s-ninja_suit"
+ allowed = list(/obj/item/weapon/gun, /obj/item/ammo_box, /obj/item/weapon/melee/baton, /obj/item/weapon/tank, /obj/item/weapon/stock_parts/cell)
+ slowdown = 0
+ unacidable = 1
+ armor = list(melee = 60, bullet = 60, laser = 45,energy = 15, bomb = 30, bio = 30, rad = 30)
+ siemens_coefficient = 0.2
+
+ var/suitActive = 0
+ var/suitBusy = 0
+
+ var/obj/item/weapon/stock_parts/cell/suitCell
+ var/obj/item/clothing/head/helmet/space/space_ninja/suitHood
+ var/obj/item/clothing/gloves/space_ninja/suitGloves
+ var/obj/item/clothing/shoes/space_ninja/suitShoes
+ var/obj/item/clothing/mask/gas/voice/space_ninja/suitMask
+ var/obj/item/clothing/glasses/hud/space_ninja/suitGlasses
+ var/mob/living/carbon/human/suitOccupant
+
+/obj/item/clothing/gloves/space_ninja
+ desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance."
+ name = "ninja gloves"
+ icon_state = "s-ninja"
+ item_state = "s-ninja"
+ siemens_coefficient = 0
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
+ heat_protection = HANDS
+ max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
+ transfer_prints = FALSE
+
+
+/obj/item/clothing/shoes/space_ninja
+ name = "ninja shoes"
+ desc = "A pair of running shoes. Excellent for running and even better for smashing skulls."
+ icon_state = "s-ninja"
+ permeability_coefficient = 0.01
+ flags = NOSLIP
+ armor = list(melee = 60, bullet = 60, laser = 45,energy = 15, bomb = 30, bio = 30, rad = 30)
+ siemens_coefficient = 0.2
+ cold_protection = FEET
+ min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
+ heat_protection = FEET
+ max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
+
+// ** END NINJA CLOTHING DEFINES **
+
+// ** BEGIN NINJA SUIT PROCS **
+
+/obj/item/clothing/suit/space/space_ninja/New()
+ suitCell = new/obj/item/weapon/stock_parts/cell/ninja // The Ninja starts out with a 10,000 energy cell.
+ if(suitCell.charge != suitCell.maxcharge)
+ suitCell.charge = suitCell.maxcharge
+
+/obj/item/clothing/suit/space/space_ninja/verb/toggle_suit()
+ set category = "Space Ninja - Equiptment"
+ set name = "Toggle Suit"
+
+ if(usr.mind.special_role == "Ninja")
+ if(suitBusy)
+ usr << "ERROR: Suit systems busy, cannot initiate [suitActive ? "de-activation" : "activation"] protocals at this time."
+ return
+
+ suitBusy = 1
+
+ if(suitActive && (alert("Confirm suit systems shutdown? This cannot be halted once it has started", "Confirm Shutdown", "Yes", "No") == "Yes"))
+ usr << "Now de-initializing..."
+
+ sleep(15)
+ usr << "Logging off, [usr.real_name]. Shutting down SpiderOS."
+
+ sleep(10)
+ usr<< "Primary system status: OFFLINE.\nBackup system status: OFFLINE."
+
+ sleep(5)
+ usr<< "VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE."
+ //TODO: Shut down any active abilities
+
+ sleep(10)
+ usr<< "Disconnecting neural-net interface... Success."
+ usr.hud_used.instantiate()
+ usr.regenerate_icons()
+
+ sleep(5)
+ usr<< "Disengaging neural-net interface... Success."
+
+ sleep(10)
+ usr<< "Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED."
+ //TODO: Grant verbs
+ toggle_suit_lock(usr)
+ usr.regenerate_icons()
+ suitBusy = 0
+ suitActive = 0
+
+ else if(!suitActive) // Activate the suit.
+ usr << "Now initializing..."
+
+ sleep(15)
+ usr<< "Now establishing neural-net interface..."
+ if(usr.mind.special_role != "Ninja")
+ usr << "FĆAL �Rr�R: µ§er n¤t rec¤gnized, c-c¤ntr-r¤£§-£§ £¤cked."
+ return
+
+ sleep(10)
+ usr<< "Neural-net established. Now monitoring brainwave pattern. \nBrainwave pattern GREEN, proceeding."
+
+ sleep(10)
+ usr<< "Securing external locking mechanism..."
+ if(!toggle_suit_lock(usr))
+ return
+
+ sleep(5)
+ usr<< "Suit secured, extending neural-net interface..."
+ usr.hud_used.human_hud('icons/mob/screen1_NinjaHUD.dmi',"#ffffff",255)
+ usr.regenerate_icons()
+
+ sleep(10)
+ usr<< "VOID-shift device status: ONLINE.\nCLOAK-tech device status:ONLINE"
+
+ sleep(5)
+ usr<< "Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: [suitCell.charge]/[suitCell.maxcharge]."
+
+ sleep(10)
+ usr<< "All systems operational. Welcome to SpiderOS, [usr.real_name]."
+ //TODO: Grant ninja verbs here.
+ suitBusy = 0
+ suitActive = 1
+
+ else
+ suitBusy = 0
+ usr << "NOTICE: Suit de-activation protocals aborted."
+ else
+ usr << "FĆAL �Rr�R: µ§er n¤t rec¤gnized, c-c¤ntr-r¤£§-£§ £¤cked."
+ return
+
+/obj/item/clothing/suit/space/space_ninja/proc/toggle_suit_lock(mob/living/carbon/human/user)
+ if(!suitActive)
+ if(!istype(user.wear_suit, /obj/item/clothing/suit/space/space_ninja))
+ user<< "ERROR: Unable to locate user.\nABORTING..."
+ return 0
+ if(!istype(user.head, /obj/item/clothing/head/helmet/space/space_ninja))
+ user<< "ERROR: Unable to locate hood.\nABORTING..."
+ return 0
+ if(!istype(user.gloves, /obj/item/clothing/gloves/space_ninja))
+ user<< "ERROR: Unable to locate gloves.\nABORTING..."
+ return 0
+ if(!istype(user.shoes, /obj/item/clothing/shoes/space_ninja))
+ user<< "ERROR: Unable to locate foot gear.\nABORTING..."
+ return 0
+ if(!istype(user.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja))
+ user<< "ERROR: Unable to locate mask.\nABORTING..."
+ return 0
+ if(!istype(user.glasses, /obj/item/clothing/glasses/hud/space_ninja))
+ user<< "WARNING: Unable to locate eye gear, vision enhancement unavailable.\nProceeding..."
+ else
+ suitGlasses = user.glasses
+ suitGlasses.enabled = 1
+ suitGlasses.icon_state = "cybereye-green"
+
+ suitHood = user.head
+ suitMask = user.wear_mask
+ suitGloves = user.gloves
+ suitShoes = user.shoes
+ suitOccupant = user
+
+ flags |= NODROP
+ suitHood.flags |= NODROP
+ suitMask.flags |= NODROP
+ suitGloves.flags |= NODROP
+ suitGloves.pickpocket = 1
+ suitShoes.flags |= NODROP
+ suitShoes.slowdown = -2
+
+ icon_state = (user.gender == MALE ? "s-ninjan" : "s-ninjanf")
+ suitGloves.icon_state = "s-ninjan"
+
+ return 1
+
+ else
+ flags &= ~NODROP
+ suitHood.flags &= ~NODROP
+ suitMask.flags &= ~NODROP
+ if(suitGlasses)
+ suitGlasses.enabled = 0
+ suitGlasses.icon_state = "cybereye-off"
+ suitGloves.flags &= ~NODROP
+ suitGloves.pickpocket = 0
+ suitShoes.flags &= ~NODROP
+ suitShoes.slowdown = -1
+ icon_state = "s-ninja"
+ suitGloves.icon_state = "s-ninja"
+
+ suitHood = null
+ suitMask = null
+ suitGlasses = null
+ suitGloves = null
+ suitShoes = null
+ suitOccupant = null
+
+ return 1
+
+// ** END NINJA SUIT PROCS **
+
+// **BEGIN NINJA GLASSES PROCS**
+
/obj/item/clothing/glasses/hud/space_ninja/process_hud(var/mob/M) // Antag HUD processing.
if(antagHUDEnabled) // We only process if the antag-vision mode is enabled.
@@ -46,39 +256,40 @@
set category = "Space Ninja - Equiptment"
set name = "Modify Vision"
- if(enabled) // If the Ninja's suit is on and connected.
- if(usr.mind.special_role != "Ninja")
- usr << "FĆAL �Rr�R: µ§er n¤t rec¤gnized, c-c¤ntr-r¤£§-£§ £¤cked."
- return
+ if(usr.mind.special_role != "Ninja")
+ usr << "FĆAL �Rr�R: µ§er n¤t rec¤gnized, c-c¤ntr-r¤£§-£§ £¤cked."
+ return
- if(!user) // The user var is, so far as I can tell, required to refresh the window after each click.
- user = usr
-
- /*
- * Each vision type the Ninja enables will drain more from his suit's battery per tick.
- * For instance, if the Ninja were to rn around with thermals and AntagHUD on he would be losing an additional 10 energy per tick.
- * Current vision modes are:
- * - Night
- * - Meson (Turfs)
- * - Material (Objects)
- * - Thermal (Mobs)
- * - Antag HUD
- *
- * -Dave
- */
- var/dat = {"
- Night Vision (2E) - [darkness_view ? "ENABLED" : "DISABLED"]
- Meson Scanner (2E) - [mesonEnabled ? "ENABLED" : "DISABLED"]
- Material Scanner (4E) - [materialEnabled ? "ENABLED" : "DISABLED"]
- Thermal Scanner (4E) - [thermalEnabled ? "ENABLED" : "DISABLED"]
- Threat Identification HUD (6E) - [antagHUDEnabled ? "ENABLED" : "DISABLED"]
- "}
-
- var/datum/browser/popup = new(user, "SpiderOS", "SpiderOS Optical Interface", 310, 150)
- popup.set_content(dat)
- popup.open()
- else
+ if(!enabled) // If the Ninja's suit is on and connected.
usr << "ERROR: No power supply detected, cannot activate optical implant."
+ return
+
+ if(!user) // The user var is, so far as I can tell, required to refresh the window after each click.
+ user = usr
+
+ /*
+ * Each vision type the Ninja enables will drain more from his suit's battery per tick.
+ * For instance, if the Ninja were to rn around with thermals and AntagHUD on he would be losing an additional 10 energy per tick.
+ * Current vision modes are:
+ * - Night
+ * - Meson (Turfs)
+ * - Material (Objects)
+ * - Thermal (Mobs)
+ * - Antag HUD
+ *
+ * -Dave
+ */
+ var/dat = {"
+ Night Vision (2E) - [darkness_view ? "ENABLED" : "DISABLED"]
+ Meson Scanner (2E) - [mesonEnabled ? "ENABLED" : "DISABLED"]
+ Material Scanner (4E) - [materialEnabled ? "ENABLED" : "DISABLED"]
+ Thermal Scanner (4E) - [thermalEnabled ? "ENABLED" : "DISABLED"]
+ Threat Identification HUD (6E) - [antagHUDEnabled ? "ENABLED" : "DISABLED"]
+ "}
+
+ var/datum/browser/popup = new(user, "SpiderOS", "SpiderOS Optical Interface", 310, 150)
+ popup.set_content(dat)
+ popup.open()
/obj/item/clothing/glasses/hud/space_ninja/Topic(href, href_list)
@@ -134,76 +345,4 @@
modifyHUD(usr) // Re-call the verb to get a fresh version of the window.
return
-/obj/item/clothing/suit/space/space_ninja
- name = "ninja suit"
- desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
- icon_state = "s-ninja"
- item_state = "s-ninja_suit"
- allowed = list(/obj/item/weapon/gun, /obj/item/ammo_box, /obj/item/weapon/melee/baton, /obj/item/weapon/tank, /obj/item/weapon/stock_parts/cell)
- slowdown = 0
- unacidable = 1
- armor = list(melee = 60, bullet = 60, laser = 45,energy = 15, bomb = 30, bio = 30, rad = 30)
- siemens_coefficient = 0.2
-
- var/suitActive = 0
- var/suitBusy = 0
-
- var/obj/item/weapon/stock_parts/cell/suitCell
- var/obj/item/clothing/head/helmet/space/space_ninja/suitHood
- var/obj/item/clothing/gloves/space_ninja/suitGloves
- var/obj/item/clothing/shoes/space_ninja/suitShoes
- var/obj/item/clothing/mask/gas/voice/space_ninja/suitMask
- var/obj/item/clothing/glasses/space_ninja/suitGlasses
- var/mob/living/carbon/human/suitOccupant
-
-/obj/item/clothing/suit/space/space_ninja/New()
- suitCell = /obj/item/weapon/stock_parts/cell/ninja // The Ninja starts out with a 10,000 energy cell.
-
-
-/obj/item/clothing/gloves/space_ninja
- desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance."
- name = "ninja gloves"
- icon_state = "s-ninja"
- item_state = "s-ninja"
- siemens_coefficient = 0
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
- transfer_prints = FALSE
-
-
-/obj/item/clothing/shoes/space_ninja
- name = "ninja shoes"
- desc = "A pair of running shoes. Excellent for running and even better for smashing skulls."
- icon_state = "s-ninja"
- permeability_coefficient = 0.01
- flags = NOSLIP
- armor = list(melee = 60, bullet = 60, laser = 45,energy = 15, bomb = 30, bio = 30, rad = 30)
- siemens_coefficient = 0.2
- cold_protection = FEET
- min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
- heat_protection = FEET
- max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
-
-
-/obj/item/clothing/suit/space/space_ninja/verb/toggle_suit()
- set category = "Space Ninja - Equiptment"
- set name = "Toggle Suit"
-
- if(usr.mind.special_role == "Ninja")
- if(suitBusy)
- usr << "ERROR: Suit systems busy, cannot initiate [suitActive ? "de-activation" : "activation"] protocals."
- return
-
- suitBusy = 1
- if(suitActive && (alert("Confirm suit systems shutdown? This cannot be halted once it has started", "Confirm Shutdown", "Yes", "No") == "Yes"))
- usr << ""
- else if(!suitActive) // Activate the suit.
- usr << ""
- else
- suitBusy = 0
- usr << "NOTICE: Suit de-activation protocals aborted."
- else
- usr << "FĆAL �Rr�R: µ§er n¤t rec¤gnized, c-c¤ntr-r¤£§-£§ £¤cked."
- return
\ No newline at end of file
+// **END NINJA GLASSES PROCS**
\ No newline at end of file
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index 460dd640c29..7883f93184e 100644
Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ