diff --git a/code/datums/mind.dm b/code/datums/mind.dm index f8d443f810e..bd0c398f485 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -123,6 +123,7 @@ datum/mind out += "Factions and special roles:
" var/list/sections = list( + "implant", "revolution", "cult", "wizard", @@ -133,19 +134,23 @@ datum/mind "malfunction", ) var/text = "" - + var/mob/living/carbon/human/H = current if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey)) + /** Impanted**/ + if(H.is_loyalty_implanted(H)) + text = "Loyalty Implant:Remove|Implanted
" + else + text = "Loyalty Implant:No Implant|Implant him!
" + sections["implant"] = text /** REVOLUTION ***/ text = "revolution" if (ticker.mode.config_tag=="revolution") - text = uppertext(text) + text += uppertext(text) text = "[text]: " - if (assigned_role in command_positions) - text += "HEAD|officer|employee|headrev|rev" - else if (assigned_role in list("Security Officer", "Detective", "Warden")) - text += "head|OFFICER|employee|headre|rev" + if (H.is_loyalty_implanted(H)) + text += "LOYAL EMPLOYEE|headrev|rev" else if (src in ticker.mode.head_revolutionaries) - text = "head|officer|employee|HEADREV|rev" + text = "employee|HEADREV|rev" text += "
Flash: give" var/list/L = current.get_contents() @@ -162,9 +167,9 @@ datum/mind if (objectives.len==0) text += "
Objectives are empty! Set to kill all heads." else if (src in ticker.mode.revolutionaries) - text += "head|officer|employee|headrev|REV" + text += "employee|headrev|REV" else - text += "head|officer|EMPLOYEE|headrev|rev" + text += "EMPLOYEE|headrev|rev" sections["revolution"] = text /** CULT ***/ @@ -172,19 +177,17 @@ datum/mind if (ticker.mode.config_tag=="cult") text = uppertext(text) text = "[text]: " - if (assigned_role in command_positions) - text += "HEAD|officer|employee|cultist" - else if (assigned_role in list("Security Officer", "Detective", "Warden")) - text += "head|OFFICER|employee|cultist" + if (H.is_loyalty_implanted(H)) + text += "LOYAL EMPLOYEE|cultist" else if (src in ticker.mode.cult) - text += "head|officer|employee|CULTIST" + text += "employee|CULTIST" text += "
Give tome|amulet." /* if (objectives.len==0) text += "
Objectives are empty! Set to sacrifice and escape or summon." */ else - text += "head|officer|EMPLOYEE|cultist" + text += "EMPLOYEE|cultist" sections["cult"] = text /** WIZARD ***/ @@ -238,40 +241,43 @@ datum/mind text += "operative|NANOTRASEN" sections["nuclear"] = text - /** TRAITOR ***/ - text = "traitor" - if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan") - text = uppertext(text) - text = "[text]: " - if (src in ticker.mode.traitors) - text += "TRAITOR|loyal" - if (objectives.len==0) - text += "
Objectives are empty! Randomize!" - else - text += "traitor|LOYAL" - sections["traitor"] = text - - /** MONKEY ***/ - if (istype(current, /mob/living/carbon)) - text = "monkey" - if (ticker.mode.config_tag=="monkey") + /** TRAITOR ***/ + text = "traitor" + if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan") text = uppertext(text) text = "[text]: " - if (istype(current, /mob/living/carbon/human)) - text += "healthy|infected|HUMAN|other" - else if (istype(current, /mob/living/carbon/monkey)) - var/found = 0 - for(var/datum/disease/D in current.viruses) - if(istype(D, /datum/disease/jungle_fever)) found = 1 - - if(found) - text += "healthy|INFECTED|human|other" - else - text += "HEALTHY|infected|human|other" - + if (H.is_loyalty_implanted(H)) + text +="traitor|LOYAL EMPLOYEE" else - text += "healthy|infected|human|OTHER" - sections["monkey"] = text + if (src in ticker.mode.traitors) + text += "TRAITOR|EMPLOYEE" + if (objectives.len==0) + text += "
Objectives are empty! Randomize!" + else + text += "traitor|EMPLOYEE" + sections["traitor"] = text + + /** MONKEY ***/ + if (istype(current, /mob/living/carbon)) + text = "monkey" + if (ticker.mode.config_tag=="monkey") + text = uppertext(text) + text = "[text]: " + if (istype(current, /mob/living/carbon/human)) + text += "healthy|infected|HUMAN|other" + else if (istype(current, /mob/living/carbon/monkey)) + var/found = 0 + for(var/datum/disease/D in current.viruses) + if(istype(D, /datum/disease/jungle_fever)) found = 1 + + if(found) + text += "healthy|INFECTED|human|other" + else + text += "HEALTHY|infected|human|other" + + else + text += "healthy|infected|human|OTHER" + sections["monkey"] = text /** SILICON ***/ @@ -496,6 +502,47 @@ datum/mind if(!istype(objective)) return objective.completed = !objective.completed + else if(href_list["implant"]) + var/mob/living/carbon/human/H = current + switch(href_list["implant"]) + if("remove") + for(var/obj/item/weapon/implant/loyalty/I in H.contents) + for(var/datum/organ/external/organs in H.organs) + if(I in organs.implants) + I.Del() + H << "\blue Your loyalty implant has been deactivated." + if("add") + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + L.imp_in = H + L.implanted = 1 + var/datum/organ/external/affected = H.organs_by_name["head"] + affected.implants += L + L.part = affected + + H << "\red You somehow have become the recepient of a loyalty transplant, and it just activated!" + if(src in ticker.mode.revolutionaries) + special_role = null + ticker.mode.revolutionaries -= src + src << "\red The nanobots in the loyalty implant remove all thoughts about being a revolutionary. Get back to work!" + if(src in ticker.mode.head_revolutionaries) + special_role = null + ticker.mode.head_revolutionaries -=src + src << "\red The nanobots in the loyalty implant remove all thoughts about being a revolutionary. Get back to work!" + if(src in ticker.mode.cult) + ticker.mode.cult -= src + ticker.mode.update_cult_icons_removed(src) + special_role = null + var/datum/game_mode/cult/cult = ticker.mode + if (istype(cult)) + cult.memoize_cult_objectives(src) + current << "\red The nanobots in the loyalty implant remove all thoughts about being in a cult. Have a productive day!" + memory = "" + if(src in ticker.mode.traitors) + ticker.mode.traitors -= src + special_role = null + current << "\red The nanobots in the loyalty implant remove all thoughts about being a traitor to Nanotrasen. Have a nice day!" + log_admin("[key_name_admin(usr)] has de-traitor'ed [current].") + else if (href_list["revolution"]) switch(href_list["revolution"]) if("clear") @@ -762,8 +809,8 @@ datum/mind special_role = "traitor" current << "\red You are a traitor!" log_admin("[key_name_admin(usr)] has traitor'ed [current].") - if(isAI(current)) - var/mob/living/silicon/ai/A = current + if(istype(current, /mob/living/silicon)) + var/mob/living/silicon/A = current call(/datum/game_mode/proc/add_law_zero)(A) A.show_laws() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b896813cd56..7a3bb5bbf08 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -317,6 +317,14 @@ if(armor >= 2) return +/mob/living/carbon/human/proc/is_loyalty_implanted(mob/living/carbon/human/M) + for(var/L in M.contents) + if(istype(L, /obj/item/weapon/implant/loyalty)) + for(var/datum/organ/external/O in M.organs) + if(L in O.implants) + return 1 + return 0 + /mob/living/carbon/human/attack_slime(mob/living/carbon/slime/M as mob) if(M.Victim) return // can't attack while eating!