diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 4235f3e37e..e739e7ea86 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1274,24 +1274,45 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["taur"] = "None"
if("tail_human")
+ var/list/snowflake_tails_list = list("Normal" = null)
+ for(var/path in GLOB.tails_list_human)
+ var/datum/sprite_accessory/tails/human/instance = GLOB.tails_list_human[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
+ snowflake_tails_list[S.name] = path
var/new_tail
- new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.tails_list_human
+ new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in snowflake_tails_list
if(new_tail)
features["tail_human"] = new_tail
if(new_tail != "None")
features["taur"] = "None"
if("mam_tail")
+ var/list/snowflake_tails_list = list("Normal" = null)
+ for(var/path in GLOB.mam_tails_list)
+ var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
+ snowflake_tails_list[S.name] = path
var/new_tail
- new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.mam_tails_list
+ new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in snowflake_tails_list
if(new_tail)
features["mam_tail"] = new_tail
if(new_tail != "None")
features["taur"] = "None"
if("taur")
+ var/list/snowflake_taur_list = list("Normal" = null)
+ for(var/path in GLOB.taur_list)
+ var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
+ snowflake_taur_list[S.name] = path
var/new_taur
- new_taur = input(user, "Choose your character's tauric body:", "Character Preference") as null|anything in GLOB.taur_list
+ new_taur = input(user, "Choose your character's tauric body:", "Character Preference") as null|anything in snowflake_taur_list
if(new_taur)
features["taur"] = new_taur
if(new_taur != "None")
@@ -1305,8 +1326,15 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["snout"] = new_snout
if("mam_ears")
+ var/list/snowflake_ears_list = list("Normal" = null)
+ for(var/path in GLOB.mam_ears_list)
+ var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
+ snowflake_ears_list[S.name] = path
var/new_ears
- new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in GLOB.mam_ears_list
+ new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in snowflake_ears_list
if(new_ears)
features["mam_ears"] = new_ears
@@ -1317,8 +1345,15 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["horns"] = new_horns
if("ears")
+ var/list/snowflake_ears_list = list("Normal" = null)
+ for(var/path in GLOB.ears_list)
+ var/datum/sprite_accessory/ears/instance = GLOB.ears_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
+ snowflake_ears_list[S.name] = path
var/new_ears
- new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in GLOB.ears_list
+ new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in snowflake_ears_list
if(new_ears)
features["ears"] = new_ears
@@ -1353,8 +1388,15 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["body_markings"] = new_body_markings
if("mam_body_markings")
+ var/list/snowflake_markings_list = list("Normal" = null)
+ for(var/path in GLOB.mam_body_markings_list)
+ var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
+ snowflake_markings_list[S.name] = path
var/new_mam_body_markings
- new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in GLOB.mam_body_markings_list
+ new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in snowflake_markings_list
if(new_mam_body_markings)
features["mam_body_markings"] = new_mam_body_markings
diff --git a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm
index 9d1bc80094..d70116cc82 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm
@@ -5,7 +5,7 @@
var/extra2 = FALSE
var/extra2_icon = 'icons/mob/mam_bodyparts.dmi'
var/extra2_color_src = MUTCOLORS3
-// var/list/ckeys_allowed = null
+ var/list/ckeys_allowed
/* tbi eventually idk
/datum/sprite_accessory/legs/digitigrade_mam
@@ -97,6 +97,12 @@
extra = TRUE
icon = 'icons/mob/mam_bodyparts.dmi'
+//datum/sprite_accessory/ears/elf
+// name = "Elf"
+// icon_state = "elf"
+// icon = 'icons/mob/mam_bodyparts.dmi'
+// ckeys_allowed = list("atiefling")
+
/datum/sprite_accessory/ears/fennec
name = "Fennec"
icon_state = "fennec"
@@ -950,34 +956,44 @@
/datum/sprite_accessory/mam_ears/guilmon
name = "Guilmon"
icon_state = "guilmon"
- icon = 'icons/mob/mam_bodyparts.dmi'
+
+/datum/sprite_accessory/snout/guilmon
+ name = "Guilmon"
+ icon_state = "guilmon"
/datum/sprite_accessory/mam_tails/shark/datashark
name = "DataShark"
icon_state = "datashark"
color_src = 0
-// ckeys_allowed = list("rubyflamewing")
+ ckeys_allowed = list("rubyflamewing")
/datum/sprite_accessory/mam_tails_animated/shark/datashark
name = "DataShark"
icon_state = "datashark"
color_src = 0
-/*
-//Till I get my snowflake only ckey lock, these are locked-locked :D
+/datum/sprite_accessory/mam_body_markings/shark/datashark
+ name = "DataShark"
+ icon_state = "datashark"
+ color_src = MUTCOLORS2
+ ckeys_allowed = list("rubyflamewing")
+
+//Sabresune
/datum/sprite_accessory/mam_ears/sabresune
name = "sabresune"
icon_state = "sabresune"
+ hasinner = 1
extra = TRUE
extra_color_src = MUTCOLORS3
- locked = TRUE
+ ckeys_allowed = list("poojawa")
/datum/sprite_accessory/mam_tails/sabresune
name = "sabresune"
icon_state = "sabresune"
extra = TRUE
- locked = TRUE
+ ckeys_allowed = list("poojawa")
+
/datum/sprite_accessory/mam_tails_animated/sabresune
name = "sabresune"
@@ -990,5 +1006,5 @@
color_src = MUTCOLORS2
extra = FALSE
extra2 = FALSE
- locked = TRUE
-*/
+ ckeys_allowed = list("poojawa")
+
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 9b23204d98..31be31160c 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -272,7 +272,7 @@
else if(check_zone(M.zone_selected) == "head")
M.visible_message("[M] gives [src] a pat on the head to make [p_them()] feel better!", \
"You give [src] a pat on the head to make [p_them()] feel better!")
- if(dna && dna.species && (("tail_lizard" in dna.species.mutant_bodyparts) || (dna.features["tail_human"] != "None") || ("mam_tail" in dna.species.mutant_bodyparts)))
+ if(dna && dna.species && ((("tail_lizard" || "tail_human" || "mam_tail") in dna.species.mutant_bodyparts && (dna.features["tail_lizard"] || dna.features["tail_human"] || dna.features["mam_tail"])!= "None")))
emote("wag") //lewd
else
M.visible_message("[M] hugs [src] to make [p_them()] feel better!", \
diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
index 2208c5a597..da56a69040 100644
--- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
@@ -54,7 +54,7 @@
liked_food = MEAT
disliked_food = TOXIC
meat = /obj/item/reagent_containers/food/snacks/carpmeat/aquatic
-
+
/datum/species/aquatic/spec_death(gibbed, mob/living/carbon/human/H)
if(H)
H.endTailWag()
@@ -82,7 +82,6 @@
/datum/species/insect/qualifies_for_rank(rank, list/features)
return TRUE
-//HERBIVOROUS//
//Alien//
/datum/species/xeno
@@ -159,89 +158,9 @@
description = "A highly corrosive substance, it is capable of burning through most natural or man-made materials in short order."
color = "#66CC00"
toxpwr = 0
- acidpwr = 12
+ acidpwr = 12 */
-/datum/species/yautja
- name = "Yautja"
- id = "pred"
- say_mod = "clicks"
- eyes = "predeyes"
- mutant_organs = list(/obj/item/organ/tongue/yautja)
- specflags = list(EYECOLOR)
- lang_spoken = YAUTJA
- lang_understood = HUMAN|YAUTJA|ALIEN
- no_equip = list(slot_head)
- punchdamagelow = 4
- punchdamagehigh = 14
- punchstunthreshold = 13
- blacklisted = 1
- whitelist = 1
- whitelist = list("talkingcactus")
-
-/datum/outfit/yautja_basic
- name = "Yautja, Basic"
- uniform = /obj/item/clothing/under/mesh
- suit = /obj/item/clothing/suit/armor/yautja_fake
- shoes = /obj/item/clothing/shoes/yautja_fake
- mask = /obj/item/clothing/mask/gas/yautja_fake
-
-/datum/species/yautja/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE)
- var/datum/outfit/yautja_basic/O = new /datum/outfit/yautja_basic//Just basic gear. Doesn't include anything that gives any meaningful advantage.
- H.equipOutfit(O, visualsOnly)
- return 0
-
-/datum/species/octopus
- blacklisted = 1
-/datum/species/carp
- blacklisted = 1
-/datum/species/horse
- blacklisted = 1*/
-
-///////////////////
-//DONATOR SPECIES//
-///////////////////
-
-//ChronoFlux: Slimecoon
-/*
-/datum/species/jelly/slime/slimecoon
- name = "Slime Raccoon"
- id = "slimecoon"
- limbs_id = "slime"
- whitelisted = 1
- whitelist = list("chronoflux")
- blacklisted = 1
- mutant_bodyparts = list("slimecoontail", "slimecoonears", "slimecoonsnout")
- default_features = list("slimecoontail" = "Slimecoon Tail", "slimecoonears" = "Slimecoon Ears", "slimecoonsnout" = "Slimecoon Snout")*/
-
-// Fat Shark <3
-/*
-/datum/species/shark/datashark
- name = "DataShark"
- id = "datashark"
- default_color = "BCAC9B"
- species_traits = list(MUTCOLORS_PARTSONLY,EYECOLOR,LIPS,HAIR,SPECIES_ORGANIC)
- mutant_bodyparts = list("mam_tail", "mam_body_markings")
- default_features = list("mam_tail" = "datashark", "mam_body_markings" = "None")
- attack_verb = "bite"
- attack_sound = 'sound/weapons/bite.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
- whitelisted = 1
- whitelist = list("rubyflamewing")
- blacklisted = 0
- */
-
-/datum/species/guilmon
- name = "Guilmon"
- id = "guilmon"
- default_color = "4B4B4B"
- species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,SPECIES_ORGANIC)
- mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings")
- default_features = list("mcolor" = "FFF", "mcolor2" = "FFF", "mcolor3" = "FFF", "mam_tail" = "guilmon", "mam_ears" = "guilmon", "mam_body_markings" = "guilmon")
- attack_verb = "claw"
- attack_sound = 'sound/weapons/slash.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
-
//##########SLIMEPEOPLE##########
/datum/species/jelly/roundstartslime
diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi
index df7b5eda9e..529968d7f8 100644
Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ
diff --git a/icons/mob/mam_body_markings.dmi b/icons/mob/mam_body_markings.dmi
index be515b3459..d53fa87915 100644
Binary files a/icons/mob/mam_body_markings.dmi and b/icons/mob/mam_body_markings.dmi differ
diff --git a/icons/mob/mam_bodyparts.dmi b/icons/mob/mam_bodyparts.dmi
index 0511211b8d..66b3b18caf 100644
Binary files a/icons/mob/mam_bodyparts.dmi and b/icons/mob/mam_bodyparts.dmi differ
diff --git a/icons/mob/mam_taur.dmi b/icons/mob/mam_taur.dmi
index 8cce485c7a..8cd02f862e 100644
Binary files a/icons/mob/mam_taur.dmi and b/icons/mob/mam_taur.dmi differ