diff --git a/code/datums/uplink_items/uplink_traitor.dm b/code/datums/uplink_items/uplink_traitor.dm index 9ee2462721c..1db1a5c0afd 100644 --- a/code/datums/uplink_items/uplink_traitor.dm +++ b/code/datums/uplink_items/uplink_traitor.dm @@ -411,12 +411,21 @@ /datum/uplink_item/stealthy_tools/voice_modulator name = "Chameleon Voice Modulator Mask" desc = "A syndicate tactical mask equipped with chameleon technology and a sound modulator for disguising your voice. \ - While the mask is active, your voice will sound unrecognizable to others" + While the mask is active, your voice will sound unrecognizable to others." reference = "CVMM" item = /obj/item/clothing/mask/gas/voice_modulator/chameleon cost = 5 excludefrom = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) +/datum/uplink_item/stealthy_tools/silicon_cham_suit + name = "\"Big Brother\" Obfuscation Suit" + desc = "A syndicate tactical suit equipped with the latest in anti-silicon technology and, allegedly, biological technology learned from the Changeling Hivemind. \ + While this suit is worn, you will be unable to be tracked or seen by on-Station AI." + reference = "BBOS" + item = /obj/item/clothing/under/syndicate/silicon_cham + cost = 20 + excludefrom = list(UPLINK_TYPE_NUCLEAR) + /datum/uplink_item/stealthy_weapons/sleepy_pen name = "Sleepy Pen" desc = "A syringe disguised as a functional pen. It's filled with a potent anaesthetic. \ The pen holds two doses of the mixture. The pen can be refilled." diff --git a/code/modules/antagonists/traitor/contractor/items/contractor_kit.dm b/code/modules/antagonists/traitor/contractor/items/contractor_kit.dm index aa686aefbeb..93759920b84 100644 --- a/code/modules/antagonists/traitor/contractor/items/contractor_kit.dm +++ b/code/modules/antagonists/traitor/contractor/items/contractor_kit.dm @@ -30,6 +30,7 @@ /obj/item/multitool/ai_detect, /obj/item/encryptionkey/binary, /obj/item/jammer, + /obj/item/clothing/under/syndicate/silicon_cham, /obj/item/implanter/freedom, ) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 8324c452b89..044c6a562ac 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -35,6 +35,8 @@ var/species_disguise = null var/magical = FALSE var/dyeable = FALSE + /// Do we block AI tracking? + var/blockTracking w_class = WEIGHT_CLASS_SMALL /obj/item/clothing/update_icon_state() @@ -371,7 +373,6 @@ icon = 'icons/obj/clothing/hats.dmi' body_parts_covered = HEAD slot_flags = SLOT_HEAD - var/blockTracking // Do we block AI tracking? var/HUDType = null var/vision_flags = 0 diff --git a/code/modules/clothing/under/syndicate_jumpsuits.dm b/code/modules/clothing/under/syndicate_jumpsuits.dm index ad85ded04d4..ac1645b14f9 100644 --- a/code/modules/clothing/under/syndicate_jumpsuits.dm +++ b/code/modules/clothing/under/syndicate_jumpsuits.dm @@ -35,3 +35,22 @@ icon_state = "tactical_suit" item_state = "bl_suit" item_color = "tactical_suit" + +/obj/item/clothing/under/syndicate/silicon_cham + name = "tactical turtleneck" + desc = "A non-descript and slightly suspicious looking turtleneck with digital camouflage cargo pants. This one has extra cybernetic modifications." + blockTracking = TRUE + +/obj/item/clothing/under/syndicate/silicon_cham/equipped(mob/user, slot, initial) + . = ..() + if(slot == slot_w_uniform) + ADD_TRAIT(user, TRAIT_AI_UNTRACKABLE, "silicon_cham[UID()]") + user.invisibility = SEE_INVISIBLE_LIVING + to_chat(user, "You feel a slight shiver as the cybernetic obfuscators activate.") + +/obj/item/clothing/under/syndicate/silicon_cham/dropped(mob/user) + . = ..() + if(user) + REMOVE_TRAIT(user, TRAIT_AI_UNTRACKABLE, "silicon_cham[UID()]") + user.invisibility = initial(user.invisibility) + to_chat(user, "You feel a slight shiver as the cybernetic obfuscators deactivate.") diff --git a/code/modules/mob/living/carbon/human/human_mob.dm b/code/modules/mob/living/carbon/human/human_mob.dm index cf996166b14..3c923976d1c 100644 --- a/code/modules/mob/living/carbon/human/human_mob.dm +++ b/code/modules/mob/living/carbon/human/human_mob.dm @@ -1812,15 +1812,19 @@ Eyes need to have significantly high darksight to shine unless the mob has the X if(wear_id) var/obj/item/card/id/id = wear_id.GetID() if(istype(id) && id.is_untrackable()) - return 0 + return FALSE if(wear_pda) var/obj/item/card/id/id = wear_pda.GetID() if(istype(id) && id.is_untrackable()) - return 0 + return FALSE if(istype(head, /obj/item/clothing/head)) var/obj/item/clothing/head/hat = head if(hat.blockTracking) - return 0 + return FALSE + if(w_uniform) + var/obj/item/clothing/under/uniform = w_uniform + if(uniform.blockTracking) + return FALSE return ..()