diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 654b9e0e69..745843474e 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -59,6 +59,11 @@
recharge()
dispensable_reagents = sortList(dispensable_reagents)
+/obj/machinery/chem_dispenser/Destroy()
+ QDEL_NULL(beaker)
+ QDEL_NULL(cell)
+ return ..()
+
/obj/machinery/chem_dispenser/process()
if(recharged < 0)
@@ -303,6 +308,7 @@
if(beaker)
beaker.forceMove(drop_location())
beaker = null
+ return ..()
/obj/machinery/chem_dispenser/drinks
name = "soda dispenser"
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index f8d2a66247..a6d958220a 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -13,6 +13,28 @@
var/heater_coefficient = 0.1
var/on = FALSE
+/obj/machinery/chem_heater/Destroy()
+ QDEL_NULL(beaker)
+ return ..()
+
+/obj/machinery/chem_heater/handle_atom_del(atom/A)
+ . = ..()
+ if(A == beaker)
+ beaker = null
+ update_icon()
+
+/obj/machinery/chem_heater/update_icon()
+ if(beaker)
+ icon_state = "mixer1b"
+ else
+ icon_state = "mixer0b"
+
+/obj/machinery/chem_heater/proc/eject_beaker()
+ if(beaker)
+ beaker.forceMove(drop_location())
+ beaker = null
+ update_icon()
+
/obj/machinery/chem_heater/RefreshParts()
heater_coefficient = 0.1
for(var/obj/item/stock_parts/micro_laser/M in component_parts)
@@ -52,12 +74,13 @@
return
beaker = I
to_chat(user, "You add [I] to [src].")
- icon_state = "mixer1b"
+ update_icon()
return
return ..()
/obj/machinery/chem_heater/on_deconstruction()
eject_beaker()
+ return ..()
/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
@@ -108,10 +131,3 @@
on = FALSE
eject_beaker()
. = TRUE
-
-/obj/machinery/chem_heater/proc/eject_beaker()
- if(beaker)
- beaker.forceMove(drop_location())
- beaker.reagents.handle_reactions()
- beaker = null
- icon_state = "mixer0b"
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 434996fb08..3e06449e3a 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -13,7 +13,7 @@
var/obj/item/reagent_containers/beaker = null
var/obj/item/storage/pill_bottle/bottle = null
var/mode = 1
- var/condi = 0
+ var/condi = FALSE
var/screen = "home"
var/analyzeVars[0]
var/useramount = 30 // Last used amount
@@ -23,6 +23,11 @@
add_overlay("waitlight")
. = ..()
+/obj/machinery/chem_master/Destroy()
+ QDEL_NULL(beaker)
+ QDEL_NULL(bottle)
+ return ..()
+
/obj/machinery/chem_master/RefreshParts()
reagents.maximum_volume = 0
for(var/obj/item/reagent_containers/glass/beaker/B in component_parts)
@@ -44,10 +49,22 @@
if(A == beaker)
beaker = null
reagents.clear_reagents()
- icon_state = "mixer0"
+ update_icon()
else if(A == bottle)
bottle = null
+/obj/machinery/chem_master/update_icon()
+ if(beaker)
+ icon_state = "mixer1"
+ else
+ icon_state = "mixer0"
+
+/obj/machinery/chem_master/proc/eject_beaker()
+ if(beaker)
+ beaker.forceMove(drop_location())
+ adjust_item_drop_location(beaker)
+ beaker = null
+ update_icon()
/obj/machinery/chem_master/blob_act(obj/structure/blob/B)
if (prob(50))
@@ -61,15 +78,6 @@
/obj/machinery/chem_master/attackby(obj/item/I, mob/user, params)
if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", I))
- if(beaker)
- beaker.forceMove(drop_location())
- adjust_item_drop_location(beaker)
- beaker = null
- reagents.clear_reagents()
- if(bottle)
- bottle.forceMove(drop_location())
- adjust_item_drop_location(bottle)
- bottle = null
return
else if(exchange_parts(user, I))
@@ -94,7 +102,7 @@
beaker = I
to_chat(user, "You add [I] to [src].")
src.updateUsrDialog()
- icon_state = "mixer1"
+ update_icon()
else if(!condi && istype(I, /obj/item/storage/pill_bottle))
if(bottle)
@@ -109,6 +117,13 @@
else
return ..()
+/obj/machinery/chem_master/on_deconstruction()
+ eject_beaker()
+ if(bottle)
+ bottle.forceMove(drop_location())
+ adjust_item_drop_location(bottle)
+ bottle = null
+ return ..()
/obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
@@ -154,13 +169,8 @@
return
switch(action)
if("eject")
- if(beaker)
- beaker.forceMove(drop_location())
- adjust_item_drop_location(beaker)
- beaker = null
- reagents.clear_reagents()
- icon_state = "mixer0"
- . = TRUE
+ eject_beaker()
+ . = TRUE
if("ejectp")
if(bottle)
@@ -348,7 +358,7 @@
#if DM_VERSION >= 513
#warning 512 is definitely stable now, remove the old code
#endif
-
+
#if DM_VERSION >= 512
. += hex2num(md5[i])
#else
@@ -361,4 +371,4 @@
/obj/machinery/chem_master/condimaster
name = "CondiMaster 3000"
desc = "Used to create condiments and other cooking supplies."
- condi = 1
+ condi = TRUE
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index 466aa047ad..f6b0f464fd 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -25,6 +25,12 @@
QDEL_NULL(beaker)
return ..()
+/obj/machinery/computer/pandemic/handle_atom_del(atom/A)
+ . = ..()
+ if(A == beaker)
+ beaker = null
+ update_icon()
+
/obj/machinery/computer/pandemic/proc/get_by_index(thing, index)
if(!beaker || !beaker.reagents)
return
@@ -121,9 +127,10 @@
add_overlay("waitlight")
/obj/machinery/computer/pandemic/proc/eject_beaker()
- beaker.forceMove(drop_location())
- beaker = null
- update_icon()
+ if(beaker)
+ beaker.forceMove(drop_location())
+ beaker = null
+ update_icon()
/obj/machinery/computer/pandemic/ui_interact(mob/user, ui_key = "main", datum/tgui/ui, force_open = FALSE, datum/tgui/master_ui, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
@@ -159,8 +166,7 @@
return
switch(action)
if("eject_beaker")
- if(beaker)
- eject_beaker()
+ eject_beaker()
. = TRUE
if("empty_beaker")
if(beaker)
@@ -236,7 +242,5 @@
return ..()
/obj/machinery/computer/pandemic/on_deconstruction()
- if(beaker)
- beaker.forceMove(drop_location())
- beaker = null
+ eject_beaker()
. = ..()