diff --git a/SQL/migrate/V071__tail_overhaul.sql b/SQL/migrate/V071__tail_overhaul.sql
deleted file mode 100644
index ab706bd3ea5..00000000000
--- a/SQL/migrate/V071__tail_overhaul.sql
+++ /dev/null
@@ -1,7 +0,0 @@
---
--- Implemented in PR #numberhere.
--- Adds the ability for players to select their species' tail, instead of each species only having one stock type of tail.
---
-
-ALTER TABLE `ss13_characters`
- ADD COLUMN `tail_style` varchar(12) DEFAULT NULL AFTER `skin_colour`
diff --git a/aurorastation.dme b/aurorastation.dme
index 71f00f80ff4..4588e0714a2 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -1494,7 +1494,6 @@
#include "code\modules\clothing\chameleon.dm"
#include "code\modules\clothing\clothing.dm"
#include "code\modules\clothing\clothing_accessories.dm"
-#include "code\modules\clothing\tail_accessory.dm"
#include "code\modules\clothing\ears\antennae.dm"
#include "code\modules\clothing\ears\bandanna.dm"
#include "code\modules\clothing\ears\bulwark.dm"
diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm
index f9ef08ca0bf..3002bfb61a3 100644
--- a/code/__defines/items_clothing.dm
+++ b/code/__defines/items_clothing.dm
@@ -114,7 +114,6 @@
#define slot_shoes_str "slot_shoes"
#define slot_wrists_str "slot_wrists"
#define slot_gloves_str "slot_gloves"
-#define slot_tail_str "slot_tail"
//itemstate suffixes. Used for containedsprite worn items
#define WORN_LHAND "_lh"
@@ -225,4 +224,4 @@
#define SUIT_SENSOR_OFF 0
#define SUIT_SENSOR_BINARY 1
#define SUIT_SENSOR_VITAL 2
-#define SUIT_SENSOR_TRACKING 3
+#define SUIT_SENSOR_TRACKING 3
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm
index 74b3e236104..50b933e1b8d 100644
--- a/code/game/objects/items/weapons/storage/internal.dm
+++ b/code/game/objects/items/weapons/storage/internal.dm
@@ -97,48 +97,3 @@
/obj/item/storage/internal/skrell/Initialize()
. = ..()
name = initial(name)
-
-
-/obj/item/storage/internal/tail
- name = "tail storage"
- storage_slots = 1
- max_storage_space = 2
- max_w_class = ITEMSIZE_SMALL
- use_sound = null
-
-/obj/item/storage/internal/tail/can_be_inserted(obj/item/clothing/tail_accessory/TA, stop_messages)
- if(!istype(TA))
- return FALSE
- . = ..()
- if(!.)
- return
-
- var/obj/item/organ/external/E = loc
- if(!istype(E))
- return FALSE
-
- var/mob/living/carbon/human/H = E.owner
- if(!istype(H))
- return FALSE
-
- if(!TA.compatible_with_human(H))
- return FALSE
-
- return TRUE
-
-// we can generally assume user has all the proper groin stuff here, otherwise the above block of code is busted
-/obj/item/storage/internal/tail/handle_item_insertion(obj/item/W, prevent_warning, mob/living/carbon/human/user)
- . = ..()
- if(.)
- user.update_tail_showing()
-
-/obj/item/storage/internal/tail/remove_from_storage(obj/item/W, atom/new_location)
- . = ..()
- if(.)
- var/obj/item/organ/external/E = loc
- if(!istype(E))
- return
- var/mob/living/carbon/human/H = E.owner
- if(!istype(H))
- return
- H.update_tail_showing()
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 3ae3818a286..d2f232388a2 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -539,7 +539,7 @@
return
W.add_fingerprint(user)
- return handle_item_insertion(W, null, user)
+ return handle_item_insertion(W)
/obj/item/storage/dropped(mob/user as mob)
return
diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm
index 7e2ebe3752c..dfa4b85eb3f 100644
--- a/code/modules/client/preference_setup/general/03_body.dm
+++ b/code/modules/client/preference_setup/general/03_body.dm
@@ -21,7 +21,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["skin_red"] >> pref.r_skin
S["skin_green"] >> pref.g_skin
S["skin_blue"] >> pref.b_skin
- S["tail_style_name"] >> pref.tail_style
S["hair_style_name"] >> pref.h_style
S["facial_style_name"] >> pref.f_style
S["grad_style_name"] >> pref.g_style
@@ -48,7 +47,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["skin_red"] << pref.r_skin
S["skin_green"] << pref.g_skin
S["skin_blue"] << pref.b_skin
- S["tail_style_name"] << pref.tail_style
S["hair_style_name"] << pref.h_style
S["facial_style_name"] << pref.f_style
S["grad_style_name"] << pref.g_style
@@ -71,7 +69,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
"grad_colour",
"skin_tone" = "s_tone",
"skin_colour",
- "tail_style",
"hair_style" = "h_style",
"facial_style" = "f_style",
"gradient_style" = "g_style",
@@ -98,7 +95,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
"grad_colour",
"skin_tone",
"skin_colour",
- "tail_style",
"hair_style",
"facial_style",
"gradient_style",
@@ -120,8 +116,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
"facial_colour" = rgb(pref.r_facial, pref.g_facial, pref.b_facial),
"grad_colour" = rgb(pref.r_grad, pref.g_grad, pref.b_grad),
"skin_tone" = pref.s_tone,
- "skin_colour" = rgb(pref.r_skin, pref.g_skin, pref.b_skin),
- "tail_style" = pref.tail_style,
+ "skin_colour" = rgb(pref.r_skin, pref.g_skin, pref.b_skin) ,
"hair_style" = pref.h_style,
"facial_style" = pref.f_style,
"gradient_style"= pref.g_style,
@@ -184,8 +179,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
log_debug("DISABILITIES: Caught [e]. Initial value: [before]")
pref.disabilities = list()
- var/datum/species/mob_species = all_species[pref.species]
-
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
pref.b_hair = sanitize_integer(pref.b_hair, 0, 255, initial(pref.b_hair))
@@ -196,7 +189,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.r_skin = sanitize_integer(pref.r_skin, 0, 255, initial(pref.r_skin))
pref.g_skin = sanitize_integer(pref.g_skin, 0, 255, initial(pref.g_skin))
pref.b_skin = sanitize_integer(pref.b_skin, 0, 255, initial(pref.b_skin))
- pref.tail_style = sanitize_inlist(pref.tail_style, mob_species.selectable_tails, mob_species.tail)
pref.h_style = sanitize_inlist(pref.h_style, hair_styles_list, initial(pref.h_style))
pref.f_style = sanitize_inlist(pref.f_style, facial_hair_styles_list, initial(pref.f_style))
pref.g_style = sanitize_inlist(pref.g_style, hair_gradient_styles_list, initial(pref.g_style))
@@ -301,13 +293,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
out += "
[pref.equip_preview_mob & EQUIP_PREVIEW_JOB ? "Hide job gear" : "Show job gear"]"
out += ""
- var/tail_spacing = FALSE
- if(length(mob_species.selectable_tails))
- out += "Tail
"
- out += "[pref.tail_style ? "Style: [pref.tail_style]" : "Style: None"]
"
- tail_spacing = TRUE
-
- out += "[tail_spacing ? "
" : ""]Hair
"
+ out += "Hair
"
if(has_flag(mob_species, HAS_HAIR_COLOR))
out += "Change Color [HTML_RECT(rgb(pref.r_hair, pref.g_hair, pref.b_hair))] "
out += " Style: [pref.h_style]
"
@@ -317,7 +303,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
out += "Change Color [HTML_RECT(rgb(pref.r_facial, pref.g_facial, pref.b_facial))] "
out += " Style: [pref.f_style]
"
- out += "
Gradient
"
+ out += "Gradient
"
if(has_flag(mob_species, HAS_HAIR_COLOR))
out += "Change Color [HTML_RECT(rgb(pref.r_grad, pref.g_grad, pref.b_grad))] "
out += " Style: [pref.g_style]
"
@@ -410,11 +396,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
else // Species has no hair, or something fucked up.
pref.h_style = hair_styles_list["Bald"]
- if(length(mob_species.selectable_tails))
- pref.tail_style = pick(mob_species.selectable_tails)
- else
- pref.tail_style = null
-
//grab one of the valid facial hair styles for the newly chosen species
var/list/valid_facialhairstyles = list()
for(var/facialhairstyle in facial_hair_styles_list)
@@ -479,14 +460,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.b_grad = GetBluePart(new_grad)
return TOPIC_REFRESH_UPDATE_PREVIEW
- else if(href_list["tail_style"])
- if(!length(mob_species.selectable_tails))
- return
- var/new_tail_style = input(user, "Choose your character's tail style:", "Character Preference", pref.tail_style) as null|anything in mob_species.selectable_tails
- if(new_tail_style && CanUseTopic(user))
- pref.tail_style = new_tail_style
- return TOPIC_REFRESH_UPDATE_PREVIEW
-
else if(href_list["hair_style"])
if(mob_species.bald)
return
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/tajara.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/tajara.dm
index c34329ef6b4..7692db411f1 100644
--- a/code/modules/client/preference_setup/loadout/loadout_xeno/tajara.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno/tajara.dm
@@ -364,12 +364,6 @@
charm["holy sun rosette"] = /obj/item/clothing/accessory/tajaran/srendarr
gear_tweaks += new /datum/gear_tweak/path(charm)
-/datum/gear/tail_cloth
- display_name = "tail cloth"
- path = /obj/item/clothing/tail_accessory/tail_cloth
- sort_category = "Xenowear - Tajara"
- flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION
-
/datum/gear/accessory/dpra_party_pin
display_name = "democratic peoples republic party pins selection"
description = "A selection of DPRA party pins."
@@ -401,4 +395,4 @@
var/list/card = list()
card["zbrojny badge"] = /obj/item/clothing/accessory/tajaran/zbrojny_badge
card["golden sun pin"] = /obj/item/clothing/accessory/tajaran/tanker_pin
- gear_tweaks += new /datum/gear_tweak/path(card)
+ gear_tweaks += new /datum/gear_tweak/path(card)
\ No newline at end of file
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 33c242b5d59..ff6ed4e59c5 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -46,7 +46,6 @@ datum/preferences
var/pda_choice = OUTFIT_TAB_PDA
var/headset_choice = OUTFIT_HEADSET
var/primary_radio_slot = "Left Ear"
- var/tail_style = null
var/h_style = "Bald" //Hair type
var/hair_colour = "#000000" //Hair colour hex value, for SQL loading
var/r_hair = 0 //Hair color
@@ -437,8 +436,6 @@ datum/preferences
character.g_eyes = g_eyes
character.b_eyes = b_eyes
- character.set_tail_style(tail_style)
-
character.h_style = h_style
character.r_hair = r_hair
character.g_hair = g_hair
diff --git a/code/modules/clothing/tail_accessory.dm b/code/modules/clothing/tail_accessory.dm
deleted file mode 100644
index a330425de70..00000000000
--- a/code/modules/clothing/tail_accessory.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-/obj/item/clothing/tail_accessory
- name = "tail accessory"
- desc = "If you're seeing this, something went wrong! Please report it on Github."
- w_class = ITEMSIZE_SMALL
-
- var/list/compatible_species_type = list()
- var/list/compatible_tail_type = list()
- var/list/compatible_animated_tail = list()
-
-/obj/item/clothing/tail_accessory/proc/compatible_with_human(var/mob/living/carbon/human/H)
- if(!is_type_in_list(H.species, compatible_species_type))
- to_chat(H, SPAN_WARNING("\The [src] doesn't fit on your tail!"))
- return FALSE
-
- if(!(H.tail_style in compatible_tail_type))
- to_chat(H, SPAN_WARNING("\The [src] doesn't fit on your tail!"))
- return FALSE
-
- return TRUE
-
-/obj/item/clothing/tail_accessory/tail_cloth
- name = "tail cloth"
- desc = "A simple cloth that can be wrapped around the tail."
- icon = 'icons/clothing/tail/tajtailcloth.dmi'
- icon_state = "tail_cloth"
-
- compatible_species_type = list(/datum/species/tajaran)
- compatible_tail_type = list("Tail")
- compatible_animated_tail = list("Tail")
diff --git a/code/modules/mob/abstract/new_player/preferences_setup.dm b/code/modules/mob/abstract/new_player/preferences_setup.dm
index d3f349e6b75..a889c02b2d9 100644
--- a/code/modules/mob/abstract/new_player/preferences_setup.dm
+++ b/code/modules/mob/abstract/new_player/preferences_setup.dm
@@ -16,7 +16,6 @@
if(current_species.appearance_flags & HAS_SKIN_COLOR)
randomize_skin_color(current_species)
- tail_style = length(current_species.selectable_tails) ? pick(current_species.selectable_tails) : null
h_style = random_hair_style(gender, species)
f_style = random_facial_hair_style(gender, species)
randomize_hair_color("hair")
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index efb1f4bb4e5..e38c39b4e0f 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -1,7 +1,4 @@
/mob/living/carbon/human
- // Tail Style
- var/tail_style = null
-
//Hair colour and style
var/r_hair = 0
var/g_hair = 0
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 41dd5ff6edd..948c8ad6dbf 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -359,21 +359,3 @@
if(!isnull(species.floating_chat_x_offset))
return species.floating_chat_x_offset
return species.icon_x_offset
-
-/mob/living/carbon/human/proc/set_tail_style(var/new_style)
- tail_style = new_style
- if(tail_style)
- verbs |= /mob/living/carbon/human/proc/open_tail_storage
- else
- verbs -= /mob/living/carbon/human/proc/open_tail_storage
-
-/mob/living/carbon/human/proc/get_tail_accessory()
- var/obj/item/organ/external/groin/G = organs_by_name[BP_GROIN]
- if(!G)
- return
- if(!G.tail_storage)
- return
-
- if(length(G.tail_storage.contents))
- return G.tail_storage.contents[1]
- return null
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 5b4846e6e9c..5260ffbf638 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -119,7 +119,7 @@
/mob/living/carbon/human/set_dir(var/new_dir, ignore_facing_dir = FALSE)
. = ..()
- if(. && tail_style)
+ if(. && species.tail)
update_tail_showing(1)
/mob/living/carbon/human/Move()
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index 02715d82136..a16e563b5ab 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -810,7 +810,7 @@ mob/living/carbon/human/proc/change_monitor()
earpain(3, TRUE, 1)
else if (T in range(src, 2))
earpain(2, TRUE, 2)
-
+
for (var/mob/living/carbon/human/T in hearers(2, src) - src)
if(T.protected_from_sound())
continue
@@ -1292,19 +1292,4 @@ mob/living/carbon/human/proc/change_monitor()
/mob/living/carbon/human/proc/stop_listening()
if (is_listening())
visible_message("[src] stops listening intently.")
- intent_listener -= src
-
-/mob/living/carbon/human/proc/open_tail_storage()
- set name = "Tail Accessories"
- set desc = "Opens the tail accessory slot."
- set category = "Abilities"
-
- var/obj/item/organ/external/groin/G = organs_by_name[BP_GROIN]
- if(!G)
- to_chat(usr, SPAN_WARNING("You have no tail!"))
- return
- if(!G.tail_storage)
- to_chat(usr, SPAN_WARNING("Something went wrong with your tail storage, it's missing! (Report this on Github)"))
- return
-
- G.tail_storage.open(usr)
+ intent_listener -= src
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 9ff76ce6a8a..8026eefe707 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1461,11 +1461,11 @@
bodytemperature = min(bodytemperature + fever, normal_temp)
else if(bodytemperature <= normal_temp + 10) //If we're hotter than max due to like, being on fire, don't keep increasing.
bodytemperature = normal_temp + min(fever, 10) //We use normal_temp here to maintain a steady temperature, otherwise even a small infection steadily increases bodytemp to max. This way it's easier to diagnose the intensity of an infection based on how bad the fever is.
- //Apply side effects for having a fever. Separate from body temp changes.
+ //Apply side effects for having a fever. Separate from body temp changes.
if(fever >= 2)
do_fever_effects(fever)
-
+
//Getting the total germ level for all infected organs, affects fever
/mob/living/carbon/human/proc/get_infection_germ_level()
var/germs
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 8ee2972cc61..bbb05679c3f 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -49,7 +49,6 @@
var/tail // Name of tail state in species effects icon file.
var/tail_animation // If set, the icon to obtain tail animation states from.
var/tail_hair
- var/list/selectable_tails
var/race_key = 0 // Used for mob icon cache string.
var/icon/icon_template // Used for mob icon generation for non-32x32 species.
var/mob_size = MOB_MEDIUM
diff --git a/code/modules/mob/living/carbon/human/species/station/skrell/skrell_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/skrell/skrell_subspecies.dm
index 8ad818c05b0..3b36abb2eaf 100644
--- a/code/modules/mob/living/carbon/human/species/station/skrell/skrell_subspecies.dm
+++ b/code/modules/mob/living/carbon/human/species/station/skrell/skrell_subspecies.dm
@@ -12,9 +12,7 @@
brute_mod = 0.9
oxy_mod = 0.9
hydration_loss_factor = 1.1
- tail = "Tail"
- tail_animation = 'icons/mob/species/skrell/tail.dmi'
- selectable_tails = list("Tail")
+ tail = "axiori_tail"
eyes = "skrell_axiori_eyes_s"
sprint_speed_factor = 1.15 // Species default 1.25
diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm
index b1845869d87..faf3525f5ed 100644
--- a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm
+++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm
@@ -8,9 +8,8 @@
deform = 'icons/mob/human_races/tajara/r_def_tajaran.dmi'
preview_icon = 'icons/mob/human_races/tajara/tajaran_preview.dmi'
bandages_icon = 'icons/mob/bandage.dmi'
- tail = "Tail"
+ tail = "tajtail"
tail_animation = 'icons/mob/species/tajaran/tail.dmi'
- selectable_tails = list("Tail", "Hakh'jar Tail")
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
diff --git a/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm b/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm
index 31cef6d8f3d..d74ec7ab13d 100644
--- a/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm
+++ b/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm
@@ -8,9 +8,8 @@
deform = 'icons/mob/human_races/unathi/r_def_lizard.dmi'
preview_icon = 'icons/mob/human_races/unathi/unathi_preview.dmi'
bandages_icon = 'icons/mob/bandage.dmi'
- tail = "Tail"
+ tail = "sogtail"
tail_animation = 'icons/mob/species/unathi/tail.dmi'
- selectable_tails = list("Tail")
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index d9e3ded7f8d..05cfdf3ea8e 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -85,46 +85,43 @@ There are several things that need to be remembered:
*/
// Human Overlays Indexes //
-#define MUTATIONS_LAYER 1
-#define DAMAGE_LAYER 2
-#define SURGERY_LAYER 3
-#define UNDERWEAR_LAYER 4
-#define TAIL_SOUTH_LAYER 5
-#define TAIL_SOUTH_ACC_LAYER 6
-#define SHOES_LAYER_ALT 7
-#define UNIFORM_LAYER 8
-#define ID_LAYER 9
-#define SHOES_LAYER 10
-#define GLOVES_LAYER 11
-#define BELT_LAYER 12
-#define WRISTS_LAYER_ALT 13
-#define SUIT_LAYER 14
-#define ID_LAYER_ALT 15
-#define TAIL_NORTH_LAYER 16
-#define TAIL_NORTH_ACC_LAYER 17
-#define GLASSES_LAYER 18
-#define BELT_LAYER_ALT 19
-#define SUIT_STORE_LAYER 20
-#define BACK_LAYER 21
-#define HAIR_LAYER 22
-#define GLASSES_LAYER_ALT 23
-#define L_EAR_LAYER 24
-#define R_EAR_LAYER 25
-#define FACEMASK_LAYER 26
-#define HEAD_LAYER 27
-#define COLLAR_LAYER 28
-#define HANDCUFF_LAYER 29
-#define LEGCUFF_LAYER 30
-#define L_HAND_LAYER 31
-#define R_HAND_LAYER 32
-#define WRISTS_LAYER 33
-#define FIRE_LAYER 34 //If you're on fire
-#define TOTAL_LAYERS 34
+#define MUTATIONS_LAYER 1
+#define DAMAGE_LAYER 2
+#define SURGERY_LAYER 3
+#define UNDERWEAR_LAYER 4
+#define TAIL_SOUTH_LAYER 5
+#define SHOES_LAYER_ALT 6
+#define UNIFORM_LAYER 7
+#define ID_LAYER 8
+#define SHOES_LAYER 9
+#define GLOVES_LAYER 10
+#define BELT_LAYER 11
+#define WRISTS_LAYER_ALT 12
+#define SUIT_LAYER 13
+#define ID_LAYER_ALT 14
+#define TAIL_NORTH_LAYER 15
+#define GLASSES_LAYER 16
+#define BELT_LAYER_ALT 17
+#define SUIT_STORE_LAYER 18
+#define BACK_LAYER 19
+#define HAIR_LAYER 20
+#define GLASSES_LAYER_ALT 21
+#define L_EAR_LAYER 22
+#define R_EAR_LAYER 23
+#define FACEMASK_LAYER 24
+#define HEAD_LAYER 25
+#define COLLAR_LAYER 26
+#define HANDCUFF_LAYER 27
+#define LEGCUFF_LAYER 28
+#define L_HAND_LAYER 29
+#define R_HAND_LAYER 30
+#define WRISTS_LAYER 31
+#define FIRE_LAYER 32 //If you're on fire
+#define TOTAL_LAYERS 32
//////////////////////////////////
#define GET_BODY_TYPE (cached_bodytype || (cached_bodytype = species.get_bodytype()))
#define GET_TAIL_LAYER (dir == NORTH ? TAIL_NORTH_LAYER : TAIL_SOUTH_LAYER)
-#define GET_TAIL_ACC_LAYER (dir == NORTH ? TAIL_NORTH_ACC_LAYER : TAIL_SOUTH_ACC_LAYER)
/proc/overlay_image(icon,icon_state,color,flags)
var/image/ret = image(icon,icon_state)
@@ -1285,11 +1282,10 @@ There are several things that need to be remembered:
var/tail_layer = GET_TAIL_LAYER
- if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL))
+ if(species.tail && !(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")
- animate_tail_reset()
- update_tail_accessory(FALSE)
+ overlays_raw[tail_layer] = image(tail_s, icon_state = "[species.tail]_s")
+ animate_tail_reset(0)
if(update_icons)
update_icon()
@@ -1306,7 +1302,7 @@ There are several things that need to be remembered:
tail_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
// The following will not work with animated tails.
if(species.tail_hair)
- var/icon/hair_icon = icon('icons/effects/species.dmi', "[tail_style]_[species.tail_hair]")
+ var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.tail]_[species.tail_hair]")
hair_icon.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
tail_icon.Blend(hair_icon, ICON_OVERLAY)
SSicon_cache.tail_icon_cache[icon_key] = tail_icon
@@ -1314,20 +1310,16 @@ There are several things that need to be remembered:
return tail_icon
/mob/living/carbon/human/proc/set_tail_state(var/mob_state)
- if(!tail_style)
+ if (!species.tail)
return
var/tail_layer = GET_TAIL_LAYER
+
var/image/tail_overlay = overlays_raw[tail_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)
tail_overlay.icon_state = mob_state
- update_tail_accessory()
update_icon()
return tail_overlay
return null
@@ -1335,7 +1327,7 @@ There are several things that need to be remembered:
//Not really once, since BYOND can't do that.
//Update this if the ability to flick() images or make looping animation start at the first frame is ever added.
/mob/living/carbon/human/proc/animate_tail_once()
- var/mob_state = "[tail_style]_once"
+ var/mob_state = "[species.tail]_once"
var/tail_layer = GET_TAIL_LAYER
@@ -1350,42 +1342,23 @@ 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_layer] == tail_overlay && tail_overlay.icon_state == "[species.tail]_once")
animate_tail_stop()
- update_tail_accessory()
/mob/living/carbon/human/proc/animate_tail_start()
- set_tail_state("[tail_style]_slow")
+ set_tail_state("[species.tail]_slow[rand(0,9)]")
/mob/living/carbon/human/proc/animate_tail_fast()
- set_tail_state("[tail_style]_loop")
+ set_tail_state("[species.tail]_loop[rand(0,9)]")
/mob/living/carbon/human/proc/animate_tail_reset()
if(stat != DEAD && !lying)
- set_tail_state("[tail_style]_idle")
+ set_tail_state("[species.tail]_idle[rand(0,9)]")
else
- set_tail_state("[tail_style]_static")
+ set_tail_state("[species.tail]_static")
/mob/living/carbon/human/proc/animate_tail_stop(var/update_icons=1)
- set_tail_state("[tail_style]_static")
-
-/mob/living/carbon/human/proc/update_tail_accessory(var/update_icons=1)
- overlays_raw[TAIL_NORTH_ACC_LAYER] = null
- overlays_raw[TAIL_SOUTH_ACC_LAYER] = null
-
- var/obj/item/clothing/tail_accessory/TA = get_tail_accessory()
- if(!TA)
- return
-
- var/image/tail_overlay = overlays_raw[GET_TAIL_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)
-
- if(update_icons)
- update_icon()
-
+ set_tail_state("[species.tail]_static")
//Adds a collar overlay above the helmet layer if the suit has one
// Suit needs an identically named sprite in icons/mob/collar.dmi
diff --git a/code/modules/organs/subtypes/skrell.dm b/code/modules/organs/subtypes/skrell.dm
index 4f26529cf23..b779953cd23 100644
--- a/code/modules/organs/subtypes/skrell.dm
+++ b/code/modules/organs/subtypes/skrell.dm
@@ -24,10 +24,6 @@
. = ..()
addtimer(CALLBACK(src, .proc/setup_storage), 3 SECONDS)
-/obj/item/organ/external/head/skrell/Destroy()
- QDEL_NULL(storage)
- return ..()
-
/obj/item/organ/external/head/skrell/proc/setup_storage()
storage = new /obj/item/storage/internal/skrell(src)
if(owner)
@@ -48,4 +44,4 @@
storage.remove_from_storage(thing, get_turf(src))
/obj/item/organ/external/head/skrell/attack_self(mob/user)
- storage.open(user)
+ storage.open(user)
\ No newline at end of file
diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm
index 609225af33b..75f088498e2 100644
--- a/code/modules/organs/subtypes/standard.dm
+++ b/code/modules/organs/subtypes/standard.dm
@@ -43,21 +43,6 @@
gendered_icon = 1
augment_limit = 3
- var/obj/item/storage/internal/tail/tail_storage
-
-/obj/item/organ/external/groin/Initialize()
- . = ..()
- tail_storage = new /obj/item/storage/internal/tail(src)
-
-/obj/item/organ/external/groin/Destroy()
- QDEL_NULL(tail_storage)
- return ..()
-
-/obj/item/organ/external/groin/removed()
- . = ..()
- for(var/thing in tail_storage)
- tail_storage.remove_from_storage(thing, get_turf(src))
-
/obj/item/organ/external/groin/body_part_class()
return UPPER_TORSO
diff --git a/icons/clothing/tail/tajtailcloth.dmi b/icons/clothing/tail/tajtailcloth.dmi
deleted file mode 100644
index 1fd854d5dd1..00000000000
Binary files a/icons/clothing/tail/tajtailcloth.dmi and /dev/null differ
diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi
index 9ba0b6906f1..d5613371bf9 100644
Binary files a/icons/effects/species.dmi and b/icons/effects/species.dmi differ
diff --git a/icons/mob/species/skrell/tail.dmi b/icons/mob/species/skrell/tail.dmi
deleted file mode 100644
index 9832c9e4fe9..00000000000
Binary files a/icons/mob/species/skrell/tail.dmi and /dev/null differ
diff --git a/icons/mob/species/tajaran/tail.dmi b/icons/mob/species/tajaran/tail.dmi
index eeb32609fdb..62a432ae76d 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 c5a0c608662..eba37dba6aa 100644
Binary files a/icons/mob/species/unathi/tail.dmi and b/icons/mob/species/unathi/tail.dmi differ