From f80fa9933de40d7e88b62b28388b249a013103f2 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sat, 4 Feb 2023 02:57:24 +0200 Subject: [PATCH] Internals Dropping (#15710) Co-authored-by: Matt Atlas --- .../hud/screen_object_types/internals.dm | 20 +++++++++++-------- .../mob/living/carbon/human/inventory.dm | 8 ++++---- html/changelogs/geeves-internals_dropping.yml | 7 +++++++ 3 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 html/changelogs/geeves-internals_dropping.yml diff --git a/code/_onclick/hud/screen_object_types/internals.dm b/code/_onclick/hud/screen_object_types/internals.dm index b936f2c0505..79cdf17ce99 100644 --- a/code/_onclick/hud/screen_object_types/internals.dm +++ b/code/_onclick/hud/screen_object_types/internals.dm @@ -14,14 +14,7 @@ if(C.internals) C.internals.icon_state = "internal0" else - - var/no_mask - if(!(C.wear_mask && C.wear_mask.item_flags & AIRTIGHT)) - var/mob/living/carbon/human/H = C - if(!(H.head && H.head.item_flags & AIRTIGHT)) - no_mask = 1 - - if(no_mask) + if(!has_internals_mask(C)) to_chat(C, "You are not wearing a suitable mask or helmet.") return 1 else @@ -150,3 +143,14 @@ C.internals.icon_state = "internal1" else to_chat(C, "You don't have a[breathes==GAS_OXYGEN ? "n oxygen" : addtext(" ",breathes)] tank.") + +/obj/screen/internals/proc/lose_internals(var/mob/living/carbon/human/user) + icon_state = "internal0" + user.internal = null + +/obj/screen/internals/proc/has_internals_mask(var/mob/living/carbon/human/user) + if(user.wear_mask && HAS_FLAG(user.wear_mask.item_flags, AIRTIGHT)) + return TRUE + if(user.head && HAS_FLAG(user.head.item_flags, AIRTIGHT)) + return TRUE + return FALSE diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index c718e8841fc..6b42f26e124 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -142,6 +142,8 @@ This saves us from having to call add_fingerprint() any time something is put in update_inv_l_ear(0) update_inv_r_ear(0) update_inv_wear_mask(0) + if(internal && internals && !internals.has_internals_mask(src)) + internals.lose_internals(src) update_inv_head() else if (W == l_ear) l_ear = null @@ -176,10 +178,8 @@ This saves us from having to call add_fingerprint() any time something is put in update_hair(0) //rebuild hair update_inv_l_ear(0) update_inv_r_ear(0) - if(internal) - if(internals) - internals.icon_state = "internal0" - internal = null + if(internal && internals && !internals.has_internals_mask(src)) + internals.lose_internals(src) update_inv_wear_mask() else if (W == wear_id) wear_id = null diff --git a/html/changelogs/geeves-internals_dropping.yml b/html/changelogs/geeves-internals_dropping.yml new file mode 100644 index 00000000000..40dce6b9d33 --- /dev/null +++ b/html/changelogs/geeves-internals_dropping.yml @@ -0,0 +1,7 @@ +author: Geeves + +delete-after: True + +changes: + - bugfix: "You will no longer lose internals if you drop a mask/helmet and have an airtight helmet/mask to spare." + - bugfix: "You will now lose internals if you drop a helmet and don't have an airtight mask to spare." \ No newline at end of file