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. dreamseeker_8CYayvB8ck image ## 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 = ..()