diff --git a/code/datums/mind.dm b/code/datums/mind.dm index c622bd2c083..fd33f300338 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -147,7 +147,7 @@ var/mob/living/carbon/human/H = current if (istype(current, /mob/living/carbon/human)) /** Impanted**/ - if(H.is_loyalty_implanted()) + if(isloyal(H)) text = "Loyalty Implant:Remove|Implanted
" else text = "Loyalty Implant:No Implant|Implant him!
" @@ -157,7 +157,7 @@ if (ticker.mode.config_tag=="revolution") text += uppertext(text) text = "[text]: " - if (H.is_loyalty_implanted()) + if (isloyal(H)) text += "LOYAL EMPLOYEE|headrev|rev" else if (src in ticker.mode.head_revolutionaries) text = "employee|HEADREV|rev" @@ -193,7 +193,7 @@ if (ticker.mode.config_tag=="cult") text = uppertext(text) text = "[text]: " - if (H.is_loyalty_implanted()) + if (isloyal(H)) text += "LOYAL EMPLOYEE|cultist" else if (src in ticker.mode.cult) text += "employee|CULTIST" @@ -307,7 +307,7 @@ if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan") text = uppertext(text) text = "[text]: " - if (H.is_loyalty_implanted()) + if (isloyal(H)) text +="traitor|LOYAL EMPLOYEE" else if (src in ticker.mode.traitors) @@ -619,9 +619,8 @@ switch(href_list["implant"]) if("remove") for(var/obj/item/weapon/implant/loyalty/I in H.contents) - for(var/obj/item/organ/external/organs in H.organs) - if(I in organs.implants) - qdel(I) + if(I && I.implanted) + I.removed(H) H << "\blue Your loyalty implant has been deactivated." log_admin("[key_name(usr)] has deactivated [key_name(current)]'s loyalty implant") message_admins("[key_name_admin(usr)] has deactivated [key_name_admin(current)]'s loyalty implant") @@ -629,9 +628,6 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() log_admin("[key_name(usr)] has given [key_name(current)] a loyalty implant") @@ -655,11 +651,6 @@ cult.memorize_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"]) diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index 06b09867e6e..a0059416276 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -92,9 +92,8 @@ if(ishuman(player.current)) var/mob/living/carbon/human/H = player.current for(var/obj/item/weapon/implant/loyalty/I in H.contents) - for(var/obj/item/organ/external/organs in H.organs) - if(I in organs.implants) - possible_traitors -= player + if(I && I.implanted) + possible_traitors -= player //message_admins("Live Players: [playercount]") //message_admins("Live Traitors: [traitorcount]") diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 0ec4d72b5de..87cc9c46b58 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -22,7 +22,7 @@ return 0 if(ishuman(mind.current)) var/mob/living/carbon/human/H = mind.current - if(H.is_loyalty_implanted()) + if(isloyal(H)) return 0 return 1 diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 07163cb3669..f45253262d1 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -113,12 +113,9 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT) //Now apply cortical stack. - var/obj/item/organ/external/E = vox.get_organ("head") var/obj/item/weapon/implant/cortical/I = new(vox) I.imp_in = vox I.implanted = 1 - I.part = E - E.implants += I cortical_stacks += I vox.equip_vox_raider() diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index b752a9f28aa..9fe84dba496 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -43,9 +43,6 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() return 1 @@ -90,9 +87,6 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() return 1 @@ -146,9 +140,6 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() H.dna.SetSEState(SOBERBLOCK,1) @@ -194,9 +185,6 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() return 1 @@ -233,9 +221,6 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() return 1 @@ -274,8 +259,5 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() return 1 \ No newline at end of file diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 0438faec5fc..2475df770b3 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -38,11 +38,8 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - captain_announcement.Announce("All hands, captain [H.real_name] on deck!") - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() + captain_announcement.Announce("All hands, captain [H.real_name] on deck!") callHook("captain_spawned", list("captain" = H)) return 1 @@ -137,9 +134,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() return 1 @@ -187,9 +181,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() return 1 @@ -231,9 +222,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() return 1 @@ -274,8 +262,5 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected H.sec_hud_set_implants() return 1 \ No newline at end of file diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index ac0b901ddbf..4fbbf78d9ef 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -196,7 +196,6 @@ /obj/machinery/body_scanconsole var/obj/machinery/bodyscanner/connected - var/known_implants = list(/obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/loyalty, /obj/item/weapon/implant/tracking) var/delete var/temphtml name = "Body Scanner Console" @@ -363,8 +362,6 @@ for(var/obj/I in E.implants) var/implantSubData[0] implantSubData["name"] = I.name - if(is_type_in_list(I, known_implants)) - implantSubData["known"] = 1 implantData.Add(list(implantSubData)) @@ -571,10 +568,7 @@ var/unknown_body = 0 for(var/I in e.implants) - if(is_type_in_list(I,known_implants)) - imp += "[I] implanted:" - else - unknown_body++ + unknown_body++ if(unknown_body || e.hidden) imp += "Unknown body present:" diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 91c6c6726e1..c466c5ba811 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -8,7 +8,6 @@ var/activated = 1 //1 for implant types that can be activated, 0 for ones that are "always on" like loyalty implants var/implanted = null var/mob/living/imp_in = null - var/obj/item/organ/external/part = null item_color = "b" var/allow_multiple = 0 var/uses = -1 @@ -49,10 +48,6 @@ implanted = 1 if(istype(source, /mob/living/carbon/human)) var/mob/living/carbon/human/H = source - if(user) - var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - affected.implants += src - part = affected H.sec_hud_set_implants() if(user) diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 68457089d09..b17e51fef19 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -248,6 +248,7 @@ var/send_emergency_team var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M) L.imp_in = M L.implanted = 1 + M.sec_hud_set_implants() switch(officer_type) if("Engineer") diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 798dd02b85f..038c9a27b3f 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -520,12 +520,9 @@ client/proc/one_click_antag() limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT) //Now apply cortical stack. - var/obj/item/organ/external/E = new_vox.get_organ("head") var/obj/item/weapon/implant/cortical/I = new(new_vox) I.imp_in = new_vox I.implanted = 1 - I.part = E - E.implants += I cortical_stacks += I ticker.mode.traitors += new_vox.mind diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index d34b998b39c..955d40c9724 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -160,8 +160,7 @@ var/global/sent_strike_team = 0 var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)//Here you go Deuryn L.imp_in = src L.implanted = 1 - - + sec_hud_set_implants() var/obj/item/weapon/card/id/W = new(src) W.name = "[real_name]'s ID Card" diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm index 33854109bc4..c5e370f06f7 100644 --- a/code/modules/admin/verbs/vox_raiders.dm +++ b/code/modules/admin/verbs/vox_raiders.dm @@ -63,9 +63,6 @@ var/global/vox_tick = 1 var/obj/item/weapon/implant/cortical/I = new(src) I.imp_in = src I.implanted = 1 - var/obj/item/organ/external/affected = src.get_organ("head") - affected.implants += I - I.part = affected if(ticker.mode && ( istype(ticker.mode,/datum/game_mode/vox/heist) ) ) var/datum/game_mode/vox/heist/M = ticker.mode diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index cc1079c21ee..2590051a7fc 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -455,14 +455,6 @@ var/armor_block = run_armor_check(affecting, "melee") apply_damage(damage, BRUTE, affecting, armor_block) -/mob/living/carbon/human/proc/is_loyalty_implanted() - for(var/L in contents) - if(istype(L, /obj/item/weapon/implant/loyalty)) - for(var/obj/item/organ/external/O in 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! diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index 7200ac6fa04..d98a72f8e98 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -91,9 +91,6 @@ var/obj/item/weapon/implant/freedom/L = new/obj/item/weapon/implant/freedom(H) L.imp_in = H L.implanted = 1 - var/obj/item/organ/external/affected = H.organs_by_name["head"] - affected.implants += L - L.part = affected return 1 diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index d0638dcc1d4..25ebaf28f6c 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -156,7 +156,7 @@ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - + var/obj/item/weapon/implant/I = locate(/obj/item/weapon/implant) in target if (affected.implants.len) @@ -166,8 +166,6 @@ "\blue You take [obj] out of [target]'s [affected.name]s with \the [tool]." ) affected.implants -= obj - target.sec_hud_set_implants() - //Handle possessive brain borers. if(istype(obj,/mob/living/simple_animal/borer)) var/mob/living/simple_animal/borer/worm = obj @@ -177,26 +175,29 @@ worm.leave_host() obj.loc = get_turf(target) - if(istype(obj,/obj/item/weapon/implant)) - var/obj/item/weapon/implant/imp = obj - imp.removed(target) - var/obj/item/weapon/implantcase/case + else if(I && target_zone == "chest") //implant removal only works on the chest. + user.visible_message("[user] takes something out of [target]'s [affected.name] with \the [tool].", \ + "You take [I] out of [target]'s [affected.name]s with \the [tool]." ) - if(istype(user.get_item_by_slot(slot_l_hand), /obj/item/weapon/implantcase)) - case = user.get_item_by_slot(slot_l_hand) - else if(istype(user.get_item_by_slot(slot_r_hand), /obj/item/weapon/implantcase)) - case = user.get_item_by_slot(slot_r_hand) - else - case = locate(/obj/item/weapon/implantcase) in get_turf(target) + I.removed(target) - if(case && !case.imp) - case.imp = imp - imp.loc = case - case.update_icon() - user.visible_message("[user] places [imp] into [case]!", "You place [imp] into [case].") - else - qdel(imp) + var/obj/item/weapon/implantcase/case + + if(istype(user.get_item_by_slot(slot_l_hand), /obj/item/weapon/implantcase)) + case = user.get_item_by_slot(slot_l_hand) + else if(istype(user.get_item_by_slot(slot_r_hand), /obj/item/weapon/implantcase)) + case = user.get_item_by_slot(slot_r_hand) + else + case = locate(/obj/item/weapon/implantcase) in get_turf(target) + + if(case && !case.imp) + case.imp = I + I.loc = case + case.update_icon() + user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") + else + qdel(I) else if (affected.hidden) user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ diff --git a/html/changelogs/implant-refactor-II-fox-mccloud.yml b/html/changelogs/implant-refactor-II-fox-mccloud.yml new file mode 100644 index 00000000000..def9445392b --- /dev/null +++ b/html/changelogs/implant-refactor-II-fox-mccloud.yml @@ -0,0 +1,7 @@ + +author: Fox McCloud + +delete-after: True + +changes: + - tweaks: "Tweaks implant behavior to be more consistent and unified." \ No newline at end of file