anchor.diff:  /datum/component/crawl/proc/can_start_crawling(atom/target, mob/living/user)
   	if(!user.Adjacent(target))
   		return FALSE
  -	return TRUE
  +	return !user.notransform
   
   /datum/component/crawl/proc/can_stop_crawling(atom/target, mob/living/user)
  -	return TRUE
  +	return !user.notransform
  +
  +/datum/component/crawl/proc/on_gain(mob/living/user)
  +	to_chat(user, gain_message)
  +
  +/datum/component/crawl/proc/on_loss(mob/living/user)
  +	to_chat(user, loss_message)
   
   /datum/component/crawl/proc/start_crawling(atom/target, mob/living/user)
   	holder = new(get_turf(user))
  
positive.code: 	holder = null
  
  /datum/component/crawl/RemoveComponent()
  	if(holder)
  		var/mob/living/M = parent
  		M.forceMove(get_turf(holder))
  		qdel(holder)
  	return ..()
  
  ////////////BLOODCRAWL
  /datum/component/crawl/blood
  	crawling_types = list(/obj/effect/decal/cleanable/blood, /obj/effect/decal/cleanable/xenoblood)
  
  /datum/component/crawl/blood/start_crawling(atom/target, mob/living/user)
  	user.visible_message("<span class='warning'>[user] sinks into the pool of blood!</span>")
  	playsound(get_turf(target), 'sound/magic/enter_blood.ogg', 100, 1, -1)
  	..()
  
  /datum/component/crawl/blood/stop_crawling(atom/target, mob/living/user)
  	target.visible_message("<span class='warning'>[target] starts to bubble...</span>")
  	if(!do_after(user, 20, target = target))
  		return
  	if(!target)
  		return
  	..()
  	user.visible_message("<span class='warning'><B>[user] rises out of the pool of blood!</B></span>")
  	playsound(get_turf(target), 'sound/magic/exit_blood.ogg', 100, 1, -1)
negative.code: 	var/list/crawling_types //the types of objects we use to get in and out of crawling
  	var/obj/effect/dummy/crawling/holder
  
  	var/gain_message = "<span class='notice'>Make an issue on github stating what you were doing when this message appeared!</span>"
  	var/loss_message = "<span class='notice'>Make an issue on github stating what you were doing when this message appeared!</span>"
  
  /datum/component/crawl/Initialize()
  	if(!istype(parent, /mob/living))
  		return COMPONENT_INCOMPATIBLE
  	RegisterSignal(parent, COMSIG_ALT_CLICK_ON, .proc/try_crawl)
  	var/mob/living/M = parent
  	on_gain(M)
  
  /datum/component/crawl/proc/try_crawl(atom/target)
  	var/can_crawl = FALSE
  