anchor.diff:  		return
   	..()
   
  -
  +/**
  + * Getter for vent crawling
  + *
  + * returns TRUE or FALSE, many devices overrides this (like cryo, or vents)
  + * called by relaymove()
  + */
   /obj/machinery/atmospherics/proc/can_crawl_through()
   	return TRUE
   
  +/**
  + * Getter of a list of pipenets
  + *
  + * called in relaymove() to create the image for vent crawling
  + */
   /obj/machinery/atmospherics/proc/returnPipenets()
   	return list()
   
   /obj/machinery/atmospherics/update_remote_sight(mob/user)
   	user.sight |= (SEE_TURFS|BLIND)
   
  -//Used for certain children of obj/machinery/atmospherics to not show pipe vision when mob is inside it.
  +/**
  + * Used for certain children of obj/machinery/atmospherics to not show pipe vision when mob is inside it.
  + */
   /obj/machinery/atmospherics/proc/can_see_pipes()
   	return TRUE
   
  +/**
  + * Update the layer in which the pipe/device is in, that way pipes have consistent layer depending on piping_layer
  + */
   /obj/machinery/atmospherics/proc/update_layer()
   	layer = initial(layer) + (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE
   
  +/**
  + * Called by the RPD.dm pre_attack(), overriden by pipes.dm
  + * Arguments:
  + * * paint_color - color that the pipe will be painted in (colors in hex like #4f4f4f)
  + */
   /obj/machinery/atmospherics/proc/paint(paint_color)
   	return FALSE
  
positive.code: 		if(WEST)
  			setDir(EAST)
  
  //this is called just after the air controller sets up turfs
  /obj/machinery/atmospherics/proc/atmosinit(list/node_connects)
  	if(!node_connects) //for pipes where order of nodes doesn't matter
  		node_connects = getNodeConnects()
  
negative.code: 	layer = initial(layer) + piping_layer / 1000
  	return ..()
  
  /**
   * Check if a node can actually exists by connecting to another machine
   * called on atmosinit()
   * Arguments:
   * * obj/machinery/atmospherics/target - the machine we are connecting to
   * * iteration - the current node we are checking (from 1 to 4)
   */
  /obj/machinery/atmospherics/proc/can_be_node(obj/machinery/atmospherics/target, iteration)
  	return connection_check(target, piping_layer)
  
  /**
   * Find a connecting /obj/machinery/atmospherics in specified direction, called by relaymove()
   * used by ventcrawling mobs to check if they can move inside a pipe in a specific direction
   * Arguments:
   * * direction - the direction we are checking against
   * * prompted_layer - the piping_layer we are inside
   */
  /obj/machinery/atmospherics/proc/findConnecting(direction, prompted_layer)
  	for(var/obj/machinery/atmospherics/target in get_step(src, direction))
  		if(target.initialize_directions & get_dir(target,src))
  			if(connection_check(target, prompted_layer))
  				return target
  
  /**
   * Check the connection between two nodes
   *
   * Check if our machine and the target machine are connectable by both calling isConnectable and by checking that the directions and piping_layer are compatible
   * called by can_be_node() (for building a network) and findConnecting() (for ventcrawling)
   * Arguments:
   * * obj/machinery/atmospherics/target - the machinery we want to connect to
   * * given_layer - the piping_layer we are checking
   */
  /obj/machinery/atmospherics/proc/connection_check(obj/machinery/atmospherics/target, given_layer)
  	if(isConnectable(target, given_layer) && target.isConnectable(src, given_layer) && (target.initialize_directions & get_dir(target,src)))
  		return TRUE
  	return FALSE
  
  /**
   * check if the piping layer are the same on both sides
   * returns TRUE or FALSE if the connection is possible or not
   * Arguments:
   * * obj/machinery/atmospherics/target - the machinery we want to connect to
   * * given_layer - the piping_layer we are connecting to
   */
  /obj/machinery/atmospherics/proc/isConnectable(obj/machinery/atmospherics/target, given_layer)
  	if(isnull(given_layer))
  		given_layer = piping_layer
  