diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index e8494697dc..d9cfb93a18 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -72,6 +72,10 @@ assign_uid() id_tag = num2text(uid) +/obj/machinery/atmospherics/unary/vent_pump/Destroy() + unregister_radio(src, frequency) + ..() + /obj/machinery/atmospherics/unary/vent_pump/high_volume name = "Large Air Vent" power_channel = EQUIP @@ -209,14 +213,6 @@ return pressure_delta -//Radio remote control - -/obj/machinery/atmospherics/unary/vent_pump/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency,radio_filter_in) - /obj/machinery/atmospherics/unary/vent_pump/proc/broadcast_status() if(!radio_connection) return 0 @@ -258,7 +254,7 @@ radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null if(frequency) - set_frequency(frequency) + radio_connection = register_radio(src, frequency, frequency, radio_filter_in) src.broadcast_status() /obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal) diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index d09328d767..43874a64d9 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -41,6 +41,11 @@ assign_uid() id_tag = num2text(uid) +/obj/machinery/atmospherics/unary/vent_scrubber/Destroy() + unregister_radio(src, frequency) + ..() + + /obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0) if(!check_icon_cache()) return diff --git a/code/controllers/Processes/garbage.dm b/code/controllers/Processes/garbage.dm index 29b9755a5c..757729dfa6 100644 --- a/code/controllers/Processes/garbage.dm +++ b/code/controllers/Processes/garbage.dm @@ -78,7 +78,7 @@ var/list/delayed_garbage = list() destroyed["\ref[A]"] = world.time /datum/controller/process/garbage_collector/getStatName() - return ..()+"([garbage_collector.dels]/[garbage_collector.hard_dels])" + return ..()+"([garbage_collector.destroyed.len]/[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. @@ -121,7 +121,7 @@ var/list/delayed_garbage = list() /icon/finalize_qdel() del(src) -/imagine/finalize_qdel() +/image/finalize_qdel() del(src) /mob/finalize_qdel() diff --git a/code/defines/procs/radio.dm b/code/defines/procs/radio.dm index 1e0e045928..0ee38f3b12 100644 --- a/code/defines/procs/radio.dm +++ b/code/defines/procs/radio.dm @@ -3,6 +3,16 @@ #define TELECOMMS_RECEPTION_RECEIVER 2 #define TELECOMMS_RECEPTION_BOTH 3 +/proc/register_radio(source, old_frequency, new_frequency, radio_filter) + if(old_frequency) + radio_controller.remove_object(source, old_frequency) + if(new_frequency) + return radio_controller.add_object(source, new_frequency, radio_filter) + +/proc/unregister_radio(source, frequency) + if(radio_controller) + radio_controller.remove_object(source, frequency) + /proc/get_frequency_name(var/display_freq) var/freq_text diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index e1297510c8..b5bd66f4cf 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -99,8 +99,10 @@ target_temperature = 90 /obj/machinery/alarm/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + unregister_radio(src, frequency) + if(wires) + qdel(wires) + wires = null ..() /obj/machinery/alarm/New(var/loc, var/dir, var/building = 0) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 7ed213043d..37cb62c5cb 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -24,7 +24,7 @@ for(var/x in verbs) verbs -= x set_broken() - var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread() + var/datum/effect/effect/system/smoke_spread/smoke = PoolOrNew(/datum/effect/effect/system/smoke_spread) smoke.set_up(5, 0, src) smoke.start() return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 0857d2d175..2211fced44 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1015,12 +1015,18 @@ About the new airlock wires panel: else wires = new/datum/wires/airlock(src) +/obj/machinery/door/airlock/initialize() if(src.closeOtherId != null) - spawn (5) - for (var/obj/machinery/door/airlock/A in world) - if(A.closeOtherId == src.closeOtherId && A != src) - src.closeOther = A - break + for (var/obj/machinery/door/airlock/A in world) + if(A.closeOtherId == src.closeOtherId && A != src) + src.closeOther = A + break + +/obj/machinery/door/airlock/Destroy() + if(wires) + qdel(wires) + wires = null + ..() // Most doors will never be deconstructed over the course of a round, // so as an optimization defer the creation of electronics until diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index a056cbc0f9..3709f2dac6 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -148,6 +148,7 @@ /obj/machinery/porta_turret/Destroy() //deletes its own cover with it qdel(cover) + cover = null ..() /obj/machinery/porta_turret/proc/isLocked(mob/user) @@ -864,6 +865,10 @@ density = 0 var/obj/machinery/porta_turret/Parent_Turret = null +/obj/machinery/porta_turret_cover/Destroy() + Parent_Turret = null + ..() + /obj/machinery/porta_turret_cover/attack_ai(mob/user) return attack_hand(user) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 594bc89bd0..34f3525191 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -155,32 +155,36 @@ if (building==0) init() else - area = src.loc.loc:master + area = get_area(src) area.apc |= src opened = 1 operating = 0 name = "[area.name] APC" stat |= MAINT src.update_icon() - spawn(5) - src.update() + +/obj/machinery/power/apc/initialize() + ..() + src.update() /obj/machinery/power/apc/Destroy() if(operating && malf && src.z in config.station_levels) //if (is_type_in_list(get_area(src), the_station_areas)) malf.hacked_apcs -= src + + area.apc -= src area.power_light = 0 area.power_equip = 0 area.power_environ = 0 area.power_change() if(wires) - wires.Destroy() + qdel(wires) wires = null if(cell) cell.loc = loc cell = null if(terminal) - disconnect_terminal() - + qdel(terminal) + terminal = null ..() /obj/machinery/power/apc/proc/make_terminal() diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index efccd0aa4f..ad451dde05 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -6,8 +6,9 @@ ..() charge = maxcharge - spawn(5) - updateicon() +/obj/item/weapon/cell/initialize() + ..() + updateicon() /obj/item/weapon/cell/drain_power(var/drain_check, var/surge, var/amount = 0) diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 24245f00e4..cec6bd57f6 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -23,6 +23,7 @@ /obj/machinery/power/terminal/Destroy() if(master) master.disconnect_terminal() + master = null return ..() /obj/machinery/power/terminal/hide(var/i) @@ -36,4 +37,4 @@ // Needed so terminals are not removed from machines list. // Powernet rebuilds need this to work properly. /obj/machinery/power/terminal/process() - return 1 + return 1