anchor.diff:  			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()
  -			forcemoved = TRUE
  -			hitscan_last = loc
   		else if(T != loc)
   			step_towards(src, T)
  -			hitscan_last = loc
  +			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
  
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: 	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/tracer_type
  	var/muzzle_type
  	var/impact_type
  