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()