From 48ddeb57251d4f441c83289878c1c4942f66b4fa Mon Sep 17 00:00:00 2001 From: TalkingCactus Date: Sun, 14 Aug 2016 01:00:30 -0400 Subject: [PATCH] day 4 dump --- code/__DEFINES/flags.dm | 2 + code/__DEFINES/preferences.dm | 1 + code/__HELPERS/global_lists.dm | 3 ++ code/_globalvars/lists/flavor_misc.dm | 4 +- code/modules/client/preferences.dm | 21 +++++---- code/modules/client/preferences_savefile.dm | 37 ++++++++-------- .../mob/living/carbon/human/species.dm | 18 +++++++- .../mob/living/carbon/human/species_types.dm | 10 ++--- .../mob/new_player/sprite_accessories.dm | 40 ++++++++++++------ icons/mob/mutant_bodyparts.dmi | Bin 56073 -> 56072 bytes 10 files changed, 91 insertions(+), 45 deletions(-) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 0407daeb80..c60e122936 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -71,6 +71,8 @@ #define EASYDISMEMBER 20 #define EASYLIMBATTACHMENT 21 #define TOXINLOVER 22 +#define MUTCOLORS2 23 +#define MUTCOLORS3 24 #define FLYING 65536 diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 50af9c470a..8e0bd5f6ad 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -28,6 +28,7 @@ #define CHAT_GHOSTWHISPER 128 #define CHAT_GHOSTPDA 256 #define CHAT_GHOSTRADIO 512 +#define CHAT_LOOC 1024 #define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 9ade3ce5e2..bf3bb7c521 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -30,6 +30,9 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, r_wings_list,roundstart = TRUE) //mammal bodyparts (fucking furries) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, mam_body_markings_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, mam_tails_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, mam_ears_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, mam_tails_animated_list) //Species for(var/spath in subtypesof(/datum/species)) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 208521fa32..86c2537f22 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -36,7 +36,9 @@ var/global/list/r_wings_list = list() //Mammal Specific Mutant Human Bits var/global/list/mam_body_markings_list = list() - +var/global/list/mam_ears_list = list() +var/global/list/mam_tails_list = list() +var/global/list/mam_tails_animated_list = list() var/global/list/ghost_forms_with_directions_list = list("ghost") //stores the ghost forms that support directional sprites var/global/list/ghost_forms_with_accessories_list = list("ghost") //stores the ghost forms that support hair and other such things diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0edab005a6..5bd4c80c01 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -41,13 +41,6 @@ var/list/preferences_datums = list() var/allow_midround_antag = 1 var/preferred_map = null - //vore code - var/mutant_tail = "none" - var/mutant_wing = "none" - var/wingcolor = "FFF" - //var/special_color[COLOUR_LIST_SIZE] - //var/special_color_one = null - //var/special_color_two = null var/vore_banned_methods = 0 var/vore_extra_bans = 65535 var/list/vore_ability = list( @@ -83,7 +76,7 @@ var/list/preferences_datums = list() 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","mcolor2" = "FFF","mcolor3" = "FFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "mam_body_markings" = "None") + var/list/features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "mam_body_markings" = "None", "mam_ears" = "None", "mam_tail" = "None", "mam_tails_animated" = "None") var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity") //Mob preview @@ -1011,6 +1004,12 @@ var/list/preferences_datums = list() if(new_tail) features["tail_human"] = new_tail + if("mam_tail") + var/new_tail + new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in mam_tails_list + if(new_tail) + features["mam_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 @@ -1023,6 +1022,12 @@ var/list/preferences_datums = list() if(new_horns) features["horns"] = new_horns + if("mam_ears") + var/new_ears + new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in mam_ears_list + if(new_ears) + features["mam_ears"] = new_ears + if("ears") var/new_ears new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in ears_list diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index c100a0d2f5..bfc85722a4 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -310,22 +310,22 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["features["mcolor3"]"] << "#FFF" //Character - S["Flavor_Text"] >> flavor_text - S["real_name"] >> real_name - S["name_is_always_random"] >> be_random_name - S["body_is_always_random"] >> be_random_body - S["gender"] >> gender - S["age"] >> age - S["hair_color"] >> hair_color - S["facial_hair_color"] >> facial_hair_color - S["eye_color"] >> eye_color - S["skin_tone"] >> skin_tone - S["hair_style_name"] >> hair_style - S["facial_style_name"] >> facial_hair_style - S["underwear"] >> underwear - S["undershirt"] >> undershirt - S["socks"] >> socks - S["backbag"] >> backbag + S["Flavor_Text"] >> flavor_text + S["real_name"] >> real_name + S["name_is_always_random"] >> be_random_name + S["body_is_always_random"] >> be_random_body + S["gender"] >> gender + S["age"] >> age + S["hair_color"] >> hair_color + S["facial_hair_color"] >> facial_hair_color + S["eye_color"] >> eye_color + S["skin_tone"] >> skin_tone + S["hair_style_name"] >> hair_style + S["facial_style_name"] >> facial_hair_style + S["underwear"] >> underwear + S["undershirt"] >> undershirt + S["socks"] >> socks + S["backbag"] >> backbag S["feature_mcolor"] >> features["mcolor"] S["feature_mcolor2"] >> features["mcolor2"] S["feature_mcolor3"] >> features["mcolor3"] @@ -335,7 +335,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_lizard_frills"] >> features["frills"] S["feature_lizard_spines"] >> features["spines"] S["feature_lizard_body_markings"] >> features["body_markings"] - S["feature_mammal_body_markings"] >> features["mam_body_markings"] + S["feature_mam_body_markings"] >> features["mam_body_markings"] + S["feature_mam_tail"] >> features["mam_tail"] + S["feature_mam_ears"] >> features["mam_ears"] + S["feature_mam_tails_animated"] >> features["mam_tails_animated"] if(!config.mutant_humans) features["tail_human"] = "none" features["ears"] = "none" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 81e9e00392..58a945a7b5 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -56,6 +56,8 @@ var/siemens_coeff = 1 //base electrocution coefficient var/exotic_damage_overlay = "" var/fixed_mut_color = "" //to use MUTCOLOR with a fixed color that's independent of dna.feature["mcolor"] + var/fixed_mut_color2 = "" + var/fixed_mut_color3 = "" var/generic="something" var/adjective="unknown" var/restricted=0 //Set to 1 to not allow anyone to choose it, 2 to hide it from the DNA scanner, and text to restrict it to one person @@ -394,6 +396,10 @@ S = tails_list_human[H.dna.features["tail_human"]] if("waggingtail_human") S.= animated_tails_list_human[H.dna.features["tail_human"]] + if("mam_tail") + S = mam_tails_list[H.dna.features["mam_tail"]] + if("mam_waggingtail") + S.= mam_tails_animated_list[H.dna.features["mam_tail"]] if("spines") S = spines_list[H.dna.features["spines"]] if("waggingspines") @@ -409,7 +415,7 @@ if("body_markings") S = body_markings_list[H.dna.features["body_markings"]] if("mam_body_markings") - S = mam_body_markings_list[H.dna.features["mam_body_markings"]] + S. = mam_body_markings_list[H.dna.features["mam_body_markings"]] if("wings") S = wings_list[H.dna.features["wings"]] if("wingsopen") @@ -445,6 +451,16 @@ I.color = "#[fixed_mut_color]" else I.color = "#[H.dna.features["mcolor"]]" + if(MUTCOLORS2) + if(fixed_mut_color2) + I.color = "#[fixed_mut_color2]" + else + I.color = "#[H.dna.features["mcolor2"]]" + if(MUTCOLORS3) + if(fixed_mut_color3) + I.color = "#[fixed_mut_color3]" + else + I.color = "#[H.dna.features["mcolor3"]]" if(HAIR) if(hair_color == "mutcolor") I.color = "#[H.dna.features["mcolor"]]" diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index 6cf655904d..8c8b02bbd8 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -6,7 +6,7 @@ name = "Human" id = "human" default_color = "FFFFFF" - specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS) + specflags = list(EYECOLOR,HAIR,FACEHAIR,LIPS) mutant_bodyparts = list("tail_human", "ears") default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "None") use_skintones = 1 @@ -1063,8 +1063,8 @@ datum/species/canid default_color = "4B4B4B" roundstart = 1 specflags = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) - mutant_bodyparts = list("tail_human", "ears", "snout", "mam_body_markings") //Most mammal species will use the 'tail_human' and 'ears'. For exotic species and birds, consider making and using a different type to avoid monstrocities. - default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "tail_human" = "Wolf", "ears" = "Wolf", "wings" = "None", "mam_body_markings" = "None") + mutant_bodyparts = list("mam_tail", "mam_ears", "snout", "mam_body_markings") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "Wolf", "mam_ears" = "Wolf", "wings" = "None", "mam_body_markings" = "Belly") attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -1072,7 +1072,7 @@ datum/species/canid /datum/species/canid/spec_death(gibbed, mob/living/carbon/human/H) if(H) H.endTailWag() - +/* /datum/species/canid/wolf name = "Wolf" id = "wolf" @@ -1097,7 +1097,7 @@ datum/species/canid miss_sound = 'sound/weapons/slashmiss.ogg' //FELINE// -/* + /datum/species/tajaran name = "Tajaran" id = "tajaran" diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index c4b772eb2d..c0154dd6bd 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1125,6 +1125,7 @@ /datum/sprite_accessory/body_markings icon = 'icons/mob/mutant_bodyparts.dmi' + color_src = MUTCOLORS2 /datum/sprite_accessory/body_markings/none name = "None" @@ -1407,39 +1408,52 @@ icon_state = "aqua" //WOLF// -/datum/sprite_accessory/ears/wolf +/datum/sprite_accessory/mam_ears/wolf name = "Wolf" icon_state = "wolf" hasinner = 1 - color_src = HAIR -/datum/sprite_accessory/tails/human/wolf + +/datum/sprite_accessory/mam_tails/wolf name = "Wolf" icon_state = "wolf" -//The static and wagging sprites can be toggled on and off with 'say "*wag"' -/datum/sprite_accessory/tails_animated/human/wolf + +/datum/sprite_accessory/mam_tails_animated/wolf name = "Wolf" icon_state = "wolf" + +/datum/sprite_accessory/snouts/wolf + name = "Wolf" + icon_state = "wolf" + //FOX// /datum/sprite_accessory/ears/fox name = "Fox" icon_state = "fox" hasinner = 0 + /datum/sprite_accessory/tails/human/fox name = "Fox" icon_state = "fox" + /datum/sprite_accessory/tails_animated/human/fox name = "Fox" icon_state = "fox" +/datum/sprite_accessory/snouts/fox + name = "Fox" + icon_state = "fox" + //Mammal Body Markings +/datum/sprite_accessory/mam_body_markings + name = "None" + icon_state = "none" + color_src = MUTCOLORS2 /datum/sprite_accessory/mam_body_markings/none name = "None" - icon_state = "" -/datum/sprite_accessory/mam_body_markings/lbelly - name = "Light Belly" - icon_state = "mam_lbelly" + icon_state = "none" + +/datum/sprite_accessory/mam_body_markings/belly + name = "Belly" + icon_state = "mam_belly" gender_specific = 1 -/datum/sprite_accessory/mam_body_markings/dbelly - name = "Dark Belly" - icon_state = "mam_dbelly" - gender_specific = 1 \ No newline at end of file + color_src = MUTCOLORS2 diff --git a/icons/mob/mutant_bodyparts.dmi b/icons/mob/mutant_bodyparts.dmi index 0df0136e82e5bce2b06a175d37544e8d00b5929a..77cd935a428e7dc3dd97c9f0e1ab4e6ffea7b03f 100644 GIT binary patch delta 7384 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