anchor.diff:  /obj/machinery/jukebox/disco/process()
   	. = ..()
   	if(active)
  -		for(var/mob/living/dancer in rangers)
  -			if(QDELETED(dancer))
  -				rangers -= dancer
  -				continue
  -			if(!prob(dance_chance) || HAS_TRAIT(dancer, TRAIT_IMMOBILIZED))
  -				continue
  -			dance(dancer)
  +		for(var/mob/living/M in rangers)
  +			if(prob(5+(allowed(M)*4)) && (M.mobility_flags & MOBILITY_MOVE))
  +				dance(M)
  
positive.code: 	anchored = FALSE
  	var/list/spotlights = list()
  	var/list/sparkles = list()
  	/// Precentage change per process of the mob dancing.
  	var/dance_chance = 20
  
  
  /obj/machinery/jukebox/disco/indestructible
  	name = "radiant dance machine mark V"
  
negative.code: 		sleep(1)
  	M.lying_fix()
  
  /obj/machinery/jukebox/disco/proc/dance4(mob/living/M)
  	var/speed = rand(1,3)
  	set waitfor = 0
  	var/time = 30
  	while(time)
  		sleep(speed)
  		for(var/i in 1 to speed)
  			M.setDir(pick(GLOB.cardinals))
  			for(var/mob/living/carbon/NS in rangers)
  				NS.set_resting(!NS.resting, TRUE, TRUE)
  		 time--
  
  /obj/machinery/jukebox/disco/proc/dance5(mob/living/M)
  	animate(M, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0)
  	var/matrix/initial_matrix = matrix(M.transform)
  	for (var/i in 1 to 60)
  		if (!M)
  			return
  		if (i<31)
  			initial_matrix = matrix(M.transform)
  			initial_matrix.Translate(0,1)
  