anchor.diff:  	for(var/obj/item/device/radio/R in radios)
   		var/turf/speaker = get_turf(R)
   		if(speaker)
  -			for(var/turf/T in view(R.canhear_range,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
  
positive.code: 
  	var/turf/T = get_turf(source)
  	var/list/hear = list()
  	var/list/range = view(R, T)
  
  	//debug_mob += range.len
  	for(var/A in range)
  		if(isturf(A))
  			continue
  		if(ismob(A))
  			var/mob/M = A
  			if(M.client)
  				hear += M
  		else if(istype(A, /obj/item/device/radio))
  			hear += A
  		hear += recursive_mob_check(A)
  	//world.log << "NEW: [debug_mob]"
  	//debug_mob = 0
  
  	return hear
  
  
negative.code: // It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects,
  // being unable to hear people due to being in a box within a bag.
  
  /proc/recursive_mob_check(var/atom/O,  var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_radio = 1)
  
  	//debug_mob += O.contents.len
  	if(!recursion_limit)
  		return L
  	for(var/atom/A in O)
  		if(isturf(A))
  			continue
  		if(ismob(A))
  			var/mob/M = A
  			if(client_check && !M.client)
  				L = recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio)
  				continue
  			if(sight_check && !isInSight(A, O))
  				continue
  			L += M
  			//world.log << "[recursion_limit] = [M] - [get_turf(M)] - ([M.x], [M.y], [M.z])"
  
  		else if(include_radio && istype(A, /obj/item/device/radio))
  			if(sight_check && !isInSight(A, O))
  				continue
  			L += A
  		L = recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio)
  	return L
  
  // The old system would loop through lists for a total of 5000 per function call, in an empty server.
  