anchor.diff:  	var/timeToRun
   	var/hash
   	var/list/flags
  -	var/spent = FALSE //set to true right before running.
  +	var/spent = 0 //time we ran the timer.
   	var/name //for easy debugging.
   	//cicular doublely linked list
   	var/datum/timedevent/next
  
positive.code: 			if (!callBack)
  				qdel(timer)
  				bucket_resolution = null //force bucket recreation
  				CRASH("Invalid timer: [timer] timer.timeToRun=[timer.timeToRun]||QDELETED(timer)=[QDELETED(timer)]||world.time=[world.time]||head_offset=[head_offset]||practical_offset=[practical_offset]||timer.spent=[timer.spent]")
  
  			if (!timer.spent)
  				spent += timer
  				timer.spent = TRUE
  				callBack.InvokeAsync()
  				last_invoke_tick = world.time
  
  
negative.code: 		SStimer.timer_id_dict["timerid" + num2text(id, 8)] = src
  
  	name = "Timer: " + num2text(id, 8) + ", TTR: [timeToRun], Flags: [jointext(bitfield2list(flags, list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT")), ", ")], callBack: \ref[callBack], callBack.object: [callBack.object]\ref[callBack.object]([getcallingtype()]), callBack.delegate:[callBack.delegate]([callBack.arguments ? callBack.arguments.Join(", ") : ""])"
  
  	if (spent)
  		CRASH("HOLY JESUS. WHAT IS THAT? WHAT THE FUCK IS THAT?")
  
  	if (callBack.object != GLOBAL_PROC)
  		LAZYADD(callBack.object.active_timers, src)
  