diff --git a/code/__HELPERS/trait_helpers.dm b/code/__HELPERS/trait_helpers.dm index 3e9cb31305d..5c4592a3141 100644 --- a/code/__HELPERS/trait_helpers.dm +++ b/code/__HELPERS/trait_helpers.dm @@ -228,6 +228,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_MEPHEDRONE_ADAPTED "mephedrone_adapted" // Trait that changes the ending effects of twitch leaving your system #define TRAIT_NOKNOCKDOWNSLOWDOWN "noknockdownslowdown" //If this person has this trait, they are not slowed via knockdown, but they can be hit by bullets like a self knockdown #define TRAIT_CAN_STRIP "can_strip" // This mob can strip other mobs. +#define TRAIT_CLING_BURSTING "cling_bursting" // This changeling is about to burst into a headslug, block cremation / gibber to prevent nullspace issues #define TRAIT_I_WANT_BRAINS "mob_zombie" // A general trait for tracking if the mob is a zombie. #define TRAIT_ABSTRACT_HANDS "abstract_hands" // Mobs with this trait can only pick up abstract items. #define TRAIT_SLOW_GRABBER "slow_grabber" // Adds a 1.5 * CLICK_CD_MELEE delay to upgrading into a aggressive grab. diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 69f976fca95..a1f5533f8d2 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -92,6 +92,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_MEPHEDRONE_ADAPTED" = TRAIT_MEPHEDRONE_ADAPTED, "TRAIT_NOKNOCKDOWNSLOWDOWN" = TRAIT_NOKNOCKDOWNSLOWDOWN, "TRAIT_CAN_STRIP" = TRAIT_CAN_STRIP, + "TRAIT_CLING_BURSTING" = TRAIT_CLING_BURSTING, "TRAIT_I_WANT_BRAINS" = TRAIT_I_WANT_BRAINS, "TRAIT_ABSTRACT_HANDS" = TRAIT_ABSTRACT_HANDS, "TRAIT_SLOW_GRABBER" = TRAIT_SLOW_GRABBER, diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 194ad6dd440..ba755ab3555 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -472,7 +472,10 @@ GLOBAL_LIST_EMPTY(crematoriums) M.show_message("You hear a hollow crackle.", EMOTE_VISIBLE) return - + for(var/mob/living/M in search_contents_for(/mob/living)) //search for this for funny cling shenaigins first. + if(HAS_TRAIT(M, TRAIT_CLING_BURSTING)) + visible_message("The crematorium fails to start, something big is blocking the pipes!") + return for(var/mob/M in viewers(src)) M.show_message("You hear a roar as the crematorium activates.", EMOTE_VISIBLE) diff --git a/code/modules/antagonists/changeling/powers/become_headslug.dm b/code/modules/antagonists/changeling/powers/become_headslug.dm index c6e87864784..09cc8190121 100644 --- a/code/modules/antagonists/changeling/powers/become_headslug.dm +++ b/code/modules/antagonists/changeling/powers/become_headslug.dm @@ -17,6 +17,7 @@ ..() /datum/action/changeling/headslug/sting_action(mob/living/user) + ADD_TRAIT(user, TRAIT_CLING_BURSTING, "last_resort") user.Weaken(30 SECONDS) user.do_jitter_animation(1000, -1) // jitter until they are gibbed user.visible_message("A loud crack erupts from [user], followed by a hiss.") @@ -30,6 +31,11 @@ /datum/action/changeling/headslug/proc/become_headslug(mob/user) var/datum/mind/M = user.mind var/list/organs = user.get_organs_zone("head", 1) + if(isobj(user.loc)) + var/obj/thing_to_break = user.loc + user.forceMove(get_turf(user)) // Get them outside of it before it breaks, to prevent issues / so they burst out of it dramatically + thing_to_break.visible_message("[user] violently explodes out of [thing_to_break], breaking it!") + thing_to_break.obj_break(BRUTE) for(var/obj/item/organ/internal/I in organs) I.remove(user, TRUE) diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 3ebf97c64ec..8ad5a5a81ce 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -233,6 +233,10 @@ visible_message("You hear a loud metallic grinding sound.") return + if(HAS_TRAIT(occupant, TRAIT_CLING_BURSTING)) + visible_message("[src] jams up as [occupant]'s corpse rapidly grows in size...") + return + use_power(1000) visible_message("You hear a loud squelchy grinding sound.")