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