diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 50819be8c1d..a5a18c6676e 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -204,6 +204,8 @@ cult -= cult_mind cult_mind.current << "\red An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it." cult_mind.memory = "" + cult_mind.special_role = null + cult_mind.current.hud_updateflag |= 1 << SPECIALROLE_HUD // remove the cult viewpoint object var/obj/viewpoint = getCultViewpoint(cult_mind.current) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 6e236db2154..0d5a399b892 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -488,6 +488,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", R.check_icon() R.blood_DNA = list() R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type + R.add_hiddenprint(H) return else user << "The book seems full of illegible scribbles. Is this a joke?" diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 421582d26a1..1cc2cd9d469 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -172,9 +172,8 @@ Made by Xhuis thrall_mind.current.attack_log += "\[[time_stamp()]\] Dethralled" thrall_mind.special_role = null update_shadow_icons_removed(thrall_mind) - thrall_mind.remove_spell(/obj/effect/proc_holder/spell/targeted/lesser_glare) - thrall_mind.remove_spell(/obj/effect/proc_holder/spell/targeted/lesser_shadow_walk) - //thrall_mind.remove_spell(/obj/effect/proc_holder/spell/targeted/thrall_vision) //uncomment when vision code is unfucked. + for(var/obj/effect/proc_holder/spell/S in thrall_mind.spell_list) + thrall_mind.remove_spell(S) thrall_mind.current.remove_language("Shadowling Hivemind") if(kill && ishuman(thrall_mind.current)) //If dethrallization surgery fails, kill the mob as well as dethralling them var/mob/living/carbon/human/H = thrall_mind.current @@ -211,7 +210,29 @@ Made by Xhuis else shadowling_dead = 1 //but shadowling was kill :( return 1 - + +/datum/game_mode/proc/remove_shadowling(datum/mind/ling_mind) + if(!istype(ling_mind) || !(ling_mind in shadows)) return 0 + update_shadow_icons_removed(ling_mind) + shadows.Remove(ling_mind) + ling_mind.current.attack_log += "\[[time_stamp()]\] Deshadowlinged" + ling_mind.special_role = null + for(var/obj/effect/proc_holder/spell/S in ling_mind.spell_list) + ling_mind.remove_spell(S) + var/mob/living/M = ling_mind.current + if(issilicon(M)) + M.audible_message("[M] lets out a short blip.", \ + "You have been turned into a robot! You are no longer a shadowling! Though you try, you cannot remember anything about your time as one...") + else + M.visible_message("[M] screams and contorts!", \ + "THE LIGHT-- YOUR MIND-- BURNS--") + spawn(30) + if(!M || qdeleted(M)) + return + M.visible_message("[M] suddenly bloats and explodes!", \ + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA----") + playsound(M, 'sound/magic/Disintegrate.ogg', 100, 1) + M.gib() /datum/game_mode/shadowling/proc/check_shadow_victory() var/success = 0 //Did they win? diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 0e05c316052..12419f66244 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -8,7 +8,15 @@ var/datum/ai_laws/laws = null var/obj/item/weapon/circuitboard/circuit = null var/obj/item/device/mmi/brain = null - + +/obj/structure/AIcore/Destroy() + qdel(laws) + qdel(circuit) + qdel(brain) + laws = null + circuit = null + brain = null + return ..() /obj/structure/AIcore/attackby(obj/item/P as obj, mob/user as mob, params) switch(state) @@ -176,7 +184,8 @@ state = 20//So it doesn't interact based on the above. Not really necessary. /obj/structure/AIcore/deactivated/Destroy() - empty_playable_ai_cores -= src + if(src in empty_playable_ai_cores) + empty_playable_ai_cores -= src return ..() /obj/structure/AIcore/deactivated/attackby(var/obj/item/W, var/mob/user, params) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 6950d3b0361..da972725956 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -6,6 +6,8 @@ w_class = 2.0 slot_flags = SLOT_BELT origin_tech = "programming=2" + var/request_cooldown = 60 // one minute + var/last_request var/obj/item/device/radio/radio var/looking_for_personality = 0 var/mob/living/silicon/pai/pai @@ -241,6 +243,12 @@ pai.master_dna = dna.unique_enzymes pai << "

You have been bound to a new master.

" if(href_list["request"]) + var/delta = (world.time / 10) - last_request + if(request_cooldown > delta) + var/cooldown_time = round(request_cooldown - ((world.time / 10) - last_request), 1) + usr << "\red The request system is currently offline. Please wait another [cooldown_time] seconds." + return + last_request = world.time / 10 src.looking_for_personality = 1 paiController.findPAI(src, usr) if(href_list["wipe"]) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 4dbd5be8f5d..32cd8fb90ba 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1833,6 +1833,8 @@ stampvalue = "cent" sendername = command_name() if("Syndicate") + stamptype = "icon" + stampvalue = "syndicate" sendername = "UNKNOWN" if("Administrator") stamptype = input(src.owner, "Pick a stamp type.", "Stamp Type") as null|anything in list("icon","text","none") @@ -1904,8 +1906,9 @@ else for(var/obj/machinery/photocopier/faxmachine/F in allfaxes) if((F.z in config.station_levels)) - if(!F.receivefax(P)) - src.owner << "\red Message transmission to [F.department] failed." + spawn(0) + if(!F.receivefax(P)) + src.owner << "\red Message transmission to [F.department] failed." var/datum/fax/admin/A = new /datum/fax/admin() A.name = P.name @@ -1923,7 +1926,7 @@ src.owner << "\blue Message transmitted successfully." if(notify == "Yes") var/mob/living/carbon/human/H = sender - if(istype(H) && H.stat == 1 && (istype(H.l_ear, /obj/item/device/radio/headset) || istype(H.r_ear, /obj/item/device/radio/headset))) + if(istype(H) && H.stat == CONSCIOUS && (istype(H.l_ear, /obj/item/device/radio/headset) || istype(H.r_ear, /obj/item/device/radio/headset))) sender << "Your headset pings, notifying you that a reply to your fax has arrived." if(sender) log_admin("[key_name(src.owner)] replied to a fax message from [key_name(sender)]: [input]") diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm index a95a754eae8..cc2cb3e8435 100644 --- a/code/modules/mob/living/silicon/login.dm +++ b/code/modules/mob/living/silicon/login.dm @@ -3,4 +3,6 @@ if(mind && ticker && ticker.mode) ticker.mode.remove_cultist(mind, 1) ticker.mode.remove_revolutionary(mind, 1) + ticker.mode.remove_thrall(mind,0) + ticker.mode.remove_shadowling(mind) ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 433a8361719..bcf862b3d92 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -25,6 +25,8 @@ //Used for self-mailing. var/mail_destination = 0 + var/reboot_cooldown = 60 // one minute + var/last_reboot holder_type = /obj/item/weapon/holder/drone // var/sprite[0] @@ -123,8 +125,15 @@ if(!allowed(usr)) user << "\red Access denied." return - + + var/delta = (world.time / 10) - last_reboot + if(reboot_cooldown > delta) + var/cooldown_time = round(reboot_cooldown - ((world.time / 10) - last_reboot), 1) + usr << "\red The reboot system is currently offline. Please wait another [cooldown_time] seconds." + return + user.visible_message("\red \the [user] swipes \his ID card through \the [src], attempting to reboot it.", "\red You swipe your ID card through \the [src], attempting to reboot it.") + last_reboot = world.time / 10 var/drones = 0 for(var/mob/living/silicon/robot/drone/D in world) if(D.key && D.client) @@ -256,13 +265,11 @@ /mob/living/silicon/robot/drone/proc/question(var/client/C,var/mob/M) spawn(0) if(!C || !M || jobban_isbanned(M,"nonhumandept") || jobban_isbanned(M,"Drone")) return - var/response = alert(C, "Someone is attempting to reboot a maintenance drone. Would you like to play as one?", "Maintenance drone reboot", "Yes", "No", "Never for this round.") + var/response = alert(C, "Someone is attempting to reboot a maintenance drone. Would you like to play as one?", "Maintenance drone reboot", "Yes", "No") if(!C || ckey) return if(response == "Yes") transfer_personality(C) - else if (response == "Never for this round") - C.prefs.be_special ^= BE_PAI /mob/living/silicon/robot/drone/proc/transfer_personality(var/client/player) diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index df9f6e050e5..84b31b16766 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -2,6 +2,8 @@ ..() regenerate_icons() show_laws(0) + if(mind) ticker.mode.remove_cultist(mind) if(mind) ticker.mode.remove_revolutionary(mind) if(mind) ticker.mode.remove_thrall(mind,0) + if(mind) ticker.mode.remove_shadowling(mind) return \ No newline at end of file diff --git a/interface/skin.dmf b/interface/skin.dmf index fdec926068f..888f4461135 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -315,11 +315,11 @@ macro "AZERTYon" is-disabled = false elem name = "H" - command = ".holster" + command = "holster" is-disabled = false elem name = "CTRL+H" - command = ".holster" + command = "holster" is-disabled = false elem name = "Q+REP" @@ -751,11 +751,11 @@ macro "hotkeymode" is-disabled = false elem name = "H" - command = ".holster" + command = "holster" is-disabled = false elem name = "CTRL+H" - command = ".holster" + command = "holster" is-disabled = false elem name = "Q" diff --git a/sound/magic/Disintegrate.ogg b/sound/magic/Disintegrate.ogg new file mode 100644 index 00000000000..d36217a5b34 Binary files /dev/null and b/sound/magic/Disintegrate.ogg differ diff --git a/sound/magic/FleshToStone.ogg b/sound/magic/FleshToStone.ogg new file mode 100644 index 00000000000..9033d4425ed Binary files /dev/null and b/sound/magic/FleshToStone.ogg differ