diff --git a/code/__DEFINES/species.dm b/code/__DEFINES/species.dm index 8a8f4d96c3..60aeb57513 100644 --- a/code/__DEFINES/species.dm +++ b/code/__DEFINES/species.dm @@ -62,3 +62,4 @@ #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. +#define SPECIES_WINGS_ALL list("Angel","Dragon","Robotic","Fly","Skeleton","Megamoth","Mothra") //keep this updated diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 0f91437bd6..0d46912a5a 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -700,8 +700,9 @@ to_chat(C, "You feel nothing but a terrible aftertaste.") return ..() 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) + var/has_functional_wings = (C.dna.species.mutant_bodyparts["wings"] != null) + to_chat(C, "A terrible pain travels down your back as [has_wings || has_functional_wings ? "your wings transform" : "wings burst out"]!") + C.dna.species.GiveSpeciesFlight(C, has_functional_wings ? TRUE : FALSE) //give them the full list of wing choices if this is their second flight potion 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) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 7aa085f41b..33eb840567 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -578,11 +578,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) qdel(F) if(flying_species) + if(C.movement_type & FLYING) + ToggleFlight(C) 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" @@ -1190,6 +1189,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/takes_crit_damage = !HAS_TRAIT(H, TRAIT_NOCRITDAMAGE) if((H.health < H.crit_threshold) && takes_crit_damage) H.adjustBruteLoss(1) + if(flying_species) //turns off flight automatically if they can't. + HandleFlight(H) /datum/species/proc/spec_death(gibbed, mob/living/carbon/human/H) if(H) @@ -2396,10 +2397,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) ////////////// /datum/species/proc/space_move(mob/living/carbon/human/H) - return 0 + if(H.movement_type & FLYING) + return TRUE + return FALSE /datum/species/proc/negates_gravity(mob/living/carbon/human/H) - return 0 + if(H.movement_type & FLYING) + return TRUE + return FALSE //////////////// //Tail Wagging// @@ -2438,21 +2443,24 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) //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 +/datum/species/proc/GiveSpeciesFlight(mob/living/carbon/human/H, all_wings = FALSE) + if(flying_species) //grant them the choice of all wings if they don't have them + all_wings = TRUE 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 + if(all_wings) //give them the full list of wing choices to pick from, typically if they drink a second flight potion + wingslist = SPECIES_WINGS_ALL else - wingslist = wings_icons + //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) 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 db2e574d72..703bd76009 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -70,6 +70,7 @@ to_chat(H, "You feel drained!") if(H.blood_volume < (BLOOD_VOLUME_BAD*H.blood_ratio)) Cannibalize_Body(H) + ..() /datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H) var/list/limbs_to_consume = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - H.get_missing_limbs()