diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 3105229cb51..bd23f40b905 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1350,11 +1350,13 @@ There are several things that need to be remembered: overlays_raw[TAIL_NORTH_LAYER] = null overlays_raw[TAIL_SOUTH_LAYER] = null - var/tail_layer = GET_TAIL_LAYER - if(species.tail && !(mutations & HUSK) && !(mutations & SKELETON) && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) var/icon/tail_s = get_tail_icon() - overlays_raw[tail_layer] = image(tail_s, icon_state = "[tail_style]_s") + // Keep both ordering slots populated. The _n states contain pixels only in + // their north-facing frame, so the renderer naturally selects the correct + // layer when this appearance is copied and given a new direction. + overlays_raw[TAIL_SOUTH_LAYER] = image(tail_s, icon_state = "[tail_style]_s") + overlays_raw[TAIL_NORTH_LAYER] = image(tail_s, icon_state = "[tail_style]_s_n") animate_tail_reset(FALSE) update_tail_accessory(FALSE) @@ -1384,16 +1386,18 @@ There are several things that need to be remembered: if(!tail_style) return - var/tail_layer = GET_TAIL_LAYER - var/image/tail_overlay = overlays_raw[tail_layer] + var/image/tail_overlay = overlays_raw[TAIL_SOUTH_LAYER] + var/image/north_tail_overlay = overlays_raw[TAIL_NORTH_LAYER] var/obj/item/clothing/tail_accessory/TA = get_tail_accessory() if(TA && !(tail_style in TA.compatible_animated_tail)) mob_state = "[tail_style]_static" if(tail_overlay && species.tail_animation) - if(tail_overlay.icon_state != mob_state) + if(tail_overlay.icon_state != mob_state || (north_tail_overlay && north_tail_overlay.icon_state != "[mob_state]_n")) tail_overlay.icon_state = mob_state + if(north_tail_overlay) + north_tail_overlay.icon_state = "[mob_state]_n" update_tail_accessory(update) return tail_overlay return null @@ -1403,9 +1407,7 @@ There are several things that need to be remembered: /mob/living/carbon/human/proc/animate_tail_once() var/mob_state = "[tail_style]_once" - var/tail_layer = GET_TAIL_LAYER - - var/image/tail_overlay = overlays_raw[tail_layer] + var/image/tail_overlay = overlays_raw[TAIL_SOUTH_LAYER] if(tail_overlay && tail_overlay.icon_state == mob_state) return //let the existing animation finish @@ -1415,8 +1417,7 @@ There are several things that need to be remembered: /mob/living/carbon/human/proc/end_animate_tail_once(image/tail_overlay) //check that the animation hasn't changed in the meantime - var/tail_layer = GET_TAIL_LAYER - if(overlays_raw[tail_layer] == tail_overlay && tail_overlay.icon_state == "[tail_style]_once") + if(overlays_raw[TAIL_SOUTH_LAYER] == tail_overlay && tail_overlay.icon_state == "[tail_style]_once") animate_tail_stop() update_tail_accessory() @@ -1443,11 +1444,12 @@ There are several things that need to be remembered: if(!TA) return - var/image/tail_overlay = overlays_raw[GET_TAIL_LAYER] + var/image/tail_overlay = overlays_raw[TAIL_SOUTH_LAYER] if(!tail_overlay) return - overlays_raw[GET_TAIL_ACC_LAYER] = TA.get_mob_overlay(src, TA.icon, "[tail_overlay.icon_state]_to", slot_tail_str) + overlays_raw[TAIL_SOUTH_ACC_LAYER] = TA.get_mob_overlay(src, TA.icon, "[tail_overlay.icon_state]_to", slot_tail_str) + overlays_raw[TAIL_NORTH_ACC_LAYER] = TA.get_mob_overlay(src, TA.icon, "[tail_overlay.icon_state]_to_n", slot_tail_str) if(update_icons) update_icon() diff --git a/html/changelogs/geeves-tail_hologram_fix.yml b/html/changelogs/geeves-tail_hologram_fix.yml new file mode 100644 index 00000000000..e4d9228ec48 --- /dev/null +++ b/html/changelogs/geeves-tail_hologram_fix.yml @@ -0,0 +1,4 @@ +author: Geeves +delete-after: True +changes: + - bugfix: "Fixed tails layering oddly in character preview, holograms, photos, etc." diff --git a/icons/mob/species/diona/tail.dmi b/icons/mob/species/diona/tail.dmi index 94cfc687fec..696378aae8c 100644 Binary files a/icons/mob/species/diona/tail.dmi and b/icons/mob/species/diona/tail.dmi differ diff --git a/icons/mob/species/skrell/tail.dmi b/icons/mob/species/skrell/tail.dmi index 915fb77fd29..97ae7862172 100644 Binary files a/icons/mob/species/skrell/tail.dmi and b/icons/mob/species/skrell/tail.dmi differ diff --git a/icons/mob/species/tajaran/tail.dmi b/icons/mob/species/tajaran/tail.dmi index eeb32609fdb..5f1c2f41195 100644 Binary files a/icons/mob/species/tajaran/tail.dmi and b/icons/mob/species/tajaran/tail.dmi differ diff --git a/icons/mob/species/unathi/tail.dmi b/icons/mob/species/unathi/tail.dmi index f621a8e8734..4a4fd94578c 100644 Binary files a/icons/mob/species/unathi/tail.dmi and b/icons/mob/species/unathi/tail.dmi differ diff --git a/icons/mob/species/vaurca/tail.dmi b/icons/mob/species/vaurca/tail.dmi index fb6f668f07f..eb4b0ddf4b1 100644 Binary files a/icons/mob/species/vaurca/tail.dmi and b/icons/mob/species/vaurca/tail.dmi differ diff --git a/icons/obj/item/clothing/accessory/tail/taj_flexible_prosthetic.dmi b/icons/obj/item/clothing/accessory/tail/taj_flexible_prosthetic.dmi index 81747b1def5..1e2d07c2b24 100644 Binary files a/icons/obj/item/clothing/accessory/tail/taj_flexible_prosthetic.dmi and b/icons/obj/item/clothing/accessory/tail/taj_flexible_prosthetic.dmi differ diff --git a/icons/obj/item/clothing/accessory/tail/taj_solid_prosthetic.dmi b/icons/obj/item/clothing/accessory/tail/taj_solid_prosthetic.dmi index 032a06795bf..2ff7930c869 100644 Binary files a/icons/obj/item/clothing/accessory/tail/taj_solid_prosthetic.dmi and b/icons/obj/item/clothing/accessory/tail/taj_solid_prosthetic.dmi differ diff --git a/icons/obj/item/clothing/accessory/tail/taj_tesla_prosthetic.dmi b/icons/obj/item/clothing/accessory/tail/taj_tesla_prosthetic.dmi index 0773bcf71b7..fe48ac5e316 100644 Binary files a/icons/obj/item/clothing/accessory/tail/taj_tesla_prosthetic.dmi and b/icons/obj/item/clothing/accessory/tail/taj_tesla_prosthetic.dmi differ diff --git a/icons/obj/item/clothing/accessory/tail/tajtailcloth.dmi b/icons/obj/item/clothing/accessory/tail/tajtailcloth.dmi index 1fd854d5dd1..f8fa9b7878f 100644 Binary files a/icons/obj/item/clothing/accessory/tail/tajtailcloth.dmi and b/icons/obj/item/clothing/accessory/tail/tajtailcloth.dmi differ