diff --git a/code/datums/uplink_items/uplink_traitor.dm b/code/datums/uplink_items/uplink_traitor.dm index a0adf04fb12..21ec9e39808 100644 --- a/code/datums/uplink_items/uplink_traitor.dm +++ b/code/datums/uplink_items/uplink_traitor.dm @@ -276,6 +276,15 @@ cost = 30 job = list("Life Support Specialist") +/datum/uplink_item/jobspecific/contortionist_plasmaman + name = "Contortionist's Plasma Envirosuit" + desc = "A highly flexible envirosuit that will help you navigate the ventilation loops of the station internally, specialized for Plasmamen. Comes with pockets and ID slot, but can't be used without stripping off most gear, including backpack, belt, and exosuit. Free hands are also necessary to crawl around inside." + reference = "AIRJP" + item = /obj/item/clothing/under/plasmaman/atmospherics/contortionist + cost = 30 + job = list("Life Support Specialist") + species = list("Plasmaman") + /datum/uplink_item/jobspecific/energizedfireaxe name = "Energized Fire Axe" desc = "A fire axe with a massive energy charge built into it. Upon striking someone while charged it will throw them backwards while stunning them briefly, but will take some time to charge up again. It is also much sharper than a regular axe and can pierce light armor." diff --git a/code/modules/clothing/under/jobs/plasmamen/engineering_plasmasuits.dm b/code/modules/clothing/under/jobs/plasmamen/engineering_plasmasuits.dm index 494fa6be6cc..66f4d2c15a4 100644 --- a/code/modules/clothing/under/jobs/plasmamen/engineering_plasmasuits.dm +++ b/code/modules/clothing/under/jobs/plasmamen/engineering_plasmasuits.dm @@ -20,3 +20,30 @@ item_state = "atmos_envirosuit" item_color = "atmos_envirosuit" +/obj/item/clothing/under/plasmaman/atmospherics/contortionist + name = "atmospherics plasma envirosuit" + desc = "An airtight suit designed to be used by plasmemen for squeezing through narrow vents." + resistance_flags = FIRE_PROOF + +/obj/item/clothing/under/plasmaman/atmospherics/contortionist/equipped(mob/living/carbon/human/user, slot) + . = ..() + if(slot != ITEM_SLOT_JUMPSUIT) + return + if(!user.ventcrawler) + user.ventcrawler = VENTCRAWLER_ALWAYS + +/obj/item/clothing/under/plasmaman/atmospherics/contortionist/dropped(mob/living/carbon/human/user) + . = ..() + if(user.get_item_by_slot(ITEM_SLOT_JUMPSUIT) != src) + return + if(!user.get_int_organ(/obj/item/organ/internal/heart/gland/ventcrawling)) // This is such a snowflaky check + user.ventcrawler = VENTCRAWLER_NONE + +/obj/item/clothing/under/plasmaman/atmospherics/contortionist/proc/check_clothing(mob/user) + //Allowed to wear: glasses, shoes, gloves, pockets, mask, jumpsuit (obviously), and helmet (obviously) + var/list/slot_must_be_empty = list(ITEM_SLOT_BACK, ITEM_SLOT_HANDCUFFED, ITEM_SLOT_LEGCUFFED, ITEM_SLOT_LEFT_HAND, ITEM_SLOT_RIGHT_HAND, ITEM_SLOT_BELT, ITEM_SLOT_OUTER_SUIT) + for(var/slot_id in slot_must_be_empty) + if(user.get_item_by_slot(slot_id)) + to_chat(user,"You can't fit inside while wearing [user.get_item_by_slot(slot_id)].") + return FALSE + return TRUE diff --git a/code/modules/mob/living/carbon/carbon_procs.dm b/code/modules/mob/living/carbon/carbon_procs.dm index 1a07f40d022..a75310785c0 100644 --- a/code/modules/mob/living/carbon/carbon_procs.dm +++ b/code/modules/mob/living/carbon/carbon_procs.dm @@ -474,6 +474,14 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven if(!C.check_clothing(src))//return values confuse me right now return + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under/plasmaman/atmospherics/contortionist)) + var/obj/item/clothing/under/plasmaman/atmospherics/contortionist/C = H.w_uniform + if(!C.check_clothing(src)) + return + + var/obj/machinery/atmospherics/unary/vent_found if(clicked_on)