diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 1bef5237d43..c6e8fbfaf43 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -40,13 +40,6 @@
/atom/proc/CheckParts()
return
-/atom/Destroy()
- if(reagents)
- reagents.delete()
- qdel(reagents)
- invisibility = 101
- // Do not call ..()
-
/atom/proc/assume_air(datum/gas_mixture/giver)
del(giver)
return null
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 5e3b58dc474..6d60e1c7835 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -32,10 +32,14 @@
..()
/atom/movable/Destroy()
- loc = null // can never null their loc enough really
+ if(reagents)
+ qdel(reagents)
for(var/atom/movable/AM in contents)
qdel(AM)
- ..()
+ tag = null
+ loc = null
+ invisibility = 101
+ // Do not call ..()
// Previously known as HasEntered()
// This is automatically called when something enters your square
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index d68fa7266c9..e95d6c5b50d 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -49,8 +49,17 @@
deactivate()
/obj/machinery/camera/Destroy()
+ deactivate(null, 0) //kick anyone viewing out
+ if(assembly)
+ qdel(assembly)
+ assembly = null
if(istype(bug))
bug.bugged_cameras -= src.c_tag
+ if(bug.current == src)
+ bug.current = null
+ bug = null
+ qdel(wires)
+ cameranet.removeCamera(src) //Will handle removal from the camera network and the chunks, so we don't need to worry about that
..()
/obj/machinery/camera/emp_act(severity)
@@ -130,10 +139,16 @@
else if(istype(W, /obj/item/weapon/weldingtool) && wires.CanDeconstruct())
if(weld(W, user))
- if(assembly)
- assembly.loc = src.loc
- assembly.state = 1
+ user << "You unweld the camera leaving it as just a frame screwed to the wall."
+ if(!assembly)
+ assembly = new()
+ assembly.loc = src.loc
+ assembly.state = 1
+ assembly.dir = src.dir
+ assembly.update_icon()
+ assembly = null
qdel(src)
+ return
else if(istype(W, /obj/item/device/analyzer) && panel_open) //XRay
if(!isXRay())
upgradeXRay()
@@ -216,7 +231,7 @@
status = !( src.status )
if (!(src.status))
if(user)
- visible_message("\red [user] has deactivated [src]!")
+ visible_message("\red [user] deactivates [src]!")
add_hiddenprint(user)
else
visible_message("\red \The [src] deactivates!")
@@ -225,10 +240,10 @@
else
if(user)
- visible_message("\red [user] has reactivated [src]!")
+ visible_message("\red [user] reactivates [src]!")
add_hiddenprint(user)
else
- visible_message("\red \the [src] reactivates!")
+ visible_message("\red \The [src] reactivates!")
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
icon_state = initial(icon_state)
@@ -312,7 +327,7 @@
return 0
// Do after stuff here
- user << "You start to weld the [src].."
+ user << "You start to weld [src]."
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
WT.eyecheck(user)
busy = 1
diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm
index 9f5d95f7ccd..ff201432fc4 100644
--- a/code/game/machinery/camera/camera_assembly.dm
+++ b/code/game/machinery/camera/camera_assembly.dm
@@ -48,7 +48,7 @@
else if(istype(W, /obj/item/weapon/wrench))
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
- user << "You unattach the assembly from it's place."
+ user << "You unattach the assembly from its place."
anchored = 0
update_icon()
state = 0
@@ -66,7 +66,7 @@
else if(istype(W, /obj/item/weapon/weldingtool))
if(weld(W, user))
- user << "You unweld the assembly from it's place."
+ user << "You unweld the assembly from its place."
state = 1
anchored = 1
return
diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm
index 4d7049c3375..039f0cb2151 100644
--- a/code/game/objects/items/devices/camera_bug.dm
+++ b/code/game/objects/items/devices/camera_bug.dm
@@ -44,6 +44,23 @@
..()
processing_objects += src
+/obj/item/device/camera_bug/Destroy()
+ if(expansion)
+ qdel(expansion)
+ expansion = null
+ del(src)
+/* Easier to just call del() than this nonsense
+ get_cameras()
+ for(var/cam_tag in bugged_cameras)
+ var/obj/machinery/camera/camera = bugged_cameras[cam_tag]
+ if(camera.bug == src)
+ camera.bug = null
+ bugged_cameras = list()
+ if(tracking)
+ tracking = null
+ ..()
+*/
+
/obj/item/device/camera_bug/interact(var/mob/user = usr)
var/datum/browser/popup = new(user, "camerabug","Camera Bug",nref=src)
popup.set_content(menu(get_cameras()))
diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm
index 1a4226b70a3..5ba0e73fa7d 100644
--- a/code/game/objects/items/weapons/grenades/smokebomb.dm
+++ b/code/game/objects/items/weapons/grenades/smokebomb.dm
@@ -12,6 +12,10 @@
src.smoke = new /datum/effect/effect/system/bad_smoke_spread
src.smoke.attach(src)
+/obj/item/weapon/grenade/smokebomb/Destroy()
+ qdel(smoke)
+ ..()
+
/obj/item/weapon/grenade/smokebomb/prime()
update_mob()
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)