anchor.diff:  		forceMove(get_turf(found_bloodpool))
   		playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1)
   		visible_message("<span class='danger'>And springs back out!</span>")
  -
  -
  -/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/blood_spray()
  -	visible_message("<span class='danger'>[src] sprays a stream of gore!</span>")
  -	var/turf/E = get_edge_target_turf(src, src.dir)
  -	var/range = 10
  -	var/turf/previousturf = get_turf(src)
  -	for(var/turf/J in getline(src,E))
  -		if(!range)
  -			break
  -		new /obj/effect/temp_visual/dir_setting/bloodsplatter(previousturf, get_dir(previousturf, J))
  -		if(!previousturf.CanAtmosPass(J))
  -			break
  -		playsound(J,'sound/effects/splat.ogg', 100, 1, -1)
  -		new /obj/effect/decal/cleanable/blood(J)
  -		range--
  -		previousturf = J
  -		sleep(1)
  +		blood_enrage()
  +		return TRUE
  +	return FALSE
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/blood_enrage(var/boost_time = 30)
  +	enrage_till = world.time + boost_time
  +	retreat_distance = null
  +	minimum_distance = 1
  +	change_move_delay(3.75)
  +	var/newcolor = rgb(149, 10, 10)
  +	add_atom_colour(newcolor, TEMPORARY_COLOUR_PRIORITY)
  +	var/datum/callback/cb = CALLBACK(src, .proc/blood_enrage_end)
  +	addtimer(cb, boost_time)
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/blood_enrage_end(var/newcolor = rgb(149, 10, 10))
  +	retreat_distance = initial(retreat_distance)
  +	minimum_distance = initial(minimum_distance)
  +	change_move_delay()
  +	remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, newcolor)
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/is_enraged()
  +	return (enrage_till > world.time)
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/change_move_delay(var/newmove = initial(move_to_delay))
  +	move_to_delay = newmove
  +	handle_automated_action() // need to recheck movement otherwise move_to_delay won't update until the next checking aka will be wrong speed for a bit
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/get_pools(turf/T, range)
  +	. = list()
  +	for(var/obj/effect/decal/cleanable/nearby in view(T, range))
  +		if(nearby.can_bloodcrawl_in())
  +			. += nearby
  +
  +/obj/effect/decal/cleanable/blood/bubblegum
  +	bloodiness = 0
  +
  +/obj/effect/decal/cleanable/blood/bubblegum/can_bloodcrawl_in()
  +	return TRUE
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/hallucination_charge_around(var/times = 4, var/delay = 6, var/chargepast = 0, var/useoriginal = 1)
  +	var/startingangle = rand(1, 360)
  +	if(!target)
  +		return
  +	var/turf/chargeat = get_turf(target)
  +	var/srcplaced = 0
  +	for(var/i = 1 to times)
  +		var/ang = (startingangle + 360/times * i)
  +		if(!chargeat)
  +			return
  +		var/turf/place = locate(chargeat.x + cos(ang) * times, chargeat.y + sin(ang) * times, chargeat.z)
  +		if(!place)
  +			continue
  +		if(!srcplaced && useoriginal)
  +			forceMove(place)
  +			srcplaced = 1
  +			continue
  +		var/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/B = new /mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination(src.loc)
  +		B.forceMove(place)
  +		INVOKE_ASYNC(B, .proc/charge, chargeat, delay, chargepast)
  +	if(useoriginal)
  +		charge(chargeat, delay, chargepast)
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination
  +	name = "bubblegum's hallucination"
  +	desc = "Is that really just a hallucination?"
  +	health = 1
  +	maxHealth = 1
  +	alpha = 127.5
  +	crusher_loot = null
  +	loot = null
  +	medal_type = null
  +	score_type = null
  +	deathmessage = "Explodes into a pool of blood!"
  +	deathsound = 'sound/effects/splat.ogg'
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/Initialize()
  +	..()
  +	toggle_ai(AI_OFF)
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/charge()
  +	..()
  +	qdel(src)
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/Destroy()
  +	new /obj/effect/decal/cleanable/blood(get_turf(src))
  +	. = ..()
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/CanPass(atom/movable/mover, turf/target)
  +	if(istype(mover, /mob/living/simple_animal/hostile/megafauna/bubblegum)) // hallucinations should not be stopping bubblegum or eachother
  +		return 1
  +	return ..()
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/Life()
  +	return
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
  +	return
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/OpenFire()
  +	return
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/AttackingTarget()
  +	return
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/try_bloodattack()
  +	return
  +
  +/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/grant_achievement(medaltype,scoretype)
  +	return
   
   /mob/living/simple_animal/hostile/megafauna/bubblegum/proc/slaughterlings()
   	visible_message("<span class='danger'>[src] summons a shoal of slaughterlings!</span>")
  -	for(var/obj/effect/decal/cleanable/blood/H in range(src, 10))
  -		if(prob(25))
  -			new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter(H.loc)
  +	var/max_amount = 6
  +	for(var/H in get_pools(get_turf(src), 1))
  +		if(!max_amount)
  +			break
  +		max_amount--
  +		var/obj/effect/decal/cleanable/blood/B = H
  +		new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter(B.loc)
  +	return max_amount
   
   /mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter
   	name = "slaughterling"
  
positive.code: /mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter/CanPass(atom/movable/mover, turf/target)
  	if(istype(mover, /mob/living/simple_animal/hostile/megafauna/bubblegum))
  		return 1
  	return 0
  
  #undef MEDAL_PREFIX
  
negative.code: 	desc = "You're not quite sure how a signal can be bloody."
  	invisibility = 100
  
  /mob/living/simple_animal/hostile/megafauna/bubblegum/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
  	. = ..()
  	if(. > 0 && prob(25))
  		var/obj/effect/decal/cleanable/blood/gibs/bubblegum/B = new /obj/effect/decal/cleanable/blood/gibs/bubblegum(loc)
  		if(prob(40))
  			step(B, pick(GLOB.cardinals))
  		else
  			B.setDir(pick(GLOB.cardinals))
  
  /obj/effect/decal/cleanable/blood/gibs/bubblegum
  	name = "thick blood"
  	desc = "Thick, splattered blood."
  	random_icon_states = list("gib3", "gib5", "gib6")
  	bloodiness = 20
  
  /obj/effect/decal/cleanable/blood/gibs/bubblegum/can_bloodcrawl_in()
  	return TRUE
  
  /mob/living/simple_animal/hostile/megafauna/bubblegum/OpenFire()
  	anger_modifier = CLAMP(((maxHealth - health)/60),0,20)
  	if(charging)
  		return
  	ranged_cooldown = world.time + 50
  	if(!try_bloodattack())
  		blood_warp()
  
  	if(health > maxHealth * 0.5)
  		if(prob(50 + anger_modifier))
  			charge(delay = 6)
  			charge(delay = 4) // The FitnessGram Pacer Test is a multistage aerobic capacity test that progressively gets more difficult as it continues.
  			charge(delay = 2)
  			SetRecoveryTime(15)
  		else
  			hallucination_charge_around(times = 6, delay = 10 - anger_modifier / 5)
  			SetRecoveryTime(10)
  	else
  		if(prob(50 - anger_modifier))
  			hallucination_charge_around(times = 4, delay = 9)
  			hallucination_charge_around(times = 4, delay = 8)
  			hallucination_charge_around(times = 4, delay = 7)
  			SetRecoveryTime(15)
  		else
  			for(var/i = 1 to 5)
  				INVOKE_ASYNC(src, .proc/hallucination_charge_around, 2, 10, 2, 0)
  				sleep(5)
  			SetRecoveryTime(10)
  
  /mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize()
  	. = ..()
  	if(istype(src, /mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination))
  		return
  	for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_living_list)
  		if(B != src)
  			return INITIALIZE_HINT_QDEL //There can be only one
  	var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
  