diff --git a/code/defines/mob/living/silicon/robot.dm b/code/defines/mob/living/silicon/robot.dm index 290a6e4ba1c..7ec2d51de1b 100644 --- a/code/defines/mob/living/silicon/robot.dm +++ b/code/defines/mob/living/silicon/robot.dm @@ -46,6 +46,7 @@ var/lower_mod = 0 var/jetpack = 0 var/datum/effects/system/ion_trail_follow/ion_trail = null + var/datum/effects/system/spark_spread/spark_system//So they can initialize sparks whenever/N var/jeton = 0 var/borgwires = 15 var/killswitch = 0 diff --git a/code/defines/obj/clothing/gloves.dm b/code/defines/obj/clothing/gloves.dm index 656803a6d0d..ba28ae362c7 100644 --- a/code/defines/obj/clothing/gloves.dm +++ b/code/defines/obj/clothing/gloves.dm @@ -61,6 +61,7 @@ protective_temperature = 1100 heat_transfer_coefficient = 0.05 var/draining = 0 + var/candrain = 0 /obj/item/clothing/gloves/stungloves/ name = "Stungloves" diff --git a/code/defines/obj/clothing/mask.dm b/code/defines/obj/clothing/mask.dm index d65c93cfdf4..4c832b2e546 100644 --- a/code/defines/obj/clothing/mask.dm +++ b/code/defines/obj/clothing/mask.dm @@ -3,7 +3,6 @@ /obj/item/clothing/mask name = "mask" icon = 'masks.dmi' - var/vchange = 0//This doesn't seem to do anything. The voice changer gas mask is referenced by istype in say.dm /N body_parts_covered = HEAD /obj/item/clothing/mask/gas @@ -35,19 +34,20 @@ desc = "A close-fitting tactical mask that can filter some environmental toxins or be connected to an air supply." icon_state = "swat" -/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." - icon_state = "s-ninja" - item_state = "s-ninja_mask" - var/mode = 1// 1=Night Vision |2=Thermal |3=Meson - var/voice = "Unknown" - /obj/item/clothing/mask/gas/voice name = "gas mask" desc = "A close-fitting mask that can filter some environmental toxins or be connected to an air supply." icon_state = "gas_mask" - vchange = 1//See note avove./N + var/mode = 1// 1=Night Vision |2=Thermal |3=Meson + var/voice = "Unknown" + var/vchange = 0//This didn't do anything before. It now checks if the mask has special functions/N + +/obj/item/clothing/mask/gas/voice/space_ninja + name = "ninja mask" + 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 /obj/item/clothing/mask/breath desc = "A close-fitting mask that can be connected to an air supply but does not work very well in hard vacuum." diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index bf7428e8ade..04cedb08fec 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -115,6 +115,14 @@ user = null if (src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/blade))) src.operating = -1 + if(istype(I, /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, "sparks", 50, 1) + playsound(src.loc, 'blade1.ogg', 50, 1) + for(var/mob/O in viewers(user, 5)) + O.show_message(text("\blue The glass door was sliced open by []!", user), 1, text("\red You hear glass being sliced and sparks flying."), 2) flick(text("[]spark", src.base_state), src) sleep(6) open() diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 2f2eaa41659..ce140838923 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -73,7 +73,7 @@ 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(H.wear_mask, /obj/item/clothing/mask/gas/voice)) 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/machinery/turrets.dm b/code/game/machinery/turrets.dm index 542a848076c..e21e8ca9e74 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -69,7 +69,7 @@ active_power_usage = 300 /obj/machinery/turret/New() - src.spark_system = new /datum/effects/system/spark_spread + spark_system = new /datum/effects/system/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) ..() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index cf8b86f6ca4..79aa60d3455 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -299,6 +299,35 @@ /obj/mecha/attack_hand(mob/user as mob) src.log_message("Attack by hand/paw. Attacker - [user].",1) +/* if(ishuman(user)) + var/mob/living/carbon/human/U = user + if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)&&U.gloves:candrain&&!U.gloves:draining) + var/obj/item/clothing/suit/space/space_ninja/S = U.wear_suit + var/obj/item/clothing/gloves/space_ninja/G = U.gloves + user << "\blue Now charging battery..." + occupant_message("\red Warning: Unauthorized access through sub-route 4, block H, detected.") + G.draining = 1 + if(get_charge()) + var/drain = 0 + var/totaldrain = 0 + while(cell.charge>0) + drain = rand(100,300) + if(cell.charge[totaldrain] energy from [src]." + G.draining = 0 + return + else + U << "\red The exosuit's battery has run dry of power. You must find another source." + return*/ if (user.mutations & 8 && !prob(src.deflect_chance)) src.take_damage(15) src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) diff --git a/code/game/objects/devices/flash.dm b/code/game/objects/devices/flash.dm index ae1dfb1a6c4..0807c597c55 100644 --- a/code/game/objects/devices/flash.dm +++ b/code/game/objects/devices/flash.dm @@ -13,7 +13,7 @@ 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)) + if (istype(H.wear_mask, /obj/item/clothing/mask/gas/voice)) safety = 1 if (istype(M, /mob/living/carbon/alien))//So aliens don't get flashed (they have no external eyes)/N safety = 1 diff --git a/code/game/objects/items/clothing.dm b/code/game/objects/items/clothing.dm index 13460f2b620..f511b6b3a86 100644 --- a/code/game/objects/items/clothing.dm +++ b/code/game/objects/items/clothing.dm @@ -322,7 +322,6 @@ NINJA MASK if(charge<0) charge=0 active=0 -// stat("Ninja","#Current Charge: [abs(charge/100)]%",) sleep(10) /obj/item/clothing/suit/space/space_ninja/proc/init() @@ -351,7 +350,7 @@ NINJA MASK U.head:canremove=0 U.shoes:canremove=0 U.gloves:canremove=0 - src.canremove=0 + canremove=0 sleep(40) U << "\blue Extending neural-net interface...\nNow monitoring brain wave pattern..." sleep(40) @@ -360,7 +359,7 @@ NINJA MASK U.head:canremove=1 U.shoes:canremove=1 U.gloves:canremove=1 - src.canremove=1 + canremove=1 return U << "\blue Linking neural-net interface...\nPattern \green GREEN\blue, continuing operation." sleep(40) @@ -379,20 +378,21 @@ NINJA MASK 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 + verbs -= /obj/item/clothing/suit/space/space_ninja/proc/init + verbs += /obj/item/clothing/suit/space/space_ninja/proc/deinit + verbs += /obj/item/clothing/suit/space/space_ninja/proc/toggle + U.gloves.verbs += /obj/item/clothing/gloves/space_ninja/proc/toggled + initialize=1 + affecting=U + slowdown=0 U.shoes:slowdown-- - src.ntick(usr) + ntick(usr) 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) + else if(initialize) usr << "\red The suit is already functioning." else usr << "\red You cannot use this function at this time." @@ -403,7 +403,7 @@ NINJA MASK set desc = "Begins procedure to remove the suit." set category = "Object" - if(!src.initialize) + if(!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") @@ -430,7 +430,7 @@ NINJA MASK U << "\blue VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE." if(active)//Shutdowns stealth. active=0 - src.verbs -= /obj/item/clothing/suit/space/space_ninja/proc/toggle + verbs -= /obj/item/clothing/suit/space/space_ninja/proc/toggle sleep(40) if(U.stat||U.health<=0) U << "\red FATAL ERROR: 412--GG##&77 BRAIN WAV3 PATT$RN RED\nI-I-INITIATING S-SELf DeStrCuCCCT%$#@@!!$^#!..." @@ -453,13 +453,15 @@ NINJA MASK U.shoes:slowdown++ if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)) U.gloves:canremove=1 - src.canremove=1 + U.gloves:candrain=0 + U.gloves.verbs -= /obj/item/clothing/gloves/space_ninja/proc/toggled + 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.initialize=0 - src.affecting=null - src.slowdown=1 + verbs += /obj/item/clothing/suit/space/space_ninja/proc/init + verbs -= /obj/item/clothing/suit/space/space_ninja/proc/deinit + initialize=0 + affecting=null + slowdown=1 return /obj/item/clothing/suit/space/space_ninja/proc/toggle() @@ -468,12 +470,12 @@ NINJA MASK set category = "Object" if(usr:wear_suit!=src||!src.initialize) - usr << "\red You suit must be worn and active to use this function." + usr << "\red Your suit must be worn and active to use this function." return - if(src.active) + if(active) spawn(0) anim(usr.loc,'mob.dmi',usr,"uncloak") - src.active=0 + active=0 usr << "\blue You are now visible." for(var/mob/O in oviewers(usr, null)) O << "[usr.name] appears from thin air!" @@ -481,7 +483,7 @@ NINJA MASK else spawn(0) anim(usr.loc,'mob.dmi',usr,"cloak") - src.active=1 + 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!" @@ -489,19 +491,40 @@ NINJA MASK /obj/item/clothing/suit/space/space_ninja/examine() set src in view() ..() - if(src.initialize) + if(initialize) usr << "All systems operational. Current energy capacity: [src.charge]." - if(src.active) + if(active) usr << "The CLOAK-tech device is active." else usr << "The CLOAK-tech device is inactive." usr << "There are [src.sbombs] smoke bombs remaining." -/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/gloves/space_ninja/proc/toggled() + set name = "Toggle Drain" + set desc = "Toggles the energy drain mechanism on or off." + set category = "Object" + if(!candrain) + candrain=1 + usr << "You enable the energy drain mechanism." + else + candrain=0 + usr << "You disable the energy drain mechanism." -/obj/item/clothing/mask/gas/space_ninja/proc/togglev() + +/obj/item/clothing/gloves/space_ninja/examine() + set src in view() + ..() + if(!canremove) + if(candrain) + usr << "The energy drain mechanism is: active." + else + usr << "The energy drain mechanism is: inactive." + +/obj/item/clothing/mask/gas/voice/space_ninja/New() + verbs += /obj/item/clothing/mask/gas/voice/space_ninja/proc/togglev + verbs += /obj/item/clothing/mask/gas/voice/space_ninja/proc/switchm + +/obj/item/clothing/mask/gas/voice/space_ninja/proc/togglev() set name = "Toggle Voice" set desc = "Toggles the voice synthesizer on or off." set category = "Object" @@ -545,39 +568,39 @@ NINJA MASK usr << "The voice synthesizer is already deactivated." return -/obj/item/clothing/mask/gas/space_ninja/proc/switchm() +/obj/item/clothing/mask/gas/voice/space_ninja/proc/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) + switch(mode) if(1) - src.mode=2 + mode=2 usr.see_in_dark = 2 usr << "Switching mode to Thermal Scanner." if(2) - src.mode=3 + mode=3 usr.see_invisible = 0 usr.sight &= ~SEE_MOBS usr << "Switching mode to Meson Scanner." if(3) - src.mode=1 + mode=1 usr.sight &= ~SEE_TURFS usr << "Switching mode to Night Vision." -/obj/item/clothing/mask/gas/space_ninja/examine() +/obj/item/clothing/mask/gas/voice/space_ninja/examine() set src in view() ..() var/mode = "Night Vision" var/voice = "inactive" - switch(src.mode) + switch(mode) if(1) mode = "Night Vision" if(2) mode = "Thermal Scanner" if(3) mode = "Meson Scanner" - if(src.vchange==0) + if(vchange==0) voice = "inactive" else voice = "active" diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index f5d400425ff..7ace6556e71 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -56,7 +56,7 @@ STUN BATON //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 = new /datum/effects/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) return diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm index 923101347d3..87800e5b943 100644 --- a/code/game/objects/radio/radio.dm +++ b/code/game/objects/radio/radio.dm @@ -256,11 +256,17 @@ Speaker: [li //End of research and feedback code. if (length(heard_masked)) - var/rendered = "[part_a][M.name][part_b][quotedmsg][part_c]" - + var/N = M.name + var/J = eqjobname + if (istype(M.wear_mask, /obj/item/clothing/mask/gas/voice)&&M.wear_mask:vchange) + //To properly have the ninja show up on radio. Could also be useful for similar items. + //Would not be necessary but the mob could be wearing a mask that is not a voice changer. + N = M.wear_mask:voice + J = "Unknown" + var/rendered = "[part_a][N][part_b][quotedmsg][part_c]" for (var/mob/R in heard_masked) if(istype(R, /mob/living/silicon/ai)) - R.show_message("[part_a][M.name] ([eqjobname]) [part_b][quotedmsg][part_c]", 2) + R.show_message("[part_a][N] ([J]) [part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) diff --git a/code/game/turf.dm b/code/game/turf.dm index 39b70d042e3..9fbe7ca39c5 100644 --- a/code/game/turf.dm +++ b/code/game/turf.dm @@ -368,8 +368,8 @@ 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) + playsound(src.loc, 'blade1.ogg', 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) diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index 6608a000a90..3bff627022e 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -221,7 +221,7 @@ Useful for copy pasta since I'm lazy.*/ new_ninja.equip_if_possible(new /obj/item/clothing/suit/space/space_ninja(new_ninja), new_ninja.slot_wear_suit) 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/mask/gas/voice/space_ninja(new_ninja), new_ninja.slot_wear_mask) 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) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 98f4a0e6e2e..c525b7514ce 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -731,7 +731,7 @@ else seer = 0 see_invisible = 0 - else if (istype(src.wear_mask, /obj/item/clothing/mask/gas/space_ninja)) + else if (istype(src.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja)) switch(src.wear_mask:mode) if(1) src.see_in_dark = 5 diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 095714be446..28b3d1130bf 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -25,7 +25,8 @@ pick_list -= H message = dd_list2text(temp_message, " ") //Ninja mask obscures text and voice if set to do so. - if(istype(src.wear_mask, /obj/item/clothing/mask/gas/space_ninja)&&src.wear_mask:voice=="Unknown") + //Would make it more global but it's sort of ninja specific. + if(istype(src.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja)&&src.wear_mask:voice=="Unknown") if(copytext(message, 1, 2) != "*") var/list/temp_message = dd_text2list(message, " ") var/list/pick_list = list() diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index aa7b65a74f6..6f84cd58048 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -30,6 +30,25 @@ var/italics = 1 var/message_range = 1 + if(istype(src.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja)&&src.wear_mask:voice=="Unknown") + if(copytext(message, 1, 2) != "*") + var/list/temp_message = dd_text2list(message, " ") + var/list/pick_list = list() + for(var/i = 1, i <= temp_message.len, i++) + pick_list += i + for(var/i=1, i <= abs(temp_message.len/3), i++) + var/H = pick(pick_list) + if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue + temp_message[H] = ninjaspeak(temp_message[H]) + pick_list -= H + message = dd_list2text(temp_message, " ") + message = dd_replaceText(message, "o", "¤") + message = dd_replaceText(message, "p", "þ") + message = dd_replaceText(message, "l", "£") + message = dd_replaceText(message, "s", "§") + message = dd_replaceText(message, "u", "µ") + message = dd_replaceText(message, "b", "ß") + if (src.stuttering) message = stutter(message) @@ -72,11 +91,16 @@ if (italics) message_a = "[message_a]" - - if (!istype(src, /mob/living/carbon/human) || istype(src.wear_mask, /obj/item/clothing/mask/gas/voice)) - rendered = "[src.name] whispers, \"[message_a]\"" + //This appears copied from carbon/living say.dm so the istype check for mob is probably not needed. Appending for src is also not needed as the game will check that automatically. + if (!istype(src, /mob/living/carbon/human)) + rendered = "[name] whispers, \"[message_a]\"" + else if (istype(wear_mask, /obj/item/clothing/mask/gas/voice)) + if (wear_mask:vchange) + rendered = "[wear_mask:voice] whispers, \"[message_a]\"" + else + rendered = "[name] whispers, \"[message_a]\"" else - rendered = "[src.real_name][alt_name] whispers, \"[message_a]\"" + rendered = "[real_name][alt_name] whispers, \"[message_a]\"" for (var/mob/M in heard_a) M.show_message(rendered, 2) @@ -101,10 +125,15 @@ if (M.say_understands(src)) var/message_c message_c = stars(message) - if (!istype(src, /mob/living/carbon/human) || istype(src.wear_mask, /obj/item/clothing/mask/gas/voice)) - rendered = "[src.name] whispers, \"[message_c]\"" + if (!istype(src, /mob/living/carbon/human)) + rendered = "[name] whispers, \"[message_c]\"" + else if(istype(wear_mask, /obj/item/clothing/mask/gas/voice)) + if(wear_mask:vchange) + rendered = "[wear_mask:voice] whispers, \"[message_c]\"" + else + rendered = "[name] whispers, \"[message_c]\"" else - rendered = "[src.real_name][alt_name] whispers, \"[message_c]\"" + rendered = "[real_name][alt_name] whispers, \"[message_c]\"" M.show_message(rendered, 2) else rendered = "[src.voice_name] whispers something." @@ -113,10 +142,15 @@ if (italics) message = "[message]" - if (!istype(src, /mob/living/carbon/human) || istype(src.wear_mask, /obj/item/clothing/mask/gas/voice)) - rendered = "[src.name] whispers, \"[message]\"" + if (!istype(src, /mob/living/carbon/human)) + rendered = "[name] whispers, \"[message]\"" + else if (istype(src.wear_mask, /obj/item/clothing/mask/gas/voice)) + if(wear_mask:vchange) + rendered = "[wear_mask:voice] whispers, \"[message]\"" + else + rendered = "[name] whispers, \"[message]\"" else - rendered = "[src.real_name][alt_name] whispers, \"[message]\"" + rendered = "[real_name][alt_name] whispers, \"[message]\"" for (var/mob/M in world) if (istype(M, /mob/new_player)) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 9ac0c2c6b61..a7682d43c41 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -257,7 +257,7 @@ else if (M.ghost_ears && !(M in listening)) listening+=M - + for (var/obj/O in ((V | src.contents)-used_radios)) //radio in pocket could work, radio in backpack wouldn't --rastaf0 spawn (0) if (O) @@ -278,10 +278,13 @@ if (italics) message_a = "[message_a]" - if (!istype(src, /mob/living/carbon/human) || istype(src.wear_mask, /obj/item/clothing/mask/gas/voice)) + if (!istype(src, /mob/living/carbon/human)) rendered = "[src.name] [message_a]" - else if (istype(src.wear_mask, /obj/item/clothing/mask/gas/space_ninja)) - rendered = "[src.wear_mask:voice] [message_a]" + else if(istype(wear_mask, /obj/item/clothing/mask/gas/voice)) + if(wear_mask:vchange) + rendered = "[src.wear_mask:voice] [message_a]" + else + rendered = "[src.name] [message_a]" else rendered = "[src.real_name][alt_name] [message_a]" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 807a7f902c0..c4cd677e0ef 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1,6 +1,8 @@ /mob/living/silicon/robot/New(loc,var/syndie = 0) - + spark_system = new /datum/effects/system/spark_spread() + spark_system.set_up(5, 0, src) + spark_system.attach(src) spawn (1) src << "\blue Your icons have been generated!" playsound(src.loc, 'liveagain.ogg', 50, 1, -3) @@ -591,6 +593,35 @@ user << "You remove the power cell." src.updateicon() + if(ishuman(user)) + var/mob/living/carbon/human/U = user + if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)&&U.gloves:candrain&&!U.gloves:draining) + var/obj/item/clothing/suit/space/space_ninja/S = U.wear_suit + var/obj/item/clothing/gloves/space_ninja/G = U.gloves + user << "\blue Now charging battery..." + src << "\red Warning: Unauthorized access through sub-route 12, block C, detected." + G.draining = 1 + if(cell&&cell.charge) + var/drain = 0 + var/totaldrain = 0 + while(cell.charge>0) + drain = rand(100,300) + if(cell.charge[totaldrain] energy from [src]." + G.draining = 0 + return + else + U << "\red Their battery has run dry of power. You must find another source." + return + /mob/living/silicon/robot/proc/allowed(mob/M) //check if it doesn't require any access at all diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 20ab278a911..f9b1c8e0a96 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -437,35 +437,6 @@ /obj/machinery/power/apc/attack_hand(mob/user) add_fingerprint(user) - if(ishuman(user)) - var/mob/living/carbon/human/U = user - if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)&&!U.gloves:canremove&&!U.gloves:draining) - var/obj/item/clothing/suit/space/space_ninja/S = U.wear_suit - var/obj/item/clothing/gloves/space_ninja/G = U.gloves -// emagged = 1 -// locked = 0 - user << "\blue Now charging battery..." - G.draining = 1 - if(cell&&cell.charge) - while(cell.charge>0) - var/drain = rand(500,1500) - if(cell.charge[drain] energy from the APC ([cell.charge] charge remaining)." - else break - G.draining = 0 - return - else - U << "\red This machine has run dry of power. You must find another." - return - if(opened && (!istype(user, /mob/living/silicon))) if(cell) usr.put_in_hand(cell) @@ -477,12 +448,46 @@ //user << "You remove the power cell." charging = 0 src.updateicon() + return + if(stat & (BROKEN|MAINT)) return - else - if(stat & (BROKEN|MAINT)) return - // do APC interaction - user.machine = src - src.interact(user) + if(ishuman(user)) + var/mob/living/carbon/human/U = user + if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)&&U.gloves:candrain&&!U.gloves:draining) + var/obj/item/clothing/suit/space/space_ninja/S = U.wear_suit + var/obj/item/clothing/gloves/space_ninja/G = U.gloves + user << "\blue Now charging battery..." + G.draining = 1 + if(cell&&cell.charge) + var/drain = 0 + var/totaldrain = 0 + var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + while(cell.charge>0) + drain = rand(100,300) + if(cell.charge[totaldrain] energy from the APC." + G.draining = 0 + if(!emagged) + flick("apc-spark", src) + emagged = 1 + locked = 0 + updateicon() + return + else + U << "\red This APC has run dry of power. You must find another source." + return + // do APC interaction + user.machine = src + src.interact(user) /obj/machinery/power/apc/proc/interact(mob/user) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 8fdc989cfbc..3fa377d04e1 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -62,6 +62,30 @@ if(crit_fail) usr << "\red This power cell seems to be faulty" +/obj/item/weapon/cell/attack_self(mob/user as mob) + src.add_fingerprint(user) + if(ishuman(user)) + var/mob/living/carbon/human/U = user + if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)&&U.gloves:candrain&&!U.gloves:draining) + var/obj/item/clothing/suit/space/space_ninja/S = U.wear_suit + var/obj/item/clothing/gloves/space_ninja/G = U.gloves + if(charge) + user << "\blue Now charging battery..." + G.draining = 1 + if (do_after(user,50)) + U << "\blue Gained [charge] energy from the cell." + charge = 0 + S.charge+=charge + G.draining = 0 + corrupt() + updateicon() + else + U << "\red Procedure interrupted. Protocol terminated." + return + else + U << "\red This cell is empty and of no use." + return + //Just because someone gets you occasionally with stun gloves doesn't mean you can put in code to kill everyone who tries to make some. /obj/item/weapon/cell/attackby(obj/item/W, mob/user) ..() diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 459eac05c8e..d009d0b36ee 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -180,15 +180,41 @@ interact(user) /obj/machinery/power/smes/attack_hand(mob/user) - add_fingerprint(user) - if(stat & BROKEN) return + if(ishuman(user)) + var/mob/living/carbon/human/U = user + if(istype(U.gloves, /obj/item/clothing/gloves/space_ninja)&&U.gloves:candrain&&!U.gloves:draining) + var/obj/item/clothing/suit/space/space_ninja/S = U.wear_suit + var/obj/item/clothing/gloves/space_ninja/G = U.gloves + user << "\blue Now charging battery..." + G.draining = 1 + if(charge) + var/drain = 0 + var/totaldrain = 0 + var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + while(charge>0) + drain = rand(100,300) + if(charge[totaldrain] energy from the SMES cell." + G.draining = 0 + return + else + U << "\red This SMES cell has run dry of power. You must find another source." + return + interact(user) - - /obj/machinery/power/smes/proc/interact(mob/user) if ( (get_dist(src, user) > 1 )) diff --git a/icons/mob/mecha.dmi b/icons/mob/mecha.dmi index 6d9b30e3575..4d2c19556b0 100644 Binary files a/icons/mob/mecha.dmi and b/icons/mob/mecha.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index a0c0348897a..160183819b1 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index 99334830b4c..f99797dc688 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi index 82f60b5ab02..bedf6a402d9 100644 Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ