anchor.diff:  		return TRUE
   	stop_autofiring()
   	return FALSE
  +
  +/// Reset for our windup, resetting everything back to initial values after a variable set amount of time (determined by var/windup_spindown).
  +/datum/component/automatic_fire/proc/windup_reset(deltimer)
  +	current_windup_reduction = initial(current_windup_reduction)
  +	if(deltimer && timerid)
  +		deltimer(timerid)
   
   // Gun procs.
   
  
positive.code: 	var/autofire_shot_delay = 0.3 SECONDS //Time between individual shots.
  	var/mouse_status = AUTOFIRE_MOUSEUP //This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar.
  
  	COOLDOWN_DECLARE(next_shot_cd)
  
  /datum/component/automatic_fire/Initialize(_autofire_shot_delay)
  	. = ..()
  	if(!isgun(parent))
  		return COMPONENT_INCOMPATIBLE
  	var/obj/item/gun = parent
  	RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/wake_up)
  	if(_autofire_shot_delay)
  		autofire_shot_delay = _autofire_shot_delay
  	if(autofire_stat == AUTOFIRE_STAT_IDLE && ismob(gun.loc))
  		var/mob/user = gun.loc
  		wake_up(src, user)
  
negative.code: 		return FALSE
  	shooter.face_atom(target)
  	var/next_delay = autofire_shot_delay
  	if(windup_autofire)
  		next_delay = clamp(next_delay - current_windup_reduction, round(autofire_shot_delay * windup_autofire_cap), autofire_shot_delay)
  		current_windup_reduction = (current_windup_reduction + round(autofire_shot_delay * windup_autofire_reduction_multiplier))
  		timerid = addtimer(CALLBACK(src, .proc/windup_reset, FALSE), windup_spindown, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
  	if(HAS_TRAIT(shooter, TRAIT_DOUBLE_TAP))
  		next_delay = round(next_delay * 0.5)
  	COOLDOWN_START(src, next_shot_cd, next_delay)
  