anchor.diff:  					visible_message("<span class='hierophant'>\"Mx gerrsx lmhi.\"</span>")
   					blinking = TRUE
   					var/oldcolor = color
  -					animate(src, color = "#660099", time = 10)
  +					animate(src, color = "#660099", time = 6)
  +					sleep(6)
   					var/list/targets = ListTargets()
   					var/list/cardinal_copy = GLOB.cardinal.Copy()
   					while(health && targets.len && cardinal_copy.len)
   						var/mob/living/pickedtarget = pick(targets)
  -						if(targets.len > 4)
  +						if(targets.len >= cardinal_copy.len)
   							pickedtarget = pick_n_take(targets)
   						if(!istype(pickedtarget) || pickedtarget.stat == DEAD)
   							pickedtarget = target
  +							if(QDELETED(pickedtarget) || (istype(pickedtarget) && pickedtarget.stat == DEAD))
  +								break //main target is dead and we're out of living targets, cancel out
   						var/obj/effect/temp_visual/hierophant/chaser/C = new /obj/effect/temp_visual/hierophant/chaser(loc, src, pickedtarget, chaser_speed, FALSE)
   						C.moving = 3
   						C.moving_dir = pick_n_take(cardinal_copy)
  -						sleep(10)
  +						sleep(8 + target_slowness)
   					chaser_cooldown = world.time + initial(chaser_cooldown)
   					animate(src, color = oldcolor, time = 8)
   					addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
  
positive.code: 					blinking = FALSE
  			return
  
  	if(prob(10 + (anger_modifier * 0.5)) && get_dist(src, target) > 2)
  		blink(target)
  
  	else if(prob(70 - anger_modifier)) //a cross blast of some type
  		if(prob(anger_modifier)) //at us?
  			if(prob(anger_modifier * 2) && health < maxHealth * 0.5) //we're super angry do it at all dirs
  				INVOKE_ASYNC(src, .proc/alldir_blasts, src)
  			else if(prob(60))
  				INVOKE_ASYNC(src, .proc/cardinal_blasts, src)
  			else
  				INVOKE_ASYNC(src, .proc/diagonal_blasts, src)
  		else //at them?
  			if(prob(anger_modifier * 2) && health < maxHealth * 0.5 && !target_is_slow) //we're super angry do it at all dirs
  				INVOKE_ASYNC(src, .proc/alldir_blasts, target)
  			else if(prob(60))
  				INVOKE_ASYNC(src, .proc/cardinal_blasts, target)
  			else
  				INVOKE_ASYNC(src, .proc/diagonal_blasts, target)
  	else if(chaser_cooldown < world.time) //if chasers are off cooldown, fire some!
  		var/obj/effect/temp_visual/hierophant/chaser/C = new /obj/effect/temp_visual/hierophant/chaser(loc, src, target, chaser_speed, FALSE)
  		chaser_cooldown = world.time + initial(chaser_cooldown)
  		if((prob(anger_modifier) || target.Adjacent(src)) && target != src)
  			var/obj/effect/temp_visual/hierophant/chaser/OC = new /obj/effect/temp_visual/hierophant/chaser(loc, src, target, max(1.5, 5 - anger_modifier * 0.07), FALSE)
  			OC.moving = 4
  			OC.moving_dir = pick(GLOB.cardinal - C.moving_dir)
  	else //just release a burst of power
  		INVOKE_ASYNC(src, .proc/burst, get_turf(src))
  
  
negative.code: 			var/blink_counter = 1 + round(anger_modifier * 0.08)
  			switch(pick(possibilities))
  				if("blink_spam") //blink either once or multiple times.
  					if(health < maxHealth * 0.5 && blink_counter > 1)
  						visible_message("<span class='hierophant'>\"Mx ampp rsx iwgeti.\"</span>")
  						var/oldcolor = color
  						animate(src, color = "#660099", time = 6)
  						sleep(6)
  						while(health && !QDELETED(target) && blink_counter)
  							if(loc == target.loc || loc == target) //we're on the same tile as them after about a second we can stop now
  								break
  							blink_counter--
  							blinking = FALSE
  							blink(target)
  							blinking = TRUE
  							sleep(4 + target_slowness)
  						animate(src, color = oldcolor, time = 8)
  						addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
  						sleep(8)
  