From 0dcfcd90b83ed348b8fb5bbf877066b30e239643 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 9 Mar 2021 11:55:17 +1100 Subject: [PATCH] Tweaked implant loadout, refactored implant detection. --- code/game/machinery/adv_med.dm | 15 +++++++-------- code/game/machinery/cloning.dm | 1 + .../objects/items/weapons/implants/implant.dm | 19 +++++++++++++------ .../items/weapons/implants/implantlanguage.dm | 1 + .../preference_setup/loadout/gear_tweaks.dm | 18 +++++++++--------- 5 files changed, 31 insertions(+), 23 deletions(-) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index c405ddf1f6..075040cbc9 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -14,7 +14,6 @@ active_power_usage = 10000 //10 kW. It's a big all-body scanner. light_color = "#00FF00" var/obj/machinery/body_scanconsole/console - var/known_implants = list(/obj/item/weapon/implant/health, /obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/loyalty, /obj/item/weapon/implant/tracking, /obj/item/weapon/implant/language, /obj/item/weapon/implant/language/eal) var/printing_text = null /obj/machinery/bodyscanner/Initialize() @@ -255,12 +254,11 @@ organData["broken"] = E.min_broken_damage var/implantData[0] - for(var/obj/I in E.implants) + for(var/obj/thing in E.implants) var/implantSubData[0] - implantSubData["name"] = I.name - if(is_type_in_list(I, known_implants)) - implantSubData["known"] = 1 - + var/obj/item/weapon/implant/I = thing + implantSubData["name"] = I.name + implantSubData["known"] = istype(I) && I.known_implant implantData.Add(list(implantSubData)) organData["implants"] = implantData @@ -463,8 +461,9 @@ infected = "Gangrene Detected:" var/unknown_body = 0 - for(var/I in e.implants) - if(is_type_in_list(I,known_implants)) + for(var/thing in e.implants) + var/obj/item/weapon/implant/I = thing + if(istype(I) && I.known_implant) imp += "[I] implanted:" else unknown_body++ diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 39b5748762..0370990ae6 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -465,6 +465,7 @@ /obj/item/weapon/implant/health name = "health implant" + known_implant = TRUE var/healthstring = "" /obj/item/weapon/implant/health/proc/sensehealth() diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 81d5bb8f04..b06e92cc4a 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -7,6 +7,8 @@ icon = 'icons/obj/device.dmi' icon_state = "implant" w_class = ITEMSIZE_TINY + show_messages = TRUE + var/implanted = null var/mob/imp_in = null var/obj/item/organ/external/part = null @@ -14,7 +16,7 @@ var/allow_reagents = 0 var/malfunction = 0 var/initialize_loc = BP_TORSO - show_messages = 1 + var/known_implant = FALSE /obj/item/weapon/implant/proc/trigger(emote, source as mob) return @@ -65,16 +67,17 @@ malfunction = MALFUNCTION_PERMANENT /obj/item/weapon/implant/proc/implant_loadout(var/mob/living/carbon/human/H) - if(H) - if(handle_implant(H, initialize_loc)) - invisibility = initial(invisibility) - post_implant(H) + . = istype(H) && handle_implant(H, initialize_loc) + if(.) + invisibility = initial(invisibility) + known_implant = TRUE + post_implant(H) /obj/item/weapon/implant/Destroy() if(part) part.implants.Remove(src) + part = null listening_objects.Remove(src) - part = null imp_in = null return ..() @@ -100,6 +103,7 @@ GLOBAL_LIST_BOILERPLATE(all_tracking_implants, /obj/item/weapon/implant/tracking /obj/item/weapon/implant/tracking name = "tracking implant" desc = "An implant normally given to dangerous criminals. Allows security to track your location." + known_implant = TRUE var/id = 1 var/degrade_time = 10 MINUTES //How long before the implant stops working outside of a living body. @@ -348,6 +352,7 @@ GLOBAL_LIST_BOILERPLATE(all_chem_implants, /obj/item/weapon/implant/chem) name = "chemical implant" desc = "Injects things." allow_reagents = 1 + known_implant = TRUE /obj/item/weapon/implant/chem/get_data() var/dat = {" @@ -418,6 +423,7 @@ the implant may become unstable and either pre-maturely inject the subject or si /obj/item/weapon/implant/loyalty name = "loyalty implant" desc = "Makes you loyal or such." + known_implant = TRUE /obj/item/weapon/implant/loyalty/get_data() var/dat = {" @@ -491,6 +497,7 @@ the implant may become unstable and either pre-maturely inject the subject or si name = "death alarm implant" desc = "An alarm which monitors host vital signs and transmits a radio message upon death." origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_DATA = 1) + known_implant = TRUE var/mobname = "Will Robinson" /obj/item/weapon/implant/death_alarm/get_data() diff --git a/code/game/objects/items/weapons/implants/implantlanguage.dm b/code/game/objects/items/weapons/implants/implantlanguage.dm index 6a0f2baea8..692cdd381f 100644 --- a/code/game/objects/items/weapons/implants/implantlanguage.dm +++ b/code/game/objects/items/weapons/implants/implantlanguage.dm @@ -5,6 +5,7 @@ /obj/item/weapon/implant/language name = "GalCom language implant" desc = "An implant allowing someone to speak the range of frequencies used in Galactic Common, as well as produce any phonemes that they usually cannot. Only helps with producing sounds, not understanding them." + known_implant = TRUE var/list/languages = list(LANGUAGE_GALCOM) // List of languages that this assists with /obj/item/weapon/implant/language/post_implant(mob/M) // Amends the mob's voice organ, then deletes itself diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index b24bcc7121..0c26ba6ae5 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -512,6 +512,9 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new() /datum/gear_tweak/implant_location var/static/list/bodypart_names_to_tokens = list( + "head" = BP_HEAD, + "upper body" = BP_TORSO, + "lower body" = BP_GROIN, "left hand" = BP_L_HAND, "left arm" = BP_L_ARM, "right hand" = BP_R_HAND, @@ -519,12 +522,12 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new() "left foot" = BP_L_FOOT, "left leg" = BP_L_LEG, "right foot" = BP_R_FOOT, - "right leg" = BP_R_LEG, - "lower body" = BP_GROIN, - "upper body" = BP_TORSO, - "head" = BP_HEAD + "right leg" = BP_R_LEG ) var/static/list/bodypart_tokens_to_names = list( + BP_HEAD = "head", + BP_TORSO = "upper body", + BP_GROIN = "lower body", BP_LEFT_HAND = "left hand", BP_LEFT_ARM = "left arm", BP_RIGHT_HAND = "right hand", @@ -532,14 +535,11 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new() BP_LEFT_FOOT = "left foot", BP_LEFT_LEG = "left leg", BP_RIGHT_FOOT = "right foot", - BP_RIGHT_LEG = "right leg", - BP_GROIN = "lower body", - BP_TORSO = "upper body", - BP_HEAD = "head" + BP_RIGHT_LEG = "right leg" ) /datum/gear_tweak/implant_location/get_default() - return BP_TORSO + return bodypart_names_to_tokens[1] /datum/gear_tweak/implant_location/tweak_item(var/obj/item/weapon/implant/I, var/metadata) if(istype(I))