diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 3d3b1eec098..8c5ed4ddb6e 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1285,6 +1285,7 @@ About the new airlock wires panel:
sleep(6)
if(QDELETED(src))
return
+ electronics = new /obj/item/airlock_electronics/destroyed()
operating = FALSE
if(!open())
update_icon(AIRLOCK_CLOSED, 1)
@@ -1406,9 +1407,6 @@ About the new airlock wires panel:
ae = electronics
electronics = null
ae.forceMove(loc)
- if(emagged)
- ae.icon_state = "door_electronics_smoked"
- operating = 0
qdel(src)
/obj/machinery/door/airlock/proc/note_type() //Returns a string representing the type of note pinned to this airlock
diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm
index e9435dfe4e8..0be1de00c80 100644
--- a/code/game/machinery/doors/airlock_electronics.dm
+++ b/code/game/machinery/doors/airlock_electronics.dm
@@ -102,3 +102,16 @@
if("clear_all")
selected_accesses = list()
+
+/obj/item/airlock_electronics/destroyed
+ name = "burned-out airlock electronics"
+ icon_state = "door_electronics_smoked"
+
+/obj/item/airlock_electronics/destroyed/attack_self(mob/user)
+ return
+
+/obj/item/airlock_electronics/destroyed/decompile_act(obj/item/matter_decompiler/C, mob/user)
+ C.stored_comms["metal"] += 1
+ C.stored_comms["glass"] += 1
+ qdel(src)
+ return TRUE
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 7b5e711ca81..59d839018bb 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -219,6 +219,7 @@
if(!operating && density && !emagged)
emagged = TRUE
operating = TRUE
+ electronics = new /obj/item/airlock_electronics/destroyed()
flick("[base_state]spark", src)
playsound(src, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
sleep(6)
@@ -279,11 +280,6 @@
WA.update_icon()
WA.created_name = name
- if(emagged)
- to_chat(user, "You discard the damaged electronics.")
- qdel(src)
- return
-
to_chat(user, "You remove the airlock electronics.")
var/obj/item/airlock_electronics/ae
diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm
index 88663e6c38c..9decdcf4c31 100644
--- a/code/game/objects/effects/decals/misc.dm
+++ b/code/game/objects/effects/decals/misc.dm
@@ -58,14 +58,14 @@
/obj/effect/decal/straw/edge
icon_state = "strawscatterededge"
-/obj/effect/decal/ants
+/obj/effect/decal/cleanable/ants
name = "space ants"
desc = "A bunch of space ants."
icon = 'icons/goonstation/effects/effects.dmi'
icon_state = "spaceants"
scoop_reagents = list("ants" = 20)
-/obj/effect/decal/ants/Initialize(mapload)
+/obj/effect/decal/cleanable/ants/Initialize(mapload)
. = ..()
var/scale = (rand(2, 10) / 10) + (rand(0, 5) / 100)
transform = matrix(transform, scale, scale, MATRIX_SCALE)
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 89ce97ff913..d8abb853e9f 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -192,5 +192,10 @@
desc = "A pair of broken zipties."
icon_state = "cuff_white_used"
+/obj/item/restraints/handcuffs/cable/zipties/used/decompile_act(obj/item/matter_decompiler/C, mob/user)
+ C.stored_comms["glass"] += 1
+ qdel(src)
+ return TRUE
+
/obj/item/restraints/handcuffs/cable/zipties/used/attack()
return
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 0d9db6737b6..02cad716d3d 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -75,7 +75,7 @@
state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS
to_chat(user, "You wire the airlock assembly.")
- else if(istype(W, /obj/item/airlock_electronics) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS && W.icon_state != "door_electronics_smoked")
+ else if(istype(W, /obj/item/airlock_electronics) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS && !istype(W, /obj/item/airlock_electronics/destroyed))
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...")
@@ -187,6 +187,7 @@
door.name = base_name
door.previous_airlock = previous_assembly
electronics.forceMove(door)
+ electronics = null
qdel(src)
update_icon()
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index fb89c95815b..73e6fadac80 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -131,7 +131,7 @@
if("02")
//Adding airlock electronics for access. Step 6 complete.
- if(istype(W, /obj/item/airlock_electronics))
+ if(istype(W, /obj/item/airlock_electronics) && !istype(W, /obj/item/airlock_electronics/destroyed))
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...")
user.drop_item()
diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm
index 15e28cc6c62..ea3055ad55e 100644
--- a/code/modules/food_and_drinks/food.dm
+++ b/code/modules/food_and_drinks/food.dm
@@ -44,8 +44,8 @@
if(isturf(loc) && !locate(/obj/structure/table) in T)
if(ant_location == T)
if(prob(15))
- if(!locate(/obj/effect/decal/ants) in T)
- new /obj/effect/decal/ants(T)
+ if(!locate(/obj/effect/decal/cleanable/ants) in T)
+ new /obj/effect/decal/cleanable/ants(T)
antable = FALSE
desc += " It appears to be infested with ants. Yuck!"
reagents.add_reagent("ants", 1) // Don't eat things with ants in i you weirdo.
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 58ba6adba90..1e8bd595bb2 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -88,6 +88,13 @@
to_chat(user, "There is no bullet in the casing to inscribe anything into.")
..()
+/obj/item/ammo_casing/decompile_act(obj/item/matter_decompiler/C, mob/user)
+ if(!BB)
+ C.stored_comms["metal"] += 1
+ qdel(src)
+ return TRUE
+ return ..()
+
//Boxes of ammo
/obj/item/ammo_box
name = "ammo box (generic)"
diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm
index 9a3adde3a0a..b644e5ad2b9 100644
--- a/code/modules/reagents/chemistry/reagents/toxins.dm
+++ b/code/modules/reagents/chemistry/reagents/toxins.dm
@@ -1076,7 +1076,7 @@
return ..() | update_flags
/datum/reagent/pestkiller/reaction_obj(obj/O, volume)
- if(istype(O, /obj/effect/decal/ants))
+ if(istype(O, /obj/effect/decal/cleanable/ants))
O.visible_message("The ants die.")
qdel(O)