Recovered crew/Thanatorenasia bodies are shown as "revivable" when orbited in a morgue tray (+makes it shake) (#95602)

## About The Pull Request

If you orbit a recovered crewmember or thanatorenasia body situated in a
morgue, the indicated will change from red to green, indicating the body
is revivable

Additionally, orbiting a recovered crewmember or thanatorenasia body
will cause morgues or bodybags to shake. This is an extension of the
existing behavior where orbiting the body causes it to twitch.

## Why It's Good For The Game

Allows doctors to store bodies in a safe place while they wait for a
ghost to occupy it, also means you don't have to repeatedly defib them.

## Changelog

🆑 Melbert
qol: Recovered crew/Thanatorenasia bodies in morgue trays change the
indicator to green when a ghost is orbiting them (to allow ghosts to
signal they want it to be revived)
qol: Recovered crew/Thanatorenasia bodies now cause morgue trays /
bodybags to shake when orbited, much like how the body itself shakes
when orbited (to allow ghosts to signal they want it to be revived)
/🆑
This commit is contained in:
MrMelbert
2026-04-03 15:56:37 -05:00
committed by GitHub
parent ca4366c1a9
commit 024a276dcc
4 changed files with 25 additions and 13 deletions
+17 -10
View File
@@ -315,18 +315,25 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
return
for(var/mob/living/occupant as anything in stored_living)
if(occupant.stat == DEAD)
if(iscarbon(occupant))
var/mob/living/carbon/carbon_occupant = occupant
if(!carbon_occupant.can_defib_client())
continue
else
if(HAS_TRAIT(occupant, TRAIT_SUICIDED) || HAS_TRAIT(occupant, TRAIT_BADDNA) || (!occupant.key && !occupant.get_ghost(FALSE, TRUE)))
continue
morgue_state = MORGUE_HAS_REVIVABLE
return
if(occupant_revivable(occupant))
morgue_state = MORGUE_HAS_REVIVABLE
return
morgue_state = MORGUE_ONLY_BRAINDEAD
/obj/structure/bodycontainer/morgue/proc/occupant_revivable(mob/living/occupant)
if(occupant.stat != DEAD)
return TRUE
if(HAS_TRAIT(occupant, TRAIT_GHOSTROLE_ON_REVIVE) && length(occupant.get_all_orbiters()))
return TRUE
if(iscarbon(occupant))
var/mob/living/carbon/carbon_occupant = occupant
return carbon_occupant.can_defib_client()
if(HAS_TRAIT(occupant, TRAIT_SUICIDED))
return FALSE
if(!occupant.key && !occupant.get_ghost(FALSE, TRUE))
return FALSE
return TRUE
/obj/structure/bodycontainer/morgue/proc/handle_bodybag_enter(obj/structure/closet/body_bag/arrived_bag)
if(!arrived_bag.tag_name)
return