anchor.diff: +//Handles how much the temperature changes on power use. (Joules/Kelvin)
  +//Equates to as much heat energy per kelvin as a quarter tile of air.
  +#define XENOARCH_HEAT_CAPACITY 5000
  +
  +//Handles heat transfer to the air. (In watts)
  +//Can heat a single tile 2 degrees per tick.
  +#define XENOARCH_MAX_ENERGY_TRANSFER 4000
  +
  +//How many joules of electrical energy produce how many joules of heat energy?
  +#define XENOARCH_HEAT_COEFFICIENT 10
  +
   
   /obj/machinery/anomaly
   	name = "Analysis machine"
  
positive.code: 		if(prob(5))
  			src.visible_message("\blue \icon[src] [pick("whirrs","chuffs","clicks")][pick(" quietly"," softly"," sadly"," excitedly"," energetically"," angrily"," plaintively")].", 2)
  
  	else if(temperature > environmental_temp)
  		//cool down to match the air
  		temperature -= heat_accumulation_rate + heat_accumulation_rate * rand(-5,5) / 10
  		if(temperature < environmental_temp)
  			temperature = environmental_temp
  		if(prob(5))
  			src.visible_message("\blue \icon[src] hisses softly.", 2)
  
  	else if(temperature < environmental_temp)
  		//heat up to match the air
  		temperature += heat_accumulation_rate + rand(-5,5) / 10
  		if(temperature > environmental_temp)
  			temperature = environmental_temp
  		else
  			if(prob(5))
  				src.visible_message("\blue \icon[src] plinks quietly.", 2)
  
  	//warm up the lab slightly
  	if(env.temperature < temperature)
  		env.temperature += (temperature - env.temperature) * 0.1
  
  //this proc should be overriden by each individual machine
  /obj/machinery/anomaly/attack_hand(var/mob/user as mob)
  
negative.code: 		if(scan_process++ > target_scan_ticks)
  			FinishScan()
  
  		if(temperature > 350 && prob(10))
  			src.visible_message("\blue \icon[src] bleets plaintively.", 2)
  			if(temperature > 400)
  