")
-/*******************
-* Item Adding
-********************/
+/obj/machinery/microwave/update_icon()
+ if(broken)
+ icon_state = "mwb"
+ else if(dirty_anim_playing)
+ icon_state = "mwbloody1"
+ else if(dirty == 100)
+ icon_state = "mwbloody"
+ else if(operating)
+ icon_state = "mw1"
+ else if(panel_open)
+ icon_state = "mw-o"
+ else
+ icon_state = "mw"
/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.", \
- "You start to fix part of the microwave..." \
- )
- if (O.use_tool(src, user, 20))
- user.visible_message( \
- "[user] fixes part of the microwave.", \
- "You fix part of the microwave." \
- )
+ user.visible_message("[user] starts to fix part of \the [src].", "You start to fix part of \the [src]...")
+ if(O.use_tool(src, user, 20))
+ user.visible_message("[user] fixes part of \the [src].", "You fix part of \the [src].")
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.", \
- "You start to fix part of the microwave..." \
- )
- if (O.use_tool(src, user, 20))
- user.visible_message( \
- "[user] fixes the microwave.", \
- "You fix the microwave." \
- )
- icon_state = "mw"
- broken = 0 // Fix it!
- dirty = 0 // just to be sure
+ user.visible_message("[user] starts to fix part of \the [src].", "You start to fix part of \the [src]...")
+ if(O.use_tool(src, user, 20))
+ user.visible_message("[user] fixes \the [src].", "You fix \the [src].")
+ broken = 0
container_type = OPENCONTAINER
- return 0 //to use some fuel
+ update_icon()
+ return FALSE //to use some fuel
else
to_chat(user, "It's broken!")
- return 1
- else if(istype(O, /obj/item/reagent_containers/spray/))
+ return TRUE
+ updateUsrDialog()
+ return
+
+ 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)
+ 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.", \
- "You clean the microwave." \
- )
- dirty = 0 // It's clean!
- broken = 0 // just to be sure
- icon_state = "mw"
+ user.visible_message("[user] has cleaned \the [src].", "You clean \the [src].")
+ dirty = 0
container_type = OPENCONTAINER
+ update_icon()
updateUsrDialog()
- return 1 // Disables the after-attack so we don't spray the floor/user.
else
to_chat(user, "You need more space cleaner!")
- return 1
+ return TRUE
- else if(istype(O, /obj/item/soap/)) // If they're trying to clean it then let them
+ if(istype(O, /obj/item/soap))
var/obj/item/soap/P = O
- user.visible_message( \
- "[user] starts to clean the microwave.", \
- "You start to clean the microwave..." \
- )
- if (do_after(user, P.cleanspeed, target = src))
- user.visible_message( \
- "[user] has cleaned the microwave.", \
- "You clean the microwave." \
- )
- dirty = 0 // It's clean!
- broken = 0 // just to be sure
- icon_state = "mw"
+ user.visible_message("[user] starts to clean \the [src].", "You start to clean \the [src]...")
+ if(do_after(user, P.cleanspeed, target = src))
+ user.visible_message("[user] has cleaned \the [src].", "You clean \the [src].")
+ dirty = 0
container_type = OPENCONTAINER
+ update_icon()
+ return TRUE
- else if(dirty==100) // The microwave is all dirty so can't be used!
- to_chat(user, "It's dirty!")
- return 1
+ if(dirty == 100) // The microwave is all dirty so can't be used!
+ to_chat(user, "\The [src] is dirty!")
+ return TRUE
- else if(istype(O, /obj/item/storage/bag/tray))
+ 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, "[src] is full, you can't put anything in!")
- return 1
+ if(contents.len >= max_n_of_items)
+ to_chat(user, "\The [src] is full, you can't put anything in!")
+ return TRUE
if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src))
loaded++
-
if(loaded)
- to_chat(user, "You insert [loaded] items into [src].")
+ to_chat(user, "You insert [loaded] items into \the [src].")
+ updateUsrDialog()
+ return
+ 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, "\The [src] is full, you can't put anything in!")
+ return TRUE
+ if(!user.transferItemToLoc(O, src))
+ to_chat(user, "\The [O] is stuck to your hand, you cannot put it in \the [src]!")
+ return FALSE
+ user.visible_message("[user] has added \the [O] to \the [src].", "You add \the [O] to \the [src].")
+ updateUsrDialog()
+ return
- 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, "[src] is full, you can't put anything in!")
- return 1
- else
- if(!user.transferItemToLoc(O, src))
- to_chat(user, "\the [O] is stuck to your hand, you cannot put it in \the [src]!")
- return 0
+ if(dirty < 100)
+ if(default_deconstruction_screwdriver(user, "", "", O) || default_unfasten_wrench(user, O))
+ update_icon()
+ return
- user.visible_message( \
- "[user] has added \the [O] to \the [src].", \
- "You add \the [O] to \the [src].")
-
- 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
+/obj/machinery/microwave/ui_interact(mob/user)
. = ..()
if(panel_open || !anchored)
return
var/dat = ""
if(broken > 0)
- dat += "ERROR: 09734014-A2379-D18746 --Bad memory
Contact your operator or use command line to rebase memory ///git checkout {HEAD} -a commit pull --rebase push {*NEW HEAD*}
" //Thats how all the git fiddling looks to me
+ dat += "ERROR: 09734014-A2379-D18746 --Bad memory
Contact your operator or use command line to rebase memory ///git checkout {HEAD} -a commit pull --rebase push {*NEW HEAD*}" // Thats how all the git fiddling looks to me
else if(operating)
dat += "Microwaving in progress!
Please wait...!"
- else if(dirty==100)
- dat += "ERROR: >> 0 --Response input zero
Contact your operator of the device manifactor support."
+ else if(dirty == 100)
+ dat += "ERROR: >> 0 --Response input zero
Contact your operator of the device manufacturer support."
else
var/list/items_counts = new
for (var/obj/O in contents)
@@ -206,132 +186,133 @@
popup.set_content(dat)
popup.open()
-/***********************************
-* Microwave Menu Handling/Cooking
-************************************/
+/obj/machinery/microwave/Topic(href, href_list)
+ if(..())
+ return
+ if(panel_open)
+ return
+ usr.set_machine(src)
+ if(!operating)
+ switch(href_list["action"])
+ if("cook")
+ cook()
+ if("dispose")
+ dispose()
+ updateUsrDialog()
+
+/obj/machinery/microwave/proc/dispose()
+ for(var/obj/O in contents)
+ O.forceMove(drop_location())
+ to_chat(usr, "You dispose of \the [src] contents.")
+ updateUsrDialog()
/obj/machinery/microwave/proc/cook()
if(stat & (NOPOWER|BROKEN))
return
+ if(prob(max((5 / efficiency) - 5, dirty * 5))) //a clean unupgraded microwave has no risk of failure
+ muck()
+ return
+ for(var/obj/O in contents)
+ if(istype(O, /obj/item/reagent_containers/food) || istype(O, /obj/item/grown))
+ continue
+ if(prob(min(dirty * 5, 100)))
+ start_can_fail()
+ return
+ break
start()
- if (prob(max(5/efficiency-5,dirty*5))) //a clean unupgraded microwave has no risk of failure
- muck_start()
- if (!microwaving(4))
- muck_finish()
- return
- muck_finish()
- return
+/obj/machinery/microwave/proc/turn_on()
+ visible_message("\The [src] turns on.", "You hear a microwave humming.")
+ operating = TRUE
- else
- if(has_extra_item() && prob(min(dirty*5,100)) && !microwaving(4))
- broke()
- return
+ set_light(1.5)
+ soundloop.start()
+ update_icon()
+ updateUsrDialog()
- if(!microwaving(10))
- abort()
- return
- stop()
-
- var/metal = 0
- for(var/obj/item/O in contents)
- O.microwave_act(src)
- if(O.materials[MAT_METAL])
- metal += O.materials[MAT_METAL]
-
- if(metal)
- visible_message("Sparks fly around [src]!")
- if(prob(max(metal/2, 33)))
- explosion(loc,0,1,2)
- broke()
- return
-
- dropContents()
- return
-
-/obj/machinery/microwave/proc/microwaving(seconds as num)
- for (var/i=1 to seconds)
- if (stat & (NOPOWER|BROKEN))
- return 0
- use_power(500)
- sleep(max(12-2*efficiency,2)) // standard microwave means sleep(10). The better the efficiency, the faster the cooking
- return 1
-
-/obj/machinery/microwave/proc/has_extra_item()
- for (var/obj/O in contents)
- if ( \
- !istype(O, /obj/item/reagent_containers/food) && \
- !istype(O, /obj/item/grown) \
- )
- return 1
- return 0
+/obj/machinery/microwave/proc/spark()
+ visible_message("Sparks fly around [src]!")
+ var/datum/effect_system/spark_spread/s = new
+ s.set_up(2, 1, src)
+ s.start()
/obj/machinery/microwave/proc/start()
- visible_message("The microwave turns on.", "You hear a microwave humming.")
- soundloop.start()
- operating = TRUE
- icon_state = "mw1"
- updateUsrDialog()
- set_light(1.5)
+ turn_on()
+ loop(MICROWAVE_NORMAL, 10)
-/obj/machinery/microwave/proc/abort()
- operating = FALSE // Turn it off again aferwards
- icon_state = "mw"
- updateUsrDialog()
- set_light(0)
- soundloop.stop()
+/obj/machinery/microwave/proc/start_can_fail()
+ turn_on()
+ loop(MICROWAVE_PRE, 4)
-/obj/machinery/microwave/proc/stop()
- abort()
+/obj/machinery/microwave/proc/muck()
+ turn_on()
+ playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
+ dirty_anim_playing = TRUE
+ update_icon()
+ loop(MICROWAVE_MUCK, 4)
-/obj/machinery/microwave/proc/dispose()
- for (var/obj/O in contents)
- O.forceMove(drop_location())
- to_chat(usr, "You dispose of the microwave contents.")
- updateUsrDialog()
+/obj/machinery/microwave/proc/loop(type, time, wait = max(12 - 2 * efficiency, 2)) // standard wait is 10
+ if(stat & (NOPOWER|BROKEN))
+ if(MICROWAVE_PRE)
+ pre_fail()
+ return
+ if(!time)
+ switch(type)
+ if(MICROWAVE_NORMAL)
+ loop_finish()
+ if(MICROWAVE_MUCK)
+ muck_finish()
+ if(MICROWAVE_PRE)
+ pre_success()
+ return
+ time--
+ use_power(500)
+ addtimer(CALLBACK(src, .proc/loop, type, time, wait), wait)
-/obj/machinery/microwave/proc/muck_start()
- playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound
- icon_state = "mwbloody1" // Make it look dirty!!
+/obj/machinery/microwave/proc/loop_finish()
+ operating = FALSE
+
+ var/metal = 0
+ for(var/obj/item/O in contents)
+ O.microwave_act(src)
+ if(O.materials[MAT_METAL])
+ metal += O.materials[MAT_METAL]
+
+ if(metal)
+ spark()
+ broken = 2
+ if(prob(max(metal / 2, 33)))
+ explosion(loc, 0, 1, 2)
+ else
+ dropContents()
+
+ after_finish_loop()
+
+/obj/machinery/microwave/proc/pre_fail()
+ broken = 2
+ operating = FALSE
+ spark()
+ after_finish_loop()
+
+/obj/machinery/microwave/proc/pre_success()
+ loop(MICROWAVE_NORMAL, 10)
/obj/machinery/microwave/proc/muck_finish()
- visible_message("The microwave gets covered in muck!")
- dirty = 100 // Make it dirty so it can't be used util cleaned
- icon_state = "mwbloody" // Make it look dirty too
- operating = FALSE // Turn it off again aferwards
- updateUsrDialog()
+ visible_message("\The [src] gets covered in muck!")
+
+ dirty = 100
+ dirty_anim_playing = FALSE
+ operating = FALSE
+
for(var/obj/item/reagent_containers/food/snacks/S in src)
if(prob(50))
new /obj/item/reagent_containers/food/snacks/badrecipe(src)
qdel(S)
+
+ after_finish_loop()
+
+/obj/machinery/microwave/proc/after_finish_loop()
set_light(0)
soundloop.stop()
-
-/obj/machinery/microwave/proc/broke()
- var/datum/effect_system/spark_spread/s = new
- s.set_up(2, 1, src)
- s.start()
- icon_state = "mwb" // Make it look all busted up and shit
- visible_message("The microwave breaks!") //Let them know they're stupid
- broken = 2 // Make it broken so it can't be used util fixed
- operating = FALSE // Turn it off again aferwards
- updateUsrDialog()
- set_light(0)
- soundloop.stop()
-
-/obj/machinery/microwave/Topic(href, href_list)
- if(..() || panel_open)
- return
-
- usr.set_machine(src)
- if(operating)
- updateUsrDialog()
- return
-
- switch(href_list["action"])
- if ("cook")
- cook()
-
- if ("dispose")
- dispose()
+ update_icon()
updateUsrDialog()