Files
Aurora.3/code/modules/mob/death.dm
Matt Atlas 556f1aa86f Fullscreen overlay rework, full-black unconsciousness overlay, overlay fadeout animations + more. (#10053)
Ported the clickcatcher from tg/bay. You can now click black spots to turn. Isn't that handy, especially with vision cones.

    Reworked fullscreen overlays into an easier and better system, courtesy of PsiOmegaDelta.

    Similiarly, added fadeout animations to all pain overlays, plus unconsciousness.

    Fixed the vampire frenzy overlay never showing.

    Unconsciousness is now FULL darkness.

    Flashing mobs is now an inbuilt proc.
2020-10-02 08:53:14 +03:00

115 lines
2.8 KiB
Plaintext

//This is the proc for gibbing a mob. Cannot gib ghosts.
//added different sort of gibs and animations. N
/mob/proc/gib(anim="gibbed-m",do_gibs)
death(1)
transforming = 1
canmove = 0
icon = null
invisibility = 101
update_canmove()
dead_mob_list -= src
var/atom/movable/overlay/animation = null
animation = new(loc)
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
flick(anim, animation)
if(do_gibs)
gibs(loc, viruses, dna, get_gibs_type())
QDEL_IN(animation, 15)
QDEL_IN(src, 15)
/mob/proc/get_gibs_type()
return /obj/effect/gibspawner/generic
//This is the proc for turning a mob into ash. Mostly a copy of gib code (above).
//Originally created for wizard disintegrate. I've removed the virus code since it's irrelevant here.
//Dusting robots does not eject the MMI, so it's a bit more powerful than gib() /N
/mob/proc/dust(anim="dust-m",remains=/obj/effect/decal/cleanable/ash, iconfile = 'icons/mob/mob.dmi')
death(1)
if (istype(loc, /obj/item/holder))
var/obj/item/holder/H = loc
H.release_mob()
var/atom/movable/overlay/animation = null
transforming = 1
canmove = 0
icon = null
invisibility = 101
animation = new(loc)
animation.icon_state = "blank"
animation.icon = iconfile
animation.master = src
flick(anim, animation)
new remains(loc)
dead_mob_list -= src
QDEL_IN(animation, 15)
QDEL_IN(src, 15)
/mob/proc/death(gibbed,deathmessage="seizes up and falls limp...", messagerange = world.view)
if(stat == DEAD)
return 0
facing_dir = null
if(!gibbed && deathmessage != "no message") // This is gross, but reliable. Only brains use it.
src.visible_message("<b>\The [src.name]</b> [deathmessage]", range = messagerange)
exit_vr()
stat = DEAD
update_canmove()
dizziness = 0
jitteriness = 0
layer = MOB_LAYER
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
see_in_dark = 8
see_invisible = SEE_INVISIBLE_LEVEL_TWO
drop_r_hand()
drop_l_hand()
if(healths)
healths.overlays.Cut() // This is specific to humans but the relevant code is here; shouldn't mess with other mobs.
if("health7" in icon_states(healths.icon))
healths.icon_state = "health7"
timeofdeath = world.time
if (isanimal(src))
set_death_time(ANIMAL, world.time)
else if (ispAI(src) || isDrone(src))
set_death_time(MINISYNTH, world.time)
else if (isliving(src))
set_death_time(CREW, world.time)//Crew is the fallback
if(mind)
mind.store_memory("Time of death: [worldtime2text()]", 0)
living_mob_list -= src
dead_mob_list |= src
update_icon()
if(SSticker.mode)
SSticker.mode.check_win()
return 1
/mob/proc/exit_vr()
// If we have a remotely controlled mob, we come back to our body to die properly
if(vr_mob)
vr_mob.body_return()
// Alternatively, if we are the remotely controlled mob, just kick our controller out
if(old_mob)
body_return()