diff --git a/code/FEA/FEA_turf_tile.dm b/code/FEA/FEA_turf_tile.dm index ba506f5e7e..da7b1f856c 100644 --- a/code/FEA/FEA_turf_tile.dm +++ b/code/FEA/FEA_turf_tile.dm @@ -148,7 +148,7 @@ turf/simulated if(istype(target)) air_master.tiles_to_update.Add(target) - Del() + Destroy() if(air_master) if(parent) air_master.groups_to_rebuild.Add(parent) diff --git a/code/TriDimension/controller.dm b/code/TriDimension/controller.dm index e336e417b6..a9d4df675a 100644 --- a/code/TriDimension/controller.dm +++ b/code/TriDimension/controller.dm @@ -30,7 +30,7 @@ /obj/effect/landmark/zcontroller/Destroy() processing_objects.Remove(src) - return + return ..() /obj/effect/landmark/zcontroller/process() if (world.time > fast_time) diff --git a/code/__HELPERS/datum_pool.dm b/code/__HELPERS/datum_pool.dm index 9f21fbae6e..16594ed048 100644 --- a/code/__HELPERS/datum_pool.dm +++ b/code/__HELPERS/datum_pool.dm @@ -76,6 +76,10 @@ var/global/list/GlobalPool = list() D.Destroy() D.ResetVars() +/proc/IsPooled(var/datum/D) + if(isnull(GlobalPool[D.type]) || length(GlobalPool[D.type]) == 0) + return 0 + return 1 /datum/proc/Prepare(args) if(islist(args)) diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm index 95adbb0919..1f27f4c1de 100644 --- a/code/controllers/ProcessScheduler/core/process.dm +++ b/code/controllers/ProcessScheduler/core/process.dm @@ -314,3 +314,9 @@ datum/controller/process/proc/enable() /datum/controller/process/proc/getTicks() return ticks + +/datum/controller/process/proc/getStatName() + return name + +/datum/controller/process/proc/getTickTime() + return "#[getTicks()]\t- [getLastRunTime()]" diff --git a/code/controllers/Processes/alarm.dm b/code/controllers/Processes/alarm.dm index d41aa6ffdf..6269ab89d1 100644 --- a/code/controllers/Processes/alarm.dm +++ b/code/controllers/Processes/alarm.dm @@ -4,3 +4,7 @@ /datum/controller/process/alarm/doWork() alarm_manager.fire() + +/datum/controller/process/alarm/getStatName() + var/list/alarms = alarm_manager.active_alarms() + return ..()+"([alarms.len])" diff --git a/code/controllers/Processes/disease.dm b/code/controllers/Processes/disease.dm index a8d840097e..35cf0d9891 100644 --- a/code/controllers/Processes/disease.dm +++ b/code/controllers/Processes/disease.dm @@ -9,3 +9,6 @@ /datum/controller/process/disease/doWork() updateQueueInstance.init(active_diseases, "process") updateQueueInstance.Run() + +/datum/controller/process/disease/getStatName() + return ..()+"([active_diseases.len])" diff --git a/code/controllers/Processes/garbage.dm b/code/controllers/Processes/garbage.dm index b9a6c7017b..7180008ddb 100644 --- a/code/controllers/Processes/garbage.dm +++ b/code/controllers/Processes/garbage.dm @@ -1,14 +1,14 @@ var/datum/controller/process/garbage_collector/garbage_collector var/list/delayed_garbage = list() -#define GC_DEBUG 1 /datum/controller/process/garbage_collector var/garbage_collect = 1 // Whether or not to actually do work var/collection_timeout = 300 //deciseconds to wait to let running procs finish before we just say fuck it and force del() the object var/max_checks_multiplier = 5 //multiplier (per-decisecond) for calculating max number of tests per tick. These tests check if our GC'd objects are actually GC'd var/max_forcedel_multiplier = 1 //multiplier (per-decisecond) for calculating max number of force del() calls per tick. - var/dels = 0 // number of del()'s we've done this tick + var/dels = 0 // number of del()'s we've done this tick + var/hard_dels = 0 // number of hard dels in total var/list/destroyed = list() // list of refID's of things that should be garbage collected // refID's are associated with the time at which they time out and need to be manually del() // we do this so we aren't constantly locating them and preventing them from being gc'd @@ -60,6 +60,7 @@ var/list/delayed_garbage = list() logging["[A.type]"]++ del(A) ++dels + ++hard_dels #ifdef GC_DEBUG else testing("GC: [refID] properly GC'd at [world.time] with timeout [GCd_at_time]") @@ -76,6 +77,8 @@ var/list/delayed_garbage = list() destroyed -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list. destroyed["\ref[A]"] = world.time +/datum/controller/process/garbage_collector/getStatName() + return ..()+"([garbage_collector.dels]/[garbage_collector.hard_dels])" // Should be treated as a replacement for the 'del' keyword. // Datums passed to this will be given a chance to clean up references to allow the GC to collect them. @@ -92,6 +95,7 @@ var/list/delayed_garbage = list() //warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.") del(A) garbage_collector.dels++ + garbage_collector.hard_dels++ else if(isnull(A.gcDestroyed)) // Let our friend know they're about to get collected . = !A.Destroy() @@ -99,13 +103,19 @@ var/list/delayed_garbage = list() A.finalize_qdel() /datum/proc/finalize_qdel() - del(src) + if(IsPooled(src)) + PlaceInPool(src) + else + del(src) /atom/finalize_qdel() - if(garbage_collector) - garbage_collector.AddTrash(src) + if(IsPooled(src)) + PlaceInPool(src) else - delayed_garbage |= src + if(garbage_collector) + garbage_collector.AddTrash(src) + else + delayed_garbage |= src /icon/finalize_qdel() del(src) @@ -126,7 +136,6 @@ var/list/delayed_garbage = list() tag = null return -#define TESTING 1 #ifdef TESTING /client/var/running_find_references diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm index 61f3c7f4de..232ef91973 100644 --- a/code/controllers/Processes/machinery.dm +++ b/code/controllers/Processes/machinery.dm @@ -42,3 +42,7 @@ #endif scheck() + + +/datum/controller/process/machinery/getStatName() + return ..()+"([machines.len])" \ No newline at end of file diff --git a/code/controllers/Processes/mob.dm b/code/controllers/Processes/mob.dm index b3765b0cf9..39d4844a02 100644 --- a/code/controllers/Processes/mob.dm +++ b/code/controllers/Processes/mob.dm @@ -18,3 +18,6 @@ if(updateQueueInstance) updateQueueInstance.init(mob_list, "Life") updateQueueInstance.Run() + +/datum/controller/process/mob/getStatName() + return ..()+"([mob_list.len])" diff --git a/code/controllers/Processes/nanoui.dm b/code/controllers/Processes/nanoui.dm index a35280131f..654b1621be 100644 --- a/code/controllers/Processes/nanoui.dm +++ b/code/controllers/Processes/nanoui.dm @@ -9,3 +9,6 @@ /datum/controller/process/nanoui/doWork() updateQueueInstance.init(nanomanager.processing_uis, "process") updateQueueInstance.Run() + +/datum/controller/process/nanoui/getStatName() + return ..()+"([nanomanager.processing_uis.len])" diff --git a/code/controllers/Processes/obj.dm b/code/controllers/Processes/obj.dm index 15ad98dd3d..37766cf92d 100644 --- a/code/controllers/Processes/obj.dm +++ b/code/controllers/Processes/obj.dm @@ -19,3 +19,6 @@ var/global/list/object_profiling = list() if(updateQueueInstance) updateQueueInstance.init(processing_objects, "process") updateQueueInstance.Run() + +/datum/controller/process/obj/getStatName() + return ..()+"([processing_objects.len])" diff --git a/code/controllers/Processes/pipenet.dm b/code/controllers/Processes/pipenet.dm index 56a068f54c..8a5d6a22ca 100644 --- a/code/controllers/Processes/pipenet.dm +++ b/code/controllers/Processes/pipenet.dm @@ -10,3 +10,6 @@ continue pipe_networks.Remove(pipeNetwork) + +/datum/controller/process/pipenet/getStatName() + return ..()+"([pipe_networks.len])" \ No newline at end of file diff --git a/code/controllers/Processes/powernet.dm b/code/controllers/Processes/powernet.dm index 1edf194915..f2a9822816 100644 --- a/code/controllers/Processes/powernet.dm +++ b/code/controllers/Processes/powernet.dm @@ -10,3 +10,6 @@ continue powernets.Remove(powerNetwork) + +/datum/controller/process/powernet/getStatName() + return ..()+"([powernets.len])" \ No newline at end of file diff --git a/code/defines/procs/sd_Alert.dm b/code/defines/procs/sd_Alert.dm index 1e2649687c..e10416f112 100644 --- a/code/defines/procs/sd_Alert.dm +++ b/code/defines/procs/sd_Alert.dm @@ -93,7 +93,7 @@ sd_alert response list/validation - Del() + Destroy() target << browse(null,"window=\ref[src]") ..() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 9ff603900c..152622f88e 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -24,10 +24,12 @@ /atom/Destroy() . = ..() + density = 0 SetOpacity(0) if(reagents) qdel(reagents) + reagents = null for(var/atom/movable/AM in contents) qdel(AM) invisibility = 101 diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index b4adaea049..c1d14d0040 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -22,6 +22,11 @@ new/mob/living/simple_animal/hostile/blobspore(src.loc, src) return 1 +/obj/effect/blob/factory/Destroy() + for(var/mob/living/simple_animal/hostile/blobspore/spore in spores) + if(spore.factory == src) + spore.factory = null + ..() /mob/living/simple_animal/hostile/blobspore name = "blob" @@ -58,9 +63,10 @@ ..(loc) return death() - ..() - if(factory) - factory.spores -= src - ..() qdel(src) +/mob/living/simple_animal/hostile/blobspore/Destroy() + if(factory) + factory.spores -= src + factory = null + ..() diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index a89ebb99c6..8b90715e79 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -31,7 +31,7 @@ return - Del() + Destroy() blobs -= src ..() return @@ -212,7 +212,7 @@ icon_state = "blobidle0" - Del() + Destroy() var/obj/effect/blob/B = new /obj/effect/blob( src.loc ) spawn(30) B.Life() diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 02d31d5846..9d18216aa5 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -97,6 +97,10 @@ pass_flags = PASSTABLE | PASSGRILLE power = 2 +/obj/effect/meteor/Destroy() + walk(src,0) //this cancels the walk_towards() proc + ..() + /obj/effect/meteor/Bump(atom/A) spawn(0) @@ -157,4 +161,4 @@ if(istype(W, /obj/item/weapon/pickaxe)) qdel(src) return - ..() \ No newline at end of file + ..() diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index d26f1a0789..7b6b1dc952 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -48,6 +48,9 @@ if(bomb.timing) user << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]" +/obj/item/weapon/pinpointer/Destroy() + active = 0 + ..() /obj/item/weapon/pinpointer/advpinpointer name = "Advanced Pinpointer" diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 86eadfa053..acd558403f 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -98,6 +98,10 @@ TLV["temperature"] = list(20, 40, 140, 160) // K target_temperature = 90 +/obj/machinery/alarm/Destroy() + if(radio_controller) + radio_controller.remove_object(src, frequency) + ..() /obj/machinery/alarm/New(var/loc, var/dir, var/building = 0) ..() diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 0294607e8a..390696dfcd 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -73,6 +73,11 @@ if(radio_controller) set_frequency(frequency) +obj/machinery/air_sensor/Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + ..() + /obj/machinery/computer/general_air_control icon = 'icons/obj/computer.dmi' icon_state = "tank" @@ -86,6 +91,11 @@ var/datum/radio_frequency/radio_connection circuit = /obj/item/weapon/circuitboard/air_management +obj/machinery/computer/general_air_control/Destroy() + if(radio_controller) + radio_controller.remove_object(src, frequency) + ..() + /obj/machinery/computer/general_air_control/attack_hand(mob/user) if(..(user)) return diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 910c84608f..bb9d399cb8 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -20,6 +20,10 @@ return 1 +/obj/machinery/portable_atmospherics/Destroy() + del(air_contents) + ..() + /obj/machinery/portable_atmospherics/initialize() . = ..() spawn() diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index d1257eeaf6..3d54f12e30 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -15,7 +15,6 @@ var/locked = 1 //var/emagged = 0 //Urist: Moving that var to the general /bot tree as it's used by most bots - /obj/machinery/bot/proc/turn_on() if(stat) return 0 on = 1 diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index 87eb1be30f..7901c09746 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -58,6 +58,10 @@ if(radio_controller) radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) +/obj/machinery/bot/cleanbot/Destroy() + if(radio_controller) + radio_controller.remove_object(src,beacon_freq) + ..() /obj/machinery/bot/cleanbot/turn_on() . = ..() diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 4226700d2c..e6df495a10 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -76,6 +76,12 @@ suffix = "#[count]" name = "Mulebot ([suffix])" +/obj/machinery/bot/mulebot/Destroy() + if(radio_controller) + radio_controller.remove_object(src,beacon_freq) + radio_controller.remove_object(src,control_freq) + ..() + // attack by item // emag : lock/unlock, // screwdriver: open/close hatch diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index f29f8355ca..7f01ba7e5d 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -107,6 +107,11 @@ if((lasercolor == "r") && (name == created_name)) name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT") +/obj/machinery/bot/mulebot/Destroy() + if(radio_controller) + radio_controller.remove_object(src,beacon_freq) + radio_controller.remove_object(src,control_freq) + ..() /obj/machinery/bot/secbot/update_icon() if(on && is_attacking) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index da733083fc..5670ef2060 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -53,6 +53,14 @@ ASSERT(src.network.len > 0) ..() +/obj/machinery/camera/Destroy() + deactivate(null, 0) //kick anyone viewing out + if(assembly) + qdel(assembly) + assembly = null + qdel(wires) + ..() + /obj/machinery/camera/emp_act(severity) if(!isEmpProof()) if(prob(100/severity)) diff --git a/code/game/machinery/computer3/laptop.dm b/code/game/machinery/computer3/laptop.dm index 82807769b4..484db52462 100644 --- a/code/game/machinery/computer3/laptop.dm +++ b/code/game/machinery/computer3/laptop.dm @@ -185,7 +185,7 @@ else stat &= ~NOPOWER - Del() + Destroy() if(istype(loc,/obj/item/device/laptop)) var/obj/O = loc spawn(5) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index d90c895000..4ccc48f8bd 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -25,8 +25,10 @@ initialize_directions = dir /obj/machinery/atmospherics/unary/cryo_cell/Destroy() - if(occupant) - occupant.loc = loc + var/turf/T = loc + T.contents += contents + if(beaker) + beaker.loc = get_step(loc, SOUTH) //Beaker is carefully ejected from the wreckage of the cryotube ..() /obj/machinery/atmospherics/unary/cryo_cell/initialize() diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index ad9d991036..053b776736 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -30,7 +30,7 @@ obj/machinery/door/airlock/proc/execute_current_command() if (!cur_command) return - + do_command(cur_command) if (command_completed(cur_command)) cur_command = null @@ -63,7 +63,7 @@ obj/machinery/door/airlock/proc/do_command(var/command) lock() sleep(2) - + send_status() obj/machinery/door/airlock/proc/command_completed(var/command) @@ -85,7 +85,7 @@ obj/machinery/door/airlock/proc/command_completed(var/command) if("secure_close") return (locked && density) - + return 1 //Unknown command. Just assume it's completed. obj/machinery/door/airlock/proc/send_status(var/bumped = 0) @@ -97,7 +97,7 @@ obj/machinery/door/airlock/proc/send_status(var/bumped = 0) signal.data["door_status"] = density?("closed"):("open") signal.data["lock_status"] = locked?("locked"):("unlocked") - + if (bumped) signal.data["bumped_with_access"] = 1 @@ -142,8 +142,10 @@ obj/machinery/door/airlock/New() if(radio_controller) set_frequency(frequency) - - +obj/machinery/door/airlock/Destroy() + if(frequency && radio_controller) + radio_controller.remove_object(src,frequency) + ..() obj/machinery/airlock_sensor icon = 'icons/obj/airlock_machines.dmi' @@ -215,6 +217,10 @@ obj/machinery/airlock_sensor/New() if(radio_controller) set_frequency(frequency) +obj/machinery/airlock_sensor/Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + ..() obj/machinery/airlock_sensor/airlock_interior command = "cycle_interior" @@ -283,6 +289,11 @@ obj/machinery/access_button/New() if(radio_controller) set_frequency(frequency) +obj/machinery/access_button/Destroy() + if(radio_controller) + radio_controller.remove_object(src, frequency) + ..() + obj/machinery/access_button/airlock_interior frequency = 1379 command = "cycle_interior" diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index 67e5c83dc3..27033903af 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -13,6 +13,11 @@ ..() air_connection = new +/obj/machinery/door/airlock/alarmlock/Destroy() + if(radio_controller) + radio_controller.remove_object(src,air_frequency) + ..() + /obj/machinery/door/airlock/alarmlock/initialize() ..() radio_controller.remove_object(src, air_frequency) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 17db582bdd..8fd0629ed0 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -68,7 +68,6 @@ update_nearby_tiles(need_rebuild=1) return - /obj/machinery/door/Destroy() density = 0 update_nearby_tiles() diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 0e6de7c5dc..a128e6c4e4 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -9,6 +9,11 @@ var/on = 1 +obj/machinery/embedded_controller/radio/Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + ..() + /obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) return 0 diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index ebe0bc60d6..1c57b14a90 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -49,7 +49,7 @@ Class Variables: Class Procs: New() 'game/machinery/machine.dm' - Del() 'game/machinery/machine.dm' + Destroy() 'game/machinery/machine.dm' auto_use_power() 'game/machinery/machine.dm' This proc determines how power mode power is deducted by the machine. diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index e6dcd63bd0..501d7a0b75 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -190,8 +190,10 @@ pulling = 0 - - +/obj/machinery/magnetic_module/Destroy() + if(radio_controller) + radio_controller.remove_object(src, freq) + ..() /obj/machinery/magnetic_controller name = "Magnetic Control Console" @@ -399,25 +401,7 @@ // there doesn't HAVE to be separators but it makes paths syntatically visible - - - - - - - - - - - - - - - - - - - - - - +/obj/machinery/magnetic_controller/Destroy() + if(radio_controller) + radio_controller.remove_object(src, frequency) + ..() diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index de2a13aab5..d7224f2212 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -240,6 +240,7 @@ Transponder Codes: