anchor.diff:  	if(path)
   		for(var/i = 1 to round(0.5 * length(path)))
   			path.Swap(i, length(path) - i + 1)
  -	else
  -		path = new()
  +
   	sources = null
   	qdel(open)
   	return path
  
positive.code:  */
  
  /**
   * This is the proc you use whenever you want to have pathfinding more complex than "try stepping towards the thing"
   *
   * Arguments:
   * * caller: The movable atom that's trying to find the path
  
negative.code: /**
   * search() is the proc you call to kick off and handle the actual pathfinding, and kills the pathfind datum instance when it's done.
   *
   * If a valid path was found, it's returned as a list. If invalid or cross-z-level params are entered, or if there's no valid path found, we
   * return null, which [/proc/get_path_to] translates to an empty list (notable for simple bots, who need empty lists)
   */
  /datum/pathfind/proc/search()
  	start = get_turf(caller)
  	if(!start || !end)
  		stack_trace("Invalid A* start or destination")
  		return
  	if(start.z != end.z || start == end ) //no pathfinding between z levels
  		return
  	if(max_distance && (max_distance < get_dist(start, end))) //if start turf is farther than max_distance from end turf, no need to do anything
  		return
  
  	//initialization
  	var/datum/jps_node/current_processed_node = new (start, -1, 0, end)
  