anchor.diff:  		return
   
   	if(active)
  -		icon_state = icon_heating
  +		icon_state = icon_active
   		spawn(50)
   			heat()
   	else
  
positive.code: 		/obj/machinery/disease2/incubator,
  		/obj/machinery/disease2/isolator,
  		/obj/machinery/disease2/biodestroyer,
  		/mob/living/simple_animal/livestock/cow
  	)
  
  
negative.code: 	return ..()
  
  /obj/item/device/cooker/attack_hand(var/mob/user as mob)
  	if(held_container)
  		held_container.attack_hand(user)
  		if(held_container.loc != src)
  			held_container = null
  			icon_state = icon_empty
  			user << "\blue You remove the [held_container] from the [src]."
  			return 1
  	else
  		..()
  
  ////////////////////////////////////////////////////////////////////////////////
  /// Grinder
  ////////////////////////////////////////////////////////////////////////////////
  
  //todo: make a thing like this for cooking, or just redo the kitchen machinery so that they make more sense
  //this is a (mostly) non-retarded version of obj/machiner/reagentgrinder
  
  var/list/grind_products = list()
  
  /obj/item/device/grinder
  	name = "grinder"
  	desc = "A small, automated grinder for breaking things down into a powder."
  	icon = 'chemical.dmi'
  	icon_state = "grinder1"		//spawns with an empty beaker already on it
  	var/obj/item/weapon/reagent_containers/glass/held_container
  	var/grinding_stage = 0
  	var/active = 0
  	var/icon_empty = "grinder0"
  	var/icon_full = "grinder1"
  	var/icon_active = "grinder2"
  
  /obj/item/device/grinder/New()
  	held_container = new /obj/item/weapon/reagent_containers/glass/large/(src)
  
  /obj/item/device/grinder/verb/toggle()
  	set src in oview(1)
  	set category = "Object"
  	set name = "Toggle grinder"
  
  	if(held_container)
  		if(!active)
  			usr << "\blue You switch the [src] on."
  			active = 1
  			icon_state = icon_active
  			spawn(50)
  				grind()
  		else
  			usr << "\blue You switch the [src] off."
  			active = 0
  			icon_state = icon_full
  	else
  		usr << "\red You can not toggle the [src] when it holds no container!"
  
  /obj/item/device/grinder/verb/eject()
  	set src in oview(1)
  	set category = "Object"
  	set name = "Eject contents from grinder"
  
  	for(var/obj/item/I in src)
  		if(I == held_container)
  			continue
  		I.loc = src.loc
  
  /obj/item/device/grinder/proc/grind()
  	if(!held_container)
  		grinding_stage = 0
  		active = 0
  		icon_state = icon_empty
  		return
  
  	if(active)
  		icon_state = icon_active
  		spawn(50)
  			grind()
  	else
  		grinding_stage = 0
  		icon_state = icon_full
  		return
  
  	var/grinding = 0
  	for(var/obj/item/I in src)
  		if(I == held_container)
  			continue
  		if( prob(max(grinding_stage * 20, 100)) )
  			var/pre_volume = held_container.reagents.total_volume
  
  			//shitty hardcode of things for now, but it's the fastest easiest solution
  			if(istype(I,/obj/item/weapon/rocksliver))
  				var/obj/item/weapon/rocksliver/R = I
  				held_container.reagents.add_reagent("ground_rock",10, R.geological_data)
  			else
  				held_container.reagents.add_reagent("chemical_waste",10)
  			del(I)
  
  			//slight hack to spill some chemical waste if it won't fit
  			if(pre_volume == held_container.reagents.total_volume)
  				var/obj/effect/decal/ash/A = new(src.loc)
  				A.name = "gritty powder"
  				A.desc = "Looks like some kind of chemical waste."
  				A.loc = pick(view(get_turf(src),1))
  				visible_message("<b>[src]</b> leaks some kind of powder.")
  		else
  			grinding = 1
  
  	if(grinding)
  		visible_message("<b>[src]</b> makes a clanking, clattering noise!")
  	else
  		visible_message("<b>[src]</b> makes a whirring noise!")
  
  /obj/item/device/grinder/attackby(var/obj/item/O as obj, var/mob/user as mob)
  	if(istype(O, /obj/item/weapon/reagent_containers/glass/))
  		if(held_container)
  			//todo: empty O into held_container
  			user << "\red There is already a [held_container] on the [src]!"
  		else
  			user.drop_item()
  			user << "\blue You place the [O] on the [src]."
  			held_container = O
  			O.loc = src
  			icon_state = icon_full
  		return 1
  	else if(!held_container)
  		user << "\red There is nothing to put [O] in to!"
  		return 1
  	else if (istype(O,/obj/item))
  		var/obj/item/I = O
  		if(I.w_class > 2)
  			user << "\red That won't fit in the [held_container]!"
  		else
  			//add random things to the container. when the burner is activated, they will melt
  			O.loc = held_container
  		return 1
  	else
  		user << "\blue You add the [O] to the [src]."
  		user.drop_item()
  		O.loc = src
  		return 1
  
  	return ..()
  
  /obj/item/device/grinder/attack_hand(var/mob/user as mob)
  	if(held_container)
  		held_container.attack_hand(user)
  		if(held_container.loc != src)
  