anchor.diff:  		START_PROCESSING(SSprojectiles, src)
   	pixel_move(1, FALSE)	//move it now!
   
  -/obj/item/projectile/proc/setAngle(new_angle)	//wrapper for overrides.
  +/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
  
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: 	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
  