fish tails from dna infusions are no longer invisible (#5848)

## About The Pull Request
The issue with fish tails sprite datums here is that someone thought to
make a new modular icon file so that the fish tails from the character
settings menu would show up (and changing the feature key in the icon
names from "fish_tail" to just "tail). Unfortunately, in doing so they
doomed the ACTUAL fish tails from the fish gene infusion to be
invisible. Why? Because those use the "fish_tail" feature key and not
the generic "tail" key!

To be fair, they tried. Sprite datum code is chock full of commented
code and modular changes, I undestand...

However, a better way to fix this would be to make a new tail type that
mimics the appearance of the one from the fish infusion (minus its
quirks), as well as using the same "fish_tail" feature key, and make use
of the `organ_type` variable, so that mobs that ever select those
sprites will spawn with the fake fish tail instead of the generic one,
thus making BOTH tails (prefs and infusion) work, instead of one or
another!

## Why It's Good For The Game
It breaks muh immersion so much that I can't LARP as a fish.

## Proof Of Testing
I shut the local server before I could take a screenshot. It was tested
and it works for both cases, otherwise I wouldn't be ranting about this
for as much as I did.

## Changelog

🆑
fix: Fixed invisible fish tails from DNA infusions.
/🆑
This commit is contained in:
Ghom
2026-06-27 09:28:19 +02:00
committed by GitHub
parent d3deb18779
commit b3887e087b
4 changed files with 44 additions and 1 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

@@ -39,7 +39,7 @@
color_src = USE_ONE_COLOR
/datum/sprite_accessory/tails/fish
icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/fish_tails.dmi'
organ_type = /obj/item/organ/tail/fake_fish //copypasta of dna infusion fish tails but without the quirks (beside butchering)
/datum/sprite_accessory/tails/xeno/default
icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_tail.dmi'
@@ -64,3 +64,46 @@
name = "fluffy tail"
/obj/item/organ/tail/fluffy/no_wag
///A tail that replicates the appearance of fish tails from DNA infusion, but without most of the code that makes them so special.
/obj/item/organ/tail/fake_fish
name = /obj/item/organ/tail/fish::name
desc = /obj/item/organ/tail/fish::desc
icon = /obj/item/organ/tail/fish::icon
icon_state = /obj/item/organ/tail/fish::icon_state
post_init_icon_state = /obj/item/organ/tail/fish::post_init_icon_state
greyscale_config = /obj/item/organ/tail/fish::greyscale_config
greyscale_colors = /obj/item/organ/tail/fish::greyscale_colors
bodypart_overlay = /obj/item/organ/tail/fish::bodypart_overlay
wag_flags = /obj/item/organ/tail/fish::wag_flags
restyle_flags = /obj/item/organ/tail/fish::restyle_flags
// Fishlike reagents, you could serve it raw like fish
food_reagents = /obj/item/organ/tail/fish::food_reagents
// Seafood instead of meat, because it's a fish organ
foodtype_flags = /obj/item/organ/tail/fish::foodtype_flags
// Also just tastes like fish
food_tastes = /obj/item/organ/tail/fish::food_tastes
/// The fillet type this fish tail is processable into
var/fillet_type = /obj/item/food/fishmeat/fish_tail
/// The amount of fillets this gets processed into
var/fillet_amount = 3
/obj/item/organ/tail/fake_fish/Initialize(mapload)
. = ..()
var/time_to_fillet = fillet_amount * 0.5 SECONDS
AddElement(/datum/element/processable, TOOL_KNIFE, fillet_type, fillet_amount, time_to_fillet, screentip_verb = "Cut")
/obj/item/organ/tail/fake_fish/on_mob_insert(mob/living/carbon/owner)
. = ..()
RegisterSignal(owner, COMSIG_LIVING_GIBBER_ACT, PROC_REF(on_gibber_processed))
/obj/item/organ/tail/fake_fish/on_mob_remove(mob/living/carbon/owner)
. = ..()
UnregisterSignal(owner, COMSIG_LIVING_GIBBER_ACT)
/obj/item/organ/tail/fake_fish/proc/on_gibber_processed(mob/living/carbon/owner, mob/living/user, obj/machinery/gibber, list/results)
SIGNAL_HANDLER
for(var/iteration in 1 to fillet_amount * 0.5)
results += new fillet_type