From 50051ee851d69eb9359879346bc7052c95237bd5 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 27 Mar 2017 18:37:44 -0400 Subject: [PATCH 1/6] Garbage Collection and Code Cleanup --- code/game/machinery/vending.dm | 7 -- code/game/objects/items/dehy_carp.dm | 5 ++ code/game/objects/items/devices/modkit.dm | 87 ------------------- code/game/objects/items/devices/multitool.dm | 7 +- code/game/objects/items/devices/powersink.dm | 2 + code/game/objects/items/weapons/cigs.dm | 1 + code/game/objects/items/weapons/explosives.dm | 7 +- .../objects/items/weapons/flamethrower.dm | 1 + code/game/objects/items/weapons/garrote.dm | 4 + .../items/weapons/grenades/chem_grenade.dm | 8 ++ code/game/objects/items/weapons/holosign.dm | 6 ++ code/game/objects/items/weapons/mop.dm | 1 + code/game/objects/structures/artstuff.dm | 5 ++ code/game/objects/structures/displaycase.dm | 9 ++ code/game/objects/structures/door_assembly.dm | 6 ++ code/game/objects/structures/engicart.dm | 27 ++++++ code/game/objects/structures/extinguisher.dm | 5 ++ code/game/objects/structures/janicart.dm | 14 ++- code/game/objects/structures/mop_bucket.dm | 1 + code/game/objects/structures/target_stake.dm | 75 ++++++++-------- code/game/objects/structures/watercloset.dm | 4 + .../objects/structures/windoor_assembly.dm | 3 + paradise.dme | 1 - 23 files changed, 150 insertions(+), 136 deletions(-) delete mode 100644 code/game/objects/items/devices/modkit.dm diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 183bd35da56..071b24dd6d6 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1162,13 +1162,6 @@ /obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5) //everything after the power cell had no amounts, I improvised. -Sayu - -/obj/machinery/vending/eva - name = "\improper Hardsuit Kits" - desc = "Conversion kits for your alien hardsuit needs." - products = list(/obj/item/device/modkit = 6,/obj/item/device/modkit/tajaran = 6,/obj/item/device/modkit/unathi = 6,/obj/item/device/modkit/skrell = 6,/obj/item/device/modkit/vox = 6) - - /obj/machinery/vending/sustenance name = "\improper Sustenance Vendor" desc = "A vending machine which vends food, as required by section 47-C of the NT's Prisoner Ethical Treatment Agreement." diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm index 991d04fbd63..3125c24837a 100644 --- a/code/game/objects/items/dehy_carp.dm +++ b/code/game/objects/items/dehy_carp.dm @@ -8,6 +8,11 @@ var/mob/owner = null // Carp doesn't attack owner, set when using in hand var/owned = 1 // Boolean, no owner to begin with + +/obj/item/toy/carpplushie/dehy_carp/Destroy() + owner = null + return ..() + // Attack self /obj/item/toy/carpplushie/dehy_carp/attack_self(mob/user as mob) src.add_fingerprint(user) // Anyone can add their fingerprints to it with this diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm deleted file mode 100644 index a81f96a1efc..00000000000 --- a/code/game/objects/items/devices/modkit.dm +++ /dev/null @@ -1,87 +0,0 @@ -#define MODKIT_HELMET 1 -#define MODKIT_SUIT 2 -#define MODKIT_FULL 3 - -/obj/item/device/modkit - name = "hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user." - icon_state = "modkit" - var/parts = MODKIT_FULL - var/target_species = "Human" - - var/list/permitted_types = list( - /obj/item/clothing/head/helmet/space/hardsuit, - /obj/item/clothing/suit/space/hardsuit - ) - -/obj/item/device/modkit/afterattack(obj/item/O, mob/user as mob, proximity) - if(!proximity) - return - - if(!target_species) - return //it shouldn't be null, okay? - - if(!parts) - to_chat(user, "This kit has no parts for this modification left.") - user.unEquip(src) - qdel(src) - return - - var/allowed = 0 - for(var/permitted_type in permitted_types) - if(istype(O, permitted_type)) - allowed = 1 - - var/obj/item/clothing/I = O - if(!istype(I) || !allowed) - to_chat(user, "[src] is unable to modify that.") - return - - var/excluding = ("exclude" in I.species_restricted) - var/in_list = (target_species in I.species_restricted) - if(excluding ^ in_list) - to_chat(user, "[I] is already modified.") - return - - if(!isturf(O.loc)) - to_chat(user, "[O] must be safely placed on the ground for modification.") - return - - playsound(user.loc, O.usesound, 100, 1) - - user.visible_message("\red [user] opens \the [src] and modifies \the [O].","\red You open \the [src] and modify \the [O].") - - I.refit_for_species(target_species) - - if(istype(I, /obj/item/clothing/head/helmet)) - parts &= ~MODKIT_HELMET - if(istype(I, /obj/item/clothing/suit)) - parts &= ~MODKIT_SUIT - - if(!parts) - user.unEquip(src) - qdel(src) - -/obj/item/device/modkit/examine(mob/user) - ..(user) - to_chat(user, "It looks as though it modifies hardsuits to fit [target_species] users.") - -/obj/item/device/modkit/tajaran - name = "Tajaran hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran." - target_species = "Tajaran" - -/obj/item/device/modkit/unathi - name = "Unathi hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Unathi." - target_species = "Unathi" - -/obj/item/device/modkit/skrell - name = "Skrell hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Skrell." - target_species = "Skrell" - -/obj/item/device/modkit/vox - name = "Vox hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Vox." - target_species = "Vox" \ No newline at end of file diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index e734f22b97f..4483a920355 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -32,6 +32,9 @@ // Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby. +/obj/item/device/multitool/Destroy() + buffer = null + return ..() /obj/item/device/multitool/ai_detect var/track_cooldown = 0 @@ -56,7 +59,7 @@ multitool_detect() icon_state = "[initial(icon_state)][detect_state]" track_cooldown = world.time + track_delay - + /obj/item/device/multitool/ai_detect/proc/multitool_detect() var/turf/our_turf = get_turf(src) for(var/mob/living/silicon/ai/AI in ai_list) @@ -76,7 +79,7 @@ if(get_dist(our_turf, detect_turf) < rangewarning) detect_state = PROXIMITY_NEAR break - + /obj/item/device/multitool/ai_detect/admin desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. Has a strange tag that says 'Grief in Safety'" //What else should I say for a meme item? track_delay = 5 diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 25e975fa920..a0d997362ac 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -27,6 +27,8 @@ /obj/item/device/powersink/Destroy() processing_objects.Remove(src) processing_power_items.Remove(src) + PN = null + attached = null return ..() /obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user) diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index f0c4f1e60d6..810b5a95749 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -48,6 +48,7 @@ LIGHTERS ARE IN LIGHTERS.DM /obj/item/clothing/mask/cigarette/Destroy() if(reagents) qdel(reagents) + reagents = null processing_objects -= src return ..() diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index bd6a18b73c1..bc006ed48f0 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -18,10 +18,11 @@ ..() /obj/item/weapon/grenade/plastic/Destroy() - qdel(nadeassembly) - nadeassembly = null + if(nadeassembly) + qdel(nadeassembly) + nadeassembly = null target = null - ..() + return ..() /obj/item/weapon/grenade/plastic/attackby(obj/item/I, mob/user, params) if(!nadeassembly && istype(I, /obj/item/device/assembly_holder)) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 71dafff99ff..5e3baf381c8 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -34,6 +34,7 @@ if(ptank) qdel(ptank) ptank = null + previousturf = null return ..() diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index 04470cf7854..196b0d269a0 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -13,6 +13,10 @@ var/improvised = 0 var/garrote_time +/obj/item/weapon/twohanded/garrote/Destroy() + strangling = null + return ..() + /obj/item/weapon/twohanded/garrote/update_icon() if(strangling) // If we're strangling someone we want our icon to stay wielded icon_state = "garrot_unwrap" diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 6ca1d53e5db..85f9374bc7c 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -26,6 +26,14 @@ payload_name += " " // formatting, ignore me update_icon() +/obj/item/weapon/grenade/chem_grenade/Destroy() + if(nadeassembly) + qdel(nadeassembly) + nadeassembly = null + for(var/thing in beakers) + qdel(thing) + beakers.Cut() + return ..() /obj/item/weapon/grenade/chem_grenade/examine(mob/user) ..(user) diff --git a/code/game/objects/items/weapons/holosign.dm b/code/game/objects/items/weapons/holosign.dm index dac93f9cb04..1a5542b5ef5 100644 --- a/code/game/objects/items/weapons/holosign.dm +++ b/code/game/objects/items/weapons/holosign.dm @@ -13,6 +13,12 @@ var/list/signs = list() var/max_signs = 20 +/obj/item/weapon/holosign_creator/Destroy() + for(var/sign in signs) + qdel(sign) + signs.Cut() + return ..() + /obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag) if(flag) var/turf/T = get_turf(target) diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 2e197926291..4495f637e56 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -18,6 +18,7 @@ var/mopspeed = 30 /obj/item/weapon/mop/New() + ..() create_reagents(mopcap) janitorial_equipment += src diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 045f58d577d..eb904d41bd7 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -19,6 +19,11 @@ burntime = 15 var/obj/item/weapon/canvas/painting = null +/obj/structure/easel/Destroy() + if(painting) + qdel(painting) + painting = null + return ..() //Adding canvases /obj/structure/easel/attackby(var/obj/item/I, var/mob/user, params) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 2ced72cbcfe..4ff25d9da47 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -22,6 +22,15 @@ var/global/list/captain_display_cases = list() var/obj/item/device/assembly/prox_sensor/sensor = null var/state = DISPLAYCASE_FRAME_CIRCUIT +/obj/structure/displaycase_frame/Destroy() + if(circuit) + qdel(circuit) + circuit = null + if(sensor) + qdel(sensor) + sensor = null + return ..() + /obj/structure/displaycase_frame/attackby(obj/item/weapon/W as obj, mob/user as mob, params) var/pstate = state var/turf/T = get_turf(src) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index c2c5fc083fa..316e011a190 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -17,6 +17,12 @@ /obj/structure/door_assembly/New() update_state() +/obj/structure/door_assembly/Destroy() + if(electronics) + qdel(electronics) + electronics = null + return ..() + /obj/structure/door_assembly/door_assembly_com base_icon_state = "com" base_name = "Command Airlock" diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm index 594139f8d70..98ce429bea4 100644 --- a/code/game/objects/structures/engicart.dm +++ b/code/game/objects/structures/engicart.dm @@ -14,6 +14,33 @@ var/obj/item/weapon/storage/toolbox/emergency/myredtoolbox = null var/obj/item/taperoll/engineering/myengitape = null +/obj/structure/engineeringcart/Destroy() + if(myglass) + qdel(myglass) + myglass = null + if(mymetal) + qdel(mymetal) + mymetal = null + if(myplasteel) + qdel(myplasteel) + myplasteel = null + if(myflashlight) + qdel(myflashlight) + myflashlight = null + if(mybluetoolbox) + qdel(mybluetoolbox) + mybluetoolbox = null + if(myyellowtoolbox) + qdel(myyellowtoolbox) + myyellowtoolbox = null + if(myredtoolbox) + qdel(myredtoolbox) + myredtoolbox = null + if(myengitape) + qdel(myengitape) + myengitape = null + return ..() + /obj/structure/engineeringcart/proc/put_in_cart(obj/item/I, mob/user) user.drop_item() I.loc = src diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index e5a89aa1fad..0f39494d361 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -8,6 +8,11 @@ var/obj/item/weapon/extinguisher/has_extinguisher = new/obj/item/weapon/extinguisher var/opened = 0 +/obj/structure/extinguisher_cabinet/Destroy() + if(has_extinguisher) + qdel(has_extinguisher) + has_extinguisher = null + return ..() /obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user, params) if(isrobot(user) || isalien(user)) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 614af2d4ff4..d3f766aac3b 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -19,12 +19,24 @@ /obj/structure/janitorialcart/New() + ..() create_reagents(100) janitorial_equipment += src - /obj/structure/janitorialcart/Destroy() janitorial_equipment -= src + if(mybag) + qdel(mybag) + mybag = null + if(mymop) + qdel(mymop) + mymop = null + if(myspray) + qdel(myspray) + myspray = null + if(myreplacer) + qdel(myreplacer) + myreplacer = null return ..() /obj/structure/janitorialcart/proc/wet_mop(obj/item/weapon/mop, mob/user) diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 49175dfa9e3..e7f29ccd78a 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -8,6 +8,7 @@ var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite /obj/structure/mopbucket/New() + ..() create_reagents(100) janitorial_equipment += src diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 504b2abfa80..1a4b1595b42 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -8,45 +8,50 @@ flags = CONDUCT var/obj/item/target/pinned_target // the current pinned target - Move() - ..() - // Move the pinned target along with the stake - if(pinned_target in view(3, src)) - pinned_target.loc = loc +/obj/structure/target_stake/Destroy() + if(pinned_target) + qdel(pinned_target) + pinned_target = null + return ..() - else // Sanity check: if the pinned target can't be found in immediate view - pinned_target = null - density = 1 +/obj/structure/target_stake/Move() + ..() + // Move the pinned target along with the stake + if(pinned_target in view(3, src)) + pinned_target.loc = loc - attackby(obj/item/W as obj, mob/user as mob, params) - // Putting objects on the stake. Most importantly, targets - if(pinned_target) - return // get rid of that pinned target first! + else // Sanity check: if the pinned target can't be found in immediate view + pinned_target = null + density = 1 - if(istype(W, /obj/item/target)) - density = 0 - W.density = 1 - user.drop_item(src) - W.loc = loc - W.layer = 3.1 - pinned_target = W - to_chat(user, "You slide the target into the stake.") - return +/obj/structure/target_stake/attackby(obj/item/W, mob/user, params) + // Putting objects on the stake. Most importantly, targets + if(pinned_target) + return // get rid of that pinned target first! - attack_hand(mob/user as mob) - // taking pinned targets off! - if(pinned_target) - density = 1 - pinned_target.density = 0 - pinned_target.layer = OBJ_LAYER + if(istype(W, /obj/item/target)) + density = 0 + W.density = 1 + user.drop_item(src) + W.loc = loc + W.layer = 3.1 + pinned_target = W + to_chat(user, "You slide the target into the stake.") - pinned_target.loc = user.loc - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(pinned_target) - to_chat(user, "You take the target out of the stake.") - else - pinned_target.loc = get_turf(user) +/obj/structure/target_stake/attack_hand(mob/user) + // taking pinned targets off! + if(pinned_target) + density = 1 + pinned_target.density = 0 + pinned_target.layer = OBJ_LAYER + + pinned_target.loc = user.loc + if(ishuman(user)) + if(!user.get_active_hand()) + user.put_in_hands(pinned_target) to_chat(user, "You take the target out of the stake.") + else + pinned_target.loc = get_turf(user) + to_chat(user, "You take the target out of the stake.") - pinned_target = null \ No newline at end of file + pinned_target = null \ No newline at end of file diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 26d97a52671..fa59fdc3cd1 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -14,9 +14,13 @@ /obj/structure/toilet/New() + ..() open = round(rand(0, 1)) update_icon() +/obj/structure/toilet/Destroy() + swirlie = null + return ..() /obj/structure/toilet/attack_hand(mob/living/user) if(swirlie) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index ceba6687143..2da2d982ac2 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -34,6 +34,9 @@ obj/structure/windoor_assembly/New(dir=NORTH) obj/structure/windoor_assembly/Destroy() density = 0 + if(electronics) + qdel(electronics) + electronics = null air_update_turf(1) return ..() diff --git a/paradise.dme b/paradise.dme index b87c0b16ab0..95213820d77 100644 --- a/paradise.dme +++ b/paradise.dme @@ -724,7 +724,6 @@ #include "code\game\objects\items\devices\laserpointer.dm" #include "code\game\objects\items\devices\lightreplacer.dm" #include "code\game\objects\items\devices\megaphone.dm" -#include "code\game\objects\items\devices\modkit.dm" #include "code\game\objects\items\devices\multitool.dm" #include "code\game\objects\items\devices\paicard.dm" #include "code\game\objects\items\devices\pipe_painter.dm" From 838d58b1a5687e5bc2063d46f5662c3256e100d9 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 28 Mar 2017 01:06:03 -0400 Subject: [PATCH 2/6] for fixes --- code/modules/clothing/suits/hood.dm | 4 +- code/modules/hydroponics/biogenerator.dm | 5 ++- code/modules/hydroponics/gene_modder.dm | 37 ++++++++++++++----- code/modules/hydroponics/grown.dm | 6 ++- code/modules/hydroponics/growninedible.dm | 5 +++ code/modules/hydroponics/seeds.dm | 6 +++ .../reagents/chemistry/reagents/water.dm | 3 +- code/modules/spacepods/construction.dm | 6 +++ 8 files changed, 58 insertions(+), 14 deletions(-) diff --git a/code/modules/clothing/suits/hood.dm b/code/modules/clothing/suits/hood.dm index 0683394ce9f..23ba6f522a3 100644 --- a/code/modules/clothing/suits/hood.dm +++ b/code/modules/clothing/suits/hood.dm @@ -10,7 +10,9 @@ ..() /obj/item/clothing/suit/hooded/Destroy() - qdel(hood) + if(hood) + qdel(hood) + hood = null return ..() /obj/item/clothing/suit/hooded/proc/MakeHood() diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index ce393c16e15..4f6ce988093 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -34,6 +34,9 @@ if(beaker) qdel(beaker) beaker = null + if(files) + qdel(files) + files = null return ..() /obj/machinery/biogenerator/ex_act(severity) @@ -208,7 +211,7 @@ /obj/machinery/biogenerator/attack_hand(mob/user) interact(user) - + /obj/machinery/biogenerator/attack_ghost(mob/user) interact(user) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 95e195caaf7..ba8feb3c5ad 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -24,13 +24,26 @@ /obj/machinery/plantgenes/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/plantgenes(src) - component_parts += new /obj/item/weapon/stock_parts/console_screen(src) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/circuitboard/plantgenes(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) RefreshParts() +/obj/machinery/plantgenes/Destroy() + core_genes.Cut() + reagent_genes.Cut() + trait_genes.Cut() + target = null + if(seed) + qdel(seed) + seed = null + if(disk) + qdel(disk) + disk = null + return ..() + /obj/machinery/plantgenes/RefreshParts() rating = 0 for(var/I in component_parts) @@ -90,7 +103,7 @@ if(..()) return interact(user) - + /obj/machinery/plantgenes/attack_ghost(mob/user) interact(user) @@ -282,9 +295,9 @@ repaint_seed() if("extract") if(disk && !disk.read_only) - disk.gene = G - if(istype(G, /datum/plant_gene/core/potency)) - var/datum/plant_gene/core/gene = G + disk.gene = G.Copy() + if(istype(disk.gene, /datum/plant_gene/core/potency)) + var/datum/plant_gene/core/gene = disk.gene gene.value = min(gene.value, max_extract_pot) disk.update_name() qdel(seed) @@ -370,6 +383,12 @@ pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) +/obj/item/weapon/disk/plantgene/Destroy() + if(gene) + qdel(gene) + gene = null + return ..() + /obj/item/weapon/disk/plantgene/attackby(obj/item/weapon/W, mob/user, params) ..() if(istype(W, /obj/item/weapon/pen)) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 2322bbad5ca..d27495f26c7 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -39,7 +39,11 @@ transform *= TransformUsingVariable(seed.potency, 100, 0.5) //Makes the resulting produce's sprite larger or smaller based on potency! add_juice() - +/obj/item/weapon/reagent_containers/food/snacks/grown/Destroy() + if(seed) + qdel(seed) + seed = null + return ..() /obj/item/weapon/reagent_containers/food/snacks/grown/proc/add_juice() if(reagents) diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index 64d2eff90b7..0c79b99fbda 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -31,6 +31,11 @@ transform *= TransformUsingVariable(seed.potency, 100, 0.5) add_juice() +/obj/item/weapon/grown/Destroy() + if(seed) + qdel(seed) + seed = null + return ..() /obj/item/weapon/grown/attackby(obj/item/O, mob/user, params) ..() diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index d35621e4c59..9aa93f9f92b 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -68,6 +68,12 @@ for(var/reag_id in reagents_add) genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id]) +/obj/item/seeds/Destroy() + for(var/thing in genes) + qdel(thing) + genes.Cut() + return ..() + /obj/item/seeds/proc/Copy() var/obj/item/seeds/S = new type(null, 1) // Copy all the stats diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index 286af5d4863..70d2a9f76c0 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -48,8 +48,7 @@ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)) var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O - if(!cube.wrapped) - cube.Expand() + cube.Expand() // Dehydrated carp if(istype(O, /obj/item/toy/carpplushie/dehy_carp)) var/obj/item/toy/carpplushie/dehy_carp/dehy = O diff --git a/code/modules/spacepods/construction.dm b/code/modules/spacepods/construction.dm index 0426b940d0b..4fcd4aa5e52 100644 --- a/code/modules/spacepods/construction.dm +++ b/code/modules/spacepods/construction.dm @@ -19,6 +19,12 @@ dir = EAST +/obj/structure/spacepod_frame/Destroy() + if(construct) + qdel(construct) + construct = null + return ..() + /obj/structure/spacepod_frame/attackby(obj/item/W as obj, mob/user as mob, params) if(!construct || !construct.action(W, user)) ..() From 24a2af5c43eebd7c056d4bddb6df23ec4931a584 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 31 Mar 2017 19:55:18 -0400 Subject: [PATCH 3/6] helpers --- code/__HELPERS/qdel.dm | 2 ++ paradise.dme | 1 + 2 files changed, 3 insertions(+) create mode 100644 code/__HELPERS/qdel.dm diff --git a/code/__HELPERS/qdel.dm b/code/__HELPERS/qdel.dm new file mode 100644 index 00000000000..14b1f9d9594 --- /dev/null +++ b/code/__HELPERS/qdel.dm @@ -0,0 +1,2 @@ +#define QDEL_IN(item, time) addtimer(GLOBAL_PROC, "qdel", time, FALSE, item) +#define QDEL_NULL(item) qdel(item); item = null \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 95213820d77..c057e4ea176 100644 --- a/paradise.dme +++ b/paradise.dme @@ -66,6 +66,7 @@ #include "code\__HELPERS\matrices.dm" #include "code\__HELPERS\mobs.dm" #include "code\__HELPERS\names.dm" +#include "code\__HELPERS\qdel.dm" #include "code\__HELPERS\sanitize_values.dm" #include "code\__HELPERS\text.dm" #include "code\__HELPERS\time.dm" From f931ea9e363b08ef5b1c3d9b6d88c44b5fc25574 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 1 Apr 2017 07:55:27 -0400 Subject: [PATCH 4/6] better logging --- code/modules/garbage_collection/garbage_collector.dm | 2 +- code/modules/garbage_collection/gc_testing.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/garbage_collection/garbage_collector.dm b/code/modules/garbage_collection/garbage_collector.dm index e2204788016..b293ccefd4f 100644 --- a/code/modules/garbage_collection/garbage_collector.dm +++ b/code/modules/garbage_collection/garbage_collector.dm @@ -82,7 +82,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector #undef GC_COLLECTIONS_PER_TICK /datum/controller/process/garbage_collector/proc/hardDel(var/datum/D) - gc_hard_del_types |= D.type + gc_hard_del_types["[D.type]"]++ D.hard_deleted = 1 if(!D.gcDestroyed) spawn(-1) diff --git a/code/modules/garbage_collection/gc_testing.dm b/code/modules/garbage_collection/gc_testing.dm index b1b413a0398..2a61c8dd462 100644 --- a/code/modules/garbage_collection/gc_testing.dm +++ b/code/modules/garbage_collection/gc_testing.dm @@ -25,9 +25,9 @@ to_chat(usr, "No hard del()'d types found.") return - to_chat(usr, "Types hard del()'d by the GC:") + to_chat(usr, "Types hard del()'d by the GC and number of times failed:") for(var/A in gc_hard_del_types) - to_chat(usr, "[A]") + to_chat(usr, "[A] - [gc_hard_del_types[A]] times") #ifdef TESTING /client/var/running_find_references From 9c159e63ddf0061da9e0615402a27240f5f359a1 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 1 Apr 2017 08:22:32 -0400 Subject: [PATCH 5/6] sleep in destroy --- code/modules/recycling/disposal.dm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 9d49cb03291..dd3856afcc4 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -1146,11 +1146,11 @@ update() return - + /obj/structure/disposalpipe/trunk/Destroy() if(istype(linked, /obj/structure/disposaloutlet)) var/obj/structure/disposaloutlet/O = linked - O.expel() + O.expel(animation = 0) else if(istype(linked, /obj/machinery/disposal)) var/obj/machinery/disposal/D = linked if(D.trunk == src) @@ -1207,7 +1207,7 @@ playsound(loc, W.usesound, 100, 1) to_chat(user, "Slicing the disposal pipe.") if(do_after(user, 30 * W.toolspeed, target = src)) - if(!W.isOn()) + if(!W.isOn()) return welded() else @@ -1290,12 +1290,13 @@ // expel the contents of the holder object, then delete it // called when the holder exits the outlet - proc/expel(var/obj/structure/disposalholder/H) + proc/expel(var/obj/structure/disposalholder/H, animation = 1) - flick("outlet-open", src) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) - sleep(20) //wait until correct animation frame - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + if(animation) + flick("outlet-open", src) + playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) + sleep(20) //wait until correct animation frame + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) if(H) for(var/atom/movable/AM in H) @@ -1308,7 +1309,6 @@ H.vent_gas(src.loc) qdel(H) - return attackby(var/obj/item/I, var/mob/user, params) if(!I || !user) From 5c24029a8a1c601185557ba8b7c53a611d6bc6c5 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 1 Apr 2017 08:40:03 -0400 Subject: [PATCH 6/6] baton --- code/game/objects/items/weapons/stunbaton.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index f2bd9cafedf..c3995876136 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -201,11 +201,17 @@ stunforce = 5 hitcost = 3750 slot_flags = SLOT_BACK - var/obj/item/device/assembly/igniter/sparkler = 0 + var/obj/item/device/assembly/igniter/sparkler = null /obj/item/weapon/melee/baton/cattleprod/New() ..() - sparkler = new (src) + sparkler = new(src) + +/obj/item/weapon/melee/baton/cattleprod/Destroy() + if(sparkler) + qdel(sparkler) + sparkler = null + return ..() /obj/item/weapon/melee/baton/cattleprod/baton_stun() if(sparkler.activate())