diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 371f35b0515..6836d613893 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -43,6 +43,11 @@ var/global/list/facial_hair_styles_male_list = list() var/global/list/facial_hair_styles_female_list = list() var/global/list/skin_styles_female_list = list() //unused var/global/list/body_marking_styles_list = list() //stores /datum/sprite_accessory/marking indexed by name +var/global/list/ear_styles_list = list() // Stores /datum/sprite_accessory/ears indexed by type +var/global/list/tail_styles_list = list() // Stores /datum/sprite_accessory/tail indexed by type +var/global/list/wing_styles_list = list() // Stores /datum/sprite_accessory/wing indexed by type + +GLOBAL_LIST(custom_species_bases) //Underwear var/datum/category_collection/underwear/global_underwear = new() @@ -214,12 +219,66 @@ var/global/list/string_slot_flags = list( var/decl/closet_appearance/app = new T() GLOB.closet_appearances[T] = app +<<<<<<< HEAD // VOREStation Add - Vore Modes! paths = typesof(/datum/digest_mode) - /datum/digest_mode/transform for(var/T in paths) var/datum/digest_mode/DM = new T GLOB.digest_modes[DM.id] = DM // VOREStation Add End +======= + paths = typesof(/datum/sprite_accessory/ears) - /datum/sprite_accessory/ears + for(var/path in paths) + var/obj/item/clothing/head/instance = new path() + ear_styles_list[path] = instance + + // Custom Tails + paths = typesof(/datum/sprite_accessory/tail) - /datum/sprite_accessory/tail - /datum/sprite_accessory/tail/taur + for(var/path in paths) + var/datum/sprite_accessory/tail/instance = new path() + tail_styles_list[path] = instance + + // Custom Wings + paths = typesof(/datum/sprite_accessory/wing) - /datum/sprite_accessory/wing + for(var/path in paths) + var/datum/sprite_accessory/wing/instance = new path() + wing_styles_list[path] = instance + +/* + // Custom species traits + paths = typesof(/datum/trait) - /datum/trait + for(var/path in paths) + var/datum/trait/instance = new path() + if(!instance.name) + continue //A prototype or something + var/cost = instance.cost + traits_costs[path] = cost + all_traits[path] = instance + switch(cost) + if(-INFINITY to -0.1) + negative_traits[path] = instance + if(0) + neutral_traits[path] = instance + if(0.1 to INFINITY) + positive_traits[path] = instance +*/ + + // Custom species icon bases + var/list/blacklisted_icons = list(/*SPECIES_CUSTOM,*/SPECIES_PROMETHEAN) //Just ones that won't work well. + var/list/whitelisted_icons = list(/*SPECIES_FENNEC,SPECIES_XENOHYBRID*/) //Include these anyway + for(var/species_name in GLOB.playable_species) + if(species_name in blacklisted_icons) + continue + var/datum/species/S = GLOB.all_species[species_name] + if(S.spawn_flags & SPECIES_IS_WHITELISTED) + continue + GLOB.custom_species_bases += species_name + for(var/species_name in whitelisted_icons) + GLOB.custom_species_bases += species_name + + return 1 // Hooks must return 1 + +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) return 1 diff --git a/code/_macros.dm b/code/_macros.dm index 4796f93b472..33bdf30ceb9 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -37,4 +37,7 @@ #define random_id(key,min_id,max_id) uniqueness_repository.Generate(/datum/uniqueness_generator/id_random, key, min_id, max_id) -#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } \ No newline at end of file +#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } + +#define isitem(A) istype(A, /obj/item) +#define isTaurTail(A) istype(A, /datum/sprite_accessory/tail/taur) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index e90cf3aaea8..3663d04eb45 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -789,7 +789,11 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. drop_sound = 'sound/items/drop/device.ogg' //Worn icon generation for on-mob sprites +<<<<<<< HEAD /obj/item/proc/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer,var/icon/clip_mask = null) //VOREStation edit - add 'clip mask' argument. +======= +/obj/item/proc/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer,var/icon/clip_mask = null) +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) //Get the required information about the base icon var/icon/icon2use = get_worn_icon_file(body_type = body_type, slot_name = slot_name, default_icon = default_icon, inhands = inhands) var/state2use = get_worn_icon_state(slot_name = slot_name) @@ -819,6 +823,9 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. if(istype(clip_mask)) //VOREStation Edit - For taur bodies/tails clipping off parts of uniforms and suits. standing.filters += filter(type = "alpha", icon = clip_mask) + if(istype(clip_mask)) //For taur bodies/tails clipping off parts of uniforms and suits. + standing.filters += filter(type = "alpha", icon = clip_mask) + //Apply any special features if(!inhands) apply_blood(standing) //Some items show blood when bloodied diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index e8af0c6a5b8..31386f9f708 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -164,6 +164,7 @@ reach = 2 // Spears are long. attackspeed = 14 +<<<<<<< HEAD //This is mostly for centaurs. /obj/item/weapon/material/twohanded/spear/lance name = "lance" @@ -177,4 +178,16 @@ default_material = "DEFAULT_WALL_MATERIAL" fragile = 0 sharp = 1 - edge = 0 \ No newline at end of file + edge = 0 +======= +/obj/item/weapon/material/twohanded/riding_crop + name = "riding crop" + desc = "A rod, a little over a foot long with a widened grip and a thick, leather patch at the end. Used since the dawn of the West to control animals." + force_divisor = 0.05 //Required in order for the X attacks Y message to pop up. + unwielded_force_divisor = 1 // One here, too. + applies_material_colour = 1 + unbreakable = 1 + base_icon = "riding_crop" + icon_state = "riding_crop0" + attack_verb = list("cropped","spanked","swatted","smacked","peppered") +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 67989b37b64..889ee7978a1 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -6,6 +6,28 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/icon/bgstate = "000" var/list/bgstate_options = list("000", "midgrey", "FFF", "white", "steel", "techmaint", "dark", "plating", "reinforced") + var/ear_style // Type of selected ear style + var/r_ears = 30 // Ear color. + var/g_ears = 30 // Ear color + var/b_ears = 30 // Ear color + var/r_ears2 = 30 // Ear extra color. + var/g_ears2 = 30 // Ear extra color + var/b_ears2 = 30 // Ear extra color + var/tail_style // Type of selected tail style + var/r_tail = 30 // Tail/Taur color + var/g_tail = 30 // Tail/Taur color + var/b_tail = 30 // Tail/Taur color + var/r_tail2 = 30 // For extra overlay. + var/g_tail2 = 30 // For extra overlay. + var/b_tail2 = 30 // For extra overlay. + var/wing_style // Type of selected wing style + var/r_wing = 30 // Wing color + var/g_wing = 30 // Wing color + var/b_wing = 30 // Wing color + var/r_wing2 = 30 // Wing extra color + var/g_wing2 = 30 // Wing extra color + var/b_wing2 = 30 // Wing extra color + /datum/category_item/player_setup_item/general/body name = "Body" sort_order = 3 @@ -43,6 +65,27 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["synth_markings"] >> pref.synth_markings S["bgstate"] >> pref.bgstate S["body_descriptors"] >> pref.body_descriptors + S["ear_style"] >> pref.ear_style + S["r_ears"] >> pref.r_ears + S["g_ears"] >> pref.g_ears + S["b_ears"] >> pref.b_ears + S["r_ears2"] >> pref.r_ears2 + S["g_ears2"] >> pref.g_ears2 + S["b_ears2"] >> pref.b_ears2 + S["tail_style"] >> pref.tail_style + S["r_tail"] >> pref.r_tail + S["g_tail"] >> pref.g_tail + S["b_tail"] >> pref.b_tail + S["r_tail2"] >> pref.r_tail2 + S["g_tail2"] >> pref.g_tail2 + S["b_tail2"] >> pref.b_tail2 + S["wing_style"] >> pref.wing_style + S["r_wing"] >> pref.r_wing + S["g_wing"] >> pref.g_wing + S["b_wing"] >> pref.b_wing + S["r_wing2"] >> pref.r_wing2 + S["g_wing2"] >> pref.g_wing2 + S["b_wing2"] >> pref.b_wing2 /datum/category_item/player_setup_item/general/body/save_character(var/savefile/S) S["species"] << pref.species @@ -77,6 +120,27 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["synth_markings"] << pref.synth_markings S["bgstate"] << pref.bgstate S["body_descriptors"] << pref.body_descriptors + S["ear_style"] << pref.ear_style + S["r_ears"] << pref.r_ears + S["g_ears"] << pref.g_ears + S["b_ears"] << pref.b_ears + S["r_ears2"] << pref.r_ears2 + S["g_ears2"] << pref.g_ears2 + S["b_ears2"] << pref.b_ears2 + S["tail_style"] << pref.tail_style + S["r_tail"] << pref.r_tail + S["g_tail"] << pref.g_tail + S["b_tail"] << pref.b_tail + S["r_tail2"] << pref.r_tail2 + S["g_tail2"] << pref.g_tail2 + S["b_tail2"] << pref.b_tail2 + S["wing_style"] << pref.wing_style + S["r_wing"] << pref.r_wing + S["g_wing"] << pref.g_wing + S["b_wing"] << pref.b_wing + S["r_wing2"] << pref.r_wing2 + S["g_wing2"] << pref.g_wing2 + S["b_wing2"] << pref.b_wing2 /datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S) if(!pref.species || !(pref.species in GLOB.playable_species)) @@ -110,6 +174,40 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if(!pref.bgstate || !(pref.bgstate in pref.bgstate_options)) pref.bgstate = "000" + pref.r_ears = sanitize_integer(pref.r_ears, 0, 255, initial(pref.r_ears)) + pref.g_ears = sanitize_integer(pref.g_ears, 0, 255, initial(pref.g_ears)) + pref.b_ears = sanitize_integer(pref.b_ears, 0, 255, initial(pref.b_ears)) + pref.r_ears2 = sanitize_integer(pref.r_ears2, 0, 255, initial(pref.r_ears2)) + pref.g_ears2 = sanitize_integer(pref.g_ears2, 0, 255, initial(pref.g_ears2)) + pref.b_ears2 = sanitize_integer(pref.b_ears2, 0, 255, initial(pref.b_ears2)) + pref.r_tail = sanitize_integer(pref.r_tail, 0, 255, initial(pref.r_tail)) + pref.g_tail = sanitize_integer(pref.g_tail, 0, 255, initial(pref.g_tail)) + pref.b_tail = sanitize_integer(pref.b_tail, 0, 255, initial(pref.b_tail)) + pref.r_tail2 = sanitize_integer(pref.r_tail2, 0, 255, initial(pref.r_tail2)) + pref.g_tail2 = sanitize_integer(pref.g_tail2, 0, 255, initial(pref.g_tail2)) + pref.b_tail2 = sanitize_integer(pref.b_tail2, 0, 255, initial(pref.b_tail2)) + pref.r_wing = sanitize_integer(pref.r_wing, 0, 255, initial(pref.r_wing)) + pref.g_wing = sanitize_integer(pref.g_wing, 0, 255, initial(pref.g_wing)) + pref.b_wing = sanitize_integer(pref.b_wing, 0, 255, initial(pref.b_wing)) + pref.r_wing2 = sanitize_integer(pref.r_wing2, 0, 255, initial(pref.r_wing2)) + pref.g_wing2 = sanitize_integer(pref.g_wing2, 0, 255, initial(pref.g_wing2)) + pref.b_wing2 = sanitize_integer(pref.b_wing2, 0, 255, initial(pref.b_wing2)) + if(pref.ear_style) + pref.ear_style = sanitize_inlist(pref.ear_style, ear_styles_list, initial(pref.ear_style)) + var/datum/sprite_accessory/temp_ear_style = ear_styles_list[pref.ear_style] + if(temp_ear_style.apply_restrictions && (!(pref.species in temp_ear_style.species_allowed))) + pref.ear_style = initial(pref.ear_style) + if(pref.tail_style) + pref.tail_style = sanitize_inlist(pref.tail_style, tail_styles_list, initial(pref.tail_style)) + var/datum/sprite_accessory/temp_tail_style = tail_styles_list[pref.tail_style] + if(temp_tail_style.apply_restrictions && (!(pref.species in temp_tail_style.species_allowed))) + pref.tail_style = initial(pref.tail_style) + if(pref.wing_style) + pref.wing_style = sanitize_inlist(pref.wing_style, wing_styles_list, initial(pref.wing_style)) + var/datum/sprite_accessory/temp_wing_style = wing_styles_list[pref.wing_style] + if(temp_wing_style.apply_restrictions && (!(pref.species in temp_wing_style.species_allowed))) + pref.wing_style = initial(pref.wing_style) + // Moved from /datum/preferences/proc/copy_to() /datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character) // Copy basic values @@ -140,6 +238,27 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O character.g_synth = pref.g_synth character.b_synth = pref.b_synth character.synth_markings = pref.synth_markings + character.ear_style = ear_styles_list[pref.ear_style] + character.r_ears = pref.r_ears + character.b_ears = pref.b_ears + character.g_ears = pref.g_ears + character.r_ears2 = pref.r_ears2 + character.b_ears2 = pref.b_ears2 + character.g_ears2 = pref.g_ears2 + character.tail_style = tail_styles_list[pref.tail_style] + character.r_tail = pref.r_tail + character.b_tail = pref.b_tail + character.g_tail = pref.g_tail + character.r_tail2 = pref.r_tail2 + character.b_tail2 = pref.b_tail2 + character.g_tail2 = pref.g_tail2 + character.wing_style = wing_styles_list[pref.wing_style] + character.r_wing = pref.r_wing + character.b_wing = pref.b_wing + character.g_wing = pref.g_wing + character.r_wing2 = pref.r_wing2 + character.b_wing2 = pref.b_wing2 + character.g_wing2 = pref.g_wing2 // Destroy/cyborgize organs and limbs. for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO)) @@ -352,6 +471,56 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O . += "
Body Color
" . += "Change Color [color_square(pref.r_skin, pref.g_skin, pref.b_skin)]
" + . += "

Genetics Settings

" + + var/ear_display = "Normal" + if(pref.ear_style && (pref.ear_style in ear_styles_list)) + var/datum/sprite_accessory/ears/instance = ear_styles_list[pref.ear_style] + ear_display = instance.name + + else if(pref.ear_style) + ear_display = "REQUIRES UPDATE" + . += "Ears
" + . += " Style: [ear_display]
" + if(ear_styles_list[pref.ear_style]) + var/datum/sprite_accessory/ears/ear = ear_styles_list[pref.ear_style] + if (ear.do_colouration) + . += "Change Color [color_square(pref.r_ears, pref.g_ears, pref.b_ears)]
" + if (ear.extra_overlay) + . += "Change Secondary Color [color_square(pref.r_ears2, pref.g_ears2, pref.b_ears2)]
" + + var/tail_display = "Normal" + if(pref.tail_style && (pref.tail_style in tail_styles_list)) + var/datum/sprite_accessory/tail/instance = tail_styles_list[pref.tail_style] + tail_display = instance.name + else if(pref.tail_style) + tail_display = "REQUIRES UPDATE" + . += "Tail
" + . += " Style: [tail_display]
" + + if(tail_styles_list[pref.tail_style]) + var/datum/sprite_accessory/tail/T = tail_styles_list[pref.tail_style] + if (T.do_colouration) + . += "Change Color [color_square(pref.r_tail, pref.g_tail, pref.b_tail)]
" + if (T.extra_overlay) + . += "Change Secondary Color [color_square(pref.r_tail2, pref.g_tail2, pref.b_tail2)]
" + + var/wing_display = "Normal" + if(pref.wing_style && (pref.wing_style in wing_styles_list)) + var/datum/sprite_accessory/wing/instance = wing_styles_list[pref.wing_style] + wing_display = instance.name + else if(pref.wing_style) + wing_display = "REQUIRES UPDATE" + . += "Wing
" + . += " Style: [wing_display]
" + + if(wing_styles_list[pref.wing_style]) + var/datum/sprite_accessory/wing/W = wing_styles_list[pref.wing_style] + if (W.do_colouration) + . += "Change Color [color_square(pref.r_wing, pref.g_wing, pref.b_wing)]
" + if (W.extra_overlay) + . += "Change Secondary Color [color_square(pref.r_wing2, pref.g_wing2, pref.b_wing2)]
" + . += "
Body Markings +
" . += "" for(var/M in pref.body_markings) @@ -860,6 +1029,105 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.bgstate = next_in_list(pref.bgstate, pref.bgstate_options) return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["ear_style"]) + // Construct the list of names allowed for this user. + var/list/pretty_ear_styles = list("Normal" = null) + for(var/path in ear_styles_list) + var/datum/sprite_accessory/ears/instance = ear_styles_list[path] + if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && (/*(!instance.apply_restrictions) || */(pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) + pretty_ear_styles[instance.name] = path + + // Present choice to user + var/new_ear_style = input(user, "Pick ears", "Character Preference", pref.ear_style) as null|anything in pretty_ear_styles + if(new_ear_style) + pref.ear_style = pretty_ear_styles[new_ear_style] + + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["ear_color"]) + var/new_earc = input(user, "Choose your character's ear colour:", "Character Preference", + rgb(pref.r_ears, pref.g_ears, pref.b_ears)) as color|null + if(new_earc) + pref.r_ears = hex2num(copytext(new_earc, 2, 4)) + pref.g_ears = hex2num(copytext(new_earc, 4, 6)) + pref.b_ears = hex2num(copytext(new_earc, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["ear_color2"]) + var/new_earc2 = input(user, "Choose your character's ear colour:", "Character Preference", + rgb(pref.r_ears2, pref.g_ears2, pref.b_ears2)) as color|null + if(new_earc2) + pref.r_ears2 = hex2num(copytext(new_earc2, 2, 4)) + pref.g_ears2 = hex2num(copytext(new_earc2, 4, 6)) + pref.b_ears2 = hex2num(copytext(new_earc2, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["tail_style"]) + // Construct the list of names allowed for this user. + var/list/pretty_tail_styles = list("Normal" = null) + for(var/path in tail_styles_list) + var/datum/sprite_accessory/tail/instance = tail_styles_list[path] + if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && (/*(!instance.apply_restrictions) || */(pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) + pretty_tail_styles[instance.name] = path + + // Present choice to user + var/new_tail_style = input(user, "Pick tails", "Character Preference", pref.tail_style) as null|anything in pretty_tail_styles + if(new_tail_style) + pref.tail_style = pretty_tail_styles[new_tail_style] + + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["tail_color"]) + var/new_tailc = input(user, "Choose your character's tail/taur colour:", "Character Preference", + rgb(pref.r_tail, pref.g_tail, pref.b_tail)) as color|null + if(new_tailc) + pref.r_tail = hex2num(copytext(new_tailc, 2, 4)) + pref.g_tail = hex2num(copytext(new_tailc, 4, 6)) + pref.b_tail = hex2num(copytext(new_tailc, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["tail_color2"]) + var/new_tailc2 = input(user, "Choose your character's secondary tail/taur colour:", "Character Preference", + rgb(pref.r_tail2, pref.g_tail2, pref.b_tail2)) as color|null + if(new_tailc2) + pref.r_tail2 = hex2num(copytext(new_tailc2, 2, 4)) + pref.g_tail2 = hex2num(copytext(new_tailc2, 4, 6)) + pref.b_tail2 = hex2num(copytext(new_tailc2, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["wing_style"]) + // Construct the list of names allowed for this user. + var/list/pretty_wing_styles = list("Normal" = null) + for(var/path in wing_styles_list) + var/datum/sprite_accessory/wing/instance = wing_styles_list[path] + if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && (/*(!instance.apply_restrictions) || */(pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) + pretty_wing_styles[instance.name] = path + + // Present choice to user + var/new_wing_style = input(user, "Pick wings", "Character Preference", pref.wing_style) as null|anything in pretty_wing_styles + if(new_wing_style) + pref.wing_style = pretty_wing_styles[new_wing_style] + + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["wing_color"]) + var/new_wingc = input(user, "Choose your character's wing colour:", "Character Preference", + rgb(pref.r_wing, pref.g_wing, pref.b_wing)) as color|null + if(new_wingc) + pref.r_wing = hex2num(copytext(new_wingc, 2, 4)) + pref.g_wing = hex2num(copytext(new_wingc, 4, 6)) + pref.b_wing = hex2num(copytext(new_wingc, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["wing_color2"]) + var/new_wingc2 = input(user, "Choose your character's secondary wing colour:", "Character Preference", + rgb(pref.r_wing2, pref.g_wing2, pref.b_wing2)) as color|null + if(new_wingc2) + pref.r_wing2 = hex2num(copytext(new_wingc2, 2, 4)) + pref.g_wing2 = hex2num(copytext(new_wingc2, 4, 6)) + pref.b_wing2 = hex2num(copytext(new_wingc2, 6, 8)) + return TOPIC_REFRESH_UPDATE_PREVIEW + return ..() /datum/category_item/player_setup_item/general/body/proc/reset_limbs() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1be43d63dd6..5fa9a50cf91 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -736,6 +736,8 @@ slot_flags = SLOT_OCLOTHING var/blood_overlay_type = "suit" blood_sprite_state = "suitblood" //Defaults to the suit's blood overlay, so that some blood renders instead of no blood. + + var/taurized = FALSE siemens_coefficient = 0.9 w_class = ITEMSIZE_NORMAL preserve_item = 1 @@ -771,6 +773,43 @@ set_clothing_index() +/obj/item/clothing/suit/equipped(var/mob/user, var/slot) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if((taurized && !isTaurTail(H.tail_style)) || (!taurized && isTaurTail(H.tail_style))) + taurize(user) + + return ..() + +/obj/item/clothing/suit/proc/taurize(var/mob/living/carbon/human/Taur) + if(isTaurTail(Taur.tail_style)) + var/datum/sprite_accessory/tail/taur/taurtail = Taur.tail_style + if(taurtail.suit_sprites && (get_worn_icon_state(slot_wear_suit_str) in cached_icon_states(taurtail.suit_sprites))) + icon_override = taurtail.suit_sprites + taurized = TRUE + + if(!taurized) + icon_override = initial(icon_override) + taurized = FALSE + +// Taur suits need to be shifted so its centered on their taur half. +/obj/item/clothing/suit/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0,var/icon/clip_mask) + var/image/standing = ..() + if(taurized) //Special snowflake var on suits + standing.pixel_x = -16 + standing.layer = BODY_LAYER + 15 // 15 is above tail layer, so will not be covered by taurbody. + return standing + +/obj/item/clothing/suit/apply_accessories(var/image/standing) + if(LAZYLEN(accessories) && taurized) + for(var/obj/item/clothing/accessory/A in accessories) + var/image/I = new(A.get_mob_overlay()) + I.pixel_x = 16 //Opposite of the pixel_x on the suit (-16) from taurization to cancel it out and puts the accessory in the correct place on the body. + standing.add_overlay(I) + else + return ..() + + /////////////////////////////////////////////////////////////////////// //Under clothing /obj/item/clothing/under @@ -1045,7 +1084,6 @@ to_chat(usr, "You roll down your [src]'s sleeves.") update_clothing_icon() - /obj/item/clothing/under/rank/New() sensor_mode = pick(0,1,2,3) ..() diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index e59fffb51fe..0457e463d23 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -475,7 +475,7 @@ message = "points to [M]." else m_type = 1 - + if("crack") if(!restrained()) message = "cracks [T.his] knuckles." @@ -802,3 +802,27 @@ HTML +="\[Done\]" HTML += "" src << browse(HTML, "window=flavor_changes;size=430x300") + +/mob/living/carbon/human/proc/toggle_tail(var/setting,var/message = 0) + if(!tail_style || !tail_style.ani_state) + if(message) + to_chat(src, "You don't have a tail that supports this.") + return 0 + + var/new_wagging = isnull(setting) ? !wagging : setting + if(new_wagging != wagging) + wagging = new_wagging + update_tail_showing() + return 1 + +/mob/living/carbon/human/proc/toggle_wing(var/setting,var/message = 0) + if(!wing_style || !wing_style.ani_state) + if(message) + to_chat(src, "You don't have a wingtype that supports this.") + return 0 + + var/new_flapping = isnull(setting) ? !flapping : setting + if(new_flapping != flapping) + flapping = setting + update_wing_showing() + return 1 diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 208e1e1ffc6..1efb447beaf 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -115,6 +115,40 @@ var/mob/living/carbon/human/vr_link = null var/obj/machinery/machine_visual //machine that is currently applying visual effects to this mob. Only used for camera monitors currently. +<<<<<<< HEAD inventory_panel_type = /datum/inventory_panel/human butchery_loot = list(/obj/item/stack/animalhide/human = 1) +======= + butchery_loot = list(/obj/item/stack/animalhide/human = 1) + + // Horray Furries! + var/datum/sprite_accessory/ears/ear_style = null + var/r_ears = 30 + var/g_ears = 30 + var/b_ears = 30 + var/r_ears2 = 30 + var/g_ears2 = 30 + var/b_ears2 = 30 + var/datum/sprite_accessory/tail/tail_style = null + var/r_tail = 30 + var/g_tail = 30 + var/b_tail = 30 + var/r_tail2 = 30 + var/g_tail2 = 30 + var/b_tail2 = 30 + var/datum/sprite_accessory/wing/wing_style = null + var/r_wing = 30 + var/g_wing = 30 + var/b_wing = 30 + var/r_wing2 = 30 + var/g_wing2 = 30 + var/b_wing2 = 30 + + var/wagging = 0 //UGH. + var/flapping = 0 + + // Custom Species Name + var/custom_species + +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index d4086e1442d..a8b0a4b5638 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -250,6 +250,27 @@ /datum/mob_descriptor/build ) + //This is used in character setup preview generation (prefences_setup.dm) and human mob + //rendering (update_icons.dm) + var/color_mult = 0 + + //This is for overriding tail rendering with a specific icon in icobase, for static + //tails only, since tails would wag when dead if you used this + var/icobase_tail = 0 + + var/wing_hair + var/wing + var/wing_animation + var/icobase_wing + var/wikilink = null //link to wiki page for species + var/icon_height = 32 + var/agility = 20 //prob() to do agile things + +/datum/species/proc/update_attack_types() + unarmed_attacks = list() + for(var/u_type in unarmed_types) + unarmed_attacks += new u_type() + /datum/species/New() if(hud_type) hud = new hud_type() @@ -375,7 +396,11 @@ t_him = "him" if(FEMALE) t_him = "her" +<<<<<<< HEAD //VOREStation Edit Start - Headpats and Handshakes. +======= + +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) if(H.zone_sel.selecting == "head") H.visible_message( \ "[H] pats [target] on the head.", \ @@ -389,9 +414,16 @@ H.visible_message( \ "[H] boops [target]'s nose.", \ "You boop [target] on the nose.", ) +<<<<<<< HEAD //VOREStation Edit End else H.visible_message("[H] hugs [target] to make [t_him] feel better!", \ "You hug [target] to make [t_him] feel better!") //End VOREStation Edit +======= + + else + H.visible_message("[H] hugs [target] to make [t_him] feel better!", \ + "You hug [target] to make [t_him] feel better!") +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) /datum/species/proc/remove_inherent_verbs(var/mob/living/carbon/human/H) if(inherent_verbs) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 1176e870a6d..bc1d224a442 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -4,6 +4,7 @@ */ var/global/list/human_icon_cache = list() //key is incredibly complex, see update_icons_body() var/global/list/tail_icon_cache = list() //key is [species.race_key][r_skin][g_skin][b_skin] +var/global/list/wing_icon_cache = list() // See tail. var/global/list/light_overlay_cache = list() //see make_worn_icon() on helmets var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() @@ -86,13 +87,22 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define LEGCUFF_LAYER 25 //Same as handcuffs, for legcuffs #define L_HAND_LAYER 26 //Left-hand item #define R_HAND_LAYER 27 //Right-hand item +<<<<<<< HEAD #define WING_LAYER 28 //VOREStation edit. Simply move this up a number if things are added. #define TAIL_LAYER_ALT 29 //VOREStation edit. Simply move this up a number if things are added. +======= +#define WING_LAYER 28 //Wings or protrusions over the suit. +#define TAIL_LAYER_ALT 29 //Modified tail-sprite layer. Tend to be larger. +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) #define MODIFIER_EFFECTS_LAYER 30 //Effects drawn by modifiers #define FIRE_LAYER 31 //'Mob on fire' overlay layer #define WATER_LAYER 32 //'Mob submerged' overlay layer #define TARGETED_LAYER 33 //'Aimed at' overlay layer +<<<<<<< HEAD #define TOTAL_LAYERS 33 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. +======= +#define TOTAL_LAYERS 33//<---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) ////////////////////////////////// /mob/living/carbon/human @@ -190,7 +200,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() // blend the individual damage states with our icons for(var/obj/item/organ/external/O in organs) - if(isnull(O) || O.is_stump()) + if(isnull(O) || O.is_stump() || O.is_hidden_by_tail()) continue O.update_icon() @@ -262,21 +272,32 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() icon_key += "[rgb(part.s_col[1],part.s_col[2],part.s_col[3])]" if(part.body_hair && part.h_col && part.h_col.len >= 3) icon_key += "[rgb(part.h_col[1],part.h_col[2],part.h_col[3])]" +<<<<<<< HEAD //VOREStation Edit - Different way of tracking add/mult species +======= +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) if(species.color_mult) icon_key += "[ICON_MULTIPLY]" else icon_key += "[ICON_ADD]" +<<<<<<< HEAD //VOREStation Edit End +======= +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) else icon_key += "#000000" + for(var/M in part.markings) icon_key += "[M][part.markings[M]["color"]]" if(part.robotic >= ORGAN_ROBOT) icon_key += "2[part.model ? "-[part.model]": ""]" robolimb_count++ +<<<<<<< HEAD if((part.robotic == ORGAN_ROBOT || part.robotic == ORGAN_LIFELIKE) && (part.organ_tag == BP_HEAD || part.organ_tag == BP_TORSO || part.organ_tag == BP_GROIN)) //VOREStation Edit - Not for nanoform parts +======= + if((part.robotic == ORGAN_ROBOT || part.robotic == ORGAN_LIFELIKE) && (part.organ_tag == BP_HEAD || part.organ_tag == BP_TORSO || part.organ_tag == BP_GROIN)) +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) robobody_count ++ else if(part.status & ORGAN_DEAD) icon_key += "3" @@ -285,6 +306,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(part.transparent) //VOREStation Edit. For better slime limbs. Avoids using solid var due to limb dropping. icon_key += "_t" //VOREStation Edit. + if(part.transparent) + icon_key += "_t" + icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" var/icon/base_icon if(human_icon_cache[icon_key]) @@ -301,7 +325,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) if(part.icon_position & (LEFT | RIGHT)) +<<<<<<< HEAD var/icon/temp2 = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi', icon_state = "blank") //VOREStation Edit. +======= + var/icon/temp2 = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi', icon_state = "blank") +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH) temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH) if(!(part.icon_position & LEFT)) @@ -342,7 +370,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() //tail update_tail_showing() +<<<<<<< HEAD update_wing_showing() // VOREStation Edit +======= + update_wing_showing() +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) /mob/living/carbon/human/proc/update_skin() if(QDESTROYING(src)) @@ -425,7 +457,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(facial_hair_style && facial_hair_style.species_allowed && (src.species.get_bodytype(src) in facial_hair_style.species_allowed)) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") if(facial_hair_style.do_colouration) +<<<<<<< HEAD facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_MULTIPLY) //VOREStation edit +======= + facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_MULTIPLY) +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) face_standing.Blend(facial_s, ICON_OVERLAY) @@ -451,6 +487,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() face_standing.Blend(hair_s, ICON_OVERLAY) +<<<<<<< HEAD // VOREStation Edit - START var/icon/ears_s = get_ears_overlay() if(ears_s) @@ -463,10 +500,18 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() // VOREStation Edit - END if(head_organ.transparent) //VOREStation Edit. For better slime limbs. +======= + if(head_organ.nonsolid || head_organ.transparent) +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) face_standing += rgb(,,,120) - overlays_standing[HAIR_LAYER] = image(face_standing, layer = BODY_LAYER+HAIR_LAYER) + var/icon/ears_s = get_ears_overlay() + if(ears_s) + face_standing.Blend(ears_s, ICON_OVERLAY) + + overlays_standing[HAIR_LAYER] = image(face_standing, layer = BODY_LAYER+HAIR_LAYER, "pixel_y" = head_organ.head_offset) apply_layer(HAIR_LAYER) + return /mob/living/carbon/human/update_eyes() if(QDESTROYING(src)) @@ -604,14 +649,20 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() uniform_sprite = "[INV_W_UNIFORM_DEF_ICON].dmi" //Build a uniform sprite +<<<<<<< HEAD //VOREStation Edit start. +======= +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) var/icon/c_mask = tail_style?.clip_mask if(c_mask) var/obj/item/clothing/suit/S = wear_suit if((wear_suit?.flags_inv & HIDETAIL) || (istype(S) && S.taurized)) // Reasons to not mask: 1. If you're wearing a suit that hides the tail or if you're wearing a taurized suit. c_mask = null overlays_standing[UNIFORM_LAYER] = w_uniform.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_w_uniform_str, default_icon = uniform_sprite, default_layer = UNIFORM_LAYER, clip_mask = c_mask) +<<<<<<< HEAD //VOREStation Edit end. +======= +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) apply_layer(UNIFORM_LAYER) /mob/living/carbon/human/update_inv_wear_id() @@ -693,7 +744,10 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(!shoes || (wear_suit && wear_suit.flags_inv & HIDESHOES) || (w_uniform && w_uniform.flags_inv & HIDESHOES)) return //Either nothing to draw, or it'd be hidden. +<<<<<<< HEAD //VOREStation Edit +======= +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) for(var/f in list(BP_L_FOOT, BP_R_FOOT)) var/obj/item/organ/external/foot/foot = get_organ(f) if(istype(foot) && foot.is_hidden_by_tail()) //If either foot is hidden by the tail, don't render footwear. @@ -775,7 +829,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() update_inv_w_uniform() update_inv_shoes() update_tail_showing() +<<<<<<< HEAD update_wing_showing() // VOREStation Edit +======= + update_wing_showing() +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) if(!wear_suit) return //No point, no suit. @@ -790,7 +848,10 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() else suit_sprite = "[INV_SUIT_DEF_ICON].dmi" +<<<<<<< HEAD //VOREStation Edit start. +======= +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) var/icon/c_mask = null var/tail_is_rendered = (overlays_standing[TAIL_LAYER] || overlays_standing[TAIL_LAYER_ALT]) var/valid_clip_mask = tail_style?.clip_mask @@ -798,8 +859,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(tail_is_rendered && valid_clip_mask && !(istype(suit) && suit.taurized)) //Clip the lower half of the suit off using the tail's clip mask for taurs since taur bodies aren't hidden. c_mask = valid_clip_mask overlays_standing[SUIT_LAYER] = wear_suit.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_suit_str, default_icon = suit_sprite, default_layer = SUIT_LAYER, clip_mask = c_mask) +<<<<<<< HEAD //VOREStation Edit end. +======= +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) apply_layer(SUIT_LAYER) @@ -912,6 +976,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() return remove_layer(TAIL_LAYER) +<<<<<<< HEAD remove_layer(TAIL_LAYER_ALT) // VOREStation Edit - START - Alt Tail Layer var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER @@ -923,13 +988,29 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() apply_layer(used_tail_layer) return // VOREStation Edit - END +======= + remove_layer(TAIL_LAYER_ALT) // Alt Tail Layer + + var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER + + var/image/tail_image = get_tail_image() + if(tail_image) + tail_image.layer = BODY_LAYER+used_tail_layer + overlays_standing[used_tail_layer] = tail_image + apply_layer(used_tail_layer) + return +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) var/species_tail = species.get_tail(src) // Species tail icon_state prefix. //This one is actually not that bad I guess. if(species_tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) var/icon/tail_s = get_tail_icon() +<<<<<<< HEAD overlays_standing[used_tail_layer] = image(icon = tail_s, icon_state = "[species_tail]_s", layer = BODY_LAYER+used_tail_layer) // VOREStation Edit - Alt Tail Layer +======= + overlays_standing[used_tail_layer] = image(icon = tail_s, icon_state = "[species_tail]_s", layer = BODY_LAYER+used_tail_layer) // Alt Tail Layer +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) animate_tail_reset() //TODO: Is this the appropriate place for this, and not on species...? @@ -939,6 +1020,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(!tail_icon) //generate a new one var/species_tail_anim = species.get_tail_animation(src) +<<<<<<< HEAD if(!species_tail_anim && species.icobase_tail) species_tail_anim = species.icobase //VOREStation Code - Allow override of file for non-animated tails if(!species_tail_anim) species_tail_anim = 'icons/effects/species.dmi' tail_icon = new/icon(species_tail_anim) @@ -948,13 +1030,28 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(use_species_tail) var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.get_tail(src)]_[use_species_tail]_s") //VOREStation edit -- Suffix icon state string with '_s' to compensate for diff in .dmi b/w us & Polaris. hair_icon.Blend(rgb(r_hair, g_hair, b_hair), species.color_mult ? ICON_MULTIPLY : ICON_ADD) //VOREStation edit -- Check for species color_mult +======= + if(!species_tail_anim && species.icobase_tail) species_tail_anim = species.icobase //Allow override of file for non-animated tails + if(!species_tail_anim) species_tail_anim = 'icons/effects/species.dmi' + tail_icon = new/icon(species_tail_anim) + tail_icon.Blend(rgb(r_skin, g_skin, b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) + // The following will not work with animated tails. + var/use_species_tail = species.get_tail_hair(src) + if(use_species_tail) + var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.get_tail(src)]_[use_species_tail]") + hair_icon.Blend(rgb(r_hair, g_hair, b_hair), species.color_mult ? ICON_MULTIPLY : ICON_ADD) //Check for species color_mult +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) tail_icon.Blend(hair_icon, ICON_OVERLAY) tail_icon_cache[icon_key] = tail_icon return tail_icon /mob/living/carbon/human/proc/set_tail_state(var/t_state) +<<<<<<< HEAD var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER // VOREStation Edit - START - Alt Tail Layer +======= + var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER // Alt Tail Layer +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) var/image/tail_overlay = overlays_standing[used_tail_layer] remove_layer(TAIL_LAYER) @@ -966,7 +1063,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() tail_overlay.icon_state = t_state . = tail_overlay +<<<<<<< HEAD apply_layer(used_tail_layer) // VOREStation Edit - END +======= + apply_layer(used_tail_layer) +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) //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. @@ -976,9 +1077,15 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() return var/t_state = "[species.get_tail(src)]_once" +<<<<<<< HEAD var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER // VOREStation Edit - Alt Tail Layer var/image/tail_overlay = overlays_standing[used_tail_layer] // VOREStation Edit - Alt Tail Layer +======= + var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER // Alt Tail Layer + + var/image/tail_overlay = overlays_standing[used_tail_layer] // Alt Tail Layer +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) if(tail_overlay && tail_overlay.icon_state == t_state) return //let the existing animation finish @@ -986,7 +1093,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(tail_overlay) spawn(20) //check that the animation hasn't changed in the meantime +<<<<<<< HEAD if(overlays_standing[used_tail_layer] == tail_overlay && tail_overlay.icon_state == t_state) // VOREStation Edit - Alt Tail Layer +======= + if(overlays_standing[used_tail_layer] == tail_overlay && tail_overlay.icon_state == t_state) // Alt Tail Layer +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) animate_tail_stop() /mob/living/carbon/human/proc/animate_tail_start() @@ -1009,7 +1120,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() set_tail_state("[species.get_tail(src)]_idle[rand(0,9)]") else set_tail_state("[species.get_tail(src)]_static") +<<<<<<< HEAD toggle_tail_vr(FALSE) //VOREStation Add - So tails stop when someone dies. TODO - Fix this hack ~Leshana +======= + toggle_tail(FALSE) //So tails stop when someone dies. TODO - Fix this hack ~Leshana +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) /mob/living/carbon/human/proc/animate_tail_stop() if(QDESTROYING(src)) @@ -1017,13 +1132,17 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() set_tail_state("[species.get_tail(src)]_static") +<<<<<<< HEAD // VOREStation Edit - Wings! See update_icons_vr.dm for more wing procs +======= +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) /mob/living/carbon/human/proc/update_wing_showing() if(QDESTROYING(src)) return remove_layer(WING_LAYER) +<<<<<<< HEAD var/image/vr_wing_image = get_wing_image() if(vr_wing_image) vr_wing_image.layer = BODY_LAYER+WING_LAYER @@ -1031,6 +1150,14 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() apply_layer(WING_LAYER) // VOREStation Edit end +======= + var/image/wing_image = get_wing_image() + if(wing_image) + wing_image.layer = BODY_LAYER+WING_LAYER + overlays_standing[WING_LAYER] = wing_image + + apply_layer(WING_LAYER) +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) /mob/living/carbon/human/update_modifier_visuals() if(QDESTROYING(src)) @@ -1097,6 +1224,89 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() overlays_standing[SURGERY_LAYER] = total apply_layer(SURGERY_LAYER) +/mob/living/carbon/human/proc/get_wing_image() + if(QDESTROYING(src)) + return + + //If you are FBP with wing style and didn't set a custom one + if(synthetic && synthetic.includes_wing && !wing_style) + var/icon/wing_s = new/icon("icon" = synthetic.icon, "icon_state" = "wing") //I dunno. If synths have some custom wing? + wing_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) + return image(wing_s) + + //If you have custom wings selected + if(wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) + var/icon/wing_s = new/icon("icon" = wing_style.icon, "icon_state" = flapping && wing_style.ani_state ? wing_style.ani_state : wing_style.icon_state) + if(wing_style.do_colouration) + wing_s.Blend(rgb(src.r_wing, src.g_wing, src.b_wing), wing_style.color_blend_mode) + if(wing_style.extra_overlay) + var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay) + overlay.Blend(rgb(src.r_wing2, src.g_wing2, src.b_wing2), wing_style.color_blend_mode) + wing_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + return image(wing_s) + +/mob/living/carbon/human/proc/get_ears_overlay() + if(ear_style && !(head && (head.flags_inv & BLOCKHEADHAIR))) + var/icon/ears_s = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.icon_state) + if(ear_style.do_colouration) + ears_s.Blend(rgb(src.r_ears, src.g_ears, src.b_ears), ear_style.color_blend_mode) + if(ear_style.extra_overlay) + var/icon/overlay = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.extra_overlay) + overlay.Blend(rgb(src.r_ears2, src.g_ears2, src.b_ears2), ear_style.color_blend_mode) + ears_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + return ears_s + return null + + +/mob/living/carbon/human/proc/get_tail_image() + //If you are FBP with tail style and didn't set a custom one + var/datum/robolimb/model = isSynthetic() + if(istype(model) && model.includes_tail && !tail_style) + var/icon/tail_s = new/icon("icon" = synthetic.icon, "icon_state" = "tail") + tail_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) + return image(tail_s) + + //If you have a custom tail selected + if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !isTaurTail(tail_style))) + var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state) + if(tail_style.do_colouration) + tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode) + if(tail_style.extra_overlay) + var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay) + if(wagging && tail_style.ani_state) + overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w) + overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode) + tail_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + else + overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode) + tail_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + + if(isTaurTail(tail_style)) + var/datum/sprite_accessory/tail/taur/taurtype = tail_style + if(taurtype.can_ride && !riding_datum) + riding_datum = new /datum/riding/taur(src) + verbs |= /mob/living/carbon/human/proc/taur_mount + verbs |= /mob/living/proc/toggle_rider_reins + return image(tail_s, "pixel_x" = -16) + else + return image(tail_s) + return null + +// TODO - Move this to where it should go ~Leshana +/mob/living/proc/stop_flying() + if(QDESTROYING(src)) + return + flying = FALSE + return 1 + +/mob/living/carbon/human/stop_flying() + if((. = ..())) + update_wing_showing() + //Human Overlays Indexes///////// #undef MUTATIONS_LAYER #undef SKIN_LAYER diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index ab1e134fe9e..32f05250892 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -75,5 +75,11 @@ var/allow_self_surgery = FALSE // Used to determine if the mob can perform surgery on itself. +<<<<<<< HEAD var/inventory_panel_type = /datum/inventory_panel var/datum/inventory_panel/inventory_panel +======= + var/tail_alt = 0 + var/flying = 0 // Allows flight + +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) diff --git a/code/modules/mob/living/riding.dm b/code/modules/mob/living/riding.dm new file mode 100644 index 00000000000..3a614a4b6d4 --- /dev/null +++ b/code/modules/mob/living/riding.dm @@ -0,0 +1,16 @@ +/mob/living/proc/toggle_rider_reins() + set name = "Give Reins" + set category = "Abilities" + set desc = "Let people riding on you control your movement." + + if(riding_datum) + if(istype(riding_datum,/datum/riding)) + if(riding_datum.keytype) + riding_datum.keytype = null + to_chat(src, "Rider control enabled.") + return + else + riding_datum.keytype = /obj/item/weapon/material/twohanded/riding_crop + to_chat(src, "Rider control restricted.") + return + return diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 953f4d01acf..7c5d00773c0 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -252,8 +252,12 @@ /datum/preferences/proc/update_preview_icon() var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey) + if(!mannequin.dna) // Special handling for preview icons before SSAtoms has initailized. + mannequin.dna = new /datum/dna(null) mannequin.delete_inventory(TRUE) dress_preview_mob(mannequin) + mannequin.toggle_tail(setting = TRUE) + mannequin.toggle_wing(setting = TRUE) COMPILE_OVERLAYS(mannequin) update_character_previews(new /mutable_appearance(mannequin)) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 74578c8e9a4..defd44a1342 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -34,6 +34,11 @@ // Whether or not the accessory can be affected by colouration var/do_colouration = 1 + var/color_blend_mode = ICON_MULTIPLY // If checked. + + // Ckey of person allowed to use this, if defined. + var/list/ckeys_allowed = null + var/apply_restrictions = FALSE //whether to apply restrictions for specific tails/ears/wings /* //////////////////////////// @@ -928,6 +933,349 @@ icon_state = "hair_ziegler" flags = HAIR_TIEABLE +/datum/sprite_accessory/hair/astolfo + name = "Astolfo" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "hair_astolfo" + +/datum/sprite_accessory/hair/awoohair + name = "Shoulder-length Messy" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "momijihair" + +/datum/sprite_accessory/hair/braid + name = "Floorlength Braid" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "hair_braid" + +/datum/sprite_accessory/hair/twindrills + name = "Twin Drills" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "hair_twincurl" + +/datum/sprite_accessory/hair/ponytail6_fixed + name = "Ponytail 6.2" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "hair_ponytail6" + +/datum/sprite_accessory/hair/una_hood + name = "Cobra Hood" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "soghun_hood" + species_allowed = list(SPECIES_UNATHI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/una_doublehorns + name = "Double Unathi Horns" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "soghun_dubhorns" + species_allowed = list(SPECIES_UNATHI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/citheronia_colorable + name = "Citheronia" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "citheronia_hair_c" + do_colouration = 1 + +/datum/sprite_accessory/hair/sergal_plain + name = "Sergal Plain" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "serg_plain" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/sergal_medicore + name = "Sergal Medicore" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "serg_medicore" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/sergal_tapered + name = "Sergal Tapered" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "serg_tapered" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/hair/sergal_fairytail + name = "Sergal Fairytail" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "serg_fairytail" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +// Vulpa stuffs + +/datum/sprite_accessory/hair/vulp_hair_none + name = "None" + icon_state = "bald" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_kajam + name = "Kajam" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "kajam" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_keid + name = "Keid" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "keid" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_adhara + name = "Adhara" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "adhara" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_kleeia + name = "Kleeia" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "kleeia" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_mizar + name = "Mizar" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "mizar" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_apollo + name = "Apollo" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "apollo" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_belle + name = "Belle" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "belle" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_bun + name = "Vulp Bun" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "bun" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_jagged + name = "Jagged" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "jagged" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_curl + name = "Curl" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "curl" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_hawk + name = "Hawk" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "hawk" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_anita + name = "Anita" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "anita" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_short + name = "Short" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "short" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_spike + name = "Spike" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "spike" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +//xeno stuffs +/datum/sprite_accessory/hair/xeno_head_drone_color + name = "Drone dome" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "cxeno_drone" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER +// figure this one out for better coloring +/datum/sprite_accessory/hair/xeno_head_sentinel_color + name = "Sentinal dome" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "cxeno_sentinel" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/xeno_head_queen_color + name = "Queen dome" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "cxeno_queen" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/xeno_head_hunter_color + name = "Hunter dome" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "cxeno_hunter" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/xeno_head_praetorian_color + name = "Praetorian dome" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "cxeno_praetorian" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +// Shadekin stuffs + +/datum/sprite_accessory/hair/shadekin_hair_short + name = "Shadekin Short Hair" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "shadekin_short" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/shadekin_hair_poofy + name = "Shadekin Poofy Hair" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "shadekin_poofy" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/hair/shadekin_hair_long + name = "Shadekin Long Hair" + icon = 'icons/mob/human_face_alt.dmi' + icon_add = 'icons/mob/human_face_alt_add.dmi' + icon_state = "shadekin_long" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/* +shaved + name = "Shaved" + icon_state = "bald" + gender = NEUTER + species_allowed = list(SPECIES_HUMAN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) +*/ +/datum/sprite_accessory/facial_hair/neck_fluff + name = "Neck Fluff" + icon = 'icons/mob/human_face_or_alt.dmi' + icon_state = "facial_neckfluff" + gender = NEUTER + species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/facial_hair/vulp_none + name = "None" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "none" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/vulp_blaze + name = "Blaze" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_blaze" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/vulp_vulpine + name = "Vulpine" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_vulpine" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/vulp_earfluff + name = "Earfluff" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_earfluff" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/vulp_mask + name = "Mask" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_mask" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/vulp_patch + name = "Patch" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_patch" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/vulp_ruff + name = "Ruff" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_ruff" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/vulp_kita + name = "Kita" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_kita" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/vulp_swift + name = "Swift" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "vulp_facial_swift" + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + gender = NEUTER + /* /////////////////////////////////// / =---------------------------= / @@ -938,6 +1286,7 @@ /datum/sprite_accessory/facial_hair icon = 'icons/mob/Human_face.dmi' + color_blend_mode = ICON_MULTIPLY /datum/sprite_accessory/facial_hair/shaved name = "Shaved" @@ -1126,23 +1475,23 @@ /datum/sprite_accessory/hair/skr_tentacle_veryshort name = "Skrell Short Tentacles" icon_state = "skrell_hair_short" - species_allowed = list(SPECIES_SKRELL) + species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) gender = MALE /datum/sprite_accessory/hair/skr_tentacle_short name = "Skrell Average Tentacles" icon_state = "skrell_hair_average" - species_allowed = list(SPECIES_SKRELL) + species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) /datum/sprite_accessory/hair/skr_tentacle_average name = "Skrell Long Tentacles" icon_state = "skrell_hair_long" - species_allowed = list(SPECIES_SKRELL) + species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) /datum/sprite_accessory/hair/skr_tentacle_verylong name = "Skrell Very Long Tentacles" icon_state = "skrell_hair_verylong" - species_allowed = list(SPECIES_SKRELL) + species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) //Tajaran hairstyles /datum/sprite_accessory/hair/taj_ears @@ -1424,6 +1773,8 @@ //like Tajaran inner-ear coloring overlay stuff. species_allowed = list() + color_blend_mode = ICON_ADD + var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD diff --git a/code/modules/mob/new_player/sprite_accessories_ear.dm b/code/modules/mob/new_player/sprite_accessories_ear.dm new file mode 100644 index 00000000000..3247a8b069a --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_ear.dm @@ -0,0 +1,488 @@ +/* +//////////////////////////// +/ =--------------------= / +/ == Ear Definitions == / +/ =--------------------= / +//////////////////////////// +*/ +/datum/sprite_accessory/ears + name = "You should not see this..." + icon = 'icons/mob/human_races/sprite_accessories/ears.dmi' + do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color + + color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 + var/extra_overlay // Icon state of an additional overlay to blend in. + var/desc = "You should not see this..." + + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/ears/shadekin + name = "Shadekin Ears, colorable" + desc = "" + icon_state = "shadekin" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + apply_restrictions = TRUE + +/datum/sprite_accessory/ears/taj_ears + name = "Tajaran Ears" + icon_state = "ears_plain" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + extra_overlay = "ears_plain-inner" + +/datum/sprite_accessory/ears/taj_ears_tall + name = "Tajaran Tall Ears" + icon_state = "msai_plain" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + extra_overlay = "msai_plain-inner" + +/datum/sprite_accessory/ears/squirrel_orange + name = "squirel, orange" + desc = "" + icon_state = "squirrel-orange" + +/datum/sprite_accessory/ears/squirrel_red + name = "squirrel, red" + desc = "" + icon_state = "squirrel-red" + +/datum/sprite_accessory/ears/bunny_white + name = "bunny, white" + desc = "" + icon_state = "bunny" + +/datum/sprite_accessory/ears/bear_brown + name = "bear, brown" + desc = "" + icon_state = "bear-brown" + +/datum/sprite_accessory/ears/bear_panda + name = "bear, panda" + desc = "" + icon_state = "panda" + +/datum/sprite_accessory/ears/wolf_grey + name = "wolf, grey" + desc = "" + icon_state = "wolf-grey" + +/datum/sprite_accessory/ears/wolf_green + name = "wolf, green" + desc = "" + icon_state = "wolf-green" + +/datum/sprite_accessory/ears/wisewolf + name = "wolf, wise" + desc = "" + icon_state = "wolf-wise" + +/datum/sprite_accessory/ears/mouse_grey + name = "mouse, grey" + desc = "" + icon_state = "mouse-grey" + +/datum/sprite_accessory/ears/bee + name = "bee antennae" + desc = "" + icon_state = "bee" + +/datum/sprite_accessory/ears/antennae + name = "antennae, colorable" + desc = "" + icon_state = "antennae" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/curly_bug + name = "curly antennae, colorable" + desc = "" + icon_state = "curly_bug" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/dual_robot + name = "synth antennae, colorable" + desc = "" + icon_state = "dual_robot_antennae" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/right_robot + name = "right synth, colorable" + desc = "" + icon_state = "right_robot_antennae" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/left_robot + name = "left synth, colorable" + desc = "" + icon_state = "left_robot_antennae" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/oni_h1 + name = "oni horns" + desc = "" + icon_state = "oni-h1" + +/datum/sprite_accessory/ears/oni_h1_c + name = "oni horns, colorable" + desc = "" + icon_state = "oni-h1_c" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/demon_horns1 + name = "demon horns" + desc = "" + icon_state = "demon-horns1" + +/datum/sprite_accessory/ears/demon_horns1_c + name = "demon horns, colorable" + desc = "" + icon_state = "demon-horns1_c" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/demon_horns2 + name = "demon horns, colorable(outward)" + desc = "" + icon_state = "demon-horns2" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/dragon_horns + name = "dragon horns, colorable" + desc = "" + icon_state = "dragon-horns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/foxears + name = "highlander zorren ears" + desc = "" + icon_state = "foxears" + +/datum/sprite_accessory/ears/fenears + name = "flatland zorren ears" + desc = "" + icon_state = "fenears" + +/datum/sprite_accessory/ears/sergal //Redundant + name = "Sergal ears" + icon_state = "serg_plain_s" + +/datum/sprite_accessory/ears/foxearshc + name = "highlander zorren ears, colorable" + desc = "" + icon_state = "foxearshc" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/fenearshc + name = "flatland zorren ears, colorable" + desc = "" + icon_state = "fenearshc" + extra_overlay = "fenears-inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/sergalhc + name = "Sergal ears, colorable" + icon_state = "serg_plain_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/mousehc + name = "mouse, colorable" + desc = "" + icon_state = "mouse" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "mouseinner" + +/datum/sprite_accessory/ears/mousehcno + name = "mouse, colorable, no inner" + desc = "" + icon_state = "mouse" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/wolfhc + name = "wolf, colorable" + desc = "" + icon_state = "wolf" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "wolfinner" + +/datum/sprite_accessory/ears/bearhc + name = "bear, colorable" + desc = "" + icon_state = "bear" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/smallbear + name = "small bear" + desc = "" + icon_state = "smallbear" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/squirrelhc + name = "squirrel, colorable" + desc = "" + icon_state = "squirrel" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/kittyhc + name = "kitty, colorable" + desc = "" + icon_state = "kitty" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "kittyinner" + +/datum/sprite_accessory/ears/bunnyhc + name = "bunny, colorable" + desc = "" + icon_state = "bunny" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/antlers + name = "antlers" + desc = "" + icon_state = "antlers" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/antlers_e + name = "antlers with ears" + desc = "" + icon_state = "cow-nohorns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "antlers_mark" + +/datum/sprite_accessory/ears/smallantlers + name = "small antlers" + desc = "" + icon_state = "smallantlers" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/smallantlers_e + name = "small antlers with ears" + desc = "" + icon_state = "smallantlers" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "deer" + +/datum/sprite_accessory/ears/deer + name = "deer ears" + desc = "" + icon_state = "deer" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/cow + name = "cow, horns" + desc = "" + icon_state = "cow" + +/datum/sprite_accessory/ears/cowc + name = "cow, horns, colorable" + desc = "" + icon_state = "cow-c" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/cow_nohorns + name = "cow, no horns" + desc = "" + icon_state = "cow-nohorns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/caprahorns + name = "caprine horns" + desc = "" + icon_state = "caprahorns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/otie + name = "otie, colorable" + desc = "" + icon_state = "otie" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "otie-inner" + +/datum/sprite_accessory/ears/donkey + name = "donkey, colorable" + desc = "" + icon_state = "donkey" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "otie-inner" + +/datum/sprite_accessory/ears/zears + name = "jagged ears" + desc = "" + icon_state = "zears" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/elfs + name = "elven ears" + desc = "" + icon_state = "elfs" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + + species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/ears/sleek + name = "sleek ears" + desc = "" + icon_state = "sleek" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/drake + name = "drake frills" + desc = "" + icon_state = "drake" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/vulp + name = "vulpkanin, dual-color" + desc = "" + icon_state = "vulp" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "vulp-inner" + +/datum/sprite_accessory/ears/vulp_short + name = "vulpkanin short" + desc = "" + icon_state = "vulp_terrier" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/vulp_short_dc + name = "vulpkanin short, dual-color" + desc = "" + icon_state = "vulp_terrier" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "vulp_terrier-inner" + +/datum/sprite_accessory/ears/vulp_jackal + name = "vulpkanin thin, dual-color" + desc = "" + icon_state = "vulp_jackal" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "vulp_jackal-inner" + +/datum/sprite_accessory/ears/bunny_floppy + name = "floopy bunny ears (colorable)" + desc = "" + icon_state = "floppy_bun" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/teshari + name = "Teshari (colorable fluff)" + desc = "" + icon_state = "teshari" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshariinner" + species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/ears/tesharihigh + name = "Teshari upper ears (colorable fluff)" + desc = "" + icon_state = "tesharihigh" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "tesharihighinner" + species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/ears/tesharilow + name = "Teshari lower ears (colorable fluff)" + desc = "" + icon_state = "tesharilow" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "tesharilowinner" + species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/ears/inkling + name = "colorable mature inkling hair" + desc = "" + icon = 'icons/mob/human_face_alt.dmi' + icon_state = "inkling-colorable" + color_blend_mode = ICON_MULTIPLY + do_colouration = 1 + +/datum/sprite_accessory/ears/large_dragon + name = "Large dragon horns" + desc = "" + icon_state = "big_liz" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +// Special snowflake ears go below here. +/datum/sprite_accessory/ears/elf_caprine_colorable + name = "Caprine horns with pointy ears, colorable" + desc = "" + icon_state = "elfs" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "caprahorns" + +/datum/sprite_accessory/ears/elf_oni_colorable + name = "oni horns with pointy ears, colorable" + desc = "" + icon_state = "elfs" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "oni-h1_c" + +/datum/sprite_accessory/ears/elf_demon_colorable + name = "Demon horns with pointy ears, colorable" + desc = "" + icon_state = "elfs" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "demon-horns1_c" + +/datum/sprite_accessory/ears/elf_demon_outwards_colorable + name = "Demon horns with pointy ears, outwards, colourable" + desc = "" + icon_state = "elfs" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "demon-horns2" + +/datum/sprite_accessory/ears/elf_dragon_colorable + name = "Dragon horns with pointy ears, colourable" + desc = "" + icon_state = "elfs" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "dragon-horns" \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_extra.dm b/code/modules/mob/new_player/sprite_accessories_extra.dm new file mode 100644 index 00000000000..a124eff96b0 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_extra.dm @@ -0,0 +1,566 @@ +/datum/sprite_accessory/marking/vr + icon = 'icons/mob/human_races/markings_alt.dmi' + + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/marking/vr/vulp_belly + name = "belly fur (Vulp)" + icon_state = "vulp_belly" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO,BP_GROIN) + +/datum/sprite_accessory/marking/vr/vulp_fullbelly + name = "full belly fur (Vulp)" + icon_state = "vulp_fullbelly" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO,BP_GROIN) + +/datum/sprite_accessory/marking/vr/vulp_crest + name = "belly crest (Vulp)" + icon_state = "vulp_crest" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO,BP_GROIN) + +/datum/sprite_accessory/marking/vr/vulp_nose + name = "nose (Vulp)" + icon_state = "vulp_nose" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/vulp_short_nose + name = "nose, short (Vulp)" + icon_state = "vulp_short_nose" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/snoutstripe + name = "snout stripe (Vulp)" + icon_state = "snoutstripe" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/vulp_face + name = "face (Vulp)" + icon_state = "vulp_face" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/vulp_facealt + name = "face, alt. (Vulp)" + icon_state = "vulp_facealt" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/vulp_earsface + name = "ears and face (Vulp)" + icon_state = "vulp_earsface" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/vulp_all + name = "all head highlights (Vulp)" + icon_state = "vulp_all" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/sergal_full + name = "Sergal Markings" + icon_state = "sergal_full" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) + species_allowed = list("Sergal") + +/datum/sprite_accessory/marking/vr/sergal_full_female + name = "Sergal Markings (Female)" + icon_state = "sergal_full_female" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) + species_allowed = list("Sergal") + +/datum/sprite_accessory/marking/vr/monoeye + name = "Monoeye" + icon_state = "monoeye" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/spidereyes + name = "Spider Eyes" + icon_state = "spidereyes" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/sergaleyes + name = "Sergal Eyes" + icon_state = "eyes_sergal" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/brows + name = "Eyebrows" + icon_state = "brows" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/nevrean_female + name = "Female Nevrean beak" + icon_state = "nevrean_f" + body_parts = list(BP_HEAD) + color_blend_mode = ICON_MULTIPLY + gender = FEMALE + +/datum/sprite_accessory/marking/vr/nevrean_male + name = "Male Nevrean beak" + icon_state = "nevrean_m" + body_parts = list(BP_HEAD) + color_blend_mode = ICON_MULTIPLY + gender = MALE + +/datum/sprite_accessory/marking/vr/spots + name = "Spots" + icon_state = "spots" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) + +/datum/sprite_accessory/marking/vr/shaggy_mane + name = "Shaggy mane/feathers" + icon_state = "shaggy" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/vr/jagged_teeth + name = "Jagged teeth" + icon_state = "jagged" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/blank_face + name = "Blank round face (use with monster mouth)" + icon_state = "blankface" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/monster_mouth + name = "Monster mouth" + icon_state = "monster" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/saber_teeth + name = "Saber teeth" + icon_state = "saber" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/fangs + name = "Fangs" + icon_state = "fangs" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/tusks + name = "Tusks" + icon_state = "tusks" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/otie_face + name = "Otie face" + icon_state = "otieface" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/otie_nose + name = "Otie nose" + icon_state = "otie_nose" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/otienose_lite + name = "Short otie nose" + icon_state = "otienose_lite" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/backstripes + name = "Back stripes" + icon_state = "otiestripes" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO,BP_HEAD) + +/datum/sprite_accessory/marking/vr/belly_butt + name = "Belly and butt" + icon_state = "bellyandbutt" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_GROIN,BP_TORSO) + +/datum/sprite_accessory/marking/vr/fingers_toes + name = "Fingers and toes" + icon_state = "fingerstoes" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND) + +/datum/sprite_accessory/marking/vr/otie_socks + name = "Fingerless socks" + icon_state = "otiesocks" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + +/datum/sprite_accessory/marking/vr/corvid_beak + name = "Corvid beak" + icon_state = "corvidbeak" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/corvid_belly + name = "Corvid belly" + icon_state = "corvidbelly" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_GROIN,BP_TORSO,BP_HEAD) + +/datum/sprite_accessory/marking/vr/cow_body + name = "Cow markings" + icon_state = "cowbody" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) + +/datum/sprite_accessory/marking/vr/cow_nose + name = "Cow nose" + icon_state = "cownose" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/zmask + name = "Eye mask" + icon_state = "zmask" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/zbody + name = "Thick jagged stripes" + icon_state = "zbody" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG,BP_R_LEG,BP_GROIN,BP_TORSO) + +/datum/sprite_accessory/marking/vr/znose + name = "Jagged snout" + icon_state = "znose" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/otter_nose + name = "Otter nose" + icon_state = "otternose" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/otter_face + name = "Otter face" + icon_state = "otterface" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/deer_face + name = "Deer face" + icon_state = "deerface" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/sharkface + name = "Akula snout" + icon_state = "sharkface" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/sheppy_face + name = "Shepherd snout" + icon_state = "shepface" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/sheppy_back + name = "Shepherd back" + icon_state = "shepback" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO,BP_GROIN) + +/datum/sprite_accessory/marking/vr/zorren_belly_male + name = "Zorren Male Torso" + icon_state = "zorren_belly" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO,BP_GROIN) + +/datum/sprite_accessory/marking/vr/zorren_belly_female + name = "Zorren Female Torso" + icon_state = "zorren_belly_female" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO,BP_GROIN) + +/datum/sprite_accessory/marking/vr/zorren_back_patch + name = "Zorren Back Patch" + icon_state = "zorren_backpatch" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/vr/zorren_face_male + name = "Zorren Male Face" + icon_state = "zorren_face" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + gender = MALE + +/datum/sprite_accessory/marking/vr/zorren_face_female + name = "Zorren Female Face" + icon_state = "zorren_face_female" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + gender = FEMALE + +/datum/sprite_accessory/marking/vr/zorren_muzzle_male + name = "Zorren Male Muzzle" + icon_state = "zorren_muzzle" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + gender = MALE + +/datum/sprite_accessory/marking/vr/zorren_muzzle_female + name = "Zorren Female Muzzle" + icon_state = "zorren_muzzle_female" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + gender = FEMALE + +/datum/sprite_accessory/marking/vr/zorren_socks + name = "Zorren Socks" + icon_state = "zorren_socks" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + +/datum/sprite_accessory/marking/vr/zorren_longsocks + name = "Zorren Longsocks" + icon_state = "zorren_longsocks" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + +/datum/sprite_accessory/marking/vr/tesh_feathers + name = "Teshari Feathers" + icon_state = "tesh-feathers" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND) + +/datum/sprite_accessory/marking/vr/harpy_feathers + name = "Rapala leg Feather" + icon_state = "harpy-feathers" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG,BP_R_LEG) + +/datum/sprite_accessory/marking/vr/harpy_legs + name = "Rapala leg coloring" + icon_state = "harpy-leg" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) + +/datum/sprite_accessory/marking/vr/chooves + name = "Cloven hooves" + icon_state = "chooves" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT) + +/datum/sprite_accessory/marking/vr/body_tone + name = "Body toning (for emergency contrast loss)" + icon_state = "btone" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) + +/datum/sprite_accessory/marking/vr/gloss + name = "Full body gloss" + icon_state = "gloss" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) + +/datum/sprite_accessory/marking/vr/eboop_panels + name = "Eggnerd FBP panels" + icon_state = "eboop" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) + +/datum/sprite_accessory/marking/vr/osocks_rarm + name = "Modular Longsock (right arm)" + icon_state = "osocks" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_ARM,BP_R_HAND) + +/datum/sprite_accessory/marking/vr/osocks_larm + name = "Modular Longsock (left arm)" + icon_state = "osocks" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_ARM,BP_L_HAND) + +/datum/sprite_accessory/marking/vr/osocks_rleg + name = "Modular Longsock (right leg)" + icon_state = "osocks" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_FOOT,BP_R_LEG) + +/datum/sprite_accessory/marking/vr/osocks_lleg + name = "Modular Longsock (left leg)" + icon_state = "osocks" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_L_LEG) + +/datum/sprite_accessory/marking/vr/animeeyesinner + name = "Anime Eyes Inner" + icon_state = "animeeyesinner" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/animeeyesouter + name = "Anime Eyes Outer" + icon_state = "animeeyesouter" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/panda_eye_marks + name = "Panda Eye Markings" + icon_state = "eyes_panda" + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/marking/vr/catwomantorso + name = "Catwoman chest stripes" + icon_state = "catwomanchest" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/vr/catwomangroin + name = "Catwoman groin stripes" + icon_state = "catwomangroin" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/vr/catwoman_rleg + name = "Catwoman right leg stripes" + icon_state = "catwomanright" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/vr/catwoman_lleg + name = "Catwoman left leg stripes" + icon_state = "catwomanleft" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG) + +/datum/sprite_accessory/marking/vr/teshi_small_feathers + name = "Teshari small wingfeathers" + icon_state = "teshi_sf" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND,BP_TORSO) + +/datum/sprite_accessory/marking/vr/spirit_lights + name = "Ward - Spirit FBP Lights" + icon_state = "lights" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_HEAD) + +/datum/sprite_accessory/marking/vr/spirit_lights_body + name = "Ward - Spirit FBP Lights (body)" + icon_state = "lights" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO) + +/datum/sprite_accessory/marking/vr/spirit_lights_head + name = "Ward - Spirit FBP Lights (head)" + icon_state = "lights" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/spirit_panels + name = "Ward - Spirit FBP Panels" + icon_state = "panels" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) + +/datum/sprite_accessory/marking/vr/spirit_panels_body + name = "Ward - Spirit FBP Panels (body)" + icon_state = "panels" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) + +/datum/sprite_accessory/marking/vr/spirit_panels_head + name = "Ward - Spirit FBP Panels (head)" + icon_state = "panels" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/tentacle_head + name = "Squid Head" + icon_state = "tentaclehead" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/tentacle_mouth + name = "Tentacle Mouth" + icon_state = "tentaclemouth" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/rosette + name = "Rosettes" + icon_state = "rosette" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) +/* +werewolf_nose + name = "Werewolf nose" + icon = 'icons/mob/species/werebeast/werebeast_markings.dmi' + icon_state = "werewolf_nose" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_WEREBEAST) + +werewolf_face + name = "Werewolf face" + icon = 'icons/mob/species/werebeast/werebeast_markings.dmi' + icon_state = "werewolf" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_WEREBEAST) + +werewolf_belly + name = "Werewolf belly" + icon = 'icons/mob/species/werebeast/werebeast_markings.dmi' + icon_state = "werewolf" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_GROIN,BP_TORSO) + species_allowed = list(SPECIES_WEREBEAST) + +werewolf_socks + name = "Werewolf socks" + icon = 'icons/mob/species/werebeast/werebeast_markings.dmi' + icon_state = "werewolf" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + species_allowed = list(SPECIES_WEREBEAST) + +shadekin_snoot + name = "Shadekin Snoot" + icon_state = "shadekin-snoot" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) +*/ +/datum/sprite_accessory/marking/vr/taj_nose_alt + name = "Nose Color, alt. (Taj)" + icon_state = "taj_nosealt" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/talons + name = "Talons" + icon_state = "talons" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) + +/datum/sprite_accessory/marking/vr/claws + name = "Claws" + icon_state = "claws" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_HAND,BP_R_HAND) + +/datum/sprite_accessory/marking/vr/equine_snout //Why the long face? Works best with sergal bodytype. + name = "Equine Snout" + icon_state = "donkey" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr/equine_nose + name = "Equine Nose" + icon_state = "dnose" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) diff --git a/code/modules/mob/new_player/sprite_accessories_tail.dm b/code/modules/mob/new_player/sprite_accessories_tail.dm new file mode 100644 index 00000000000..437b839f258 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_tail.dm @@ -0,0 +1,939 @@ +/* +//////////////////////////// +/ =--------------------= / +/ == Tail Definitions == / +/ =--------------------= / +//////////////////////////// +*/ +/datum/sprite_accessory/tail + name = "You should not see this..." + icon = 'icons/mob/human_races/sprite_accessories/tails.dmi' + do_colouration = 0 //Set to 1 to enable coloration using the tail color. + + color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 + var/extra_overlay // Icon state of an additional overlay to blend in. + var/show_species_tail = 0 // If false, do not render species' tail. + var/clothing_can_hide = 1 // If true, clothing with HIDETAIL hides it + var/desc = "You should not see this..." + var/ani_state // State when wagging/animated + var/extra_overlay_w // Wagging state for extra overlay + var/list/hide_body_parts = list() //Uses organ tag defines. Bodyparts in this list do not have their icons rendered, allowing for more spriter freedom when doing taur/digitigrade stuff. + var/icon/clip_mask_icon = null //Icon file used for clip mask. + var/clip_mask_state = null //Icon state to generate clip mask. Clip mask is used to 'clip' off the lower part of clothing such as jumpsuits & full suits. + var/icon/clip_mask = null //Instantiated clip mask of given icon and state + + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/tail/New() + . = ..() + if(clip_mask_icon && clip_mask_state) + clip_mask = icon(icon = clip_mask_icon, icon_state = clip_mask_state) + +// Species-unique tails + +// Everyone tails + +/datum/sprite_accessory/tail/invisible + name = "hide species-sprite tail" + icon = null + icon_state = null + + species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI, SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/tail/squirrel_orange + name = "squirel, orange" + desc = "" + icon_state = "squirrel-orange" + +/datum/sprite_accessory/tail/squirrel_red + name = "squirrel, red" + desc = "" + icon_state = "squirrel-red" + +/datum/sprite_accessory/tail/squirrel + name = "squirrel, colorable" + desc = "" + icon_state = "squirrel" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/kitty + name = "kitty, colorable, downwards" + desc = "" + icon_state = "kittydown" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/kittyup + name = "kitty, colorable, upwards" + desc = "" + icon_state = "kittyup" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/tiger_white + name = "tiger, colorable" + desc = "" + icon_state = "tiger" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "tigerinnerwhite" + +/datum/sprite_accessory/tail/stripey + name = "stripey taj, colorable" + desc = "" + icon_state = "stripeytail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "stripeytail_mark" + + species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/tail/stripeytail_brown + name = "stripey taj, brown" + desc = "" + icon_state = "stripeytail-brown" + +/datum/sprite_accessory/tail/chameleon + name = "Chameleon, colorable" + desc = "" + icon_state = "chameleon" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/bunny + name = "bunny, colorable" + desc = "" + icon_state = "bunny" + do_colouration = 1 + +/datum/sprite_accessory/tail/bear_brown + name = "bear, brown" + desc = "" + icon_state = "bear-brown" + +/datum/sprite_accessory/tail/bear + name = "bear, colorable" + desc = "" + icon_state = "bear" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/dragon + name = "dragon, colorable" + desc = "" + icon_state = "dragon" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/wolf_grey + name = "wolf, grey" + desc = "" + icon_state = "wolf-grey" + +/datum/sprite_accessory/tail/wolf_green + name = "wolf, green" + desc = "" + icon_state = "wolf-green" + +/datum/sprite_accessory/tail/wisewolf + name = "wolf, wise" + desc = "" + icon_state = "wolf-wise" + +/datum/sprite_accessory/tail/blackwolf + name = "wolf, black" + desc = "" + icon_state = "wolf" + +/datum/sprite_accessory/tail/wolf + name = "wolf, colorable" + desc = "" + icon_state = "wolf" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "wolfinner" + +/datum/sprite_accessory/tail/mouse_pink + name = "mouse, pink" + desc = "" + icon_state = "mouse-pink" + +/datum/sprite_accessory/tail/mouse + name = "mouse, colorable" + desc = "" + icon_state = "mouse" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/horse + name = "horse tail, colorable" + desc = "" + icon_state = "horse" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/cow + name = "cow tail, colorable" + desc = "" + icon_state = "cow" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/fantail + name = "avian fantail, colorable" + desc = "" + icon_state = "fantail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/wagtail + name = "avian wagtail, colorable" + desc = "" + icon_state = "wagtail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/nevreandc + name = "nevrean tail, dual-color" + desc = "" + icon_state = "nevreantail_dc" + extra_overlay = "nevreantail_dc_tail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/nevreanwagdc + name = "nevrean wagtail, dual-color" + desc = "" + icon_state = "wagtail" + extra_overlay = "wagtail_dc_tail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/nevreanwagdc_alt + name = "nevrean wagtail, marked, dual-color" + desc = "" + icon_state = "wagtail2_dc" + extra_overlay = "wagtail2_dc_mark" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/crossfox + name = "cross fox" + desc = "" + icon_state = "crossfox" + +/datum/sprite_accessory/tail/beethorax + name = "bee thorax" + desc = "" + icon_state = "beethorax" + +/datum/sprite_accessory/tail/doublekitsune + name = "double kitsune tail, colorable" + desc = "" + icon_state = "doublekitsune" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/spade_color + name = "spade-tail (colorable)" + desc = "" + icon_state = "spadetail-black" + do_colouration = 1 + +/datum/sprite_accessory/tail/snag + name = "xenomorph tail 1" + desc = "" + icon_state = "snag" + +/datum/sprite_accessory/tail/xenotail + name = "xenomorph tail 2" + desc = "" + icon_state = "xenotail" + +/datum/sprite_accessory/tail/eboop + name = "EGN mech tail (dual color)" + desc = "" + icon_state = "eboop" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "eboop_mark" + +/datum/sprite_accessory/tail/ketrai_wag + name = "fennix tail (vwag)" + desc = "" + icon_state = "ketraitail" + ani_state = "ketraitail_w" + //ckeys_allowed = list("ketrai") //They requested it to be enabled for everyone. + +/datum/sprite_accessory/tail/ketrainew_wag + name = "new fennix tail (vwag)" + desc = "" + icon_state = "ketraitailnew" + ani_state = "ketraitailnew_w" + +/datum/sprite_accessory/tail/redpanda + name = "red panda" + desc = "" + icon_state = "redpanda" + +/datum/sprite_accessory/tail/ringtail + name = "ringtail, colorable" + desc = "" + icon_state = "ringtail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "ringtail_mark" + +/datum/sprite_accessory/tail/satyr + name = "goat legs, colorable" + desc = "" + icon_state = "satyr" + color_blend_mode = ICON_MULTIPLY + do_colouration = 1 + hide_body_parts = list(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT) //Exclude pelvis just in case. + clip_mask_icon = 'icons/mob/human_races/sprite_accessories/taurs.dmi' + clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms. + +/datum/sprite_accessory/tail/tailmaw + name = "tailmaw, colorable" + desc = "" + icon_state = "tailmaw" + color_blend_mode = ICON_MULTIPLY + do_colouration = 1 + +/datum/sprite_accessory/tail/curltail + name = "curltail (vwag)" + desc = "" + icon_state = "curltail" + ani_state = "curltail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "curltail_mark" + extra_overlay_w = "curltail_mark_w" + +/datum/sprite_accessory/tail/shorttail + name = "shorttail (vwag)" + desc = "" + icon_state = "straighttail" + ani_state = "straighttail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/sneptail + name = "Snep/Furry Tail (vwag)" + desc = "" + icon_state = "sneptail" + ani_state = "sneptail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "sneptail_mark" + extra_overlay_w = "sneptail_mark_w" + + +/datum/sprite_accessory/tail/tiger_new + name = "tiger tail (vwag)" + desc = "" + icon_state = "tigertail" + ani_state = "tigertail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "tigertail_mark" + extra_overlay_w = "tigertail_mark_w" + +/datum/sprite_accessory/tail/vulp_new + name = "new vulp tail (vwag)" + desc = "" + icon_state = "vulptail" + ani_state = "vulptail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "vulptail_mark" + extra_overlay_w = "vulptail_mark_w" + +/datum/sprite_accessory/tail/otietail + name = "otie tail (vwag)" + desc = "" + icon_state = "otie" + ani_state = "otie_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/newtailmaw + name = "new tailmaw (vwag)" + desc = "" + icon_state = "newtailmaw" + ani_state = "newtailmaw_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/ztail + name = "jagged flufftail" + desc = "" + icon_state = "ztail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/snaketail + name = "snake tail, colorable" + desc = "" + icon_state = "snaketail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/vulpan_alt + name = "vulpkanin alt style, colorable" + desc = "" + icon_state = "vulptail_alt" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/sergaltaildc + name = "sergal, dual-color" + desc = "" + icon_state = "sergal" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "sergal_mark" + +/datum/sprite_accessory/tail/skunktail + name = "skunk, dual-color" + desc = "" + icon_state = "skunktail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "skunktail_mark" + +/datum/sprite_accessory/tail/deertail + name = "deer, dual-color" + desc = "" + icon_state = "deertail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "deertail_mark" + +/datum/sprite_accessory/tail/teshari_fluffytail + name = "Teshari alternative, colorable" + desc = "" + icon_state = "teshari_fluffytail" + extra_overlay = "teshari_fluffytail_mark" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/tail/nightstalker + name = "Nightstalker, colorable" + desc = "" + icon_state = "nightstalker" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +//For all species tails. Includes haircolored tails. +/datum/sprite_accessory/tail/special + name = "Blank tail. Do not select." + icon = 'icons/effects/species_tails.dmi' + +/datum/sprite_accessory/tail/special/unathi + name = "unathi tail" + desc = "" + icon_state = "sogtail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + + species_allowed = list(SPECIES_UNATHI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/tail/special/tajaran + name = "tajaran tail" + desc = "" + icon_state = "tajtail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/tail/special/sergal + name = "sergal tail" + desc = "" + icon_state = "sergtail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/akula + name = "akula tail" + desc = "" + icon_state = "sharktail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/nevrean + name = "nevrean tail" + desc = "" + icon_state = "nevreantail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/armalis + name = "armalis tail" + desc = "" + icon_state = "armalis_tail_humanoid_s" + +/datum/sprite_accessory/tail/special/xenodrone + name = "xenomorph drone tail" + desc = "" + icon_state = "xenos_drone_tail_s" + +/datum/sprite_accessory/tail/special/xenosentinel + name = "xenomorph sentinel tail" + desc = "" + icon_state = "xenos_sentinel_tail_s" + +/datum/sprite_accessory/tail/special/xenohunter + name = "xenomorph hunter tail" + desc = "" + icon_state = "xenos_hunter_tail_s" + +/datum/sprite_accessory/tail/special/xenoqueen + name = "xenomorph queen tail" + desc = "" + icon_state = "xenos_queen_tail_s" + +/datum/sprite_accessory/tail/special/monkey + name = "monkey tail" + desc = "" + icon_state = "chimptail_s" + +/datum/sprite_accessory/tail/special/seromitail + name = "seromi tail" + desc = "" + icon_state = "seromitail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/tail/special/seromitailfeathered + name = "seromi tail w/ feathers" + desc = "" + icon_state = "seromitail_s" + extra_overlay = "seromitail_feathers_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/tail/special/unathihc + name = "unathi tail, colorable" + desc = "" + icon_state = "sogtail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_UNATHI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/tail/special/tajaranhc + name = "tajaran tail, colorable" + desc = "" + icon_state = "tajtail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/tail/special/sergalhc + name = "sergal tail, colorable" + desc = "" + icon_state = "sergtail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/akulahc + name = "akula tail, colorable" + desc = "" + icon_state = "sharktail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/nevreanhc + name = "nevrean tail, colorable" + desc = "" + icon_state = "nevreantail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/foxhc + name = "highlander zorren tail, colorable" + desc = "" + icon_state = "foxtail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/fennechc + name = "flatland zorren tail, colorable" + desc = "" + icon_state = "fentail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/armalishc + name = "armalis tail, colorable" + desc = "" + icon_state = "armalis_tail_humanoid_hc_s" + do_colouration = 1 + +/datum/sprite_accessory/tail/special/xenodronehc + name = "xenomorph drone tail, colorable" + desc = "" + icon_state = "xenos_drone_tail_hc_s" + do_colouration = 1 + +/datum/sprite_accessory/tail/special/xenosentinelhc + name = "xenomorph sentinel tail, colorable" + desc = "" + icon_state = "xenos_sentinel_tail_hc_s" + do_colouration = 1 + +/datum/sprite_accessory/tail/special/xenohunterhc + name = "xenomorph hunter tail, colorable" + desc = "" + icon_state = "xenos_hunter_tail_hc_s" + do_colouration = 1 + +/datum/sprite_accessory/tail/special/xenoqueenhc + name = "xenomorph queen tail, colorable" + desc = "" + icon_state = "xenos_queen_tail_hc_s" + do_colouration = 1 + +/datum/sprite_accessory/tail/special/monkeyhc + name = "monkey tail, colorable" + desc = "" + icon_state = "chimptail_hc_s" + do_colouration = 1 + +/datum/sprite_accessory/tail/special/seromitailhc + name = "seromi tail, colorable" + desc = "" + icon_state = "seromitail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/seromitailfeatheredhc + name = "seromi tail w/ feathers, colorable" + desc = "" + icon_state = "seromitail_feathers_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/vulpan + name = "vulpkanin, colorable" + desc = "" + icon_state = "vulptail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + + +/datum/sprite_accessory/tail/zenghu_taj + name = "Zeng-Hu Tajaran Synth tail" + desc = "" + icon_state = "zenghu_taj" + +//Taurs moved to a separate file due to extra code around them + +//Buggo Abdomens! + +/datum/sprite_accessory/tail/buggo + name = "Bug abdomen, colorable" + desc = "" + icon_state = "buggo_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggobee + name = "Bug abdomen, bee top, dual-colorable" + desc = "" + icon_state = "buggo_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobee_markings" + +/datum/sprite_accessory/tail/buggobeefull + name = "Bug abdomen, bee full, dual-colorable" + desc = "" + icon_state = "buggo_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobeefull_markings" + +/datum/sprite_accessory/tail/buggounder + name = "Bug abdomen, underside, dual-colorable" + desc = "" + icon_state = "buggo_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggounder_markings" + +/datum/sprite_accessory/tail/buggofirefly + name = "Bug abdomen, firefly, dual-colorable" + desc = "" + icon_state = "buggo_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofirefly_markings" + +/datum/sprite_accessory/tail/buggofat + name = "Fat bug abdomen, colorable" + desc = "" + icon_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggofatbee + name = "Fat bug abdomen, bee top, dual-colorable" + desc = "" + icon_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatbee_markings" + +/datum/sprite_accessory/tail/buggofatbeefull + name = "Fat bug abdomen, bee full, dual-colorable" + desc = "" + icon_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatbeefull_markings" + +/datum/sprite_accessory/tail/buggofatunder + name = "Fat bug abdomen, underside, dual-colorable" + desc = "" + icon_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatunder_markings" + +/datum/sprite_accessory/tail/buggofatfirefly + name = "Fat bug abdomen, firefly, dual-colorable" + desc = "" + icon_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatfirefly_markings" + +/datum/sprite_accessory/tail/buggowag + name = "Bug abdomen, colorable, vwag change" + desc = "" + icon_state = "buggo_s" + ani_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggobeewag + name = "Bug abdomen, bee top, dual color, vwag" + desc = "" + icon_state = "buggo_s" + ani_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobee_markings" + extra_overlay_w = "buggofatbee_markings" + +/datum/sprite_accessory/tail/buggobeefullwag + name = "Bug abdomen, bee full, dual color, vwag" + desc = "" + icon_state = "buggo_s" + ani_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobeefull_markings" + extra_overlay_w = "buggofatbeefull_markings" + +/datum/sprite_accessory/tail/buggounderwag + name = "Bug abdomen, underside, dual color, vwag" + desc = "" + icon_state = "buggo_s" + ani_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggounder_markings" + extra_overlay_w = "buggofatunder_markings" + +/datum/sprite_accessory/tail/buggofireflywag + name = "Bug abdomen, firefly, dual color, vwag" + desc = "" + icon_state = "buggo_s" + ani_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofirefly_markings" + extra_overlay_w = "buggofatfirefly_markings" + +//Vass buggo variants! + +/datum/sprite_accessory/tail/buggovass + name = "Bug abdomen, vass, colorable" + desc = "" + icon_state = "buggo_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggovassbee + name = "Bug abdomen, bee top, dc, vass" + desc = "" + icon_state = "buggo_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobee_vass_markings" + +/datum/sprite_accessory/tail/buggovassbeefull + name = "Bug abdomen, bee full, dc, vass" + desc = "" + icon_state = "buggo_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobeefull_vass_markings" + +/datum/sprite_accessory/tail/buggovassunder + name = "Bug abdomen, underside, dc, vass" + desc = "" + icon_state = "buggo_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggounder_vass_markings" + +/datum/sprite_accessory/tail/buggovassfirefly + name = "Bug abdomen, firefly, dc, vass" + desc = "" + icon_state = "buggo_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofirefly_vass_markings" + +/datum/sprite_accessory/tail/buggovassfat + name = "Fat bug abdomen, vass, colorable" + desc = "" + icon_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggovassfatbee + name = "Fat bug abdomen, bee top, dc, vass" + desc = "" + icon_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatbee_vass_markings" + +/datum/sprite_accessory/tail/buggovassfatbeefull + name = "Fat bug abdomen, bee full, dc, vass" + desc = "" + icon_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatbeefull_vass_markings" + +/datum/sprite_accessory/tail/buggovassfatunder + name = "Fat bug abdomen, underside, dc, vass" + desc = "" + icon_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatunder_vass_markings" + +/datum/sprite_accessory/tail/buggovassfatfirefly + name = "Fat bug abdomen, firefly, dc, vass" + desc = "" + icon_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatfirefly_vass_markings" + +/datum/sprite_accessory/tail/buggovasswag + name = "Bug abdomen, vass, colorable, vwag change" + desc = "" + icon_state = "buggo_vass_s" + ani_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggovassbeewag + name = "Bug abdomen, bee top, dc, vass, vwag" + desc = "" + icon_state = "buggo_vass_s" + ani_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobee_vass_markings" + extra_overlay_w = "buggofatbee_vass_markings" + +/datum/sprite_accessory/tail/buggovassbeefullwag + name = "Bug abdomen, bee full, dc, vass, vwag" + desc = "" + icon_state = "buggo_vass_s" + ani_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobeefull_vass_markings" + extra_overlay_w = "buggofatbeefull_vass_markings" + +/datum/sprite_accessory/tail/buggovassunderwag + name = "Bug abdomen, underside, dc, vass, vwag" + desc = "" + icon_state = "buggo_vass_s" + ani_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggounder_vass_markings" + extra_overlay_w = "buggofatunder_vass_markings" + +/datum/sprite_accessory/tail/buggovassfireflywag + name = "Bug abdomen, firefly, dc, vass, vwag" + desc = "" + icon_state = "buggo_vass_s" + ani_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofirefly_vass_markings" + extra_overlay_w = "buggofatfirefly_vass_markings" + +/datum/sprite_accessory/tail/tail_smooth + name = "Smooth Lizard Tail, colorable" + desc = "" + icon_state = "tail_smooth" + ani_state = "tail_smooth_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/triplekitsune_colorable + name = "Kitsune 3 tails, colorable" + desc = "" + icon_state = "triplekitsune" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "triplekitsune_tips" + +/datum/sprite_accessory/tail/ninekitsune_colorable + name = "Kitsune 9 tails, colorable" + desc = "" + icon_state = "ninekitsune" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "ninekitsune-tips" + +/datum/sprite_accessory/tail/shadekin_short + name = "Shadekin Short Tail, colorable" + desc = "" + icon_state = "shadekin-short" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + //apply_restrictions = TRUE + //species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) + +/datum/sprite_accessory/tail/wartacosushi_tail //brightened +20RGB from matching roboparts + name = "Ward-Takahashi Tail" + desc = "" + icon_state = "wardtakahashi_vulp" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/wartacosushi_tail_dc + name = "Ward-Takahashi Tail, dual-color" + desc = "" + icon_state = "wardtakahashi_vulp_dc" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "wardtakahashi_vulp_dc_mark" diff --git a/code/modules/mob/new_player/sprite_accessories_taur.dm b/code/modules/mob/new_player/sprite_accessories_taur.dm new file mode 100644 index 00000000000..748a6904b46 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_taur.dm @@ -0,0 +1,349 @@ +/datum/riding/taur + keytype = /obj/item/weapon/material/twohanded/riding_crop // Crack! + nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs. + key_name = "a riding crop" // What the 'keys' for the thing being rided on would be called. + only_one_driver = TRUE // If true, only the person in 'front' (first on list of riding mobs) can drive. + +/datum/riding/taur/handle_vehicle_layer() + if(ridden.has_buckled_mobs()) + ridden.layer = initial(ridden.layer) + else + var/mob/living/L = ridden + if(!(istype(L) && (L.status_flags & HIDING))) + ridden.layer = initial(ridden.layer) + +/datum/riding/taur/ride_check(mob/living/M) + var/mob/living/L = ridden + if(L.stat) + force_dismount(M) + return FALSE + return TRUE + +/datum/riding/taur/force_dismount(mob/M) + . = ..() + ridden.visible_message("[M] stops riding [ridden]!") + +//Hoooo boy. +/datum/riding/taur/get_offsets(pass_index) // list(dir = x, y, layer) + var/mob/living/L = ridden + var/scale_x = L.icon_scale_x + var/scale_y = L.icon_scale_y + + var/list/values = list( + "[NORTH]" = list(0, 8*scale_y, ABOVE_MOB_LAYER), + "[SOUTH]" = list(0, 8*scale_y, BELOW_MOB_LAYER), + "[EAST]" = list(-10*scale_x, 8*scale_y, ABOVE_MOB_LAYER), + "[WEST]" = list(10*scale_x, 8*scale_y, ABOVE_MOB_LAYER)) + + return values + +//Human overrides for taur riding +/mob/living/carbon/human + max_buckled_mobs = 1 //Yeehaw + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + +/mob/living/carbon/human/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE) + if(forced) + return ..() // Skip our checks + if(!isTaurTail(tail_style)) + return FALSE + else + var/datum/sprite_accessory/tail/taur/taurtype = tail_style + if(!taurtype.can_ride) + return FALSE + if(lying) + return FALSE + if(!ishuman(M)) + return FALSE + if(M in buckled_mobs) + return FALSE +// if(M.size_multiplier > size_multiplier * 1.2) +// to_chat(M,"This isn't a pony show! You need to be bigger for them to ride.") +// return FALSE + if(M.loc != src.loc) + if(M.Adjacent(src)) + M.forceMove(get_turf(src)) + + var/mob/living/carbon/human/H = M + + if(isTaurTail(H.tail_style)) + to_chat(src,"Too many legs. TOO MANY LEGS!!") + return FALSE + + . = ..() + if(.) + buckled_mobs[M] = "riding" + +/mob/living/carbon/human/MouseDrop_T(mob/living/M, mob/living/user) //Prevention for forced relocation caused by can_buckle. Base proc has no other use. + return + +/mob/living/carbon/human/proc/taur_mount(var/mob/living/M in living_mobs(1)) + set name = "Taur Mount/Dismount" + set category = "Abilities" + set desc = "Let people ride on you." + + if(LAZYLEN(buckled_mobs)) + var/datum/riding/R = riding_datum + for(var/rider in buckled_mobs) + R.force_dismount(rider) + return + if (stat != CONSCIOUS) + return + if(!can_buckle || !istype(M) || !M.Adjacent(src) || M.buckled) + return + if(buckle_mob(M)) + visible_message("[M] starts riding [name]!") + +/mob/living/carbon/human/attack_hand(mob/user as mob) + if(LAZYLEN(buckled_mobs)) + //We're getting off! + if(user in buckled_mobs) + riding_datum.force_dismount(user) + //We're kicking everyone off! + if(user == src) + for(var/rider in buckled_mobs) + riding_datum.force_dismount(rider) + else + . = ..() + +/* +//////////////////////////// +/ =--------------------= / +/ == Taur Definitions == / +/ =--------------------= / +//////////////////////////// +*/ + +// Taur sprites are now a subtype of tail since they are mutually exclusive anyway. + +/datum/sprite_accessory/tail/taur + name = "You should not see this..." + icon = 'icons/mob/human_races/sprite_accessories/taurs.dmi' + do_colouration = 1 // Yes color, using tail color + color_blend_mode = ICON_MULTIPLY // The sprites for taurs are designed for ICON_MULTIPLY + + var/icon/suit_sprites = null //File for suit sprites, if any. + var/icon/under_sprites = null + + var/icon_sprite_tag // This is where we put stuff like _Horse, so we can assign icons easier. + + var/can_ride = FALSE //whether we're real rideable taur or just in that category. + + hide_body_parts = list(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT) //Exclude pelvis just in case. + clip_mask_icon = 'icons/mob/human_races/sprite_accessories/taurs.dmi' + clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms. + +// Species-unique long tails/taurhalves + +// Tails/taurhalves for everyone + +/datum/sprite_accessory/tail/taur/wolf + name = "Wolf (Taur)" + icon_state = "wolf_s" + under_sprites = 'icons/mob/taursuits_wolf.dmi' + suit_sprites = 'icons/mob/taursuits_wolf.dmi' + icon_sprite_tag = "wolf" + +//TFF 22/11/19 - CHOMPStation port of fat taur sprites +/datum/sprite_accessory/tail/taur/fatwolf + name = "Fat Wolf (Taur)" + icon_state = "fatwolf_s" + icon_sprite_tag = "wolf" //This could be modified later. + +/datum/sprite_accessory/tail/taur/wolf/wolf_2c + name = "Wolf dual-color (Taur)" + icon_state = "wolf_s" + extra_overlay = "wolf_markings" + //icon_sprite_tag = "wolf2c" + +//TFF 22/11/19 - CHOMPStation port of fat taur sprites +/datum/sprite_accessory/tail/taur/wolf/fatwolf_2c + name = "Fat Wolf dual-color (Taur)" + icon_state = "fatwolf_s" + extra_overlay = "fatwolf_markings" + //icon_sprite_tag = "fatwolf2c" + +/datum/sprite_accessory/tail/taur/wolf/synthwolf + name = "SynthWolf dual-color (Taur)" + icon_state = "synthwolf_s" + extra_overlay = "synthwolf_markings" + //icon_sprite_tag = "synthwolf" + +/datum/sprite_accessory/tail/taur/naga + name = "Naga (Taur)" + icon_state = "naga_s" + suit_sprites = 'icons/mob/taursuits_naga.dmi' + //icon_sprite_tag = "naga" + +/datum/sprite_accessory/tail/taur/naga/naga_2c + name = "Naga dual-color (Taur)" + icon_state = "naga_s" + extra_overlay = "naga_markings" + //icon_sprite_tag = "naga2c" + +/datum/sprite_accessory/tail/taur/horse + name = "Horse (Taur)" + icon_state = "horse_s" + under_sprites = 'icons/mob/taursuits_horse.dmi' + suit_sprites = 'icons/mob/taursuits_horse.dmi' + icon_sprite_tag = "horse" + +/datum/sprite_accessory/tail/taur/horse/synthhorse + name = "SynthHorse dual-color (Taur)" + icon_state = "synthhorse_s" + extra_overlay = "synthhorse_markings" + //icon_sprite_tag = "synthhorse" + +/datum/sprite_accessory/tail/taur/cow + name = "Cow (Taur)" + icon_state = "cow_s" + suit_sprites = 'icons/mob/taursuits_cow.dmi' + icon_sprite_tag = "cow" + +/datum/sprite_accessory/tail/taur/deer + name = "Deer dual-color (Taur)" + icon_state = "deer_s" + extra_overlay = "deer_markings" + suit_sprites = 'icons/mob/taursuits_deer.dmi' + icon_sprite_tag = "deer" + +/datum/sprite_accessory/tail/taur/lizard + name = "Lizard (Taur)" + icon_state = "lizard_s" + suit_sprites = 'icons/mob/taursuits_lizard.dmi' + icon_sprite_tag = "lizard" + +/datum/sprite_accessory/tail/taur/lizard/lizard_2c + name = "Lizard dual-color (Taur)" + icon_state = "lizard_s" + extra_overlay = "lizard_markings" + //icon_sprite_tag = "lizard2c" + +/datum/sprite_accessory/tail/taur/lizard/synthlizard + name = "SynthLizard dual-color (Taur)" + icon_state = "synthlizard_s" + extra_overlay = "synthlizard_markings" + //icon_sprite_tag = "synthlizard" + +/datum/sprite_accessory/tail/taur/spider + name = "Spider (Taur)" + icon_state = "spider_s" + suit_sprites = 'icons/mob/taursuits_spider.dmi' + icon_sprite_tag = "spider" + +/datum/sprite_accessory/tail/taur/tents + name = "Tentacles (Taur)" + icon_state = "tent_s" + icon_sprite_tag = "tentacle" + can_ride = 0 + +/datum/sprite_accessory/tail/taur/feline + name = "Feline (Taur)" + icon_state = "feline_s" + suit_sprites = 'icons/mob/taursuits_feline.dmi' + icon_sprite_tag = "feline" + +//TFF 22/11/19 - CHOMPStation port of fat taur sprites +/datum/sprite_accessory/tail/taur/fatfeline + name = "Fat Feline (Taur)" + icon_state = "fatfeline_s" + //icon_sprite_tag = "fatfeline" + +/datum/sprite_accessory/tail/taur/fatfeline_wag + name = "Fat Feline (Taur) (vwag)" + icon_state = "fatfeline_s" + ani_state = "fatfeline_w" + +/datum/sprite_accessory/tail/taur/feline/feline_2c + name = "Feline dual-color (Taur)" + icon_state = "feline_s" + extra_overlay = "feline_markings" + //icon_sprite_tag = "feline2c" + +//TFF 22/11/19 - CHOMPStation port of fat taur sprites +/datum/sprite_accessory/tail/taur/feline/fatfeline_2c + name = "Fat Feline dual-color (Taur)" + icon_state = "fatfeline_s" + extra_overlay = "fatfeline_markings" + //icon_sprite_tag = "fatfeline2c" + +/datum/sprite_accessory/tail/taur/feline/synthfeline + name = "SynthFeline dual-color (Taur)" + icon_state = "synthfeline_s" + extra_overlay = "synthfeline_markings" + //icon_sprite_tag = "synthfeline" + +/datum/sprite_accessory/tail/taur/slug + name = "Slug (Taur)" + icon_state = "slug_s" + suit_sprites = 'icons/mob/taursuits_slug.dmi' + icon_sprite_tag = "slug" + +/datum/sprite_accessory/tail/taur/frog + name = "Frog (Taur)" + icon_state = "frog_s" + icon_sprite_tag = "frog" + +/datum/sprite_accessory/tail/taur/thicktentacles + name = "Thick Tentacles (Taur)" + icon_state = "tentacle_s" + can_ride = 0 + icon_sprite_tag = "thick_tentacles" + +/datum/sprite_accessory/tail/taur/drake //Enabling on request, no suit compatibility but then again see 2 above. + name = "Drake (Taur)" + icon_state = "drake_s" + extra_overlay = "drake_markings" + suit_sprites = 'icons/mob/taursuits_drake.dmi' + icon_sprite_tag = "drake" + +/datum/sprite_accessory/tail/taur/otie + name = "Otie (Taur)" + icon_state = "otie_s" + extra_overlay = "otie_markings" + suit_sprites = 'icons/mob/taursuits_otie.dmi' + icon_sprite_tag = "otie" + +/datum/sprite_accessory/tail/taur/alraune/alraune_2c + name = "Alraune (dual color)" + icon_state = "alraunecolor_s" + ani_state = "alraunecolor_closed_s" + ckeys_allowed = null + do_colouration = 1 + extra_overlay = "alraunecolor_markings" + extra_overlay_w = "alraunecolor_closed_markings" + clip_mask_state = "taur_clip_mask_alraune" + icon_sprite_tag = "alraune" + +/datum/sprite_accessory/tail/taur/wasp + name = "Wasp (dual color)" + icon_state = "wasp_s" + extra_overlay = "wasp_markings" + clip_mask_state = "taur_clip_mask_wasp" + icon_sprite_tag = "wasp" + +/datum/sprite_accessory/tail/taur/mermaid + name = "Mermaid (Taur)" + icon_state = "mermaid_s" + can_ride = 0 + icon_sprite_tag = "mermaid" + +/datum/sprite_accessory/tail/taur/shadekin_tail + name = "Shadekin Tail" + icon_state = "shadekin_s" + can_ride = 0 + hide_body_parts = null + clip_mask_icon = null + clip_mask_state = null + //apply_restrictions = TRUE + //species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) + +/datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_2c + name = "Shadekin Tail (dual color)" + extra_overlay = "shadekin_markings" + +/datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_long + name = "Shadekin Long Tail" + icon_state = "shadekin_long_s" diff --git a/code/modules/mob/new_player/sprite_accessories_wing.dm b/code/modules/mob/new_player/sprite_accessories_wing.dm new file mode 100644 index 00000000000..3b65639298c --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_wing.dm @@ -0,0 +1,150 @@ +/* +//////////////////////////// +/ =--------------------= / +/ == Wing Definitions == / +/ =--------------------= / +//////////////////////////// +*/ +/datum/sprite_accessory/wing + name = "You should not see this..." + icon = 'icons/mob/human_races/sprite_accessories/wings.dmi' + do_colouration = 0 //Set to 1 to enable coloration using the tail color. + + color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 + var/extra_overlay // Icon state of an additional overlay to blend in. + var/clothing_can_hide = 1 // If true, clothing with HIDETAIL hides it. If the clothing is bulky enough to hide a tail, it should also hide wings. + // var/show_species_tail = 1 // Just so // TODO - Seems not needed ~Leshana + var/desc = "You should not see this..." + var/ani_state // State when flapping/animated + var/extra_overlay_w // Flapping state for extra overlay + + species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/wing/featheredlarge //Made by Natje! + name = "large feathered wings (colorable)" + desc = "" + icon_state = "feathered2" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/spider_legs //Not really /WINGS/ but they protrude from the back, kinda. Might as well have them here. + name = "spider legs" + desc = "" + icon_state = "spider-legs" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/moth + name = "moth wings" + desc = "" + icon_state = "moth" + +/datum/sprite_accessory/wing/mothc + name = "moth wings, colorable" + desc = "" + icon_state = "moth" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/dragonfly + name = "dragonfly" + desc = "" + icon_state = "dragonfly" + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/feathered + name = "feathered wings, colorable" + desc = "" + icon_state = "feathered" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/feathered_medium + name = "medium feathered wings, colorable" // Keekenox made these feathery things with a little bit more shape to them than the other wings. They are medium sized wing boys. + desc = "" + icon_state = "feathered3" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/bat_black + name = "bat wings, black" + desc = "" + icon_state = "bat-black" + +/datum/sprite_accessory/wing/bat_color + name = "bat wings, colorable" + desc = "" + icon_state = "bat-color" + do_colouration = 1 + +/datum/sprite_accessory/wing/bat_red + name = "bat wings, red" + desc = "" + icon_state = "bat-red" + +/datum/sprite_accessory/wing/harpywings + name = "harpy wings, colorable" + desc = "" + icon_state = "harpywings" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/feathered + name = "feathered wings, colorable" + desc = "" + icon_state = "feathered" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/beewings + name = "bee wings" + desc = "" + icon_state = "beewings" + +/datum/sprite_accessory/wing/liquidfirefly_gazer //I g-guess this could be considered wings? + name = "gazer eyestalks" + desc = "" + icon_state = "liquidfirefly-eyestalks" + //ckeys_allowed = list("liquidfirefly","seiga") //At request. + +/datum/sprite_accessory/wing/moth_full + name = "moth antenna and wings" + desc = "" + icon_state = "moth_full" + +/datum/sprite_accessory/wing/moth_full_gray + name = "moth antenna and wings, colorable" + desc = "" + icon_state = "moth_full_gray" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/snag + name = "xenomorph backplate" + desc = "" + icon_state = "snag-backplate" + +/datum/sprite_accessory/wing/sepulchre_c_yw + name = "demon wings (colorable)" + desc = "" + icon_state = "sepulchre_wingsc" + do_colouration = 1 + +/datum/sprite_accessory/wing/cyberdragon + name = "Cyber dragon wing (colorable)" + desc = "" + icon_state = "cyberdragon_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/cyberdragon_red + name = "Cyber dragon wing (red)" + desc = "" + icon_state = "cyberdragon_red_s" + do_colouration = 0 + +/datum/sprite_accessory/wing/cyberdoe + name = "Cyber doe wing" + desc = "" + icon_state = "cyberdoe_s" + do_colouration = 0 diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index c9617afe11b..d732a971a68 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -29,6 +29,7 @@ // Appearance vars. var/nonsolid // Snowflake warning, reee. Used for slime limbs. + var/transparent // As above, so below. Used for transparent limbs. var/icon_name = null // Icon state base. var/body_part = null // Part flag var/icon_position = 0 // Used in mob overlay layering calculations. @@ -1389,5 +1390,14 @@ Note that amputating the affected organ does in fact remove the infection from t . = 0 for(var/obj/item/organ/external/L in organs) for(var/obj/item/I in L.implants) +<<<<<<< HEAD if(!istype(I,/obj/item/weapon/implant) && !istype(I,/obj/item/device/nif)) //VOREStation Add - NIFs - return 1 \ No newline at end of file + return 1 +======= + if(!istype(I,/obj/item/weapon/implant)) + return 1 + +/obj/item/organ/external/proc/is_hidden_by_tail() + if(owner && owner.tail_style && owner.tail_style.hide_body_parts && (organ_tag in owner.tail_style.hide_body_parts)) + return 1 +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697) diff --git a/code/modules/organs/robolimbs_custom.dm b/code/modules/organs/robolimbs_custom.dm new file mode 100644 index 00000000000..15df0c98c86 --- /dev/null +++ b/code/modules/organs/robolimbs_custom.dm @@ -0,0 +1,175 @@ +/datum/robolimb + var/includes_tail //Cyberlimbs dmi includes a tail sprite to wear. + var/includes_wing //Cyberlimbs dmi includes a wing sprite to wear. + var/list/whitelisted_to //List of ckeys that are allowed to pick this in charsetup. + +//////////////// For-specific-character fluff ones ///////////////// May be viable to place these into a custom_item subfolder, in order to allow CI Repo integration. + +// verkister : Rahwoof Boop +/datum/robolimb/eggnerdltd + company = "Eggnerd Prototyping Ltd." + desc = "This limb has a slight salvaged handicraft vibe to it. The CE-marking on it is definitely not the standardized one, it looks more like a hand-written sharpie monogram." + icon = 'icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi' + blood_color = "#5e280d" + includes_tail = 1 + unavailable_to_build = 1 + +/obj/item/weapon/disk/limb/eggnerdltd + company = "Eggnerd Prototyping Ltd." +// icon = 'icons/obj/items_vr.dmi' +// icon_state = "verkdisk" + +//////////////// General VS-only ones ///////////////// +/datum/robolimb/talon //They're buildable by default due to being extremely basic. + company = "Talon LLC" + desc = "This metallic limb is sleek and featuresless apart from some exposed motors" + icon = 'icons/mob/human_races/cyberlimbs/talon/talon_main.dmi' //Sprited by: Viveret + +/obj/item/weapon/disk/limb/talon + company = "Talon LLC" + +/datum/robolimb/zenghu_taj //This wasn't indented. At all. It's a miracle this didn't break literally everything. + company = "Zeng-Hu - Tajaran" + desc = "This limb has a rubbery fleshtone covering with visible seams." + icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_taj.dmi' + unavailable_to_build = 1 + parts = list(BP_HEAD) + +/datum/robolimb/eggnerdltdred + company = "Eggnerd Prototyping Ltd. (Red)" + desc = "A slightly more refined limb variant from Eggnerd Prototyping. Its got red plating instead of orange." + icon = 'icons/mob/human_races/cyberlimbs/rahboopred/rahboopred.dmi' + blood_color = "#5e280d" + includes_tail = 1 + unavailable_to_build = 1 + +/obj/item/weapon/disk/limb/eggnerdltdred + company = "Eggnerd Prototyping Ltd. (Red)" +// icon = 'icons/obj/items_vr.dmi' +// icon_state = "verkdisk" + + +//Darkside Incorperated synthetic augmentation list! Many current most used fuzzy and notsofuzzy races made into synths here. + +/datum/robolimb/dsi_tajaran + company = "DSI - Tajaran" + desc = "This limb feels soft and fluffy, realistic design and squish. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSITajaran/dsi_tajaran.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Tajara" + +/datum/robolimb/dsi_tajaran/New() + species_cannot_use = GLOB.all_species.Copy() +// species_cannot_use -= SPECIES_TAJ + +/obj/item/weapon/disk/limb/dsi_tajaran + company = "DSI - Tajaran" + +/datum/robolimb/dsi_lizard + company = "DSI - Lizard" + desc = "This limb feels smooth and scalie, realistic design and squish. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSILizard/dsi_lizard.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Unathi" + +/datum/robolimb/dsi_lizard/New() + species_cannot_use = GLOB.all_species.Copy() +// species_cannot_use -= SPECIES_UNATHI + +/obj/item/weapon/disk/limb/dsi_lizard + company = "DSI - Lizard" +/* +/datum/robolimb/dsi_sergal + company = "DSI - Sergal" + desc = "This limb feels soft and fluffy, realistic design and toned muscle. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSISergal/dsi_sergal.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Sergal" + +/obj/item/weapon/disk/limb/dsi_sergal + company = "DSI - Sergal" + +/datum/robolimb/dsi_nevrean + company = "DSI - Nevrean" + desc = "This limb feels soft and feathery, lightweight, realistic design and squish. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSINevrean/dsi_nevrean.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Nevrean" + +/obj/item/weapon/disk/limb/dsi_nevrean + company = "DSI - Nevrean" + +/datum/robolimb/dsi_vulpkanin + company = "DSI - Vulpkanin" + desc = "This limb feels soft and fluffy, realistic design and squish. Seems a little mischievous. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSIVulpkanin/dsi_vulpkanin.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Vulpkanin" + +/obj/item/weapon/disk/limb/dsi_vulpkanin + company = "DSI - Vulpkanin" + +/datum/robolimb/dsi_akula + company = "DSI - Akula" + desc = "This limb feels soft and fleshy, realistic design and squish. Seems a little mischievous. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSIAkula/dsi_akula.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Akula" + +/obj/item/weapon/disk/limb/dsi_akula + company = "DSI - Akula" + +/datum/robolimb/dsi_spider + company = "DSI - Vasilissan" + desc = "This limb feels hard and chitinous, realistic design. Seems a little mischievous. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSISpider/dsi_spider.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Vasilissan" + +/obj/item/weapon/disk/limb/dsi_spider + company = "DSI - Vasilissan" +*/ +/datum/robolimb/dsi_teshari + company = "DSI - Teshari" + desc = "This limb has a thin synthflesh casing with a few connection ports." + icon = 'icons/mob/human_races/cyberlimbs/DSITeshari/dsi_teshari.dmi' + lifelike = 1 + skin_tone = 1 + suggested_species = "Teshari" + +/datum/robolimb/dsi_teshari/New() + species_cannot_use = GLOB.all_species.Copy() +// species_cannot_use -= SPECIES_TESHARI +// species_cannot_use -= SPECIES_CUSTOM + ..() + +/obj/item/weapon/disk/limb/dsi_teshari + company = "DSI - Teshari" diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm index 1ebd92106c1..617442014eb 100644 --- a/code/modules/organs/subtypes/standard.dm +++ b/code/modules/organs/subtypes/standard.dm @@ -266,6 +266,8 @@ encased = "skull" base_miss_chance = 40 var/can_intake_reagents = 1 + var/eye_icons = 'icons/mob/human_face_alt.dmi' + var/head_offset = 0 var/eye_icon = "eyes_s" force = 3 throwforce = 7 @@ -323,6 +325,54 @@ "You make \the [I] kiss \the [src]!.") return ..() +/obj/item/organ/external/head/get_icon() + ..() + overlays.Cut() + if(!owner || !owner.species) + return + + for(var/M in markings) + var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"] + var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]") + mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) + overlays |= mark_s //So when it's not on your body, it has icons + mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons + icon_cache_key += "[M][markings[M]["color"]]" + + if(owner.should_have_organ(O_EYES))//Moved on top of markings. + var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[O_EYES] + if(eye_icon) + var/icon/eyes_icon = new/icon(eye_icons, eye_icon) + if(eyes) + if(owner.species.appearance_flags & HAS_EYE_COLOR) + eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) + else + eyes_icon.Blend(rgb(128,0,0), ICON_ADD) + mob_icon.Blend(eyes_icon, ICON_OVERLAY) + overlays |= eyes_icon + + if(owner.lip_style && (species && (species.appearance_flags & HAS_LIPS))) + var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s") + overlays |= lip_icon + mob_icon.Blend(lip_icon, ICON_OVERLAY) + + if(owner.f_style) + var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style] + if(facial_hair_style && facial_hair_style.species_allowed && (species.get_bodytype(owner) in facial_hair_style.species_allowed)) + var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") + if(facial_hair_style.do_colouration) + facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD) + overlays |= image(facial_s, "pixel_y" = head_offset) + + if(owner.h_style && !(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR))) + var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style] + if(hair_style && (species.get_bodytype(owner) in hair_style.species_allowed)) + var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") + if(hair_style.do_colouration && islist(h_col) && h_col.len >= 3) + hair_s.Blend(rgb(h_col[1], h_col[2], h_col[3]), ICON_MULTIPLY) + overlays |= image(hair_s, "pixel_y" = head_offset) + return mob_icon + /obj/item/organ/external/head/skrell eye_icon = "skrell_eyes_s" diff --git a/icons/effects/species_tails.dmi b/icons/effects/species_tails.dmi new file mode 100644 index 00000000000..5fea0671c65 Binary files /dev/null and b/icons/effects/species_tails.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 1e6b13982a9..08a1880b3b2 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/human_face_alt.dmi b/icons/mob/human_face_alt.dmi new file mode 100644 index 00000000000..6d02bc14bf3 Binary files /dev/null and b/icons/mob/human_face_alt.dmi differ diff --git a/icons/mob/human_face_alt_add.dmi b/icons/mob/human_face_alt_add.dmi new file mode 100644 index 00000000000..9007a281f59 Binary files /dev/null and b/icons/mob/human_face_alt_add.dmi differ diff --git a/icons/mob/human_face_m.dmi b/icons/mob/human_face_m.dmi index b2a245ad878..3de6a43895f 100644 Binary files a/icons/mob/human_face_m.dmi and b/icons/mob/human_face_m.dmi differ diff --git a/icons/mob/human_face_or_alt.dmi b/icons/mob/human_face_or_alt.dmi new file mode 100644 index 00000000000..920f63cf09a Binary files /dev/null and b/icons/mob/human_face_or_alt.dmi differ diff --git a/icons/mob/human_races/markings_alt.dmi b/icons/mob/human_races/markings_alt.dmi new file mode 100644 index 00000000000..e9fcad5e631 Binary files /dev/null and b/icons/mob/human_races/markings_alt.dmi differ diff --git a/icons/mob/human_races/sprite_accessories/ears.dmi b/icons/mob/human_races/sprite_accessories/ears.dmi new file mode 100644 index 00000000000..243b901e8ed Binary files /dev/null and b/icons/mob/human_races/sprite_accessories/ears.dmi differ diff --git a/icons/mob/human_races/sprite_accessories/tails.dmi b/icons/mob/human_races/sprite_accessories/tails.dmi new file mode 100644 index 00000000000..5e4a27597f4 Binary files /dev/null and b/icons/mob/human_races/sprite_accessories/tails.dmi differ diff --git a/icons/mob/human_races/sprite_accessories/taurs.dmi b/icons/mob/human_races/sprite_accessories/taurs.dmi new file mode 100644 index 00000000000..69d0a913880 Binary files /dev/null and b/icons/mob/human_races/sprite_accessories/taurs.dmi differ diff --git a/icons/mob/human_races/sprite_accessories/wings.dmi b/icons/mob/human_races/sprite_accessories/wings.dmi new file mode 100644 index 00000000000..2042d667f20 Binary files /dev/null and b/icons/mob/human_races/sprite_accessories/wings.dmi differ diff --git a/icons/mob/items/lefthand_material.dmi b/icons/mob/items/lefthand_material.dmi index a2f035cd582..7fbcc1131ff 100644 Binary files a/icons/mob/items/lefthand_material.dmi and b/icons/mob/items/lefthand_material.dmi differ diff --git a/icons/mob/items/righthand_material.dmi b/icons/mob/items/righthand_material.dmi index 6895183a5b4..ac51aa86f14 100644 Binary files a/icons/mob/items/righthand_material.dmi and b/icons/mob/items/righthand_material.dmi differ diff --git a/icons/mob/limb_mask.dmi b/icons/mob/limb_mask.dmi index ba4d0e34566..4d83672aa46 100644 Binary files a/icons/mob/limb_mask.dmi and b/icons/mob/limb_mask.dmi differ diff --git a/icons/mob/mecha.dmi b/icons/mob/mecha.dmi index a6d3b13773e..975e46371d6 100644 Binary files a/icons/mob/mecha.dmi and b/icons/mob/mecha.dmi differ diff --git a/icons/mob/taursuits_cow.dmi b/icons/mob/taursuits_cow.dmi new file mode 100644 index 00000000000..ce592d5edb9 Binary files /dev/null and b/icons/mob/taursuits_cow.dmi differ diff --git a/icons/mob/taursuits_deer.dmi b/icons/mob/taursuits_deer.dmi new file mode 100644 index 00000000000..6c53a6f4d09 Binary files /dev/null and b/icons/mob/taursuits_deer.dmi differ diff --git a/icons/mob/taursuits_drake.dmi b/icons/mob/taursuits_drake.dmi new file mode 100644 index 00000000000..ca0db57532f Binary files /dev/null and b/icons/mob/taursuits_drake.dmi differ diff --git a/icons/mob/taursuits_feline.dmi b/icons/mob/taursuits_feline.dmi new file mode 100644 index 00000000000..1d4c597e02d Binary files /dev/null and b/icons/mob/taursuits_feline.dmi differ diff --git a/icons/mob/taursuits_horse.dmi b/icons/mob/taursuits_horse.dmi new file mode 100644 index 00000000000..4162463c69b Binary files /dev/null and b/icons/mob/taursuits_horse.dmi differ diff --git a/icons/mob/taursuits_lizard.dmi b/icons/mob/taursuits_lizard.dmi new file mode 100644 index 00000000000..a6b9858f177 Binary files /dev/null and b/icons/mob/taursuits_lizard.dmi differ diff --git a/icons/mob/taursuits_naga.dmi b/icons/mob/taursuits_naga.dmi new file mode 100644 index 00000000000..7df326318cf Binary files /dev/null and b/icons/mob/taursuits_naga.dmi differ diff --git a/icons/mob/taursuits_otie.dmi b/icons/mob/taursuits_otie.dmi new file mode 100644 index 00000000000..06e083854ea Binary files /dev/null and b/icons/mob/taursuits_otie.dmi differ diff --git a/icons/mob/taursuits_slug.dmi b/icons/mob/taursuits_slug.dmi new file mode 100644 index 00000000000..98692375f3f Binary files /dev/null and b/icons/mob/taursuits_slug.dmi differ diff --git a/icons/mob/taursuits_spider.dmi b/icons/mob/taursuits_spider.dmi new file mode 100644 index 00000000000..b8090eceaa0 Binary files /dev/null and b/icons/mob/taursuits_spider.dmi differ diff --git a/icons/mob/taursuits_wolf.dmi b/icons/mob/taursuits_wolf.dmi new file mode 100644 index 00000000000..0f638ea6d38 Binary files /dev/null and b/icons/mob/taursuits_wolf.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index dae925d5d95..1e84aa1e6d6 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/vorestation.dme b/vorestation.dme index d1458a7ded3..d5a74448fa3 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2496,6 +2496,7 @@ #include "code\modules\mob\living\login.dm" #include "code\modules\mob\living\logout.dm" #include "code\modules\mob\living\organs.dm" +#include "code\modules\mob\living\riding.dm" #include "code\modules\mob\living\say.dm" #include "code\modules\mob\living\status_indicators.dm" #include "code\modules\mob\living\bot\bot.dm" @@ -2922,7 +2923,15 @@ #include "code\modules\mob\new_player\preferences_setup_vr.dm" #include "code\modules\mob\new_player\skill.dm" #include "code\modules\mob\new_player\sprite_accessories.dm" +<<<<<<< HEAD:vorestation.dme #include "code\modules\mob\new_player\sprite_accessories_vr.dm" +======= +#include "code\modules\mob\new_player\sprite_accessories_ear.dm" +#include "code\modules\mob\new_player\sprite_accessories_extra.dm" +#include "code\modules\mob\new_player\sprite_accessories_tail.dm" +#include "code\modules\mob\new_player\sprite_accessories_taur.dm" +#include "code\modules\mob\new_player\sprite_accessories_wing.dm" +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697):polaris.dme #include "code\modules\modular_computers\laptop_vendor.dm" #include "code\modules\modular_computers\computers\modular_computer\core.dm" #include "code\modules\modular_computers\computers\modular_computer\damage.dm" @@ -3022,7 +3031,11 @@ #include "code\modules\organs\organ_stump.dm" #include "code\modules\organs\pain.dm" #include "code\modules\organs\robolimbs.dm" +<<<<<<< HEAD:vorestation.dme #include "code\modules\organs\robolimbs_vr.dm" +======= +#include "code\modules\organs\robolimbs_custom.dm" +>>>>>>> 576d065... Kaleidoscope 2: The Retabbening (#7697):polaris.dme #include "code\modules\organs\wound.dm" #include "code\modules\organs\internal\appendix.dm" #include "code\modules\organs\internal\augment.dm"