anchor.diff:  /datum/gas_mixture/proc/remove_ratio(ratio)
   	//Proportionally removes amount of gas from the gas_mixture
   	//Returns: gas_mixture with the gases removed
  +
  +/datum/gas_mixture/proc/copy()
  +	//Creates new, identical gas mixture
  +	//Returns: duplicate gas mixture
   
   /datum/gas_mixture/proc/copy_from(datum/gas_mixture/sample)
   	//Copies variables from sample
  
positive.code: 			temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE)
  		if(temperature_scale > 0)
  			assert_gas("o2")
  			assert_gas("co2")
  			oxygen_burn_rate = OXYGEN_BURN_RATE_BASE - temperature_scale
  			if(procgases["o2"][MOLES] > procgases["plasma"][MOLES]*PLASMA_OXYGEN_FULLBURN)
  				plasma_burn_rate = (procgases["plasma"][MOLES]*temperature_scale)/PLASMA_BURN_RATE_DELTA
  			else
  				plasma_burn_rate = (temperature_scale*(procgases["o2"][MOLES]/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA
  			if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY)
  				procgases["plasma"][MOLES] -= plasma_burn_rate
  				procgases["o2"][MOLES] -= plasma_burn_rate*oxygen_burn_rate
  				procgases["co2"][MOLES] += plasma_burn_rate
  
  				energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate)
  
  
negative.code: 	. = 1
  
  /datum/gas_mixture/remove(amount)
  	var/sum = total_moles()
  	amount = min(amount, sum) //Can not take more air than tile has!
  	if(amount <= 0)
  		return null
  
  	var/list/cached_gases = gases
  	var/datum/gas_mixture/removed = new
  	var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars
  
  	removed.temperature = temperature
  	for(var/id in cached_gases)
  		removed.add_gas(id)
  		removed_gases[id][MOLES] = QUANTIZE((cached_gases[id][MOLES] / sum) * amount)
  		cached_gases[id][MOLES] -= removed_gases[id][MOLES]
  	garbage_collect()
  
  	. = removed
  