anchor.diff:  	var/tracer_type
   	var/muzzle_type
   	var/impact_type
  +
  +	var/turf/last_angle_set_hitscan_store		//last turf we stored a hitscan segment while changing angles. without this you'll have potentially hundreds of segments from a homing projectile or something.
   
   	//Fancy hitscan lighting effects!
   	var/hitscan_light_intensity = 1.5
  
positive.code: 		beam_segments[beam_index] = null	//record start.
  
  /obj/item/projectile/proc/process_hitscan()
  	var/safety = range * 3
  	record_hitscan_start(RETURN_POINT_VECTOR_INCREMENT(src, Angle, MUZZLE_EFFECT_PIXEL_INCREMENT, 1))
  	while(loc && !QDELETED(src))
  		if(paused)
  
negative.code: 		START_PROCESSING(SSprojectiles, src)
  	pixel_move(1, FALSE)	//move it now!
  
  /obj/item/projectile/proc/setAngle(new_angle, hitscan_store_segment = TRUE)	//wrapper for overrides.
  	Angle = new_angle
  	if(!nondirectional_sprite)
  		var/matrix/M = new
  		M.Turn(Angle)
  		transform = M
  	if(fired && hitscan && trajectory && isloc(loc) && (loc != last_angle_set_hitscan_store))
  		last_angle_set_hitscan_store = loc
  		var/datum/point/pcache = trajectory.copy_to()
  		store_hitscan_collision(pcache)
  	if(trajectory)
  		trajectory.set_angle(new_angle)
  	return TRUE
  