From 2991dd72c9433de81bc9f1ad3fe40f6125d1bdee Mon Sep 17 00:00:00 2001 From: MrPerson Date: Mon, 31 Mar 2014 01:11:37 -0700 Subject: [PATCH] More qdel() changes. Move all atom/Destroy() behavior to atom/movable/Destroy() so turf/areas that get qdel()'d just get del()'d like they're supposed to. Also do tag = null, which should make more things GC. Make cameras GC correctly and some misc grammar fixes. Make smoke grenades GC. Tell camera bugs to del() because I'm not working on complex behavior for one item. --- code/game/atoms.dm | 7 ----- code/game/atoms_movable.dm | 8 +++-- code/game/machinery/camera/camera.dm | 29 ++++++++++++++----- code/game/machinery/camera/camera_assembly.dm | 4 +-- code/game/objects/items/devices/camera_bug.dm | 17 +++++++++++ .../items/weapons/grenades/smokebomb.dm | 4 +++ 6 files changed, 51 insertions(+), 18 deletions(-) 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 b9386833cb3..05cc121c360 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) @@ -128,10 +137,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 // OTHER @@ -193,7 +208,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!") @@ -202,10 +217,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) @@ -289,7 +304,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 805406fb6ed..1ff92cc282e 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)