anchor.diff:  	var/hitscan = FALSE		//Whether this is hitscan. If it is, speed is basically ignored.
   	var/list/beam_segments	//assoc list of datum/point or datum/point/vector, start = end. Used for hitscan effect generation.
   	var/datum/point/beam_index
  -	var/turf/hitscan_last	//last turf touched during hitscanning.
   	var/tracer_type
   	var/muzzle_type
   	var/impact_type
  
positive.code: 		process_homing()
  	var/forcemoved = FALSE
  	for(var/i in 1 to SSprojectiles.global_iterations_per_move)
  		if(QDELETED(src))
  			return
  		trajectory.increment(trajectory_multiplier)
  		var/turf/T = trajectory.return_turf()
  		if(!istype(T))
  
negative.code: 			forceMove(T)
  			trajectory_ignore_forcemove = FALSE
  			after_z_change(old, loc)
  			forcemoved = TRUE
  			if(QDELETED(src))
  				return
  			if(!hitscanning)
  				pixel_x = trajectory.return_px()
  				pixel_y = trajectory.return_py()
  		else if(T != loc)
  			step_towards(src, T)
  			if(QDELETED(src))
  				return
  	if(!hitscanning && !forcemoved)
  		pixel_x = trajectory.return_px() - trajectory.mpx * trajectory_multiplier * SSprojectiles.global_iterations_per_move
  		pixel_y = trajectory.return_py() - trajectory.mpy * trajectory_multiplier * SSprojectiles.global_iterations_per_move
  