diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 2996b1af708..9ddae527eec 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -65,6 +65,8 @@ #define VIRUSIMMUNE 4096 #define PIERCEIMMUNE 8192 +#define MUTCOLORS_PARTSONLY 16384 //Used if we want the mutant colour to be only used by mutant bodyparts. Don't combine this with MUTCOLORS, or it will be useless. + /* These defines are used specifically with the atom/movable/languages bitmask. They are used in atom/movable/Hear() and atom/movable/say() to determine whether hearers can understand a message. diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index a80a9bb9ebd..a35db68de44 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -15,10 +15,13 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list, socks_m, socks_f) //lizard bodyparts (blizzard intensifies) init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, body_markings_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails, tails_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated, animated_tails_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, tails_list_lizard) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/lizard, animated_tails_list_lizard) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, tails_list_human) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/human, animated_tails_list_human) init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, snouts_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/horns, horns_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, ears_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, frills_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, spines_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/spines_animated, animated_spines_list) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 01f8d00be82..46a58da0fb6 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -37,12 +37,16 @@ else return pick(socks_list) /proc/random_features() - if(!tails_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails, tails_list) + if(!tails_list_human.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, tails_list_human) + if(!tails_list_lizard.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, tails_list_lizard) if(!snouts_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, snouts_list) if(!horns_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/horns, horns_list) + if(!ears_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, horns_list) if(!frills_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, frills_list) if(!spines_list.len) @@ -50,7 +54,8 @@ if(!body_markings_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, body_markings_list) - return(list("mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "tail" = pick(tails_list), "snout" = pick(snouts_list), "horns" = pick(horns_list), "frills" = pick(frills_list), "spines" = pick(spines_list), "body_markings" = pick(body_markings_list))) + //For now we will always return none for tail_human and ears. + return(list("mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "tail_lizard" = pick(tails_list_lizard), "tail_human" = "None", "snout" = pick(snouts_list), "horns" = pick(horns_list), "ears" = "None", "frills" = pick(frills_list), "spines" = pick(spines_list), "body_markings" = pick(body_markings_list))) /proc/random_hair_style(gender) switch(gender) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index c3bc1e7c1f8..752dc718e94 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -20,10 +20,13 @@ var/global/list/socks_m = list() //stores only socks name var/global/list/socks_f = list() //stores only socks name //Lizard Bits (all datum lists indexed by name) var/global/list/body_markings_list = list() -var/global/list/tails_list = list() -var/global/list/animated_tails_list = list() +var/global/list/tails_list_lizard = list() +var/global/list/tails_list_human = list() +var/global/list/animated_tails_list_lizard = list() +var/global/list/animated_tails_list_human = list() var/global/list/snouts_list = list() var/global/list/horns_list = list() +var/global/list/ears_list = list() var/global/list/frills_list = list() var/global/list/spines_list = list() var/global/list/animated_spines_list = list() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 1b737182ae9..6f800e074cd 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -61,7 +61,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set var/skin_tone = "caucasian1" //Skin color var/eye_color = "000" //Eye color var/datum/species/pref_species = new /datum/species/human() //Mutant race - var/list/features = list("mcolor" = "FFF", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None") + var/list/features = list("mcolor" = "FFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None") var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity") @@ -238,69 +238,90 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set dat += "" - if(MUTCOLORS in pref_species.specflags) + if(config.mutant_races) //We don't allow mutant bodyparts for humans either unless this is true. - dat += "" + if((MUTCOLORS in pref_species.specflags) || (MUTCOLORS_PARTSONLY in pref_species.specflags)) - dat += "

Alien Color

" + dat += "" - dat += "    Change
" + dat += "

Alien/Mutant Color

" - dat += "" + dat += "    Change
" - if("tail" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - dat += "

Tail

" + if("tail_lizard" in pref_species.mutant_bodyparts) + dat += "" - dat += "[features["tail"]]
" + dat += "

Tail

" - dat += "" + dat += "[features["tail_lizard"]]
" - if("snout" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - dat += "

Snout

" + //If someone sets more than one tail category for a species, we assume it's a bug and display only one. Hence the else if. + else if("tail_human" in pref_species.mutant_bodyparts) + dat += "" - dat += "[features["snout"]]
" + dat += "

Tail

" - dat += "" + dat += "[features["tail_human"]]
" - if("horns" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - dat += "

Horns

" + if("snout" in pref_species.mutant_bodyparts) + dat += "" - dat += "[features["horns"]]
" + dat += "

Snout

" - dat += "" + dat += "[features["snout"]]
" - if("frills" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - dat += "

Frills

" + if("horns" in pref_species.mutant_bodyparts) + dat += "" - dat += "[features["frills"]]
" + dat += "

Horns

" - dat += "" + dat += "[features["horns"]]
" - if("spines" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - dat += "

Spines

" + if("ears" in pref_species.mutant_bodyparts) + dat += "" - dat += "[features["spines"]]
" + dat += "

Ears

" - dat += "" + dat += "[features["ears"]]
" - if("body_markings" in pref_species.mutant_bodyparts) - dat += "" + dat += "" - dat += "

Body Markings

" + if("frills" in pref_species.mutant_bodyparts) + dat += "" - dat += "[features["body_markings"]]
" + dat += "

Frills

" - dat += "" + dat += "[features["frills"]]
" + + dat += "" + + if("spines" in pref_species.mutant_bodyparts) + dat += "" + + dat += "

Spines

" + + dat += "[features["spines"]]
" + + dat += "" + + if("body_markings" in pref_species.mutant_bodyparts) + dat += "" + + dat += "

Body Markings

" + + dat += "[features["body_markings"]]
" + + dat += "" dat += "" @@ -791,24 +812,32 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set if(result) var/newtype = roundstart_species[result] pref_species = new newtype() - if(features["mcolor"] == "#000") + //Now that we changed our species, we must verify that the mutant colour is still allowed. + var/temp_hsv = RGBtoHSV(features["mcolor"]) + if(features["mcolor"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.specflags) && ReadHSV(temp_hsv)[3] < ReadHSV("#7F7F7F")[3])) features["mcolor"] = pref_species.default_color - if("mutant_color") - var/new_mutantcolor = input(user, "Choose your character's alien skin color:", "Character Preference") as color|null + var/new_mutantcolor = input(user, "Choose your character's alien/mutant color:", "Character Preference") as color|null if(new_mutantcolor) var/temp_hsv = RGBtoHSV(new_mutantcolor) if(new_mutantcolor == "#000000") features["mcolor"] = pref_species.default_color - else if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright + else if(MUTCOLORS_PARTSONLY in pref_species.specflags || ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright, but only if they affect the skin features["mcolor"] = sanitize_hexcolor(new_mutantcolor) else user << "Invalid color. Your color is not bright enough." - if("tail") + + if("tail_human") var/new_tail - new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list + new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list_human if(new_tail) - features["tail"] = new_tail + features["tail_human"] = new_tail + + if("tail_lizard") + var/new_tail + new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list_lizard + if(new_tail) + features["tail_lizard"] = new_tail if("snout") var/new_snout @@ -822,6 +851,12 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set if(new_horns) features["horns"] = new_horns + if("ears") + var/new_ears + new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in ears_list + if(new_ears) + features["ears"] = new_ears + if("frills") var/new_frills new_frills = input(user, "Choose your character's frills:", "Character Preference") as null|anything in frills_list diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index a239561ede0..63b422d2212 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -187,9 +187,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["socks"] >> socks S["backbag"] >> backbag S["feature_mcolor"] >> features["mcolor"] - S["feature_lizard_tail"] >> features["tail"] + S["feature_lizard_tail"] >> features["tail_lizard"] + S["feature_human_tail"] >> features["tail_human"] S["feature_lizard_snout"] >> features["snout"] S["feature_lizard_horns"] >> features["horns"] + S["feature_human_ears"] >> features["ears"] S["feature_lizard_frills"] >> features["frills"] S["feature_lizard_spines"] >> features["spines"] S["feature_lizard_body_markings"] >> features["body_markings"] @@ -245,9 +247,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car skin_tone = sanitize_inlist(skin_tone, skin_tones) backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag)) features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0) - features["tail"] = sanitize_inlist(features["tail"], tails_list) + features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], tails_list_lizard) + features["tail_human"] = sanitize_inlist(features["tail_human"], tails_list_human) features["snout"] = sanitize_inlist(features["snout"], snouts_list) features["horns"] = sanitize_inlist(features["horns"], horns_list) + features["ears"] = sanitize_inlist(features["ears"], ears_list) features["frills"] = sanitize_inlist(features["frills"], frills_list) features["spines"] = sanitize_inlist(features["spines"], spines_list) features["body_markings"] = sanitize_inlist(features["body_markings"], body_markings_list) @@ -292,9 +296,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["backbag"] << backbag S["species"] << pref_species.name S["feature_mcolor"] << features["mcolor"] - S["feature_lizard_tail"] << features["tail"] + S["feature_lizard_tail"] << features["tail_lizard"] + S["feature_human_tail"] << features["tail_human"] S["feature_lizard_snout"] << features["snout"] S["feature_lizard_horns"] << features["horns"] + S["feature_human_ears"] << features["ears"] S["feature_lizard_frills"] << features["frills"] S["feature_lizard_spines"] << features["spines"] S["feature_lizard_body_markings"] << features["body_markings"] diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 9a718fb01bc..0c274d56ebf 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -309,12 +309,12 @@ m_type = 2 if("wag") - if(dna && dna.species && ("tail" in dna.species.mutant_bodyparts)) + if(dna && dna.species && (("tail_lizard" in dna.species.mutant_bodyparts) || ("tail_human" in dna.species.mutant_bodyparts))) message = "[src] wags \his tail." startTailWag() if("stopwag") - if(dna && dna.species && ("waggingtail" in dna.species.mutant_bodyparts)) + if(dna && dna.species && (("waggingtail_lizard" in dna.species.mutant_bodyparts) || ("waggingtail_human" in dna.species.mutant_bodyparts))) message = "[src] stops wagging \his tail." endTailWag() @@ -353,21 +353,26 @@ /mob/living/carbon/human/proc/startTailWag() if(!dna || !dna.species) return - if("tail" in dna.species.mutant_bodyparts) - dna.species.mutant_bodyparts -= "tail" + if("tail_lizard" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "tail_lizard" dna.species.mutant_bodyparts -= "spines" - dna.species.mutant_bodyparts |= "waggingtail" + dna.species.mutant_bodyparts |= "waggingtail_lizard" dna.species.mutant_bodyparts |= "waggingspines" + if("tail_human" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "tail_human" + dna.species.mutant_bodyparts |= "waggingtail_human" update_body() /mob/living/carbon/human/proc/endTailWag() if(!dna || !dna.species) return - if("waggingtail" in dna.species.mutant_bodyparts) - dna.species.mutant_bodyparts -= "waggingtail" + if("waggingtail_lizard" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "waggingtail_lizard" dna.species.mutant_bodyparts -= "waggingspines" - dna.species.mutant_bodyparts |= "tail" + dna.species.mutant_bodyparts |= "tail_lizard" dna.species.mutant_bodyparts |= "spines" - + if("waggingtail_human" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "waggingtail_human" + dna.species.mutant_bodyparts |= "tail_human" update_body() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 67caa33abac..2dff13d89cf 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -39,6 +39,7 @@ var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids var/dangerous_existence = null //A flag for transformation spells that tells them "hey if you turn a person into one of these without preperation, they'll probably die!" var/say_mod = "says" // affects the speech message + var/list/default_features = list() // Default mutant bodyparts for this species. Don't forget to set one for every mutant bodypart you allow this species to have. var/list/mutant_bodyparts = list() // Parts of the body that are diferent enough from the standard human model that they cause clipping with some equipment @@ -236,16 +237,26 @@ if(!mutant_bodyparts) return - if("tail" in mutant_bodyparts) + if("tail_lizard" in mutant_bodyparts) if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)) - bodyparts_to_add -= "tail" + bodyparts_to_add -= "tail_lizard" + + if("waggingtail_lizard" in mutant_bodyparts) + if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)) + bodyparts_to_add -= "waggingtail_lizard" + else if ("tail_lizard" in mutant_bodyparts) + bodyparts_to_add -= "waggingtail_lizard" + + if("tail_human" in mutant_bodyparts) + if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)) + bodyparts_to_add -= "tail_human" - if("waggingtail" in mutant_bodyparts) + if("waggingtail_human" in mutant_bodyparts) if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)) - bodyparts_to_add -= "waggingtail" - else if ("tail" in mutant_bodyparts) - bodyparts_to_add -= "waggingtail" + bodyparts_to_add -= "waggingtail_human" + else if ("tail_human" in mutant_bodyparts) + bodyparts_to_add -= "waggingtail_human" if("spines" in mutant_bodyparts) if(!H.dna.features["spines"] || H.dna.features["spines"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)) @@ -269,6 +280,10 @@ if(!H.dna.features["horns"] || H.dna.features["horns"] == "None" || H.head && (H.head.flags & BLOCKHAIR) || (H.wear_mask && (H.wear_mask.flags & BLOCKHAIR))) bodyparts_to_add -= "horns" + if("ears" in mutant_bodyparts) + if(!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags & BLOCKHAIR) || (H.wear_mask && (H.wear_mask.flags & BLOCKHAIR))) + bodyparts_to_add -= "ears" + if(!bodyparts_to_add) return @@ -280,10 +295,14 @@ for(var/bodypart in bodyparts_to_add) var/datum/sprite_accessory/S switch(bodypart) - if("tail") - S = tails_list[H.dna.features["tail"]] - if("waggingtail") - S.= animated_tails_list[H.dna.features["tail"]] + if("tail_lizard") + S = tails_list_lizard[H.dna.features["tail_lizard"]] + if("waggingtail_lizard") + S.= animated_tails_list_lizard[H.dna.features["tail_lizard"]] + if("tail_human") + S = tails_list_human[H.dna.features["tail_human"]] + if("waggingtail_human") + S.= animated_tails_list_human[H.dna.features["tail_human"]] if("spines") S = spines_list[H.dna.features["spines"]] if("waggingspines") @@ -294,12 +313,33 @@ S = frills_list[H.dna.features["frills"]] if("horns") S = horns_list[H.dna.features["horns"]] + if("ears") + S = ears_list[H.dna.features["ears"]] if("body_markings") S = body_markings_list[H.dna.features["body_markings"]] if(!S || S.icon_state == "none") continue + + //A little rename so we don't have to use tail_lizard or tail_human when naming the sprites. + if(bodypart == "tail_lizard" || bodypart == "tail_human") + bodypart = "tail" + else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human") + bodypart = "waggingtail" + + var/icon_string + + if(S.hasinner) + if(S.gender_specific) + icon_string = "[id]_[g]_[bodypart]inner_[S.icon_state]_[layer]" + else + icon_string = "[id]_m_[bodypart]inner_[S.icon_state]_[layer]" + + I = image("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = icon_string, "layer" =- layer) + + standing += I + if(S.gender_specific) icon_string = "[id]_[g]_[bodypart]_[S.icon_state]_[layer]" else @@ -310,6 +350,7 @@ if(!(H.disabilities & HUSK)) I.color = "#[H.dna.features["mcolor"]]" standing += I + H.overlays_standing[layer] = standing.Copy() standing = list() diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index 79f84797b28..b356e465c3b 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -5,8 +5,11 @@ /datum/species/human name = "Human" id = "human" + default_color = "FFFFFF" roundstart = 1 - specflags = list(EYECOLOR,HAIR,FACEHAIR,LIPS) + specflags = list(MUTCOLORS_PARTSONLY,EYECOLOR,HAIR,FACEHAIR,LIPS) + mutant_bodyparts = list("tail_human", "ears") + default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None") use_skintones = 1 /datum/species/human/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) @@ -18,6 +21,11 @@ H.faction |= "slime" return 1 +//Curiosity killed the cat's wagging tail. +datum/species/human/spec_death(var/gibbed, var/mob/living/carbon/human/H) + if(H) + H.endTailWag() + /* LIZARDPEOPLE */ @@ -30,7 +38,8 @@ default_color = "00FF00" roundstart = 1 specflags = list(MUTCOLORS,EYECOLOR,LIPS) - mutant_bodyparts = list("tail", "snout", "spines", "horns", "frills", "body_markings") + mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings") + default_features = list("mcolor" = "0F0", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index e28dcc3adab..a223c5f807a 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -78,8 +78,10 @@ for(var/layer in relevent_layers) for(var/bodypart in pref_species.mutant_bodyparts) switch(bodypart) - if("tail") - S = tails_list[features["tail"]] + if("tail_lizard") + S = tails_list_lizard[features["tail_lizard"]] + if("tail_human") + S = tails_list_human[features["tail_human"]] if("spines") S = spines_list[features["spines"]] if("snout") @@ -88,12 +90,23 @@ S = frills_list[features["frills"]] if("horns") S = horns_list[features["horns"]] + if("ears") + S = ears_list[features["ears"]] if("body_markings") S = body_markings_list[features["body_markings"]] if(!S || S.icon_state == "none") continue + + //A little rename so we don't have to use tail_lizard or tail_human when naming the sprites. + if(bodypart == "tail_lizard" || bodypart == "tail_human") + bodypart = "tail" + + if(S.hasinner) + preview_icon.Blend(new/icon("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = "[pref_species.id]_m_[bodypart]inner_[S.icon_state]_[layer]"), ICON_OVERLAY) + var/icon_string + if(S.gender_specific) icon_string = "[pref_species.id]_[g]_[bodypart]_[S.icon_state]_[layer]" else diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index c28d4fd705c..b823de1280c 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -42,6 +42,7 @@ var/name //the preview name of the accessory var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations var/gender_specific //Something that can be worn by either gender, but looks different on each + var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears. ////////////////////// // Hair Definitions // @@ -1094,70 +1095,86 @@ /datum/sprite_accessory/tails_animated icon = 'icons/mob/mutant_bodyparts.dmi' -/datum/sprite_accessory/tails/smooth +/datum/sprite_accessory/tails/lizard/smooth name = "Smooth" icon_state = "smooth" -/datum/sprite_accessory/tails_animated/smooth +/datum/sprite_accessory/tails_animated/lizard/smooth name = "Smooth" icon_state = "smooth" -/datum/sprite_accessory/tails/light +/datum/sprite_accessory/tails/lizard/light name = "Light" icon_state = "light" -/datum/sprite_accessory/tails_animated/light +/datum/sprite_accessory/tails_animated/lizard/light name = "Light" icon_state = "light" -/datum/sprite_accessory/tails/dstripe +/datum/sprite_accessory/tails/lizard/dstripe name = "Dark Stripe" icon_state = "dstripe" -/datum/sprite_accessory/tails_animated/dstripe +/datum/sprite_accessory/tails_animated/lizard/dstripe name = "Dark Stripe" icon_state = "dstripe" -/datum/sprite_accessory/tails/lstripe +/datum/sprite_accessory/tails/lizard/lstripe name = "Light Stripe" icon_state = "lstripe" -/datum/sprite_accessory/tails_animated/lstripe +/datum/sprite_accessory/tails_animated/lizard/lstripe name = "Light Stripe" icon_state = "lstripe" -/datum/sprite_accessory/tails/dtiger +/datum/sprite_accessory/tails/lizard/dtiger name = "Dark Tiger" icon_state = "dtiger" -/datum/sprite_accessory/tails_animated/dtiger +/datum/sprite_accessory/tails_animated/lizard/dtiger name = "Dark Tiger" icon_state = "dtiger" -/datum/sprite_accessory/tails/ltiger +/datum/sprite_accessory/tails/lizard/ltiger name = "Light Tiger" icon_state = "ltiger" -/datum/sprite_accessory/tails_animated/ltiger +/datum/sprite_accessory/tails_animated/lizard/ltiger name = "Light Tiger" icon_state = "ltiger" -/datum/sprite_accessory/tails/club +/datum/sprite_accessory/tails/lizard/club name = "Club" icon_state = "club" -/datum/sprite_accessory/tails_animated/club +/datum/sprite_accessory/tails_animated/lizard/club name = "Club" icon_state = "club" -/datum/sprite_accessory/tails/aqua +/datum/sprite_accessory/tails/lizard/aqua name = "Aquatic" icon_state = "aqua" -/datum/sprite_accessory/tails_animated/aqua +/datum/sprite_accessory/tails_animated/lizard/aqua name = "Aquatic" icon_state = "aqua" +/datum/sprite_accessory/tails/human/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/tails_animated/human/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/tails/human/longsmooth + name = "Long and Smooth" + icon_state = "longsmooth" + +/datum/sprite_accessory/tails_animated/human/longsmooth + name = "Long and Smooth" + icon_state = "longsmooth" + /datum/sprite_accessory/snouts icon = 'icons/mob/mutant_bodyparts.dmi' @@ -1204,6 +1221,15 @@ name = "Angeler" icon_state = "angler" +/datum/sprite_accessory/ears/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/ears/cat + name = "Cat" + icon_state = "cat" + hasinner = 1 + /datum/sprite_accessory/frills icon = 'icons/mob/mutant_bodyparts.dmi' diff --git a/icons/mob/mutant_bodyparts.dmi b/icons/mob/mutant_bodyparts.dmi index 94acba1cbc5..11be34ec753 100644 Binary files a/icons/mob/mutant_bodyparts.dmi and b/icons/mob/mutant_bodyparts.dmi differ