diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index b48d5301670..9842c8e80ee 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -363,6 +363,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_NODEATH "nodeath" #define TRAIT_NOHARDCRIT "nohardcrit" #define TRAIT_NOSOFTCRIT "nosoftcrit" +#define TRAIT_NO_OXYLOSS_PASSOUT "nooxylosspassout" /// Makes someone show up as mindshielded on sechuds. Does NOT actually make them unconvertable - See TRAIT_UNCONVERTABLE for that #define TRAIT_MINDSHIELD "mindshield" /// Makes it impossible for someone to be converted by cult/revs/etc. diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 27d80d6e540..63ada68f132 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -430,6 +430,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NOMOBSWAP" = TRAIT_NOMOBSWAP, "TRAIT_HEAD_ATMOS_SEALED" = TRAIT_HEAD_ATMOS_SEALED, "TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT, + "TRAIT_NO_OXYLOSS_PASSOUT" = TRAIT_NO_OXYLOSS_PASSOUT, "TRAIT_NO_AUGMENTS" = TRAIT_NO_AUGMENTS, "TRAIT_NO_BLOOD_OVERLAY" = TRAIT_NO_BLOOD_OVERLAY, "TRAIT_NO_BREATHLESS_DAMAGE" = TRAIT_NO_BREATHLESS_DAMAGE, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 0321d4da3bf..737658cb8db 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -228,6 +228,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE, "TRAIT_NOMOBSWAP" = TRAIT_NOMOBSWAP, "TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT, + "TRAIT_NO_OXYLOSS_PASSOUT" = TRAIT_NO_OXYLOSS_PASSOUT, "TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER, "TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED, "TRAIT_OVERDOSEIMMUNE" = TRAIT_OVERDOSEIMMUNE, diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 53eae1f2f5f..2649c2fcdec 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -273,6 +273,7 @@ TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE, TRAIT_ANALGESIA, + TRAIT_NO_OXYLOSS_PASSOUT, ) // fight till your last breath /datum/mutation/hulk/superhuman/on_life(seconds_per_tick, times_fired) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 88aed972e9c..66b9f9e6d9b 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -558,7 +558,7 @@ */ /mob/living/carbon/proc/check_passout() var/mob_oxyloss = get_oxy_loss() - if(mob_oxyloss >= OXYLOSS_PASSOUT_THRESHOLD) + if(mob_oxyloss >= OXYLOSS_PASSOUT_THRESHOLD && !HAS_TRAIT(src, TRAIT_NO_OXYLOSS_PASSOUT)) if(!HAS_TRAIT_FROM(src, TRAIT_KNOCKEDOUT, OXYLOSS_TRAIT)) ADD_TRAIT(src, TRAIT_KNOCKEDOUT, OXYLOSS_TRAIT) else if(mob_oxyloss < OXYLOSS_PASSOUT_THRESHOLD) diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm index 02c5553cb32..1100f4ba382 100644 --- a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm @@ -492,6 +492,7 @@ Basically, we fill the time between now and 2s from now with hands based off the TRAIT_NOHARDCRIT, TRAIT_NOSOFTCRIT, TRAIT_STABLEHEART, + TRAIT_NO_OXYLOSS_PASSOUT, ) /datum/reagent/inverse/penthrite/on_mob_dead(mob/living/carbon/affected_mob, seconds_per_tick) @@ -508,7 +509,7 @@ Basically, we fill the time between now and 2s from now with hands based off the affected_mob.update_sight() REMOVE_TRAIT(affected_mob, TRAIT_KNOCKEDOUT, STAT_TRAIT) REMOVE_TRAIT(affected_mob, TRAIT_KNOCKEDOUT, CRIT_HEALTH_TRAIT) //Because these are normally updated using set_health() - but we don't want to adjust health, and the addition of NOHARDCRIT blocks it being added after, but doesn't remove it if it was added before - REMOVE_TRAIT(affected_mob, TRAIT_KNOCKEDOUT, OXYLOSS_TRAIT) //Prevents the user from being knocked out by oxyloss + REMOVE_TRAIT(affected_mob, TRAIT_KNOCKEDOUT, OXYLOSS_TRAIT) //As above, removes unconsciousness if it was added before the reagent was administered affected_mob.set_resting(FALSE) //Please get up, no one wants a deaththrows juggernaught that lies on the floor all the time affected_mob.SetAllImmobility(0) affected_mob.grab_ghost(force = FALSE) //Shoves them back into their freshly reanimated corpse.