diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 9538cf91fa..d25845d770 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -76,7 +76,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isvampire(A) (is_species(A,/datum/species/vampire)) #define isdullahan(A) (is_species(A, /datum/species/dullahan)) -#define isangel(A) (is_species(A, /datum/species/angel)) #define ismush(A) (is_species(A, /datum/species/mush)) #define isshadow(A) (is_species(A, /datum/species/shadow)) #define isrobotic(A) (is_species(A, /datum/species/ipc) || is_species(A, /datum/species/synthliz)) diff --git a/code/__DEFINES/species.dm b/code/__DEFINES/species.dm index 74ca459fa1..8a8f4d96c3 100644 --- a/code/__DEFINES/species.dm +++ b/code/__DEFINES/species.dm @@ -3,7 +3,6 @@ #define SPECIES_ABDUCTOR "abductor" #define SPECIES_ANDROID "android" -#define SPECIES_ANGEL "angel" #define SPECIES_MAMMAL "mammal" #define SPECIES_MAMMAL_SYNTHETIC "mammal_synthetic" #define SPECIES_ARACHNID "arachnid" @@ -53,3 +52,13 @@ #define SPECIES_CATEGORY_SHADOW "shadow" #define SPECIES_CATEGORY_SKELETON "skeleton" #define SPECIES_CATEGORY_UNDEAD "undead" + + +//Species Wing Type Defines ---------------------- +#define SPECIES_WINGS_ANGEL list("Angel") +#define SPECIES_WINGS_DRAGON list("Dragon") //could also be considered demon wings or bat wings? +#define SPECIES_WINGS_ROBOT list("Robotic") +#define SPECIES_WINGS_INSECT list("Fly") //"hey when can we have something besides giant fly wings?" "when you sprite it!" +#define SPECIES_WINGS_SKELETAL list("Skeleton") +#define SPECIES_WINGS_MOTH list("Megamoth","Mothra") +#define SPECIES_WINGS_JELLY list("Angel") //no actual slime wings present right now, but I'm making this in the event someone wants to sprite slime wings. diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 3ded0310dd..a01507e6bc 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -380,6 +380,8 @@ GENETICS SCANNER mutant = TRUE else if (S.mutantstomach != initial(S.mutantstomach)) mutant = TRUE + else if (S.flying_species != initial(S.flying_species)) + mutant = TRUE msg += "\tReported Species: [H.spec_trait_examine_font()][H.dna.custom_species ? H.dna.custom_species : S.name]\n" msg += "\tBase Species: [H.spec_trait_examine_font()][S.name]\n" diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 8a3eedca4b..b75bd81af8 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -53,7 +53,6 @@ desc = "A satchel that opens into a localized pocket of Blue Space." icon_state = "holdingsat" item_state = "holdingsat" - species_exception = list(/datum/species/angel) /obj/item/storage/backpack/holding/duffel name = "duffel bag of holding" @@ -190,7 +189,6 @@ name = "satchel" desc = "A trendy looking satchel." icon_state = "satchel-norm" - species_exception = list(/datum/species/angel) //satchels can be equipped since they are on the side, not back /obj/item/storage/backpack/satchel/leather name = "leather satchel" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index c944b2aa1f..f51593b590 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -234,7 +234,6 @@ Contains: icon_state = "ert_medical" item_state = "ert_medical" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med - species_exception = list(/datum/species/angel) //Red alert ERT @@ -296,7 +295,6 @@ Contains: icon_state = "ert_medical-alert" item_state = "ert_medical-alert" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/med - species_exception = list(/datum/species/angel) /obj/item/clothing/suit/space/eva name = "EVA suit" diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index b005822438..0f91437bd6 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -694,16 +694,19 @@ /datum/reagent/flightpotion/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) if(iscarbon(M) && M.stat != DEAD) - if(!ishumanbasic(M) || reac_volume < 5) // implying xenohumans are holy + var/mob/living/carbon/C = M + if(reac_volume < 5) if(method == INGEST && show_message) - to_chat(M, "You feel nothing but a terrible aftertaste.") + to_chat(C, "You feel nothing but a terrible aftertaste.") return ..() - - to_chat(M, "A terrible pain travels down your back as wings burst out!") - M.set_species(/datum/species/angel) - playsound(M.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1) - M.adjustBruteLoss(20) - M.emote("scream") + var/has_wings = (C.dna.species.mutant_bodyparts["deco_wings"] && C.dna.features["deco_wings"] != "None" || C.dna.species.mutant_bodyparts["insect_wings"] && C.dna.features["insect_wings"] != "None") + to_chat(C, "A terrible pain travels down your back as [has_wings ? "your wings transform" : "wings burst out"]!") + C.dna.species.GiveSpeciesFlight(C) + to_chat(C, "You feel blessed!") + ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) //implying anyone is truly holy in a setting where people throw tantrums when things aren't violent + playsound(C.loc, 'sound/items/poster_ripped.ogg', 50, TRUE, -1) + C.adjustBruteLoss(20) + C.emote("scream") ..() diff --git a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm index 800682b8cf..830808924b 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm @@ -1,4 +1,8 @@ -//Angel Wings +//Functional Wings + +/datum/sprite_accessory/wings + icon = 'icons/mob/wings_functional.dmi' + relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER) /datum/sprite_accessory/wings/none name = "None" @@ -9,23 +13,12 @@ return (!H.dna.features["wings"] || H.dna.features["wings"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)))) /datum/sprite_accessory/wings_open - icon = 'icons/mob/wings.dmi' + icon = 'icons/mob/wings_functional.dmi' relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER) /datum/sprite_accessory/wings_open/is_not_visible(var/mob/living/carbon/human/H, var/tauric) return (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)) || H.dna.species.mutant_bodyparts["wings"]) -/datum/sprite_accessory/wings_open/angel - name = "Angel" - icon_state = "angel" - color_src = 0 - dimension_x = 46 - center = TRUE - dimension_y = 34 - -/datum/sprite_accessory/wings - icon = 'icons/mob/wings.dmi' - relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER) /datum/sprite_accessory/wings/angel name = "Angel" @@ -36,6 +29,114 @@ dimension_y = 34 locked = TRUE +/datum/sprite_accessory/wings_open/angel + name = "Angel" + icon_state = "angel" + color_src = 0 + dimension_x = 46 + center = TRUE + dimension_y = 34 + +/datum/sprite_accessory/wings/dragon + name = "Dragon" + icon_state = "dragon" + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/dragon + name = "Dragon" + icon_state = "dragon" + dimension_x = 96 + center = TRUE + dimension_y = 32 + +/datum/sprite_accessory/wings/megamoth + name = "Megamoth" + icon_state = "megamoth" + color_src = FALSE + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/megamoth + name = "Megamoth" + icon_state = "megamoth" + color_src = FALSE + dimension_x = 96 + center = TRUE + dimension_y = 32 + +/datum/sprite_accessory/wings/mothra + name = "Mothra" + icon_state = "mothra" + color_src = FALSE + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/mothra + name = "Mothra" + icon_state = "mothra" + color_src = FALSE + dimension_x = 96 + center = TRUE + dimension_y = 32 + +/datum/sprite_accessory/wings/skeleton + name = "Skeleton" + icon_state = "skele" + color_src = FALSE + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/skeleton + name = "Skeleton" + icon_state = "skele" + color_src = FALSE + dimension_x = 96 + center = TRUE + dimension_y = 32 + +/datum/sprite_accessory/wings/robotic + name = "Robotic" + icon_state = "robotic" + color_src = FALSE + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/robotic + name = "Robotic" + icon_state = "robotic" + color_src = FALSE + dimension_x = 96 + center = TRUE + dimension_y = 32 + +/datum/sprite_accessory/wings/fly + name = "Fly" + icon_state = "fly" + color_src = FALSE + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/fly + name = "Fly" + icon_state = "fly" + color_src = FALSE + dimension_x = 96 + center = TRUE + dimension_y = 32 + // Decorative wings /datum/sprite_accessory/deco_wings @@ -43,6 +144,10 @@ color_src = WINGCOLOR mutant_part_string = "insect_wings" relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + var/list/upgrade_to = list() //What the wings change to if the mob consumes a flight potion or gains true wings through other means. If it's an empty list, it will pick the species alternative instead. + +/datum/sprite_accessory/deco_wings/is_not_visible(var/mob/living/carbon/human/H, var/tauric) + return (H.dna.features["wings"] != "None") //true wings will override decorative wings /datum/sprite_accessory/deco_wings/none name = "None" @@ -57,162 +162,201 @@ center = TRUE dimension_y = 34 relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER) + upgrade_to = SPECIES_WINGS_ANGEL //obviously //nonmoth wings /datum/sprite_accessory/deco_wings/bat name = "Bat" icon_state = "bat" + upgrade_to = SPECIES_WINGS_DRAGON /datum/sprite_accessory/deco_wings/bee name = "Bee" icon_state = "bee" + upgrade_to = SPECIES_WINGS_INSECT /datum/sprite_accessory/deco_wings/bee2 name = "Small Bee" icon_state = "beewings" + upgrade_to = SPECIES_WINGS_INSECT /datum/sprite_accessory/deco_wings/dragon name = "Dragon" icon_state = "dragon" + upgrade_to = SPECIES_WINGS_DRAGON //lol /datum/sprite_accessory/deco_wings/dragonfly name = "Dragonfly" icon_state = "dragonfly" + upgrade_to = SPECIES_WINGS_INSECT /datum/sprite_accessory/deco_wings/fairy name = "Fairy" icon_state = "fairy" + upgrade_to = SPECIES_WINGS_INSECT //rip people's sparkly wings until someone sprites in some huge fairy wings or something /datum/sprite_accessory/deco_wings/featheredwing name = "Feathery" icon_state = "feathery" + upgrade_to = SPECIES_WINGS_ANGEL /datum/sprite_accessory/deco_wings/featheredwingmedium name = "Medium Feathered" icon_state = "feathered3" + upgrade_to = SPECIES_WINGS_ANGEL /datum/sprite_accessory/deco_wings/featheredwinglarge name = "Large Feathered" icon_state = "feathered2" + upgrade_to = SPECIES_WINGS_ANGEL /datum/sprite_accessory/deco_wings/harpywings name = "Harpy" icon_state = "harpywings" + upgrade_to = SPECIES_WINGS_ANGEL /datum/sprite_accessory/deco_wings/roboticwing name = "Robotic" icon_state = "drago" + upgrade_to = SPECIES_WINGS_ROBOT /datum/sprite_accessory/deco_wings/succubusblack name = "Succubus Black" icon_state = "succubusblack" + upgrade_to = SPECIES_WINGS_DRAGON /datum/sprite_accessory/deco_wings/succubuspurple name = "Succubus Purple" icon_state = "succubuspurple" + upgrade_to = SPECIES_WINGS_DRAGON /datum/sprite_accessory/deco_wings/succubusred name = "Succubus Red" icon_state = "succubusred" + upgrade_to = SPECIES_WINGS_DRAGON /datum/sprite_accessory/deco_wings/xenobackplate name = "Xenomorph Backplate" icon_state = "snagbackplate" + upgrade_to = list() //moth wings /datum/sprite_accessory/deco_wings/atlas name = "Atlas" icon_state = "atlas" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/brown name = "Brown" icon_state = "brown" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/deathhead name = "Deathshead" icon_state = "deathhead" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/featherymoth name = "Feathery Moth Wings" icon_state = "featherymoth" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/firewatch name = "Firewatch" icon_state = "firewatch" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/gothic name = "Gothic" icon_state = "gothic" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/jungle name = "Jungle" icon_state = "jungle" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/lovers name = "Lovers" icon_state = "lovers" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/luna name = "Luna" icon_state = "luna" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/monarch name = "Monarch" icon_state = "monarch" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/moonfly name = "Moon Fly" icon_state = "moonfly" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/oakworm name = "Oak Worm" icon_state = "oakworm" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/plain name = "Plain" icon_state = "plain" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/plasmafire name = "Plasma Fire" icon_state = "plasmafire" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/poison name = "Poison" icon_state = "poison" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/punished name = "Burnt Off" icon_state = "punished" + upgrade_to = SPECIES_WINGS_MOTH //through TG code moth wings aren't meant to get upgraded if they're burnt off but... /datum/sprite_accessory/deco_wings/ragged name = "Ragged" icon_state = "ragged" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/reddish name = "Reddish" icon_state = "redish" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/rosy name = "Rosy" icon_state = "rosy" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/royal name = "Royal" icon_state = "royal" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/snow name = "Snow" icon_state = "snow" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/whitefly name = "White Fly" icon_state = "whitefly" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/deco_wings/witchwing name = "Witch Wing" icon_state = "witchwing" + upgrade_to = SPECIES_WINGS_MOTH //INSECT WINGS @@ -220,67 +364,86 @@ icon = 'icons/mob/wings.dmi' color_src = WINGCOLOR relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + var/list/upgrade_to = list() + +/datum/sprite_accessory/insect_wings/is_not_visible(var/mob/living/carbon/human/H, var/tauric) + return (H.dna.features["wings"] != "None") //true wings will override decorative wings //non insect wings /datum/sprite_accessory/deco_wings/bat name = "Bat" icon_state = "bat" + upgrade_to = SPECIES_WINGS_DRAGON /datum/sprite_accessory/insect_wings/bee name = "Bee" icon_state = "bee" + upgrade_to = SPECIES_WINGS_INSECT /datum/sprite_accessory/insect_wings/bee2 name = "Small Bee" icon_state = "beewings" + upgrade_to = SPECIES_WINGS_INSECT /datum/sprite_accessory/insect_wings/dragon name = "Dragon" icon_state = "dragon" + upgrade_to = SPECIES_WINGS_DRAGON /datum/sprite_accessory/insect_wings/dragonfly name = "Dragonfly" icon_state = "dragonfly" + upgrade_to = SPECIES_WINGS_INSECT /datum/sprite_accessory/insect_wings/fairy name = "Fairy" icon_state = "fairy" + upgrade_to = SPECIES_WINGS_INSECT /datum/sprite_accessory/insect_wings/featheredwing name = "Feathery" icon_state = "feathery" + upgrade_to = SPECIES_WINGS_ANGEL /datum/sprite_accessory/insect_wings/featheredwingmedium name = "Medium Feathered" icon_state = "feathered3" + upgrade_to = SPECIES_WINGS_ANGEL /datum/sprite_accessory/insect_wings/featheredwinglarge name = "Large Feathered" icon_state = "feathered2" + upgrade_to = SPECIES_WINGS_ANGEL /datum/sprite_accessory/insect_wings/harpywings name = "Harpy" icon_state = "harpywings" + upgrade_to = SPECIES_WINGS_ANGEL /datum/sprite_accessory/insect_wings/roboticwing name = "Robotic" icon_state = "drago" + upgrade_to = SPECIES_WINGS_ROBOT /datum/sprite_accessory/insect_wings/succubusblack name = "Succubus Black" icon_state = "succubusblack" + upgrade_to = SPECIES_WINGS_DRAGON /datum/sprite_accessory/insect_wings/succubuspurple name = "Succubus Purple" icon_state = "succubuspurple" + upgrade_to = SPECIES_WINGS_DRAGON /datum/sprite_accessory/insect_wings/succubusred name = "Succubus Red" icon_state = "succubusred" + upgrade_to = SPECIES_WINGS_DRAGON /datum/sprite_accessory/insect_wings/xenobackplate name = "Xenomorph Backplate" icon_state = "snagbackplate" + upgrade_to = list() //moth wings @@ -288,98 +451,122 @@ name = "None" icon_state = "none" relevant_layers = null + upgrade_to = list() /datum/sprite_accessory/insect_wings/atlas name = "Atlas" icon_state = "atlas" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/brown name = "Brown" icon_state = "brown" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/deathhead name = "Deathshead" icon_state = "deathhead" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/featherymoth name = "Feathery Moth Wings" icon_state = "featherymoth" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/firewatch name = "Firewatch" icon_state = "firewatch" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/gothic name = "Gothic" icon_state = "gothic" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/jungle name = "Jungle" icon_state = "jungle" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/lovers name = "Lovers" icon_state = "lovers" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/luna name = "Luna" icon_state = "luna" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/monarch name = "Monarch" icon_state = "monarch" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/moonfly name = "Moon Fly" icon_state = "moonfly" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/oakworm name = "Oak Worm" icon_state = "oakworm" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/plain name = "Plain" icon_state = "plain" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/plasmafire name = "Plasma Fire" icon_state = "plasmafire" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/poison name = "Poison" icon_state = "poison" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/punished name = "Burnt Off" icon_state = "punished" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/ragged name = "Ragged" icon_state = "ragged" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/reddish name = "Reddish" icon_state = "redish" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/rosy name = "Rosy" icon_state = "rosy" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/royal name = "Royal" icon_state = "royal" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/snow name = "Snow" icon_state = "snow" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/whitefly name = "White Fly" icon_state = "whitefly" + upgrade_to = SPECIES_WINGS_MOTH /datum/sprite_accessory/insect_wings/witchwing name = "Witch Wing" icon_state = "witchwing" + upgrade_to = SPECIES_WINGS_MOTH //insect markings /datum/sprite_accessory/insect_markings // Extra markings for insects ported from tg. @@ -453,9 +640,11 @@ /datum/sprite_accessory/deco_wings/eyestalks name = "gazer eyestalks" icon_state = "eyestalks" + upgrade_to = list() //and suddenly flight potions become a lot more awkward when they gouge your tentacle eyes out. //ckeys_allowed = list("liquidfirefly","seiga") //At request. /datum/sprite_accessory/insect_wings/eyestalks name = "gazer eyestalks" icon_state = "eyestalks" + upgrade_to = list() //ckeys_allowed = list("liquidfirefly","seiga") //At request. diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 8669a1458a..9e5669e8a7 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1124,9 +1124,6 @@ /mob/living/carbon/human/species/android race = /datum/species/android -/mob/living/carbon/human/species/angel - race = /datum/species/angel - /mob/living/carbon/human/species/corporate race = /datum/species/corporate diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 3976b1ebca..9a6cd477ad 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -138,6 +138,15 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) /// A path to an outfit that is important for species life e.g. plasmaman outfit var/datum/outfit/outfit_important_for_life + ///Is this species a flying species? Used as an easy check for some things + var/flying_species = FALSE + ///The actual flying ability given to flying species + var/datum/action/innate/flight/fly + ///Current wings icon + var/wings_icon = "Angel" + //Dictates which wing icons are allowed for a given species. If count is >1 a radial menu is used to choose between all icons in list + var/list/wings_icons = SPECIES_WINGS_ANGEL + ///Species-only traits. Can be found in [code/__DEFINES/DNA.dm] var/list/species_traits = list(HAS_FLESH,HAS_BONE) //by default they can scar and have bones/flesh unless set to something else ///Generic traits tied to having the species. @@ -490,6 +499,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) for(var/datum/disease/A in C.diseases) A.cure(FALSE) + if(flying_species && isnull(fly)) + fly = new + fly.Grant(C) + if(ishuman(C)) var/mob/living/carbon/human/H = C if(NOGENITALS in H.dna.species.species_traits) @@ -564,6 +577,17 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(F) qdel(F) + if(flying_species) + fly.Remove(C) + QDEL_NULL(fly) + if(C.movement_type & FLYING) + C.setMovetype(C.movement_type & ~FLYING) + ToggleFlight(C,0) + if(C.dna && C.dna.species && (C.dna.features["wings"] == wings_icon)) + if("wings" in C.dna.species.mutant_bodyparts) + C.dna.species.mutant_bodyparts -= "wings" + C.dna.features["wings"] = "None" + C.update_body() if(ROBOTIC_LIMBS in species_traits) for(var/obj/item/bodypart/B in C.bodyparts) @@ -2356,10 +2380,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) return //////////// -//Stun// +// Stun // //////////// /datum/species/proc/spec_stun(mob/living/carbon/human/H,amount) + if(flying_species && H.movement_type & FLYING) + ToggleFlight(H,0) + flyslip(H) if(H) stop_wagging_tail(H) . = stunmod * H.physiology.stun_mod * amount @@ -2406,3 +2433,127 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) mutant_bodyparts["spines"] = mutant_bodyparts["waggingspines"] mutant_bodyparts -= "waggingspines" H.update_body() + +/////////////// +//FLIGHT SHIT// +/////////////// + +/datum/species/proc/GiveSpeciesFlight(mob/living/carbon/human/H) + if(flying_species) //species that already have flying traits should not work with this proc + return + flying_species = TRUE + //CITADEL CHANGE: check if they already have wings, and "evolve" them based off of the wings they have. If they have none, use their species wings basis. + var/list/wingslist + //why the fuck do we have two different wing types anyways? they're literally almost both using the same wing shit too. + var/datum/sprite_accessory/deco_wings/D = GLOB.deco_wings_list[H.dna.features["deco_wings"]] + var/datum/sprite_accessory/insect_wings/I = GLOB.insect_wings_list[H.dna.features["insect_wings"]] + if(mutant_bodyparts["deco_wings"] && D?.upgrade_to.len) //species check to see if they were allowed to have deco wings + wingslist = D.upgrade_to + else if(mutant_bodyparts["insect_wings"] && I?.upgrade_to.len) //species check to see if they were allowed to have insect wings + wingslist = I.upgrade_to + else + wingslist = wings_icons + + if(wingslist.len > 1) + if(!H.client) + wings_icon = pick(wingslist) + else + var/list/wings = list() + for(var/W in wingslist) + var/datum/sprite_accessory/S = GLOB.wings_list[W] //Gets the datum for every wing this species has, then prompts user with a radial menu + var/image/img = image(icon = 'icons/mob/wings_functional.dmi', icon_state = "m_wingsopen_[S.icon_state]_BEHIND") //Process the HUD elements + img.transform *= 0.5 + img.pixel_x = -32 + if(wings[S.name]) + stack_trace("Different wing types with repeated names. Please fix as this may cause issues.") + else + wings[S.name] = img + wings_icon = show_radial_menu(H, H, wings, tooltips = TRUE) + if(!wings_icon) + wings_icon = pick(wings_icons) + else + wings_icon = wingslist[1] + if(isnull(fly)) + fly = new + fly.Grant(H) + if(H.dna.features["wings"] != wings_icon) + mutant_bodyparts["wings"] = wings_icon + H.dna.features["wings"] = wings_icon + H.update_body() + +/datum/species/proc/HandleFlight(mob/living/carbon/human/H) + if(H.movement_type & FLYING) + if(!CanFly(H)) + ToggleFlight(H) + return FALSE + return TRUE + else + return FALSE + +/datum/species/proc/CanFly(mob/living/carbon/human/H) + if(H.stat || !(H.mobility_flags & MOBILITY_STAND)) + return FALSE + if(H.wear_suit && ((H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)))) //Jumpsuits have tail holes, so it makes sense they have wing holes too + to_chat(H, "Your suit blocks your wings from extending!") + return FALSE + var/turf/T = get_turf(H) + if(!T) + return FALSE + var/datum/gas_mixture/environment = T.return_air() + if(environment && !(environment.return_pressure() > 30)) + to_chat(H, "The atmosphere is too thin for you to fly!") + return FALSE + else + return TRUE + +/datum/species/proc/flyslip(mob/living/carbon/human/H) + var/obj/buckled_obj + if(H.buckled) + buckled_obj = H.buckled + to_chat(H, "Your wings spazz out and launch you!") + playsound(H.loc, 'sound/misc/slip.ogg', 50, TRUE, -3) + for(var/obj/item/I in H.held_items) + H.accident(I) + var/olddir = H.dir + H.stop_pulling() + if(buckled_obj) + buckled_obj.unbuckle_mob(H) + step(buckled_obj, olddir) + else + new /datum/forced_movement(H, get_ranged_target_turf(H, olddir, 4), 1, FALSE, CALLBACK(H, /mob/living/carbon/.proc/spin, 1, 1)) + return TRUE + +//UNSAFE PROC, should only be called through the Activate or other sources that check for CanFly +/datum/species/proc/ToggleFlight(mob/living/carbon/human/H) + if(!(H.movement_type & FLYING) && CanFly(H)) + stunmod *= 2 + speedmod -= 0.35 + H.setMovetype(H.movement_type | FLYING) + override_float = TRUE + H.pass_flags |= PASSTABLE + H.OpenWings() + H.update_mobility() + else + stunmod *= 0.5 + speedmod += 0.35 + H.setMovetype(H.movement_type & ~FLYING) + override_float = FALSE + H.pass_flags &= ~PASSTABLE + H.CloseWings() + +/datum/action/innate/flight + name = "Toggle Flight" + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_STUN + icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "flight" + +/datum/action/innate/flight/Activate() + var/mob/living/carbon/human/H = owner + var/datum/species/S = H.dna.species + if(S.CanFly(H)) + S.ToggleFlight(H) + if(!(H.movement_type & FLYING)) + to_chat(H, "You settle gently back onto the ground...") + else + to_chat(H, "You beat your wings and begin to hover gently above the ground...") + H.set_resting(FALSE, TRUE) diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index 3c6a2a8e13..d9edfc240d 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -12,3 +12,4 @@ species_language_holder = /datum/language_holder/synthetic limbs_id = SPECIES_SYNTH species_category = SPECIES_CATEGORY_ROBOT + wings_icons = SPECIES_WINGS_ROBOT diff --git a/code/modules/mob/living/carbon/human/species_types/angel.dm b/code/modules/mob/living/carbon/human/species_types/angel.dm deleted file mode 100644 index 977e8aaab3..0000000000 --- a/code/modules/mob/living/carbon/human/species_types/angel.dm +++ /dev/null @@ -1,145 +0,0 @@ -/datum/species/angel - name = "Angel" - id = SPECIES_ANGEL - default_color = "FFFFFF" - species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,HAS_FLESH,HAS_BONE) - mutant_bodyparts = list("tail_human" = "None", "ears" = "None", "wings" = "Angel") - use_skintones = USE_SKINTONES_GRAYSCALE_CUSTOM - no_equip = list(SLOT_BACK) - blacklisted = 1 - limbs_id = SPECIES_HUMAN - skinned_type = /obj/item/stack/sheet/animalhide/human - species_category = SPECIES_CATEGORY_BASIC //they're a kind of human - - var/datum/action/innate/flight/fly - -/datum/species/angel/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) - ..() - if(H.dna && H.dna.species && (H.dna.features["wings"] != "Angel")) - if(!H.dna.species.mutant_bodyparts["wings"]) - H.dna.species.mutant_bodyparts["wings"] = "Angel" - H.dna.features["wings"] = "Angel" - H.update_body() - if(ishuman(H) && !fly) - fly = new - fly.Grant(H) - ADD_TRAIT(H, TRAIT_HOLY, SPECIES_TRAIT) - -/datum/species/angel/on_species_loss(mob/living/carbon/human/H) - if(fly) - fly.Remove(H) - if(H.movement_type & FLYING) - H.setMovetype(H.movement_type & ~FLYING) - ToggleFlight(H,0) - if(H.dna && H.dna.species && (H.dna.features["wings"] == "Angel")) - if(H.dna.species.mutant_bodyparts["wings"]) - H.dna.species.mutant_bodyparts -= "wings" - H.dna.features["wings"] = "None" - H.update_body() - REMOVE_TRAIT(H, TRAIT_HOLY, SPECIES_TRAIT) - ..() - -/datum/species/angel/spec_life(mob/living/carbon/human/H) - HandleFlight(H) - -/datum/species/angel/proc/HandleFlight(mob/living/carbon/human/H) - if(H.movement_type & FLYING) - if(!CanFly(H)) - ToggleFlight(H,0) - return 0 - return 1 - else - return 0 - -/datum/species/angel/proc/CanFly(mob/living/carbon/human/H) - if(!CHECK_MOBILITY(H, MOBILITY_MOVE)) - return FALSE - if(H.wear_suit && ((H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)))) //Jumpsuits have tail holes, so it makes sense they have wing holes too - to_chat(H, "Your suit blocks your wings from extending!") - return FALSE - var/turf/T = get_turf(H) - if(!T) - return FALSE - - var/datum/gas_mixture/environment = T.return_air() - if(environment && !(environment.return_pressure() > 30)) - to_chat(H, "The atmosphere is too thin for you to fly!") - return FALSE - return TRUE - -/datum/action/innate/flight - name = "Toggle Flight" - check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_STUN - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "flight" - -/datum/action/innate/flight/Activate() - var/mob/living/carbon/human/H = owner - var/datum/species/angel/A = H.dna.species - if(A.CanFly(H)) - if(H.movement_type & FLYING) - to_chat(H, "You settle gently back onto the ground...") - A.ToggleFlight(H,0) - H.update_mobility() - else - to_chat(H, "You beat your wings and begin to hover gently above the ground...") - H.set_resting(FALSE, TRUE) - A.ToggleFlight(H,1) - H.update_mobility() - -/datum/species/angel/proc/flyslip(mob/living/carbon/human/H) - var/obj/buckled_obj - if(H.buckled) - buckled_obj = H.buckled - - to_chat(H, "Your wings spazz out and launch you!") - - playsound(H.loc, 'sound/misc/slip.ogg', 50, 1, -3) - - for(var/obj/item/I in H.held_items) - H.accident(I) - - var/olddir = H.dir - - H.stop_pulling() - if(buckled_obj) - buckled_obj.unbuckle_mob(H) - step(buckled_obj, olddir) - else - for(var/i=1, i<5, i++) - spawn (i) - step(H, olddir) - H.spin(1,1) - return 1 - - -/datum/species/angel/spec_stun(mob/living/carbon/human/H,amount) - if(H.movement_type & FLYING) - ToggleFlight(H,0) - flyslip(H) - . = ..() - -/datum/species/angel/negates_gravity(mob/living/carbon/human/H) - if(H.movement_type & FLYING) - return 1 - -/datum/species/angel/space_move(mob/living/carbon/human/H) - if(H.movement_type & FLYING) - return 1 - -/datum/species/angel/proc/ToggleFlight(mob/living/carbon/human/H,flight) - if(flight && CanFly(H)) - stunmod = 2 - speedmod = -0.1 - H.setMovetype(H.movement_type | FLYING) - override_float = TRUE - H.pass_flags |= PASSTABLE - H.OpenWings() - else - stunmod = 1 - speedmod = 0 - H.setMovetype(H.movement_type & ~FLYING) - override_float = FALSE - H.pass_flags &= ~PASSTABLE - H.CloseWings() - update_species_slowdown(H) diff --git a/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm b/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm index df129c6ff4..dba0035adc 100644 --- a/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm +++ b/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm @@ -48,4 +48,5 @@ miss_sound = 'sound/weapons/slashmiss.ogg' allowed_limb_ids = list("mammal","aquatic","avian", "human") - species_category = "robot" + species_category = SPECIES_CATEGORY_ROBOT + wings_icons = SPECIES_WINGS_ROBOT diff --git a/code/modules/mob/living/carbon/human/species_types/arachnid.dm b/code/modules/mob/living/carbon/human/species_types/arachnid.dm index 454625cf36..7495e2500e 100644 --- a/code/modules/mob/living/carbon/human/species_types/arachnid.dm +++ b/code/modules/mob/living/carbon/human/species_types/arachnid.dm @@ -21,6 +21,7 @@ var/web_cooldown = 200 var/web_ready = TRUE var/spinner_rate = 25 + wings_icons = SPECIES_WINGS_MOTH //Arachnids' phylum is arthropods, which include butterflies. Might as well hit them with moth wings. /datum/species/arachnid/random_name(gender,unique,lastname) if(unique) diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm index f87f425b5f..df4abf864a 100644 --- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm @@ -19,6 +19,7 @@ tail_type = "mam_tail" wagging_type = "mam_waggingtail" species_category = SPECIES_CATEGORY_INSECT + wings_icons = SPECIES_WINGS_INSECT allowed_limb_ids = list("insect","apid","moth","moth_not_greyscale") diff --git a/code/modules/mob/living/carbon/human/species_types/corporate.dm b/code/modules/mob/living/carbon/human/species_types/corporate.dm index e9baa786da..48b5032129 100644 --- a/code/modules/mob/living/carbon/human/species_types/corporate.dm +++ b/code/modules/mob/living/carbon/human/species_types/corporate.dm @@ -19,3 +19,4 @@ sexes = 0 gib_types = /obj/effect/gibspawner/robot species_category = SPECIES_CATEGORY_ROBOT + wings_icons = SPECIES_WINGS_ROBOT diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 7cd582d050..facc3dfd8d 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -16,6 +16,7 @@ has_field_of_vision = FALSE //Too much of a trouble, their vision is already bound to their severed head. species_category = SPECIES_CATEGORY_UNDEAD var/pumpkin = FALSE + wings_icons = SPECIES_WINGS_SKELETAL //seems suitable for an undead. var/obj/item/dullahan_relay/myhead diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index 5a185cbeb8..86720289fe 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -13,6 +13,7 @@ exotic_bloodtype = "BUG" exotic_blood_color = BLOOD_COLOR_BUG species_category = SPECIES_CATEGORY_INSECT + wings_icons = SPECIES_WINGS_INSECT /datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(istype(chem, /datum/reagent/toxin/pestkiller)) diff --git a/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm index eb870f9624..a5de47258c 100644 --- a/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm @@ -29,6 +29,7 @@ exotic_bloodtype = "HF" exotic_blood_color = BLOOD_COLOR_OIL species_category = SPECIES_CATEGORY_ROBOT + wings_icons = SPECIES_WINGS_ROBOT var/datum/action/innate/monitor_change/screen diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 04c69a4138..db2e574d72 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -29,6 +29,7 @@ tail_type = "mam_tail" wagging_type = "mam_waggingtail" species_category = SPECIES_CATEGORY_JELLY + wings_icons = SPECIES_WINGS_JELLY ass_image = 'icons/ass/assslime.png' /datum/species/jelly/on_species_loss(mob/living/carbon/C) diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 07fa78a88a..ef8fd35c45 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -29,6 +29,7 @@ tail_type = "tail_lizard" wagging_type = "waggingtail_lizard" species_category = SPECIES_CATEGORY_LIZARD + wings_icons = SPECIES_WINGS_DRAGON ass_image = 'icons/ass/asslizard.png' diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 547d017c23..9c29856084 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -23,6 +23,7 @@ outfit_important_for_life = /datum/outfit/plasmaman species_category = SPECIES_CATEGORY_SKELETON + wings_icons = SPECIES_WINGS_SKELETAL ass_image = 'icons/ass/assplasma.png' diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 4c82a25b4b..bfef310cdf 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -16,6 +16,7 @@ mutanteyes = /obj/item/organ/eyes/night_vision species_category = SPECIES_CATEGORY_SHADOW + wings_icons = SPECIES_WINGS_SKELETAL //not sure what's more spooky for these guys - skeleton or dragon? /datum/species/shadow/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index 8175f505fa..5a927397fb 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -16,6 +16,7 @@ burnmod = 1.25 species_category = SPECIES_CATEGORY_SKELETON //they have their own category that's disassociated from undead, paired with plasmapeople + wings_icons = SPECIES_WINGS_SKELETAL /datum/species/skeleton/New() if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) //skeletons are stronger during the spooky season! diff --git a/code/modules/mob/living/carbon/human/species_types/synthliz.dm b/code/modules/mob/living/carbon/human/species_types/synthliz.dm index b6a7e93c72..0d29add33a 100644 --- a/code/modules/mob/living/carbon/human/species_types/synthliz.dm +++ b/code/modules/mob/living/carbon/human/species_types/synthliz.dm @@ -28,3 +28,4 @@ tail_type = "mam_tail" wagging_type = "mam_waggingtail" species_category = SPECIES_CATEGORY_ROBOT + wings_icons = SPECIES_WINGS_ROBOT diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm index 91711b5c39..316b129ee8 100644 --- a/code/modules/mob/living/carbon/human/species_types/synths.dm +++ b/code/modules/mob/living/carbon/human/species_types/synths.dm @@ -18,6 +18,7 @@ var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged species_language_holder = /datum/language_holder/synthetic species_category = SPECIES_CATEGORY_ROBOT + wings_icons = SPECIES_WINGS_ROBOT /datum/species/synth/military name = "Military Synth" diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index e708835ed1..3e54a4e638 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -15,8 +15,10 @@ skinned_type = /obj/item/stack/sheet/animalhide/human var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability." species_category = SPECIES_CATEGORY_UNDEAD + wings_icons = SPECIES_WINGS_DRAGON //closest to "bat" wings. var/batform_enabled = TRUE + /datum/species/vampire/roundstart id = SPECIES_VAMPIRE_WEAK batform_enabled = FALSE diff --git a/code/modules/mob/living/carbon/human/species_types/xeno.dm b/code/modules/mob/living/carbon/human/species_types/xeno.dm index d3249edd96..ffb8ac5a80 100644 --- a/code/modules/mob/living/carbon/human/species_types/xeno.dm +++ b/code/modules/mob/living/carbon/human/species_types/xeno.dm @@ -17,3 +17,4 @@ disliked_food = JUNKFOOD liked_food = GROSS | MEAT species_category = SPECIES_CATEGORY_ALIEN + wings_icons = SPECIES_WINGS_DRAGON //most depictions of xenomorphs with wings are closest to this. diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 57a11481d7..0dc08eeedb 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -16,6 +16,7 @@ disliked_food = NONE liked_food = GROSS | MEAT | RAW species_category = SPECIES_CATEGORY_UNDEAD + wings_icons = SPECIES_WINGS_SKELETAL //eh. /datum/species/zombie/notspaceproof id = "notspaceproofzombie" diff --git a/icons/mob/wings.dmi b/icons/mob/wings.dmi index 92de5c150c..49d9e4d4a8 100644 Binary files a/icons/mob/wings.dmi and b/icons/mob/wings.dmi differ diff --git a/icons/mob/wings_functional.dmi b/icons/mob/wings_functional.dmi new file mode 100644 index 0000000000..5d1a82a245 Binary files /dev/null and b/icons/mob/wings_functional.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 6b58f711bf..67b979f83e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2681,7 +2681,6 @@ #include "code\modules\mob\living\carbon\human\innate_abilities\limb_regeneration.dm" #include "code\modules\mob\living\carbon\human\species_types\abductor.dm" #include "code\modules\mob\living\carbon\human\species_types\android.dm" -#include "code\modules\mob\living\carbon\human\species_types\angel.dm" #include "code\modules\mob\living\carbon\human\species_types\anthropomorph.dm" #include "code\modules\mob\living\carbon\human\species_types\arachnid.dm" #include "code\modules\mob\living\carbon\human\species_types\bugmen.dm"