anchor.diff:  	if(master_controller != src)
   		if(istype(master_controller))
   			Recover()
  -			master_controller.Del()
  +			qdel(master_controller)
   		else
   			init_subtypes(/datum/subsystem, subsystems)
   
   		master_controller = src
   	calculateGCD()
  +
  +/datum/controller/game_controller/Destroy()
  +	..()
  +	return QDEL_HINT_HARDDEL_NOW
   
   
   /*
  
positive.code: */
  /datum/controller/game_controller/proc/calculateGCD()
  	var/GCD
  	for(var/datum/subsystem/SS in subsystems)
  		if(SS.wait)
  			GCD = Gcd(round(SS.wait*10), GCD)
  	GCD = round(GCD)
  	if(GCD < world.tick_lag*10)
  		GCD = world.tick_lag*10
  	processing_interval = GCD/10
  
  /datum/controller/game_controller/proc/setup(zlevel)
  
negative.code: 							if (SS.dynamic_wait)
  								var/oldwait = SS.wait
  								var/GlobalCostDelta = (SSCostPerSecond-(SS.cost/(SS.wait/10)))-1
  								var/NewWait = (SS.cost-SS.dwait_buffer+GlobalCostDelta)*SS.dwait_delta
  								NewWait = NewWait*(world.cpu/100+1)
  								NewWait = MC_AVERAGE(oldwait,NewWait)
  								SS.wait = Clamp(NewWait,SS.dwait_lower,SS.dwait_upper)
  								if (oldwait != SS.wait)
  									calculateGCD()
  							SS.next_fire += SS.wait
  							++SS.times_fired
  							//we caused byond to miss a tick, stop processing for a bit
  							if (startingtick < world.time || start_time+1 < world.timeofday)
  								break
  							sleep(-1)
  
  				cost = MC_AVERAGE(cost, world.timeofday - start_time)
  				if (SubSystemRan)
  					calculateSScost()
  				var/extrasleep = 0
  				if (startingtick < world.time || start_time+1 < world.timeofday)
  					//we caused byond to miss a tick, sleep a bit extra
  					extrasleep += world.tick_lag*2
  				if (world.cpu > 80)
  					extrasleep += extrasleep+processing_interval
  				sleep(processing_interval+extrasleep)
  			else
  				sleep(50)
  
  