anchor.diff:  /datum/gas_mixture/proc/release_gas_to(datum/gas_mixture/output_air, target_pressure, rate=1)
   	var/output_starting_pressure = output_air.return_pressure()
   	var/input_starting_pressure = return_pressure()
  -	
  +
   	//Need at least 10 KPa difference to overcome friction in the mechanism
   	if(output_starting_pressure >= min(target_pressure,input_starting_pressure-10))
   		return FALSE
   	//Can not have a pressure delta that would cause output_pressure > input_pressure
   	target_pressure = output_starting_pressure + min(target_pressure - output_starting_pressure, (input_starting_pressure - output_starting_pressure)/2)
   	var/temperature_delta = abs(temperature - output_air.temperature)
  -	
  +
   	var/transfer_moles = gas_pressure_calculate(output_air, target_pressure, temperature_delta <= 5)
   
   	//Actually transfer the gas
   	var/datum/gas_mixture/removed = remove(transfer_moles * rate)
  -	
  +
   	if(!removed)
   		return FALSE
   
  
positive.code: 
  	/// The PV/R part in our equation.
  	var/pvr = pv / R_IDEAL_GAS_EQUATION
  	
  	/// x^2 in the quadratic
  	var/a_value = w2/n2
  	/// x^1 in the quadratic
  	var/b_value = ((n1*w2)/n2) + w1 - (pvr*c2/n2)
  	/// x^0 in the quadratic
  	var/c_value = (-1*pvr*c1) + n1 * w1
  	
  	. = gas_pressure_quadratic(a_value, b_value, c_value, lower_limit, upper_limit)
  	if(.)
  		return
  
negative.code: /datum/gas_mixture/proc/gas_pressure_quadratic(a, b, c, lower_limit, upper_limit)
  	var/solution
  	if(!IS_INF_OR_NAN(a) && !IS_INF_OR_NAN(b) && !IS_INF_OR_NAN(c))
  		solution = max(SolveQuadratic(a, b, c))
  		if((solution > lower_limit) && (solution < upper_limit)) //SolveQuadratic can return nulls so be careful here
  			return solution
  	stack_trace("Failed to solve pressure quadratic equation. A: [a]. B: [b]. C:[c]. Current value = [solution]. Expected lower limit: [lower_limit]. Expected upper limit: [upper_limit].")
  