anchor.diff:  				var/list/first_process = splittext(recipe, ";")
   				if(!LAZYLEN(first_process))
   					return
  -				var/res = get_macro_resolution()
  +				var/res = macroresolution
   				var/resmismatch = FALSE
   				for(var/reagents in first_process)
   					var/list/reagent = splittext(reagents, "=")
  
positive.code: 				return
  			var/recipe_to_use = params["recipe"]
  			var/list/chemicals_to_dispense = process_recipe_list(recipe_to_use)
  			var/res = get_macro_resolution()
  			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(round(chemicals_to_dispense[key], res), (cell.charge * powerefficiency)*10, free)
  					if(actual)
  						if(!cell.use(actual / powerefficiency))
  							say("Not enough energy to complete operation!")
  
negative.code: 		beaker = null
  	return ..()
  
  /obj/machinery/chem_dispenser/proc/check_macro(macro)
  	var/res = macroresolution
  	for (var/reagent in splittext(trim(macro), ";"))
  		if (!check_macro_part(reagent, res))
  			return FALSE
  	return TRUE
  
  /obj/machinery/chem_dispenser/proc/check_macro_part(var/part, var/res = macroresolution)
  	var/detail = splittext(part, "=")
  	if (text2num(detail[2]) < res)
  		return FALSE
  	return TRUE
  
  /obj/machinery/chem_dispenser/proc/process_recipe_list(var/recipe)
  	var/list/key_list = list()
  	var/list/final_list = list()
  	var/list/first_process = splittext(recipe, ";")
  	for(var/reagents in first_process)
  		var/list/splitreagent = splittext(reagents, "=")
  		final_list += list(avoid_assoc_duplicate_keys(splitreagent[1],key_list) = text2num(splitreagent[2]))
  	return final_list
  
  /obj/machinery/chem_dispenser/drinks/Initialize()
  