From 2b24732b9dc9e715418cafbd3c7e72aabf46fb16 Mon Sep 17 00:00:00 2001
From: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Date: Mon, 23 Feb 2026 23:50:53 +0100
Subject: [PATCH] Husked mobs now keep some of their bodypart overlays (#95155)
## About The Pull Request
(Some) tails, snouts, horns and other "solid" bodypart overlays are now
preserved on husked mobs, meaning that lizards or fishpeople will no
longer suddenly lose a chunk of their body when husked. Cybernetic
implants, being inorganic, are not colored and preserver their visuals
in full.
## Why It's Good For The Game
Husking hasn't been an effective method of anonymizing corpses for a
very long while, and I think that visual consistency here doesn't hurt
it much more while making the game feel more immersive and cohesive.
## Changelog
:cl:
balance: Husked mobs now keep some of their bodypart overlays, such as
snouts, tails and horns
/:cl:
---
code/__DEFINES/bodyparts.dm | 7 +++++
.../bodypart_overlays/bodypart_overlay.dm | 31 +++++++++++++------
.../markings_bodypart_overlay.dm | 4 +--
.../simple_bodypart_overlay.dm | 1 +
.../texture_bodypart_overlay.dm | 4 ++-
.../dna_infuser/organ_sets/fish_organs.dm | 4 ++-
.../dna_infuser/organ_sets/roach_organs.dm | 1 +
code/modules/fishing/fish/types/rift.dm | 5 +--
.../mob/living/carbon/carbon_update_icons.dm | 8 ++++-
.../carbon/human/species_types/mushpeople.dm | 4 +--
code/modules/surgery/bodyparts/_bodyparts.dm | 9 ++----
.../surgery/organs/external/_visual_organs.dm | 24 +++++++-------
.../modules/surgery/organs/external/spines.dm | 5 +--
code/modules/surgery/organs/external/tails.dm | 11 ++++---
.../organs/external/wings/moth_wings.dm | 5 +--
.../surgery/organs/external/wings/wings.dm | 6 ++--
.../internal/cyberimp/augments_internal.dm | 1 +
.../surgery/organs/internal/ears/_ears.dm | 4 +--
18 files changed, 84 insertions(+), 50 deletions(-)
diff --git a/code/__DEFINES/bodyparts.dm b/code/__DEFINES/bodyparts.dm
index 9bdc517a6ac..9aa4951ed79 100644
--- a/code/__DEFINES/bodyparts.dm
+++ b/code/__DEFINES/bodyparts.dm
@@ -183,6 +183,13 @@ DEFINE_BITFIELD(surgery_state, list(
/// How much blood is lost from clamped vessels or cut organs?
#define CLAMPED_VESSELS_BLEEDING 0.2
+/// Do not draw this bodypart overlay on husks
+#define HUSK_OVERLAY_NONE 0
+/// Draw this overlay on husks but grayscale it
+#define HUSK_OVERLAY_GRAYSCALE 1
+/// Draw this overlay on husks as normal
+#define HUSK_OVERLAY_NORMAL 2
+
// Limb item categories
/// Gauze slot, asserted to be wrap items
#define LIMB_ITEM_GAUZE "gauze"
diff --git a/code/datums/bodypart_overlays/bodypart_overlay.dm b/code/datums/bodypart_overlays/bodypart_overlay.dm
index 798919d96b6..19bf44f39a3 100644
--- a/code/datums/bodypart_overlays/bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/bodypart_overlay.dm
@@ -1,22 +1,28 @@
///Bodypart ovarlay datum. These can be added to any limb to give them a proper overlay, that'll even stay if the limb gets removed
///This is the abstract parent, don't use it!!
/datum/bodypart_overlay
- ///Sometimes we need multiple layers, for like the back, middle and front of the person (EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND)
+ /// Sometimes we need multiple layers, for like the back, middle and front of the person (EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND)
var/layers
- ///List of all possible layers. Used for looping through in drawing
+ /// List of all possible layers. Used for looping through in drawing
var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND)
-
- ///Key of the icon states of all the sprite_datums for easy caching
+ /// Key of the icon states of all the sprite_datums for easy caching
var/cache_key = ""
-
/// Whether the overlay blocks emissive light
var/blocks_emissive = EMISSIVE_BLOCK_UNIQUE
+ /// Can this overlay be drawn on husked mobs?
+ var/draw_on_husks = HUSK_OVERLAY_NONE
///Wrapper for getting the proper image, colored and everything
-/datum/bodypart_overlay/proc/get_overlay(layer, obj/item/bodypart/limb)
+/datum/bodypart_overlay/proc/get_overlay(layer, obj/item/bodypart/limb, is_husked = FALSE)
layer = bitflag_to_layer(layer)
var/image/main_image = get_image(layer, limb)
- color_image(main_image, layer, limb)
+
+ if (is_husked && draw_on_husks != HUSK_OVERLAY_NORMAL)
+ main_image = huskify_image(main_image)
+ main_image.color = limb.husk_color
+ else
+ color_image(main_image, layer, limb)
+
if(blocks_emissive == EMISSIVE_BLOCK_NONE || !limb)
return main_image
@@ -26,6 +32,12 @@
)
return all_images
+/datum/bodypart_overlay/proc/huskify_image(image/main_image)
+ var/icon/husk_icon = new(main_image.icon)
+ husk_icon.ColorTone(HUSK_COLOR_TONE)
+ main_image.icon = husk_icon
+ return main_image
+
///Generate the image. Needs to be overridden
/datum/bodypart_overlay/proc/get_image(layer, obj/item/bodypart/limb)
CRASH("Get image needs to be overridden")
@@ -69,8 +81,9 @@
return -BODY_FRONT_LAYER
///Check whether we can draw the overlays. You generally don't want lizard snouts to draw over an EVA suit
-/datum/bodypart_overlay/proc/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return TRUE
+/datum/bodypart_overlay/proc/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ SHOULD_CALL_PARENT(TRUE)
+ return !is_husked || draw_on_husks
///Colorizes the limb it's inserted to, if required.
/datum/bodypart_overlay/proc/override_color(obj/item/bodypart/bodypart_owner)
diff --git a/code/datums/bodypart_overlays/markings_bodypart_overlay.dm b/code/datums/bodypart_overlays/markings_bodypart_overlay.dm
index ed02a96ca0f..0cc780794f1 100644
--- a/code/datums/bodypart_overlays/markings_bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/markings_bodypart_overlay.dm
@@ -35,8 +35,8 @@
. += use_gender
. += draw_color
-/datum/bodypart_overlay/simple/body_marking/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return icon_state != SPRITE_ACCESSORY_NONE
+/datum/bodypart_overlay/simple/body_marking/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && icon_state != SPRITE_ACCESSORY_NONE
/datum/bodypart_overlay/simple/body_marking/get_image(layer, obj/item/bodypart/limb)
var/gender_string = (use_gender && limb.is_dimorphic) ? (limb.gender == MALE ? MALE : FEMALE + "_") : "" //we only got male and female sprites
diff --git a/code/datums/bodypart_overlays/simple_bodypart_overlay.dm b/code/datums/bodypart_overlays/simple_bodypart_overlay.dm
index 78aa80179f4..a8004811b1a 100644
--- a/code/datums/bodypart_overlays/simple_bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/simple_bodypart_overlay.dm
@@ -24,6 +24,7 @@
/datum/bodypart_overlay/simple/sixpack
icon_state = "sixpack"
layers = EXTERNAL_ADJACENT
+ draw_on_husks = HUSK_OVERLAY_GRAYSCALE
///bags drawn beneath the eyes
/datum/bodypart_overlay/simple/bags
diff --git a/code/datums/bodypart_overlays/texture_bodypart_overlay.dm b/code/datums/bodypart_overlays/texture_bodypart_overlay.dm
index c5f9c7e25ee..70086d45f9c 100644
--- a/code/datums/bodypart_overlays/texture_bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/texture_bodypart_overlay.dm
@@ -19,7 +19,9 @@
/datum/bodypart_overlay/texture/generate_icon_cache()
return "[type]"
-/datum/bodypart_overlay/texture/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
+/datum/bodypart_overlay/texture/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ if (!..())
+ return FALSE
for (var/datum/bodypart_overlay/texture/other_texture in bodypart_owner.bodypart_overlays)
if (other_texture.overlay_priority > overlay_priority)
return FALSE
diff --git a/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm
index 0fb2c198cce..16bf78ee396 100644
--- a/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm
@@ -284,6 +284,7 @@
/datum/bodypart_overlay/mutant/tail/fish
feature_key = FEATURE_TAIL_FISH
color_source = ORGAN_COLOR_OVERRIDE
+ draw_on_husks = HUSK_OVERLAY_GRAYSCALE
/datum/bodypart_overlay/mutant/tail/fish/on_mob_insert(obj/item/organ/parent, mob/living/carbon/receiver)
//Initialize the related dna feature block if we don't have any so it doesn't error out.
@@ -306,7 +307,7 @@
// We add all appearances the parent bodypart has to the tail to inherit scales and fancy effects
// but most other organs don't want to inherit those so we do it here and not on parent
for (var/datum/bodypart_overlay/texture/texture in limb.bodypart_overlays)
- if(texture.can_draw_on_bodypart(limb, limb.owner))
+ if(texture.can_draw_on_bodypart(limb, limb.owner, limb.is_husked))
texture.modify_bodypart_appearance(appearance)
return appearance
@@ -388,6 +389,7 @@
icon = 'icons/mob/human/fish_features.dmi'
icon_state = "gills"
layers = EXTERNAL_ADJACENT
+ draw_on_husks = HUSK_OVERLAY_GRAYSCALE
/datum/bodypart_overlay/simple/gills/get_image(image_layer, obj/item/bodypart/limb)
return image(
diff --git a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm
index 4988ad4d638..125f92375fc 100644
--- a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm
@@ -143,6 +143,7 @@
/datum/bodypart_overlay/simple/roach_shell
icon_state = "roach_shell"
layers = EXTERNAL_FRONT|EXTERNAL_BEHIND
+ draw_on_husks = HUSK_OVERLAY_GRAYSCALE
/datum/bodypart_overlay/simple/roach_shell/get_image(image_layer, obj/item/bodypart/limb)
return image(
diff --git a/code/modules/fishing/fish/types/rift.dm b/code/modules/fishing/fish/types/rift.dm
index 626be1ecde0..4fa2e3336b8 100644
--- a/code/modules/fishing/fish/types/rift.dm
+++ b/code/modules/fishing/fish/types/rift.dm
@@ -721,9 +721,10 @@
*/
/datum/bodypart_overlay/simple/babbearfish
icon_state = "babbearfish"
+ draw_on_husks = HUSK_OVERLAY_NORMAL
-/datum/bodypart_overlay/simple/babbearfish/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEEARS)
+/datum/bodypart_overlay/simple/babbearfish/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDEEARS)
/obj/item/organ/ears/babbelfish/Initialize(mapload)
. = ..()
diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm
index 2a39bb6ab16..271eef3cd40 100644
--- a/code/modules/mob/living/carbon/carbon_update_icons.dm
+++ b/code/modules/mob/living/carbon/carbon_update_icons.dm
@@ -530,7 +530,7 @@
if(is_invisible)
. += "-invisible"
for(var/datum/bodypart_overlay/overlay as anything in bodypart_overlays)
- if(!overlay.can_draw_on_bodypart(src, owner))
+ if(!overlay.can_draw_on_bodypart(src, owner, is_husked))
continue
. += "-[jointext(overlay.generate_icon_cache(), "-")]"
if(ishuman(owner))
@@ -547,11 +547,17 @@
. += "[husk_type]"
. += "-husk"
. += "-[body_zone]"
+ if(is_invisible)
+ . += "-invisible"
var/list/blood_dna = blood_dna_info || owner?.get_blood_dna_list()
if (LAZYLEN(blood_dna))
. += "-[get_color_from_blood_list(blood_dna)]"
else
. += "-[BLOOD_COLOR_RED]"
+ for(var/datum/bodypart_overlay/overlay as anything in bodypart_overlays)
+ if(!overlay.can_draw_on_bodypart(src, owner, TRUE))
+ continue
+ . += "-[jointext(overlay.generate_icon_cache(), "-")]"
if(ishuman(owner))
var/mob/living/carbon/human/human_owner = owner
. += "-[human_owner.mob_height]"
diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
index 3478672772b..c5aea42dc2f 100644
--- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
@@ -72,8 +72,8 @@
feature_key = FEATURE_MUSH_CAP
dyable = TRUE
-/datum/bodypart_overlay/mutant/mushroom_cap/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
+/datum/bodypart_overlay/mutant/mushroom_cap/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
/datum/bodypart_overlay/mutant/mushroom_cap/override_color(obj/item/bodypart/bodypart_owner)
//The mushroom cap is red by default (can still be dyed)
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index c7af5bf0708..f266827d4e5 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -1359,14 +1359,9 @@
// Add two masked images based on the old one
. += leg_source.generate_masked_leg(limb_image)
- // And finally put bodypart_overlays on if not husked
- if(is_husked)
- SEND_SIGNAL(src, COMSIG_BODYPART_GET_LIMB_ICON, ., dropped, update_on)
- return .
-
// Draw external organs like horns and frills
for(var/datum/bodypart_overlay/overlay as anything in bodypart_overlays)
- if(!overlay.can_draw_on_bodypart(src, owner))
+ if(!overlay.can_draw_on_bodypart(src, owner, is_husked))
continue
// Some externals have multiple layers for background, foreground and between
@@ -1374,7 +1369,7 @@
if(!(overlay.layers & external_layer))
continue
- var/external_overlay = overlay.get_overlay(external_layer, src)
+ var/external_overlay = overlay.get_overlay(external_layer, src, is_husked)
if (!dropped)
. += external_overlay
continue
diff --git a/code/modules/surgery/organs/external/_visual_organs.dm b/code/modules/surgery/organs/external/_visual_organs.dm
index f7ba0b1ce6b..45df1a4a29d 100644
--- a/code/modules/surgery/organs/external/_visual_organs.dm
+++ b/code/modules/surgery/organs/external/_visual_organs.dm
@@ -96,7 +96,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
//Build the mob sprite and use it as our overlay
for(var/external_layer in bodypart_overlay.all_layers)
if(bodypart_overlay.layers & external_layer)
- . += bodypart_overlay.get_overlay(external_layer, bodypart_owner)
+ . += bodypart_overlay.get_overlay(external_layer, bodypart_owner, bodypart_owner?.is_husked)
///The horns of a lizard!
/obj/item/organ/horns
@@ -118,9 +118,10 @@ Unlike normal organs, we're actually inside a persons limbs at all times
layers = EXTERNAL_ADJACENT
feature_key = FEATURE_HORNS
dyable = TRUE
+ draw_on_husks = HUSK_OVERLAY_NORMAL
-/datum/bodypart_overlay/mutant/horns/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
+/datum/bodypart_overlay/mutant/horns/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
///The frills of a lizard (like weird fin ears)
/obj/item/organ/frills
@@ -142,8 +143,8 @@ Unlike normal organs, we're actually inside a persons limbs at all times
layers = EXTERNAL_ADJACENT
feature_key = FEATURE_FRILLS
-/datum/bodypart_overlay/mutant/frills/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEEARS)
+/datum/bodypart_overlay/mutant/frills/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDEEARS)
///Guess what part of the lizard this is?
/obj/item/organ/snout
@@ -184,9 +185,10 @@ Unlike normal organs, we're actually inside a persons limbs at all times
/datum/bodypart_overlay/mutant/snout
layers = EXTERNAL_ADJACENT
feature_key = FEATURE_SNOUT
+ draw_on_husks = HUSK_OVERLAY_GRAYSCALE
-/datum/bodypart_overlay/mutant/snout/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDESNOUT)
+/datum/bodypart_overlay/mutant/snout/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDESNOUT)
///A moth's antennae
/obj/item/organ/antennae
@@ -266,8 +268,8 @@ Unlike normal organs, we're actually inside a persons limbs at all times
/datum/bodypart_overlay/mutant/antennae/get_base_icon_state()
return burnt ? burn_datum.icon_state : sprite_datum.icon_state
-/datum/bodypart_overlay/mutant/antennae/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEANTENNAE)
+/datum/bodypart_overlay/mutant/antennae/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDEANTENNAE)
///The leafy hair of a podperson
/obj/item/organ/pod_hair
@@ -308,5 +310,5 @@ Unlike normal organs, we're actually inside a persons limbs at all times
else
overlay.color = null
-/datum/bodypart_overlay/mutant/pod_hair/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
+/datum/bodypart_overlay/mutant/pod_hair/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
diff --git a/code/modules/surgery/organs/external/spines.dm b/code/modules/surgery/organs/external/spines.dm
index 9f9b71ff2d8..e6bbbb59f55 100644
--- a/code/modules/surgery/organs/external/spines.dm
+++ b/code/modules/surgery/organs/external/spines.dm
@@ -31,9 +31,10 @@
layers = EXTERNAL_ADJACENT|EXTERNAL_BEHIND
feature_key = FEATURE_SPINES
dyable = TRUE
+ draw_on_husks = HUSK_OVERLAY_GRAYSCALE
-/datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT)
+/datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT)
/datum/bodypart_overlay/mutant/spines/set_dye_color(new_color, obj/item/organ/tail/organ)
var/obj/item/organ/tail/tail = organ?.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm
index da3e93b4681..67891dcd06d 100644
--- a/code/modules/surgery/organs/external/tails.dm
+++ b/code/modules/surgery/organs/external/tails.dm
@@ -147,8 +147,8 @@
/datum/bodypart_overlay/mutant/tail/get_base_icon_state()
return "[wagging ? "wagging_" : ""][sprite_datum.icon_state]" //add the wagging tag if we be wagging
-/datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT)
+/datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT)
/obj/item/organ/tail/cat
name = "tail"
@@ -216,6 +216,7 @@
/datum/bodypart_overlay/mutant/tail/xeno
color_source = NONE
feature_key = FEATURE_TAIL_XENO
+ draw_on_husks = HUSK_OVERLAY_GRAYSCALE
imprint_on_next_insertion = FALSE
/// We don't want to bother writing this in DNA, just use this appearance
var/default_appearance = "Xeno"
@@ -242,6 +243,7 @@
///Lizard tail bodypart overlay datum
/datum/bodypart_overlay/mutant/tail/lizard
feature_key = FEATURE_TAIL_LIZARD
+ draw_on_husks = HUSK_OVERLAY_GRAYSCALE
/obj/item/organ/tail/lizard/fake
name = "fabricated lizard tail"
@@ -251,6 +253,7 @@
/datum/bodypart_overlay/mutant/tail_spines
layers = EXTERNAL_ADJACENT|EXTERNAL_BEHIND
feature_key = FEATURE_TAILSPINES
+ draw_on_husks = HUSK_OVERLAY_GRAYSCALE
///Spines wag when the tail does
var/wagging = FALSE
/// Key for tail spine states, depends on the shape of the tail. Defined in the tail sprite datum.
@@ -259,8 +262,8 @@
/datum/bodypart_overlay/mutant/tail_spines/get_base_icon_state()
return (!isnull(tail_spine_key) ? "[tail_spine_key]_" : "") + (wagging ? "wagging_" : "") + sprite_datum.icon_state // Select the wagging state if appropriate
-/datum/bodypart_overlay/mutant/tail_spines/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT)
+/datum/bodypart_overlay/mutant/tail_spines/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT)
/datum/bodypart_overlay/mutant/tail_spines/set_dye_color(new_color, obj/item/organ/organ)
dye_color = new_color //no update_body_parts() call, tail/set_dye_color will do it.
diff --git a/code/modules/surgery/organs/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm
index 011e8eeabba..f39c40144e3 100644
--- a/code/modules/surgery/organs/external/wings/moth_wings.dm
+++ b/code/modules/surgery/organs/external/wings/moth_wings.dm
@@ -97,6 +97,7 @@
/datum/bodypart_overlay/mutant/wings/moth
feature_key = FEATURE_MOTH_WINGS
layers = EXTERNAL_BEHIND | EXTERNAL_FRONT
+ slot_blocker = HIDEMUTWINGS
///Accessory datum of the burn sprite
var/datum/sprite_accessory/burn_datum = /datum/sprite_accessory/moth_wings/burnt_off
///Are we burned? If so we draw differently
@@ -104,12 +105,8 @@
/datum/bodypart_overlay/mutant/wings/moth/New()
. = ..()
-
burn_datum = fetch_sprite_datum(burn_datum)
-/datum/bodypart_overlay/mutant/wings/moth/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEMUTWINGS)
-
/datum/bodypart_overlay/mutant/wings/moth/get_base_icon_state()
return burnt ? burn_datum.icon_state : sprite_datum.icon_state
diff --git a/code/modules/surgery/organs/external/wings/wings.dm b/code/modules/surgery/organs/external/wings/wings.dm
index a801f9720da..3c518792e4f 100644
--- a/code/modules/surgery/organs/external/wings/wings.dm
+++ b/code/modules/surgery/organs/external/wings/wings.dm
@@ -23,6 +23,8 @@
/datum/bodypart_overlay/mutant/wings
layers = ALL_EXTERNAL_OVERLAYS
feature_key = FEATURE_WINGS
+ /// Slot we check against
+ var/slot_blocker = HIDEJUMPSUIT
-/datum/bodypart_overlay/mutant/wings/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT)
+/datum/bodypart_overlay/mutant/wings/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & slot_blocker)
diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm
index 8765b0dc373..d3991d7aa99 100644
--- a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm
+++ b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm
@@ -44,6 +44,7 @@
/datum/bodypart_overlay/augment
layers = EXTERNAL_ADJACENT
+ draw_on_husks = HUSK_OVERLAY_NORMAL
/// Implant that owns this overlay
var/obj/item/organ/cyberimp/implant
diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm
index e1259f5c82d..ff8699165f7 100644
--- a/code/modules/surgery/organs/internal/ears/_ears.dm
+++ b/code/modules/surgery/organs/internal/ears/_ears.dm
@@ -166,8 +166,8 @@
/// Layer upon which we add the inner ears overlay
var/inner_layer = EXTERNAL_FRONT
-/datum/bodypart_overlay/mutant/cat_ears/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
- return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
+/datum/bodypart_overlay/mutant/cat_ears/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner, mob/living/carbon/owner, is_husked = FALSE)
+ return ..() && !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
/datum/bodypart_overlay/mutant/cat_ears/get_image(image_layer, obj/item/bodypart/limb)
var/mutable_appearance/base_ears = ..()