anchor.diff:  		ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly.
   	return
   
  +// In darkness over a certain threshold, ghosts become slightly visible for the spooky value.
  +/mob/dead/observer/proc/amInDarkPlace()
  +	var/turf/simulated/T = get_turf(src)
  +	if(!istype(T))
  +		return 0
  +	if(T.lighting_lumcount <= GHOST_DARK_CUTOFF)
  +		return 1
  +	return 0
  +
  +/mob/dead/observer/proc/updateSpookyAlpha()
  +	if(amInDarkPlace())
  +		alpha=GHOST_DARK_ALPHA
  +		invisibility=0
  +	else
  +		alpha=GHOST_LIGHT_ALPHA
  +		invisibility=INVISIBILITY_OBSERVER
   
   /mob/dead/observer/Move(NewLoc, direct)
   	dir = direct
  
positive.code: 		loc = NewLoc
  		for(var/obj/effect/step_trigger/S in NewLoc)
  			S.HasEntered(src)
  
  		return
  	loc = get_turf(src) //Get out of closets and such as a ghost
  	if((direct & NORTH) && y < world.maxy)
  
negative.code: 
  	for(var/obj/effect/step_trigger/S in locate(x, y, z))	//<-- this is dumb
  		S.HasEntered(src)
  	updateSpookyAlpha()
  /mob/dead/observer/examine()
  	if(usr)
  		usr << desc
  