anchor.diff:  	var/working_state = "dispenser_working"
   	var/nopower_state = "dispenser_nopower"
   	var/has_panel_overlay = TRUE
  -	var/macrotier = 1
  +	var/macroresolution = 1
   	var/obj/item/reagent_containers/beaker = null
   	var/list/dispensable_reagents = list(
   		"hydrogen",
  
positive.code: 	work_animation()
  	visible_message("<span class='danger'>[src] malfunctions, spraying chemicals everywhere!</span>")
  
  
  /obj/machinery/chem_dispenser/RefreshParts()
  	recharge_amount = initial(recharge_amount)
  	var/newpowereff = 0.0666666
  	for(var/obj/item/stock_parts/cell/P in component_parts)
  		cell = P
  	for(var/obj/item/stock_parts/matter_bin/M in component_parts)
  
negative.code: 				return
  			var/recipe_to_use = params["recipe"]
  			var/list/chemicals_to_dispense = process_recipe_list(recipe_to_use)
  			var/res = macroresolution
  			for(var/key in chemicals_to_dispense) // i suppose you could edit the list locally before passing it
  				var/list/keysplit = splittext(key," ")
  				var/r_id = keysplit[1]
  				if(beaker && dispensable_reagents.Find(r_id)) // but since we verify we have the reagent, it'll be fine
  					var/datum/reagents/R = beaker.reagents
  					var/free = R.maximum_volume - R.total_volume
  					var/actual = min(max(chemicals_to_dispense[key], res), (cell.charge * powerefficiency)*10, free)
  					if(actual)
  						if(!cell.use(actual / powerefficiency))
  							say("Not enough energy to complete operation!")
  