anchor.diff:  
   	var/list/decals
   	var/requires_activation	//add to air processing after initialize?
  +	var/changing_turf = FALSE
   
   /turf/SDQL_update(const/var_name, new_value)
   	if(var_name == "x" || var_name == "y" || var_name == "z")
  
positive.code: 		return
  	if(!use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed
  		return src
  	var/old_blueprint_data = blueprint_data
  
  	SSair.remove_from_active(src)
  
  	var/list/old_checkers = proximity_checkers
  	var/old_ex_level = explosion_level
  	var/old_ex_id = explosion_id
  
  	Destroy()	//❄
  	var/turf/W = new path(src)
  
  	W.proximity_checkers = old_checkers
  	W.explosion_level = old_ex_level
  	W.explosion_id = old_ex_id
  
  	if(!defer_change)
  		W.AfterChange(ignore_air)
  	W.blueprint_data = old_blueprint_data
  	return W
  
  /turf/proc/AfterChange(ignore_air = FALSE) //called after a turf has been replaced in ChangeTurf()
  
negative.code: /turf/proc/Initalize_Atmos(times_fired)
  	CalculateAdjacentTurfs()
  
  /turf/Destroy(force)
  	if(!changing_turf)
  		stack_trace("Incorrect turf deletion")
  	changing_turf = FALSE
  	SSair.remove_from_active(src)
  	visibilityChanged()
  	initialized = FALSE
  	requires_activation = FALSE
  	..()
  	return QDEL_HINT_IWILLGC
  
  /turf/attack_hand(mob/user)
  	user.Move_Pulled(src)
  