anchor.diff:  		sleep(1)
   	M.lying_fix()
   
  -
  -/obj/machinery/jukebox/disco/proc/dance4(mob/living/dancer)
  -	set waitfor = FALSE
  -	for(var/i in 1 to 29)
  -		if(QDELETED(dancer))
  -			return
  -		if(!active)
  -			break
  -		sleep(rand(1, 3))
  -		dancer.setDir(pick(GLOB.cardinals))
  -	dancer.set_resting(FALSE, TRUE, TRUE) // Last pass gets us up.
  -
  +/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)
  -	set waitfor = FALSE
   	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(QDELETED(M))
  +		if (!M)
   			return
  -		if(!active)
  -			break
   		if (i<31)
   			initial_matrix = matrix(M.transform)
   			initial_matrix.Translate(0,1)
  
positive.code: /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)
  
negative.code: 	anchored = FALSE
  	var/list/spotlights = list()
  	var/list/sparkles = list()
  
  /obj/machinery/jukebox/disco/indestructible
  	name = "radiant dance machine mark V"
  