anchor.diff:  
   	var/turf/T = get_turf(source)
   	var/list/hear = list()
  -	var/list/range = view(R, T)
  -
  -	//debug_mob += range.len
  +	var/list/range = hear(R, T)
  +
   	for(var/A in range)
  -		if(isturf(A))
  +		if(isturf(A) || A == source)
   			continue
   		if(ismob(A))
   			var/mob/M = A
   			if(M.client)
   				hear += M
  +			//world.log << "Start = [M] - [get_turf(M)] - ([M.x], [M.y], [M.z])"
   		else if(istype(A, /obj/item/device/radio))
   			hear += A
  -		hear += recursive_mob_check(A)
  -	//world.log << "NEW: [debug_mob]"
  -	//debug_mob = 0
  +		hear = recursive_mob_check(A, hear, 3, 1, 0, 1)
   
   	return hear
   
  
positive.code: 
  	return 0 //not in range and not telekinetic
  
  
  //Magic constants obtained by using linear regression on right-angled triangles of sides 0<x<1, 0<y<1
  //They should approximate pythagoras theorem well enough for our needs.
  
negative.code: 	for(var/obj/item/device/radio/R in radios)
  		var/turf/speaker = get_turf(R)
  		if(speaker)
  			for(var/turf/T in hear(R.canhear_range,speaker))
  				speaker_coverage += T
  
  	// Try to find all the players who can hear the message
  