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