diff --git a/baystation12.dme b/baystation12.dme index 1d6a6b13a9..601e1c2412 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -16,7 +16,7 @@ #include "code\setup.dm" #include "code\stylesheet.dm" #include "code\world.dm" -#include "code\__HELPERS\atom_pool.dm" +#include "code\__HELPERS\datum_pool.dm" #include "code\__HELPERS\files.dm" #include "code\__HELPERS\game.dm" #include "code\__HELPERS\global_lists.dm" @@ -328,6 +328,7 @@ #include "code\game\machinery\bioprinter.dm" #include "code\game\machinery\bluespacerelay.dm" #include "code\game\machinery\buttons.dm" +#include "code\game\machinery\CableLayer.dm" #include "code\game\machinery\cell_charger.dm" #include "code\game\machinery\cloning.dm" #include "code\game\machinery\constructable_frame.dm" @@ -338,6 +339,7 @@ #include "code\game\machinery\doppler_array.dm" #include "code\game\machinery\flasher.dm" #include "code\game\machinery\floodlight.dm" +#include "code\game\machinery\floorlayer.dm" #include "code\game\machinery\hologram.dm" #include "code\game\machinery\holosign.dm" #include "code\game\machinery\igniter.dm" @@ -471,6 +473,7 @@ #include "code\game\machinery\kitchen\smartfridge.dm" #include "code\game\machinery\pipe\construction.dm" #include "code\game\machinery\pipe\pipe_dispenser.dm" +#include "code\game\machinery\pipe\pipelayer.dm" #include "code\game\machinery\telecomms\broadcaster.dm" #include "code\game\machinery\telecomms\logbrowser.dm" #include "code\game\machinery\telecomms\machine_interactions.dm" @@ -546,6 +549,7 @@ #include "code\game\objects\items\bodybag.dm" #include "code\game\objects\items\contraband.dm" #include "code\game\objects\items\crayons.dm" +#include "code\game\objects\items\glassjar.dm" #include "code\game\objects\items\latexballoon.dm" #include "code\game\objects\items\shooting_range.dm" #include "code\game\objects\items\toys.dm" diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 7d57ea6c8f..37985034b1 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -44,15 +44,15 @@ obj/machinery/atmospherics/binary return null - Del() + Destroy() loc = null if(node1) node1.disconnect(src) - del(network1) + qdel(network1) if(node2) node2.disconnect(src) - del(network2) + qdel(network2) node1 = null node2 = null @@ -123,11 +123,11 @@ obj/machinery/atmospherics/binary disconnect(obj/machinery/atmospherics/reference) if(reference==node1) - del(network1) + qdel(network1) node1 = null else if(reference==node2) - del(network2) + qdel(network2) node2 = null update_icon() diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index a4b720302b..6627d15d73 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -112,10 +112,10 @@ else if(node1) node1.disconnect(src) - del(network1) + qdel(network1) if(node2) node2.disconnect(src) - del(network2) + qdel(network2) node1 = null node2 = null diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index b0ef990145..7604f33063 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -258,4 +258,4 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) diff --git a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm index 6923b6d31e..aead60a382 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm @@ -38,15 +38,15 @@ if(WEST) initialize_directions = NORTH|SOUTH - Del() + Destroy() loc = null if(node1) node1.disconnect(src) - del(network1) + qdel(network1) if(node2) node2.disconnect(src) - del(network2) + qdel(network2) node1 = null node2 = null @@ -110,10 +110,10 @@ else if(node1) node1.disconnect(src) - del(network1) + qdel(network1) if(node2) node2.disconnect(src) - del(network2) + qdel(network2) node1 = null node2 = null @@ -216,11 +216,11 @@ disconnect(obj/machinery/atmospherics/reference) if(reference==node1) - del(network1) + qdel(network1) node1 = null else if(reference==node2) - del(network2) + qdel(network2) node2 = null return null diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 87eaf9250d..079dfb76cd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -235,4 +235,4 @@ Thus, the two variables affect pump operation are set in New(): "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm index 3478f0f142..b2966ef431 100644 --- a/code/ATMOSPHERICS/components/omni_devices/filter.dm +++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm @@ -24,7 +24,7 @@ for(var/datum/omni_port/P in ports) P.air.volume = ATMOS_DEFAULT_VOLUME_FILTER -/obj/machinery/atmospherics/omni/filter/Del() +/obj/machinery/atmospherics/omni/filter/Destroy() input = null output = null filters.Cut() diff --git a/code/ATMOSPHERICS/components/omni_devices/mixer.dm b/code/ATMOSPHERICS/components/omni_devices/mixer.dm index 970a33feee..f52269ee60 100644 --- a/code/ATMOSPHERICS/components/omni_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/omni_devices/mixer.dm @@ -49,7 +49,7 @@ for(var/datum/omni_port/P in ports) P.air.volume = ATMOS_DEFAULT_VOLUME_MIXER -/obj/machinery/atmospherics/omni/mixer/Del() +/obj/machinery/atmospherics/omni/mixer/Destroy() inputs.Cut() output = null ..() diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index 3d259ad941..52ab44fa74 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -98,7 +98,7 @@ "\blue You have unfastened \the [src].", \ "You hear a ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) /obj/machinery/atmospherics/omni/attack_hand(user as mob) if(..()) @@ -231,13 +231,13 @@ return null -/obj/machinery/atmospherics/omni/Del() +/obj/machinery/atmospherics/omni/Destroy() loc = null for(var/datum/omni_port/P in ports) if(P.node) P.node.disconnect(src) - del(P.network) + qdel(P.network) P.node = null ..() @@ -292,7 +292,7 @@ /obj/machinery/atmospherics/omni/disconnect(obj/machinery/atmospherics/reference) for(var/datum/omni_port/P in ports) if(reference == P.node) - del(P.network) + qdel(P.network) P.node = null P.update = 1 break diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 315de2ce7c..c33ff79967 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -60,7 +60,7 @@ return null -/obj/machinery/atmospherics/portables_connector/Del() +/obj/machinery/atmospherics/portables_connector/Destroy() loc = null if(connected_device) @@ -68,7 +68,7 @@ if(node) node.disconnect(src) - del(network) + qdel(network) node = null @@ -122,7 +122,7 @@ /obj/machinery/atmospherics/portables_connector/disconnect(obj/machinery/atmospherics/reference) if(reference==node) - del(network) + qdel(network) node = null update_underlays() @@ -152,4 +152,4 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 7a5fca0fa7..2bd2d0de3c 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -148,7 +148,7 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) /obj/machinery/atmospherics/trinary/filter/attack_hand(user as mob) // -- TLE diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index c6f5b17613..a200de25a0 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -120,7 +120,7 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) /obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob) if(..()) diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index ff46b9b55f..3f5d66f262 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -52,18 +52,18 @@ obj/machinery/atmospherics/trinary return null - Del() + Destroy() loc = null if(node1) node1.disconnect(src) - del(network1) + qdel(network1) if(node2) node2.disconnect(src) - del(network2) + qdel(network2) if(node3) node3.disconnect(src) - del(network3) + qdel(network3) node1 = null node2 = null @@ -153,15 +153,15 @@ obj/machinery/atmospherics/trinary disconnect(obj/machinery/atmospherics/reference) if(reference==node1) - del(network1) + qdel(network1) node1 = null else if(reference==node2) - del(network2) + qdel(network2) node2 = null else if(reference==node3) - del(network3) + qdel(network3) node3 = null update_underlays() diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index 68a1036a78..42556232bd 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -101,18 +101,18 @@ return null -/obj/machinery/atmospherics/tvalve/Del() +/obj/machinery/atmospherics/tvalve/Destroy() loc = null if(node1) node1.disconnect(src) - del(network_node1) + qdel(network_node1) if(node2) node2.disconnect(src) - del(network_node2) + qdel(network_node2) if(node3) node3.disconnect(src) - del(network_node3) + qdel(network_node3) node1 = null node2 = null @@ -128,9 +128,9 @@ update_icon() if(network_node1) - del(network_node1) + qdel(network_node1) if(network_node3) - del(network_node3) + qdel(network_node3) build_network() if(network_node1&&network_node2) @@ -153,9 +153,9 @@ update_icon() if(network_node1) - del(network_node1) + qdel(network_node1) if(network_node2) - del(network_node2) + qdel(network_node2) build_network() if(network_node1&&network_node3) @@ -262,15 +262,15 @@ /obj/machinery/atmospherics/tvalve/disconnect(obj/machinery/atmospherics/reference) if(reference==node1) - del(network_node1) + qdel(network_node1) node1 = null else if(reference==node2) - del(network_node2) + qdel(network_node2) node2 = null else if(reference==node3) - del(network_node3) + qdel(network_node3) node2 = null update_underlays() @@ -366,7 +366,7 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) /obj/machinery/atmospherics/tvalve/mirrored icon_state = "map_tvalvem0" diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm index 7d03ad9883..0e75146adc 100644 --- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm @@ -86,4 +86,4 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) \ No newline at end of file + qdel(src) \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm index 6635631f2d..eea2dba1ab 100644 --- a/code/ATMOSPHERICS/components/unary/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary/unary_base.dm @@ -28,12 +28,12 @@ return null - Del() + Destroy() loc = null if(node) node.disconnect(src) - del(network) + qdel(network) node = null @@ -84,7 +84,7 @@ disconnect(obj/machinery/atmospherics/reference) if(reference==node) - del(network) + qdel(network) node = null update_icon() diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 0f0d7095fa..25a219ba01 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -414,9 +414,9 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) -/obj/machinery/atmospherics/unary/vent_pump/Del() +/obj/machinery/atmospherics/unary/vent_pump/Destroy() if(initial_loc) initial_loc.air_vent_info -= id_tag initial_loc.air_vent_names -= id_tag diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 63a0549acc..9d690bad3a 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -270,7 +270,7 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) /obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user) if(..(user, 1)) @@ -278,7 +278,7 @@ else user << "You are too far away to read the gauge." -/obj/machinery/atmospherics/unary/vent_scrubber/Del() +/obj/machinery/atmospherics/unary/vent_scrubber/Destroy() if(initial_loc) initial_loc.air_scrub_info -= id_tag initial_loc.air_scrub_names -= id_tag diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 9cc6f7451c..49ae4af2cf 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -73,15 +73,15 @@ return null -/obj/machinery/atmospherics/valve/Del() +/obj/machinery/atmospherics/valve/Destroy() loc = null if(node1) node1.disconnect(src) - del(network_node1) + qdel(network_node1) if(node2) node2.disconnect(src) - del(network_node2) + qdel(network_node2) node1 = null node2 = null @@ -113,9 +113,9 @@ update_icon() if(network_node1) - del(network_node1) + qdel(network_node1) if(network_node2) - del(network_node2) + qdel(network_node2) build_network() @@ -214,11 +214,11 @@ /obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference) if(reference==node1) - del(network_node1) + qdel(network_node1) node1 = null else if(reference==node2) - del(network_node2) + qdel(network_node2) node2 = null update_underlays() @@ -310,7 +310,7 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) /obj/machinery/atmospherics/valve/examine(mob/user) ..() diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index 4098c15c31..7fe586733c 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -31,7 +31,7 @@ datum/pipe_network //Notes: Assuming that members will add themselves to appropriate roster in network_expand() if(!start_normal) - del(src) + qdel(src) start_normal.network_expand(src, reference) @@ -40,7 +40,7 @@ datum/pipe_network if((normal_members.len>0)||(line_members.len>0)) pipe_networks += src else - del(src) + qdel(src) proc/merge(datum/pipe_network/giver) if(giver==src) return 0 diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 662376e9b4..f4f4e37990 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -9,13 +9,13 @@ datum/pipeline var/alert_pressure = 0 - Del() + Destroy() if(network) - del(network) + qdel(network) if(air && air.volume) temporarily_store_air() - del(air) + qdel(air) ..() diff --git a/code/ATMOSPHERICS/he_pipes.dm b/code/ATMOSPHERICS/he_pipes.dm index cb11410f86..d78bb828e2 100644 --- a/code/ATMOSPHERICS/he_pipes.dm +++ b/code/ATMOSPHERICS/he_pipes.dm @@ -44,7 +44,7 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging node2 = target break if(!node1 && !node2) - del(src) + qdel(src) return update_icon() @@ -141,7 +141,7 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction break if(!node1&&!node2) - del(src) + qdel(src) return update_icon() diff --git a/code/ATMOSPHERICS/mainspipe.dm b/code/ATMOSPHERICS/mainspipe.dm index d70d2bc53e..a381b28c37 100644 --- a/code/ATMOSPHERICS/mainspipe.dm +++ b/code/ATMOSPHERICS/mainspipe.dm @@ -99,7 +99,7 @@ obj/machinery/atmospherics/mains_pipe for(var/obj/machinery/atmospherics/pipe/mains_component/node in nodes) node.disconnect() - Del() + Destroy() disconnect() ..() @@ -152,7 +152,7 @@ obj/machinery/atmospherics/mains_pipe/simple else if(!nodes[1]&&!nodes[2]) - del(src) //TODO: silent deleting looks weird + qdel(src) //TODO: silent deleting looks weird var/have_node1 = nodes[1]?1:0 var/have_node2 = nodes[2]?1:0 icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 92ad93c7d0..2315e856fd 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -30,7 +30,7 @@ /obj/machinery/atmospherics/pipe/proc/check_pressure(pressure) //Return 1 if parent should continue checking other pipes - //Return null if parent should stop checking other pipes. Recall: del(src) will by default return null + //Return null if parent should stop checking other pipes. Recall: qdel(src) will by default return null return 1 @@ -62,8 +62,8 @@ return parent.return_network(reference) -/obj/machinery/atmospherics/pipe/Del() - del(parent) +/obj/machinery/atmospherics/pipe/Destroy() + qdel(parent) if(air_temporary) loc.assume_air(air_temporary) @@ -101,8 +101,8 @@ for (var/obj/machinery/meter/meter in T) if (meter.target == src) new /obj/item/pipe_meter(T) - del(meter) - del(src) + qdel(meter) + qdel(src) /obj/machinery/atmospherics/proc/change_color(var/new_color) //only pass valid pipe colors please ~otherwise your pipe will turn invisible @@ -219,7 +219,7 @@ var/datum/effect/effect/system/smoke_spread/smoke = new smoke.set_up(1,0, src.loc, 0) smoke.start() - del(src) + qdel(src) /obj/machinery/atmospherics/pipe/simple/proc/normalize_dir() if(dir==3) @@ -227,7 +227,7 @@ else if(dir==12) set_dir(4) -/obj/machinery/atmospherics/pipe/simple/Del() +/obj/machinery/atmospherics/pipe/simple/Destroy() if(node1) node1.disconnect(src) if(node2) @@ -260,8 +260,8 @@ for (var/obj/machinery/meter/meter in T) if (meter.target == src) new /obj/item/pipe_meter(T) - del(meter) - del(src) + qdel(meter) + qdel(src) else if(node1 && node2) overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]") else @@ -294,7 +294,7 @@ break if(!node1 && !node2) - del(src) + qdel(src) return var/turf/T = get_turf(src) @@ -305,12 +305,12 @@ /obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node1 = null if(reference == node2) if(istype(node2, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node2 = null update_icon() @@ -459,7 +459,7 @@ else . = PROCESS_KILL -/obj/machinery/atmospherics/pipe/manifold/Del() +/obj/machinery/atmospherics/pipe/manifold/Destroy() if(node1) node1.disconnect(src) if(node2) @@ -472,17 +472,17 @@ /obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node1 = null if(reference == node2) if(istype(node2, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node2 = null if(reference == node3) if(istype(node3, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node3 = null update_icon() @@ -511,8 +511,8 @@ for (var/obj/machinery/meter/meter in T) if (meter.target == src) new /obj/item/pipe_meter(T) - del(meter) - del(src) + qdel(meter) + qdel(src) else overlays.Cut() overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type) @@ -578,7 +578,7 @@ break if(!node1 && !node2 && !node3) - del(src) + qdel(src) return var/turf/T = get_turf(src) @@ -701,7 +701,7 @@ else . = PROCESS_KILL -/obj/machinery/atmospherics/pipe/manifold4w/Del() +/obj/machinery/atmospherics/pipe/manifold4w/Destroy() if(node1) node1.disconnect(src) if(node2) @@ -716,22 +716,22 @@ /obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node1 = null if(reference == node2) if(istype(node2, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node2 = null if(reference == node3) if(istype(node3, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node3 = null if(reference == node4) if(istype(node4, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node4 = null update_icon() @@ -762,8 +762,8 @@ for (var/obj/machinery/meter/meter in T) if (meter.target == src) new /obj/item/pipe_meter(T) - del(meter) - del(src) + qdel(meter) + qdel(src) else overlays.Cut() overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type) @@ -837,7 +837,7 @@ break if(!node1 && !node2 && !node3 && !node4) - del(src) + qdel(src) return var/turf/T = get_turf(src) @@ -958,7 +958,7 @@ ..() else . = PROCESS_KILL -/obj/machinery/atmospherics/pipe/cap/Del() +/obj/machinery/atmospherics/pipe/cap/Destroy() if(node) node.disconnect(src) @@ -967,7 +967,7 @@ /obj/machinery/atmospherics/pipe/cap/disconnect(obj/machinery/atmospherics/reference) if(reference == node) if(istype(node, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node = null update_icon() @@ -1074,7 +1074,7 @@ else . = PROCESS_KILL -/obj/machinery/atmospherics/pipe/tank/Del() +/obj/machinery/atmospherics/pipe/tank/Destroy() if(node1) node1.disconnect(src) @@ -1108,7 +1108,7 @@ /obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node1 = null update_underlays() @@ -1258,7 +1258,7 @@ else parent.mingle_with_turf(loc, volume) -/obj/machinery/atmospherics/pipe/vent/Del() +/obj/machinery/atmospherics/pipe/vent/Destroy() if(node1) node1.disconnect(src) @@ -1290,7 +1290,7 @@ /obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node1 = null update_icon() diff --git a/code/FEA/DEBUG_REMOVE_BEFORE_RELEASE.dm b/code/FEA/DEBUG_REMOVE_BEFORE_RELEASE.dm index 4c173b7b7e..7374963fba 100644 --- a/code/FEA/DEBUG_REMOVE_BEFORE_RELEASE.dm +++ b/code/FEA/DEBUG_REMOVE_BEFORE_RELEASE.dm @@ -342,7 +342,7 @@ obj/machinery/atmospherics set src in world set category = "Minor" - del(src) + qdel(src) pipeline_data() set src in world @@ -487,7 +487,7 @@ obj/window destroy() set category = "Minor" set src in world - del(src) + qdel(src) mob sight = SEE_OBJS|SEE_TURFS diff --git a/code/FEA/FEA_fire.dm b/code/FEA/FEA_fire.dm index b7a8d42fa5..fe18350da0 100644 --- a/code/FEA/FEA_fire.dm +++ b/code/FEA/FEA_fire.dm @@ -171,7 +171,7 @@ return /* -/obj/effect/hotspot/Del() +/obj/effect/hotspot/Destroy() if (istype(loc, /turf/simulated)) DestroyTurf() ..() diff --git a/code/FEA/FEA_gas_mixture.dm b/code/FEA/FEA_gas_mixture.dm index 6beeffc187..a2a1af194e 100644 --- a/code/FEA/FEA_gas_mixture.dm +++ b/code/FEA/FEA_gas_mixture.dm @@ -346,7 +346,7 @@ What are the archived variables for? trace_gases += corresponding corresponding.moles += trace_gas.moles*giver.group_multiplier/group_multiplier - // del(giver) + // qdel(giver) return 1 remove(amount) diff --git a/code/FEA/FEA_system.dm b/code/FEA/FEA_system.dm index 574fd1ba26..6a3dfe0f8b 100644 --- a/code/FEA/FEA_system.dm +++ b/code/FEA/FEA_system.dm @@ -291,7 +291,7 @@ datum var/turf/simulated/T = turf T.parent = null turfs += T - del(turf_AG) + qdel(turf_AG) for(var/turf/simulated/S in turfs) //Have old members try to form new groups if(!S.parent) @@ -306,7 +306,7 @@ datum for(var/obj/movable/floor/OM in object_AG.members) OM.parent = null movable_objects += OM - del(object_AG) + qdel(object_AG) for(var/obj/movable/floor/OM in movable_objects) //Have old members try to form new groups if(!OM.parent) diff --git a/code/FEA/FEA_turf_tile.dm b/code/FEA/FEA_turf_tile.dm index 981d0b023c..da7b1f856c 100644 --- a/code/FEA/FEA_turf_tile.dm +++ b/code/FEA/FEA_turf_tile.dm @@ -14,7 +14,7 @@ atom/movable/proc/experience_pressure_difference(pressure_difference, direction) turf assume_air(datum/gas_mixture/giver) //use this for machines to adjust air - del(giver) + qdel(giver) return 0 return_air() @@ -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/Pipes.dm b/code/TriDimension/Pipes.dm index d6b87f2909..b1ffef17f5 100644 --- a/code/TriDimension/Pipes.dm +++ b/code/TriDimension/Pipes.dm @@ -80,7 +80,7 @@ obj/machinery/atmospherics/pipe/zpipe/proc/burst() var/datum/effect/effect/system/smoke_spread/smoke = new smoke.set_up(1,0, src.loc, 0) smoke.start() - del(src) + qdel(src) // NOT qdel. obj/machinery/atmospherics/pipe/zpipe/proc/normalize_dir() if(dir==3) @@ -88,7 +88,7 @@ obj/machinery/atmospherics/pipe/zpipe/proc/normalize_dir() else if(dir==12) set_dir(4) -obj/machinery/atmospherics/pipe/zpipe/Del() +obj/machinery/atmospherics/pipe/zpipe/Destroy() if(node1) node1.disconnect(src) if(node2) @@ -104,12 +104,12 @@ obj/machinery/atmospherics/pipe/zpipe/update_icon() obj/machinery/atmospherics/pipe/zpipe/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node1 = null if(reference == node2) if(istype(node2, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node2 = null return null diff --git a/code/TriDimension/Structures.dm b/code/TriDimension/Structures.dm index 554853535a..e9f0f9e82f 100644 --- a/code/TriDimension/Structures.dm +++ b/code/TriDimension/Structures.dm @@ -41,18 +41,18 @@ switch(severity) if(1.0) if(icon_state == "ladderup" && prob(10)) - Del() + qdel(src) if(2.0) if(prob(50)) - Del() + qdel(src) if(3.0) - Del() + qdel(src) return*/ - Del() + Destroy() spawn(1) if(target && icon_state == "ladderdown") - del target + qdel(target) return ..() attackby(obj/item/C as obj, mob/user as mob) @@ -78,7 +78,7 @@ if(!blocked && !istype(below, /turf/simulated/wall)) var/obj/multiz/ladder/X = new /obj/multiz/ladder(below) S.amount = S.amount - 2 - if(S.amount == 0) S.Del() + if(S.amount == 0) qdel(S) X.icon_state = "ladderup" connect() user << "You finish the ladder." @@ -99,7 +99,7 @@ if(target) var/obj/item/stack/rods/R = new /obj/item/stack/rods(target.loc) R.amount = 2 - target.Del() + qdel(Target) user << "You remove the bolts anchoring the ladder." return @@ -117,7 +117,7 @@ var/obj/item/stack/sheet/metal/S = new /obj/item/stack/sheet/metal( src ) S.amount = 2 user << "You remove the ladder and close the hole." - Del() + qdel(src) else user << "You need more welding fuel to complete this task." return @@ -167,7 +167,7 @@ attack_hand(var/mob/M) if(!target || !istype(target.loc, /turf)) - del src + qdel(src) if(active) M << "That [src] is being used." @@ -185,7 +185,7 @@ spawn(7) if(!target || !istype(target.loc, /turf)) - del src + qdel(src) if(M.z == z && get_dist(src,M) <= 1) var/list/adjacent_to_me = global_adjacent_z_levels["[z]"] M.visible_message("\blue \The [M] scurries [target.z == adjacent_to_me["up"] ? "up" : "down"] \the [src]!", "You scramble [target.z == adjacent_to_me["up"] ? "up" : "down"] \the [src]!", "You hear some grunting, and a hatch sealing.") diff --git a/code/TriDimension/Turfs.dm b/code/TriDimension/Turfs.dm index 8992068018..43e33ed3c2 100644 --- a/code/TriDimension/Turfs.dm +++ b/code/TriDimension/Turfs.dm @@ -120,7 +120,7 @@ var/obj/item/stack/tile/plasteel/S = C if (S.get_amount() < 1) return - del(L) + qdel(L) playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1) S.build(src) S.use(1) diff --git a/code/TriDimension/controller.dm b/code/TriDimension/controller.dm index 528c2c76ba..a9d4df675a 100644 --- a/code/TriDimension/controller.dm +++ b/code/TriDimension/controller.dm @@ -28,9 +28,9 @@ initialized = 1 return 1 -/obj/effect/landmark/zcontroller/Del() +/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/ZAS/Controller.dm b/code/ZAS/Controller.dm index 4ba30f47b3..4614b3a183 100644 --- a/code/ZAS/Controller.dm +++ b/code/ZAS/Controller.dm @@ -98,7 +98,7 @@ Class Procs: set background = 1 #endif - world << "Processing Geometry..." + admin_notice("Processing Geometry...", R_DEBUG) sleep(-1) var/start_time = world.timeofday @@ -109,14 +109,14 @@ Class Procs: simulated_turf_count++ S.update_air_properties() - world << {"Geometry initialized in [round(0.1*(world.timeofday-start_time),0.1)] seconds. + admin_notice({"Geometry initialized in [round(0.1*(world.timeofday-start_time),0.1)] seconds. Total Simulated Turfs: [simulated_turf_count] Total Zones: [zones.len] Total Edges: [edges.len] Total Active Edges: [active_edges.len ? "[active_edges.len]" : "None"] Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count] -"} +"}, R_DEBUG) // spawn Start() diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 5dd0ac3cd3..688f71985d 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -78,11 +78,11 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) fire = new(src, fl) air_master.active_fire_zones |= zone - + var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in src zone.fire_tiles |= src if(fuel) zone.fuel_objs += fuel - + return 0 /obj/fire @@ -162,7 +162,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) ..() if(!istype(loc, /turf)) - del src + qdel(src) set_dir(pick(cardinal)) SetLuminosity(3) @@ -170,7 +170,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) air_master.active_hotspots.Add(src) -/obj/fire/Del() +/obj/fire/Destroy() if (istype(loc, /turf/simulated)) RemoveFire() @@ -179,7 +179,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) /obj/fire/proc/RemoveFire() if (istype(loc, /turf)) SetLuminosity(0) - + loc = null air_master.active_hotspots.Remove(src) @@ -227,22 +227,22 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) //determine how far the reaction can progress var/reaction_limit = min(total_oxidizers*(FIRE_REACTION_FUEL_AMOUNT/FIRE_REACTION_OXIDIZER_AMOUNT), total_fuel) //stoichiometric limit - + //determine the actual rate of reaction, as measured by the amount of fuel reacting - + //vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn). var/gas_reaction_progress = max(0.2*group_multiplier, (firelevel/vsc.fire_firelevel_multiplier)*gas_fuel)*FIRE_GAS_BURNRATE_MULT //liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning (which is sort of accounted for by firelevel). Having more fuel means a longer burn. var/liquid_reaction_progress = (firelevel/vsc.fire_firelevel_multiplier)*FIRE_LIQUID_BURNRATE_MULT - + //world << "liquid_reaction_progress = [liquid_reaction_progress]" //world << "gas_reaction_progress = [gas_reaction_progress]" - + var/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress var/used_fuel = min(total_reaction_progress, reaction_limit) var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT) //world << "used_fuel = [used_fuel]; used_oxidizers = [used_oxidizers]; reaction_limit=[reaction_limit]" - + //if the reaction is progressing too slow then it isn't self-sustaining anymore and burns out if(zone && zone.fuel_objs.len) if(used_fuel <= FIRE_LIQUD_MIN_BURNRATE) @@ -250,13 +250,13 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) else if(used_fuel <= FIRE_GAS_MIN_BURNRATE*group_multiplier) //purely gas fires have more stringent criteria return 0 - + //*** Remove fuel and oxidizer, add carbon dioxide and heat - + //remove and add gasses as calculated var/used_gas_fuel = min(used_fuel*(gas_reaction_progress/total_reaction_progress), gas_fuel) //remove in proportion to the relative reaction progress var/used_liquid_fuel = between(0, used_fuel-used_gas_fuel, liquid_fuel) - + //remove_by_flag() and adjust_gas() handle the group_multiplier for us. remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers) remove_by_flag(XGM_GAS_FUEL, used_gas_fuel) @@ -272,14 +272,14 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) if(!istype(fuel)) zone.fuel_objs -= fuel continue - + fuel.amount -= fuel_to_remove if(fuel.amount <= 0) zone.fuel_objs -= fuel if(liquidonly) var/turf/T = fuel.loc - if(istype(T) && T.fire) del(T.fire) - del(fuel) + if(istype(T) && T.fire) qdel(T.fire) + qdel(fuel) //calculate the energy produced by the reaction and then set the new temperature of the mix temperature = (starting_energy + vsc.fire_fuel_energy_release * used_fuel) / heat_capacity() diff --git a/code/ZAS/Turf.dm b/code/ZAS/Turf.dm index 9d031ce3d3..85d47d9f6f 100644 --- a/code/ZAS/Turf.dm +++ b/code/ZAS/Turf.dm @@ -1,255 +1,255 @@ -/turf/simulated/var/zone/zone -/turf/simulated/var/open_directions - -/turf/var/needs_air_update = 0 -/turf/var/datum/gas_mixture/air - -/turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) - if(graphic_add && graphic_add.len) - overlays += graphic_add - if(graphic_remove && graphic_remove.len) - overlays -= graphic_remove - -/turf/proc/update_air_properties() - var/block = c_airblock(src) - if(block & AIR_BLOCKED) - //dbg(blocked) - return 1 - - #ifdef ZLEVELS - for(var/d = 1, d < 64, d *= 2) - #else - for(var/d = 1, d < 16, d *= 2) - #endif - - var/turf/unsim = get_step(src, d) - - if(!unsim) - continue - - block = unsim.c_airblock(src) - - if(block & AIR_BLOCKED) - //unsim.dbg(air_blocked, turn(180,d)) - continue - - var/r_block = c_airblock(unsim) - - if(r_block & AIR_BLOCKED) - continue - - if(istype(unsim, /turf/simulated)) - - var/turf/simulated/sim = unsim - if(air_master.has_valid_zone(sim)) - - air_master.connect(sim, src) - -/turf/simulated/update_air_properties() - if(zone && zone.invalid) - c_copy_air() - zone = null //Easier than iterating through the list at the zone. - - var/s_block = c_airblock(src) - if(s_block & AIR_BLOCKED) - #ifdef ZASDBG - if(verbose) world << "Self-blocked." - //dbg(blocked) - #endif - if(zone) - var/zone/z = zone - if(locate(/obj/machinery/door/airlock) in src) //Hacky, but prevents normal airlocks from rebuilding zones all the time - z.remove(src) - else - z.rebuild() - - return 1 - - var/previously_open = open_directions - open_directions = 0 - - var/list/postponed - #ifdef ZLEVELS - for(var/d = 1, d < 64, d *= 2) - #else - for(var/d = 1, d < 16, d *= 2) - #endif - - var/turf/unsim = get_step(src, d) - - if(!unsim) //edge of map - continue - - var/block = unsim.c_airblock(src) - if(block & AIR_BLOCKED) - - #ifdef ZASDBG - if(verbose) world << "[d] is blocked." - //unsim.dbg(air_blocked, turn(180,d)) - #endif - - continue - - var/r_block = c_airblock(unsim) - if(r_block & AIR_BLOCKED) - - #ifdef ZASDBG - if(verbose) world << "[d] is blocked." - //dbg(air_blocked, d) - #endif - - //Check that our zone hasn't been cut off recently. - //This happens when windows move or are constructed. We need to rebuild. - if((previously_open & d) && istype(unsim, /turf/simulated)) - var/turf/simulated/sim = unsim - if(sim.zone == zone) - zone.rebuild() - return - - continue - - open_directions |= d - - if(istype(unsim, /turf/simulated)) - - var/turf/simulated/sim = unsim - sim.open_directions |= reverse_dir[d] - - if(air_master.has_valid_zone(sim)) - - //Might have assigned a zone, since this happens for each direction. - if(!zone) - - //if((block & ZONE_BLOCKED) || (r_block & ZONE_BLOCKED && !(s_block & ZONE_BLOCKED))) - if(((block & ZONE_BLOCKED) && !(r_block & ZONE_BLOCKED)) || (r_block & ZONE_BLOCKED && !(s_block & ZONE_BLOCKED))) - #ifdef ZASDBG - if(verbose) world << "[d] is zone blocked." - //dbg(zone_blocked, d) - #endif - - //Postpone this tile rather than exit, since a connection can still be made. - if(!postponed) postponed = list() - postponed.Add(sim) - - else - - sim.zone.add(src) - - #ifdef ZASDBG - dbg(assigned) - if(verbose) world << "Added to [zone]" - #endif - - else if(sim.zone != zone) - - #ifdef ZASDBG - if(verbose) world << "Connecting to [sim.zone]" - #endif - - air_master.connect(src, sim) - - - #ifdef ZASDBG - else if(verbose) world << "[d] has same zone." - - else if(verbose) world << "[d] has invalid zone." - #endif - - else - - //Postponing connections to tiles until a zone is assured. - if(!postponed) postponed = list() - postponed.Add(unsim) - - if(!air_master.has_valid_zone(src)) //Still no zone, make a new one. - var/zone/newzone = new/zone() - newzone.add(src) - - #ifdef ZASDBG - dbg(created) - - ASSERT(zone) - #endif - - //At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug. - - for(var/turf/T in postponed) - air_master.connect(src, T) - -/turf/proc/post_update_air_properties() - if(connections) connections.update_all() - -/turf/assume_air(datum/gas_mixture/giver) //use this for machines to adjust air - return 0 - -/turf/proc/assume_gas(gasid, moles, temp = 0) - return 0 - -/turf/return_air() - //Create gas mixture to hold data for passing - var/datum/gas_mixture/GM = new - - GM.adjust_multi("oxygen", oxygen, "carbon_dioxide", carbon_dioxide, "nitrogen", nitrogen, "phoron", phoron) - GM.temperature = temperature - - return GM - -/turf/remove_air(amount as num) - var/datum/gas_mixture/GM = new - - var/sum = oxygen + carbon_dioxide + nitrogen + phoron - if(sum>0) - GM.gas["oxygen"] = (oxygen/sum)*amount - GM.gas["carbon_dioxide"] = (carbon_dioxide/sum)*amount - GM.gas["nitrogen"] = (nitrogen/sum)*amount - GM.gas["phoron"] = (phoron/sum)*amount - - GM.temperature = temperature - GM.update_values() - - return GM - -/turf/simulated/assume_air(datum/gas_mixture/giver) - var/datum/gas_mixture/my_air = return_air() - my_air.merge(giver) - -/turf/simulated/assume_gas(gasid, moles, temp = null) - var/datum/gas_mixture/my_air = return_air() - - if(isnull(temp)) - my_air.adjust_gas(gasid, moles) - else - my_air.adjust_gas_temp(gasid, moles, temp) - - return 1 - -/turf/simulated/remove_air(amount as num) - var/datum/gas_mixture/my_air = return_air() - return my_air.remove(amount) - -/turf/simulated/return_air() - if(zone) - if(!zone.invalid) - air_master.mark_zone_update(zone) - return zone.air - else - if(!air) - make_air() - c_copy_air() - return air - else - if(!air) - make_air() - return air - -/turf/proc/make_air() - air = new/datum/gas_mixture - air.temperature = temperature - air.adjust_multi("oxygen", oxygen, "carbon_dioxide", carbon_dioxide, "nitrogen", nitrogen, "phoron", phoron) - air.group_multiplier = 1 - air.volume = CELL_VOLUME - -/turf/simulated/proc/c_copy_air() - if(!air) air = new/datum/gas_mixture - air.copy_from(zone.air) - air.group_multiplier = 1 +/turf/simulated/var/zone/zone +/turf/simulated/var/open_directions + +/turf/var/needs_air_update = 0 +/turf/var/datum/gas_mixture/air + +/turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) + if(graphic_add && graphic_add.len) + overlays += graphic_add + if(graphic_remove && graphic_remove.len) + overlays -= graphic_remove + +/turf/proc/update_air_properties() + var/block = c_airblock(src) + if(block & AIR_BLOCKED) + //dbg(blocked) + return 1 + + #ifdef ZLEVELS + for(var/d = 1, d < 64, d *= 2) + #else + for(var/d = 1, d < 16, d *= 2) + #endif + + var/turf/unsim = get_step(src, d) + + if(!unsim) + continue + + block = unsim.c_airblock(src) + + if(block & AIR_BLOCKED) + //unsim.dbg(air_blocked, turn(180,d)) + continue + + var/r_block = c_airblock(unsim) + + if(r_block & AIR_BLOCKED) + continue + + if(istype(unsim, /turf/simulated)) + + var/turf/simulated/sim = unsim + if(air_master.has_valid_zone(sim)) + + air_master.connect(sim, src) + +/turf/simulated/update_air_properties() + if(zone && zone.invalid) + c_copy_air() + zone = null //Easier than iterating through the list at the zone. + + var/s_block = c_airblock(src) + if(s_block & AIR_BLOCKED) + #ifdef ZASDBG + if(verbose) world << "Self-blocked." + //dbg(blocked) + #endif + if(zone) + var/zone/z = zone + if(locate(/obj/machinery/door/airlock) in src) //Hacky, but prevents normal airlocks from rebuilding zones all the time + z.remove(src) + else + z.rebuild() + + return 1 + + var/previously_open = open_directions + open_directions = 0 + + var/list/postponed + #ifdef ZLEVELS + for(var/d = 1, d < 64, d *= 2) + #else + for(var/d = 1, d < 16, d *= 2) + #endif + + var/turf/unsim = get_step(src, d) + + if(!unsim) //edge of map + continue + + var/block = unsim.c_airblock(src) + if(block & AIR_BLOCKED) + + #ifdef ZASDBG + if(verbose) world << "[d] is blocked." + //unsim.dbg(air_blocked, turn(180,d)) + #endif + + continue + + var/r_block = c_airblock(unsim) + if(r_block & AIR_BLOCKED) + + #ifdef ZASDBG + if(verbose) world << "[d] is blocked." + //dbg(air_blocked, d) + #endif + + //Check that our zone hasn't been cut off recently. + //This happens when windows move or are constructed. We need to rebuild. + if((previously_open & d) && istype(unsim, /turf/simulated)) + var/turf/simulated/sim = unsim + if(zone && sim.zone == zone) + zone.rebuild() + return + + continue + + open_directions |= d + + if(istype(unsim, /turf/simulated)) + + var/turf/simulated/sim = unsim + sim.open_directions |= reverse_dir[d] + + if(air_master.has_valid_zone(sim)) + + //Might have assigned a zone, since this happens for each direction. + if(!zone) + + //if((block & ZONE_BLOCKED) || (r_block & ZONE_BLOCKED && !(s_block & ZONE_BLOCKED))) + if(((block & ZONE_BLOCKED) && !(r_block & ZONE_BLOCKED)) || (r_block & ZONE_BLOCKED && !(s_block & ZONE_BLOCKED))) + #ifdef ZASDBG + if(verbose) world << "[d] is zone blocked." + //dbg(zone_blocked, d) + #endif + + //Postpone this tile rather than exit, since a connection can still be made. + if(!postponed) postponed = list() + postponed.Add(sim) + + else + + sim.zone.add(src) + + #ifdef ZASDBG + dbg(assigned) + if(verbose) world << "Added to [zone]" + #endif + + else if(sim.zone != zone) + + #ifdef ZASDBG + if(verbose) world << "Connecting to [sim.zone]" + #endif + + air_master.connect(src, sim) + + + #ifdef ZASDBG + else if(verbose) world << "[d] has same zone." + + else if(verbose) world << "[d] has invalid zone." + #endif + + else + + //Postponing connections to tiles until a zone is assured. + if(!postponed) postponed = list() + postponed.Add(unsim) + + if(!air_master.has_valid_zone(src)) //Still no zone, make a new one. + var/zone/newzone = new/zone() + newzone.add(src) + + #ifdef ZASDBG + dbg(created) + + ASSERT(zone) + #endif + + //At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug. + + for(var/turf/T in postponed) + air_master.connect(src, T) + +/turf/proc/post_update_air_properties() + if(connections) connections.update_all() + +/turf/assume_air(datum/gas_mixture/giver) //use this for machines to adjust air + return 0 + +/turf/proc/assume_gas(gasid, moles, temp = 0) + return 0 + +/turf/return_air() + //Create gas mixture to hold data for passing + var/datum/gas_mixture/GM = new + + GM.adjust_multi("oxygen", oxygen, "carbon_dioxide", carbon_dioxide, "nitrogen", nitrogen, "phoron", phoron) + GM.temperature = temperature + + return GM + +/turf/remove_air(amount as num) + var/datum/gas_mixture/GM = new + + var/sum = oxygen + carbon_dioxide + nitrogen + phoron + if(sum>0) + GM.gas["oxygen"] = (oxygen/sum)*amount + GM.gas["carbon_dioxide"] = (carbon_dioxide/sum)*amount + GM.gas["nitrogen"] = (nitrogen/sum)*amount + GM.gas["phoron"] = (phoron/sum)*amount + + GM.temperature = temperature + GM.update_values() + + return GM + +/turf/simulated/assume_air(datum/gas_mixture/giver) + var/datum/gas_mixture/my_air = return_air() + my_air.merge(giver) + +/turf/simulated/assume_gas(gasid, moles, temp = null) + var/datum/gas_mixture/my_air = return_air() + + if(isnull(temp)) + my_air.adjust_gas(gasid, moles) + else + my_air.adjust_gas_temp(gasid, moles, temp) + + return 1 + +/turf/simulated/remove_air(amount as num) + var/datum/gas_mixture/my_air = return_air() + return my_air.remove(amount) + +/turf/simulated/return_air() + if(zone) + if(!zone.invalid) + air_master.mark_zone_update(zone) + return zone.air + else + if(!air) + make_air() + c_copy_air() + return air + else + if(!air) + make_air() + return air + +/turf/proc/make_air() + air = new/datum/gas_mixture + air.temperature = temperature + air.adjust_multi("oxygen", oxygen, "carbon_dioxide", carbon_dioxide, "nitrogen", nitrogen, "phoron", phoron) + air.group_multiplier = 1 + air.volume = CELL_VOLUME + +/turf/simulated/proc/c_copy_air() + if(!air) air = new/datum/gas_mixture + air.copy_from(zone.air) + air.group_multiplier = 1 diff --git a/code/__HELPERS/atom_pool.dm b/code/__HELPERS/atom_pool.dm deleted file mode 100644 index 77a7caf5e4..0000000000 --- a/code/__HELPERS/atom_pool.dm +++ /dev/null @@ -1,93 +0,0 @@ - -/* -/tg/station13 /atom/movable Pool: ---------------------------------- -By RemieRichards - -Creation/Deletion is laggy, so let's reduce reuse and recycle! - -Locked to /atom/movable and it's subtypes due to Loc being a const var on /atom -but being read&write on /movable due to how they... move. - -*/ - -var/global/list/GlobalPool = list() - -//You'll be using this proc 90% of the time. -//It grabs a type from the pool if it can -//And if it can't, it creates one -//The pool is flexible and will expand to fit -//The new created atom when it eventually -//Goes into the pool - -//Second argument can be a new location -//Or a list of arguments -//Either way it gets passed to new - -/proc/PoolOrNew(var/get_type,var/second_arg) - if(!get_type) - return - - var/atom/movable/AM - AM = GetFromPool(get_type,second_arg) - - if(!AM) - if(ispath(get_type)) - if(islist(second_arg)) - return new get_type (arglist(second_arg)) - else - return new get_type (second_arg) - return AM - - -/proc/GetFromPool(var/get_type,var/second_arg) - if(!get_type) - return 0 - - if(isnull(GlobalPool[get_type])) - return 0 - - if(length(GlobalPool[get_type]) == 0) - return 0 - - var/atom/movable/AM = pick_n_take(GlobalPool[get_type]) - if(AM) - AM.ResetVars() - if(islist(second_arg)) - AM.loc = second_arg[1] - AM.New(arglist(second_arg)) - else - AM.loc = second_arg - AM.New(second_arg) - return AM - return 0 - - - -/proc/PlaceInPool(var/atom/movable/AM) - if(!istype(AM)) - return - - if(AM in GlobalPool[AM.type]) - return - - if(!GlobalPool[AM.type]) - GlobalPool[AM.type] = list() - - GlobalPool[AM.type] |= AM - - AM.Destroy() - AM.ResetVars() - - - -/atom/movable/proc/ResetVars(var/list/exlude = list()) - var/list/excluded = list("animate_movement", "loc", "locs", "parent_type", "vars", "verbs", "type") + exlude - - for(var/V in vars) - if(V in excluded) - continue - - vars[V] = initial(vars[V]) - - vars["loc"] = null diff --git a/code/__HELPERS/datum_pool.dm b/code/__HELPERS/datum_pool.dm new file mode 100644 index 0000000000..16594ed048 --- /dev/null +++ b/code/__HELPERS/datum_pool.dm @@ -0,0 +1,109 @@ + +/* +/tg/station13 /atom/movable Pool: +--------------------------------- +By RemieRichards + +Creation/Deletion is laggy, so let's reduce reuse and recycle! + +*/ +#define ATOM_POOL_COUNT 100 +// "define DEBUG_ATOM_POOL 1 +var/global/list/GlobalPool = list() + +//You'll be using this proc 90% of the time. +//It grabs a type from the pool if it can +//And if it can't, it creates one +//The pool is flexible and will expand to fit +//The new created atom when it eventually +//Goes into the pool + +//Second argument can be a new location, if the type is /atom/movable +//Or a list of arguments +//Either way it gets passed to new + +/proc/PoolOrNew(var/get_type,var/second_arg) + if(!get_type) + return + + var/datum/D + D = GetFromPool(get_type,second_arg) + + if(!D) + if(ispath(get_type)) + if(islist(second_arg)) + return new get_type (arglist(second_arg)) + else + return new get_type (second_arg) + return D + +/proc/GetFromPool(var/get_type,var/second_arg) + if(!get_type) + return 0 + + if(isnull(GlobalPool[get_type])) + return 0 + + if(length(GlobalPool[get_type]) == 0) + return 0 + + var/datum/D = pick_n_take(GlobalPool[get_type]) + if(D) + D.ResetVars() + D.Prepare(second_arg) + return D + return 0 + +/proc/PlaceInPool(var/datum/D) + if(!istype(D)) + return + + if(length(GlobalPool[D.type]) > ATOM_POOL_COUNT) + #ifdef DEBUG_ATOM_POOL + world << text("DEBUG_DATUM_POOL: PlaceInPool([]) exceeds []. Discarding.", D.type, ATOM_POOL_COUNT) + #endif + del(D) + return + + if(D in GlobalPool[D.type]) + return + + if(!GlobalPool[D.type]) + GlobalPool[D.type] = list() + + GlobalPool[D.type] += D + + 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)) + New(arglist(args)) + else + New(args) + +/atom/movable/Prepare(args) + if(islist(args)) + loc = args[1] + loc = args + ..() + +/datum/proc/ResetVars(var/list/exlude = list()) + var/list/excluded = list("animate_movement", "loc", "locs", "parent_type", "vars", "verbs", "type") + exlude + + for(var/V in vars) + if(V in excluded) + continue + + vars[V] = initial(vars[V]) + +/atom/movable/ResetVars() + ..() + vars["loc"] = null + +#undef ATOM_POOL_COUNT diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index bc06c3d239..119a28f22a 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -18,9 +18,9 @@ /proc/get_area(O) var/turf/loc = get_turf(O) - if(!loc) - return null - return loc.loc + if(loc) + var/area/res = loc.loc + .= res.master /proc/get_area_name(N) //get area by its name for(var/area/A in world) @@ -498,6 +498,6 @@ datum/projectile_data /proc/MinutesToTicks(var/minutes) return SecondsToTicks(60 * minutes) - + /proc/SecondsToTicks(var/seconds) return seconds * 10 diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 9ebc3512dd..ae38249956 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -226,6 +226,31 @@ /proc/capitalize(var/t as text) return uppertext(copytext(t, 1, 2)) + copytext(t, 2) +//This proc strips html properly, remove < > and all text between +//for complete text sanitizing should be used sanitize() +/proc/strip_html_properly(var/input) + if(!input) + return + var/opentag = 1 //These store the position of < and > respectively. + var/closetag = 1 + while(1) + opentag = findtext(input, "<") + closetag = findtext(input, ">") + if(closetag && opentag) + if(closetag < opentag) + input = copytext(input, (closetag + 1)) + else + input = copytext(input, 1, opentag) + copytext(input, (closetag + 1)) + else if(closetag || opentag) + if(opentag) + input = copytext(input, 1, opentag) + else + input = copytext(input, (closetag + 1)) + else + break + + return input + //This proc fills in all spaces with the "replace" var (* by default) with whatever //is in the other string at the same spot (assuming it is not a replace char). //This is used for fingerprints @@ -274,7 +299,11 @@ proc/TextPreview(var/string,var/len=40) else return string else - return "[copytext(string, 1, 37)]..." + return "[copytext_preserve_html(string, 1, 37)]..." + +//alternative copytext() for encoded text, doesn't break html entities (" and other) +/proc/copytext_preserve_html(var/text, var/first, var/last) + return html_encode(copytext(html_decode(text), first, last)) //For generating neat chat tag-images //The icon var could be local in the proc, but it's a waste of resources @@ -283,4 +312,4 @@ proc/TextPreview(var/string,var/len=40) /proc/create_text_tag(var/tagname, var/tagdesc = tagname, var/client/C = null) if(C && (C.prefs.toggles & CHAT_NOICONS)) return tagdesc - return "[tagdesc]" + return "[tagdesc]" \ No newline at end of file diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index f20830e5cc..c90a935b6d 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -10,6 +10,9 @@ proc/worldtime2text(time = world.time) if(!roundstart_hour) roundstart_hour = pick(2,7,12,17) return "[round(time / 36000)+roundstart_hour]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]" +proc/worlddate2text() + return num2text((text2num(time2text(world.timeofday, "YYYY"))+544)) + "-" + time2text(world.timeofday, "MM-DD") + proc/time_stamp() return time2text(world.timeofday, "hh:mm:ss") diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 72d85a67b5..8895e67c2a 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -631,7 +631,7 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl animation.master = target flick(flick_anim, animation) sleep(max(sleeptime, 15)) - del(animation) + qdel(animation) //Will return the contents of an atom recursivly to a depth of 'searchDepth' /atom/proc/GetAllContents(searchDepth = 5) @@ -902,7 +902,7 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl X.icon = 'icons/turf/shuttle.dmi' X.icon_state = replacetext(O.icon_state, "_f", "_s") // revert the turf to the old icon_state X.name = "wall" - del(O) // prevents multiple shuttle corners from stacking + qdel(O) // prevents multiple shuttle corners from stacking continue if(!istype(O,/obj)) continue O.loc = X diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 767567b4b0..4a7d6f2acb 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -14,6 +14,9 @@ var/obj/master = null //A reference to the object in the slot. Grabs or items, generally. var/gun_click_time = -100 //I'm lazy. +/obj/screen/Destroy() + master = null + ..() /obj/screen/text icon = null diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 337a044235..168ae47c86 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -20,7 +20,7 @@ return // seems legit. // Things you might plausibly want to follow - if((ismob(A) && A != src) || istype(A,/obj/machinery/bot) || istype(A,/obj/machinery/singularity)) + if((ismob(A) && A != src) || istype(A,/obj/machinery/bot) || istype(A,/obj/singularity)) ManualFollow(A) // Otherwise jump diff --git a/code/_onclick/oldcode.dm b/code/_onclick/oldcode.dm index ce6a238329..890d67923a 100644 --- a/code/_onclick/oldcode.dm +++ b/code/_onclick/oldcode.dm @@ -253,7 +253,7 @@ See the previous More info, for... more info... */ - //del(D) + //qdel(D) // Garbage Collect Dummy D.loc = null D = null diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 88c9feca36..ae57895cd6 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -80,14 +80,14 @@ var/const/tk_maxrange = 15 if(focus.Adjacent(loc)) focus.loc = loc - del(src) + qdel(src) return //stops TK grabs being equipped anywhere but into hands equipped(var/mob/user, var/slot) if( (slot == slot_l_hand) || (slot== slot_r_hand) ) return - del(src) + qdel(src) return @@ -99,10 +99,10 @@ var/const/tk_maxrange = 15 if(!target || !user) return if(last_throw+3 > world.time) return if(!host || host != user) - del(src) + qdel(src) return if(!(TK in host.mutations)) - del(src) + qdel(src) return if(isobj(target) && !isturf(target.loc)) return @@ -152,7 +152,7 @@ var/const/tk_maxrange = 15 proc/focus_object(var/obj/target, var/mob/living/user) if(!istype(target,/obj)) return//Cant throw non objects atm might let it do mobs later if(target.anchored || !isturf(target.loc)) - del src + qdel(src) return focus = target update_icon() @@ -162,7 +162,7 @@ var/const/tk_maxrange = 15 proc/apply_focus_overlay() if(!focus) return - var/obj/effect/overlay/O = new /obj/effect/overlay(locate(focus.x,focus.y,focus.z)) + var/obj/effect/overlay/O = PoolOrNew(/obj/effect/overlay, locate(focus.x,focus.y,focus.z)) O.name = "sparkles" O.anchored = 1 O.density = 0 @@ -172,7 +172,7 @@ var/const/tk_maxrange = 15 O.icon_state = "nothing" flick("empdisable",O) spawn(5) - O.delete() + qdel(O) return diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm index 89048113d3..1f27f4c1de 100644 --- a/code/controllers/ProcessScheduler/core/process.dm +++ b/code/controllers/ProcessScheduler/core/process.dm @@ -184,8 +184,7 @@ datum/controller/process/proc/kill() killed = TRUE - // This should del - del(src) + del(src) // This should del datum/controller/process/proc/scheck(var/tickId = 0) if (killed) @@ -315,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 11ba8979f5..7180008ddb 100644 --- a/code/controllers/Processes/garbage.dm +++ b/code/controllers/Processes/garbage.dm @@ -1,12 +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 SS 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 SS tick. + 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 @@ -16,14 +18,21 @@ var/datum/controller/process/garbage_collector/garbage_collector /datum/controller/process/garbage_collector/setup() name = "garbage" - schedule_interval = 60 // every 6 seconds + schedule_interval = 6 SECONDS if(!garbage_collector) garbage_collector = src -/datum/controller/process/garbage_collector/doWork() - dels = 0 + for(var/garbage in delayed_garbage) + qdel(garbage) + delayed_garbage.Cut() + delayed_garbage = null +/datum/controller/process/garbage_collector/doWork() + if(!garbage_collect) + return + + dels = 0 var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del() var/checkRemain = max_checks_multiplier * schedule_interval var/maxDels = max_forcedel_multiplier * schedule_interval @@ -31,76 +40,113 @@ var/datum/controller/process/garbage_collector/garbage_collector while(destroyed.len && --checkRemain >= 0) if(dels >= maxDels) #ifdef GC_DEBUG - testing("GC: Reached max force dels per tick [dels] vs [GC_FORCE_DEL_PER_TICK]") + testing("GC: Reached max force dels per tick [dels] vs [maxDels]") #endif break // Server's already pretty pounded, everything else can wait 2 seconds var/refID = destroyed[1] var/GCd_at_time = destroyed[refID] if(GCd_at_time > time_to_kill) #ifdef GC_DEBUG - testing("GC: [refID] not old enough, breaking at [world.time] for [GCd_at_time - time_to_kill] deciseconds until [GCd_at_time + GC_COLLECTION_TIMEOUT]") + testing("GC: [refID] not old enough, breaking at [world.time] for [GCd_at_time - time_to_kill] deciseconds until [GCd_at_time + collection_timeout]") #endif break // Everything else is newer, skip them var/atom/A = locate(refID) #ifdef GC_DEBUG testing("GC: [refID] old enough to test: GCd_at_time: [GCd_at_time] time_to_kill: [time_to_kill] current: [world.time]") #endif - if(A && A.gc_destroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake + if(A && A.gcDestroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake // Something's still referring to the qdel'd object. Kill it. testing("GC: -- \ref[A] | [A.type] was unable to be GC'd and was deleted --") 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]") #endif destroyed.Cut(1, 2) - scheck() /datum/controller/process/garbage_collector/proc/AddTrash(datum/A) - if(!istype(A) || !isnull(A.gc_destroyed)) + if(!istype(A) || !isnull(A.gcDestroyed)) return #ifdef GC_DEBUG - testing("GC: AddTrash([A.type])") + testing("GC: AddTrash(\ref[A] - [A.type])") #endif - A.gc_destroyed = world.time + A.gcDestroyed = world.time 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. /proc/qdel(var/datum/A) if(!A) return + if(istype(A, /list)) + var/list/L = A + for(var/E in L) + qdel(E) + return + if(!istype(A)) //warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.") del(A) garbage_collector.dels++ - else if(isnull(A.gc_destroyed)) - // Let our friend know they're about to get fucked up. + garbage_collector.hard_dels++ + else if(isnull(A.gcDestroyed)) + // Let our friend know they're about to get collected . = !A.Destroy() if(. && A) A.finalize_qdel() /datum/proc/finalize_qdel() + if(IsPooled(src)) + PlaceInPool(src) + else + del(src) + +/atom/finalize_qdel() + if(IsPooled(src)) + PlaceInPool(src) + else + if(garbage_collector) + garbage_collector.AddTrash(src) + else + delayed_garbage |= src + +/icon/finalize_qdel() + del(src) + +/imagine/finalize_qdel() + del(src) + +/mob/finalize_qdel() del(src) /turf/finalize_qdel() - garbage_collector.AddTrash(src) + del(src) // Default implementation of clean-up code. // This should be overridden to remove all references pointing to the object being destroyed. // Return true if the the GC controller should allow the object to continue existing. (Useful if pooling objects.) /datum/proc/Destroy() + tag = null return -/datum/var/gc_destroyed //Time when this object was destroyed. - #ifdef TESTING /client/var/running_find_references +/mob/verb/create_thing() + set category = "Debug" + set name = "Create Thing" + + var/path = input("Enter path") + var/atom/thing = new path(loc) + thing.find_references() + /atom/verb/find_references() set category = "Debug" set name = "Find References" @@ -119,8 +165,8 @@ var/datum/controller/process/garbage_collector/garbage_collector return // Remove this object from the list of things to be auto-deleted. - if(garbage) - garbage.destroyed -= "\ref[src]" + if(garbage_collector) + garbage_collector.destroyed -= "\ref[src]" usr.client.running_find_references = type testing("Beginning search for references to a [type].") @@ -146,13 +192,13 @@ var/datum/controller/process/garbage_collector/garbage_collector /client/verb/purge_all_destroyed_objects() set category = "Debug" - if(garbage) - while(garbage.destroyed.len) - var/datum/o = locate(garbage.destroyed[1]) - if(istype(o) && o.gc_destroyed) + if(garbage_collector) + while(garbage_collector.destroyed.len) + var/datum/o = locate(garbage_collector.destroyed[1]) + if(istype(o) && o.gcDestroyed) del(o) - garbage.dels++ - garbage.destroyed.Cut(1, 2) + garbage_collector.dels++ + garbage_collector.destroyed.Cut(1, 2) #endif #ifdef GC_DEBUG diff --git a/code/controllers/Processes/inactivity.dm b/code/controllers/Processes/inactivity.dm index b610502d19..d9f9206749 100644 --- a/code/controllers/Processes/inactivity.dm +++ b/code/controllers/Processes/inactivity.dm @@ -9,7 +9,7 @@ if(!istype(C.mob, /mob/dead)) log_access("AFK: [key_name(C)]") C << "You have been inactive for more than 10 minutes and have been disconnected." - del(C) + del(C) // Don't qdel, cannot override finalize_qdel behaviour for clients. scheck() 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/controllers/_DynamicAreaLighting_TG.dm b/code/controllers/_DynamicAreaLighting_TG.dm index 6eeecef90d..6d3fd406dd 100644 --- a/code/controllers/_DynamicAreaLighting_TG.dm +++ b/code/controllers/_DynamicAreaLighting_TG.dm @@ -161,15 +161,6 @@ atom/movable/New() trueLuminosity = luminosity * luminosity light = new(src) -//Objects with opacity will trigger nearby lights to update at next lighting process. -atom/movable/Del() - if(opacity) - if(isturf(loc)) - if(loc:lighting_lumcount > 1) - UpdateAffectingLights() - - ..() - //Sets our luminosity. //If we have no light it will create one. //If we are setting luminosity to 0 the light will be cleaned up by the controller and garbage collected once all its diff --git a/code/controllers/autotransfer.dm b/code/controllers/autotransfer.dm index f1240a1fae..597b7f607c 100644 --- a/code/controllers/autotransfer.dm +++ b/code/controllers/autotransfer.dm @@ -7,7 +7,7 @@ datum/controller/transfer_controller/New() timerbuffer = config.vote_autotransfer_initial processing_objects += src -datum/controller/transfer_controller/Del() +datum/controller/transfer_controller/Destroy() processing_objects -= src datum/controller/transfer_controller/proc/process() diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index b4b0eb4393..9e82c55d05 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -223,7 +223,7 @@ var/global/datum/controller/radio/radio_controller frequency.remove_listener(device) if(frequency.devices.len == 0) - del(frequency) + qdel(frequency) frequencies -= f_text return 1 @@ -248,7 +248,7 @@ var/global/datum/controller/radio/radio_controller if(range) start_point = get_turf(source) if(!start_point) - del(signal) + qdel(signal) return 0 if (filter) send_to_filter(source, signal, filter, start_point, range) @@ -297,7 +297,7 @@ var/global/datum/controller/radio/radio_controller devices_line -= null if (devices_line.len==0) devices -= devices_filter - del(devices_line) + qdel(devices_line) /datum/signal var/obj/source diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index b112beaf53..e92d323062 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -194,6 +194,8 @@ var/list/gamemode_cache = list() var/law_zero = "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010" + var/aggressive_changelog = 0 + /datum/configuration/New() var/list/L = typesof(/datum/game_mode) - /datum/game_mode for (var/T in L) @@ -638,6 +640,9 @@ var/list/gamemode_cache = list() if("law_zero") law_zero = value + if("aggressive_changelog") + config.aggressive_changelog = 1 + else log_misc("Unknown setting in configuration: '[name]'") diff --git a/code/controllers/emergency_shuttle_controller.dm b/code/controllers/emergency_shuttle_controller.dm index 4f55d3e406..7e0d1e2d25 100644 --- a/code/controllers/emergency_shuttle_controller.dm +++ b/code/controllers/emergency_shuttle_controller.dm @@ -242,8 +242,8 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle sleep(speed) step(src, direction) for(var/obj/effect/starender/E in loc) - del(src) - + qdel(src) + return /obj/effect/starender invisibility = 101 diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 65df6dc90d..ee506c0d27 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -14,7 +14,7 @@ var/datum/controller/failsafe/Failsafe //There can be only one failsafe. Out with the old in with the new (that way we can restart the Failsafe by spawning a new one) if(Failsafe != src) if(istype(Failsafe)) - del(Failsafe) + qdel(Failsafe) Failsafe = src Failsafe.process() diff --git a/code/controllers/lighting_controller.dm b/code/controllers/lighting_controller.dm index b59d3c73d6..8510af6714 100644 --- a/code/controllers/lighting_controller.dm +++ b/code/controllers/lighting_controller.dm @@ -22,7 +22,7 @@ datum/controller/lighting/New() if(lighting_controller != src) if(istype(lighting_controller,/datum/controller/lighting)) Recover() //if we are replacing an existing lighting_controller (due to a crash) we attempt to preserve as much as we can - del(lighting_controller) + qdel(lighting_controller) lighting_controller = src diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index facae60577..d698454cab 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -19,14 +19,14 @@ datum/controller/game_controller/New() if(master_controller != src) log_debug("Rebuilding Master Controller") if(istype(master_controller)) - del(master_controller) + qdel(master_controller) master_controller = src if(!job_master) job_master = new /datum/controller/occupations() job_master.SetupOccupations() job_master.LoadJobs("config/jobs.txt") - world << "Job setup complete" + admin_notice("Job setup complete", R_DEBUG) if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase() if(!syndicate_code_response) syndicate_code_response = generate_code_phrase() @@ -46,17 +46,17 @@ datum/controller/game_controller/proc/setup() datum/controller/game_controller/proc/setup_objects() - world << "Initializing objects" + admin_notice("Initializing objects", R_DEBUG) sleep(-1) for(var/atom/movable/object in world) object.initialize() - world << "Initializing pipe networks" + admin_notice("Initializing pipe networks", R_DEBUG) sleep(-1) for(var/obj/machinery/atmospherics/machine in machines) machine.build_network() - world << "Initializing atmos machinery." + admin_notice("Initializing atmos machinery.", R_DEBUG) sleep(-1) for(var/obj/machinery/atmospherics/unary/U in machines) if(istype(U, /obj/machinery/atmospherics/unary/vent_pump)) @@ -77,5 +77,5 @@ datum/controller/game_controller/proc/setup_objects() //Set up spawn points. populate_spawn_points() - world << "Initializations complete." + admin_notice("Initializations complete.", R_DEBUG) sleep(-1) diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index e27eeb1caf..d827a3a65e 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -62,7 +62,7 @@ usr.client.debug_variables(antag) message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.") -/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano")) +/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Ticker Process","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano")) set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" @@ -78,6 +78,9 @@ if("Ticker") debug_variables(ticker) feedback_add_details("admin_verb","DTicker") + if("Ticker Process") + debug_variables(tickerProcess) + feedback_add_details("admin_verb","DTickerProcess") if("Lighting") debug_variables(lighting_controller) feedback_add_details("admin_verb","DLighting") diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 5fc86c420a..351ec9a845 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -293,7 +293,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H) preview_icon.Blend(eyes_s, ICON_OVERLAY) if(clothes_s) preview_icon.Blend(clothes_s, ICON_OVERLAY) - del(eyes_s) - del(clothes_s) + qdel(eyes_s) + qdel(clothes_s) return preview_icon diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 2e8e4bfd3f..914b56ee60 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -598,7 +598,7 @@ client for(var/obj/Obj in world) if(Obj.type == O_type) i++ - del(Obj) + qdel(Obj) if(!i) usr << "No objects of this type exist" return @@ -609,7 +609,7 @@ client for(var/obj/Obj in world) if(istype(Obj,O_type)) i++ - del(Obj) + qdel(Obj) if(!i) usr << "No objects of this type exist" return @@ -888,7 +888,7 @@ client usr << "Removed [rem_organ] from [M]." rem_organ.removed() - del(rem_organ) + qdel(rem_organ) else if(href_list["fix_nano"]) if(!check_rights(R_DEBUG)) return diff --git a/code/datums/disease.dm b/code/datums/disease.dm index 93aa14f19b..398dc73bbb 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -11,7 +11,7 @@ /* -IMPORTANT NOTE: Please delete the diseases by using cure() proc or del() instruction. +IMPORTANT NOTE: Please delete the diseases by using cure() proc or qdel() instruction. Diseases are referenced in a global list, so simply setting mob or obj vars to null does not delete the object itself. Thank you. @@ -158,7 +158,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease if(D != src) if(IsSame(D)) //error("Deleting [D.name] because it's the same as [src.name].") - del(D) // if there are somehow two viruses of the same kind in the system, delete the other one + qdel(D) // if there are somehow two viruses of the same kind in the system, delete the other one if(holder == affected_mob) if(affected_mob.stat != DEAD) //he's alive @@ -183,7 +183,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease /*if(istype(src, /datum/disease/alien_embryo)) //Get rid of the infection flag if it's a xeno embryo. affected_mob.status_flags &= ~(XENO_HOST)*/ affected_mob.viruses -= src //remove the datum from the list - del(src) //delete the datum to stop it processing + qdel(src) //delete the datum to stop it processing return @@ -193,6 +193,9 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease active_diseases += src initial_spread = spread +/datum/disease/Destroy() + active_diseases.Remove(src) + /datum/disease/proc/IsSame(var/datum/disease/D) if(istype(src, D.type)) return 1 @@ -200,8 +203,3 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease /datum/disease/proc/Copy(var/process = 0) return new type(process, src) - -/* -/datum/disease/Del() - active_diseases.Remove(src) -*/ diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 70acceca35..d4effcf6cb 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -71,7 +71,7 @@ var/list/advance_cures = list( ..(process, D) return -/datum/disease/advance/Del() +/datum/disease/advance/Destroy() if(processing) for(var/datum/symptom/S in symptoms) S.End(src) @@ -109,7 +109,7 @@ var/list/advance_cures = list( if(resistance && !(id in affected_mob.resistances)) affected_mob.resistances[id] = id affected_mob.viruses -= src //remove the datum from the list - del(src) //delete the datum to stop it processing + qdel(src) //delete the datum to stop it processing return // Returns the advance disease with a different reference memory. diff --git a/code/datums/diseases/alien_embryo.dm b/code/datums/diseases/alien_embryo.dm index 631c93b26c..59d1dbe160 100644 --- a/code/datums/diseases/alien_embryo.dm +++ b/code/datums/diseases/alien_embryo.dm @@ -113,7 +113,7 @@ Des: Removes all infection images from aliens and places an infection image on a if (alien.client) for(var/image/I in alien.client.images) if(dd_hasprefix_case(I.icon_state, "infected")) - del(I) + qdel(I) for (var/mob/living/carbon/alien/alien in player_list) if (alien.client) @@ -149,5 +149,5 @@ Des: Removes the alien infection image from all aliens in the world located in p for(var/image/I in alien.client.images) if(I.loc == C) if(dd_hasprefix_case(I.icon_state, "infected")) - del(I) + qdel(I) return diff --git a/code/datums/diseases/dna_spread.dm b/code/datums/diseases/dna_spread.dm index a4d85a5640..6d520fe294 100644 --- a/code/datums/diseases/dna_spread.dm +++ b/code/datums/diseases/dna_spread.dm @@ -34,7 +34,7 @@ if(4) if(!src.transformed) if ((!strain_data["name"]) || (!strain_data["UI"]) || (!strain_data["SE"])) - del(affected_mob.virus) + qdel(affected_mob.virus) return //Save original dna for when the disease is cured. @@ -56,7 +56,7 @@ return -/datum/disease/dnaspread/Del() +/datum/disease/dnaspread/Destroy() if ((original_dna["name"]) && (original_dna["UI"]) && (original_dna["SE"])) var/list/newUI=original_dna["UI"] var/list/newSE=original_dna["SE"] diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index 7c2fabbc9b..0bda144e8a 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -12,7 +12,7 @@ holder = atom if(!holder) //don't want this without a holder spawn - del src + qdel(src) set_desc(steps.len) return @@ -61,7 +61,7 @@ if(result) new result(get_turf(holder)) spawn() - del holder + qdel(holder) return proc/set_desc(index as num) diff --git a/code/datums/helper_datums/global_iterator.dm b/code/datums/helper_datums/global_iterator.dm index 0020859f1d..4f4d680e9e 100644 --- a/code/datums/helper_datums/global_iterator.dm +++ b/code/datums/helper_datums/global_iterator.dm @@ -151,4 +151,8 @@ Data storage vars: start() return active() - +/datum/global_iterator/Destroy() + tag = null + arg_list.Cut() + stop() + //Do not call ..() diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 00899f47cb..1f6c2abd74 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -49,7 +49,7 @@ //must succeed in most cases proc/setTeleatom(atom/movable/ateleatom) if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon)) - del(ateleatom) + qdel(ateleatom) return 0 if(istype(ateleatom)) teleatom = ateleatom diff --git a/code/datums/mind.dm b/code/datums/mind.dm index f6fbbc110c..cfbd155145 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -311,7 +311,7 @@ datum/mind for(var/obj/item/weapon/implant/loyalty/I in H.contents) for(var/obj/item/organ/external/organs in H.organs) if(I in organs.implants) - I.Del() + qdel(I) break H << "Your loyalty implant has been deactivated." log_admin("[key_name_admin(usr)] has de-loyalty implanted [current].") @@ -368,7 +368,7 @@ datum/mind src = null m2h.inject(M) src = mobfinder.loc:mind - del(mobfinder) + qdel(mobfinder) current.radiation -= 50 */ else if (href_list["silicon"]) @@ -445,10 +445,10 @@ datum/mind var/list/L = current.get_contents() for (var/t in L) if (istype(t, /obj/item/device/pda)) - if (t:uplink) del(t:uplink) + if (t:uplink) qdel(t:uplink) t:uplink = null else if (istype(t, /obj/item/device/radio)) - if (t:traitorradio) del(t:traitorradio) + if (t:traitorradio) qdel(t:traitorradio) t:traitorradio = null t:traitor_frequency = 0.0 else if (istype(t, /obj/item/weapon/SWF_uplink) || istype(t, /obj/item/weapon/syndicate_uplink)) @@ -457,7 +457,7 @@ datum/mind R.loc = current.loc R.traitorradio = null R.traitor_frequency = 0.0 - del(t) + qdel(t) // remove wizards spells //If there are more special powers that need removal, they can be procced into here./N @@ -479,7 +479,7 @@ datum/mind proc/take_uplink() var/obj/item/device/uplink/hidden/H = find_syndicate_uplink() if(H) - del(H) + qdel(H) // check whether this mind's mob has been brigged for the given duration diff --git a/code/datums/modules.dm b/code/datums/modules.dm index 896d920f99..43d25a2e25 100644 --- a/code/datums/modules.dm +++ b/code/datums/modules.dm @@ -24,7 +24,8 @@ var/list/modules = list( // global associative list var/mneed = mods.inmodlist(type) // find if this type has modules defined if(!mneed) // not found in module list? - del(src) // delete self, thus ending proc + qdel(src) + return var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object status = needed diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index d72a8798a7..0f10d8d56f 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -95,7 +95,7 @@ var/obj/result_obj = new result(container) for (var/obj/O in (container.contents-result_obj)) O.reagents.trans_to(result_obj, O.reagents.total_volume) - del(O) + qdel(O) container.reagents.clear_reagents() return result_obj @@ -110,7 +110,7 @@ O.reagents.del_reagent("nutriment") O.reagents.update_total() O.reagents.trans_to(result_obj, O.reagents.total_volume) - del(O) + qdel(O) container.reagents.clear_reagents() return result_obj diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 7f287a5b54..5b0ae96726 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -350,7 +350,7 @@ /obj/item/weapon/module/power_control/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (istype(W, /obj/item/device/multitool)) var/obj/item/weapon/circuitboard/ghettosmes/newcircuit = new/obj/item/weapon/circuitboard/ghettosmes(user.loc) - del(src) + qdel(src) user.put_in_hands(newcircuit) diff --git a/code/defines/procs/admin.dm b/code/defines/procs/admin.dm index 5901f3b9c9..6c5f27fa07 100644 --- a/code/defines/procs/admin.dm +++ b/code/defines/procs/admin.dm @@ -1,3 +1,8 @@ +proc/admin_notice(var/message, var/rights) + for(var/mob/M in mob_list) + if(check_rights(rights, 0, M)) + M << message + proc/log_and_message_admins(var/message as text, var/mob/user = usr) log_admin(user ? "[key_name(user)] [message]" : "EVENT [message]") message_admins(user ? "[key_name(user)] [message]" : "EVENT [message]") diff --git a/code/defines/procs/records.dm b/code/defines/procs/records.dm index 4e9fbcc9af..256ae51dbf 100644 --- a/code/defines/procs/records.dm +++ b/code/defines/procs/records.dm @@ -22,7 +22,7 @@ G.fields["photo_side"] = side data_core.general += G - del(dummy) + qdel(dummy) return G /proc/CreateSecurityRecord(var/name as text, var/id as text) diff --git a/code/defines/procs/sd_Alert.dm b/code/defines/procs/sd_Alert.dm index c63cab8f8b..e10416f112 100644 --- a/code/defines/procs/sd_Alert.dm +++ b/code/defines/procs/sd_Alert.dm @@ -1,168 +1,168 @@ -/* sd_Alert library - by Shadowdarke (shadowdarke@byond.com) - - sd_Alert() is a powerful and flexible alternative to the built in BYOND - alert() proc. sd_Alert offers timed popups, unlimited buttons, custom - appearance, and even the option to popup without stealing keyboard focus - from the map or command line. - - Please see demo.dm for detailed examples. - -FORMAT - sd_Alert(who, message, title, buttons, default, duration, unfocus, \ - size, table, style, tag, select, flags) - -ARGUMENTS - who - the client or mob to display the alert to. - message - text message to display - title - title of the alert box - buttons - list of buttons - Default Value: list("Ok") - default - default button selestion - Default Value: the first button in the list - duration - the number of ticks before this alert expires. If not - set, the alert lasts until a button is clicked. - Default Value: 0 (unlimited) - unfocus - if this value is set, the popup will not steal keyboard - focus from the map or command line. - Default Value: 1 (do not take focus) - size - size of the popup window in px - Default Value: "300x200" - table - optional parameters for the HTML table in the alert - Default Value: "width=100% height=100%" (fill the window) - style - optional style sheet information - tag - lets you specify a certain tag for this sd_Alert so you may manipulate it - externally. (i.e. force the alert to close, change options and redisplay, - reuse the same window, etc.) - select - if set, the buttons will be replaced with a selection box with a number of - lines displayed equal to this value. - Default value: 0 (use buttons) - flags - optional flags effecting the alert display. These flags may be ORed (|) - together for multiple effects. - SD_ALERT_SCROLL = display a scrollbar - SD_ALERT_SELECT_MULTI = forces selection box display (instead of - buttons) allows the user to select multiple - choices. - SD_ALERT_LINKS = display each choice as a plain text link. - Any selection box style overrides this flag. - SD_ALERT_NOVALIDATE = don't validate responses - Default value: SD_ALERT_SCROLL - (button display with scroll bar, validate responses) -RETURNS - The text of the selected button, or null if the alert duration expired - without a button click. - -Version 1 changes (from version 0): -* Added the tag, select, and flags arguments, thanks to several suggestions from Foomer. -* Split the sd_Alert/Alert() proc into New(), Display(), and Response() to allow more - customization by developers. Primarily developers would want to use Display() to change - the display of active tagged windows - -*/ - - -#define SD_ALERT_SCROLL 1 -#define SD_ALERT_SELECT_MULTI 2 -#define SD_ALERT_LINKS 4 -#define SD_ALERT_NOVALIDATE 8 - -proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\ - default, duration = 0, unfocus = 1, size = "300x200", \ - table = "width=100% height=100%", style, tag, select, flags = SD_ALERT_SCROLL) - - if(ismob(who)) - var/mob/M = who - who = M.client - if(!istype(who)) CRASH("sd_Alert: Invalid target:[who] (\ref[who])") - - var/sd_alert/T = locate(tag) - if(T) - if(istype(T)) del(T) - else CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])") - T = new(who, tag) - if(duration) - spawn(duration) - if(T) del(T) - return - T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags) - . = T.Response() - -sd_alert - var - client/target - response - list/validation - - Del() - target << browse(null,"window=\ref[src]") - ..() - - New(who, tag) - ..() - target = who - src.tag = tag - - Topic(href,params[]) - if(usr.client != target) return - response = params["clk"] - - proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags) - if(unfocus) spawn() target << browse(null,null) - if(istext(buttons)) buttons = list(buttons) - if(!default) default = buttons[1] - if(!(flags & SD_ALERT_NOVALIDATE)) validation = buttons.Copy() - - var/html = {"[title][style]\ -
[message]
"} - - if(select || (flags & SD_ALERT_SELECT_MULTI)) // select style choices - html += {"
\ - -
" - else if(flags & SD_ALERT_LINKS) // text link style - for(var/b in buttons) - var/list/L = list() - L["clk"] = b - var/html_string=list2params(L) - var/focus - if(b == default) focus = " ID=fcs" - html += "[html_encode(b)]\ -
" - else // button style choices - for(var/b in buttons) - var/list/L = list() - L["clk"] = b - var/html_string=list2params(L) - var/focus - if(b == default) focus = " ID=fcs" - html += " " - - html += "
" - - target << browse(html,"window=\ref[src];size=[size];can_close=0") - - proc/Response() - var/validated - while(!validated) - while(target && !response) // wait for a response - sleep(2) - - if(response && validation) - if(istype(response, /list)) - var/list/L = response - validation - if(L.len) response = null - else validated = 1 - else if(response in validation) validated = 1 - else response=null - else validated = 1 - spawn(2) del(src) - return response +/* sd_Alert library + by Shadowdarke (shadowdarke@byond.com) + + sd_Alert() is a powerful and flexible alternative to the built in BYOND + alert() proc. sd_Alert offers timed popups, unlimited buttons, custom + appearance, and even the option to popup without stealing keyboard focus + from the map or command line. + + Please see demo.dm for detailed examples. + +FORMAT + sd_Alert(who, message, title, buttons, default, duration, unfocus, \ + size, table, style, tag, select, flags) + +ARGUMENTS + who - the client or mob to display the alert to. + message - text message to display + title - title of the alert box + buttons - list of buttons + Default Value: list("Ok") + default - default button selestion + Default Value: the first button in the list + duration - the number of ticks before this alert expires. If not + set, the alert lasts until a button is clicked. + Default Value: 0 (unlimited) + unfocus - if this value is set, the popup will not steal keyboard + focus from the map or command line. + Default Value: 1 (do not take focus) + size - size of the popup window in px + Default Value: "300x200" + table - optional parameters for the HTML table in the alert + Default Value: "width=100% height=100%" (fill the window) + style - optional style sheet information + tag - lets you specify a certain tag for this sd_Alert so you may manipulate it + externally. (i.e. force the alert to close, change options and redisplay, + reuse the same window, etc.) + select - if set, the buttons will be replaced with a selection box with a number of + lines displayed equal to this value. + Default value: 0 (use buttons) + flags - optional flags effecting the alert display. These flags may be ORed (|) + together for multiple effects. + SD_ALERT_SCROLL = display a scrollbar + SD_ALERT_SELECT_MULTI = forces selection box display (instead of + buttons) allows the user to select multiple + choices. + SD_ALERT_LINKS = display each choice as a plain text link. + Any selection box style overrides this flag. + SD_ALERT_NOVALIDATE = don't validate responses + Default value: SD_ALERT_SCROLL + (button display with scroll bar, validate responses) +RETURNS + The text of the selected button, or null if the alert duration expired + without a button click. + +Version 1 changes (from version 0): +* Added the tag, select, and flags arguments, thanks to several suggestions from Foomer. +* Split the sd_Alert/Alert() proc into New(), Display(), and Response() to allow more + customization by developers. Primarily developers would want to use Display() to change + the display of active tagged windows + +*/ + + +#define SD_ALERT_SCROLL 1 +#define SD_ALERT_SELECT_MULTI 2 +#define SD_ALERT_LINKS 4 +#define SD_ALERT_NOVALIDATE 8 + +proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\ + default, duration = 0, unfocus = 1, size = "300x200", \ + table = "width=100% height=100%", style, tag, select, flags = SD_ALERT_SCROLL) + + if(ismob(who)) + var/mob/M = who + who = M.client + if(!istype(who)) CRASH("sd_Alert: Invalid target:[who] (\ref[who])") + + var/sd_alert/T = locate(tag) + if(T) + if(istype(T)) qdel(T) + else CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])") + T = new(who, tag) + if(duration) + spawn(duration) + if(T) qdel(T) + return + T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags) + . = T.Response() + +sd_alert + var + client/target + response + list/validation + + Destroy() + target << browse(null,"window=\ref[src]") + ..() + + New(who, tag) + ..() + target = who + src.tag = tag + + Topic(href,params[]) + if(usr.client != target) return + response = params["clk"] + + proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags) + if(unfocus) spawn() target << browse(null,null) + if(istext(buttons)) buttons = list(buttons) + if(!default) default = buttons[1] + if(!(flags & SD_ALERT_NOVALIDATE)) validation = buttons.Copy() + + var/html = {"[title][style]\ +
[message]
"} + + if(select || (flags & SD_ALERT_SELECT_MULTI)) // select style choices + html += {"
\ + +
" + else if(flags & SD_ALERT_LINKS) // text link style + for(var/b in buttons) + var/list/L = list() + L["clk"] = b + var/html_string=list2params(L) + var/focus + if(b == default) focus = " ID=fcs" + html += "[html_encode(b)]\ +
" + else // button style choices + for(var/b in buttons) + var/list/L = list() + L["clk"] = b + var/html_string=list2params(L) + var/focus + if(b == default) focus = " ID=fcs" + html += " " + + html += "
" + + target << browse(html,"window=\ref[src];size=[size];can_close=0") + + proc/Response() + var/validated + while(!validated) + while(target && !response) // wait for a response + sleep(2) + + if(response && validation) + if(istype(response, /list)) + var/list/L = response - validation + if(L.len) response = null + else validated = 1 + else if(response in validation) validated = 1 + else response=null + else validated = 1 + spawn(2) qdel(src) + return response diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 73e17a2043..aad02b1c6c 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -199,7 +199,7 @@ for(var/datum/uplink_item/UI in H.purchase_log) var/obj/I = new UI.path refined_log.Add("[H.purchase_log[UI]]x\icon[I][UI.name]") - del(I) + qdel(I) purchases = english_list(refined_log, nothing_text = "") if(uplink_true) text += " (used [TC_uses] TC)" @@ -215,7 +215,7 @@ if(antag.current && antag.current.client) for(var/image/I in antag.current.client.images) if(I.icon_state == antag_indicator) - del(I) + qdel(I) for(var/datum/mind/other_antag in current_antagonists) if(other_antag.current) antag.current.client.images |= image('icons/mob/mob.dmi', loc = other_antag.current, icon_state = antag_indicator) @@ -241,10 +241,10 @@ if(antag.current.client) for(var/image/I in antag.current.client.images) if(I.icon_state == antag_indicator && I.loc == player.current) - del(I) + qdel(I) if(player.current && player.current.client) for(var/image/I in player.current.client.images) if(I.icon_state == antag_indicator) - del(I) + qdel(I) diff --git a/code/game/antagonist/antagonist_build.dm b/code/game/antagonist/antagonist_build.dm index 40ba798aae..35af4e6f80 100644 --- a/code/game/antagonist/antagonist_build.dm +++ b/code/game/antagonist/antagonist_build.dm @@ -15,7 +15,7 @@ var/mob/holder = player.current player.current = new mob_path(get_turf(player.current)) player.transfer_to(player.current) - if(holder) del(holder) + if(holder) qdel(holder) player.original = player.current return player.current @@ -30,7 +30,7 @@ for(var/obj/item/thing in player.contents) player.drop_from_inventory(thing) if(thing.loc != player) - del(thing) + qdel(thing) return 1 if(flags & ANTAG_SET_APPEARANCE) diff --git a/code/game/antagonist/station/highlander.dm b/code/game/antagonist/station/highlander.dm index 0af6e1e23d..9b82b15852 100644 --- a/code/game/antagonist/station/highlander.dm +++ b/code/game/antagonist/station/highlander.dm @@ -32,7 +32,7 @@ var/datum/antagonist/highlander/highlanders for (var/obj/item/I in player) if (istype(I, /obj/item/weapon/implant)) continue - del(I) + qdel(I) player.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(player), slot_w_uniform) player.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(player), slot_l_ear) diff --git a/code/game/antagonist/station/rogue_ai.dm b/code/game/antagonist/station/rogue_ai.dm index 372556c205..3d9026ff88 100644 --- a/code/game/antagonist/station/rogue_ai.dm +++ b/code/game/antagonist/station/rogue_ai.dm @@ -27,7 +27,7 @@ var/datum/antagonist/rogue_ai/malf hacked_apcs |= apc /datum/antagonist/rogue_ai/proc/update_takeover_time() - hack_time -= ((hacked_apcs.len/6)*tickerProcess.getLastTickerTimeDuration()) + hack_time -= ((hacked_apcs.len/6)*2.0) /datum/antagonist/rogue_ai/tick() if(revealed && hacked_apcs.len >= 3) @@ -213,7 +213,7 @@ var/datum/antagonist/rogue_ai/malf /client/proc/reactivate_camera) current:laws = new /datum/ai_laws/nanotrasen - del(current:malf_picker) + qdel(current:malf_picker) current:show_laws() current.icon_state = "ai" diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index a72b06852a..21168be5bc 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -56,7 +56,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station var/air_doors_activated = 0 var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') var/sound/forced_ambience = null - + var/sound_env = 2 //reverb preset for sounds played in this area, see sound datum reference for more /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ var/list/teleportlocs = list() @@ -808,6 +808,9 @@ area/space/atmosalert() //Hallway +/area/hallway/primary/ + sound_env = 12 //hallway + /area/hallway/primary/fore name = "\improper Fore Primary Hallway" icon_state = "hallF" diff --git a/code/game/area/asteroid_areas.dm b/code/game/area/asteroid_areas.dm index edfb99f57f..12ae5377ce 100644 --- a/code/game/area/asteroid_areas.dm +++ b/code/game/area/asteroid_areas.dm @@ -3,6 +3,7 @@ /area/mine icon_state = "mining" music = 'sound/ambience/song_game.ogg' + sound_env = 5 //stoneroom /area/mine/explored name = "Mine" diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index e5b421e9af..8aa6b1cd64 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -32,7 +32,7 @@ proc/spawn_room(var/atom/start_loc,var/x_size,var/y_size,var/wall,var/floor , va var/cur_loc = locate(start_loc.x+x,start_loc.y+y,start_loc.z) if(clean) for(var/O in cur_loc) - del(O) + qdel(O) var/area/asteroid/artifactroom/A = new if(name) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 5944587cc7..152622f88e 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -22,6 +22,18 @@ //Detective Work, used for the duplicate data points kept in the scanners var/list/original_atom +/atom/Destroy() + . = ..() + density = 0 + SetOpacity(0) + + if(reagents) + qdel(reagents) + reagents = null + for(var/atom/movable/AM in contents) + qdel(AM) + invisibility = 101 + /atom/proc/assume_air(datum/gas_mixture/giver) return null @@ -66,7 +78,6 @@ return flags & INSERT_CONTAINER */ - /atom/proc/meteorhit(obj/meteor as obj) return @@ -148,7 +159,7 @@ its easier to just keep the beam vertical. for(var/obj/effect/overlay/beam/O in orange(10,src)) //This section erases the previously drawn beam because I found it was easier to if(O.BeamSource==src) //just draw another instance of the beam instead of trying to manipulate all the - del O //pieces to a new orientation. + qdel(O) //pieces to a new orientation. var/Angle=round(Get_Angle(src,BeamTarget)) var/icon/I=new(icon,icon_state) I.Turn(Angle) @@ -189,7 +200,7 @@ its easier to just keep the beam vertical. X.pixel_y=Pixel_y sleep(3) //Changing this to a lower value will cause the beam to follow more smoothly with movement, but it will also be more laggy. //I've found that 3 ticks provided a nice balance for my use. - for(var/obj/effect/overlay/beam/O in orange(10,src)) if(O.BeamSource==src) del O + for(var/obj/effect/overlay/beam/O in orange(10,src)) if(O.BeamSource==src) qdel(O) //All atoms @@ -229,7 +240,7 @@ its easier to just keep the beam vertical. /atom/proc/fire_act() return - + /atom/proc/melt() return @@ -362,7 +373,7 @@ its easier to just keep the beam vertical. //Cleaning up shit. if(fingerprints && !fingerprints.len) - del(fingerprints) + qdel(fingerprints) return @@ -419,7 +430,7 @@ its easier to just keep the beam vertical. src.color = initial(src.color) //paint src.germ_level = 0 if(istype(blood_DNA, /list)) - del(blood_DNA) + qdel(blood_DNA) return 1 diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 79d6e8fd08..aabcb3653a 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -14,6 +14,25 @@ var/moved_recently = 0 var/mob/pulledby = null +/atom/movable/Del() + if(isnull(gcDestroyed) && loc) + testing("GC: -- [type] was deleted via del() rather than qdel() --") + CRASH() // Debug until I can get a clean server start. +// else if(isnull(gcDestroyed)) +// testing("GC: [type] was deleted via GC without qdel()") //Not really a huge issue but from now on, please qdel() +// else +// testing("GC: [type] was deleted via GC with qdel()") + ..() + +/atom/movable/Destroy() + if(opacity) + if(isturf(loc)) + if(loc:lighting_lumcount > 1) + UpdateAffectingLights() + loc = null + + ..() + /atom/movable/Bump(var/atom/A, yes) if(src.throwing) src.throw_impact(A) diff --git a/code/game/dna/dna_misc.dm b/code/game/dna/dna_misc.dm index b314852214..cdc737c007 100644 --- a/code/game/dna/dna_misc.dm +++ b/code/game/dna/dna_misc.dm @@ -420,7 +420,7 @@ animation.master = src flick("h2monkey", animation) sleep(48) - del(animation) + qdel(animation) var/mob/living/carbon/monkey/O = null @@ -447,7 +447,7 @@ for(var/obj/T in (M.contents-implants)) - del(T) + qdel(T) O.loc = M.loc @@ -469,7 +469,7 @@ I.loc = O I.implanted = O // O.update_icon = 1 //queue a full icon update at next life() call - del(M) + qdel(M) return if (!isblockon(getblock(M.dna.struc_enzymes, MONKEYBLOCK,3),MONKEYBLOCK) && !istype(M, /mob/living/carbon/human)) @@ -493,7 +493,7 @@ animation.master = src flick("monkey2h", animation) sleep(48) - del(animation) + qdel(animation) var/mob/living/carbon/human/O = new( src ) if(Mo.greaterform) @@ -519,7 +519,7 @@ M.viruses -= D //for(var/obj/T in M) - // del(T) + // qdel(T) O.loc = M.loc @@ -553,7 +553,7 @@ I.loc = O I.implanted = O // O.update_icon = 1 //queue a full icon update at next life() call - del(M) + qdel(M) return //////////////////////////////////////////////////////////// Monkey Block if(M) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 86bfbeb0fe..68e1f34f88 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -144,7 +144,7 @@ return put_in(G.affecting) src.add_fingerprint(user) - del(G) + qdel(G) return /obj/machinery/dna_scannernew/proc/put_in(var/mob/M) @@ -187,7 +187,7 @@ ex_act(severity) //Foreach goto(35) //SN src = null - del(src) + qdel(src) return if(2.0) if (prob(50)) @@ -196,7 +196,7 @@ ex_act(severity) //Foreach goto(108) //SN src = null - del(src) + qdel(src) return if(3.0) if (prob(25)) @@ -205,7 +205,7 @@ ex_act(severity) //Foreach goto(181) //SN src = null - del(src) + qdel(src) return else return @@ -215,7 +215,7 @@ if(prob(75)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc - del(src) + qdel(src) /obj/machinery/computer/scan_consolenew name = "DNA Modifier Access Console" @@ -262,12 +262,12 @@ switch(severity) if(1.0) //SN src = null - del(src) + qdel(src) return if(2.0) if (prob(50)) //SN src = null - del(src) + qdel(src) return else return @@ -275,7 +275,7 @@ /obj/machinery/computer/scan_consolenew/blob_act() if(prob(75)) - del(src) + qdel(src) /obj/machinery/computer/scan_consolenew/power_change() ..() diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm index 2e0f6cdec2..7d9da10636 100644 --- a/code/game/dna/genes/monkey.dm +++ b/code/game/dna/genes/monkey.dm @@ -33,7 +33,7 @@ animation.master = src flick("h2monkey", animation) sleep(48) - del(animation) + qdel(animation) var/mob/living/carbon/monkey/O = null @@ -60,7 +60,7 @@ for(var/obj/T in (M.contents-implants)) - del(T) + qdel(T) O.loc = M.loc @@ -82,7 +82,7 @@ I.loc = O I.implanted = O // O.update_icon = 1 //queue a full icon update at next life() call - del(M) + qdel(M) return /datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags) @@ -108,7 +108,7 @@ animation.master = src flick("monkey2h", animation) sleep(48) - del(animation) + qdel(animation) var/mob/living/carbon/human/O if(Mo.greaterform) @@ -136,7 +136,7 @@ M.viruses -= D //for(var/obj/T in M) - // del(T) + // qdel(T) O.loc = M.loc @@ -171,5 +171,5 @@ I.loc = O I.implanted = O // O.update_icon = 1 //queue a full icon update at next life() call - del(M) + qdel(M) return diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index f0a24001ba..3897d444e8 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -14,7 +14,7 @@ ..(loc, h) - Del() + Destroy() blob_cores -= src processing_objects.Remove(src) ..() @@ -24,7 +24,7 @@ update_icon() if(health <= 0) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - del(src) + qdel(src) return return diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index bb8de8184e..c1d14d0040 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -12,7 +12,7 @@ update_icon() if(health <= 0) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - del(src) + qdel(src) return return @@ -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 - ..() - del(src) + qdel(src) +/mob/living/simple_animal/hostile/blobspore/Destroy() + if(factory) + factory.spores -= src + factory = null + ..() diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index c9ffaf96f1..92572f9a7b 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -14,7 +14,7 @@ ..(loc, h) - Del() + Destroy() blob_nodes -= src processing_objects.Remove(src) ..() @@ -24,7 +24,7 @@ update_icon() if(health <= 0) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - del(src) + qdel(src) return return diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm index 0e1b6c07eb..c47696c72e 100644 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ b/code/game/gamemodes/blob/blobs/shield.dm @@ -14,7 +14,7 @@ update_icon() if(health <= 0) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - del(src) + qdel(src) return return diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index f6351c8480..6e9c3d9b68 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 @@ -110,7 +110,7 @@ B.loc = T else T.blob_act()//If we cant move in hit the turf - del(B) + qdel(B) for(var/atom/A in T)//Hit everything in the turf A.blob_act() return 1 @@ -134,7 +134,7 @@ update_icon()//Needs to be updated with the types if(health <= 0) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - del(src) + qdel(src) return if(health <= 15) icon_state = "blob_damaged" @@ -158,7 +158,7 @@ attackby(var/obj/item/weapon/W, var/mob/user) playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) - src.visible_message("\red The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]") + src.visible_message("The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]") var/damage = 0 switch(W.damtype) if("fire") @@ -182,7 +182,7 @@ new/obj/effect/blob/factory(src.loc,src.health) if("Shield") new/obj/effect/blob/shield(src.loc,src.health*2) - del(src) + qdel(src) return //////////////////////////////****IDLE BLOB***///////////////////////////////////// @@ -201,7 +201,7 @@ proc/update_idle() if(health<=0) - del(src) + qdel(src) return if(health<4) icon_state = "blobc0" @@ -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/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 9b6ddb5160..2961950377 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -385,7 +385,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E animation.master = src flick("monkey2h", animation) sleep(48) - del(animation) + qdel(animation) for(var/obj/item/W in src) C.drop_from_inventory(W) @@ -400,7 +400,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E O.real_name = chosen_dna.real_name for(var/obj/T in C) - del(T) + qdel(T) O.loc = C.loc @@ -420,7 +420,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E O.changeling_update_languages(changeling.absorbed_languages) feedback_add_details("changeling_powers","LFT") - del(C) + qdel(C) return 1 diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 185dc99ebd..337ad39c0d 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -155,7 +155,7 @@ if(istype(M, /mob/living/silicon/robot)) var/mob/living/silicon/robot/Robot = M if(Robot.mmi) - del(Robot.mmi) + qdel(Robot.mmi) else for(var/obj/item/W in M) if(istype(W, /obj/item/weapon/implant)) diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm index a7d275b177..965d2548f7 100644 --- a/code/game/gamemodes/cult/cultify/mob.dm +++ b/code/game/gamemodes/cult/cultify/mob.dm @@ -32,11 +32,11 @@ else dust() -/mob/proc/see_narsie(var/obj/machinery/singularity/narsie/large/N, var/dir) +/mob/proc/see_narsie(var/obj/singularity/narsie/large/N, var/dir) if(N.chained) if(narsimage) - del(narsimage) - del(narglow) + qdel(narsimage) + qdel(narglow) return if((N.z == src.z)&&(get_dist(N,src) <= (N.consume_range+10)) && !(N in view(src))) if(!narsimage) //Create narsimage @@ -59,5 +59,5 @@ src << narglow else if(narsimage) - del(narsimage) - del(narglow) + qdel(narsimage) + qdel(narglow) diff --git a/code/game/gamemodes/cult/cultify/obj.dm b/code/game/gamemodes/cult/cultify/obj.dm index bc0a723869..630877eb11 100644 --- a/code/game/gamemodes/cult/cultify/obj.dm +++ b/code/game/gamemodes/cult/cultify/obj.dm @@ -65,8 +65,11 @@ new /obj/structure/cult/tome(loc) qdel(src) -/obj/machinery/door/cultify() +/obj/machinery/door/airlock/external/cultify() new /obj/structure/mineral_door/wood(loc) + ..() + +/obj/machinery/door/cultify() icon_state = "null" density = 0 c_animation = new /atom/movable/overlay(src.loc) @@ -79,7 +82,7 @@ c_animation.icon_state = "breakdoor" flick("cultification",c_animation) spawn(10) - del(c_animation) + qdel(c_animation) qdel(src) /obj/machinery/door/firedoor/cultify() @@ -125,7 +128,7 @@ /obj/structure/mineral_door/wood/cultify() return -/obj/machinery/singularity/cultify() +/obj/singularity/cultify() var/dist = max((current_size - 2), 1) explosion(get_turf(src), dist, dist * 2, dist * 4) qdel(src) diff --git a/code/game/gamemodes/cult/hell_universe.dm b/code/game/gamemodes/cult/hell_universe.dm index 2a2499bb45..39f4402391 100644 --- a/code/game/gamemodes/cult/hell_universe.dm +++ b/code/game/gamemodes/cult/hell_universe.dm @@ -40,6 +40,7 @@ In short: // Apply changes when entering state /datum/universal_state/hell/OnEnter() set background = 1 + garbage_collector.garbage_collect = 0 escape_list = get_area_turfs(locate(/area/hallway/secondary/exit)) //Separated into separate procs for profiling diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 9f99945837..8a55a81165 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -74,7 +74,7 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," AI.client.images += blood_image rune_list.Add(src) - Del() + Destroy() for(var/mob/living/silicon/ai/AI in player_list) if(AI.client) AI.client.images -= blood_image @@ -92,11 +92,11 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," attackby(I as obj, user as mob) if(istype(I, /obj/item/weapon/book/tome) && iscultist(user)) user << "You retrace your steps, carefully undoing the lines of the rune." - del(src) + qdel(src) return else if(istype(I, /obj/item/weapon/nullrod)) user << "\blue You disrupt the vile magic with the deadening field of the null rod!" - del(src) + qdel(src) return return diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 6f64faca59..5599be4686 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -24,7 +24,7 @@ var/list/sacrificed = list() user << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric" if (istype(user, /mob/living)) user.take_overall_damage(5, 0) - del(src) + qdel(src) if(allrunesloc && index != 0) if(istype(src,/obj/effect/rune)) user.say("Sas[pick("'","`")]so c'arta forbici!")//Only you can stop auto-muting @@ -61,7 +61,7 @@ var/list/sacrificed = list() user << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric" if (istype(user, /mob/living)) user.take_overall_damage(5, 0) - del(src) + qdel(src) for(var/mob/living/carbon/C in orange(1,src)) if(iscultist(C) && !C.stat) culcount++ @@ -94,7 +94,7 @@ var/list/sacrificed = list() new /obj/item/weapon/book/tome(src.loc) else new /obj/item/weapon/book/tome(usr.loc) - del(src) + qdel(src) return @@ -190,7 +190,7 @@ var/list/sacrificed = list() cultists += 1 if(cultists.len >= 9) log_and_message_admins_many(cultists, "summoned Nar-sie.") - new /obj/machinery/singularity/narsie/large(src.loc) + new /obj/singularity/narsie/large(src.loc) return else return fizzle() @@ -209,7 +209,7 @@ var/list/sacrificed = list() T.hotspot_expose(700,125) var/rune = src // detaching the proc - in theory empulse(U, (range_red - 2), range_red) - del(rune) + qdel(rune) return /////////////////////////////////////////SIXTH RUNE @@ -369,7 +369,7 @@ var/list/sacrificed = list() usr.say("Kla[pick("'","`")]atu barada nikt'o!") for (var/mob/V in viewers(src)) V.show_message("\red The rune turns into gray dust, veiling the surrounding runes.", 3) - del(src) + qdel(src) else usr.whisper("Kla[pick("'","`")]atu barada nikt'o!") usr << "\red Your talisman turns into gray dust, veiling the surrounding runes." @@ -545,8 +545,8 @@ var/list/sacrificed = list() for (var/mob/V in viewers(src)) V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) usr.say("H'drak v[pick("'","`")]loso, mir'kanas verbot!") - del(imbued_from) - del(newtalisman) + qdel(imbued_from) + qdel(newtalisman) else return fizzle() @@ -574,26 +574,26 @@ var/list/sacrificed = list() // returns 0 if the rune is not used. returns 1 if the rune is used. communicate() . = 1 // Default output is 1. If the rune is deleted it will return 1 - var/input = sanitize(input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "")) + var/input = input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "")//sanitize() below, say() and whisper() have their own if(!input) if (istype(src)) fizzle() return 0 else return 0 - if(istype(src,/obj/effect/rune)) - usr.say("O bidai nabora se[pick("'","`")]sma!") - else - usr.whisper("O bidai nabora se[pick("'","`")]sma!") if(istype(src,/obj/effect/rune)) + usr.say("O bidai nabora se[pick("'","`")]sma!") usr.say("[input]") else + usr.whisper("O bidai nabora se[pick("'","`")]sma!") usr.whisper("[input]") + + input = sanitize(input) for(var/datum/mind/H in cult.current_antagonists) if (H.current) H.current << "\red \b [input]" - del(src) + qdel(src) return 1 /////////////////////////////////////////FIFTEENTH RUNE @@ -745,7 +745,7 @@ var/list/sacrificed = list() usr.say("Nikt[pick("'","`")]o barada kla'atu!") for (var/mob/V in viewers(src)) V.show_message("\red The rune turns into red dust, reveaing the surrounding runes.", 3) - del(src) + qdel(src) return if(istype(W,/obj/item/weapon/paper/talisman)) usr.whisper("Nikt[pick("'","`")]o barada kla'atu!") @@ -818,7 +818,7 @@ var/list/sacrificed = list() for(var/mob/living/carbon/C in users) user.take_overall_damage(dam, 0) C.say("Khari[pick("'","`")]d! Gual'te nikka!") - del(src) + qdel(src) return fizzle() /////////////////////////////////////////NINETEENTH RUNE @@ -858,7 +858,7 @@ var/list/sacrificed = list() user.visible_message("\red Rune disappears with a flash of red light, and in its place now a body lies.", \ "\red You are blinded by the flash of red light! After you're able to see again, you see that now instead of the rune there's a body.", \ "\red You hear a pop and smell ozone.") - del(src) + qdel(src) return fizzle() /////////////////////////////////////////TWENTIETH RUNES @@ -881,7 +881,7 @@ var/list/sacrificed = list() usr.say("Sti[pick("'","`")] kaliedir!") usr << "\red The world becomes quiet as the deafening rune dissipates into fine dust." admin_attacker_log_many_victims(usr, affected, "Used a deafen rune.", "Was victim of a deafen rune.", "used a deafen rune on") - del(src) + qdel(src) else return fizzle() else @@ -926,7 +926,7 @@ var/list/sacrificed = list() usr.say("Sti[pick("'","`")] kaliesin!") usr << "\red The rune flashes, blinding those who not follow the Nar-Sie, and dissipates into fine dust." admin_attacker_log_many_victims(usr, affected, "Used a blindness rune.", "Was victim of a blindness rune.", "used a blindness rune on") - del(src) + qdel(src) else return fizzle() else @@ -984,7 +984,7 @@ var/list/sacrificed = list() C.take_overall_damage(15, 0) admin_attacker_log_many_victims(usr, victims, "Used a blood boil rune.", "Was the victim of a blood boil rune.", "used a blood boil rune on") log_and_message_admins_many(cultists - usr, "assisted activating a blood boil rune.") - del(src) + qdel(src) else return fizzle() return @@ -1014,8 +1014,8 @@ var/list/sacrificed = list() M << "\red Blood suddenly ignites, burning you!" var/turf/T = get_turf(B) T.hotspot_expose(700,125) - del(B) - del(src) + qdel(B) + qdel(src) ////////// Rune 24 (counting burningblood, which kinda doesnt work yet.) @@ -1038,7 +1038,7 @@ var/list/sacrificed = list() S.Weaken(5) S.show_message("\red BZZZT... The rune has exploded in a bright flash.", 3) admin_attack_log(usr, S, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on") - del(src) + qdel(src) else ///When invoked as talisman, stun and mute the target mob. usr.say("Dream sign ''Evil sealing talisman'[pick("'","`")]!") var/obj/item/weapon/nullrod/N = locate() in T @@ -1081,5 +1081,5 @@ var/list/sacrificed = list() //the below calls update_icons() at the end, which will update overlay icons by using the (now updated) cache user.put_in_hands(new /obj/item/weapon/melee/cultblade(user)) //put in hands or on floor - del(src) + qdel(src) return diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index df5b9a4965..d2b881d891 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -35,7 +35,7 @@ user.take_organ_damage(5, 0) if(src && src.imbue!="supply" && src.imbue!="runestun") if(delete) - del(src) + qdel(src) return else user << "You see strange symbols on the paper. Are they supposed to mean something?" @@ -47,7 +47,7 @@ if(imbue == "runestun") user.take_organ_damage(5, 0) call(/obj/effect/rune/proc/runestun)(T) - del(src) + qdel(src) else ..() ///If its some other talisman, use the generic attack code, is this supposed to work this way? else @@ -56,7 +56,7 @@ proc/supply(var/key) if (!src.uses) - del(src) + qdel(src) return var/dat = "There are [src.uses] bloody runes on the parchment.
" diff --git a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm index 139045291f..305205c6a0 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm @@ -49,7 +49,8 @@ for(var/atom/movable/A in T) if(A) if(istype(A,/mob/living)) - del(A) + qdel(A) + continue else if(istype(A,/mob)) // Observers, AI cameras. continue qdel(A) @@ -114,4 +115,4 @@ if(istype(user,/mob/dead/observer)) return - del(user) + qdel(user) diff --git a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm index 9d3f12b021..62c8b1aa44 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm @@ -1,6 +1,6 @@ /*** EXIT PORTAL ***/ -/obj/machinery/singularity/narsie/large/exit +/obj/singularity/narsie/large/exit name = "Bluespace Rift" desc = "NO TIME TO EXPLAIN, JUMP IN" icon = 'icons/obj/rift.dmi' @@ -14,23 +14,23 @@ consume_range = 6 -/obj/machinery/singularity/narsie/large/exit/New() +/obj/singularity/narsie/large/exit/New() ..() processing_objects.Add(src) -/obj/machinery/singularity/narsie/large/exit/update_icon() +/obj/singularity/narsie/large/exit/update_icon() overlays = 0 -/obj/machinery/singularity/narsie/large/exit/process() +/obj/singularity/narsie/large/exit/process() for(var/mob/M in player_list) if(M.client) M.see_rift(src) eat() -/obj/machinery/singularity/narsie/large/exit/acquire(var/mob/food) +/obj/singularity/narsie/large/exit/acquire(var/mob/food) return -/obj/machinery/singularity/narsie/large/exit/consume(const/atom/A) +/obj/singularity/narsie/large/exit/consume(const/atom/A) if(!(A.singuloCanEat())) return 0 @@ -62,7 +62,7 @@ //thou shall always be able to see the rift var/image/riftimage = null -/mob/proc/see_rift(var/obj/machinery/singularity/narsie/large/exit/R) +/mob/proc/see_rift(var/obj/singularity/narsie/large/exit/R) if((R.z == src.z) && (get_dist(R,src) <= (R.consume_range+10)) && !(R in view(src))) if(!riftimage) riftimage = image('icons/obj/rift.dmi',src.loc,"rift",LIGHTING_LAYER+2,1) @@ -78,4 +78,4 @@ else if(riftimage) - del(riftimage) + qdel(riftimage) diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm index 1b5ceb87e8..23729763a5 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm @@ -33,6 +33,7 @@ // Apply changes when entering state /datum/universal_state/supermatter_cascade/OnEnter() set background = 1 + garbage_collector.garbage_collect = 0 world << "You are blinded by a brilliant flash of energy." world << sound('sound/effects/cascade.ogg') @@ -54,7 +55,7 @@ cult.allow_narsie = 0 PlayerSet() - new /obj/machinery/singularity/narsie/large/exit(pick(endgame_exits)) + new /obj/singularity/narsie/large/exit(pick(endgame_exits)) spawn(rand(30,60) SECONDS) var/txt = {" There's been a galaxy-wide electromagnetic pulse. All of our systems are heavily damaged and many personnel are dead or dying. We are seeing increasing indications of the universe itself beginning to unravel. diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index feed6092e2..d49247263f 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -49,7 +49,7 @@ var/turf/T = pick(blobstart) var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 ) spawn(rand(50, 300)) - del(bh) + qdel(bh) /* if(3) //Leaving the code in so someone can try and delag it, but this event can no longer occur randomly, per SoS's request. --NEO command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert") @@ -71,7 +71,7 @@ P.icon_state = "anom" P.name = "wormhole" spawn(rand(300,600)) - del(P) + qdel(P) */ if(3) if((world.time/10)>=3600 && config.ninjas_allowed && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. diff --git a/code/game/gamemodes/events/PortalStorm.dm b/code/game/gamemodes/events/PortalStorm.dm index 890755d6b8..6144f3305b 100644 --- a/code/game/gamemodes/events/PortalStorm.dm +++ b/code/game/gamemodes/events/PortalStorm.dm @@ -1,26 +1,26 @@ -/datum/event/portalstorm - - Announce() - command_alert("Subspace disruption detected around the vessel", "Anomaly Alert") - LongTerm() - - var/list/turfs = list( ) - var/turf/picked - - for(var/turf/T in world) - if(T.z < 5 && istype(T,/turf/simulated/floor)) - turfs += T - - for(var/turf/T in world) - if(prob(10) && T.z < 5 && istype(T,/turf/simulated/floor)) - spawn(50+rand(0,3000)) - picked = pick(turfs) - var/obj/portal/P = new /obj/portal( T ) - P.target = picked - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.name = "wormhole" - spawn(rand(100,150)) - del(P) \ No newline at end of file +/datum/event/portalstorm + + Announce() + command_alert("Subspace disruption detected around the vessel", "Anomaly Alert") + LongTerm() + + var/list/turfs = list( ) + var/turf/picked + + for(var/turf/T in world) + if(T.z < 5 && istype(T,/turf/simulated/floor)) + turfs += T + + for(var/turf/T in world) + if(prob(10) && T.z < 5 && istype(T,/turf/simulated/floor)) + spawn(50+rand(0,3000)) + picked = pick(turfs) + var/obj/portal/P = new /obj/portal( T ) + P.target = picked + P.creator = null + P.icon = 'icons/obj/objects.dmi' + P.failchance = 0 + P.icon_state = "anom" + P.name = "wormhole" + spawn(rand(100,150)) + qdel(P) diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/gamemodes/events/black_hole.dm index 6ff7babbeb..60ab8a692f 100644 --- a/code/game/gamemodes/events/black_hole.dm +++ b/code/game/gamemodes/events/black_hole.dm @@ -1,88 +1,88 @@ -/obj/effect/bhole - name = "black hole" - icon = 'icons/obj/objects.dmi' - desc = "FUCK FUCK FUCK AAAHHH" - icon_state = "bhole3" - opacity = 1 - unacidable = 1 - density = 0 - anchored = 1 - -/obj/effect/bhole/New() - spawn(4) - controller() - -/obj/effect/bhole/proc/controller() - while(src) - - if(!isturf(loc)) - del(src) - return - - //DESTROYING STUFF AT THE EPICENTER - for(var/mob/living/M in orange(1,src)) - del(M) - for(var/obj/O in orange(1,src)) - del(O) - for(var/turf/simulated/ST in orange(1,src)) - ST.ChangeTurf(/turf/space) - - sleep(6) - grav(10, 4, 10, 0 ) - sleep(6) - grav( 8, 4, 10, 0 ) - sleep(6) - grav( 9, 4, 10, 0 ) - sleep(6) - grav( 7, 3, 40, 1 ) - sleep(6) - grav( 5, 3, 40, 1 ) - sleep(6) - grav( 6, 3, 40, 1 ) - sleep(6) - grav( 4, 2, 50, 6 ) - sleep(6) - grav( 3, 2, 50, 6 ) - sleep(6) - grav( 2, 2, 75,25 ) - sleep(6) - - - - //MOVEMENT - if( prob(50) ) - src.anchored = 0 - step(src,pick(alldirs)) - src.anchored = 1 - -/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance) - if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen - del(src) - return - for(var/t = -r, t < r, t++) - affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance) - return - -/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance) - //Get turf at coordinate - var/turf/T = locate(x, y, z) - if(isnull(T)) return - - //Pulling and/or ex_act-ing movable atoms in that turf - if( prob(pull_chance) ) - for(var/obj/O in T.contents) - if(O.anchored) - O.ex_act(ex_act_force) - else - step_towards(O,src) - for(var/mob/living/M in T.contents) - step_towards(M,src) - - //Destroying the turf - if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) ) - var/turf/simulated/ST = T - ST.ChangeTurf(/turf/space) +/obj/effect/bhole + name = "black hole" + icon = 'icons/obj/objects.dmi' + desc = "FUCK FUCK FUCK AAAHHH" + icon_state = "bhole3" + opacity = 1 + unacidable = 1 + density = 0 + anchored = 1 + +/obj/effect/bhole/New() + spawn(4) + controller() + +/obj/effect/bhole/proc/controller() + while(src) + + if(!isturf(loc)) + qdel(src) + return + + //DESTROYING STUFF AT THE EPICENTER + for(var/mob/living/M in orange(1,src)) + qdel(M) + for(var/obj/O in orange(1,src)) + qdel(O) + for(var/turf/simulated/ST in orange(1,src)) + ST.ChangeTurf(/turf/space) + + sleep(6) + grav(10, 4, 10, 0 ) + sleep(6) + grav( 8, 4, 10, 0 ) + sleep(6) + grav( 9, 4, 10, 0 ) + sleep(6) + grav( 7, 3, 40, 1 ) + sleep(6) + grav( 5, 3, 40, 1 ) + sleep(6) + grav( 6, 3, 40, 1 ) + sleep(6) + grav( 4, 2, 50, 6 ) + sleep(6) + grav( 3, 2, 50, 6 ) + sleep(6) + grav( 2, 2, 75,25 ) + sleep(6) + + + + //MOVEMENT + if( prob(50) ) + src.anchored = 0 + step(src,pick(alldirs)) + src.anchored = 1 + +/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance) + if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen + qdel(src) + return + for(var/t = -r, t < r, t++) + affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance) + affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance) + affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance) + affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance) + return + +/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance) + //Get turf at coordinate + var/turf/T = locate(x, y, z) + if(isnull(T)) return + + //Pulling and/or ex_act-ing movable atoms in that turf + if( prob(pull_chance) ) + for(var/obj/O in T.contents) + if(O.anchored) + O.ex_act(ex_act_force) + else + step_towards(O,src) + for(var/mob/living/M in T.contents) + step_towards(M,src) + + //Destroying the turf + if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) ) + var/turf/simulated/ST = T + ST.ChangeTurf(/turf/space) return \ No newline at end of file diff --git a/code/game/gamemodes/events/clang.dm b/code/game/gamemodes/events/clang.dm index 7f4f6f7020..74fb9ee507 100644 --- a/code/game/gamemodes/events/clang.dm +++ b/code/game/gamemodes/events/clang.dm @@ -36,7 +36,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 if(clong.density || prob(10)) clong.meteorhit(src) else - del(src) + qdel(src) if(clong && prob(25)) src.loc = clong.loc @@ -81,7 +81,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 if (isNotStationLevel(immrod.z)) immrod.z = pick(config.station_levels) if(immrod.loc == end) - del(immrod) + qdel(immrod) sleep(10) for(var/obj/effect/immovablerod/imm in world) return diff --git a/code/game/gamemodes/events/dust.dm b/code/game/gamemodes/events/dust.dm index 2e8b3b1328..4e064d8be6 100644 --- a/code/game/gamemodes/events/dust.dm +++ b/code/game/gamemodes/events/dust.dm @@ -37,7 +37,7 @@ The "dust" will damage the hull of the station causin minor hull breaches. density = 1 anchored = 1 var/strength = 2 //ex_act severity number - var/life = 2 //how many things we hit before del(src) + var/life = 2 //how many things we hit before qdel(src) weak strength = 3 @@ -107,8 +107,7 @@ The "dust" will damage the hull of the station causin minor hull breaches. life-- if(life <= 0) walk(src,0) - spawn(1) - del(src) + qdel(src) return 0 return @@ -119,5 +118,5 @@ The "dust" will damage the hull of the station causin minor hull breaches. ex_act(severity) - del(src) + qdel(src) return diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm index 7ca6678902..9c68ab879e 100644 --- a/code/game/gamemodes/events/holidays/Christmas.dm +++ b/code/game/gamemodes/events/holidays/Christmas.dm @@ -14,7 +14,7 @@ evil_tree.icon_living = evil_tree.icon_state evil_tree.icon_dead = evil_tree.icon_state evil_tree.icon_gib = evil_tree.icon_state - del(xmas) + qdel(xmas) /obj/item/weapon/toy/xmas_cracker name = "xmas cracker" diff --git a/code/game/gamemodes/events/wormholes.dm b/code/game/gamemodes/events/wormholes.dm index 9a8066887b..a7830a2cb3 100644 --- a/code/game/gamemodes/events/wormholes.dm +++ b/code/game/gamemodes/events/wormholes.dm @@ -59,4 +59,4 @@ P.icon_state = "anom" P.name = "wormhole" spawn(rand(300,600)) - del(P) \ No newline at end of file + qdel(P) \ No newline at end of file diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 8ad65194d1..f67bd7f1d0 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -135,7 +135,7 @@ var/global/datum/controller/gameticker/ticker for(var/obj/effect/landmark/start/S in landmarks_list) //Deleting Startpoints but we need the ai point to AI-ize people later if (S.name != "AI") - del(S) + qdel(S) world << "Enjoy the game!" world << sound('sound/AI/welcome.ogg') // Skie //Holiday Round-start stuff ~Carn @@ -265,8 +265,8 @@ var/global/datum/controller/gameticker/ticker //Otherwise if its a verb it will continue on afterwards. sleep(300) - if(cinematic) del(cinematic) //end the cinematic - if(temp_buckle) del(temp_buckle) //release everybody + if(cinematic) qdel(cinematic) //end the cinematic + if(temp_buckle) qdel(temp_buckle) //release everybody return @@ -280,7 +280,7 @@ var/global/datum/controller/gameticker/ticker continue else player.create_character() - del(player) + qdel(player) proc/collect_minds() diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index f1de61f286..7e1ba6d368 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -26,6 +26,6 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' var/area/skipjack = locate(/area/shuttle/skipjack/station) for (var/mob/living/M in skipjack.contents) //maybe send the player a message that they've gone home/been kidnapped? Someone responsible for vox lore should write that. - del(M) + qdel(M) for (var/obj/O in skipjack.contents) - del(O) //no hiding in lockers or anything \ No newline at end of file + qdel(O) //no hiding in lockers or anything \ No newline at end of file diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index c523b469f3..850529661c 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -89,7 +89,7 @@ rcd light flash thingy on matter drain V.show_message("\blue You hear a loud electrical buzzing sound!", 2) spawn(50) explosion(get_turf(M), 0,1,2,3) - del(M) + qdel(M) else usr << "Out of uses." else usr << "That's not a machine." diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm index 2629b36013..2aa512264d 100644 --- a/code/game/gamemodes/meme/meme.dm +++ b/code/game/gamemodes/meme/meme.dm @@ -93,7 +93,7 @@ M.enter_host(first_host.current) forge_meme_objectives(meme, first_host) - del original + qdel(original) log_admin("Created [memes.len] memes.") diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 1edb533daa..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) @@ -111,14 +115,14 @@ !istype(A,/obj/machinery/field_generator) && \ prob(detonation_chance)) explosion(loc, power, power + power_step, power + power_step * 2, power + power_step * 3, 0) - del(src) + qdel(src) return /obj/effect/meteor/ex_act(severity) if (severity < 4) - del(src) + qdel(src) return /obj/effect/meteor/big @@ -136,7 +140,7 @@ if(!istype(A,/obj/machinery/power/emitter) && \ !istype(A,/obj/machinery/field_generator)) if(--src.hits <= 0) - del(src) //Dont blow up singularity containment if we get stuck there. + qdel(src) //Dont blow up singularity containment if we get stuck there. if (A) for(var/mob/M in player_list) @@ -150,11 +154,11 @@ if (--src.hits <= 0) if(prob(detonation_chance) && !istype(A, /obj/structure/grille)) explosion(loc, power, power + power_step, power + power_step * 2, power + power_step * 3, 0) - del(src) + qdel(src) return /obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/pickaxe)) - del(src) + 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/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 27236dd8fb..076c0afbf3 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -13,7 +13,7 @@ datum/objective if(text) explanation_text = text - Del() + Destroy() all_objectives -= src ..() @@ -541,7 +541,7 @@ datum/objective/steal if (!custom_target) return var/tmp_obj = new custom_target var/custom_name = tmp_obj:name - del(tmp_obj) + qdel(tmp_obj) custom_name = sanitize(input("Enter target name:", "Objective target", custom_name) as text|null) if (!custom_name) return target_name = custom_name @@ -916,7 +916,7 @@ datum/objective/heist/salvage explanation_text = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it. The convert rune is join blood self." /datum/objective/cult/eldergod/check_completion() - return (locate(/obj/machinery/singularity/narsie/large) in machines) + return (locate(/obj/singularity/narsie/large) in machines) /datum/objective/cult/sacrifice explanation_text = "Conduct a ritual sacrifice for the glory of Nar-Sie." diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 439befdc63..ad2abb2236 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -120,7 +120,7 @@ datum/hSB if("hsbtoolbox") var/obj/item/weapon/storage/hsb = new/obj/item/weapon/storage/toolbox/mechanical for(var/obj/item/device/radio/T in hsb) - del(T) + qdel(T) new/obj/item/weapon/crowbar (hsb) hsb.loc = usr.loc if("hsbmedkit") diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index 501335a19f..2981596645 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -151,7 +151,7 @@ var/mob/living/carbon/human/M = new /mob/living/carbon/human(A.loc) M.real_name = "Corpse" M.death() - del(A) + qdel(A) continue if (A.name == "Corpse-Engineer") var/mob/living/carbon/human/M = new /mob/living/carbon/human(A.loc) @@ -173,7 +173,7 @@ else if (prob(50)) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/welding(M), slot_head) - del(A) + qdel(A) continue if (A.name == "Corpse-Engineer-Space") var/mob/living/carbon/human/M = new /mob/living/carbon/human(A.loc) @@ -196,7 +196,7 @@ M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/welding(M), slot_head) else M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space(M), slot_head) - del(A) + qdel(A) continue if (A.name == "Corpse-Engineer-Chief") var/mob/living/carbon/human/M = new /mob/living/carbon/human(A.loc) @@ -217,7 +217,7 @@ else if (prob(50)) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/welding(M), slot_head) - del(A) + qdel(A) continue if (A.name == "Corpse-Syndicate") var/mob/living/carbon/human/M = new /mob/living/carbon/human(A.loc) @@ -239,6 +239,6 @@ else M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(M), slot_head) - del(A) + qdel(A) continue */ diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index da346f9fce..4d16b7ae14 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -10,7 +10,7 @@ /var/const/access_tox_storage = 8 /var/const/access_genetics = 9 /var/const/access_engine = 10 -/var/const/access_engine_equip= 11 +/var/const/access_engine_equip = 11 /var/const/access_maint_tunnels = 12 /var/const/access_external_airlocks = 13 /var/const/access_emergency_storage = 14 diff --git a/code/game/jobs/jobprocs.dm b/code/game/jobs/jobprocs.dm index 60b8c6a99d..2a012872bf 100644 --- a/code/game/jobs/jobprocs.dm +++ b/code/game/jobs/jobprocs.dm @@ -44,7 +44,7 @@ timeleft -= (world.time - last_process) if(timeleft <= 0) processing_objects.Remove(src) - del(src) + qdel(src) /////////////////////////////// diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index 37cc168d57..19399ce739 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -1,55 +1,55 @@ -/obj/machinery/bluespace_beacon - - icon = 'icons/obj/objects.dmi' - icon_state = "floor_beaconf" - name = "Bluespace Gigabeacon" - desc = "A device that draws power from bluespace and creates a permanent tracking beacon." - level = 1 // underfloor - layer = 2.5 - anchored = 1 - use_power = 1 - idle_power_usage = 0 - var/obj/item/device/radio/beacon/Beacon - - New() - ..() - var/turf/T = loc - Beacon = new /obj/item/device/radio/beacon - Beacon.invisibility = INVISIBILITY_MAXIMUM - Beacon.loc = T - - hide(T.intact) - - Del() - if(Beacon) - del(Beacon) - ..() - - // update the invisibility and icon - hide(var/intact) - invisibility = intact ? 101 : 0 - updateicon() - - // update the icon_state - proc/updateicon() - var/state="floor_beacon" - - if(invisibility) - icon_state = "[state]f" - - else - icon_state = "[state]" - - process() - if(!Beacon) - var/turf/T = loc - Beacon = new /obj/item/device/radio/beacon - Beacon.invisibility = INVISIBILITY_MAXIMUM - Beacon.loc = T - if(Beacon) - if(Beacon.loc != loc) - Beacon.loc = loc - - updateicon() - - +/obj/machinery/bluespace_beacon + + icon = 'icons/obj/objects.dmi' + icon_state = "floor_beaconf" + name = "Bluespace Gigabeacon" + desc = "A device that draws power from bluespace and creates a permanent tracking beacon." + level = 1 // underfloor + layer = 2.5 + anchored = 1 + use_power = 1 + idle_power_usage = 0 + var/obj/item/device/radio/beacon/Beacon + + New() + ..() + var/turf/T = loc + Beacon = new /obj/item/device/radio/beacon + Beacon.invisibility = INVISIBILITY_MAXIMUM + Beacon.loc = T + + hide(T.intact) + + Destroy() + if(Beacon) + qdel(Beacon) + ..() + + // update the invisibility and icon + hide(var/intact) + invisibility = intact ? 101 : 0 + updateicon() + + // update the icon_state + proc/updateicon() + var/state="floor_beacon" + + if(invisibility) + icon_state = "[state]f" + + else + icon_state = "[state]" + + process() + if(!Beacon) + var/turf/T = loc + Beacon = new /obj/item/device/radio/beacon + Beacon.invisibility = INVISIBILITY_MAXIMUM + Beacon.loc = T + if(Beacon) + if(Beacon.loc != loc) + Beacon.loc = loc + + updateicon() + + diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm new file mode 100644 index 0000000000..9bad67df7d --- /dev/null +++ b/code/game/machinery/CableLayer.dm @@ -0,0 +1,126 @@ +/obj/machinery/cablelayer + name = "automatic cable layer" + + icon = 'icons/obj/stationobjs.dmi' + icon_state = "pipe_d" + density = 1 + var/obj/structure/cable/last_piece + var/obj/item/stack/cable_coil/cable + var/max_cable = 100 + var/on = 0 + +/obj/machinery/cablelayer/New() + cable = new(src) + cable.amount = 100 + ..() + +/obj/machinery/cablelayer/Move(new_turf,M_Dir) + ..() + layCable(new_turf,M_Dir) + +/obj/machinery/cablelayer/attack_hand(mob/user as mob) + if(!cable&&!on) + user << "\The [src] don't work with no cable." + return + on=!on + user.visible_message("\The [src] [!on?"dea":"a"]ctivated.", "[user] [!on?"dea":"a"]ctivated \the [src].") + return + +/obj/machinery/cablelayer/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/stack/cable_coil)) + + var/result = load_cable(O) + if(!result) + user << "Reel is full." + else + user << "[result] meters of cable successfully loaded." + return + + if(istype(O, /obj/item/weapon/screwdriver)) + if(cable && cable.amount) + var/m = round(input(usr,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) + m = min(m, cable.amount) + m = min(m, 30) + if(m) + use_cable(m) + var/obj/item/stack/cable_coil/CC = new (get_turf(src)) + CC.amount = m + else + usr << "There's no more cable on the reel." + +/obj/machinery/cablelayer/examine(mob/user) + ..() + user << "\The [src] has [cable.amount] meter\s." + +/obj/machinery/cablelayer/proc/load_cable(var/obj/item/stack/cable_coil/CC) + if(istype(CC) && CC.amount) + var/cur_amount = cable? cable.amount : 0 + var/to_load = max(max_cable - cur_amount,0) + if(to_load) + to_load = min(CC.amount, to_load) + if(!cable) + cable = new(src) + cable.amount = 0 + cable.amount += to_load + CC.use(to_load) + return to_load + else + return 0 + return + +/obj/machinery/cablelayer/proc/use_cable(amount) + if(!cable || cable.amount<1) + visible_message("Cable depleted, [src] deactivated.") + return +/* if(cable.amount < amount) + visible_message("No enough cable to finish the task.") + return*/ + cable.use(amount) + return 1 + +/obj/machinery/cablelayer/proc/reset() + last_piece = null + +/obj/machinery/cablelayer/proc/dismantleFloor(var/turf/new_turf) + if(istype(new_turf, /turf/simulated/floor)) + var/turf/simulated/floor/T = new_turf + if(!T.is_plating()) + if(!T.broken && !T.burnt) + new T.floor_type(T) + T.make_plating() + return !new_turf.intact + +/obj/machinery/cablelayer/proc/layCable(var/turf/new_turf,var/M_Dir) + if(!on) + return reset() + else + dismantleFloor(new_turf) + if(!istype(new_turf) || !dismantleFloor(new_turf)) + return reset() + var/fdirn = turn(M_Dir,180) + for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already + if(LC.d1 == fdirn || LC.d2 == fdirn) + return reset() + if(!use_cable(1)) + return reset() + var/obj/structure/cable/NC = new(new_turf) + NC.cableColor("red") + NC.d1 = 0 + NC.d2 = fdirn + NC.updateicon() + + var/datum/powernet/PN + if(last_piece && last_piece.d2 != M_Dir) + last_piece.d1 = min(last_piece.d2, M_Dir) + last_piece.d2 = max(last_piece.d2, M_Dir) + last_piece.updateicon() + PN = last_piece.powernet + + if(!PN) + PN = new() + PN.add_cable(NC) + NC.mergeConnectedNetworks(NC.d2) + + //NC.mergeConnectedNetworksOnTurf() + last_piece = NC + return 1 diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 6e1ecdf4ca..a03289c78b 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -28,12 +28,12 @@ switch(severity) if(1.0) //SN src = null - del(src) + qdel(src) return if(2.0) if (prob(50)) //SN src = null - del(src) + qdel(src) return if(3.0) if (prob(25)) @@ -43,14 +43,14 @@ /obj/machinery/optable/blob_act() if(prob(75)) - del(src) + qdel(src) /obj/machinery/optable/attack_hand(mob/user as mob) if (HULK in usr.mutations) usr << text("\blue You destroy the table.") visible_message("\red [usr] destroys the operating table!") src.density = 0 - del(src) + qdel(src) return /obj/machinery/optable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) @@ -130,7 +130,7 @@ var/obj/item/weapon/grab/G = W if(iscarbon(G.affecting) && check_table(G.affecting)) take_victim(G.affecting,usr) - del(W) + qdel(W) return /obj/machinery/optable/proc/check_table(mob/living/carbon/patient as mob) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 20c16dcb9c..0e92db1511 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -25,12 +25,12 @@ switch(severity) if(1.0) //SN src = null - del(src) + qdel(src) return if(2.0) if (prob(50)) //SN src = null - del(src) + qdel(src) return else return @@ -204,7 +204,7 @@ for(var/atom/movable/A as mob|obj in src) A.loc = src.loc A.blob_act() - del(src) + qdel(src) return attackby(var/obj/item/weapon/G as obj, var/mob/user as mob) @@ -252,7 +252,7 @@ icon_state = "sleeper_1-r" src.add_fingerprint(user) - del(G) + qdel(G) return return @@ -265,21 +265,21 @@ for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) - del(src) + qdel(src) return if(2.0) if(prob(50)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) - del(src) + qdel(src) return if(3.0) if(prob(25)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) - del(src) + qdel(src) return return emp_act(severity) @@ -435,7 +435,7 @@ icon_state = "sleeper_1-r" for(var/obj/O in src) - del(O) + qdel(O) src.add_fingerprint(usr) return return diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 51e1ec7510..8c6be59f71 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -56,7 +56,7 @@ src.icon_state = "body_scanner_1" for(var/obj/O in src) //O = null - del(O) + qdel(O) //Foreach goto(124) src.add_fingerprint(usr) return @@ -98,7 +98,7 @@ //Foreach goto(154) src.add_fingerprint(user) //G = null - del(G) + qdel(G) return /obj/machinery/bodyscanner/ex_act(severity) @@ -109,7 +109,7 @@ ex_act(severity) //Foreach goto(35) //SN src = null - del(src) + qdel(src) return if(2.0) if (prob(50)) @@ -118,7 +118,7 @@ ex_act(severity) //Foreach goto(108) //SN src = null - del(src) + qdel(src) return if(3.0) if (prob(25)) @@ -127,7 +127,7 @@ ex_act(severity) //Foreach goto(181) //SN src = null - del(src) + qdel(src) return else return @@ -136,19 +136,19 @@ if(prob(50)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc - del(src) + qdel(src) /obj/machinery/body_scanconsole/ex_act(severity) switch(severity) if(1.0) //SN src = null - del(src) + qdel(src) return if(2.0) if (prob(50)) //SN src = null - del(src) + qdel(src) return else return @@ -156,7 +156,7 @@ /obj/machinery/body_scanconsole/blob_act() if(prob(50)) - del(src) + qdel(src) /obj/machinery/body_scanconsole/power_change() ..() diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index f6d2820d5b..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) ..() @@ -831,7 +835,7 @@ if(0) if(istype(W, /obj/item/weapon/airalarm_electronics)) user << "You insert the circuit!" - del(W) + qdel(W) buildstage = 1 update_icon() return @@ -841,7 +845,7 @@ var/obj/item/alarm_frame/frame = new /obj/item/alarm_frame() frame.loc = user.loc playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - del(src) + qdel(src) return ..() @@ -884,7 +888,7 @@ Code shamelessly copied from apc_frame /obj/item/alarm_frame/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/wrench)) new /obj/item/stack/sheet/metal( get_turf(src.loc), 2 ) - del(src) + qdel(src) return ..() @@ -910,7 +914,7 @@ Code shamelessly copied from apc_frame return new /obj/machinery/alarm(loc, ndir, 1) - del(src) + qdel(src) /* FIRE ALARM @@ -1015,7 +1019,7 @@ FIRE ALARM if(0) if(istype(W, /obj/item/weapon/firealarm_electronics)) user << "You insert the circuit!" - del(W) + qdel(W) buildstage = 1 update_icon() @@ -1024,7 +1028,7 @@ FIRE ALARM var/obj/item/firealarm_frame/frame = new /obj/item/firealarm_frame() frame.loc = user.loc playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - del(src) + qdel(src) return src.alarm() @@ -1206,7 +1210,7 @@ Code shamelessly copied from apc_frame /obj/item/firealarm_frame/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/wrench)) new /obj/item/stack/sheet/metal( get_turf(src.loc), 2 ) - del(src) + qdel(src) return ..() @@ -1233,7 +1237,7 @@ Code shamelessly copied from apc_frame new /obj/machinery/firealarm(loc, ndir, 1) - del(src) + qdel(src) /obj/machinery/partyalarm 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/meter.dm b/code/game/machinery/atmoalter/meter.dm index ad7d55c2aa..095aec4a24 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -104,7 +104,7 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe_meter(src.loc) - del(src) + qdel(src) // TURF METER - REPORTS A TILE'S AIR CONTENTS diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 9308bae64e..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() @@ -35,8 +39,8 @@ else update_icon() -/obj/machinery/portable_atmospherics/Del() - del(air_contents) +/obj/machinery/portable_atmospherics/Destroy() + qdel(air_contents) ..() diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index d537d113f9..d60404d5de 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -190,7 +190,7 @@ stack.use(max(1, round(total_used/mass_per_sheet))) // Always use at least 1 to prevent infinite materials. else user.remove_from_mob(O) - del(O) + qdel(O) updateUsrDialog() return diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index 68bf61b7f1..3b323cd69f 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -16,7 +16,7 @@ recipe.resources = list() for(var/material in I.matter) recipe.resources[material] = I.matter[material]*1.25 // More expensive to produce than they are to recycle. - del(I) + qdel(I) /datum/autolathe/recipe var/name = "object" @@ -42,6 +42,11 @@ path = /obj/item/weapon/extinguisher category = "General" +/datum/autolathe/recipe/jar + name = "jar" + path = /obj/item/glass_jar + category = "General" + /datum/autolathe/recipe/crowbar name = "crowbar" path = /obj/item/weapon/crowbar diff --git a/code/game/machinery/bees_items.dm b/code/game/machinery/bees_items.dm index 486b46d33c..05f9231f8a 100644 --- a/code/game/machinery/bees_items.dm +++ b/code/game/machinery/bees_items.dm @@ -20,7 +20,7 @@ for(var/mob/living/simple_animal/bee/B in T) if(B.feral < 0) caught_bees += B.strength - del(B) + qdel(B) user.visible_message("\blue [user] nets some bees.","\blue You net up some of the becalmed bees.") else user.visible_message("\red [user] swings at some bees, they don't seem to like it.","\red You swing at some bees, they don't seem to like it.") diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 87399b597a..61ed92d58e 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -151,7 +151,7 @@ if(I.reagents.get_reagent_amount("nutriment") < 0.1) points += 1 else points += I.reagents.get_reagent_amount("nutriment") * 10 * eat_eff - del(I) + qdel(I) if(S) processing = 1 update_icon() diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index 48c0edb984..5a8b25bb84 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -70,7 +70,7 @@ stored_matter += 50 user.drop_item() user << "\The [src] processes \the [W]. Levels of stored biomass now: [stored_matter]" - del(W) + qdel(W) return // Steel for matter. else if(prints_prosthetics && istype(W, /obj/item/stack/sheet/metal)) @@ -78,7 +78,7 @@ stored_matter += M.amount * 10 user.drop_item() user << "\The [src] processes \the [W]. Levels of stored matter now: [stored_matter]" - del(W) + qdel(W) return else return..() \ No newline at end of file diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index f87ae33ee0..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 @@ -27,7 +26,7 @@ SetLuminosity(0) /obj/machinery/bot/proc/explode() - del(src) + qdel(src) /obj/machinery/bot/proc/healthcheck() if (src.health <= 0) @@ -117,7 +116,7 @@ /obj/machinery/bot/emp_act(severity) var/was_on = on stat |= EMPED - var/obj/effect/overlay/pulse2 = new/obj/effect/overlay ( src.loc ) + var/obj/effect/overlay/pulse2 = PoolOrNew(/obj/effect/overlay, src.loc ) pulse2.icon = 'icons/effects/effects.dmi' pulse2.icon_state = "empdisable" pulse2.name = "emp sparks" @@ -125,7 +124,7 @@ pulse2.set_dir(pick(cardinal)) spawn(10) - pulse2.delete() + qdel(pulse2) if (on) turn_off() spawn(severity*300) diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm new file mode 100644 index 0000000000..fb3fa34b6d --- /dev/null +++ b/code/game/machinery/bots/cleanbot.dm @@ -0,0 +1,367 @@ +//Cleanbot assembly +/obj/item/weapon/bucket_sensor + desc = "It's a bucket. With a sensor attached." + name = "proxy bucket" + icon = 'icons/obj/aibots.dmi' + icon_state = "bucket_proxy" + force = 3.0 + throwforce = 10.0 + throw_speed = 2 + throw_range = 5 + w_class = 3.0 + var/created_name = "Cleanbot" + + +//Cleanbot +/obj/machinery/bot/cleanbot + name = "Cleanbot" + desc = "A little cleaning robot, he looks so excited!" + icon = 'icons/obj/aibots.dmi' + icon_state = "cleanbot0" + layer = 5.0 + density = 0 + anchored = 0 + //weight = 1.0E7 + health = 25 + maxhealth = 25 + var/cleaning = 0 + var/screwloose = 0 + var/oddbutton = 0 + var/blood = 1 + var/list/target_types = list() + var/obj/effect/decal/cleanable/target + var/obj/effect/decal/cleanable/oldtarget + var/oldloc = null + req_access = list(access_janitor) + var/path[] = new() + var/patrol_path[] = null + var/beacon_freq = 1445 // navigation beacon frequency + var/closest_dist + var/closest_loc + var/failed_steps + var/should_patrol + var/next_dest + var/next_dest_loc + +/obj/machinery/bot/cleanbot/New() + ..() + src.get_targets() + src.icon_state = "cleanbot[src.on]" + + should_patrol = 1 + + src.botcard = new /obj/item/weapon/card/id(src) + src.botcard.access = list(access_janitor, access_maint_tunnels) + + src.locked = 0 // Start unlocked so roboticist can set them to patrol. + + 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() + . = ..() + src.icon_state = "cleanbot[src.on]" + src.updateUsrDialog() + +/obj/machinery/bot/cleanbot/turn_off() + ..() + if(!isnull(src.target)) + target.targeted_by = null + src.target = null + src.oldtarget = null + src.oldloc = null + src.icon_state = "cleanbot[src.on]" + src.path = new() + src.updateUsrDialog() + +/obj/machinery/bot/cleanbot/attack_hand(mob/user as mob) + . = ..() + if (.) + return + usr.set_machine(src) + interact(user) + +/obj/machinery/bot/cleanbot/interact(mob/user as mob) + var/dat + dat += text({" +Automatic Station Cleaner v1.0

+Status: []
+Behaviour controls are [src.locked ? "locked" : "unlocked"]
+Maintenance panel is [src.open ? "opened" : "closed"]"}, +text("[src.on ? "On" : "Off"]")) + if(!src.locked || issilicon(user)) + dat += text({"
Cleans Blood: []
"}, text("[src.blood ? "Yes" : "No"]")) + dat += text({"
Patrol station: []
"}, text("[src.should_patrol ? "Yes" : "No"]")) + // dat += text({"
Beacon frequency: []
"}, text("[src.beacon_freq]")) + if(src.open && !src.locked) + dat += text({" +Odd looking screw twiddled: []
+Weird button pressed: []"}, +text("[src.screwloose ? "Yes" : "No"]"), +text("[src.oddbutton ? "Yes" : "No"]")) + + user << browse("Cleaner v1.0 controls[dat]", "window=autocleaner") + onclose(user, "autocleaner") + return + +/obj/machinery/bot/cleanbot/Topic(href, href_list) + if(..()) + return + usr.set_machine(src) + src.add_fingerprint(usr) + switch(href_list["operation"]) + if("start") + if (src.on) + turn_off() + else + turn_on() + if("blood") + src.blood =!src.blood + src.get_targets() + src.updateUsrDialog() + if("patrol") + src.should_patrol =!src.should_patrol + src.patrol_path = null + src.updateUsrDialog() + if("freq") + var/freq = text2num(input("Select frequency for navigation beacons", "Frequnecy", num2text(beacon_freq / 10))) * 10 + if (freq > 0) + src.beacon_freq = freq + src.updateUsrDialog() + if("screw") + src.screwloose = !src.screwloose + usr << "You press the weird button." + src.updateUsrDialog() + +/obj/machinery/bot/cleanbot/attackby(obj/item/weapon/W, mob/user as mob) + if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) + if(src.allowed(usr) && !open && !emagged) + src.locked = !src.locked + user << "You [ src.locked ? "lock" : "unlock"] the [src] behaviour controls." + else + if(emagged) + user << "ERROR" + if(open) + user << "Please close the access panel before locking it." + else + user << "This [src] doesn't seem to respect your authority." + else + return ..() + +/obj/machinery/bot/cleanbot/Emag(mob/user as mob) + ..() + if(open && !locked) + if(user) user << "The [src] buzzes and beeps." + src.oddbutton = 1 + src.screwloose = 1 + +/obj/machinery/bot/cleanbot/process() + set background = 1 + + if(!src.on) + return + if(src.cleaning) + return + + if(!src.screwloose && !src.oddbutton && prob(5)) + visible_message("[src] makes an excited beeping booping sound!") + + if(src.screwloose && prob(5)) + if(istype(loc,/turf/simulated)) + var/turf/simulated/T = src.loc + if(T.wet < 1) + T.wet = 1 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") + T.overlays += T.wet_overlay + spawn(800) + if (istype(T) && T.wet < 2) + T.wet = 0 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + if(src.oddbutton && prob(5)) + visible_message("Something flies out of [src]. He seems to be acting oddly.") + var/obj/effect/decal/cleanable/blood/gibs/gib = new /obj/effect/decal/cleanable/blood/gibs(src.loc) + //gib.streak(list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) + src.oldtarget = gib + if(!src.target || src.target == null) + for (var/obj/effect/decal/cleanable/D in view(7,src)) + for(var/T in src.target_types) + if(isnull(D.targeted_by) && istype(D, T) && D != src.oldtarget) // If the mess isn't targeted (D.type == T || D.parent_type == T) + src.oldtarget = D // or if it is but the bot is gone. + src.target = D // and it's stuff we clean? Clean it. + D.targeted_by = src // Claim the mess we are targeting. + return + + if(!src.target || src.target == null) + if(src.loc != src.oldloc) + src.oldtarget = null + + if (!should_patrol) + return + + if (!patrol_path || patrol_path.len < 1) + var/datum/radio_frequency/frequency = radio_controller.return_frequency(beacon_freq) + + if(!frequency) return + + closest_dist = 9999 + closest_loc = null + next_dest_loc = null + + var/datum/signal/signal = new() + signal.source = src + signal.transmission_method = 1 + signal.data = list("findbeacon" = "patrol") + frequency.post_signal(src, signal, filter = RADIO_NAVBEACONS) + spawn(5) + if (!next_dest_loc) + next_dest_loc = closest_loc + if (next_dest_loc) + src.patrol_path = AStar(src.loc, next_dest_loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=null) + else + patrol_move() + + return + + if(target && path.len == 0) + spawn(0) + if(!src || !target) return + src.path = AStar(src.loc, src.target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id=botcard) + if (!path) path = list() + if(src.path.len == 0) + src.oldtarget = src.target + target.targeted_by = null + src.target = null + return + if(src.path.len > 0 && src.target && (src.target != null)) + step_to(src, src.path[1]) + src.path -= src.path[1] + else if(src.path.len == 1) + step_to(src, target) + + if(src.target && (src.target != null)) + patrol_path = null + if(src.loc == src.target.loc) + clean(src.target) + src.path = new() + src.target = null + return + + src.oldloc = src.loc + +/obj/machinery/bot/cleanbot/proc/patrol_move() + if (src.patrol_path.len <= 0) + return + + var/next = src.patrol_path[1] + src.patrol_path -= next + if (next == src.loc) + return + + var/moved = step_towards(src, next) + if (!moved) + failed_steps++ + if (failed_steps > 4) + patrol_path = null + next_dest = null + failed_steps = 0 + else + failed_steps = 0 + +/obj/machinery/bot/cleanbot/receive_signal(datum/signal/signal) + var/recv = signal.data["beacon"] + var/valid = signal.data["patrol"] + if(!recv || !valid) + return + + var/dist = get_dist(src, signal.source.loc) + if (dist < closest_dist && signal.source.loc != src.loc) + closest_dist = dist + closest_loc = signal.source.loc + next_dest = signal.data["next_patrol"] + + if (recv == next_dest) + next_dest_loc = signal.source.loc + next_dest = signal.data["next_patrol"] + +/obj/machinery/bot/cleanbot/proc/get_targets() + src.target_types = new/list() + + target_types += /obj/effect/decal/cleanable/blood/oil + target_types += /obj/effect/decal/cleanable/vomit + target_types += /obj/effect/decal/cleanable/crayon + target_types += /obj/effect/decal/cleanable/liquid_fuel + target_types += /obj/effect/decal/cleanable/mucus + target_types += /obj/effect/decal/cleanable/dirt + + if(src.blood) + target_types += /obj/effect/decal/cleanable/blood/ + +/obj/machinery/bot/cleanbot/proc/clean(var/obj/effect/decal/cleanable/target) + anchored = 1 + icon_state = "cleanbot-c" + visible_message("\red [src] begins to clean up the [target]") + cleaning = 1 + var/cleantime = 50 + if(istype(target,/obj/effect/decal/cleanable/dirt)) // Clean Dirt much faster + cleantime = 10 + spawn(cleantime) + if(istype(loc,/turf/simulated)) + var/turf/simulated/f = loc + f.dirt = 0 + cleaning = 0 + qdel(target) + icon_state = "cleanbot[on]" + anchored = 0 + target = null + +/obj/machinery/bot/cleanbot/explode() + src.on = 0 + src.visible_message("\red [src] blows apart!", 1) + var/turf/Tsec = get_turf(src) + + new /obj/item/weapon/reagent_containers/glass/bucket(Tsec) + + new /obj/item/device/assembly/prox_sensor(Tsec) + + if (prob(50)) + new /obj/item/robot_parts/l_arm(Tsec) + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + qdel(src) + return + +/obj/item/weapon/bucket_sensor/attackby(var/obj/item/W, mob/user as mob) + ..() + if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm)) + user.drop_item() + qdel(W) + var/turf/T = get_turf(src.loc) + var/obj/machinery/bot/cleanbot/A = new /obj/machinery/bot/cleanbot(T) + A.name = src.created_name + user << "You add the robot arm to the bucket and sensor assembly. Beep boop!" + user.drop_from_inventory(src) + qdel(src) + + else if (istype(W, /obj/item/weapon/pen)) + var/t = sanitizeSafe(input(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN) + if (!t) + return + if (!in_range(src, usr) && src.loc != usr) + return + src.created_name = t diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index bd39d2034c..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 @@ -876,4 +882,4 @@ new /obj/effect/decal/cleanable/blood/oil(src.loc) unload(0) - del(src) + qdel(src) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 06c77503fb..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)) @@ -136,7 +144,7 @@ assembly.loc = src.loc assembly.state = 1 new /obj/item/stack/cable_coil(src.loc, length=2) - del(src) + qdel(src) // OTHER else if (can_use() && (istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/device/pda)) && isliving(user)) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 0c133adc9b..0f82401218 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -235,7 +235,7 @@ user << "\The [src] processes \the [W]." biomass += 50 user.drop_item() - del(W) + qdel(W) return else if(istype(W, /obj/item/weapon/wrench)) if(locked && (anchored || occupant)) @@ -328,7 +328,7 @@ update_icon() occupant.ghostize() spawn(5) - del(occupant) + qdel(occupant) return /obj/machinery/clonepod/relaymove(mob/user as mob) @@ -348,21 +348,21 @@ for(var/atom/movable/A as mob|obj in src) A.loc = loc ex_act(severity) - del(src) + qdel(src) return if(2.0) if(prob(50)) for(var/atom/movable/A as mob|obj in src) A.loc = loc ex_act(severity) - del(src) + qdel(src) return if(3.0) if(prob(25)) for(var/atom/movable/A as mob|obj in src) A.loc = loc ex_act(severity) - del(src) + qdel(src) return else return diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 1368d19bb8..028f1ba307 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -30,7 +30,7 @@ if(!src || !WT.remove_fuel(0, user)) return user << "\blue You deconstruct the frame." new /obj/item/stack/sheet/plasteel( loc, 4) - del(src) + qdel(src) if(1) if(istype(P, /obj/item/weapon/wrench)) playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) @@ -178,7 +178,7 @@ if(A) //if there's no brain, the mob is deleted and a structure/AIcore is created A.rename_self("ai", 1) feedback_inc("cyborg_ais_created",1) - del(src) + qdel(src) /obj/structure/AIcore/deactivated name = "inactive AI" @@ -187,7 +187,7 @@ anchored = 1 state = 20//So it doesn't interact based on the above. Not really necessary. -/obj/structure/AIcore/deactivated/Del() +/obj/structure/AIcore/deactivated/Destroy() if(src in empty_playable_ai_cores) empty_playable_ai_cores -= src ..() @@ -208,7 +208,7 @@ if(card) card.clear() - del(src) + qdel(src) /obj/structure/AIcore/deactivated/proc/check_malf(var/mob/living/silicon/ai/ai) if(!ai) return diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 77f7647608..2af213478a 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -14,7 +14,7 @@ var/global/list/minor_air_alarms = list() ..() atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/update_icon) -/obj/machinery/computer/atmos_alert/Del() +/obj/machinery/computer/atmos_alert/Destroy() atmosphere_alarm.unregister(src) ..() diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index ac648624f2..a325ab90f3 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -29,7 +29,7 @@ if(!src || !WT.isOn()) return user << "\blue You deconstruct the frame." new /obj/item/stack/sheet/metal( src.loc, 5 ) - del(src) + qdel(src) if(1) if(istype(P, /obj/item/weapon/wrench)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) @@ -111,4 +111,4 @@ user << "\blue You connect the monitor." var/B = new src.circuit.build_path ( src.loc ) src.circuit.construct(B) - del(src) + qdel(src) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index fd8386a7f8..35ae52d588 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -221,7 +221,7 @@ src.active_record = locate(href_list["view_rec"]) if(istype(src.active_record,/datum/dna2/record)) if ((isnull(src.active_record.ckey))) - del(src.active_record) + qdel(src.active_record) src.temp = "ERROR: Record Corrupt" else src.menu = 3 @@ -241,7 +241,7 @@ if (istype(C)||istype(C, /obj/item/device/pda)) if(src.check_access(C)) src.records.Remove(src.active_record) - del(src.active_record) + qdel(src.active_record) src.temp = "Record deleted." src.menu = 2 else @@ -313,7 +313,7 @@ else if(pod.growclone(C)) temp = "Initiating cloning cycle..." records.Remove(C) - del(C) + qdel(C) menu = 1 else @@ -323,7 +323,7 @@ if(answer != "No" && pod.growclone(C)) temp = "Initiating cloning cycle..." records.Remove(C) - del(C) + qdel(C) menu = 1 else temp = "Initiating cloning cycle...
Error: Post-initialisation failed. Cloning cycle aborted." diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 4fc43a0259..1be7fae453 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -551,7 +551,7 @@ frequency.post_signal(src, status_signal) -/obj/machinery/computer/communications/Del() +/obj/machinery/computer/communications/Destroy() for(var/obj/machinery/computer/communications/commconsole in world) if(istype(commconsole.loc,/turf) && commconsole != src) @@ -574,7 +574,7 @@ ..() -/obj/item/weapon/circuitboard/communications/Del() +/obj/item/weapon/circuitboard/communications/Destroy() for(var/obj/machinery/computer/communications/commconsole in world) if(istype(commconsole.loc,/turf)) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 304ac7d1af..d20d634ed7 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -41,11 +41,11 @@ /obj/machinery/computer/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(25)) - del(src) + qdel(src) return if (prob(50)) for(var/x in verbs) @@ -129,7 +129,7 @@ A.state = 4 A.icon_state = "4" M.deconstruct(src) - del(src) + qdel(src) else src.attack_hand(user) return diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index e49711c257..35e2b186b7 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -240,7 +240,7 @@ if (href_list["del_all2"]) for(var/datum/data/record/R in data_core.medical) //R = null - del(R) + qdel(R) //Foreach goto(494) src.temp = "All records deleted." @@ -408,7 +408,7 @@ if (href_list["del_r2"]) if (src.active2) //src.active2 = null - del(src.active2) + qdel(src.active2) if (href_list["d_rec"]) var/datum/data/record/R = locate(href_list["d_rec"]) @@ -542,7 +542,7 @@ continue else if(prob(1)) - del(R) + qdel(R) continue ..(severity) diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 0c7830a78a..30a39c37b1 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -77,7 +77,7 @@ A.state = 3 A.icon_state = "3" A.anchored = 1 - del(src) + qdel(src) else user << "\blue You disconnect the monitor." var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc ) @@ -100,7 +100,7 @@ A.state = 4 A.icon_state = "4" A.anchored = 1 - del(src) + qdel(src) else attack_hand(user) return diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm index 84ba06fa02..7b152fb7a3 100644 --- a/code/game/machinery/computer/prisonshuttle.dm +++ b/code/game/machinery/computer/prisonshuttle.dm @@ -45,7 +45,7 @@ var/prison_shuttle_timeleft = 0 A.state = 4 A.icon_state = "4" - del(src) + qdel(src) else if(istype(I,/obj/item/weapon/card/emag) && (!hacked)) hacked = 1 user << "\blue You disable the lock." @@ -194,7 +194,7 @@ var/prison_shuttle_timeleft = 0 for(var/atom/movable/AM as mob|obj in T) AM.Move(D) if(istype(T, /turf/simulated)) - del(T) + qdel(T) start_location.move_contents_to(end_location) if(1) @@ -224,7 +224,7 @@ var/prison_shuttle_timeleft = 0 for(var/atom/movable/AM as mob|obj in T) AM.Move(D) if(istype(T, /turf/simulated)) - del(T) + qdel(T) for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... bug.gib() diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index c05f0f78be..647434b7fd 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -377,7 +377,7 @@ What a mess.*/ if ("Purge All Records") for(var/datum/data/record/R in data_core.security) - del(R) + qdel(R) temp = "All Security records deleted." if ("Add Entry") @@ -549,17 +549,17 @@ What a mess.*/ if ("Delete Record (Security) Execute") if (active2) - del(active2) + qdel(active2) if ("Delete Record (ALL) Execute") if (active1) for(var/datum/data/record/R in data_core.medical) if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) - del(R) + qdel(R) else - del(active1) + qdel(active1) if (active2) - del(active2) + qdel(active2) else temp = "This function does not appear to be working at the moment. Our apologies." @@ -605,7 +605,7 @@ What a mess.*/ continue else if(prob(1)) - del(R) + qdel(R) continue ..(severity) diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index b8b25b3e34..05da871ed2 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -43,7 +43,7 @@ world << "\blue Alert: Shuttle launch time shortened to 10 seconds!" emergency_shuttle.set_launch_countdown(10) //src.authorized = null - del(src.authorized) + qdel(src.authorized) src.authorized = list( ) if("Repeal") diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index aa92a59094..201c834e1c 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -289,7 +289,7 @@ What a mess.*/ if(PDA_Manifest.len) PDA_Manifest.Cut() for(var/datum/data/record/R in data_core.security) - del(R) + qdel(R) temp = "All Employment records deleted." if ("Delete Record (ALL)") @@ -373,9 +373,9 @@ What a mess.*/ PDA_Manifest.Cut() for(var/datum/data/record/R in data_core.medical) if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) - del(R) + qdel(R) else - del(active1) + qdel(active1) else temp = "This function does not appear to be working at the moment. Our apologies." @@ -408,7 +408,7 @@ What a mess.*/ continue else if(prob(1)) - del(R) + qdel(R) continue ..(severity) \ No newline at end of file diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm index 01728b4e50..48ba842a2f 100644 --- a/code/game/machinery/computer/specops_shuttle.dm +++ b/code/game/machinery/computer/specops_shuttle.dm @@ -75,7 +75,7 @@ var/specops_shuttle_timeleft = 0 for(var/atom/movable/AM as mob|obj in T) AM.Move(D) if(istype(T, /turf/simulated)) - del(T) + qdel(T) for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... bug.gib() @@ -94,7 +94,7 @@ var/specops_shuttle_timeleft = 0 for(var/obj/machinery/computer/specops_shuttle/S in world) S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY - del(announcer) + qdel(announcer) /proc/specops_process() var/area/centcom/specops/special_ops = locate()//Where is the specops area located? @@ -224,7 +224,7 @@ var/specops_shuttle_timeleft = 0 for(var/atom/movable/AM as mob|obj in T) AM.Move(D) if(istype(T, /turf/simulated)) - del(T) + qdel(T) start_location.move_contents_to(end_location) @@ -235,7 +235,7 @@ var/specops_shuttle_timeleft = 0 for(var/obj/machinery/computer/specops_shuttle/S in world) S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY - del(announcer) + qdel(announcer) /proc/specops_can_move() if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 6d5209ce58..8780586985 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -16,7 +16,7 @@ alarm_monitor = new monitor_type(src) alarm_monitor.register(src, /obj/machinery/computer/station_alert/update_icon) -/obj/machinery/computer/station_alert/Del() +/obj/machinery/computer/station_alert/Destroy() alarm_monitor.unregister(src) ..() diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm index 970bb362c3..f526ead65b 100644 --- a/code/game/machinery/computer/syndicate_specops_shuttle.dm +++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm @@ -160,7 +160,7 @@ var/syndicate_elite_shuttle_timeleft = 0 for(var/atom/movable/AM as mob|obj in T) AM.Move(D) if(istype(T, /turf/simulated)) - del(T) + qdel(T) for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... bug.gib() diff --git a/code/game/machinery/computer3/buildandrepair.dm b/code/game/machinery/computer3/buildandrepair.dm index 38db742ee6..bc02e474e4 100644 --- a/code/game/machinery/computer3/buildandrepair.dm +++ b/code/game/machinery/computer3/buildandrepair.dm @@ -95,7 +95,7 @@ if(!src || !WT.isOn()) return user << "\blue You deconstruct the frame." new /obj/item/stack/sheet/metal( src.loc, 5 ) - del(src) + qdel(src) if(1) if(istype(P, /obj/item/weapon/wrench)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) @@ -160,7 +160,7 @@ if(do_after(user, 20)) if(P) P:amount -= 5 - if(!P:amount) del(P) + if(!P:amount) qdel(P) user << "\blue You add cables to the frame." src.state = 3 src.icon_state = "3" @@ -212,7 +212,7 @@ if(circuit.OS) circuit.OS.computer = B B.RefreshParts() // todo - del(src) + qdel(src) /* This will remove peripherals if you specify one, but the main function is to diff --git a/code/game/machinery/computer3/computer.dm b/code/game/machinery/computer3/computer.dm index 4939444ae5..e643635dfe 100644 --- a/code/game/machinery/computer3/computer.dm +++ b/code/game/machinery/computer3/computer.dm @@ -215,11 +215,11 @@ ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(25)) - del(src) + qdel(src) return if (prob(50)) for(var/x in verbs) diff --git a/code/game/machinery/computer3/computers/HolodeckControl.dm b/code/game/machinery/computer3/computers/HolodeckControl.dm index 80d60afd07..9e4532604b 100644 --- a/code/game/machinery/computer3/computers/HolodeckControl.dm +++ b/code/game/machinery/computer3/computers/HolodeckControl.dm @@ -160,7 +160,7 @@ if(!silent) var/obj/oldobj = obj obj.visible_message("The [oldobj.name] fades away!") - del(obj) + qdel(obj) proc/checkInteg(var/area/A) for(var/turf/T in A) @@ -213,10 +213,10 @@ derez(item) for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck) - del(B) + qdel(B) for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck) - del(C) + qdel(C) holographic_items = A.copy_contents_to(linkedholodeck , 1) diff --git a/code/game/machinery/computer3/computers/camera.dm b/code/game/machinery/computer3/computers/camera.dm index 17f14e0cbf..f90b0526ee 100644 --- a/code/game/machinery/computer3/computers/camera.dm +++ b/code/game/machinery/computer3/computers/camera.dm @@ -238,7 +238,7 @@ camera_list = "Network Key: [key.title] [topic_link(src,"keyselect","\[ Select key \]")]
" for(var/obj/machinery/camera/C in temp_list) - if(C.status) + if(C.can_use()) camera_list += "[C.c_tag] - [topic_link(src,"show=\ref[C]","Show")]
" else camera_list += "[C.c_tag] - DEACTIVATED
" @@ -264,7 +264,7 @@ if("show" in href_list) var/obj/machinery/camera/C = locate(href_list["show"]) - if(istype(C) && C.status) + if(istype(C) && C.can_use()) set_current(C) usr.reset_view(C) interact() diff --git a/code/game/machinery/computer3/computers/medical.dm b/code/game/machinery/computer3/computers/medical.dm index a0ab72d16b..aec0b615f5 100644 --- a/code/game/machinery/computer3/computers/medical.dm +++ b/code/game/machinery/computer3/computers/medical.dm @@ -254,7 +254,7 @@ if (href_list["del_all2"]) for(var/datum/data/record/R in data_core.medical) //R = null - del(R) + qdel(R) //Foreach goto(494) src.temp = "All records deleted." @@ -422,7 +422,7 @@ if (href_list["del_r2"]) if (src.active2) //src.active2 = null - del(src.active2) + qdel(src.active2) if (href_list["d_rec"]) var/datum/data/record/R = locate(href_list["d_rec"]) diff --git a/code/game/machinery/computer3/computers/security.dm b/code/game/machinery/computer3/computers/security.dm index 924f32b1b7..f2de764894 100644 --- a/code/game/machinery/computer3/computers/security.dm +++ b/code/game/machinery/computer3/computers/security.dm @@ -397,7 +397,7 @@ What a mess.*/ if ("Purge All Records") for(var/datum/data/record/R in data_core.security) - del(R) + qdel(R) temp = "All Security records deleted." if ("Add Entry") @@ -558,17 +558,17 @@ What a mess.*/ if ("Delete Record (Security) Execute") if (active2) - del(active2) + qdel(active2) if ("Delete Record (ALL) Execute") if (active1) for(var/datum/data/record/R in data_core.medical) if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) - del(R) + qdel(R) else - del(active1) + qdel(active1) if (active2) - del(active2) + qdel(active2) else temp = "This function does not appear to be working at the moment. Our apologies." @@ -601,7 +601,7 @@ What a mess.*/ continue else if(prob(1)) - del(R) + qdel(R) continue ..(severity) diff --git a/code/game/machinery/computer3/laptop.dm b/code/game/machinery/computer3/laptop.dm index e0156e874e..484db52462 100644 --- a/code/game/machinery/computer3/laptop.dm +++ b/code/game/machinery/computer3/laptop.dm @@ -52,7 +52,7 @@ O.loc = loc usr << "\The [src] crumbles to pieces." spawn(5) - del src + qdel(src) return if(!stored_computer.manipulating) @@ -65,7 +65,7 @@ spawn(5) stored_computer.manipulating = 0 - del src + qdel(src) else usr << "\red You are already opening the computer!" @@ -185,12 +185,12 @@ else stat &= ~NOPOWER - Del() + Destroy() if(istype(loc,/obj/item/device/laptop)) var/obj/O = loc spawn(5) if(O) - del O + qdel(O) ..() diff --git a/code/game/machinery/computer3/lapvend.dm b/code/game/machinery/computer3/lapvend.dm index 72531b5d8e..b2e84f1cd2 100644 --- a/code/game/machinery/computer3/lapvend.dm +++ b/code/game/machinery/computer3/lapvend.dm @@ -31,7 +31,7 @@ /obj/machinery/lapvend/blob_act() if (prob(50)) spawn(0) - del(src) + qdel(src) return return @@ -202,10 +202,10 @@ if (network == 3) newlap.spawn_parts += (/obj/item/part/computer/networking/cable) if (power == 1) - del(newlap.battery) + qdel(newlap.battery) newlap.battery = new /obj/item/weapon/cell/high(newlap) if (power == 2) - del(newlap.battery) + qdel(newlap.battery) newlap.battery = new /obj/item/weapon/cell/super(newlap) newlap.spawn_parts() @@ -404,7 +404,7 @@ T.time = worldtime2text() vendor_account.transaction_log.Add(T) - del(relap) + qdel(relap) vendmode = 0 cardreader = 0 floppy = 0 diff --git a/code/game/machinery/computer3/program.dm b/code/game/machinery/computer3/program.dm index 74083b8ffd..0667fe2f73 100644 --- a/code/game/machinery/computer3/program.dm +++ b/code/game/machinery/computer3/program.dm @@ -111,7 +111,7 @@ Programs are a file that can be executed update_icon() if(popup) popup.close() - del popup + qdel(popup) return /* diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 0f906ad4b2..da2ebb9d2d 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -53,7 +53,7 @@ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) user << "\blue You dismantle the frame" new /obj/item/stack/sheet/metal(src.loc, 5) - del(src) + qdel(src) if(2) if(istype(P, /obj/item/weapon/circuitboard)) var/obj/item/weapon/circuitboard/B = P @@ -129,7 +129,7 @@ else circuit.loc = null new_machine.RefreshParts() - del(src) + qdel(src) else if(istype(P, /obj/item)) for(var/I in req_components) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index a9858742c9..4ccc48f8bd 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -24,9 +24,11 @@ ..() initialize_directions = dir -/obj/machinery/atmospherics/unary/cryo_cell/Del() - if(occupant) - occupant.loc = loc +/obj/machinery/atmospherics/unary/cryo_cell/Destroy() + 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() @@ -190,7 +192,7 @@ return var/mob/M = G:affecting if(put_mob(M)) - del(G) + qdel(G) return /obj/machinery/atmospherics/unary/cryo_cell/update_icon() diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index fcece506c3..41bb3bef2d 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -234,7 +234,7 @@ ..() -/obj/machinery/cryopod/Del() +/obj/machinery/cryopod/Destroy() if(occupant) occupant.loc = loc occupant.resting = 1 @@ -291,12 +291,12 @@ var/mob/living/silicon/robot/R = occupant if(!istype(R)) return ..() - del(R.mmi) + qdel(R.mmi) for(var/obj/item/I in R.module) // the tools the borg has; metal, glass, guns etc for(var/obj/item/O in I) // the things inside the tools, if anything; mainly for janiborg trash bags O.loc = R - del(I) - del(R.module) + qdel(I) + qdel(R.module) return ..() @@ -308,14 +308,14 @@ occupant.drop_from_inventory(W) W.loc = src - if(W.contents.len) //Make sure we catch anything not handled by del() on the items. + if(W.contents.len) //Make sure we catch anything not handled by qdel() on the items. for(var/obj/item/O in W.contents) if(istype(O,/obj/item/weapon/storage/internal)) //Stop eating pockets, you fuck! continue O.loc = src //Delete all items not on the preservation list. - var/list/items = src.contents + var/list/items = src.contents.Copy() items -= occupant // Don't delete the occupant items -= announce // or the autosay radio. @@ -328,7 +328,7 @@ break if(!preserve) - del(W) + qdel(W) else if(control_computer && control_computer.allow_items) control_computer.frozen_items += W @@ -341,7 +341,7 @@ // We don't want revs to get objectives that aren't for heads of staff. Letting // them win or lose based on cryo is silly so we remove the objective. if(istype(O,/datum/objective/mutiny) && O.target == occupant.mind) - del(O) + qdel(O) else if(O.target && istype(O.target,/datum/mind)) if(O.target == occupant.mind) if(O.owner && O.owner.current) @@ -353,7 +353,7 @@ if(!(O.target)) all_objectives -= O O.owner.objectives -= O - del(O) + qdel(O) //Handle job slot/tater cleanup. var/job = occupant.mind.assigned_role @@ -361,7 +361,7 @@ job_master.FreeRole(job) if(occupant.mind.objectives.len) - del(occupant.mind.objectives) + qdel(occupant.mind.objectives) occupant.mind.special_role = null //else //if(ticker.mode.name == "AutoTraitor") @@ -374,13 +374,13 @@ PDA_Manifest.Cut() for(var/datum/data/record/R in data_core.medical) if ((R.fields["name"] == occupant.real_name)) - del(R) + qdel(R) for(var/datum/data/record/T in data_core.security) if ((T.fields["name"] == occupant.real_name)) - del(T) + qdel(T) for(var/datum/data/record/G in data_core.general) if ((G.fields["name"] == occupant.real_name)) - del(G) + qdel(G) if(orient_right) icon_state = "[base_icon_state]-r" @@ -398,9 +398,9 @@ announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]") visible_message("\The [initial(name)] hums and hisses as it moves [occupant.real_name] into storage.", 3) - set_occupant(null) // Delete the mob. - del(occupant) + qdel(occupant) + set_occupant(null) /obj/machinery/cryopod/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 87e7adea03..c9dfe8c5f0 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -91,14 +91,14 @@ for reference: new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) - del(src) + qdel(src) ..() ex_act(severity) switch(severity) if(1.0) visible_message("\red The barricade is blown apart!") - del(src) + qdel(src) return if(2.0) src.health -= 25 @@ -107,7 +107,7 @@ for reference: new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) - del(src) + qdel(src) return meteorhit() @@ -115,14 +115,14 @@ for reference: new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) - del(src) + qdel(src) return blob_act() src.health -= 25 if (src.health <= 0) visible_message("\red The blob eats through the barricade!") - del(src) + qdel(src) return CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff. @@ -272,4 +272,4 @@ for reference: explosion(src.loc,-1,-1,0) if(src) - del(src) \ No newline at end of file + qdel(src) \ No newline at end of file diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 69c4ee2857..5c6a744d5d 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -264,13 +264,13 @@ for(var/obj/structure/falsewall/phoron/F in range(3,src))//Hackish as fuck, but until temperature_expose works, there is nothing I can do -Sieve var/turf/T = get_turf(F) T.ChangeTurf(/turf/simulated/wall/mineral/phoron/) - del (F) + qdel (F) for(var/turf/simulated/wall/mineral/phoron/W in range(3,src)) W.ignite((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) D.ignite(temperature/4) new/obj/structure/door_assembly( src.loc ) - del (src) + qdel(src) /obj/machinery/door/airlock/sandstone name = "Sandstone Airlock" @@ -770,7 +770,7 @@ About the new airlock wires panel: electronics.loc = src.loc electronics = null - del(src) + qdel(src) return else if(arePowerSystemsOn()) user << "\blue The airlock's motors resist your efforts to force it." @@ -882,7 +882,7 @@ About the new airlock wires panel: S.victim = M S.loc = M.loc spawn(20) - del(S) + qdel(S) if (iscarbon(M)) var/mob/living/carbon/C = M if (!(C.species && (C.species.flags & NO_PAIN))) 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 0ae597e0f7..07174993de 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -68,8 +68,7 @@ update_nearby_tiles(need_rebuild=1) return - -/obj/machinery/door/Del() +/obj/machinery/door/Destroy() density = 0 update_nearby_tiles() ..() @@ -168,7 +167,7 @@ new /obj/item/stack/rods(src.loc, 3) if(BURN) new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes! - del(src) + qdel(src) if(Proj.damage) //cap projectile damage so that there's still a minimum number of hits required to break the door @@ -251,7 +250,7 @@ user << "You finish repairing the damage to \the [src]." health = between(health, health + repairing.amount*DOOR_REPAIR_AMOUNT, maxhealth) update_icon() - del(repairing) + qdel(repairing) return if(repairing && istype(I, /obj/item/weapon/crowbar)) @@ -309,7 +308,7 @@ /obj/machinery/door/examine(mob/user) - ..() + . = ..() if(src.health < src.maxhealth / 4) user << "\The [src] looks like it's about to break!" else if(src.health < src.maxhealth / 2) @@ -329,7 +328,7 @@ /obj/machinery/door/blob_act() if(prob(40)) - del(src) + qdel(src) return @@ -342,10 +341,10 @@ /obj/machinery/door/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(2.0) if(prob(25)) - del(src) + qdel(src) else take_damage(300) if(3.0) @@ -434,7 +433,7 @@ //I shall not add a check every x ticks if a door has closed over some fire. var/obj/fire/fire = locate() in loc if(fire) - del fire + qdel(fire) return /obj/machinery/door/proc/requiresID() diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 9ae8751a7a..a3fca76a44 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -56,7 +56,7 @@ for(var/obj/machinery/door/firedoor/F in loc) if(F != src) spawn(1) - del src + qdel(src) return . var/area/A = get_area(src) ASSERT(istype(A)) @@ -70,14 +70,15 @@ A.all_doors.Add(src) areas_added += A -/obj/machinery/door/firedoor/Del() +/obj/machinery/door/firedoor/Destroy() for(var/area/A in areas_added) A.all_doors.Remove(src) . = ..() /obj/machinery/door/firedoor/examine(mob/user) - if(!..(user, 1) && !isAI(user)) + . = ..(user, 1) + if(!. || !density) return if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF) @@ -230,7 +231,7 @@ FA.density = 1 FA.wired = 1 FA.update_icon() - del(src) + qdel(src) return if(blocked) diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm index 435a927857..d3a70fe85e 100644 --- a/code/game/machinery/doors/firedoor_assembly.dm +++ b/code/game/machinery/doors/firedoor_assembly.dm @@ -42,8 +42,8 @@ obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob) user.visible_message("[user] has inserted a circuit into \the [src]!", "You have inserted the circuit into \the [src]!") new /obj/machinery/door/firedoor(src.loc) - del(C) - del(src) + qdel(C) + qdel(src) else user << "You must secure \the [src] first!" else if(istype(C, /obj/item/weapon/wrench)) @@ -62,7 +62,7 @@ obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob) user.visible_message("[user] has dissassembled \the [src].", "You have dissassembled \the [src].") new /obj/item/stack/sheet/metal(src.loc, 2) - del (src) + qdel(src) else user << "You need more welding fuel." else diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index de96052c41..b91270ad60 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -49,9 +49,9 @@ playsound(src, "shatter", 70, 1) if(display_message) visible_message("[src] shatters!") - del(src) + qdel(src) -/obj/machinery/door/window/Del() +/obj/machinery/door/window/Destroy() density = 0 update_nearby_tiles() ..() diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index dbe7f1b8a7..ec9f4e7acc 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -9,7 +9,7 @@ var/list/doppler_arrays = list() ..() doppler_arrays += src -/obj/machinery/doppler_array/Del() +/obj/machinery/doppler_array/Destroy() doppler_arrays -= src ..() diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 8661651a39..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 @@ -70,7 +75,7 @@ //use_power(radio_power_use) //neat idea, but causes way too much lag. return radio_connection.post_signal(src, signal, filter) else - del(signal) + qdel(signal) /obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency) radio_controller.remove_object(src, frequency) diff --git a/code/game/machinery/embedded_controller/embedded_program_base.dm b/code/game/machinery/embedded_controller/embedded_program_base.dm index 611fcfc52e..f579aca6f7 100644 --- a/code/game/machinery/embedded_controller/embedded_program_base.dm +++ b/code/game/machinery/embedded_controller/embedded_program_base.dm @@ -1,27 +1,27 @@ - -/datum/computer/file/embedded_program - var/list/memory = list() - var/obj/machinery/embedded_controller/master - - var/id_tag - -/datum/computer/file/embedded_program/New(var/obj/machinery/embedded_controller/M) - master = M - if (istype(M, /obj/machinery/embedded_controller/radio)) - var/obj/machinery/embedded_controller/radio/R = M - id_tag = R.id_tag - -/datum/computer/file/embedded_program/proc/receive_user_command(command) - return - -/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param) - return - -/datum/computer/file/embedded_program/proc/process() - return - -/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line) - if(master) - master.post_signal(signal, comm_line) - else - del(signal) + +/datum/computer/file/embedded_program + var/list/memory = list() + var/obj/machinery/embedded_controller/master + + var/id_tag + +/datum/computer/file/embedded_program/New(var/obj/machinery/embedded_controller/M) + master = M + if (istype(M, /obj/machinery/embedded_controller/radio)) + var/obj/machinery/embedded_controller/radio/R = M + id_tag = R.id_tag + +/datum/computer/file/embedded_program/proc/receive_user_command(command) + return + +/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param) + return + +/datum/computer/file/embedded_program/proc/process() + return + +/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line) + if(master) + master.post_signal(signal, comm_line) + else + qdel(signal) diff --git a/code/game/machinery/floorlayer.dm b/code/game/machinery/floorlayer.dm new file mode 100644 index 0000000000..009d1c7694 --- /dev/null +++ b/code/game/machinery/floorlayer.dm @@ -0,0 +1,114 @@ +/obj/machinery/floorlayer + + name = "automatic floor layer" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "pipe_d" + density = 1 + var/turf/old_turf + var/on = 0 + var/obj/item/stack/tile/T + var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0) + +/obj/machinery/floorlayer/New() + T = new/obj/item/stack/tile/plasteel(src) + ..() + +/obj/machinery/floorlayer/Move(new_turf,M_Dir) + ..() + + if(on) + if(mode["dismantle"]) + dismantleFloor(old_turf) + + if(mode["laying"]) + layFloor(old_turf) + + if(mode["collect"]) + CollectTiles(old_turf) + + + old_turf = new_turf + +/obj/machinery/floorlayer/attack_hand(mob/user as mob) + on=!on + user.visible_message("[user] has [!on?"de":""]activated \the [src].", "You [!on?"de":""]activate \the [src].") + return + +/obj/machinery/floorlayer/attackby(var/obj/item/W as obj, var/mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + var/m = input("Choose work mode", "Mode") as null|anything in mode + mode[m] = !mode[m] + var/O = mode[m] + user.visible_message("[usr] has set \the [src] [m] mode [!O?"off":"on"].", "You set \the [src] [m] mode [!O?"off":"on"].") + return + + if(istype(W, /obj/item/stack/tile)) + user << "\The [W] successfully loaded." + user.drop_item(T) + TakeTile(T) + return + + if(istype(W, /obj/item/weapon/crowbar)) + if(!length(contents)) + user << "\The [src] is empty." + else + var/obj/item/stack/tile/E = input("Choose remove tile type.", "Tiles") as null|anything in contents + if(E) + user << "You remove the [E] from /the [src]." + E.loc = src.loc + T = null + return + + if(istype(W, /obj/item/weapon/screwdriver)) + T = input("Choose tile type.", "Tiles") as null|anything in contents + return + ..() + +/obj/machinery/floorlayer/examine(mob/user) + ..() + var/dismantle = mode["dismantle"] + var/laying = mode["laying"] + var/collect = mode["collect"] + user << "\The [src] [!T?"don't ":""]has [!T?"":"[T.get_amount()] [T] "]tile\s, dismantle is [dismantle?"on":"off"], laying is [laying?"on":"off"], collect is [collect?"on":"off"]." + +/obj/machinery/floorlayer/proc/reset() + on=0 + return + +/obj/machinery/floorlayer/proc/dismantleFloor(var/turf/new_turf) + if(istype(new_turf, /turf/simulated/floor)) + var/turf/simulated/floor/T = new_turf + if(!T.is_plating()) + if(!T.broken && !T.burnt) + new T.floor_type(T) + T.make_plating() + return !new_turf.intact + +/obj/machinery/floorlayer/proc/TakeNewStack() + for(var/obj/item/stack/tile/tile in contents) + T = tile + return 1 + return 0 + +/obj/machinery/floorlayer/proc/SortStacks() + for(var/obj/item/stack/tile/tile1 in contents) + for(var/obj/item/stack/tile/tile2 in contents) + tile2.transfer_to(tile1) + +/obj/machinery/floorlayer/proc/layFloor(var/turf/w_turf) + if(!T) + if(!TakeNewStack()) + return 0 + w_turf.attackby(T , src) + return 1 + +/obj/machinery/floorlayer/proc/TakeTile(var/obj/item/stack/tile/tile) + if(!T) T = tile + tile.loc = src + + SortStacks() + +/obj/machinery/floorlayer/proc/CollectTiles(var/turf/w_turf) + for(var/obj/item/stack/tile/tile in w_turf) + TakeTile(tile) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index a286b530ca..8ecbd53838 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -131,7 +131,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/proc/clear_holo(mob/living/silicon/ai/user) if(user.holo == src) user.holo = null - del(masters[user])//Get rid of user's hologram //qdel + qdel(masters[user])//Get rid of user's hologram masters -= user //Discard AI from the list of those who use holopad if (!masters.len)//If no users left SetLuminosity(0) //pad lighting (hologram lighting will be handled automatically since its owner was deleted) @@ -182,24 +182,24 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(2.0) if (prob(50)) - del(src) + qdel(src) if(3.0) if (prob(5)) - del(src) + qdel(src) return /obj/machinery/hologram/blob_act() - del(src) + qdel(src) return /obj/machinery/hologram/meteorhit() - del(src) + qdel(src) return -/obj/machinery/hologram/holopad/Del() +/obj/machinery/hologram/holopad/Destroy() for (var/mob/living/silicon/ai/master in masters) clear_holo(master) ..() diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 972f51bd48..5c22471398 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -36,7 +36,7 @@ datum/track/New(var/title_name, var/audio) ) -/obj/machinery/media/jukebox/Del() +/obj/machinery/media/jukebox/Destroy() StopPlaying() ..() @@ -160,7 +160,7 @@ datum/track/New(var/title_name, var/audio) s.start() new /obj/effect/decal/cleanable/blood/oil(src.loc) - del(src) + qdel(src) /obj/machinery/media/jukebox/attackby(obj/item/W as obj, mob/user as mob) src.add_fingerprint(user) diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 1283e7e52c..69f6c1a2d5 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -31,7 +31,7 @@ if(isturf(input_obj.loc)) input_plate = input_obj.loc gib_throw_dir = i - del(input_obj) + qdel(input_obj) break if(!input_plate) @@ -221,7 +221,7 @@ src.operating = 0 src.occupant.gib() - del(src.occupant) + qdel(src.occupant) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) operating = 0 @@ -229,7 +229,7 @@ // Todo: unify limbs and internal organs // There's a chance that the gibber will fail to destroy some evidence. if((istype(thing,/obj/item/organ) || istype(thing,/obj/item/organ)) && prob(80)) - del(thing) + qdel(thing) continue thing.loc = get_turf(thing) // Drop it onto the turf for throwing. thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 100 : 50) // Being pelted with bits of meat and bone would hurt. diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index fe75dff633..23efb8ab4c 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -111,6 +111,7 @@ user.visible_message( \ "\blue [user] has added one of [O] to \the [src].", \ "\blue You add one of [O] to \the [src].") + return else // user.remove_from_mob(O) //This just causes problems so far as I can tell. -Pete user.drop_item() @@ -118,6 +119,7 @@ user.visible_message( \ "\blue [user] has added \the [O] to \the [src].", \ "\blue You add \the [O] to \the [src].") + return else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ @@ -351,7 +353,7 @@ var/id = O.reagents.get_master_reagent_id() if (id) amount+=O.reagents.get_reagent_amount(id) - del(O) + qdel(O) src.reagents.clear_reagents() ffuu.reagents.add_reagent("carbon", amount) ffuu.reagents.add_reagent("toxin", amount/10) diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index a6fcf00274..9bfa0e1c5d 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -33,8 +33,8 @@ else wires = new/datum/wires/smartfridge(src) -/obj/machinery/smartfridge/Del() - del(wires) // qdel +/obj/machinery/smartfridge/Destroy() + qdel(wires) ..() /obj/machinery/smartfridge/proc/accept_check(var/obj/item/O as obj) @@ -146,7 +146,7 @@ var/D = S.dried_type new D(loc) item_quants[S.name]-- - del(S) + qdel(S) return return diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 5542c8d634..0668906b70 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. @@ -121,7 +121,7 @@ Class Procs: machines += src machinery_sort_required = 1 -/obj/machinery/Del() +/obj/machinery/Destroy() machines -= src ..() @@ -135,7 +135,7 @@ Class Procs: if(use_power && stat == 0) use_power(7500/severity) - var/obj/effect/overlay/pulse2 = new/obj/effect/overlay ( src.loc ) + var/obj/effect/overlay/pulse2 = PoolOrNew(/obj/effect/overlay, src.loc) pulse2.icon = 'icons/effects/effects.dmi' pulse2.icon_state = "empdisable" pulse2.name = "emp sparks" @@ -143,28 +143,28 @@ Class Procs: pulse2.set_dir(pick(cardinal)) spawn(10) - pulse2.delete() + qdel(pulse2) ..() /obj/machinery/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if(3.0) if (prob(25)) - del(src) + qdel(src) return else return /obj/machinery/blob_act() if(prob(50)) - del(src) + qdel(src) //sets the use_power var and then forces an area power update /obj/machinery/proc/update_use_power(var/new_use_power, var/force_update = 0) @@ -331,5 +331,5 @@ Class Procs: if(I.reliability != 100 && crit_fail) I.crit_fail = 1 I.loc = loc - del(src) + qdel(src) return 1 diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index b04e9d1851..501d7a0b75 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -164,7 +164,7 @@ if(prob(electricity_level)) explosion(loc, 0, 1, 2, 3) // ooo dat shit EXPLODES son spawn(2) - del(src) + qdel(src) */ updateicon() @@ -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" @@ -364,7 +366,7 @@ // N, S, E, W are directional // C is center // R is random (in magnetic field's bounds) - del(signal) + qdel(signal) break // break the loop if the character located is invalid signal.data["command"] = nextmove @@ -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: