Merge pull request #9808 from Incoming5643/march_of_the_snowflakes

WJohn's Hyper Customizable Lizard Sprites
This commit is contained in:
Cheridan
2015-06-14 17:40:20 -05:00
28 changed files with 517 additions and 76 deletions
+1 -1
View File
@@ -298,7 +298,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
//DNA
if(record_found)//Pull up their name from database records if they did have a mind.
hardset_dna(new_character, record_found.fields["identity"], record_found.fields["enzymes"], record_found.fields["name"], record_found.fields["blood_type"], record_found.fields["species"], record_found.fields["mcolor"])
hardset_dna(new_character, record_found.fields["identity"], record_found.fields["enzymes"], record_found.fields["name"], record_found.fields["blood_type"], record_found.fields["species"], record_found.fields["features"])
else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile.
ready_dna(new_character)
+100 -9
View File
@@ -61,7 +61,8 @@ 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/mutant_color = "FFF" //Mutant race skin color
var/list/features = list("mcolor" = "FFF", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity")
//Mob preview
@@ -243,7 +244,61 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
dat += "<h3>Alien Color</h3>"
dat += "<span style='border: 1px solid #161616; background-color: #[mutant_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=mutant_color;task=input'>Change</a><BR>"
dat += "<span style='border: 1px solid #161616; background-color: #[features["mcolor"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=mutant_color;task=input'>Change</a><BR>"
dat += "</td>"
if("tail" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Tail</h3>"
dat += "<a href='?_src_=prefs;preference=tail;task=input'>[features["tail"]]</a><BR>"
dat += "</td>"
if("snout" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Snout</h3>"
dat += "<a href='?_src_=prefs;preference=snout;task=input'>[features["snout"]]</a><BR>"
dat += "</td>"
if("horns" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Horns</h3>"
dat += "<a href='?_src_=prefs;preference=horns;task=input'>[features["horns"]]</a><BR>"
dat += "</td>"
if("frills" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Frills</h3>"
dat += "<a href='?_src_=prefs;preference=frills;task=input'>[features["frills"]]</a><BR>"
dat += "</td>"
if("spines" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Spines</h3>"
dat += "<a href='?_src_=prefs;preference=spines;task=input'>[features["spines"]]</a><BR>"
dat += "</td>"
if("body_markings" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Body Markings</h3>"
dat += "<a href='?_src_=prefs;preference=body_markings;task=input'>[features["body_markings"]]</a><BR>"
dat += "</td>"
@@ -736,19 +791,54 @@ 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(mutant_color == "#000")
mutant_color = pref_species.default_color
if(features["mcolor"] == "#000")
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
if(new_mutantcolor)
var/temp_hsv = RGBtoHSV(new_mutantcolor)
if(new_mutantcolor == "#000000")
mutant_color = pref_species.default_color
features["mcolor"] = pref_species.default_color
else if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright
mutant_color = sanitize_hexcolor(new_mutantcolor)
features["mcolor"] = sanitize_hexcolor(new_mutantcolor)
else
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
if("tail")
var/new_tail
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list
if(new_tail)
features["tail"] = new_tail
if("snout")
var/new_snout
new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in snouts_list
if(new_snout)
features["snout"] = new_snout
if("horns")
var/new_horns
new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in horns_list
if(new_horns)
features["horns"] = new_horns
if("frills")
var/new_frills
new_frills = input(user, "Choose your character's frills:", "Character Preference") as null|anything in frills_list
if(new_frills)
features["frills"] = new_frills
if("spines")
var/new_spines
new_spines = input(user, "Choose your character's spines:", "Character Preference") as null|anything in spines_list
if(new_spines)
features["spines"] = new_spines
if("body_markings")
var/new_body_markings
new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in body_markings_list
if(new_body_markings)
features["body_markings"] = new_body_markings
if("s_tone")
var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in skin_tones
@@ -919,10 +1009,9 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
if(character.dna)
character.dna.real_name = character.real_name
if(pref_species != /datum/species/human && config.mutant_races)
hardset_dna(character, null, null, null, null, pref_species.type)
hardset_dna(character, null, null, null, null, pref_species.type, features)
else
hardset_dna(character, null, null, null, null, /datum/species/human)
character.dna.mutant_color = mutant_color
hardset_dna(character, null, null, null, null, /datum/species/human, features)
character.update_mutcolor()
character.gender = gender
@@ -940,6 +1029,8 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
character.undershirt = undershirt
character.socks = socks
character.features = features
if(backbag > 3 || backbag < 1)
backbag = 1 //Same as above
character.backbag = backbag
+13 -7
View File
@@ -166,8 +166,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
else
pref_species = new /datum/species/human()
if(!S["mutant_color"] || S["mutant_color"] == "#000")
S["mutant_color"] << "#FFF"
if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000")
S["features["mcolor"]"] << "#FFF"
//Character
S["OOC_Notes"] >> metadata
@@ -186,7 +186,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["undershirt"] >> undershirt
S["socks"] >> socks
S["backbag"] >> backbag
S["mutant_color"] >> mutant_color
S["features"] >> features
S["clown_name"] >> custom_names["clown"]
S["mime_name"] >> custom_names["mime"]
S["ai_name"] >> custom_names["ai"]
@@ -213,8 +213,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Sanitize
metadata = sanitize_text(metadata, initial(metadata))
real_name = reject_bad_name(real_name)
if(!mutant_color || mutant_color == "#000")
mutant_color = "#FFF"
if(!features["mcolor"] || features["mcolor"] == "#000")
features["mcolor"] = "#FFF"
if(!real_name) real_name = random_name(gender)
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
@@ -238,7 +238,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
eye_color = sanitize_hexcolor(eye_color, 3, 0)
skin_tone = sanitize_inlist(skin_tone, skin_tones)
backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag))
mutant_color = sanitize_hexcolor(mutant_color, 3, 0)
features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0)
features["tail"] = sanitize_inlist(features["tail"], tails_list)
features["snout"] = sanitize_inlist(features["snout"], snouts_list)
features["horns"] = sanitize_inlist(features["horns"], horns_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)
userandomjob = sanitize_integer(userandomjob, 0, 1, initial(userandomjob))
job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
@@ -279,7 +285,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["socks"] << socks
S["backbag"] << backbag
S["species"] << pref_species.name
S["mutant_color"] << mutant_color
S["features"] << features
S["clown_name"] << custom_names["clown"]
S["mime_name"] << custom_names["mime"]
S["ai_name"] << custom_names["ai"]
+3 -3
View File
@@ -863,9 +863,9 @@
podman.ckey = ckey_holder
podman.gender = blood_gender
podman.faction |= factions
if(!mutant_color)
mutant_color = "#59CE00"
hardset_dna(podman,null,null,podman.real_name,blood_type,/datum/species/plant/pod,mutant_color)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman
if(!features["mcolor"])
features["mcolor"] = "#59CE00"
hardset_dna(podman,null,null,podman.real_name,blood_type,/datum/species/plant/pod,features)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman
podman.set_cloned_appearance()
else //else, one packet of seeds. maybe two
+2 -2
View File
@@ -90,7 +90,7 @@
var/datum/mind/mind = null
var/blood_gender = null
var/blood_type = null
var/mutant_color = null
var/list/features = null
var/factions = null
var/contains_sample = 0
@@ -104,7 +104,7 @@
realName = bloodSample.data["real_name"]
blood_gender = bloodSample.data["gender"]
blood_type = bloodSample.data["blood_type"]
mutant_color = bloodSample.data["mutant_color"]
features = bloodSample.data["features"]
factions = bloodSample.data["factions"]
W.reagents.clear_reagents()
user << "<span class='notice'>You inject the contents of the syringe into the seeds.</span>"
@@ -9,6 +9,9 @@
var/obj/item/handcuffed = null //Whether or not the mob is handcuffed
var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this.
var/list/features = list("mcolor" = "FFF", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
//inventory slots
var/obj/item/back = null
var/obj/item/clothing/mask/wear_mask = null
@@ -30,7 +30,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
/mob/living/carbon/human/proc/fixblood()
for(var/datum/reagent/blood/B in vessel.reagent_list)
if(B.id == "blood")
B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.blood_type,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"mutant_color"=null, "factions"=null)
B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.blood_type,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"features"=null, "factions"=null)
/mob/living/carbon/human/proc/suppress_bloodloss(var/amount)
if(bleedsuppress)
@@ -172,7 +172,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
B.data["blood_type"] = copytext(src.dna.blood_type,1,0)
B.data["gender"] = src.gender
B.data["real_name"] = src.real_name
B.data["mutant_color"] = src.dna.mutant_color
B.data["features"] = src.dna.features
B.data["factions"] = src.faction
return B
@@ -355,7 +355,9 @@
return
if("tail" in dna.species.mutant_bodyparts)
dna.species.mutant_bodyparts -= "tail"
dna.species.mutant_bodyparts -= "spines"
dna.species.mutant_bodyparts |= "waggingtail"
dna.species.mutant_bodyparts |= "waggingspines"
update_body()
@@ -364,5 +366,8 @@
return
if("waggingtail" in dna.species.mutant_bodyparts)
dna.species.mutant_bodyparts -= "waggingtail"
dna.species.mutant_bodyparts -= "waggingspines"
dna.species.mutant_bodyparts |= "tail"
dna.species.mutant_bodyparts |= "spines"
update_body()
+53 -11
View File
@@ -113,7 +113,7 @@
spec_base = image("icon" = 'icons/mob/human.dmi', "icon_state" = icon_state_string, "layer" = -SPECIES_LAYER)
spec_base.color = "#[H.dna.mutant_color]"
spec_base.color = "#[H.dna.features["mcolor"]]"
standing = spec_base
if(standing)
@@ -136,7 +136,7 @@
if(hair_color)
if(hair_color == "mutcolor")
img_facial_s.color = "#" + H.dna.mutant_color
img_facial_s.color = "#" + H.dna.features["mcolor"]
else
img_facial_s.color = "#" + hair_color
else
@@ -164,7 +164,7 @@
if(hair_color)
if(hair_color == "mutcolor")
img_hair_s.color = "#" + H.dna.mutant_color
img_hair_s.color = "#" + H.dna.features["mcolor"]
else
img_hair_s.color = "#" + hair_color
else
@@ -240,33 +240,75 @@
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "tail"
if("waggingtail" 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"
if("spines" in mutant_bodyparts)
if(!H.dna.features["spines"] || H.dna.features["spines"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "spines"
if("waggingspines" in mutant_bodyparts)
if(!H.dna.features["spines"] || H.dna.features["spines"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "waggingspines"
else if ("tail" in mutant_bodyparts)
bodyparts_to_add -= "waggingspines"
if("snout" in mutant_bodyparts) //Take a closer look at that snout!
if(H.wear_mask && (H.wear_mask.flags_inv & HIDEFACE))
bodyparts_to_add -= "snout"
if("frills" in mutant_bodyparts)
if(!H.dna.features["frills"] || H.dna.features["frills"] == "None" || H.head && (H.head.flags_inv & HIDEEARS))
bodyparts_to_add -= "frills"
if("horns" in mutant_bodyparts)
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(!bodyparts_to_add)
return
var/icon_state_string = "[id]_"
var/g = (H.gender == FEMALE) ? "f" : "m"
var/image/I
if(sexes)
icon_state_string += "[g]_s"
else
icon_state_string += "_s"
var/image/I
for(var/layer in relevent_layers)
for(var/bodypart in bodyparts_to_add)
I = image("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = "[icon_state_string]_[bodypart]_[layer]", "layer" =- layer)
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("spines")
S = spines_list[H.dna.features["spines"]]
if("waggingspines")
S.= animated_spines_list[H.dna.features["spines"]]
if("snout")
S = snouts_list[H.dna.features["snout"]]
if("frills")
S = frills_list[H.dna.features["frills"]]
if("horns")
S = horns_list[H.dna.features["horns"]]
if("body_markings")
S = body_markings_list[H.dna.features["body_markings"]]
if(!S || S.icon_state == "none")
continue
var/icon_string
if(S.gender_specific)
icon_string = "[id]_[g]_[bodypart]_[S.icon_state]_[layer]"
else
icon_string = "[id]_m_[bodypart]_[S.icon_state]_[layer]"
I = image("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = icon_string, "layer" =- layer)
if(!(H.disabilities & HUSK))
I.color = "#[H.dna.mutant_color]"
I.color = "#[H.dna.features["mcolor"]]"
standing += I
H.overlays_standing[layer] = standing.Copy()
standing = list()
@@ -30,7 +30,7 @@
default_color = "00FF00"
roundstart = 1
specflags = list(MUTCOLORS,EYECOLOR,LIPS)
mutant_bodyparts = list("tail", "snout")
mutant_bodyparts = list("tail", "snout", "spines", "horns", "frills", "body_markings")
attack_verb = "slash"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
@@ -14,8 +14,10 @@
hair_color = random_short_color()
facial_hair_color = hair_color
eye_color = random_eye_color()
pref_species = new /datum/species/human()
if(!pref_species)
pref_species = new /datum/species/human()
backbag = 2
features = random_features()
age = rand(AGE_MIN,AGE_MAX)
/datum/preferences/proc/update_preview_icon() //seriously. This is horrendous.
@@ -45,24 +47,9 @@
preview_icon = new /icon('icons/mob/human.dmi', "[skin_tone]_[g]_s")
else
preview_icon = new /icon('icons/mob/human.dmi', "[pref_species.id]_[g]_s")
preview_icon.Blend("#[mutant_color]", ICON_MULTIPLY)
preview_icon.Blend("#[features["mcolor"]]", ICON_MULTIPLY)
var/datum/sprite_accessory/S
if(underwear)
S = underwear_list[underwear]
if(S)
preview_icon.Blend(new /icon(S.icon, "[S.icon_state]_s"), ICON_OVERLAY)
if(undershirt)
S = undershirt_list[undershirt]
if(S)
preview_icon.Blend(new /icon(S.icon, "[S.icon_state]_s"), ICON_OVERLAY)
if(socks)
S = socks_list[socks]
if(S)
preview_icon.Blend(new /icon(S.icon, "[S.icon_state]_s"), ICON_OVERLAY)
var/icon/eyes_s = new/icon()
if(EYECOLOR in pref_species.specflags)
eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "[pref_species.eyes]_s")
@@ -90,10 +77,47 @@
for(var/layer in relevent_layers)
for(var/bodypart in pref_species.mutant_bodyparts)
var/icon/part = new/icon("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = "[icon_state_string]_[bodypart]_[layer]")
part.Blend("#[mutant_color]", ICON_MULTIPLY)
switch(bodypart)
if("tail")
S = tails_list[features["tail"]]
if("spines")
S = spines_list[features["spines"]]
if("snout")
S = snouts_list[features["snout"]]
if("frills")
S = frills_list[features["frills"]]
if("horns")
S = horns_list[features["horns"]]
if("body_markings")
S = body_markings_list[features["body_markings"]]
if(!S || S.icon_state == "none")
continue
var/icon_string
if(S.gender_specific)
icon_string = "[pref_species.id]_[g]_[bodypart]_[S.icon_state]_[layer]"
else
icon_string = "[pref_species.id]_m_[bodypart]_[S.icon_state]_[layer]"
var/icon/part = new/icon("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = icon_string)
part.Blend("#[features["mcolor"]]", ICON_MULTIPLY)
preview_icon.Blend(part, ICON_OVERLAY)
if(underwear)
S = underwear_list[underwear]
if(S)
preview_icon.Blend(new /icon(S.icon, "[S.icon_state]_s"), ICON_OVERLAY)
if(undershirt)
S = undershirt_list[undershirt]
if(S)
preview_icon.Blend(new /icon(S.icon, "[S.icon_state]_s"), ICON_OVERLAY)
if(socks)
S = socks_list[socks]
if(S)
preview_icon.Blend(new /icon(S.icon, "[S.icon_state]_s"), ICON_OVERLAY)
var/icon/clothes_s = null
if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high'
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
@@ -41,6 +41,7 @@
var/icon_state //the icon_state of the accessory
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
//////////////////////
// Hair Definitions //
@@ -1046,3 +1047,232 @@
name = "Pantyhose"
icon_state = "pantyhose"
gender = FEMALE
//////////.//////////////////
// MutantParts Definitions //
/////////////////////////////
/datum/sprite_accessory/body_markings
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/body_markings/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/body_markings/dstripe
name = "Dark Stripe"
icon_state = "dstripe"
/datum/sprite_accessory/body_markings/lstripe
name = "Light Stripe"
icon_state = "lstripe"
/datum/sprite_accessory/body_markings/dtiger
name = "Dark Tiger Body"
icon_state = "dtiger"
/datum/sprite_accessory/body_markings/dtigerhead
name = "Dark Tiger Body + Head"
icon_state = "dtigerhead"
/datum/sprite_accessory/body_markings/ltiger
name = "Light Tiger Body"
icon_state = "ltiger"
/datum/sprite_accessory/body_markings/ltigerhead
name = "Light Tiger Body + Head"
icon_state = "ltigerhead"
/datum/sprite_accessory/body_markings/lbelly
name = "Light Belly"
icon_state = "lbelly"
gender_specific = 1
/datum/sprite_accessory/tails
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/tails_animated
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/tails/smooth
name = "Smooth"
icon_state = "smooth"
/datum/sprite_accessory/tails_animated/smooth
name = "Smooth"
icon_state = "smooth"
/datum/sprite_accessory/tails/light
name = "Light"
icon_state = "light"
/datum/sprite_accessory/tails_animated/light
name = "Light"
icon_state = "light"
/datum/sprite_accessory/tails/dstripe
name = "Dark Stripe"
icon_state = "dstripe"
/datum/sprite_accessory/tails_animated/dstripe
name = "Dark Stripe"
icon_state = "dstripe"
/datum/sprite_accessory/tails/lstripe
name = "Light Stripe"
icon_state = "lstripe"
/datum/sprite_accessory/tails_animated/lstripe
name = "Light Stripe"
icon_state = "lstripe"
/datum/sprite_accessory/tails/dtiger
name = "Dark Tiger"
icon_state = "dtiger"
/datum/sprite_accessory/tails_animated/dtiger
name = "Dark Tiger"
icon_state = "dtiger"
/datum/sprite_accessory/tails/ltiger
name = "Light Tiger"
icon_state = "ltiger"
/datum/sprite_accessory/tails_animated/ltiger
name = "Light Tiger"
icon_state = "ltiger"
/datum/sprite_accessory/tails/club
name = "Club"
icon_state = "club"
/datum/sprite_accessory/tails_animated/club
name = "Club"
icon_state = "club"
/datum/sprite_accessory/tails/aqua
name = "Aquatic"
icon_state = "aqua"
/datum/sprite_accessory/tails_animated/aqua
name = "Aquatic"
icon_state = "aqua"
/datum/sprite_accessory/snouts
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/snouts/sharp
name = "Sharp"
icon_state = "sharp"
/datum/sprite_accessory/snouts/round
name = "Round"
icon_state = "round"
/datum/sprite_accessory/snouts/sharplight
name = "Sharp + Light"
icon_state = "sharplight"
/datum/sprite_accessory/snouts/roundlight
name = "Round + Light"
icon_state = "roundlight"
/datum/sprite_accessory/horns
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/horns/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/horns/simple
name = "Simple"
icon_state = "simple"
/datum/sprite_accessory/horns/short
name = "Short"
icon_state = "short"
/datum/sprite_accessory/horns/curled
name = "Curled"
icon_state = "curled"
/datum/sprite_accessory/horns/ram
name = "Ram"
icon_state = "ram"
/datum/sprite_accessory/horns/angler
name = "Angeler"
icon_state = "angler"
/datum/sprite_accessory/frills
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/frills/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/frills/simple
name = "Simple"
icon_state = "simple"
/datum/sprite_accessory/frills/short
name = "Short"
icon_state = "short"
/datum/sprite_accessory/frills/aquatic
name = "Aquatic"
icon_state = "aqua"
/datum/sprite_accessory/spines
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/spines_animated
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/spines/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/spines_animated/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/spines/short
name = "Short"
icon_state = "short"
/datum/sprite_accessory/spines_animated/short
name = "Short"
icon_state = "short"
/datum/sprite_accessory/spines/shortmeme
name = "Short + Membrane"
icon_state = "shortmeme"
/datum/sprite_accessory/spines_animated/shortmeme
name = "Short + Membrane"
icon_state = "shortmeme"
/datum/sprite_accessory/spines/long
name = "Long"
icon_state = "long"
/datum/sprite_accessory/spines_animated/long
name = "Long"
icon_state = "long"
/datum/sprite_accessory/spines/longmeme
name = "Long + Membrane"
icon_state = "longmeme"
/datum/sprite_accessory/spines_animated/longmeme
name = "Long + Membrane"
icon_state = "longmeme"
/datum/sprite_accessory/spines/aqautic
name = "Aquatic"
icon_state = "aqua"
/datum/sprite_accessory/spines_animated/aqautic
name = "Aquatic"
icon_state = "aqua"