anchor.diff:  	pass_flags = PASSTABLE
   	light_color = LIGHT_COLOR_YELLOW
   	light_power = 3
  -	var/operating = FALSE // Is it on?
  -	var/dirty = 0 // = {0..100} Does it need cleaning?
  -	var/broken = 0 // ={0,1,2} How broken is it???
  -	var/max_n_of_items = 10 // whatever fat fuck made this a global var needs to look at themselves in the mirror sometime
  +	var/operating = FALSE
  +	var/dirty = 0 // 0 to 100 // Does it need cleaning?
  +	var/dirty_anim_playing = FALSE
  +	var/broken = 0 // 0, 1 or 2 // How broken is it???
  +	var/max_n_of_items = 10
   	var/efficiency = 0
   	var/datum/looping_sound/microwave/soundloop
  -
  -//Microwaving doesn't use recipes, instead it calls the microwave_act of the objects. For food, this creates something based on the food's cooked_type
  -
  -/*******************
  -*   Initialising
  -********************/
   
   /obj/machinery/microwave/Initialize()
   	. = ..()
  
positive.code: 	soundloop = new(list(src), FALSE)
  
  /obj/machinery/microwave/RefreshParts()
  	var/E
  	var/max_items = 10
  	for(var/obj/item/stock_parts/micro_laser/M in component_parts)
  		E += M.rating
  	for(var/obj/item/stock_parts/matter_bin/M in component_parts)
  		max_items = 10 * M.rating
  	efficiency = E
  	max_n_of_items = max_items
  
  /obj/machinery/microwave/examine(mob/user)
  	..()
  	if(!operating)
  		to_chat(user, "<span class='notice'>Alt-click [src] to turn it on.</span>")
  	if(in_range(user, src) || isobserver(user))
  		to_chat(user, "<span class='notice'>The status display reads: Capacity: <b>[max_n_of_items]</b> items.<br>Cook time reduced by <b>[(efficiency*25)-25]%</b>.<span>")
  
  /*******************
  *   Item Adding
  ********************/
  
  /obj/machinery/microwave/attackby(obj/item/O, mob/user, params)
  	if(operating)
  		return
  	if(!broken && dirty<100)
  		if(default_deconstruction_screwdriver(user, "mw-o", "mw", O))
  			return
  		if(default_unfasten_wrench(user, O))
  			return
  
  	if(default_deconstruction_crowbar(O))
  		return
  
  	if(broken > 0)
  		if(broken == 2 && O.tool_behaviour == TOOL_WIRECUTTER) // If it's broken and they're using a screwdriver
  			user.visible_message( \
  				"[user] starts to fix part of the microwave.", \
  				"<span class='notice'>You start to fix part of the microwave...</span>" \
  			)
  			if (O.use_tool(src, user, 20))
  				user.visible_message( \
  					"[user] fixes part of the microwave.", \
  					"<span class='notice'>You fix part of the microwave.</span>" \
  				)
  				broken = 1 // Fix it a bit
  		else if(broken == 1 && O.tool_behaviour == TOOL_WELDER) // If it's broken and they're doing the wrench
  			user.visible_message( \
  				"[user] starts to fix part of the microwave.", \
  				"<span class='notice'>You start to fix part of the microwave...</span>" \
  			)
  			if (O.use_tool(src, user, 20))
  				user.visible_message( \
  					"[user] fixes the microwave.", \
  					"<span class='notice'>You fix the microwave.</span>" \
  				)
  				icon_state = "mw"
  				broken = 0 // Fix it!
  				dirty = 0 // just to be sure
  				container_type = OPENCONTAINER
  				return 0 //to use some fuel
  		else
  			to_chat(user, "<span class='warning'>It's broken!</span>")
  			return 1
  	else if(istype(O, /obj/item/reagent_containers/spray/))
  		var/obj/item/reagent_containers/spray/clean_spray = O
  		if(clean_spray.reagents.has_reagent("cleaner",clean_spray.amount_per_transfer_from_this))
  			clean_spray.reagents.remove_reagent("cleaner",clean_spray.amount_per_transfer_from_this,1)
  			playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
  			user.visible_message( \
  				"[user] has cleaned the microwave.", \
  				"<span class='notice'>You clean the microwave.</span>" \
  			)
  			dirty = 0 // It's clean!
  			broken = 0 // just to be sure
  			icon_state = "mw"
  			container_type = OPENCONTAINER
  			updateUsrDialog()
  			return 1 // Disables the after-attack so we don't spray the floor/user.
  		else
  			to_chat(user, "<span class='warning'>You need more space cleaner!</span>")
  			return 1
  
  	else if(istype(O, /obj/item/soap/)) // If they're trying to clean it then let them
  		var/obj/item/soap/P = O
  		user.visible_message( \
  			"[user] starts to clean the microwave.", \
  			"<span class='notice'>You start to clean the microwave...</span>" \
  		)
  		if (do_after(user, P.cleanspeed, target = src))
  			user.visible_message( \
  				"[user] has cleaned the microwave.", \
  				"<span class='notice'>You clean the microwave.</span>" \
  			)
  			dirty = 0 // It's clean!
  			broken = 0 // just to be sure
  			icon_state = "mw"
  			container_type = OPENCONTAINER
  
  	else if(dirty==100) // The microwave is all dirty so can't be used!
  		to_chat(user, "<span class='warning'>It's dirty!</span>")
  		return 1
  
  	else if(istype(O, /obj/item/storage/bag/tray))
  		var/obj/item/storage/T = O
  		var/loaded = 0
  		for(var/obj/item/reagent_containers/food/snacks/S in T.contents)
  			if (contents.len>=max_n_of_items)
  				to_chat(user, "<span class='warning'>[src] is full, you can't put anything in!</span>")
  				return 1
  			if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src))
  				loaded++
  
  		if(loaded)
  			to_chat(user, "<span class='notice'>You insert [loaded] items into [src].</span>")
  
  
  	else if(O.w_class <= WEIGHT_CLASS_NORMAL && !istype(O, /obj/item/storage) && user.a_intent == INTENT_HELP)
  		if (contents.len>=max_n_of_items)
  			to_chat(user, "<span class='warning'>[src] is full, you can't put anything in!</span>")
  			return 1
  		else
  			if(!user.transferItemToLoc(O, src))
  				to_chat(user, "<span class='warning'>\the [O] is stuck to your hand, you cannot put it in \the [src]!</span>")
  				return 0
  
  			user.visible_message( \
  				"[user] has added \the [O] to \the [src].", \
  				"<span class='notice'>You add \the [O] to \the [src].</span>")
  
  	else
  		..()
  	updateUsrDialog()
  
  /obj/machinery/microwave/AltClick(mob/user)
  	if(user.canUseTopic(src, BE_CLOSE) && !(operating || broken > 0 || panel_open || !anchored || dirty == 100))
  		cook()
  
  /*******************
  *   Microwave Menu
  ********************/
  
  /obj/machinery/microwave/ui_interact(mob/user) // The microwave Menu
  	. = ..()
  	if(panel_open || !anchored)
  		return
  	var/dat = "<div class='statusDisplay'>"
  	if(broken > 0)
  		dat += "ERROR: 09734014-A2379-D18746 --Bad memory<BR>Contact your operator or use command line to rebase memory ///git checkout {HEAD} -a commit pull --rebase push {*NEW HEAD*}</div>"    //Thats how all the git fiddling looks to me
  	else if(operating)
  		dat += "Microwaving in progress!<BR>Please wait...!</div>"
  	else if(dirty==100)
  		dat += "ERROR: >> 0 --Response input zero<BR>Contact your operator of the device manifactor support.</div>"
  	else
  		var/list/items_counts = new
  		for (var/obj/O in contents)
  
negative.code: #define MICROWAVE_NORMAL 0
  #define MICROWAVE_MUCK 1
  #define MICROWAVE_PRE 2
  
  //Microwaving doesn't use recipes, instead it calls the microwave_act of the objects. For food, this creates something based on the food's cooked_type
  
  /obj/machinery/microwave
  	name = "microwave oven"
  	desc = "Cooks and boils stuff."
  