From 303bdec6f55bd00a9b4d1aa9570f493bfe740368 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Fri, 22 Apr 2016 13:36:43 -0700 Subject: [PATCH] Angel WIP commit 1 Added basic angel wing Mutant parts --- code/__HELPERS/global_lists.dm | 2 ++ code/__HELPERS/mobs.dm | 4 ++- code/_globalvars/lists/flavor_misc.dm | 2 ++ code/modules/client/preferences.dm | 17 +++++++++- code/modules/mob/living/carbon/human/emote.dm | 29 ++++++++++++++++++ .../mob/living/carbon/human/species.dm | 16 ++++++++++ .../mob/living/carbon/human/species_types.dm | 4 +-- .../mob/new_player/sprite_accessories.dm | 14 +++++++++ icons/mob/mutant_bodyparts.dmi | Bin 43982 -> 46470 bytes 9 files changed, 84 insertions(+), 4 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 436b4c76c78..8468f237be7 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -22,6 +22,8 @@ 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/wings, wings_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open, wings_open_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 39c68439420..3cd1649b6db 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -64,9 +64,11 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, spines_list) if(!body_markings_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, body_markings_list) + if(!wings_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, wings_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))) + return(list("mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "tail_lizard" = pick(tails_list_lizard), "tail_human" = "None", "wings" = "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 5116c62e83e..52727a50626 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -25,6 +25,8 @@ 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/wings_list = list() +var/global/list/wings_open_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 7ffb0c72eb0..4e10cc4a9bc 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -59,7 +59,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", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "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", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None") var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity") var/adminmusicvolume = 50 @@ -324,6 +324,15 @@ var/list/preferences_datums = list() dat += "" + if("wings" in pref_species.mutant_bodyparts) //TODO: make specific body parts be toggleable via config or something. + dat += "" + + dat += "

Wings

" + + dat += "[features["wings"]]
" + + dat += "" + dat += "" @@ -946,6 +955,12 @@ var/list/preferences_datums = list() if(new_ears) features["ears"] = new_ears + if("wings") + var/new_wings + new_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in wings_list + if(new_wings) + features["wings"] = new_wings + 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/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 600150027a8..be33b925595 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -129,6 +129,19 @@ if (!src.restrained()) message = "[src] flaps \his wings." m_type = 2 + if(((dna.features["wings"] != "None") && !("wings" in dna.species.mutant_bodyparts))) + OpenWings() + spawn(1) + CloseWings() + + if ("wings") + if (!src.restrained()) + if(dna && dna.species &&((dna.features["wings"] != "None") && ("wings" in dna.species.mutant_bodyparts))) + message = "[src] opens \his wings." + OpenWings() + else if(dna && dna.species &&((dna.features["wings"] != "None") && ("wingsopen" in dna.species.mutant_bodyparts))) + message = "[src] closes \his wings." + CloseWings() if ("gasp","gasps") if (miming) @@ -383,4 +396,20 @@ if("waggingtail_human" in dna.species.mutant_bodyparts) dna.species.mutant_bodyparts -= "waggingtail_human" dna.species.mutant_bodyparts |= "tail_human" + update_body() + +/mob/living/carbon/human/proc/OpenWings() + if(!dna || !dna.species) + return + if("wings" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "wings" + dna.species.mutant_bodyparts |= "wingsopen" + update_body() + +/mob/living/carbon/human/proc/CloseWings() + if(!dna || !dna.species) + return + if("wings_open" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "wingsopen" + dna.species.mutant_bodyparts |= "wings" 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 638a318f7f0..2b3f1c1c4fb 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -366,6 +366,17 @@ if(!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR))) bodyparts_to_add -= "ears" + if("wings" in mutant_bodyparts) + if(!H.dna.features["wings"] || H.dna.features["wings"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))) + bodyparts_to_add -= "wings" + + if("wings_open" in mutant_bodyparts) + if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)) + bodyparts_to_add -= "wings_open" + else if ("wings" in mutant_bodyparts) + bodyparts_to_add -= "wings_open" + + if(!bodyparts_to_add) return @@ -399,6 +410,10 @@ S = ears_list[H.dna.features["ears"]] if("body_markings") S = body_markings_list[H.dna.features["body_markings"]] + if("wings") + S = wings_list[H.dna.features["wings"]] + if("wingsopen") + S = wings_open_list[H.dna.features["wings"]] if(!S || S.icon_state == "none") continue @@ -417,6 +432,7 @@ else icon_string = "m_[bodypart]_[S.icon_state]_[layer]" + world.log << icon_string I = image("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = icon_string, "layer" =- layer) if(!(H.disabilities & HUSK)) diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index df97e03d43b..ae3631a6c66 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -7,8 +7,8 @@ id = "human" default_color = "FFFFFF" specflags = list(EYECOLOR,HAIR,FACEHAIR,LIPS) - mutant_bodyparts = list("tail_human", "ears") - default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None") + mutant_bodyparts = list("tail_human", "ears", "wings") + default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "None") use_skintones = 1 skinned_type = /obj/item/stack/sheet/animalhide/human diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 930d7a33a15..c5e022ca2a3 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1295,6 +1295,20 @@ hasinner = 1 color_src = HAIR +/datum/sprite_accessory/wings/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/wings_open/angel + name = "Angel" + icon_state = "angel" + color_src = 0 + +/datum/sprite_accessory/wings/angel + name = "Angel" + icon_state = "angel" + color_src = 0 + /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 108699d328c772f7ecd8e86b39f02e277dd59f13..9e4d555ed728ae1c55f3081ff697ee88555eb245 100644 GIT binary patch delta 13461 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 WjzP(^%iuB8nN>PQCkZDmUjKi~hmAx4 delta 10939 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 XOcvuLX8>`&Nt;_Ckc6fFhX