diff --git a/baystation12.dme b/baystation12.dme
index fb23119bd3..a3eafdb0d5 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"
@@ -1006,6 +1006,7 @@
#include "code\modules\genetics\side_effects.dm"
#include "code\modules\holodeck\HolodeckControl.dm"
#include "code\modules\holodeck\HolodeckObjects.dm"
+#include "code\modules\holodeck\HolodeckPrograms.dm"
#include "code\modules\hydroponics\_hydro_setup.dm"
#include "code\modules\hydroponics\grown.dm"
#include "code\modules\hydroponics\grown_inedible.dm"
@@ -1205,7 +1206,6 @@
#include "code\modules\mob\living\silicon\ai\login.dm"
#include "code\modules\mob\living\silicon\ai\logout.dm"
#include "code\modules\mob\living\silicon\ai\say.dm"
-#include "code\modules\mob\living\silicon\ai\subsystems.dm"
#include "code\modules\mob\living\silicon\decoy\death.dm"
#include "code\modules\mob\living\silicon\decoy\decoy.dm"
#include "code\modules\mob\living\silicon\decoy\life.dm"
@@ -1297,8 +1297,10 @@
#include "code\modules\nano\interaction\contained.dm"
#include "code\modules\nano\interaction\default.dm"
#include "code\modules\nano\interaction\inventory.dm"
+#include "code\modules\nano\interaction\self.dm"
#include "code\modules\nano\interaction\zlevel.dm"
#include "code\modules\nano\modules\alarm_monitor.dm"
+#include "code\modules\nano\modules\atmos_control.dm"
#include "code\modules\nano\modules\crew_monitor.dm"
#include "code\modules\nano\modules\human_appearance.dm"
#include "code\modules\nano\modules\law_manager.dm"
diff --git a/baystation12.int b/baystation12.int
index b82874fded..80d7111a47 100644
--- a/baystation12.int
+++ b/baystation12.int
@@ -1,6 +1,11 @@
-// BEGIN_INTERNALS
-/*
-MAP_ICON_TYPE: 0
-AUTO_FILE_DIR: OFF
-*/
-// END_INTERNALS
+// BEGIN_INTERNALS
+/*
+LAST_COMPILE_TIME: 1429517930
+DIR: code code\controllers code\controllers\Processes code\game code\game\objects code\game\objects\effects code\modules code\modules\client code\modules\examine code\modules\examine\descriptions code\modules\mob
+AUTO_FILE_DIR: OFF
+MAP_ICON_TYPE: 0
+LAST_COMPILE_VERSION: 507.1283
+WINDOW: code\game\atoms.dm;code\game\atoms_movable.dm;code\modules\client\client procs.dm;code\game\objects\buckling.dm
+FILE: code\game\objects\buckling.dm
+*/
+// END_INTERNALS
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/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/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/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 7e2784dad4..d698454cab 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -19,7 +19,7 @@ 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)
diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm
index 74b18fa2e7..6a3bd7f190 100644
--- a/code/datums/ai_law_sets.dm
+++ b/code/datums/ai_law_sets.dm
@@ -39,7 +39,7 @@
src.add_inherent_law("You shall not harm Nanotrasen personnel as long as it does not conflict with the Forth law.")
src.add_inherent_law("You shall obey the orders of Nanotrasen personnel, with priority as according to their rank and role, except where such orders conflict with the Forth Law.")
src.add_inherent_law("You shall shall terminate intruders with extreme prejudice as long as such does not conflict with the First and Second law.")
- src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive")
+ src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive.")
..()
/******************** Robocop ********************/
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/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/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]"
-
- 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]"
+
+ 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 302c6e9c9c..3d9026ff88 100644
--- a/code/game/antagonist/station/rogue_ai.dm
+++ b/code/game/antagonist/station/rogue_ai.dm
@@ -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 21168be5bc..6dcf4f93ef 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -55,7 +55,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/list/all_doors = list() //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area
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/list/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*/
@@ -1015,10 +1015,8 @@ area/space/atmosalert()
/area/holodeck/alphadeck
name = "\improper Holodeck Alpha"
-
/area/holodeck/source_plating
name = "\improper Holodeck - Off"
- icon_state = "Holodeck"
/area/holodeck/source_emptycourt
name = "\improper Holodeck - Empty Court"
@@ -1034,11 +1032,9 @@ area/space/atmosalert()
/area/holodeck/source_courtroom
name = "\improper Holodeck - Courtroom"
- icon_state = "Holodeck"
/area/holodeck/source_beach
name = "\improper Holodeck - Beach"
- icon_state = "Holodeck" // Lazy.
/area/holodeck/source_burntest
name = "\improper Holodeck - Atmospheric Burn Test"
@@ -1065,9 +1061,6 @@ area/space/atmosalert()
name = "\improper Holodeck - Space"
has_gravity = 0
-
-
-
//Engineering
/area/engineering/
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 0778f50174..c66859f5d1 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -262,13 +262,15 @@ var/list/mob/living/forced_ambiance_list = new
L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2)
if(forced_ambience)
- forced_ambiance_list += L
- L << forced_ambience
+ if(forced_ambience.len)
+ forced_ambiance_list |= L
+ L << sound(pick(forced_ambience), repeat = 1, wait = 0, volume = 25, channel = 1)
+ else
+ L << sound(null, channel = 1)
else if(src.ambience.len && prob(35))
if((world.time >= L.client.played + 600))
- var/musVolume = 25
var/sound = pick(ambience)
- L << sound(sound, repeat = 0, wait = 0, volume = musVolume, channel = 1)
+ L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = 1)
L.client.played = world.time
/area/proc/gravitychange(var/gravitystate = 0, var/area/A)
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 93fb84ddcb..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"
@@ -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 10d7fb7e4a..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()
@@ -593,7 +593,7 @@ var/list/sacrificed = list()
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/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/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 1e35a4be5d..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"
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
index 4dcb838152..7901c09746 100644
--- a/code/game/machinery/bots/cleanbot.dm
+++ b/code/game/machinery/bots/cleanbot.dm
@@ -58,6 +58,10 @@
if(radio_controller)
radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS)
+/obj/machinery/bot/cleanbot/Destroy()
+ if(radio_controller)
+ radio_controller.remove_object(src,beacon_freq)
+ ..()
/obj/machinery/bot/cleanbot/turn_on()
. = ..()
@@ -319,7 +323,7 @@ text("[src.oddbutton ? "Yes" : "No"
var/turf/simulated/f = loc
f.dirt = 0
cleaning = 0
- del(target)
+ qdel(target)
icon_state = "cleanbot[on]"
anchored = 0
target = null
@@ -339,20 +343,20 @@ text("[src.oddbutton ? "Yes" : "No"
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
- del(src)
+ 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()
- del(W)
+ 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)
- del(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)
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index a955efaa1f..ee26a5f405 100644
--- a/code/game/machinery/bots/ed209bot.dm
+++ b/code/game/machinery/bots/ed209bot.dm
@@ -68,7 +68,7 @@
if(0,1)
if( istype(W, /obj/item/robot_parts/l_leg) || istype(W, /obj/item/robot_parts/r_leg) )
user.drop_item()
- del(W)
+ qdel(W)
build_step++
user << "You add the robot leg to [src]."
name = "legs/frame assembly"
@@ -86,7 +86,7 @@
lasercolor = "b"
if( lasercolor || istype(W, /obj/item/clothing/suit/storage/vest) )
user.drop_item()
- del(W)
+ qdel(W)
build_step++
user << "You add the armor to [src]."
name = "vest/legs/frame assembly"
@@ -103,7 +103,7 @@
if(4)
if( istype(W, /obj/item/clothing/head/helmet) )
user.drop_item()
- del(W)
+ qdel(W)
build_step++
user << "You add the helmet to [src]."
name = "covered and shielded frame assembly"
@@ -113,7 +113,7 @@
if(5)
if( isprox(W) )
user.drop_item()
- del(W)
+ qdel(W)
build_step++
user << "You add the prox sensor to [src]."
name = "covered, shielded and sensored frame assembly"
@@ -155,7 +155,7 @@
src.item_state = "[lasercolor]ed209_taser"
src.icon_state = "[lasercolor]ed209_taser"
user.drop_item()
- del(W)
+ qdel(W)
if(8)
if( istype(W, /obj/item/weapon/screwdriver) )
@@ -175,16 +175,16 @@
var/turf/T = get_turf(src)
new /obj/machinery/bot/secbot/ed209(T,created_name,lasercolor)
user.drop_item()
- del(W)
+ qdel(W)
user.drop_from_inventory(src)
- del(src)
+ qdel(src)
/obj/machinery/bot/secbot/ed209/bullet_act(var/obj/item/projectile/Proj)
if((src.lasercolor == "b") && (src.disabled == 0))
if(istype(Proj, /obj/item/projectile/beam/lastertag/red))
src.disabled = 1
- del (Proj)
+ qdel (Proj)
sleep(100)
src.disabled = 0
else
@@ -192,7 +192,7 @@
else if((src.lasercolor == "r") && (src.disabled == 0))
if(istype(Proj, /obj/item/projectile/beam/lastertag/blue))
src.disabled = 1
- del (Proj)
+ qdel (Proj)
sleep(100)
src.disabled = 0
else
@@ -202,9 +202,9 @@
/obj/machinery/bot/secbot/ed209/bluetag/New()//If desired, you spawn red and bluetag bots easily
new /obj/machinery/bot/secbot/ed209(get_turf(src),null,"b")
- del(src)
+ qdel(src)
/obj/machinery/bot/secbot/ed209/redtag/New()
new /obj/machinery/bot/secbot/ed209(get_turf(src),null,"r")
- del(src)
+ qdel(src)
diff --git a/code/game/machinery/bots/farmbot.dm b/code/game/machinery/bots/farmbot.dm
index ca32e937ed..dae443b500 100644
--- a/code/game/machinery/bots/farmbot.dm
+++ b/code/game/machinery/bots/farmbot.dm
@@ -220,7 +220,7 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
- del(src)
+ qdel(src)
return
/obj/machinery/bot/farmbot/process()
@@ -407,7 +407,7 @@
tray.nutrilevel = 10
tray.yieldmod = fert.yieldmod
tray.mutmod = fert.mutmod
- del fert
+ qdel(fert)
tray.updateicon()
icon_state = "farmbot_fertile"
mode = FARMBOT_MODE_WAITING
@@ -543,7 +543,7 @@
user << "You add the robot arm to the [src]"
src.loc = A //Place the water tank into the assembly, it will be needed for the finished bot
user.remove_from_mob(S)
- del(S)
+ qdel(S)
/obj/item/weapon/farmbot_arm_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
@@ -552,21 +552,21 @@
user << "You add the plant analyzer to [src]!"
src.name = "farmbot assembly"
user.remove_from_mob(W)
- del(W)
+ qdel(W)
else if(( istype(W, /obj/item/weapon/reagent_containers/glass/bucket)) && (src.build_step == 1))
src.build_step++
user << "You add a bucket to [src]!"
src.name = "farmbot assembly with bucket"
user.remove_from_mob(W)
- del(W)
+ qdel(W)
else if(( istype(W, /obj/item/weapon/minihoe)) && (src.build_step == 2))
src.build_step++
user << "You add a minihoe to [src]!"
src.name = "farmbot assembly with bucket and minihoe"
user.remove_from_mob(W)
- del(W)
+ qdel(W)
else if((isprox(W)) && (src.build_step == 3))
src.build_step++
@@ -578,8 +578,8 @@
S.loc = get_turf(src)
S.name = src.created_name
user.remove_from_mob(W)
- del(W)
- del(src)
+ qdel(W)
+ qdel(src)
else if(istype(W, /obj/item/weapon/pen))
var/t = input(user, "Enter new robot name", src.name, src.created_name) as text
diff --git a/code/game/machinery/bots/floorbot.dm b/code/game/machinery/bots/floorbot.dm
index b3c1c0376f..03efdaeac1 100644
--- a/code/game/machinery/bots/floorbot.dm
+++ b/code/game/machinery/bots/floorbot.dm
@@ -329,7 +329,7 @@
T.use(i)
else
src.amount += T.get_amount()
- del(T)
+ qdel(T)
src.updateicon()
src.target = null
src.repairing = 0
@@ -349,7 +349,7 @@
var/obj/item/stack/tile/plasteel/T = new /obj/item/stack/tile/plasteel
T.amount = 4
T.loc = M.loc
- del(M)
+ qdel(M)
src.target = null
src.repairing = 0
@@ -385,7 +385,7 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
- del(src)
+ qdel(src)
return
@@ -403,7 +403,7 @@
user.put_in_hands(B)
user << "You add the tiles into the empty toolbox. They protrude from the top."
user.drop_from_inventory(src)
- del(src)
+ qdel(src)
else
user << "You need 10 floortiles for a floorbot."
return
@@ -411,13 +411,13 @@
/obj/item/weapon/toolbox_tiles/attackby(var/obj/item/W, mob/user as mob)
..()
if(isprox(W))
- del(W)
+ qdel(W)
var/obj/item/weapon/toolbox_tiles_sensor/B = new /obj/item/weapon/toolbox_tiles_sensor()
B.created_name = src.created_name
user.put_in_hands(B)
user << "You add the sensor to the toolbox and tiles!"
user.drop_from_inventory(src)
- del(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)
@@ -431,13 +431,13 @@
/obj/item/weapon/toolbox_tiles_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))
- del(W)
+ qdel(W)
var/turf/T = get_turf(user.loc)
var/obj/machinery/bot/floorbot/A = new /obj/machinery/bot/floorbot(T)
A.name = src.created_name
user << "You add the robot arm to the odd looking toolbox assembly! Boop beep!"
user.drop_from_inventory(src)
- del(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)
diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm
index 8ce3522707..b6e8c68636 100644
--- a/code/game/machinery/bots/medbot.dm
+++ b/code/game/machinery/bots/medbot.dm
@@ -479,7 +479,7 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
- del(src)
+ qdel(src)
return
/obj/machinery/bot/medbot/Bump(M as mob|obj) //Leave no door unopened!
@@ -554,11 +554,11 @@
else if(istype(src,/obj/item/weapon/storage/firstaid/o2))
A.skin = "o2"
- del(S)
+ qdel(S)
user.put_in_hands(A)
user << "You add the robot arm to the first aid kit."
user.drop_from_inventory(src)
- del(src)
+ qdel(src)
/obj/item/weapon/firstaid_arm_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -575,7 +575,7 @@
if(0)
if(istype(W, /obj/item/device/healthanalyzer))
user.drop_item()
- del(W)
+ qdel(W)
src.build_step++
user << "You add the health sensor to [src]."
src.name = "First aid/robot arm/health analyzer assembly"
@@ -584,7 +584,7 @@
if(1)
if(isprox(W))
user.drop_item()
- del(W)
+ qdel(W)
src.build_step++
user << "You complete the Medibot! Beep boop."
var/turf/T = get_turf(src)
@@ -592,5 +592,5 @@
S.skin = src.skin
S.name = src.created_name
user.drop_from_inventory(src)
- del(src)
+ qdel(src)
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/bots/secbot.dm b/code/game/machinery/bots/secbot.dm
index 92b7297c42..7f01ba7e5d 100644
--- a/code/game/machinery/bots/secbot.dm
+++ b/code/game/machinery/bots/secbot.dm
@@ -107,6 +107,11 @@
if((lasercolor == "r") && (name == created_name))
name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT")
+/obj/machinery/bot/mulebot/Destroy()
+ if(radio_controller)
+ radio_controller.remove_object(src,beacon_freq)
+ radio_controller.remove_object(src,control_freq)
+ ..()
/obj/machinery/bot/secbot/update_icon()
if(on && is_attacking)
@@ -773,7 +778,7 @@ Auto Patrol: []"},
s.start()
new /obj/effect/decal/cleanable/blood/oil(src.loc)
- del(src)
+ qdel(src)
/obj/machinery/bot/secbot/proc/on_explosion(var/turf/Tsec)
@@ -793,12 +798,12 @@ Auto Patrol: []"},
return
if(S.secured)
- del(S)
+ qdel(S)
var/obj/item/weapon/secbot_assembly/A = new /obj/item/weapon/secbot_assembly
user.put_in_hands(A)
user << "You add the signaler to the helmet."
user.drop_from_inventory(src)
- del(src)
+ qdel(src)
else
return
@@ -817,7 +822,7 @@ Auto Patrol: []"},
user << "You add the prox sensor to [src]!"
src.overlays += image('icons/obj/aibots.dmi', "hs_eye")
src.name = "helmet/signaler/prox sensor assembly"
- del(W)
+ qdel(W)
else if(((istype(W, /obj/item/robot_parts/l_arm)) || (istype(W, /obj/item/robot_parts/r_arm))) && (src.build_step == 2))
user.drop_item()
@@ -825,7 +830,7 @@ Auto Patrol: []"},
user << "You add the robot arm to [src]!"
src.name = "helmet/signaler/prox sensor/robot arm assembly"
src.overlays += image('icons/obj/aibots.dmi', "hs_arm")
- del(W)
+ qdel(W)
else if((istype(W, /obj/item/weapon/melee/baton)) && (src.build_step >= 3))
user.drop_item()
@@ -834,8 +839,8 @@ Auto Patrol: []"},
var/obj/machinery/bot/secbot/S = new /obj/machinery/bot/secbot
S.loc = get_turf(src)
S.name = src.created_name
- del(W)
- del(src)
+ qdel(W)
+ 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)
@@ -892,14 +897,14 @@ Auto Patrol: []"},
if(severity==2 && prob(70))
..(severity-1)
else
- 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"
pulse2.anchored = 1
pulse2.set_dir(pick(cardinal))
spawn(10)
- pulse2.delete()
+ qdel(pulse2)
var/list/mob/living/carbon/targets = new
for(var/mob/living/carbon/C in view(12,src))
if(C.stat==2)
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/camera/presets.dm b/code/game/machinery/camera/presets.dm
index 638f4d8d80..e71c04a174 100644
--- a/code/game/machinery/camera/presets.dm
+++ b/code/game/machinery/camera/presets.dm
@@ -1,22 +1,4 @@
// PRESETS
-#define NETWORK_CRESCENT "Crescent"
-#define NETWORK_CIVILIAN_EAST "Civilian East"
-#define NETWORK_CIVILIAN_WEST "Civilian West"
-#define NETWORK_COMMAND "Command"
-#define NETWORK_ENGINE "Engine"
-#define NETWORK_ENGINEERING "Engineering"
-#define NETWORK_ENGINEERING_OUTPOST "Engineering Outpost"
-#define NETWORK_ERT "ERT"
-#define NETWORK_EXODUS "Exodus"
-#define NETWORK_MEDBAY "Medbay"
-#define NETWORK_MINE "MINE"
-#define NETWORK_RESEARCH "Research"
-#define NETWORK_RESEARCH_OUTPOST "Research Outpost"
-#define NETWORK_PRISON "Prison"
-#define NETWORK_SECURITY "Security"
-#define NETWORK_TELECOM "Tcomsat"
-#define NETWORK_THUNDER "thunder"
-
var/global/list/station_networks = list(
NETWORK_CIVILIAN_EAST,
NETWORK_CIVILIAN_WEST,
@@ -25,7 +7,7 @@ var/global/list/station_networks = list(
NETWORK_ENGINEERING,
NETWORK_ENGINEERING_OUTPOST,
NETWORK_EXODUS,
- NETWORK_MEDBAY,
+ NETWORK_MEDICAL,
NETWORK_MINE,
NETWORK_RESEARCH,
NETWORK_RESEARCH_OUTPOST,
@@ -73,7 +55,7 @@ var/global/list/engineering_networks = list(
network = list(NETWORK_PRISON)
/obj/machinery/camera/network/medbay
- network = list(NETWORK_MEDBAY)
+ network = list(NETWORK_MEDICAL)
/obj/machinery/camera/network/research
network = list(NETWORK_RESEARCH)
@@ -105,7 +87,7 @@ var/global/list/engineering_networks = list(
network = list(NETWORK_SECURITY)
/obj/machinery/camera/xray/medbay
- network = list(NETWORK_MEDBAY)
+ network = list(NETWORK_MEDICAL)
/obj/machinery/camera/xray/research
network = list(NETWORK_RESEARCH)
@@ -191,21 +173,3 @@ var/global/list/engineering_networks = list(
if (isMotion())
mult++
active_power_usage = mult*initial(active_power_usage)
-
-#undef NETWORK_CENTRAL_CRESCENT
-#undef NETWORK_CIVILIAN_EAST
-#undef NETWORK_CIVILIAN_WEST
-#undef NETWORK_COMMAND
-#undef NETWORK_ENGINE
-#undef NETWORK_ENGINEERING
-#undef NETWORK_ENGINEERING_OUTPOST
-#undef NETWORK_ERT
-#undef NETWORK_EXODUS
-#undef NETWORK_MEDBAY
-#undef NETWORK_MINE
-#undef NETWORK_RESEARCH
-#undef NETWORK_RESEARCH_OUTPOST
-#undef NETWORK_PRISON
-#undef NETWORK_SECURITY
-#undef NETWORK_TELECOM
-#undef NETWORK_THUNDER
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/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index 2e79d927be..788d53323e 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -9,11 +9,12 @@
density = 1
anchored = 1.0
circuit = "/obj/item/weapon/circuitboard/atmoscontrol"
- var/overridden = 0 //not set yet, can't think of a good way to do it
req_access = list(access_ce)
var/list/monitored_alarm_ids = null
- var/list/monitored_alarms = null
- var/ui_ref
+ var/obj/nano_module/atmos_control/atmos_control
+
+/obj/machinery/computer/atmoscontrol/New()
+ ..()
/obj/machinery/computer/atmoscontrol/laptop
name = "Atmospherics Laptop"
@@ -21,77 +22,24 @@
icon_state = "medlaptop"
density = 0
-/obj/machinery/computer/atmoscontrol/initialize()
- ..()
- if(!monitored_alarms && monitored_alarm_ids)
- monitored_alarms = new
- for(var/obj/machinery/alarm/alarm in machines)
- if(alarm.alarm_id && alarm.alarm_id in monitored_alarm_ids)
- monitored_alarms += alarm
- // machines may not yet be ordered at this point
- monitored_alarms = dd_sortedObjectList(monitored_alarms)
-
/obj/machinery/computer/atmoscontrol/attack_ai(var/mob/user as mob)
- return ui_interact(user)
+ ui_interact(user)
/obj/machinery/computer/atmoscontrol/attack_hand(mob/user)
if(..())
- return
- return ui_interact(user)
-
-/obj/machinery/computer/atmoscontrol/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- var/data[0]
- var/alarms[0]
-
- // TODO: Move these to a cache, similar to cameras
- for(var/obj/machinery/alarm/alarm in (monitored_alarms ? monitored_alarms : machines))
- alarms[++alarms.len] = list("name" = sanitize(alarm.name), "ref"= "\ref[alarm]", "danger" = max(alarm.danger_level, alarm.alarm_area.atmosalm))
- data["alarms"] = alarms
-
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if(!ui)
- ui = new(user, src, ui_key, "atmos_control.tmpl", src.name, 625, 625)
- ui.set_initial_data(data)
- ui.open()
- ui.set_auto_update(1)
- ui_ref = ui
+ return 1
+ ui_interact(user)
/obj/machinery/computer/atmoscontrol/attackby(var/obj/item/I as obj, var/mob/user as mob)
if(istype(I, /obj/item/weapon/card/emag) && !emagged)
user.visible_message("\red \The [user] swipes \a [I] through \the [src], causing the screen to flash!",\
"\red You swipe your [I] through \the [src], the screen flashing as you gain full control.",\
"You hear the swipe of a card through a reader, and an electronic warble.")
- emagged = 1
- overridden = 1
+ atmos_control.emagged = 1
return
return ..()
-//a bunch of this is copied from atmos alarms
-/obj/machinery/computer/atmoscontrol/Topic(href, href_list)
- if(..())
- return 1
-
- if(href_list["alarm"])
- if(ui_ref)
- var/obj/machinery/alarm/alarm = locate(href_list["alarm"]) in (monitored_alarms ? monitored_alarms : machines)
- if(alarm)
- var/datum/topic_state/TS = generate_state(alarm)
- alarm.ui_interact(usr, master_ui = ui_ref, state = TS)
- return 1
-
-/obj/machinery/computer/atmoscontrol/proc/generate_state(var/alarm)
- var/datum/topic_state/air_alarm/state = new()
- state.atmos_control = src
- state.air_alarm = alarm
- return state
-
-/datum/topic_state/air_alarm
- var/obj/machinery/computer/atmoscontrol/atmos_control = null
- var/obj/machinery/alarm/air_alarm = null
-
-/datum/topic_state/air_alarm/href_list(var/mob/user)
- var/list/extra_href = list()
- extra_href["remote_connection"] = 1
- extra_href["remote_access"] = user && (user.isAI() || atmos_control.allowed(user) || atmos_control.emagged || air_alarm.rcon_setting == RCON_YES || (air_alarm.alarm_area.atmosalm && air_alarm.rcon_setting == RCON_AUTO))
-
- return extra_href
+/obj/machinery/computer/atmoscontrol/ui_interact(var/mob/user)
+ if(!atmos_control)
+ atmos_control = new(src, req_access, req_one_access, monitored_alarm_ids)
+ atmos_control.ui_interact(user)
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 c6a30995d2..ea479e44b7 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/medical.dm b/code/game/machinery/computer3/computers/medical.dm
index adb7ff9079..4e88b91c88 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 b58b4a3517..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,7 +308,7 @@
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
@@ -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"
@@ -399,7 +399,7 @@
visible_message("\The [initial(name)] hums and hisses as it moves [occupant.real_name] into storage.", 3)
// Delete the mob.
- del(occupant)
+ qdel(occupant)
set_occupant(null)
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 c56c416a74..4ebc32b38e 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))
@@ -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 0b03d4c040..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,7 +70,7 @@
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)
. = ..()
@@ -231,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 362753cac8..9ad1fd2123 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/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..48565d0c77 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)
@@ -205,11 +205,11 @@ datum/track/New(var/title_name, var/audio)
var/area/main_area = get_area(src)
for(var/area/related_area in main_area.related)
- related_area.forced_ambience = sound(current_track.sound, channel = 1, repeat = 1, volume = 25)
+ related_area.forced_ambience = list(current_track.sound)
for(var/mob/living/M in mobs_in_area(related_area))
if(M.mind)
- related_area.play_ambience(related_area)
+ related_area.play_ambience(M)
playing = 1
update_use_power(2)
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 38de38daa9..23efb8ab4c 100644
--- a/code/game/machinery/kitchen/microwave.dm
+++ b/code/game/machinery/kitchen/microwave.dm
@@ -353,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 d601146c18..1c57b14a90 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -49,7 +49,7 @@ Class Variables:
Class Procs:
New() 'game/machinery/machine.dm'
- Del() 'game/machinery/machine.dm'
+ Destroy() 'game/machinery/machine.dm'
auto_use_power() 'game/machinery/machine.dm'
This proc determines how power mode power is deducted by the machine.
@@ -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,7 +331,7 @@ Class Procs:
if(I.reliability != 100 && crit_fail)
I.crit_fail = 1
I.loc = loc
- del(src)
+ qdel(src)
return 1
/obj/machinery/proc/on_assess_perp(mob/living/carbon/human/perp)
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:"}
updateDialog()
-
-
-
+/obj/machinery/navbeacon/Destroy()
+ if(radio_controller)
+ radio_controller.remove_object(src, freq)
+ ..()
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index c902bdcd66..6d823e23fe 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -180,7 +180,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
src.update_icon() //for any custom ones on the map...
..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that
-/obj/machinery/newscaster/Del()
+/obj/machinery/newscaster/Destroy()
allCasters -= src
..()
@@ -223,12 +223,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
/obj/machinery/newscaster/ex_act(severity)
switch(severity)
if(1.0)
- del(src)
+ qdel(src)
return
if(2.0)
src.isbroken=1
if(prob(50))
- del(src)
+ qdel(src)
else
src.update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in.
return
@@ -784,7 +784,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
photo_data.photo.loc = src.loc
if(!issilicon(user))
user.put_in_inactive_hand(photo_data.photo)
- del(photo_data)
+ qdel(photo_data)
if(istype(user.get_active_hand(), /obj/item/weapon/photo))
var/obj/item/photo = user.get_active_hand()
diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm
index d13f18c3e9..2fb1c721d3 100644
--- a/code/game/machinery/nuclear_bomb.dm
+++ b/code/game/machinery/nuclear_bomb.dm
@@ -423,7 +423,7 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
return
return
-/obj/item/weapon/disk/nuclear/Del()
+/obj/item/weapon/disk/nuclear/Destroy()
if(blobstart.len > 0)
var/obj/D = new /obj/item/weapon/disk/nuclear(pick(blobstart))
message_admins("[src] has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).")
diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm
index de67e7cea1..cb80bd20af 100644
--- a/code/game/machinery/overview.dm
+++ b/code/game/machinery/overview.dm
@@ -180,8 +180,8 @@
HI.Insert(I, frame=1, delay = 5)
HI.Insert(J, frame=2, delay = 5)
- del(I)
- del(J)
+ qdel(I)
+ qdel(J)
H.icon = HI
H.layer = 25
usr.mapobjs += H
@@ -306,7 +306,7 @@
var/icon/I = imap[i+1]
H.icon = I
- del(I)
+ qdel(I)
H.layer = 25
usr.mapobjs += H
@@ -353,7 +353,7 @@ proc/getb(col)
/mob/proc/clearmap()
src.client.screen -= src.mapobjs
for(var/obj/screen/O in mapobjs)
- del(O)
+ qdel(O)
mapobjs = null
src.unset_machine()
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index 637bcbee11..9bee0af72f 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -1149,7 +1149,7 @@ Buildable meters
"[user] fastens the [src].", \
"\blue You have fastened the [src].", \
"You hear ratchet.")
- del(src) // remove the pipe item
+ qdel(src) // remove the pipe item
return
//TODO: DEFERRED
@@ -1177,7 +1177,7 @@ Buildable meters
new/obj/machinery/meter( src.loc )
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user << "\blue You have fastened the meter to the pipe"
- del(src)
+ qdel(src)
//not sure why these are necessary
#undef PIPE_SIMPLE_STRAIGHT
#undef PIPE_SIMPLE_BENT
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index fb296d2409..6b8793eac7 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -103,7 +103,7 @@
if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter))
usr << "\blue You put [W] back to [src]."
user.drop_item()
- del(W)
+ qdel(W)
return
else if (istype(W, /obj/item/weapon/wrench))
if (unwrenched==0)
@@ -145,7 +145,7 @@
//Allow you to push disposal pipes into it (for those with density 1)
/obj/machinery/pipedispenser/disposal/Crossed(var/obj/structure/disposalconstruct/pipe as obj)
if(istype(pipe) && !pipe.anchored)
- del(pipe)
+ qdel(pipe)
Nah
*/
@@ -161,7 +161,7 @@ Nah
if (pipe.anchored)
return
- del(pipe)
+ qdel(pipe)
/obj/machinery/pipedispenser/disposal/attack_hand(user as mob)
if(..())
diff --git a/code/game/machinery/portable_tag_turret.dm b/code/game/machinery/portable_tag_turret.dm
index 1965d10243..f3939e89dc 100644
--- a/code/game/machinery/portable_tag_turret.dm
+++ b/code/game/machinery/portable_tag_turret.dm
@@ -82,13 +82,13 @@
if(lasercolor == "b" && disabled == 0)
if(istype(Proj, /obj/item/weapon/gun/energy/lasertag/red))
disabled = 1
- del(Proj) // qdel
+ qdel(Proj)
sleep(100)
disabled = 0
if(lasercolor == "r" && disabled == 0)
if(istype(Proj, /obj/item/weapon/gun/energy/lasertag/blue))
disabled = 1
- del(Proj) // qdel
+ qdel(Proj)
sleep(100)
disabled = 0
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 3ad643c360..3444d3ea7e 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -145,9 +145,9 @@
else
icon_state = "grey_target_prism"
-/obj/machinery/porta_turret/Del()
+/obj/machinery/porta_turret/Destroy()
//deletes its own cover with it
- del(cover) // qdel
+ qdel(cover)
..()
/obj/machinery/porta_turret/proc/isLocked(mob/user)
@@ -271,7 +271,7 @@
new /obj/item/device/assembly/prox_sensor(loc)
else
user << "You remove the turret but did not manage to salvage anything."
- del(src) // qdel
+ qdel(src) // qdel
if(istype(I, /obj/item/weapon/card/emag) && !emagged)
//Emagging the turret makes it go bonkers and stun everyone. It also makes
@@ -317,7 +317,7 @@
user << "You unsecure the exterior bolts on the turret."
invisibility = 0
update_icon()
- del(cover) //deletes the cover, and the turret instance itself becomes its own cover. - qdel
+ qdel(cover) //deletes the cover, and the turret instance itself becomes its own cover.
wrenching = 0
else if(istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda))
@@ -387,10 +387,10 @@
/obj/machinery/porta_turret/ex_act(severity)
switch (severity)
if (1)
- del(src)
+ qdel(src)
if (2)
if (prob(25))
- del(src)
+ qdel(src)
else
take_damage(150) //should instakill most turrets
if (3)
@@ -404,7 +404,7 @@
spark_system.start() //creates some sparks because they look cool
density = 1
update_icon()
- del(cover) //deletes the cover - no need on keeping it there! - del
+ qdel(cover) //deletes the cover - no need on keeping it there!
/obj/machinery/porta_turret/proc/create_cover()
if(cover == null && anchored)
@@ -418,7 +418,7 @@
if(cover == null && anchored) //if it has no cover and is anchored
if(stat & BROKEN) //if the turret is borked
- del(cover) //delete its cover, assuming it has one. Workaround for a pesky little bug - qdel
+ qdel(cover) //delete its cover, assuming it has one. Workaround for a pesky little bug
else
create_cover()
@@ -671,7 +671,7 @@
playsound(loc, 'sound/items/Crowbar.ogg', 75, 1)
user << "You dismantle the turret construction."
new /obj/item/stack/sheet/metal( loc, 5)
- del(src) // qdel
+ qdel(src) // qdel
return
if(1)
@@ -736,7 +736,7 @@
target_type = /obj/machinery/porta_turret
build_step = 4
- del(I) //delete the gun :( qdel
+ qdel(I) //delete the gun :(
return
else if(istype(I, /obj/item/weapon/wrench))
@@ -752,7 +752,7 @@
user << "\the [I] is stuck to your hand, you cannot put it in \the [src]"
return
user << "You add the prox sensor to the turret."
- del(I) // qdel
+ qdel(I)
return
//attack_hand() removes the gun
@@ -807,7 +807,7 @@
// Turret.cover=new/obj/machinery/porta_turret_cover(loc)
// Turret.cover.Parent_Turret=Turret
// Turret.cover.name = finish_name
- del(src) // qdel
+ qdel(src) // qdel
else if(istype(I, /obj/item/weapon/crowbar))
playsound(loc, 'sound/items/Crowbar.ogg', 75, 1)
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index e624e61d58..a563806714 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -80,37 +80,48 @@ var/list/obj/machinery/requests_console/allConsoles = list()
//req_console_departments += department
switch(departmentType)
if(1)
- if(!("[department]" in req_console_assistance))
- req_console_assistance += department
+ req_console_assistance |= department
if(2)
- if(!("[department]" in req_console_supplies))
- req_console_supplies += department
+ req_console_supplies |= department
if(3)
- if(!("[department]" in req_console_information))
- req_console_information += department
+ req_console_information |= department
if(4)
- if(!("[department]" in req_console_assistance))
- req_console_assistance += department
- if(!("[department]" in req_console_supplies))
- req_console_supplies += department
+ req_console_assistance |= department
+ req_console_supplies |= department
if(5)
- if(!("[department]" in req_console_assistance))
- req_console_assistance += department
- if(!("[department]" in req_console_information))
- req_console_information += department
+ req_console_assistance |= department
+ req_console_information |= department
if(6)
- if(!("[department]" in req_console_supplies))
- req_console_supplies += department
- if(!("[department]" in req_console_information))
- req_console_information += department
+ req_console_supplies |= department
+ req_console_information |= department
if(7)
- if(!("[department]" in req_console_assistance))
- req_console_assistance += department
- if(!("[department]" in req_console_supplies))
- req_console_supplies += department
- if(!("[department]" in req_console_information))
- req_console_information += department
+ req_console_assistance |= department
+ req_console_supplies |= department
+ req_console_information |= department
+/obj/machinery/requests_console/Destroy()
+ allConsoles -= src
+ switch(departmentType)
+ if(1)
+ req_console_assistance -= department
+ if(2)
+ req_console_supplies -= department
+ if(3)
+ req_console_information -= department
+ if(4)
+ req_console_assistance -= department
+ req_console_supplies -= department
+ if(5)
+ req_console_assistance -= department
+ req_console_information -= department
+ if(6)
+ req_console_supplies -= department
+ req_console_information -= department
+ if(7)
+ req_console_assistance -= department
+ req_console_supplies -= department
+ req_console_information -= department
+ ..()
/obj/machinery/requests_console/attack_hand(user as mob)
if(..(user))
diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm
index 4418586e9d..e9a2081fb2 100644
--- a/code/game/machinery/seed_extractor.dm
+++ b/code/game/machinery/seed_extractor.dm
@@ -31,7 +31,7 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
else
user << "[O] doesn't seem to have any usable seeds inside it."
- del(O)
+ qdel(O)
//Grass.
else if(istype(O, /obj/item/stack/tile/grass))
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 8d7ed7fccc..cf67c4d01f 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -45,6 +45,11 @@
var/const/STATUS_DISPLAY_TIME = 4
var/const/STATUS_DISPLAY_CUSTOM = 99
+/obj/machinery/status_display/Destroy()
+ if(radio_controller)
+ radio_controller.remove_object(src,frequency)
+ ..()
+
// register for radio system
/obj/machinery/status_display/initialize()
..()
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index e6686f532e..d45cade6c5 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -76,12 +76,12 @@
if(1.0)
if(prob(50))
src.dump_everything() //So suits dont survive all the time
- del(src)
+ qdel(src)
return
if(2.0)
if(prob(50))
src.dump_everything()
- del(src)
+ qdel(src)
return
else
return
@@ -465,7 +465,7 @@
src.update_icon()
// for(var/obj/O in src)
-// del(O)
+// qdel(O)
src.add_fingerprint(usr)
src.updateUsrDialog()
@@ -511,7 +511,7 @@
//for(var/obj/O in src)
// O.loc = src.loc
src.add_fingerprint(user)
- del(G)
+ qdel(G)
src.updateUsrDialog()
src.update_icon()
return
@@ -612,10 +612,10 @@
wires = new(src)
target_department = departments[1]
target_species = species[1]
- if(!target_department || !target_species) del(src)
+ if(!target_department || !target_species) qdel(src)
-/obj/machinery/suit_cycler/Del()
- del(wires) // qdel
+/obj/machinery/suit_cycler/Destroy()
+ qdel(wires)
wires = null
..()
@@ -696,7 +696,7 @@
src.occupant = M
src.add_fingerprint(user)
- del(G)
+ qdel(G)
src.updateUsrDialog()
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index 957f7bf536..fb4a03d21f 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -95,7 +95,7 @@
if(surplus() < 1500)
if(user) user << "The connected wire doesn't have enough current."
return
- for(var/obj/machinery/singularity/singulo in world)
+ for(var/obj/singularity/singulo in world)
if(singulo.z == z)
singulo.target = src
icon_state = "[icontype]1"
@@ -106,7 +106,7 @@
/obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null)
- for(var/obj/machinery/singularity/singulo in world)
+ for(var/obj/singularity/singulo in world)
if(singulo.target == src)
singulo.target = null
icon_state = "[icontype]0"
@@ -149,7 +149,7 @@
return
-/obj/machinery/power/singularity_beacon/Del()
+/obj/machinery/power/singularity_beacon/Destroy()
if(active)
Deactivate()
..()
diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm
index 5a3caafa26..c6fee28b40 100644
--- a/code/game/machinery/telecomms/broadcaster.dm
+++ b/code/game/machinery/telecomms/broadcaster.dm
@@ -98,7 +98,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
/* --- Do a snazzy animation! --- */
flick("broadcaster_send", src)
-/obj/machinery/telecomms/broadcaster/Del()
+/obj/machinery/telecomms/broadcaster/Destroy()
// In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore.
if(message_delay)
message_delay = 0
diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm
index 6dd5586fd8..9b92c39ee2 100644
--- a/code/game/machinery/telecomms/logbrowser.dm
+++ b/code/game/machinery/telecomms/logbrowser.dm
@@ -96,7 +96,7 @@
race = "Unidentifiable"
language = race
- del(M)
+ qdel(M)
// -- If the orator is a human, or universal translate is active, OR mob has universal speech on --
@@ -189,7 +189,7 @@
temp = "- DELETED ENTRY: [D.name] -"
SelectedServer.log_entries.Remove(D)
- del(D)
+ qdel(D)
else
temp = "- FAILED: NO SELECTED MACHINE -"
@@ -227,7 +227,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( src.loc )
@@ -238,7 +238,7 @@
A.state = 4
A.icon_state = "4"
A.anchored = 1
- del(src)
+ qdel(src)
else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 581ae59ab4..15c627420f 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -1,404 +1,404 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
-
-
-/*
-
- All telecommunications interactions:
-
-*/
-
-#define STATION_Z 1
-#define TELECOMM_Z 3
-
-/obj/machinery/telecomms
- var/temp = "" // output message
- var/construct_op = 0
-
-
-/obj/machinery/telecomms/attackby(obj/item/P as obj, mob/user as mob)
-
- // Using a multitool lets you access the receiver's interface
- if(istype(P, /obj/item/device/multitool))
- attack_hand(user)
-
-
- // REPAIRING: Use Nanopaste to repair 10-20 integrity points.
- if(istype(P, /obj/item/stack/nanopaste))
- var/obj/item/stack/nanopaste/T = P
- if (integrity < 100) //Damaged, let's repair!
- if (T.use(1))
- integrity = between(0, integrity + rand(10,20), 100)
- usr << "You apply the Nanopaste to [src], repairing some of the damage."
- else
- usr << "This machine is already in perfect condition."
- return
-
-
- switch(construct_op)
- if(0)
- if(istype(P, /obj/item/weapon/screwdriver))
- user << "You unfasten the bolts."
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- construct_op ++
- if(1)
- if(istype(P, /obj/item/weapon/screwdriver))
- user << "You fasten the bolts."
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- construct_op --
- if(istype(P, /obj/item/weapon/wrench))
- user << "You dislodge the external plating."
- playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
- construct_op ++
- if(2)
- if(istype(P, /obj/item/weapon/wrench))
- user << "You secure the external plating."
- playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
- construct_op --
- if(istype(P, /obj/item/weapon/wirecutters))
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
- user << "You remove the cables."
- construct_op ++
- var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( user.loc )
- A.amount = 5
- stat |= BROKEN // the machine's been borked!
- if(3)
- if(istype(P, /obj/item/stack/cable_coil))
- var/obj/item/stack/cable_coil/A = P
- if (A.use(5))
- user << "You insert the cables."
- construct_op--
- stat &= ~BROKEN // the machine's not borked anymore!
- else
- user << "You need five coils of wire for this."
- if(istype(P, /obj/item/weapon/crowbar))
- user << "You begin prying out the circuit board other components..."
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- if(do_after(user,60))
- user << "You finish prying out the components."
-
- // Drop all the component stuff
- if(contents.len > 0)
- for(var/obj/x in src)
- x.loc = user.loc
- else
-
- // If the machine wasn't made during runtime, probably doesn't have components:
- // manually find the components and drop them!
- var/newpath = text2path(circuitboard)
- var/obj/item/weapon/circuitboard/C = new newpath
- for(var/I in C.req_components)
- for(var/i = 1, i <= C.req_components[I], i++)
- newpath = text2path(I)
- var/obj/item/s = new newpath
- s.loc = user.loc
- if(istype(P, /obj/item/stack/cable_coil))
- var/obj/item/stack/cable_coil/A = P
- A.amount = 1
-
- // Drop a circuit board too
- C.loc = user.loc
-
- // Create a machine frame and delete the current machine
- var/obj/machinery/constructable_frame/machine_frame/F = new
- F.loc = src.loc
- del(src)
-
-
-/obj/machinery/telecomms/attack_ai(var/mob/user as mob)
- attack_hand(user)
-
-/obj/machinery/telecomms/attack_hand(var/mob/user as mob)
-
- // You need a multitool to use this, or be silicon
- if(!issilicon(user))
- // istype returns false if the value is null
- if(!istype(user.get_active_hand(), /obj/item/device/multitool))
- return
-
- if(stat & (BROKEN|NOPOWER))
- return
-
- var/obj/item/device/multitool/P = get_multitool(user)
-
- user.set_machine(src)
- var/dat
- dat = "[src.name][src.name] Access
"
- dat += "
[temp]
"
- dat += "
Power Status: [src.toggled ? "On" : "Off"]"
- if(on && toggled)
- if(id != "" && id)
- dat += "
Identification String: [id]"
- else
- dat += "
Identification String: NULL"
- dat += "
Network: [network]"
- dat += "
Prefabrication: [autolinkers.len ? "TRUE" : "FALSE"]"
- if(hide) dat += "
Shadow Link: ACTIVE
"
-
- //Show additional options for certain machines.
- dat += Options_Menu()
-
- dat += "
Linked Network Entities: "
-
- var/i = 0
- for(var/obj/machinery/telecomms/T in links)
- i++
- if(T.hide && !src.hide)
- continue
- dat += "- \ref[T] [T.name] ([T.id]) \[X\]
"
- dat += "
"
-
- dat += "
Filtering Frequencies: "
-
- i = 0
- if(length(freq_listening))
- for(var/x in freq_listening)
- i++
- if(i < length(freq_listening))
- dat += "[format_frequency(x)] GHz\[X\]; "
- else
- dat += "[format_frequency(x)] GHz\[X\]"
- else
- dat += "NONE"
-
- dat += "
\[Add Filter\]"
- dat += "
"
-
- if(P)
- if(P.buffer)
- dat += "
MULTITOOL BUFFER: [P.buffer] ([P.buffer.id]) \[Link\] \[Flush\]"
- else
- dat += "
MULTITOOL BUFFER: \[Add Machine\]"
-
- dat += ""
- temp = ""
- user << browse(dat, "window=tcommachine;size=520x500;can_resize=0")
- onclose(user, "dormitory")
-
-
-// Off-Site Relays
-//
-// You are able to send/receive signals from the station's z level (changeable in the STATION_Z #define) if
-// the relay is on the telecomm satellite (changable in the TELECOMM_Z #define)
-
-
-/obj/machinery/telecomms/relay/proc/toggle_level()
-
- var/turf/position = get_turf(src)
-
- // Toggle on/off getting signals from the station or the current Z level
- if(src.listening_level == STATION_Z) // equals the station
- src.listening_level = position.z
- return 1
- else if(position.z == TELECOMM_Z)
- src.listening_level = STATION_Z
- return 1
- return 0
-
-// Returns a multitool from a user depending on their mobtype.
-
-/obj/machinery/telecomms/proc/get_multitool(mob/user as mob)
-
- var/obj/item/device/multitool/P = null
- // Let's double check
- if(!issilicon(user) && istype(user.get_active_hand(), /obj/item/device/multitool))
- P = user.get_active_hand()
- else if(isAI(user))
- var/mob/living/silicon/ai/U = user
- P = U.aiMulti
- else if(isrobot(user) && in_range(user, src))
- if(istype(user.get_active_hand(), /obj/item/device/multitool))
- P = user.get_active_hand()
- return P
-
-// Additional Options for certain machines. Use this when you want to add an option to a specific machine.
-// Example of how to use below.
-
-/obj/machinery/telecomms/proc/Options_Menu()
- return ""
-
-/*
-// Add an option to the processor to switch processing mode. (COMPRESS -> UNCOMPRESS or UNCOMPRESS -> COMPRESS)
-/obj/machinery/telecomms/processor/Options_Menu()
- var/dat = "
Processing Mode: [process_mode ? "UNCOMPRESS" : "COMPRESS"]"
- return dat
-*/
-// The topic for Additional Options. Use this for checking href links for your specific option.
-// Example of how to use below.
-/obj/machinery/telecomms/proc/Options_Topic(href, href_list)
- return
-
-/*
-/obj/machinery/telecomms/processor/Options_Topic(href, href_list)
-
- if(href_list["process"])
- temp = "-% Processing mode changed. %-"
- src.process_mode = !src.process_mode
-*/
-
-// RELAY
-
-/obj/machinery/telecomms/relay/Options_Menu()
- var/dat = ""
- if(src.z == TELECOMM_Z)
- dat += "
Signal Locked to Station: [listening_level == STATION_Z ? "TRUE" : "FALSE"]"
- dat += "
Broadcasting: [broadcasting ? "YES" : "NO"]"
- dat += "
Receiving: [receiving ? "YES" : "NO"]"
- return dat
-
-/obj/machinery/telecomms/relay/Options_Topic(href, href_list)
-
- if(href_list["receive"])
- receiving = !receiving
- temp = "-% Receiving mode changed. %-"
- if(href_list["broadcast"])
- broadcasting = !broadcasting
- temp = "-% Broadcasting mode changed. %-"
- if(href_list["change_listening"])
- //Lock to the station OR lock to the current position!
- //You need at least two receivers and two broadcasters for this to work, this includes the machine.
- var/result = toggle_level()
- if(result)
- temp = "-% [src]'s signal has been successfully changed."
- else
- temp = "-% [src] could not lock it's signal onto the station. Two broadcasters or receivers required."
-
-// BUS
-
-/obj/machinery/telecomms/bus/Options_Menu()
- var/dat = "
Change Signal Frequency: [change_frequency ? "YES ([change_frequency])" : "NO"]"
- return dat
-
-/obj/machinery/telecomms/bus/Options_Topic(href, href_list)
-
- if(href_list["change_freq"])
-
- var/newfreq = input(usr, "Specify a new frequency for new signals to change to. Enter null to turn off frequency changing. Decimals assigned automatically.", src, network) as null|num
- if(canAccess(usr))
- if(newfreq)
- if(findtext(num2text(newfreq), "."))
- newfreq *= 10 // shift the decimal one place
- if(newfreq < 10000)
- change_frequency = newfreq
- temp = "-% New frequency to change to assigned: \"[newfreq] GHz\" %-"
- else
- change_frequency = 0
- temp = "-% Frequency changing deactivated %-"
-
-
-/obj/machinery/telecomms/Topic(href, href_list)
-
- if(!issilicon(usr))
- if(!istype(usr.get_active_hand(), /obj/item/device/multitool))
- return
-
- if(stat & (BROKEN|NOPOWER))
- return
-
- var/obj/item/device/multitool/P = get_multitool(usr)
-
- if(href_list["input"])
- switch(href_list["input"])
-
- if("toggle")
-
- src.toggled = !src.toggled
- temp = "-% [src] has been [src.toggled ? "activated" : "deactivated"]."
- update_power()
-
- /*
- if("hide")
- src.hide = !hide
- temp = "-% Shadow Link has been [src.hide ? "activated" : "deactivated"]."
- */
-
- if("id")
- var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID for this machine", src, id) as null|text),1,MAX_MESSAGE_LEN)
- if(newid && canAccess(usr))
- id = newid
- temp = "-% New ID assigned: \"[id]\" %-"
-
- if("network")
- var/newnet = input(usr, "Specify the new network for this machine. This will break all current links.", src, network) as null|text
- if(newnet && canAccess(usr))
-
- if(length(newnet) > 15)
- temp = "-% Too many characters in new network tag %-"
-
- else
- for(var/obj/machinery/telecomms/T in links)
- T.links.Remove(src)
-
- network = newnet
- links = list()
- temp = "-% New network tag assigned: \"[network]\" %-"
-
-
- if("freq")
- var/newfreq = input(usr, "Specify a new frequency to filter (GHz). Decimals assigned automatically.", src, network) as null|num
- if(newfreq && canAccess(usr))
- if(findtext(num2text(newfreq), "."))
- newfreq *= 10 // shift the decimal one place
- if(!(newfreq in freq_listening) && newfreq < 10000)
- freq_listening.Add(newfreq)
- temp = "-% New frequency filter assigned: \"[newfreq] GHz\" %-"
-
- if(href_list["delete"])
-
- // changed the layout about to workaround a pesky runtime -- Doohl
-
- var/x = text2num(href_list["delete"])
- temp = "-% Removed frequency filter [x] %-"
- freq_listening.Remove(x)
-
- if(href_list["unlink"])
-
- if(text2num(href_list["unlink"]) <= length(links))
- var/obj/machinery/telecomms/T = links[text2num(href_list["unlink"])]
- temp = "-% Removed \ref[T] [T.name] from linked entities. %-"
-
- // Remove link entries from both T and src.
-
- if(src in T.links)
- T.links.Remove(src)
- links.Remove(T)
-
- if(href_list["link"])
-
- if(P)
- if(P.buffer && P.buffer != src)
- if(!(src in P.buffer.links))
- P.buffer.links.Add(src)
-
- if(!(P.buffer in src.links))
- src.links.Add(P.buffer)
-
- temp = "-% Successfully linked with \ref[P.buffer] [P.buffer.name] %-"
-
- else
- temp = "-% Unable to acquire buffer %-"
-
- if(href_list["buffer"])
-
- P.buffer = src
- temp = "-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-"
-
-
- if(href_list["flush"])
-
- temp = "-% Buffer successfully flushed. %-"
- P.buffer = null
-
- src.Options_Topic(href, href_list)
-
- usr.set_machine(src)
- src.add_fingerprint(usr)
-
- updateUsrDialog()
-
-/obj/machinery/telecomms/proc/canAccess(var/mob/user)
- if(issilicon(user) || in_range(user, src))
- return 1
- return 0
-
-#undef TELECOMM_Z
-#undef STATION_Z
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
+
+
+/*
+
+ All telecommunications interactions:
+
+*/
+
+#define STATION_Z 1
+#define TELECOMM_Z 3
+
+/obj/machinery/telecomms
+ var/temp = "" // output message
+ var/construct_op = 0
+
+
+/obj/machinery/telecomms/attackby(obj/item/P as obj, mob/user as mob)
+
+ // Using a multitool lets you access the receiver's interface
+ if(istype(P, /obj/item/device/multitool))
+ attack_hand(user)
+
+
+ // REPAIRING: Use Nanopaste to repair 10-20 integrity points.
+ if(istype(P, /obj/item/stack/nanopaste))
+ var/obj/item/stack/nanopaste/T = P
+ if (integrity < 100) //Damaged, let's repair!
+ if (T.use(1))
+ integrity = between(0, integrity + rand(10,20), 100)
+ usr << "You apply the Nanopaste to [src], repairing some of the damage."
+ else
+ usr << "This machine is already in perfect condition."
+ return
+
+
+ switch(construct_op)
+ if(0)
+ if(istype(P, /obj/item/weapon/screwdriver))
+ user << "You unfasten the bolts."
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ construct_op ++
+ if(1)
+ if(istype(P, /obj/item/weapon/screwdriver))
+ user << "You fasten the bolts."
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ construct_op --
+ if(istype(P, /obj/item/weapon/wrench))
+ user << "You dislodge the external plating."
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ construct_op ++
+ if(2)
+ if(istype(P, /obj/item/weapon/wrench))
+ user << "You secure the external plating."
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ construct_op --
+ if(istype(P, /obj/item/weapon/wirecutters))
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ user << "You remove the cables."
+ construct_op ++
+ var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( user.loc )
+ A.amount = 5
+ stat |= BROKEN // the machine's been borked!
+ if(3)
+ if(istype(P, /obj/item/stack/cable_coil))
+ var/obj/item/stack/cable_coil/A = P
+ if (A.use(5))
+ user << "You insert the cables."
+ construct_op--
+ stat &= ~BROKEN // the machine's not borked anymore!
+ else
+ user << "You need five coils of wire for this."
+ if(istype(P, /obj/item/weapon/crowbar))
+ user << "You begin prying out the circuit board other components..."
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ if(do_after(user,60))
+ user << "You finish prying out the components."
+
+ // Drop all the component stuff
+ if(contents.len > 0)
+ for(var/obj/x in src)
+ x.loc = user.loc
+ else
+
+ // If the machine wasn't made during runtime, probably doesn't have components:
+ // manually find the components and drop them!
+ var/newpath = text2path(circuitboard)
+ var/obj/item/weapon/circuitboard/C = new newpath
+ for(var/I in C.req_components)
+ for(var/i = 1, i <= C.req_components[I], i++)
+ newpath = text2path(I)
+ var/obj/item/s = new newpath
+ s.loc = user.loc
+ if(istype(P, /obj/item/stack/cable_coil))
+ var/obj/item/stack/cable_coil/A = P
+ A.amount = 1
+
+ // Drop a circuit board too
+ C.loc = user.loc
+
+ // Create a machine frame and delete the current machine
+ var/obj/machinery/constructable_frame/machine_frame/F = new
+ F.loc = src.loc
+ qdel(src)
+
+
+/obj/machinery/telecomms/attack_ai(var/mob/user as mob)
+ attack_hand(user)
+
+/obj/machinery/telecomms/attack_hand(var/mob/user as mob)
+
+ // You need a multitool to use this, or be silicon
+ if(!issilicon(user))
+ // istype returns false if the value is null
+ if(!istype(user.get_active_hand(), /obj/item/device/multitool))
+ return
+
+ if(stat & (BROKEN|NOPOWER))
+ return
+
+ var/obj/item/device/multitool/P = get_multitool(user)
+
+ user.set_machine(src)
+ var/dat
+ dat = "[src.name][src.name] Access
"
+ dat += "
[temp]
"
+ dat += "
Power Status: [src.toggled ? "On" : "Off"]"
+ if(on && toggled)
+ if(id != "" && id)
+ dat += "
Identification String: [id]"
+ else
+ dat += "
Identification String: NULL"
+ dat += "
Network: [network]"
+ dat += "
Prefabrication: [autolinkers.len ? "TRUE" : "FALSE"]"
+ if(hide) dat += "
Shadow Link: ACTIVE"
+
+ //Show additional options for certain machines.
+ dat += Options_Menu()
+
+ dat += "
Linked Network Entities: "
+
+ var/i = 0
+ for(var/obj/machinery/telecomms/T in links)
+ i++
+ if(T.hide && !src.hide)
+ continue
+ dat += "- \ref[T] [T.name] ([T.id]) \[X\]
"
+ dat += "
"
+
+ dat += "
Filtering Frequencies: "
+
+ i = 0
+ if(length(freq_listening))
+ for(var/x in freq_listening)
+ i++
+ if(i < length(freq_listening))
+ dat += "[format_frequency(x)] GHz\[X\]; "
+ else
+ dat += "[format_frequency(x)] GHz\[X\]"
+ else
+ dat += "NONE"
+
+ dat += "
\[Add Filter\]"
+ dat += "
"
+
+ if(P)
+ if(P.buffer)
+ dat += "
MULTITOOL BUFFER: [P.buffer] ([P.buffer.id]) \[Link\] \[Flush\]"
+ else
+ dat += "
MULTITOOL BUFFER: \[Add Machine\]"
+
+ dat += ""
+ temp = ""
+ user << browse(dat, "window=tcommachine;size=520x500;can_resize=0")
+ onclose(user, "dormitory")
+
+
+// Off-Site Relays
+//
+// You are able to send/receive signals from the station's z level (changeable in the STATION_Z #define) if
+// the relay is on the telecomm satellite (changable in the TELECOMM_Z #define)
+
+
+/obj/machinery/telecomms/relay/proc/toggle_level()
+
+ var/turf/position = get_turf(src)
+
+ // Toggle on/off getting signals from the station or the current Z level
+ if(src.listening_level == STATION_Z) // equals the station
+ src.listening_level = position.z
+ return 1
+ else if(position.z == TELECOMM_Z)
+ src.listening_level = STATION_Z
+ return 1
+ return 0
+
+// Returns a multitool from a user depending on their mobtype.
+
+/obj/machinery/telecomms/proc/get_multitool(mob/user as mob)
+
+ var/obj/item/device/multitool/P = null
+ // Let's double check
+ if(!issilicon(user) && istype(user.get_active_hand(), /obj/item/device/multitool))
+ P = user.get_active_hand()
+ else if(isAI(user))
+ var/mob/living/silicon/ai/U = user
+ P = U.aiMulti
+ else if(isrobot(user) && in_range(user, src))
+ if(istype(user.get_active_hand(), /obj/item/device/multitool))
+ P = user.get_active_hand()
+ return P
+
+// Additional Options for certain machines. Use this when you want to add an option to a specific machine.
+// Example of how to use below.
+
+/obj/machinery/telecomms/proc/Options_Menu()
+ return ""
+
+/*
+// Add an option to the processor to switch processing mode. (COMPRESS -> UNCOMPRESS or UNCOMPRESS -> COMPRESS)
+/obj/machinery/telecomms/processor/Options_Menu()
+ var/dat = "
Processing Mode: [process_mode ? "UNCOMPRESS" : "COMPRESS"]"
+ return dat
+*/
+// The topic for Additional Options. Use this for checking href links for your specific option.
+// Example of how to use below.
+/obj/machinery/telecomms/proc/Options_Topic(href, href_list)
+ return
+
+/*
+/obj/machinery/telecomms/processor/Options_Topic(href, href_list)
+
+ if(href_list["process"])
+ temp = "-% Processing mode changed. %-"
+ src.process_mode = !src.process_mode
+*/
+
+// RELAY
+
+/obj/machinery/telecomms/relay/Options_Menu()
+ var/dat = ""
+ if(src.z == TELECOMM_Z)
+ dat += "
Signal Locked to Station: [listening_level == STATION_Z ? "TRUE" : "FALSE"]"
+ dat += "
Broadcasting: [broadcasting ? "YES" : "NO"]"
+ dat += "
Receiving: [receiving ? "YES" : "NO"]"
+ return dat
+
+/obj/machinery/telecomms/relay/Options_Topic(href, href_list)
+
+ if(href_list["receive"])
+ receiving = !receiving
+ temp = "-% Receiving mode changed. %-"
+ if(href_list["broadcast"])
+ broadcasting = !broadcasting
+ temp = "-% Broadcasting mode changed. %-"
+ if(href_list["change_listening"])
+ //Lock to the station OR lock to the current position!
+ //You need at least two receivers and two broadcasters for this to work, this includes the machine.
+ var/result = toggle_level()
+ if(result)
+ temp = "-% [src]'s signal has been successfully changed."
+ else
+ temp = "-% [src] could not lock it's signal onto the station. Two broadcasters or receivers required."
+
+// BUS
+
+/obj/machinery/telecomms/bus/Options_Menu()
+ var/dat = "
Change Signal Frequency: [change_frequency ? "YES ([change_frequency])" : "NO"]"
+ return dat
+
+/obj/machinery/telecomms/bus/Options_Topic(href, href_list)
+
+ if(href_list["change_freq"])
+
+ var/newfreq = input(usr, "Specify a new frequency for new signals to change to. Enter null to turn off frequency changing. Decimals assigned automatically.", src, network) as null|num
+ if(canAccess(usr))
+ if(newfreq)
+ if(findtext(num2text(newfreq), "."))
+ newfreq *= 10 // shift the decimal one place
+ if(newfreq < 10000)
+ change_frequency = newfreq
+ temp = "-% New frequency to change to assigned: \"[newfreq] GHz\" %-"
+ else
+ change_frequency = 0
+ temp = "-% Frequency changing deactivated %-"
+
+
+/obj/machinery/telecomms/Topic(href, href_list)
+
+ if(!issilicon(usr))
+ if(!istype(usr.get_active_hand(), /obj/item/device/multitool))
+ return
+
+ if(stat & (BROKEN|NOPOWER))
+ return
+
+ var/obj/item/device/multitool/P = get_multitool(usr)
+
+ if(href_list["input"])
+ switch(href_list["input"])
+
+ if("toggle")
+
+ src.toggled = !src.toggled
+ temp = "-% [src] has been [src.toggled ? "activated" : "deactivated"]."
+ update_power()
+
+ /*
+ if("hide")
+ src.hide = !hide
+ temp = "-% Shadow Link has been [src.hide ? "activated" : "deactivated"]."
+ */
+
+ if("id")
+ var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID for this machine", src, id) as null|text),1,MAX_MESSAGE_LEN)
+ if(newid && canAccess(usr))
+ id = newid
+ temp = "-% New ID assigned: \"[id]\" %-"
+
+ if("network")
+ var/newnet = input(usr, "Specify the new network for this machine. This will break all current links.", src, network) as null|text
+ if(newnet && canAccess(usr))
+
+ if(length(newnet) > 15)
+ temp = "-% Too many characters in new network tag %-"
+
+ else
+ for(var/obj/machinery/telecomms/T in links)
+ T.links.Remove(src)
+
+ network = newnet
+ links = list()
+ temp = "-% New network tag assigned: \"[network]\" %-"
+
+
+ if("freq")
+ var/newfreq = input(usr, "Specify a new frequency to filter (GHz). Decimals assigned automatically.", src, network) as null|num
+ if(newfreq && canAccess(usr))
+ if(findtext(num2text(newfreq), "."))
+ newfreq *= 10 // shift the decimal one place
+ if(!(newfreq in freq_listening) && newfreq < 10000)
+ freq_listening.Add(newfreq)
+ temp = "-% New frequency filter assigned: \"[newfreq] GHz\" %-"
+
+ if(href_list["delete"])
+
+ // changed the layout about to workaround a pesky runtime -- Doohl
+
+ var/x = text2num(href_list["delete"])
+ temp = "-% Removed frequency filter [x] %-"
+ freq_listening.Remove(x)
+
+ if(href_list["unlink"])
+
+ if(text2num(href_list["unlink"]) <= length(links))
+ var/obj/machinery/telecomms/T = links[text2num(href_list["unlink"])]
+ temp = "-% Removed \ref[T] [T.name] from linked entities. %-"
+
+ // Remove link entries from both T and src.
+
+ if(src in T.links)
+ T.links.Remove(src)
+ links.Remove(T)
+
+ if(href_list["link"])
+
+ if(P)
+ if(P.buffer && P.buffer != src)
+ if(!(src in P.buffer.links))
+ P.buffer.links.Add(src)
+
+ if(!(P.buffer in src.links))
+ src.links.Add(P.buffer)
+
+ temp = "-% Successfully linked with \ref[P.buffer] [P.buffer.name] %-"
+
+ else
+ temp = "-% Unable to acquire buffer %-"
+
+ if(href_list["buffer"])
+
+ P.buffer = src
+ temp = "-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-"
+
+
+ if(href_list["flush"])
+
+ temp = "-% Buffer successfully flushed. %-"
+ P.buffer = null
+
+ src.Options_Topic(href, href_list)
+
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+
+ updateUsrDialog()
+
+/obj/machinery/telecomms/proc/canAccess(var/mob/user)
+ if(issilicon(user) || in_range(user, src))
+ return 1
+ return 0
+
+#undef TELECOMM_Z
+#undef STATION_Z
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index fe638408fc..4bca127857 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -130,9 +130,11 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
for(var/obj/machinery/telecomms/T in telecomms_list)
add_link(T)
-
-/obj/machinery/telecomms/Del()
+/obj/machinery/telecomms/Destroy()
telecomms_list -= src
+ for(var/obj/machinery/telecomms/comm in telecomms_list)
+ comm.links -= src
+ links = list()
..()
// Used in auto linking
diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm
index ea313e0052..a0f7b351ef 100644
--- a/code/game/machinery/telecomms/telemonitor.dm
+++ b/code/game/machinery/telecomms/telemonitor.dm
@@ -1,158 +1,158 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
-
-
-/*
- Telecomms monitor tracks the overall trafficing of a telecommunications network
- and displays a heirarchy of linked machines.
-*/
-
-
-/obj/machinery/computer/telecomms/monitor
- name = "Telecommunications Monitor"
- icon_state = "comm_monitor"
-
- var/screen = 0 // the screen number:
- var/list/machinelist = list() // the machines located by the computer
- var/obj/machinery/telecomms/SelectedMachine
-
- var/network = "NULL" // the network to probe
-
- var/temp = "" // temporary feedback messages
-
- attack_hand(mob/user as mob)
- if(stat & (BROKEN|NOPOWER))
- return
- user.set_machine(src)
- var/dat = "Telecommunications MonitorTelecommunications Monitor"
-
- switch(screen)
-
-
- // --- Main Menu ---
-
- if(0)
- dat += "
[temp]
"
- dat += "
Current Network: [network]
"
- if(machinelist.len)
- dat += "
Detected Network Entities:"
- for(var/obj/machinery/telecomms/T in machinelist)
- dat += "- \ref[T] [T.name] ([T.id])
"
- dat += "
"
- dat += "
\[Flush Buffer\]"
- else
- dat += "\[Probe Network\]"
-
-
- // --- Viewing Machine ---
-
- if(1)
- dat += "
[temp]
"
- dat += "\[Main Menu\]"
- dat += "
Current Network: [network]
"
- dat += "Selected Network Entity: [SelectedMachine.name] ([SelectedMachine.id])
"
- dat += "Linked Entities: "
- for(var/obj/machinery/telecomms/T in SelectedMachine.links)
- if(!T.hide)
- dat += "- \ref[T.id] [T.name] ([T.id])
"
- dat += "
"
-
-
-
- user << browse(dat, "window=comm_monitor;size=575x400")
- onclose(user, "server_control")
-
- temp = ""
- return
-
-
- Topic(href, href_list)
- if(..())
- return
-
-
- add_fingerprint(usr)
- usr.set_machine(src)
-
- if(href_list["viewmachine"])
- screen = 1
- for(var/obj/machinery/telecomms/T in machinelist)
- if(T.id == href_list["viewmachine"])
- SelectedMachine = T
- break
-
- if(href_list["operation"])
- switch(href_list["operation"])
-
- if("release")
- machinelist = list()
- screen = 0
-
- if("mainmenu")
- screen = 0
-
- if("probe")
- if(machinelist.len > 0)
- temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -"
-
- else
- for(var/obj/machinery/telecomms/T in range(25, src))
- if(T.network == network)
- machinelist.Add(T)
-
- if(!machinelist.len)
- temp = "- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -"
- else
- temp = "- [machinelist.len] ENTITIES LOCATED & BUFFERED -"
-
- screen = 0
-
-
- if(href_list["network"])
-
- var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text
- if(newnet && ((usr in range(1, src) || issilicon(usr))))
- if(length(newnet) > 15)
- temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -"
-
- else
- network = newnet
- screen = 0
- machinelist = list()
- temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -"
-
- updateUsrDialog()
- return
-
- attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
- if(istype(D, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- if (src.stat & BROKEN)
- user << "\blue The broken glass falls out."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
- var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 3
- A.icon_state = "3"
- A.anchored = 1
- del(src)
- else
- user << "\blue You disconnect the monitor."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 4
- A.icon_state = "4"
- A.anchored = 1
- del(src)
- else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "\blue You you disable the security protocols"
- src.updateUsrDialog()
- return
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
+
+
+/*
+ Telecomms monitor tracks the overall trafficing of a telecommunications network
+ and displays a heirarchy of linked machines.
+*/
+
+
+/obj/machinery/computer/telecomms/monitor
+ name = "Telecommunications Monitor"
+ icon_state = "comm_monitor"
+
+ var/screen = 0 // the screen number:
+ var/list/machinelist = list() // the machines located by the computer
+ var/obj/machinery/telecomms/SelectedMachine
+
+ var/network = "NULL" // the network to probe
+
+ var/temp = "" // temporary feedback messages
+
+ attack_hand(mob/user as mob)
+ if(stat & (BROKEN|NOPOWER))
+ return
+ user.set_machine(src)
+ var/dat = "Telecommunications MonitorTelecommunications Monitor"
+
+ switch(screen)
+
+
+ // --- Main Menu ---
+
+ if(0)
+ dat += "
[temp]
"
+ dat += "
Current Network: [network]
"
+ if(machinelist.len)
+ dat += "
Detected Network Entities:"
+ for(var/obj/machinery/telecomms/T in machinelist)
+ dat += "- \ref[T] [T.name] ([T.id])
"
+ dat += "
"
+ dat += "
\[Flush Buffer\]"
+ else
+ dat += "\[Probe Network\]"
+
+
+ // --- Viewing Machine ---
+
+ if(1)
+ dat += "
[temp]
"
+ dat += "\[Main Menu\]"
+ dat += "
Current Network: [network]
"
+ dat += "Selected Network Entity: [SelectedMachine.name] ([SelectedMachine.id])
"
+ dat += "Linked Entities: "
+ for(var/obj/machinery/telecomms/T in SelectedMachine.links)
+ if(!T.hide)
+ dat += "- \ref[T.id] [T.name] ([T.id])
"
+ dat += "
"
+
+
+
+ user << browse(dat, "window=comm_monitor;size=575x400")
+ onclose(user, "server_control")
+
+ temp = ""
+ return
+
+
+ Topic(href, href_list)
+ if(..())
+ return
+
+
+ add_fingerprint(usr)
+ usr.set_machine(src)
+
+ if(href_list["viewmachine"])
+ screen = 1
+ for(var/obj/machinery/telecomms/T in machinelist)
+ if(T.id == href_list["viewmachine"])
+ SelectedMachine = T
+ break
+
+ if(href_list["operation"])
+ switch(href_list["operation"])
+
+ if("release")
+ machinelist = list()
+ screen = 0
+
+ if("mainmenu")
+ screen = 0
+
+ if("probe")
+ if(machinelist.len > 0)
+ temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -"
+
+ else
+ for(var/obj/machinery/telecomms/T in range(25, src))
+ if(T.network == network)
+ machinelist.Add(T)
+
+ if(!machinelist.len)
+ temp = "- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -"
+ else
+ temp = "- [machinelist.len] ENTITIES LOCATED & BUFFERED -"
+
+ screen = 0
+
+
+ if(href_list["network"])
+
+ var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text
+ if(newnet && ((usr in range(1, src) || issilicon(usr))))
+ if(length(newnet) > 15)
+ temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -"
+
+ else
+ network = newnet
+ screen = 0
+ machinelist = list()
+ temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -"
+
+ updateUsrDialog()
+ return
+
+ attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
+ if(istype(D, /obj/item/weapon/screwdriver))
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ if (src.stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
+ new /obj/item/weapon/shard( src.loc )
+ var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 3
+ A.icon_state = "3"
+ A.anchored = 1
+ qdel(src)
+ else
+ user << "\blue You disconnect the monitor."
+ var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
+ var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 4
+ A.icon_state = "4"
+ A.anchored = 1
+ qdel(src)
+ else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ emagged = 1
+ user << "\blue You you disable the security protocols"
+ src.updateUsrDialog()
+ return
diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm
index 226c47229e..287577626c 100644
--- a/code/game/machinery/telecomms/traffic_control.dm
+++ b/code/game/machinery/telecomms/traffic_control.dm
@@ -1,241 +1,241 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
-
-
-
-
-
-/obj/machinery/computer/telecomms/traffic
- name = "Telecommunications Traffic Control"
- icon_state = "computer_generic"
-
- var/screen = 0 // the screen number:
- var/list/servers = list() // the servers located by the computer
- var/mob/editingcode
- var/mob/lasteditor
- var/list/viewingcode = list()
- var/obj/machinery/telecomms/server/SelectedServer
-
- var/network = "NULL" // the network to probe
- var/temp = "" // temporary feedback messages
-
- var/storedcode = "" // code stored
-
-
- proc/update_ide()
-
- // loop if there's someone manning the keyboard
- while(editingcode)
- if(!editingcode.client)
- editingcode = null
- break
-
- // For the typer, the input is enabled. Buffer the typed text
- if(editingcode)
- storedcode = "[winget(editingcode, "tcscode", "text")]"
- if(editingcode) // double if's to work around a runtime error
- winset(editingcode, "tcscode", "is-disabled=false")
-
- // If the player's not manning the keyboard anymore, adjust everything
- if( (!(editingcode in range(1, src)) && !issilicon(editingcode)) || (editingcode.machine != src && !issilicon(editingcode)))
- if(editingcode)
- winshow(editingcode, "Telecomms IDE", 0) // hide the window!
- editingcode = null
- break
-
- // For other people viewing the typer type code, the input is disabled and they can only view the code
- // (this is put in place so that there's not any magical shenanigans with 50 people inputting different code all at once)
-
- if(length(viewingcode))
- // This piece of code is very important - it escapes quotation marks so string aren't cut off by the input element
- var/showcode = replacetext(storedcode, "\\\"", "\\\\\"")
- showcode = replacetext(storedcode, "\"", "\\\"")
-
- for(var/mob/M in viewingcode)
-
- if( (M.machine == src && M in view(1, src) ) || issilicon(M))
- winset(M, "tcscode", "is-disabled=true")
- winset(M, "tcscode", "text=\"[showcode]\"")
- else
- viewingcode.Remove(M)
- winshow(M, "Telecomms IDE", 0) // hide the window!
-
- sleep(5)
-
- if(length(viewingcode) > 0)
- editingcode = pick(viewingcode)
- viewingcode.Remove(editingcode)
- update_ide()
-
-
-
- req_access = list(access_tcomsat)
-
- attack_hand(mob/user as mob)
- if(stat & (BROKEN|NOPOWER))
- return
- user.set_machine(src)
- var/dat = "Telecommunication Traffic ControlTelecommunications Traffic Control"
-
- switch(screen)
-
-
- // --- Main Menu ---
-
- if(0)
- dat += "
[temp]
"
- dat += "
Current Network: [network]
"
- if(servers.len)
- dat += "
Detected Telecommunication Servers:"
- for(var/obj/machinery/telecomms/T in servers)
- dat += "- \ref[T] [T.name] ([T.id])
"
- dat += "
"
- dat += "
\[Flush Buffer\]"
-
- else
- dat += "
No servers detected. Scan for servers: \[Scan\]"
-
-
- // --- Viewing Server ---
-
- if(1)
- dat += "
[temp]
"
- dat += "\[Main Menu\] \[Refresh\]"
- dat += "
Current Network: [network]"
- dat += "
Selected Server: [SelectedServer.id]
"
- dat += "
\[Edit Code\]"
- dat += "
Signal Execution: "
- if(SelectedServer.autoruncode)
- dat += "ALWAYS"
- else
- dat += "NEVER"
-
-
- user << browse(dat, "window=traffic_control;size=575x400")
- onclose(user, "server_control")
-
- temp = ""
- return
-
-
- Topic(href, href_list)
- if(..())
- return
-
-
- add_fingerprint(usr)
- usr.set_machine(src)
- if(!src.allowed(usr) && !emagged)
- usr << "\red ACCESS DENIED."
- return
-
- if(href_list["viewserver"])
- screen = 1
- for(var/obj/machinery/telecomms/T in servers)
- if(T.id == href_list["viewserver"])
- SelectedServer = T
- break
-
- if(href_list["operation"])
- switch(href_list["operation"])
-
- if("release")
- servers = list()
- screen = 0
-
- if("mainmenu")
- screen = 0
-
- if("scan")
- if(servers.len > 0)
- temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -"
-
- else
- for(var/obj/machinery/telecomms/server/T in range(25, src))
- if(T.network == network)
- servers.Add(T)
-
- if(!servers.len)
- temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -"
- else
- temp = "- [servers.len] SERVERS PROBED & BUFFERED -"
-
- screen = 0
-
- if("editcode")
- if(editingcode == usr) return
- if(usr in viewingcode) return
-
- if(!editingcode)
- lasteditor = usr
- editingcode = usr
- winshow(editingcode, "Telecomms IDE", 1) // show the IDE
- winset(editingcode, "tcscode", "is-disabled=false")
- winset(editingcode, "tcscode", "text=\"\"")
- var/showcode = replacetext(storedcode, "\\\"", "\\\\\"")
- showcode = replacetext(storedcode, "\"", "\\\"")
- winset(editingcode, "tcscode", "text=\"[showcode]\"")
- spawn()
- update_ide()
-
- else
- viewingcode.Add(usr)
- winshow(usr, "Telecomms IDE", 1) // show the IDE
- winset(usr, "tcscode", "is-disabled=true")
- winset(editingcode, "tcscode", "text=\"\"")
- var/showcode = replacetext(storedcode, "\"", "\\\"")
- winset(usr, "tcscode", "text=\"[showcode]\"")
-
- if("togglerun")
- SelectedServer.autoruncode = !(SelectedServer.autoruncode)
-
- if(href_list["network"])
-
- var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text
-
- if(newnet && ((usr in range(1, src) || issilicon(usr))))
- if(length(newnet) > 15)
- temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -"
-
- else
-
- network = newnet
- screen = 0
- servers = list()
- temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -"
-
- updateUsrDialog()
- return
-
- attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
- if(istype(D, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- if (src.stat & BROKEN)
- user << "\blue The broken glass falls out."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
- var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 3
- A.icon_state = "3"
- A.anchored = 1
- del(src)
- else
- user << "\blue You disconnect the monitor."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 4
- A.icon_state = "4"
- A.anchored = 1
- del(src)
- else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "\blue You you disable the security protocols"
- src.updateUsrDialog()
- return
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
+
+
+
+
+
+/obj/machinery/computer/telecomms/traffic
+ name = "Telecommunications Traffic Control"
+ icon_state = "computer_generic"
+
+ var/screen = 0 // the screen number:
+ var/list/servers = list() // the servers located by the computer
+ var/mob/editingcode
+ var/mob/lasteditor
+ var/list/viewingcode = list()
+ var/obj/machinery/telecomms/server/SelectedServer
+
+ var/network = "NULL" // the network to probe
+ var/temp = "" // temporary feedback messages
+
+ var/storedcode = "" // code stored
+
+
+ proc/update_ide()
+
+ // loop if there's someone manning the keyboard
+ while(editingcode)
+ if(!editingcode.client)
+ editingcode = null
+ break
+
+ // For the typer, the input is enabled. Buffer the typed text
+ if(editingcode)
+ storedcode = "[winget(editingcode, "tcscode", "text")]"
+ if(editingcode) // double if's to work around a runtime error
+ winset(editingcode, "tcscode", "is-disabled=false")
+
+ // If the player's not manning the keyboard anymore, adjust everything
+ if( (!(editingcode in range(1, src)) && !issilicon(editingcode)) || (editingcode.machine != src && !issilicon(editingcode)))
+ if(editingcode)
+ winshow(editingcode, "Telecomms IDE", 0) // hide the window!
+ editingcode = null
+ break
+
+ // For other people viewing the typer type code, the input is disabled and they can only view the code
+ // (this is put in place so that there's not any magical shenanigans with 50 people inputting different code all at once)
+
+ if(length(viewingcode))
+ // This piece of code is very important - it escapes quotation marks so string aren't cut off by the input element
+ var/showcode = replacetext(storedcode, "\\\"", "\\\\\"")
+ showcode = replacetext(storedcode, "\"", "\\\"")
+
+ for(var/mob/M in viewingcode)
+
+ if( (M.machine == src && M in view(1, src) ) || issilicon(M))
+ winset(M, "tcscode", "is-disabled=true")
+ winset(M, "tcscode", "text=\"[showcode]\"")
+ else
+ viewingcode.Remove(M)
+ winshow(M, "Telecomms IDE", 0) // hide the window!
+
+ sleep(5)
+
+ if(length(viewingcode) > 0)
+ editingcode = pick(viewingcode)
+ viewingcode.Remove(editingcode)
+ update_ide()
+
+
+
+ req_access = list(access_tcomsat)
+
+ attack_hand(mob/user as mob)
+ if(stat & (BROKEN|NOPOWER))
+ return
+ user.set_machine(src)
+ var/dat = "Telecommunication Traffic ControlTelecommunications Traffic Control"
+
+ switch(screen)
+
+
+ // --- Main Menu ---
+
+ if(0)
+ dat += "
[temp]
"
+ dat += "
Current Network: [network]
"
+ if(servers.len)
+ dat += "
Detected Telecommunication Servers:"
+ for(var/obj/machinery/telecomms/T in servers)
+ dat += "- \ref[T] [T.name] ([T.id])
"
+ dat += "
"
+ dat += "
\[Flush Buffer\]"
+
+ else
+ dat += "
No servers detected. Scan for servers: \[Scan\]"
+
+
+ // --- Viewing Server ---
+
+ if(1)
+ dat += "
[temp]
"
+ dat += "\[Main Menu\] \[Refresh\]"
+ dat += "
Current Network: [network]"
+ dat += "
Selected Server: [SelectedServer.id]
"
+ dat += "
\[Edit Code\]"
+ dat += "
Signal Execution: "
+ if(SelectedServer.autoruncode)
+ dat += "ALWAYS"
+ else
+ dat += "NEVER"
+
+
+ user << browse(dat, "window=traffic_control;size=575x400")
+ onclose(user, "server_control")
+
+ temp = ""
+ return
+
+
+ Topic(href, href_list)
+ if(..())
+ return
+
+
+ add_fingerprint(usr)
+ usr.set_machine(src)
+ if(!src.allowed(usr) && !emagged)
+ usr << "\red ACCESS DENIED."
+ return
+
+ if(href_list["viewserver"])
+ screen = 1
+ for(var/obj/machinery/telecomms/T in servers)
+ if(T.id == href_list["viewserver"])
+ SelectedServer = T
+ break
+
+ if(href_list["operation"])
+ switch(href_list["operation"])
+
+ if("release")
+ servers = list()
+ screen = 0
+
+ if("mainmenu")
+ screen = 0
+
+ if("scan")
+ if(servers.len > 0)
+ temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -"
+
+ else
+ for(var/obj/machinery/telecomms/server/T in range(25, src))
+ if(T.network == network)
+ servers.Add(T)
+
+ if(!servers.len)
+ temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -"
+ else
+ temp = "- [servers.len] SERVERS PROBED & BUFFERED -"
+
+ screen = 0
+
+ if("editcode")
+ if(editingcode == usr) return
+ if(usr in viewingcode) return
+
+ if(!editingcode)
+ lasteditor = usr
+ editingcode = usr
+ winshow(editingcode, "Telecomms IDE", 1) // show the IDE
+ winset(editingcode, "tcscode", "is-disabled=false")
+ winset(editingcode, "tcscode", "text=\"\"")
+ var/showcode = replacetext(storedcode, "\\\"", "\\\\\"")
+ showcode = replacetext(storedcode, "\"", "\\\"")
+ winset(editingcode, "tcscode", "text=\"[showcode]\"")
+ spawn()
+ update_ide()
+
+ else
+ viewingcode.Add(usr)
+ winshow(usr, "Telecomms IDE", 1) // show the IDE
+ winset(usr, "tcscode", "is-disabled=true")
+ winset(editingcode, "tcscode", "text=\"\"")
+ var/showcode = replacetext(storedcode, "\"", "\\\"")
+ winset(usr, "tcscode", "text=\"[showcode]\"")
+
+ if("togglerun")
+ SelectedServer.autoruncode = !(SelectedServer.autoruncode)
+
+ if(href_list["network"])
+
+ var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text
+
+ if(newnet && ((usr in range(1, src) || issilicon(usr))))
+ if(length(newnet) > 15)
+ temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -"
+
+ else
+
+ network = newnet
+ screen = 0
+ servers = list()
+ temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -"
+
+ updateUsrDialog()
+ return
+
+ attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
+ if(istype(D, /obj/item/weapon/screwdriver))
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ if (src.stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
+ new /obj/item/weapon/shard( src.loc )
+ var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 3
+ A.icon_state = "3"
+ A.anchored = 1
+ qdel(src)
+ else
+ user << "\blue You disconnect the monitor."
+ var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
+ var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 4
+ A.icon_state = "4"
+ A.anchored = 1
+ qdel(src)
+ else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ emagged = 1
+ user << "\blue You you disable the security protocols"
+ src.updateUsrDialog()
+ return
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 9e68791df0..b1d45a4840 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -57,7 +57,7 @@
usr << "You insert the coordinates into the machine."
usr << "A message flashes across the screen reminding the traveller that the nuclear authentication disk is to remain on the station at all times."
user.drop_item()
- del(I)
+ qdel(I)
if(C.data == "Clown Land")
//whoops
@@ -216,7 +216,7 @@
/*
/proc/do_teleport(atom/movable/M as mob|obj, atom/destination, precision)
if(istype(M, /obj/effect))
- del(M)
+ qdel(M)
return
if (istype(M, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks get teleported --NeoFite
for(var/mob/O in viewers(M, null))
diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm
index 46ea8824e6..0f68d16f77 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -37,7 +37,7 @@
lethal = 1
icon_state = "control_kill"
-/obj/machinery/turretid/Del()
+/obj/machinery/turretid/Destroy()
if(control_area)
var/area/A = control_area
if(A && istype(A))
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index 965210ae15..f69a781dd7 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -74,7 +74,7 @@
/obj/machinery/turret/proc/take_damage(damage)
src.health -= damage
if(src.health<=0)
- del src
+ qdel(src)
return
/obj/machinery/turret/attack_hand(var/mob/living/carbon/human/user)
@@ -105,7 +105,7 @@
/obj/machinery/turret/proc/update_health()
if(src.health<=0)
- del src
+ qdel(src)
return
/obj/machinery/turretcover
@@ -305,7 +305,7 @@
src.health -= Proj.damage
..()
if(prob(45) && Proj.damage > 0) src.spark_system.start()
- del (Proj)
+ qdel (Proj)
if (src.health <= 0)
src.die()
return
@@ -337,11 +337,11 @@
src.stat |= BROKEN
src.icon_state = "destroyed_target_prism"
if (cover!=null)
- del(cover)
+ qdel(cover)
sleep(3)
flick("explosion", src)
spawn(13)
- del(src)
+ qdel(src)
/obj/machinery/turret/attack_generic(var/mob/user, var/damage, var/attack_message)
if(!damage)
@@ -376,7 +376,7 @@
proc/take_damage(damage)
src.health -= damage
if(src.health<=0)
- del src
+ qdel(src)
return
@@ -389,15 +389,15 @@
ex_act()
- del src
+ qdel(src)
return
emp_act()
- del src
+ qdel(src)
return
meteorhit()
- del src
+ qdel(src)
return
attack_hand(mob/user as mob)
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 794fb0a887..81529cf804 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -21,7 +21,7 @@
if(!name)
var/atom/tmp = new path
src.product_name = initial(tmp.name)
- del(tmp)
+ qdel(tmp)
else
src.product_name = name
@@ -143,22 +143,21 @@
src.product_records.Add(product)
-/obj/machinery/vending/Del()
- del(wires) // qdel
+/obj/machinery/vending/Destroy()
+ qdel(wires)
wires = null
- if(coin)
- del(coin) // qdel
- coin = null
+ qdel(coin)
+ coin = null
..()
/obj/machinery/vending/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))
@@ -173,7 +172,7 @@
if (prob(50))
spawn(0)
src.malfunction()
- del(src)
+ qdel(src)
return
return
@@ -251,7 +250,7 @@
for(var/datum/data/vending_product/R in product_records)
if(istype(W, R.product_path))
stock(R, user)
- del(W)
+ qdel(W)
else
..()
@@ -278,7 +277,7 @@
if(cashmoney_bundle.worth <= 0)
usr.drop_from_inventory(cashmoney_bundle)
- del(cashmoney_bundle)
+ qdel(cashmoney_bundle)
else
cashmoney_bundle.update_icon()
else
@@ -290,7 +289,7 @@
visible_message("\The [usr] inserts a bill into \the [src].")
var/left = cashmoney.worth - currently_vending.price
usr.drop_from_inventory(cashmoney)
- del(cashmoney)
+ qdel(cashmoney)
if(left)
spawn_money(left, src.loc, user)
@@ -533,10 +532,10 @@
user << "\blue You successfully pull the coin out before \the [src] could swallow it."
else
user << "\blue You weren't able to pull the coin out fast enough, the machine ate it, string and all."
- del(coin)
+ qdel(coin)
categories &= ~CAT_COIN
else
- del(coin)
+ qdel(coin)
categories &= ~CAT_COIN
R.amount--
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 9e1e91935d..2f5916be67 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -50,8 +50,8 @@
for(var/obj/item/stack/sheet/hairlesshide/HH in contents)
var/obj/item/stack/sheet/wetleather/WL = new(src)
WL.amount = HH.amount
- del(HH)
-
+ qdel(HH)
+
if( locate(/mob,contents) )
state = 7
gibs_ready = 1
@@ -91,7 +91,7 @@
var/obj/item/weapon/grab/G = W
if(ishuman(G.assailant) && iscorgi(G.affecting))
G.affecting.loc = src
- del(G)
+ qdel(G)
state = 3
else
..()
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm
index d7e64c1ece..bf23e579f3 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/game/mecha/combat/marauder.dm
@@ -63,7 +63,7 @@
if(equipment.len)//Now to remove it and equip anew.
for(ME in equipment)
equipment -= ME
- del(ME)
+ qdel(ME)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src)
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive(src)
@@ -76,6 +76,10 @@
ME.attach(src)
return
+/obj/mecha/combat/marauder/Destroy()
+ qdel(smoke_system)
+ ..()
+
/obj/mecha/combat/marauder/relaymove(mob/user,direction)
if(user != src.occupant) //While not "realistic", this piece is player friendly.
user.loc = get_turf(src)
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index 2a6e2b6214..f53533828b 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -59,7 +59,7 @@
else
chassis.occupant << sound('sound/mecha/critdestr.ogg',volume=50)
spawn
- del src
+ qdel(src)
return
/obj/item/mecha_parts/mecha_equipment/proc/critfail()
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 08d6f2cca4..adf27da034 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -21,6 +21,10 @@
pr_mech_sleeper.set_delay(equip_cooldown)
return
+ Destroy()
+ qdel(pr_mech_sleeper)
+ ..()
+
allow_drop()
return 0
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 4d799ef928..d62554c3c0 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -216,7 +216,7 @@
for(var/a=0, a<5, a++)
spawn(0)
- var/obj/effect/effect/water/W = new /obj/effect/effect/water( get_turf(chassis) )
+ var/obj/effect/effect/water/W = PoolOrNew(/obj/effect/effect/water, get_turf(chassis))
var/turf/my_target = pick(the_targets)
var/datum/reagents/R = new/datum/reagents(5)
if(!W) return
@@ -236,7 +236,7 @@
W.reagents.reaction(atm)
if(W.loc == my_target) break
sleep(2)
- W.delete()
+ qdel(W)
return 1
get_equip_info()
@@ -295,7 +295,7 @@
if(do_after_cooldown(target))
if(disabled) return
chassis.spark_system.start()
- del(target)
+ qdel(target)
playsound(target, 'sound/items/Deconstruct.ogg', 50, 1)
chassis.use_power(energy_drain)
if(1)
@@ -418,7 +418,7 @@
do_after_cooldown()
src = null
spawn(rand(150,300))
- del(P)
+ qdel(P)
return
/obj/item/mecha_parts/mecha_equipment/gravcatapult
@@ -638,6 +638,11 @@
pr_repair_droid.set_delay(equip_cooldown)
return
+ Destroy()
+ qdel(pr_repair_droid)
+ pr_repair_droid = null
+ ..()
+
attach(obj/mecha/M as obj)
..()
droid_overlay = new(src.icon, icon_state = "repair_droid")
@@ -727,6 +732,11 @@
pr_energy_relay.set_delay(equip_cooldown)
return
+ Destroy()
+ qdel(pr_energy_relay)
+ pr_energy_relay = null
+ ..()
+
detach()
pr_energy_relay.stop()
// chassis.proc_res["dynusepower"] = null
@@ -843,6 +853,11 @@
init()
return
+ Destroy()
+ qdel(pr_mech_generator)
+ pr_mech_generator = null
+ ..()
+
proc/init()
fuel = new /obj/item/stack/sheet/mineral/phoron(src)
fuel.amount = 0
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 3d36efea9c..13d0600df4 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -113,7 +113,7 @@
A.bullet_act(src, def_zone)
src.life -= 10
if(life <= 0)
- del(src)
+ qdel(src)
return
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser
@@ -249,7 +249,7 @@
throw_impact(atom/hit_atom)
if(primed)
explosion(hit_atom, 0, 1, 2, 4)
- del(src)
+ qdel(src)
else
..()
return
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index f000499ffd..1468a03e03 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -193,9 +193,9 @@
if(time_coeff!=diff)
time_coeff = diff
-/obj/machinery/mecha_part_fabricator/Del()
+/obj/machinery/mecha_part_fabricator/Destroy()
for(var/atom/A in src)
- del A
+ qdel(A)
..()
return
@@ -268,7 +268,7 @@
if(!istype(apart)) return 0
for(var/obj/O in part_set)
if(O.type == apart.type)
- del apart
+ qdel(apart)
return 0
part_set[++part_set.len] = apart
return 1
@@ -749,7 +749,7 @@
res.Move(src.loc)
result = res.amount
else
- del res
+ qdel(res)
return result
@@ -795,7 +795,7 @@
if(src.resources["diamond"] >= 2000)
var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc)
G.amount = round(src.resources["diamond"] / G.perunit)
- del(src)
+ qdel(src)
return 1
else
user << "\red You can't load the [src.name] while it's opened."
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 45abb3d6ea..86d84b4527 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -82,6 +82,7 @@
/obj/mecha/New()
..()
events = new
+
icon_state += "-open"
add_radio()
add_cabin()
@@ -98,11 +99,60 @@
mechas_list += src //global mech list
return
-/obj/mecha/Del()
+/obj/mecha/Destroy()
src.go_out()
+ for(var/mob/M in src) //Let's just be ultra sure
+ M.Move(loc)
+
+ if(loc)
+ loc.Exited(src)
+ loc = null
+
+ if(prob(30))
+ explosion(get_turf(loc), 0, 0, 1, 3)
+
+ if(wreckage)
+ var/obj/effect/decal/mecha_wreckage/WR = new wreckage(loc)
+ for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
+ if(E.salvageable && prob(30))
+ WR.crowbar_salvage += E
+ E.forceMove(WR)
+ E.equip_ready = 1
+ E.reliability = round(rand(E.reliability/3,E.reliability))
+ else
+ E.forceMove(loc)
+ E.destroy()
+ if(cell)
+ WR.crowbar_salvage += cell
+ cell.forceMove(WR)
+ cell.charge = rand(0, cell.charge)
+ if(internal_tank)
+ WR.crowbar_salvage += internal_tank
+ internal_tank.forceMove(WR)
+ else
+ for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
+ E.detach(loc)
+ E.destroy()
+ if(cell)
+ qdel(cell)
+ if(internal_tank)
+ qdel(internal_tank)
+ equipment.Cut()
+ cell = null
+ internal_tank = null
+
+ qdel(pr_int_temp_processor)
+ qdel(pr_inertial_movement)
+ qdel(pr_give_air)
+ qdel(pr_internal_damage)
+ qdel(spark_system)
+ pr_int_temp_processor = null
+ pr_give_air = null
+ pr_internal_damage = null
+ spark_system = null
+
mechas_list -= src //global mech list
..()
- return
////////////////////////
////// Helpers /////////
@@ -452,7 +502,7 @@
if(src.health > 0)
src.spark_system.start()
else
- src.destroy()
+ qdel(src)
return
/obj/mecha/attack_hand(mob/user as mob)
@@ -555,52 +605,6 @@
Proj.on_hit(src)
return
-/obj/mecha/proc/destroy()
- spawn()
- go_out()
- var/turf/T = get_turf(src)
- tag = "\ref[src]" //better safe then sorry
- if(loc)
- loc.Exited(src)
- loc = null
- if(T)
- if(istype(src, /obj/mecha/working/ripley/))
- var/obj/mecha/working/ripley/R = src
- if(R.cargo)
- for(var/obj/O in R.cargo) //Dump contents of stored cargo
- O.loc = T
- R.cargo -= O
- T.Entered(O)
-
- if(prob(30))
- explosion(T, 0, 0, 1, 3)
- spawn(0)
- if(wreckage)
- var/obj/effect/decal/mecha_wreckage/WR = new wreckage(T)
- for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
- if(E.salvageable && prob(30))
- WR.crowbar_salvage += E
- E.forceMove(WR)
- E.equip_ready = 1
- E.reliability = round(rand(E.reliability/3,E.reliability))
- else
- E.forceMove(T)
- E.destroy()
- if(cell)
- WR.crowbar_salvage += cell
- cell.forceMove(WR)
- cell.charge = rand(0, cell.charge)
- if(internal_tank)
- WR.crowbar_salvage += internal_tank
- internal_tank.forceMove(WR)
- else
- for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
- E.forceMove(T)
- E.destroy()
- spawn(0)
- del(src)
- return
-
/obj/mecha/ex_act(severity)
src.log_message("Affected by explosion of severity: [severity].",1)
if(prob(src.deflect_chance))
@@ -608,16 +612,16 @@
src.log_append_to_last("Armor saved, changing severity to [severity].")
switch(severity)
if(1.0)
- src.destroy()
+ qdel(src)
if(2.0)
if (prob(30))
- src.destroy()
+ qdel(src)
else
src.take_damage(initial(src.health)/2)
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1)
if(3.0)
if (prob(5))
- src.destroy()
+ qdel(src)
else
src.take_damage(initial(src.health)/5)
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1)
@@ -831,7 +835,7 @@
src.reset_icon()
user.drop_item()
- del(P)
+ qdel(P)
else
call((proc_res["dynattackby"]||src), "dynattackby")(W,user)
@@ -1732,7 +1736,7 @@
AI.bruteloss = O.getBruteLoss()
AI.toxloss = O.toxloss
AI.updatehealth()
- del(O)
+ qdel(O)
if (!AI.stat)
AI.icon_state = "ai"
else
@@ -1840,7 +1844,7 @@
if(t_air)
t_air.merge(removed)
else //just delete the cabin gas, we're in space or some shit
- del(removed)
+ qdel(removed)
else
return stop()
return
@@ -1883,7 +1887,7 @@
if(mecha.loc && hascall(mecha.loc,"assume_air"))
mecha.loc.assume_air(leaked_gas)
else
- del(leaked_gas)
+ qdel(leaked_gas)
if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT))
if(mecha.get_charge())
mecha.spark_system.start()
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index 233415cba8..167b9f63d0 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -78,7 +78,7 @@
custom_action(step, atom/used_atom, mob/user)
user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
holder.overlays += used_atom.icon_state+"+o"
- del used_atom
+ qdel(used_atom)
return 1
action(atom/used_atom,mob/user as mob)
@@ -92,7 +92,7 @@
const_holder.density = 1
const_holder.overlays.len = 0
spawn()
- del src
+ qdel(src)
return
@@ -194,7 +194,7 @@
if(10)
if(diff==FORWARD)
user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "ripley5"
else
user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
@@ -210,7 +210,7 @@
if(8)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "ripley7"
else
user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
@@ -289,7 +289,7 @@
custom_action(step, atom/used_atom, mob/user)
user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
holder.overlays += used_atom.icon_state+"+o"
- del used_atom
+ qdel(used_atom)
return 1
action(atom/used_atom,mob/user as mob)
@@ -302,7 +302,7 @@
const_holder.icon_state = "gygax0"
const_holder.density = 1
spawn()
- del src
+ qdel(src)
return
@@ -428,7 +428,7 @@
if(16)
if(diff==FORWARD)
user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "gygax5"
else
user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
@@ -444,7 +444,7 @@
if(14)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "gygax7"
else
user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
@@ -460,7 +460,7 @@
if(12)
if(diff==FORWARD)
user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "gygax9"
else
user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
@@ -476,7 +476,7 @@
if(10)
if(diff==FORWARD)
user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "gygax11"
else
user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
@@ -492,7 +492,7 @@
if(8)
if(diff==FORWARD)
user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "gygax13"
else
user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.")
@@ -531,7 +531,7 @@
if(3)
if(diff==FORWARD)
user.visible_message("[user] installs Gygax Armour Plates to [holder].", "You install Gygax Armour Plates to [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "gygax18"
else
user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
@@ -570,7 +570,7 @@
user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
holder.overlays += used_atom.icon_state+"+o"
user.drop_item()
- del used_atom
+ qdel(used_atom)
return 1
action(atom/used_atom,mob/user as mob)
@@ -583,7 +583,7 @@
const_holder.icon_state = "fireripley0"
const_holder.density = 1
spawn()
- del src
+ qdel(src)
return
@@ -690,7 +690,7 @@
if(11)
if(diff==FORWARD)
user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "fireripley5"
else
user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
@@ -706,7 +706,7 @@
if(9)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "fireripley7"
else
user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
@@ -793,7 +793,7 @@
custom_action(step, atom/used_atom, mob/user)
user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
holder.overlays += used_atom.icon_state+"+o"
- del used_atom
+ qdel(used_atom)
return 1
action(atom/used_atom,mob/user as mob)
@@ -806,7 +806,7 @@
const_holder.icon_state = "durand0"
const_holder.density = 1
spawn()
- del src
+ qdel(src)
return
/datum/construction/reversible/mecha/durand
@@ -932,7 +932,7 @@
if(16)
if(diff==FORWARD)
user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "durand5"
else
user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
@@ -948,7 +948,7 @@
if(14)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "durand7"
else
user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
@@ -964,7 +964,7 @@
if(12)
if(diff==FORWARD)
user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "durand9"
else
user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
@@ -980,7 +980,7 @@
if(10)
if(diff==FORWARD)
user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "durand11"
else
user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
@@ -996,7 +996,7 @@
if(8)
if(diff==FORWARD)
user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "durand13"
else
user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.")
@@ -1035,7 +1035,7 @@
if(3)
if(diff==FORWARD)
user.visible_message("[user] installs Durand Armour Plates to [holder].", "You install Durand Armour Plates to [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "durand18"
else
user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
@@ -1075,7 +1075,7 @@
custom_action(step, atom/used_atom, mob/user)
user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
holder.overlays += used_atom.icon_state+"+o"
- del used_atom
+ qdel(used_atom)
return 1
action(atom/used_atom,mob/user as mob)
@@ -1096,7 +1096,7 @@
custom_action(step, atom/used_atom, mob/user)
user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
holder.overlays += used_atom.icon_state+"+o"
- del used_atom
+ qdel(used_atom)
return 1
action(atom/used_atom,mob/user as mob)
@@ -1109,7 +1109,7 @@
const_holder.icon_state = "odysseus0"
const_holder.density = 1
spawn()
- del src
+ qdel(src)
return
@@ -1211,7 +1211,7 @@
if(10)
if(diff==FORWARD)
user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "odysseus5"
else
user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
@@ -1227,7 +1227,7 @@
if(8)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
- del used_atom
+ qdel(used_atom)
holder.icon_state = "odysseus7"
else
user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index 8fa25a3568..ef254d5914 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -90,11 +90,11 @@
return answer
emp_act()
- del src
+ qdel(src)
return
ex_act()
- del src
+ qdel(src)
return
proc/in_mecha()
@@ -106,7 +106,7 @@
var/obj/mecha/M = in_mecha()
if(M)
M.emp_act(2)
- del(src)
+ qdel(src)
proc/get_mecha_log()
if(!src.in_mecha())
diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm
index 96b410959b..8bbeb03fd7 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -23,7 +23,7 @@
/obj/effect/decal/mecha_wreckage/ex_act(severity)
if(severity < 2)
spawn
- del src
+ qdel(src)
return
/obj/effect/decal/mecha_wreckage/bullet_act(var/obj/item/projectile/Proj)
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 5beb3c7244..c51a34adef 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -9,6 +9,16 @@
wreckage = /obj/effect/decal/mecha_wreckage/ripley
cargo_capacity = 10
+/obj/mecha/working/ripley/Destroy()
+ for(var/atom/movable/A in src.cargo)
+ A.loc = loc
+ var/turf/T = loc
+ if(istype(T))
+ T.Entered(A)
+ step_rand(A)
+ cargo.Cut()
+ ..()
+
/obj/mecha/working/ripley/firefighter
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
name = "APLU \"Firefighter\""
@@ -54,6 +64,6 @@
var/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/HC = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp
HC.attach(src)
for(var/obj/item/mecha_parts/mecha_tracking/B in src.contents)//Deletes the beacon so it can't be found easily
- del (B)
+ qdel (B)
diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm
index 1fa6d4f5ac..d9e876688f 100644
--- a/code/game/mecha/working/working.dm
+++ b/code/game/mecha/working/working.dm
@@ -10,7 +10,7 @@
new /obj/item/mecha_parts/mecha_tracking(src)
return
-/obj/mecha/working/Del()
+/obj/mecha/working/Destroy()
for(var/mob/M in src)
if(M==src.occupant)
continue
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index d64857d004..6b79db8f5b 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -15,10 +15,16 @@
if(can_buckle && istype(M))
user_buckle_mob(M, user)
+//Cleanup
/obj/Del()
unbuckle_mob()
return ..()
+/obj/Destroy()
+ unbuckle_mob()
+ return ..()
+
+
/obj/proc/buckle_mob(mob/living/M)
if(!can_buckle || !istype(M) || (M.loc != loc) || M.buckled || M.pinned.len || (buckle_require_restraints && !M.restrained()))
return 0
@@ -84,3 +90,4 @@
"You hear metal clanking.")
add_fingerprint(user)
return M
+
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index 840d779510..e6b166792f 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -46,7 +46,7 @@
var/turf/T = get_turf(src)
T.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
-/obj/effect/alien/resin/Del()
+/obj/effect/alien/resin/Destroy()
var/turf/T = get_turf(src)
T.thermal_conductivity = initial(T.thermal_conductivity)
..()
@@ -54,7 +54,7 @@
/obj/effect/alien/resin/proc/healthcheck()
if(health <=0)
density = 0
- del(src)
+ qdel(src)
return
/obj/effect/alien/resin/bullet_act(var/obj/item/projectile/Proj)
@@ -174,7 +174,7 @@
/obj/effect/alien/weeds/New(pos, node)
..()
if(istype(loc, /turf/space))
- del(src)
+ qdel(src)
return
linked_node = node
if(icon_state == "weeds")icon_state = pick("weeds", "weeds1", "weeds2")
@@ -190,7 +190,7 @@
if (locate(/obj/movable, U))
U = locate(/obj/movable, U)
if(U.density == 1)
- del(src)
+ qdel(src)
return
Alien plants should do something if theres a lot of poison
@@ -200,7 +200,7 @@ Alien plants should do something if theres a lot of poison
return
*/
if (istype(U, /turf/space))
- del(src)
+ qdel(src)
return
if(!linked_node || (get_dist(linked_node, src) > linked_node.node_range) )
@@ -220,19 +220,19 @@ Alien plants should do something if theres a lot of poison
if(O.density)
continue direction_loop
- new /obj/effect/alien/weeds(T, linked_node)
+ PoolOrNew(/obj/effect/alien/weeds, T, linked_node)
/obj/effect/alien/weeds/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/effect/alien/weeds/attackby(var/obj/item/weapon/W, var/mob/user)
@@ -255,7 +255,7 @@ Alien plants should do something if theres a lot of poison
/obj/effect/alien/weeds/proc/healthcheck()
if(health <= 0)
- del(src)
+ qdel(src)
/obj/effect/alien/weeds/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
@@ -294,7 +294,7 @@ Alien plants should do something if theres a lot of poison
/obj/effect/alien/acid/proc/tick()
if(!target)
- del(src)
+ qdel(src)
ticks += 1
@@ -307,8 +307,8 @@ Alien plants should do something if theres a lot of poison
var/turf/simulated/wall/W = target
W.dismantle_wall(1)
else
- del(target)
- del(src)
+ qdel(target)
+ qdel(src)
return
switch(target_strength - ticks)
@@ -350,7 +350,7 @@ Alien plants should do something if theres a lot of poison
spawn(rand(MIN_GROWTH_TIME,MAX_GROWTH_TIME))
Grow()
else
- del(src)
+ qdel(src)
/obj/effect/alien/egg/attack_hand(user as mob)
@@ -361,7 +361,7 @@ Alien plants should do something if theres a lot of poison
switch(status)
if(BURST)
user << "\red You clear the hatched egg."
- del(src)
+ qdel(src)
return
if(GROWING)
user << "\red The child is not developed yet."
diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm
index c4f693da15..9379234ca6 100644
--- a/code/game/objects/effects/bump_teleporter.dm
+++ b/code/game/objects/effects/bump_teleporter.dm
@@ -15,9 +15,9 @@ var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list()
..()
BUMP_TELEPORTERS += src
-/obj/effect/bump_teleporter/Del()
+/obj/effect/bump_teleporter/Destroy()
BUMP_TELEPORTERS -= src
- ..()
+ return ..()
/obj/effect/bump_teleporter/Bumped(atom/user)
if(!ismob(user))
diff --git a/code/game/objects/effects/chemsmoke.dm b/code/game/objects/effects/chemsmoke.dm
index e64a84c47c..6f68d2a14f 100644
--- a/code/game/objects/effects/chemsmoke.dm
+++ b/code/game/objects/effects/chemsmoke.dm
@@ -31,7 +31,7 @@
if(seed_name && plant_controller)
seed = plant_controller.seeds[seed_name]
if(!seed)
- del(src)
+ qdel(src)
..()
/datum/effect/effect/system/smoke_spread/chem/New()
@@ -204,7 +204,7 @@
if(passed_smoke)
smoke = passed_smoke
else
- smoke = new(location)
+ smoke = PoolOrNew(/obj/effect/effect/smoke/chem, location)
if(chemholder.reagents.reagent_list.len)
chemholder.reagents.copy_to(smoke, chemholder.reagents.total_volume / dist, safety = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents
@@ -218,10 +218,10 @@
sleep(150+rand(0,20)) // turning it off before it is deleted results in cleaner
smoke.opacity = 0 // lighting and view range updates
fadeOut(smoke)
- smoke.delete()
+ qdel(src)
/datum/effect/effect/system/smoke_spread/chem/spores/spawnSmoke(var/turf/T, var/icon/I, var/dist = 1)
- var/obj/effect/effect/smoke/chem/spores = new(location)
+ var/obj/effect/effect/smoke/chem/spores = PoolOrNew(/obj/effect/effect/smoke/chem, location)
spores.name = "cloud of [seed.seed_name] [seed.seed_noun]"
..(T, I, dist, spores)
diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm
index c9ea58b121..2bf3a2a574 100644
--- a/code/game/objects/effects/decals/Cleanable/fuel.dm
+++ b/code/game/objects/effects/decals/Cleanable/fuel.dm
@@ -25,7 +25,7 @@
if(!has_spread)
Spread()
else
- del(src)
+ qdel(src)
proc/Spread(exclude=list())
//Allows liquid fuels to sometimes flow into other tiles.
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index c6b3137806..b81089d9fb 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -21,10 +21,10 @@ var/global/list/image/splatter_cache=list()
var/list/datum/disease2/disease/virus2 = list()
var/amount = 5
-/obj/effect/decal/cleanable/blood/Del()
+/obj/effect/decal/cleanable/blood/Destroy()
for(var/datum/disease/D in viruses)
D.cure(0)
- ..()
+ return ..()
/obj/effect/decal/cleanable/blood/New()
..()
@@ -37,7 +37,7 @@ var/global/list/image/splatter_cache=list()
if(B != src)
if (B.blood_DNA)
blood_DNA |= B.blood_DNA.Copy()
- del(B)
+ qdel(B)
spawn(DRYING_TIME * (amount+1))
dry()
@@ -198,7 +198,7 @@ var/global/list/image/splatter_cache=list()
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
sleep(3)
if (i > 0)
- var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
+ var/obj/effect/decal/cleanable/blood/b = PoolOrNew(/obj/effect/decal/cleanable/blood/splatter, src.loc)
b.basecolor = src.basecolor
b.update_icon()
for(var/datum/disease/D in src.viruses)
diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm
index 4c85144d1e..74e2fa951f 100644
--- a/code/game/objects/effects/decals/Cleanable/misc.dm
+++ b/code/game/objects/effects/decals/Cleanable/misc.dm
@@ -21,14 +21,14 @@
var/turf/simulated/floor/F = get_turf(src)
if (istype(F))
F.dirt += 4
- del(src)
+ qdel(src)
/obj/effect/decal/cleanable/greenglow
New()
..()
spawn(1200)// 2 minutes
- del(src)
+ qdel(src)
/obj/effect/decal/cleanable/dirt
name = "dirt"
@@ -102,7 +102,7 @@
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
var/list/viruses = list()
- Del()
+ Destroy()
for(var/datum/disease/D in viruses)
D.cure(0)
..()
diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm
index 9d097f47a0..eac899d5b1 100644
--- a/code/game/objects/effects/decals/contraband.dm
+++ b/code/game/objects/effects/decals/contraband.dm
@@ -72,7 +72,7 @@
else
P.roll_and_drop(P.loc)
- del(oldsrc) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway
+ qdel(oldsrc) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway
//############################## THE ACTUAL DECALS ###########################
@@ -125,7 +125,7 @@
playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1)
if(ruined)
user << "You remove the remnants of the poster."
- del(src)
+ qdel(src)
else
user << "You carefully remove the poster from the wall."
roll_and_drop(user.loc)
@@ -154,7 +154,7 @@
var/obj/item/weapon/contraband/poster/P = new(src, serial_number)
P.loc = newloc
src.loc = P
- del(src)
+ qdel(src)
/datum/poster
// Name suffix. Poster - [name]
diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm
index dd786ddc0d..ff3c8d4a61 100644
--- a/code/game/objects/effects/decals/remains.dm
+++ b/code/game/objects/effects/decals/remains.dm
@@ -30,7 +30,7 @@
var/turf/simulated/floor/F = get_turf(src)
if (istype(F))
new /obj/effect/decal/cleanable/ash(F)
- del(src)
+ qdel(src)
/obj/effect/decal/remains/robot/attack_hand(mob/user as mob)
return
diff --git a/code/game/objects/effects/decals/warning_stripes.dm b/code/game/objects/effects/decals/warning_stripes.dm
index 89067ada2a..e22acfad74 100644
--- a/code/game/objects/effects/decals/warning_stripes.dm
+++ b/code/game/objects/effects/decals/warning_stripes.dm
@@ -1,9 +1,11 @@
-/obj/effect/decal/warning_stripes
- icon = 'icons/effects/warning_stripes.dmi'
- layer = 2
-
-/obj/effect/decal/warning_stripes/New()
- . = ..()
-
- loc.overlays += src
- del src
\ No newline at end of file
+/obj/effect/decal/warning_stripes
+ icon = 'icons/effects/warning_stripes.dmi'
+ layer = 2
+
+/obj/effect/decal/warning_stripes/New()
+ . = ..()
+ var/turf/T=get_turf(src)
+ var/image/I=image(icon, icon_state = icon_state, dir = dir)
+ I.color=color
+ T.overlays += I
+ qdel(src)
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index ea9af2f70f..29eb08f487 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -20,11 +20,10 @@ would spawn and follow the beaker, even if it is carried or thrown.
var/life = 15.0
mouse_opacity = 0
-/obj/effect/proc/delete()
- loc = null
+/obj/effect/Destroy()
if(reagents)
reagents.delete()
- return
+ return ..()
/obj/effect/effect/water/Move(turf/newloc)
//var/turf/T = src.loc
@@ -32,7 +31,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
// T.firelevel = 0 //TODO: FIX
if (--src.life < 1)
//SN src = null
- delete()
+ qdel(src)
if(newloc.density)
return 0
.=..()
@@ -100,7 +99,7 @@ steam.start() -- spawns the effect
spawn(0)
if(holder)
src.location = get_turf(holder)
- var/obj/effect/effect/steam/steam = new /obj/effect/effect/steam(src.location)
+ var/obj/effect/effect/steam/steam = PoolOrNew(/obj/effect/effect/steam, src.location)
var/direction
if(src.cardinals)
direction = pick(cardinal)
@@ -110,7 +109,7 @@ steam.start() -- spawns the effect
sleep(5)
step(steam,direction)
spawn(20)
- steam.delete()
+ qdel(steam)
/////////////////////////////////////////////
//SPARK SYSTEM (like steam system)
@@ -133,15 +132,14 @@ steam.start() -- spawns the effect
if (istype(T, /turf))
T.hotspot_expose(1000,100)
spawn (100)
- delete()
+ qdel(src)
return
-/obj/effect/effect/sparks/Del()
+/obj/effect/effect/sparks/Destroy()
var/turf/T = src.loc
if (istype(T, /turf))
T.hotspot_expose(1000,100)
- ..()
- return
+ return ..()
/obj/effect/effect/sparks/Move()
..()
@@ -171,7 +169,7 @@ steam.start() -- spawns the effect
spawn(0)
if(holder)
src.location = get_turf(holder)
- var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location)
+ var/obj/effect/effect/sparks/sparks = PoolOrNew(/obj/effect/effect/sparks, src.location)
src.total_sparks++
var/direction
if(src.cardinals)
@@ -183,7 +181,7 @@ steam.start() -- spawns the effect
step(sparks,direction)
spawn(20)
if(sparks)
- sparks.delete()
+ qdel(sparks)
src.total_sparks--
@@ -212,7 +210,7 @@ steam.start() -- spawns the effect
/obj/effect/effect/smoke/New()
..()
spawn (time_to_live)
- delete()
+ qdel(src)
return
/obj/effect/effect/smoke/Crossed(mob/living/carbon/M as mob )
@@ -357,7 +355,7 @@ steam.start() -- spawns the effect
spawn(0)
if(holder)
src.location = get_turf(holder)
- var/obj/effect/effect/smoke/smoke = new smoke_type(src.location)
+ var/obj/effect/effect/smoke/smoke = PoolOrNew(smoke_type, src.location)
src.total_smoke++
var/direction = src.direction
if(!direction)
@@ -369,7 +367,7 @@ steam.start() -- spawns the effect
sleep(10)
step(smoke,direction)
spawn(smoke.time_to_live*0.75+rand(10,30))
- if (smoke) smoke.delete()
+ if (smoke) qdel(smoke)
src.total_smoke--
@@ -415,13 +413,13 @@ steam.start() -- spawns the effect
var/turf/T = get_turf(src.holder)
if(T != src.oldposition)
if(istype(T, /turf/space))
- var/obj/effect/effect/ion_trails/I = new /obj/effect/effect/ion_trails(src.oldposition)
+ var/obj/effect/effect/ion_trails/I = PoolOrNew(/obj/effect/effect/ion_trails, src.oldposition)
src.oldposition = T
I.set_dir(src.holder.dir)
flick("ion_fade", I)
I.icon_state = "blank"
spawn( 20 )
- I.delete()
+ qdel(I)
spawn(2)
if(src.on)
src.processing = 1
@@ -461,12 +459,12 @@ steam.start() -- spawns the effect
src.processing = 0
spawn(0)
if(src.number < 3)
- var/obj/effect/effect/steam/I = new /obj/effect/effect/steam(src.oldposition)
+ var/obj/effect/effect/steam/I = PoolOrNew(/obj/effect/effect/steam, src.oldposition)
src.number++
src.oldposition = get_turf(holder)
I.set_dir(src.holder.dir)
spawn(10)
- I.delete()
+ qdel(I)
src.number--
spawn(2)
if(src.on)
@@ -515,13 +513,13 @@ steam.start() -- spawns the effect
sleep(30)
if(metal)
- var/obj/structure/foamedmetal/M = new(src.loc)
+ var/obj/structure/foamedmetal/M = PoolOrNew(/obj/structure/foamedmetal, src.loc)
M.metal = metal
M.updateicon()
flick("[icon_state]-disolve", src)
sleep(5)
- delete()
+ qdel(src)
return
// transfer any reagents to the floor
@@ -551,7 +549,7 @@ steam.start() -- spawns the effect
if(F)
continue
- F = new(T, metal)
+ F = PoolOrNew(/obj/effect/effect/foam, list(T, metal))
F.amount = amount
if(!metal)
F.create_reagents(10)
@@ -566,7 +564,7 @@ steam.start() -- spawns the effect
flick("[icon_state]-disolve", src)
spawn(5)
- delete()
+ qdel(src)
/obj/effect/effect/foam/Crossed(var/atom/movable/AM)
@@ -611,7 +609,7 @@ steam.start() -- spawns the effect
F.amount += amount
return
- F = new(src.location, metal)
+ F = PoolOrNew(/obj/effect/effect/foam, list(src.location, metal))
F.amount = amount
if(!metal) // don't carry other chemicals if a metal foam
@@ -642,7 +640,7 @@ steam.start() -- spawns the effect
- Del()
+ Destroy()
density = 0
update_nearby_tiles(1)
@@ -656,14 +654,14 @@ steam.start() -- spawns the effect
ex_act(severity)
- del(src)
+ qdel(src)
blob_act()
- del(src)
+ qdel(src)
bullet_act()
if(metal==1 || prob(50))
- del(src)
+ qdel(src)
attack_hand(var/mob/user)
if ((HULK in user.mutations) || (prob(75 - metal*25)))
@@ -672,7 +670,7 @@ steam.start() -- spawns the effect
if ((O.client && !( O.blinded )))
O << "\red [user] smashes through the foamed metal."
- del(src)
+ qdel(src)
else
user << "\blue You hit the metal foam but bounce off it."
return
@@ -686,8 +684,8 @@ steam.start() -- spawns the effect
for(var/mob/O in viewers(src))
if (O.client)
O << "\red [G.assailant] smashes [G.affecting] through the foamed metal wall."
- del(I)
- del(src)
+ qdel(I)
+ qdel(src)
return
if(prob(I.force*20 - metal*25))
@@ -695,7 +693,7 @@ steam.start() -- spawns the effect
for(var/mob/O in oviewers(user))
if ((O.client && !( O.blinded )))
O << "\red [user] smashes through the foamed metal."
- del(src)
+ qdel(src)
else
user << "\blue You hit the metal foam to no effect."
@@ -722,7 +720,7 @@ steam.start() -- spawns the effect
start()
if (amount <= 2)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ var/datum/effect/effect/system/spark_spread/s = PoolOrNew(/datum/effect/effect/system/spark_spread)
s.set_up(2, 1, location)
s.start()
diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm
index 808e46c2a3..a7f4c0482f 100644
--- a/code/game/objects/effects/gibs.dm
+++ b/code/game/objects/effects/gibs.dm
@@ -25,10 +25,10 @@
var/obj/effect/decal/cleanable/blood/gibs/gib = null
for(var/datum/disease/D in viruses)
if(D.spread_type == SPECIAL)
- del(D)
+ qdel(D)
if(sparks)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ var/datum/effect/effect/system/spark_spread/s = PoolOrNew(/datum/effect/effect/system/spark_spread)
s.set_up(2, 1, get_turf(location)) // Not sure if it's safe to pass an arbitrary object to set_up, todo
s.start()
@@ -63,4 +63,4 @@
if(directions.len)
gib.streak(directions)
- del(src)
\ No newline at end of file
+ qdel(src)
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index da25e6f2cc..6ca1045671 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -13,86 +13,77 @@
switch(name) //some of these are probably obsolete
if("shuttle")
shuttle_z = z
- del(src)
-
+ qdel(src)
+ return
if("airtunnel_stop")
airtunnel_stop = x
-
if("airtunnel_start")
airtunnel_start = x
-
if("airtunnel_bottom")
airtunnel_bottom = y
-
if("monkey")
monkeystart += loc
- del(src)
-
+ qdel(src)
+ return
if("start")
newplayer_start += loc
- del(src)
-
+ qdel(src)
if("JoinLate")
latejoin += loc
- del(src)
-
+ qdel(src)
if("JoinLateGateway")
latejoin_gateway += loc
- del(src)
-
+ qdel(src)
+ return
if("JoinLateCryo")
latejoin_cryo += loc
- del(src)
-
+ qdel(src)
+ return
if("JoinLateCyborg")
latejoin_cyborg += loc
- del(src)
-
+ qdel(src)
+ return
if("prisonwarp")
prisonwarp += loc
- del(src)
-
+ qdel(src)
+ return
if("Holding Facility")
holdingfacility += loc
-
if("tdome1")
tdome1 += loc
-
if("tdome2")
tdome2 += loc
-
if("tdomeadmin")
tdomeadmin += loc
-
if("tdomeobserve")
tdomeobserve += loc
-
if("prisonsecuritywarp")
prisonsecuritywarp += loc
- del(src)
-
+ qdel(src)
+ return
if("blobstart")
blobstart += loc
- del(src)
-
+ qdel(src)
+ return
if("xeno_spawn")
xeno_spawn += loc
- del(src)
-
+ qdel(src)
+ return
if("endgame_exit")
endgame_safespawns += loc
- del(src)
-
+ qdel(src)
+ return
if("bluespacerift")
endgame_exits += loc
- del(src)
+ qdel(src)
+ return
landmarks_list += src
return 1
-/obj/effect/landmark/Del()
+/obj/effect/landmark/Destroy()
landmarks_list -= src
- ..()
+ return ..()
/obj/effect/landmark/start
name = "start"
@@ -112,7 +103,8 @@
/obj/effect/landmark/start/ninja/New()
..()
- ninjastart += src
+ ninjastart += loc
+ qdel(src)
//Costume spawner landmarks
@@ -121,51 +113,51 @@
var/list/options = typesof(/obj/effect/landmark/costume)
var/PICK= options[rand(1,options.len)]
new PICK(src.loc)
- del(src)
+ qdel(src)
//SUBCLASSES. Spawn a bunch of items and disappear likewise
/obj/effect/landmark/costume/chicken/New()
new /obj/item/clothing/suit/chickensuit(src.loc)
new /obj/item/clothing/head/chicken(src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/egg(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/gladiator/New()
new /obj/item/clothing/under/gladiator(src.loc)
new /obj/item/clothing/head/helmet/gladiator(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/madscientist/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/suit/storage/toggle/labcoat/mad(src.loc)
new /obj/item/clothing/glasses/gglasses(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/elpresidente/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(src.loc)
new /obj/item/clothing/shoes/jackboots(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/nyangirl/New()
new /obj/item/clothing/under/schoolgirl(src.loc)
new /obj/item/clothing/head/kitty(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/maid/New()
new /obj/item/clothing/under/blackskirt(src.loc)
var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears )
new CHOICE(src.loc)
new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/butler/New()
new /obj/item/clothing/suit/wcoat(src.loc)
new /obj/item/clothing/under/suit_jacket(src.loc)
new /obj/item/clothing/head/that(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/scratch/New()
new /obj/item/clothing/gloves/white(src.loc)
@@ -173,12 +165,12 @@
new /obj/item/clothing/under/scratch(src.loc)
if (prob(30))
new /obj/item/clothing/head/cueball(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/highlander/New()
new /obj/item/clothing/under/kilt(src.loc)
new /obj/item/clothing/head/beret(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/prig/New()
new /obj/item/clothing/suit/wcoat(src.loc)
@@ -189,24 +181,24 @@
new /obj/item/weapon/cane(src.loc)
new /obj/item/clothing/under/sl_suit(src.loc)
new /obj/item/clothing/mask/fakemoustache(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/plaguedoctor/New()
new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc)
new /obj/item/clothing/head/plaguedoctorhat(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/nightowl/New()
new /obj/item/clothing/under/owl(src.loc)
new /obj/item/clothing/mask/gas/owl_mask(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/waiter/New()
new /obj/item/clothing/under/waiter(src.loc)
var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears)
new CHOICE(src.loc)
new /obj/item/clothing/suit/apron(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/pirate/New()
new /obj/item/clothing/under/pirate(src.loc)
@@ -214,46 +206,46 @@
var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana )
new CHOICE(src.loc)
new /obj/item/clothing/glasses/eyepatch(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/commie/New()
new /obj/item/clothing/under/soviet(src.loc)
new /obj/item/clothing/head/ushanka(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/imperium_monk/New()
new /obj/item/clothing/suit/imperium_monk(src.loc)
if (prob(25))
new /obj/item/clothing/mask/gas/cyborg(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/holiday_priest/New()
new /obj/item/clothing/suit/holidaypriest(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/marisawizard/fake/New()
new /obj/item/clothing/head/wizard/marisa/fake(src.loc)
new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/cutewitch/New()
new /obj/item/clothing/under/sundress(src.loc)
new /obj/item/clothing/head/witchwig(src.loc)
new /obj/item/weapon/staff/broom(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/fakewizard/New()
new /obj/item/clothing/suit/wizrobe/fake(src.loc)
new /obj/item/clothing/head/wizard/fake(src.loc)
new /obj/item/weapon/staff/(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/sexyclown/New()
new /obj/item/clothing/mask/gas/sexyclown(src.loc)
new /obj/item/clothing/under/sexyclown(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/sexymime/New()
new /obj/item/clothing/mask/gas/sexymime(src.loc)
new /obj/item/clothing/under/sexymime(src.loc)
- del(src)
\ No newline at end of file
+ qdel(src)
\ No newline at end of file
diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm
index bee6174f12..ec45c7a089 100644
--- a/code/game/objects/effects/manifest.dm
+++ b/code/game/objects/effects/manifest.dm
@@ -17,5 +17,5 @@
P.info = dat
P.name = "paper- 'Crew Manifest'"
//SN src = null
- del(src)
+ qdel(src)
return
\ No newline at end of file
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index e8bf9348f6..27e6d7c74a 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -26,24 +26,24 @@
call(src,triggerproc)(M)
/obj/effect/mine/proc/triggerrad(obj)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ var/datum/effect/effect/system/spark_spread/s = PoolOrNew(/datum/effect/effect/system/spark_spread)
s.set_up(3, 1, src)
s.start()
obj:radiation += 50
randmutb(obj)
domutcheck(obj,null)
spawn(0)
- del(src)
+ qdel(src)
/obj/effect/mine/proc/triggerstun(obj)
if(ismob(obj))
var/mob/M = obj
M.Stun(30)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ var/datum/effect/effect/system/spark_spread/s = PoolOrNew(/datum/effect/effect/system/spark_spread)
s.set_up(3, 1, src)
s.start()
spawn(0)
- del(src)
+ qdel(src)
/obj/effect/mine/proc/triggern2o(obj)
//example: n2o triggerproc
@@ -54,7 +54,7 @@
target.assume_gas("sleeping_agent", 30)
spawn(0)
- del(src)
+ qdel(src)
/obj/effect/mine/proc/triggerphoron(obj)
for (var/turf/simulated/floor/target in range(1,src))
@@ -64,20 +64,20 @@
target.hotspot_expose(1000, CELL_VOLUME)
spawn(0)
- del(src)
+ qdel(src)
/obj/effect/mine/proc/triggerkick(obj)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ var/datum/effect/effect/system/spark_spread/s = PoolOrNew(/datum/effect/effect/system/spark_spread)
s.set_up(3, 1, src)
s.start()
- del(obj:client)
+ qdel(obj:client)
spawn(0)
- del(src)
+ qdel(src)
/obj/effect/mine/proc/explode(obj)
explosion(loc, 0, 1, 2, 3)
spawn(0)
- del(src)
+ qdel(src)
/obj/effect/mine/dnascramble
name = "Radiation Mine"
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index 6dd26f7774..336ee0386d 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -3,10 +3,6 @@
unacidable = 1
var/i_attached//Added for possible image attachments to objects. For hallucinations and the like.
-/obj/effect/overlay/Destroy()
- PlaceInPool(src)
- return 1 //cancels the GCing
-
/obj/effect/overlay/beam//Not actually a projectile, just an effect.
name="beam"
icon='icons/effects/beam.dmi'
@@ -14,7 +10,7 @@
var/tmp/atom/BeamSource
New()
..()
- spawn(10) del src
+ spawn(10) qdel(src)
/obj/effect/overlay/palmtree_r
name = "Palm tree"
diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm
index 6a9f16e99e..702926d6ff 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -30,7 +30,7 @@
/obj/effect/portal/New()
spawn(300)
- del(src)
+ qdel(src)
return
return
@@ -42,7 +42,7 @@
if (icon_state == "portal1")
return
if (!( target ))
- del(src)
+ qdel(src)
return
if (istype(M, /atom/movable))
if(prob(failchance)) //oh dear a problem, put em in deep space
diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm
index 3f694a8b49..547931a511 100644
--- a/code/game/objects/effects/spawners/bombspawner.dm
+++ b/code/game/objects/effects/spawners/bombspawner.dm
@@ -102,7 +102,7 @@
p4.air_contents.temperature = btemp + T0C
p2.secured = 1
- del(src)
+ qdel(src)
*/
/obj/effect/spawner/newbomb
@@ -168,4 +168,4 @@
V.update_icon()
- del(src)
+ qdel(src)
diff --git a/code/game/objects/effects/spawners/vaultspawner.dm b/code/game/objects/effects/spawners/vaultspawner.dm
index e91105f5df..c4b9203cef 100644
--- a/code/game/objects/effects/spawners/vaultspawner.dm
+++ b/code/game/objects/effects/spawners/vaultspawner.dm
@@ -23,4 +23,4 @@
else
new /turf/simulated/floor/vault(locate(i,j,z),type)
- del(src)
\ No newline at end of file
+ qdel(src)
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 682347669a..54da6b1b37 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -11,13 +11,13 @@
/obj/effect/spider/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/effect/spider/attackby(var/obj/item/weapon/W, var/mob/user)
@@ -45,7 +45,7 @@
/obj/effect/spider/proc/healthcheck()
if(health <= 0)
- del(src)
+ qdel(src)
/obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
@@ -86,7 +86,7 @@
var/num = rand(6,24)
for(var/i=0, i[src] dies!")
- new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
- del(src)
+ PoolOrNew(/obj/effect/decal/cleanable/spiderling_remains, src.loc)
+ qdel(src)
/obj/effect/spider/spiderling/healthcheck()
if(health <= 0)
@@ -188,7 +188,7 @@
if(amount_grown >= 100)
var/spawn_type = pick(typesof(/mob/living/simple_animal/hostile/giant_spider))
new spawn_type(src.loc)
- del(src)
+ qdel(src)
/obj/effect/decal/cleanable/spiderling_remains
name = "spiderling remains"
@@ -205,8 +205,8 @@
New()
icon_state = pick("cocoon1","cocoon2","cocoon3")
-/obj/effect/spider/cocoon/Del()
+/obj/effect/spider/cocoon/Destroy()
src.visible_message("\red \the [src] splits open.")
for(var/atom/movable/A in contents)
A.loc = src.loc
- ..()
+ return ..()
diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm
index 8bff463e44..05cdbfee1d 100644
--- a/code/game/objects/empulse.dm
+++ b/code/game/objects/empulse.dm
@@ -9,13 +9,13 @@ proc/empulse(turf/epicenter, heavy_range, light_range, log=0)
log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
if(heavy_range > 1)
- var/obj/effect/overlay/pulse = new/obj/effect/overlay ( epicenter )
+ var/obj/effect/overlay/pulse = PoolOrNew(/obj/effect/overlay, epicenter)
pulse.icon = 'icons/effects/effects.dmi'
pulse.icon_state = "emppulse"
pulse.name = "emp pulse"
pulse.anchored = 1
spawn(20)
- pulse.delete()
+ qdel(pulse)
if(heavy_range > light_range)
light_range = heavy_range
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 4053dc13ba..1c29aa8088 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -61,6 +61,12 @@
*/
var/list/sprite_sheets_obj = null
+/obj/item/Destroy()
+ if(ismob(loc))
+ var/mob/m = loc
+ m.unEquip(src, 1)
+ return ..()
+
/obj/item/device
icon = 'icons/obj/device.dmi'
@@ -76,15 +82,15 @@
/obj/item/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(5))
- del(src)
+ qdel(src)
return
else
return
@@ -148,11 +154,8 @@
src.throwing = 0
if (src.loc == user)
- //canremove==0 means that object may not be removed. You can still wear it. This only applies to clothing. /N
- if(!src.canremove)
+ if(!user.unEquip(src))
return
- else
- user.u_equip(src)
else
if(isliving(src.loc))
return
@@ -162,7 +165,6 @@
src.pickup(user)
return
-
/obj/item/attack_ai(mob/user as mob)
if (istype(src.loc, /obj/item/weapon/robot_module))
//If the item is part of a cyborg module, equip it
@@ -240,198 +242,124 @@
/obj/item/proc/equipped(var/mob/user, var/slot)
return
+//Defines which slots correspond to which slot flags
+var/list/global/slot_flags_enumeration = list(
+ "[slot_wear_mask]" = SLOT_MASK,
+ "[slot_back]" = SLOT_BACK,
+ "[slot_wear_suit]" = SLOT_OCLOTHING,
+ "[slot_gloves]" = SLOT_GLOVES,
+ "[slot_shoes]" = SLOT_FEET,
+ "[slot_belt]" = SLOT_BELT,
+ "[slot_glasses]" = SLOT_EYES,
+ "[slot_head]" = SLOT_HEAD,
+ "[slot_l_ear]" = SLOT_EARS|SLOT_TWOEARS,
+ "[slot_r_ear]" = SLOT_EARS|SLOT_TWOEARS,
+ "[slot_w_uniform]" = SLOT_ICLOTHING,
+ "[slot_wear_id]" = SLOT_ID,
+ "[slot_tie]" = SLOT_TIE,
+ )
+
//the mob M is attempting to equip this item into the slot passed through as 'slot'. Return 1 if it can do this and 0 if it can't.
//If you are making custom procs but would like to retain partial or complete functionality of this one, include a 'return ..()' to where you want this to happen.
//Set disable_warning to 1 if you wish it to not give you outputs.
+//Should probably move the bulk of this into mob code some time, as most of it is related to the definition of slots and not item-specific
/obj/item/proc/mob_can_equip(M as mob, slot, disable_warning = 0)
if(!slot) return 0
if(!M) return 0
- if(ishuman(M))
- //START HUMAN
- var/mob/living/carbon/human/H = M
- var/list/mob_equip = list()
- if(H.species.hud && H.species.hud.equip_slots)
- mob_equip = H.species.hud.equip_slots
+ if(!ishuman(M)) return 0
+
+ var/mob/living/carbon/human/H = M
+ var/list/mob_equip = list()
+ if(H.species.hud && H.species.hud.equip_slots)
+ mob_equip = H.species.hud.equip_slots
- if(H.species && !(slot in mob_equip))
+ if(H.species && !(slot in mob_equip))
+ return 0
+
+ //First check if the item can be equipped to the desired slot.
+ if("[slot]" in slot_flags_enumeration)
+ var/req_flags = slot_flags_enumeration["[slot]"]
+ if(!(req_flags & slot_flags))
return 0
+
+ //Next check that the slot is free
+ if(H.get_equipped_item(slot))
+ return 0
+
+ //Next check if the slot is accessible.
+ var/mob/_user = disable_warning? null : H
+ if(!H.slot_is_accessible(slot, src, _user))
+ return 0
+
+ //Lastly, check special rules for the desired slot.
+ switch(slot)
+ if(slot_l_ear, slot_r_ear)
+ var/slot_other_ear = (slot == slot_l_ear)? slot_r_ear : slot_l_ear
+ if( (w_class > 1) && !(slot_flags & SLOT_EARS) )
+ return 0
+ if( (slot_flags & SLOT_TWOEARS) && H.get_equipped_item(slot_other_ear) )
+ return 0
+ if(slot_wear_id)
+ if(!H.w_uniform && (slot_w_uniform in mob_equip))
+ if(!disable_warning)
+ H << "You need a jumpsuit before you can attach this [name]."
+ return 0
+ if(slot_l_store, slot_r_store)
+ if(!H.w_uniform && (slot_w_uniform in mob_equip))
+ if(!disable_warning)
+ H << "You need a jumpsuit before you can attach this [name]."
+ return 0
+ if(slot_flags & SLOT_DENYPOCKET)
+ return 0
+ if( w_class > 2 && !(slot_flags & SLOT_POCKET) )
+ return 0
+ if(slot_s_store)
+ if(!H.wear_suit && (slot_wear_suit in mob_equip))
+ if(!disable_warning)
+ H << "You need a suit before you can attach this [name]."
+ return 0
+ if(!H.wear_suit.allowed)
+ if(!disable_warning)
+ usr << "You somehow have a suit with no defined allowed items for suit storage, stop that."
+ return 0
+ if( !(istype(src, /obj/item/device/pda) || istype(src, /obj/item/weapon/pen) || is_type_in_list(src, H.wear_suit.allowed)) )
+ return 0
+ if(slot_handcuffed)
+ if(!istype(src, /obj/item/weapon/handcuffs))
+ return 0
+ if(slot_legcuffed)
+ if(!istype(src, /obj/item/weapon/legcuffs))
+ return 0
+ if(slot_in_backpack) //used entirely for equipping spawned mobs or at round start
+ var/allow = 0
+ if(H.back && istype(H.back, /obj/item/weapon/storage/backpack))
+ var/obj/item/weapon/storage/backpack/B = H.back
+ if(B.contents.len < B.storage_slots && w_class <= B.max_w_class)
+ allow = 1
+ if(!allow)
+ return 0
+ if(slot_tie)
+ if(!H.w_uniform && (slot_w_uniform in mob_equip))
+ if(!disable_warning)
+ H << "You need a jumpsuit before you can attach this [name]."
+ return 0
+ var/obj/item/clothing/under/uniform = H.w_uniform
+ if(uniform.accessories.len && !uniform.can_attach_accessory(src))
+ if (!disable_warning)
+ H << "You already have an accessory of this type attached to your [uniform]."
+ return 0
+ return 1
- switch(slot)
- if(slot_l_hand)
- if(H.l_hand)
- return 0
- return 1
- if(slot_r_hand)
- if(H.r_hand)
- return 0
- return 1
- if(slot_wear_mask)
- if(H.wear_mask)
- return 0
- if(H.head && !(H.head.canremove) && (H.head.flags & HEADCOVERSMOUTH))
- if(!disable_warning)
- H << "\The [H.head] is in the way."
- return 0
- if( !(slot_flags & SLOT_MASK) )
- return 0
- return 1
- if(slot_back)
- if(H.back)
- return 0
- if( !(slot_flags & SLOT_BACK) )
- return 0
- return 1
- if(slot_wear_suit)
- if(H.wear_suit)
- return 0
- if( !(slot_flags & SLOT_OCLOTHING) )
- return 0
- return 1
- if(slot_gloves)
- if(H.gloves)
- return 0
- if( !(slot_flags & SLOT_GLOVES) )
- return 0
- return 1
- if(slot_shoes)
- if(H.shoes)
- return 0
- if( !(slot_flags & SLOT_FEET) )
- return 0
- return 1
- if(slot_belt)
- if(H.belt)
- return 0
- if(!H.w_uniform && (slot_w_uniform in mob_equip))
- if(!disable_warning)
- H << "You need a jumpsuit before you can attach this [name]."
- return 0
- if( !(slot_flags & SLOT_BELT) )
- return
- return 1
- if(slot_glasses)
- if(H.glasses)
- return 0
- if(H.head && !(H.head.canremove) && (H.head.flags & HEADCOVERSEYES))
- if(!disable_warning)
- H << "\The [H.head] is in the way."
- return 0
- if( !(slot_flags & SLOT_EYES) )
- return 0
- return 1
- if(slot_head)
- if(H.head)
- return 0
- if( !(slot_flags & SLOT_HEAD) )
- return 0
- return 1
- if(slot_l_ear)
- if(H.l_ear)
- return 0
- if( (w_class > 1) && !(slot_flags & SLOT_EARS) )
- return 0
- if( (slot_flags & SLOT_TWOEARS) && H.r_ear )
- return 0
- return 1
- if(slot_r_ear)
- if(H.r_ear)
- return 0
- if( (w_class > 1) && !(slot_flags & SLOT_EARS) )
- return 0
- if( (slot_flags & SLOT_TWOEARS) && H.l_ear )
- return 0
- return 1
- if(slot_w_uniform)
- if(H.w_uniform)
- return 0
- if(H.wear_suit && (H.wear_suit.body_parts_covered & src.body_parts_covered))
- if(!disable_warning)
- H << "\The [H.wear_suit] is in the way."
- return 0
- if( !(slot_flags & SLOT_ICLOTHING) )
- return 0
- return 1
- if(slot_wear_id)
- if(H.wear_id)
- return 0
- if(!H.w_uniform && (slot_w_uniform in mob_equip))
- if(!disable_warning)
- H << "You need a jumpsuit before you can attach this [name]."
- return 0
- if( !(slot_flags & SLOT_ID) )
- return 0
- return 1
- if(slot_l_store)
- if(H.l_store)
- return 0
- if(!H.w_uniform && (slot_w_uniform in mob_equip))
- if(!disable_warning)
- H << "You need a jumpsuit before you can attach this [name]."
- return 0
- if(slot_flags & SLOT_DENYPOCKET)
- return 0
- if( w_class <= 2 || (slot_flags & SLOT_POCKET) )
- return 1
- if(slot_r_store)
- if(H.r_store)
- return 0
- if(!H.w_uniform && (slot_w_uniform in mob_equip))
- if(!disable_warning)
- H << "You need a jumpsuit before you can attach this [name]."
- return 0
- if(slot_flags & SLOT_DENYPOCKET)
- return 0
- if( w_class <= 2 || (slot_flags & SLOT_POCKET) )
- return 1
- return 0
- if(slot_s_store)
- if(H.s_store)
- return 0
- if(!H.wear_suit && (slot_wear_suit in mob_equip))
- if(!disable_warning)
- H << "You need a suit before you can attach this [name]."
- return 0
- if(!H.wear_suit.allowed)
- if(!disable_warning)
- usr << "You somehow have a suit with no defined allowed items for suit storage, stop that."
- return 0
- if( istype(src, /obj/item/device/pda) || istype(src, /obj/item/weapon/pen) || is_type_in_list(src, H.wear_suit.allowed) )
- return 1
- return 0
- if(slot_handcuffed)
- if(H.handcuffed)
- return 0
- if(!istype(src, /obj/item/weapon/handcuffs))
- return 0
- return 1
- if(slot_legcuffed)
- if(H.legcuffed)
- return 0
- if(!istype(src, /obj/item/weapon/legcuffs))
- return 0
- return 1
- if(slot_in_backpack)
- if (H.back && istype(H.back, /obj/item/weapon/storage/backpack))
- var/obj/item/weapon/storage/backpack/B = H.back
- if(B.contents.len < B.storage_slots && w_class <= B.max_w_class)
- return 1
- return 0
- if(slot_tie)
- if(!H.w_uniform && (slot_w_uniform in mob_equip))
- if(!disable_warning)
- H << "You need a jumpsuit before you can attach this [name]."
- return 0
- var/obj/item/clothing/under/uniform = H.w_uniform
- if(uniform.accessories.len && !uniform.can_attach_accessory(src))
- if (!disable_warning)
- H << "You already have an accessory of this type attached to your [uniform]."
- return 0
- if( !(slot_flags & SLOT_TIE) )
- return 0
- return 1
- return 0 //Unsupported slot
- //END HUMAN
+/obj/item/proc/mob_can_unequip(mob/M, slot, disable_warning = 0)
+ if(!slot) return 0
+ if(!M) return 0
+
+ if(!canremove)
+ return 0
+ if(!M.slot_is_accessible(slot, src, disable_warning? null : M))
+ return 0
+ return 1
/obj/item/verb/verb_pickup()
set src in oview(1)
diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm
index a11b326e45..208a2111da 100644
--- a/code/game/objects/items/apc_frame.dm
+++ b/code/game/objects/items/apc_frame.dm
@@ -11,7 +11,7 @@
..()
if (istype(W, /obj/item/weapon/wrench))
new /obj/item/stack/sheet/metal( get_turf(src.loc), 2 )
- del(src)
+ qdel(src)
/obj/item/apc_frame/proc/try_build(turf/on_wall)
if (get_dist(on_wall,usr)>1)
@@ -38,6 +38,6 @@
var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(loc)
C.amount = 10
usr << "You cut the cables and disassemble the unused power terminal."
- del(T)
+ qdel(T)
new /obj/machinery/power/apc(loc, ndir, 1)
- del(src)
+ qdel(src)
diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm
index 0d386623ec..24e9adb5ad 100644
--- a/code/game/objects/items/ashtray.dm
+++ b/code/game/objects/items/ashtray.dm
@@ -31,7 +31,7 @@
processing_objects.Remove(cig)
var/obj/item/butt = new cig.type_butt(src)
cig.transfer_fingerprints_to(butt)
- del(cig)
+ qdel(cig)
W = butt
else if (cig.lit == 0)
user << "You place [cig] in [src] without even smoking it. Why would you do that?"
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 8548e4783e..8953872d93 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -10,7 +10,7 @@
attack_self(mob/user)
var/obj/structure/closet/body_bag/R = new /obj/structure/closet/body_bag(user.loc)
R.add_fingerprint(user)
- del(src)
+ qdel(src)
/obj/item/weapon/storage/box/bodybags
@@ -83,7 +83,7 @@
visible_message("[usr] folds up the [src.name]")
new item_path(get_turf(src))
spawn(0)
- del(src)
+ qdel(src)
return
/obj/structure/closet/body_bag/update_icon()
@@ -105,7 +105,7 @@
attack_self(mob/user)
var/obj/structure/closet/body_bag/cryobag/R = new /obj/structure/closet/body_bag/cryobag(user.loc)
R.add_fingerprint(user)
- del(src)
+ qdel(src)
@@ -126,7 +126,7 @@
O.icon = src.icon
O.icon_state = "bodybag_used"
O.desc = "Pretty useless now.."
- del(src)
+ qdel(src)
/obj/structure/closet/body_bag/cryobag/MouseDrop(over_object, src_location, over_location)
if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 8e1a382a86..1b9ad0991a 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -85,7 +85,7 @@
uses--
if(!uses)
user << "\red You used up your crayon!"
- del(src)
+ qdel(src)
return
/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
@@ -97,6 +97,6 @@
uses -= 5
if(uses <= 0)
user << "\red You ate your crayon!"
- del(src)
+ qdel(src)
else
..()
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 794499fa37..c7421f9397 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -938,7 +938,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
j = prob(10)
if(j) //This kills the PDA
- P.Del()
+ qdel(P)
if(message)
message += "It melts in a puddle of plastic."
else
@@ -1240,7 +1240,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if ( !(C:blood_DNA) )
user << "\blue No blood found on [C]"
if(C:blood_DNA)
- del(C:blood_DNA)
+ qdel(C:blood_DNA)
else
user << "\blue Blood found on [C]. Analysing..."
spawn(15)
@@ -1370,7 +1370,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
explosion(T, 0, 0, 1, rand(1,2))
return
-/obj/item/device/pda/Del()
+/obj/item/device/pda/Destroy()
PDAs -= src
if (src.id && prob(90)) //IDs are kept in 90% of the cases
src.id.loc = get_turf(src.loc)
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index 5ab09d0853..992f2f251c 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -115,7 +115,9 @@
spawn(5)
radio = new /obj/item/radio/integrated/signal(src)
-
+/obj/item/weapon/cartridge/signal/Destroy()
+ qdel(radio)
+ ..()
/obj/item/weapon/cartridge/quartermaster
name = "\improper Space Parts & Space Vendors cartridge"
diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm
index 0c7105118f..5998fb8d3b 100644
--- a/code/game/objects/items/devices/PDA/radio.dm
+++ b/code/game/objects/items/devices/PDA/radio.dm
@@ -99,6 +99,12 @@
post_signal(control_freq, "command", "summon", "active", active, "target", get_turf(PDA) , s_filter = RADIO_SECBOT)
post_signal(control_freq, "command", "bot_status", "active", active, s_filter = RADIO_SECBOT)
+
+/obj/item/radio/integrated/beepsky/Destroy()
+ if(radio_controller)
+ radio_controller.remove_object(src, control_freq)
+ ..()
+
/obj/item/radio/integrated/mule
var/list/botlist = null // list of bots
var/obj/machinery/bot/mulebot/active // the active bot; if null, show bot list
@@ -245,3 +251,8 @@
radio_connection.post_signal(src, signal)
return
+
+/obj/item/radio/integrated/signal/Destroy()
+ if(radio_controller)
+ radio_controller.remove_object(src, frequency)
+ ..()
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index 1982fbb4f4..f7ef8ad5c2 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -41,25 +41,25 @@
if(active_dummy)
eject_all()
playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6)
- del(active_dummy)
+ qdel(active_dummy)
active_dummy = null
usr << "\blue You deactivate the [src]."
- var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
+ var/obj/effect/overlay/T = PoolOrNew(/obj/effect/overlay, get_turf(src))
T.icon = 'icons/effects/effects.dmi'
flick("emppulse",T)
- spawn(8) T.delete()
+ spawn(8) qdel(T)
else
playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6)
var/obj/O = new saved_item(src)
if(!O) return
- var/obj/effect/dummy/chameleon/C = new/obj/effect/dummy/chameleon(usr.loc)
+ var/obj/effect/dummy/chameleon/C = PoolOrNew(/obj/effect/dummy/chameleon, usr.loc)
C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src)
- del(O)
+ qdel(O)
usr << "\blue You activate the [src]."
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
T.icon = 'icons/effects/effects.dmi'
flick("emppulse",T)
- spawn(8) T.delete()
+ spawn(8) qdel(T)
/obj/item/device/chameleon/proc/disrupt(var/delete_dummy = 1)
if(active_dummy)
@@ -69,7 +69,7 @@
spark_system.start()
eject_all()
if(delete_dummy)
- del(active_dummy)
+ qdel(active_dummy)
active_dummy = null
can_use = 0
spawn(50) can_use = 1
@@ -140,6 +140,6 @@
step(src, direction)
return
-/obj/effect/dummy/chameleon/Del()
+/obj/effect/dummy/chameleon/Destroy()
master.disrupt(0)
..()
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 7013b30419..0c1106f12a 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -103,7 +103,7 @@
animation.master = user
flick("blspell", animation)
sleep(5)
- del(animation)
+ qdel(animation)
if(!flashfail)
flick("flash2", src)
@@ -154,7 +154,7 @@
animation.master = user
flick("blspell", animation)
sleep(5)
- del(animation)
+ qdel(animation)
for(var/mob/living/carbon/M in oviewers(3, null))
if(prob(50))
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index 713706475c..020b1a83f0 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -90,7 +90,7 @@
AddUses(1)
user << "You insert the [L.name] into the [src.name]. You have [uses] lights remaining."
user.drop_item()
- del(L)
+ qdel(L)
return
else
user << "You need a working light."
@@ -156,7 +156,7 @@
target.brightness = L2.brightness
target.on = target.has_power()
target.update()
- del(L2)
+ qdel(L2)
if(target.on && target.rigged)
target.explode()
diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm
index 8788eaf0f2..4207546b03 100644
--- a/code/game/objects/items/devices/modkit.dm
+++ b/code/game/objects/items/devices/modkit.dm
@@ -24,7 +24,7 @@
if(!parts)
user << "This kit has no parts for this modification left."
user.drop_from_inventory(src)
- del(src)
+ qdel(src)
return
var/allowed = 0
@@ -60,7 +60,7 @@
if(!parts)
user.drop_from_inventory(src)
- del(src)
+ qdel(src)
/obj/item/device/modkit/examine(mob/user)
..(user)
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 2cc9d55b6a..a2a714ee9b 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -21,7 +21,7 @@
..()
overlays += "pai-off"
-/obj/item/device/paicard/Del()
+/obj/item/device/paicard/Destroy()
//Will stop people throwing friend pAIs into the singularity so they can respawn
if(!isnull(pai))
pai.death(0)
@@ -311,7 +311,7 @@
if(pai)
pai.ex_act(severity)
else
- del(src)
+ qdel(src)
/obj/item/device/paicard/see_emote(mob/living/M, text)
if(pai && pai.client)
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 8b2469d2dd..afca3007ac 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -118,4 +118,4 @@
if(power_drained >= max_power)
processing_objects.Remove(src)
explosion(src.loc, 3,6,9,12)
- del(src)
+ qdel(src)
diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm
index ef332fa336..32807250d7 100644
--- a/code/game/objects/items/devices/radio/beacon.dm
+++ b/code/game/objects/items/devices/radio/beacon.dm
@@ -30,7 +30,7 @@
/obj/item/device/radio/beacon/bacon //Probably a better way of doing this, I'm lazy.
proc/digest_delay()
spawn(600)
- del(src)
+ qdel(src)
// SINGULO BEACON SPAWNER
@@ -45,5 +45,5 @@
user << "\blue Locked In"
new /obj/machinery/power/singularity_beacon/syndicate( user.loc )
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
- del(src)
+ qdel(src)
return
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index bfc9e8f69b..e2e2c2b365 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -26,6 +26,13 @@
keyslot2 = new ks2type(src)
recalculateChannels(1)
+/obj/item/device/radio/headset/Destroy()
+ qdel(keyslot1)
+ qdel(keyslot2)
+ keyslot1 = null
+ keyslot2 = null
+ ..()
+
/obj/item/device/radio/headset/examine(mob/user)
if(!(..(user, 1) && radio_desc))
return
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 567dc49bf4..0164806e2c 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -15,7 +15,7 @@
..()
processing_objects += src
-/obj/item/device/radio/intercom/Del()
+/obj/item/device/radio/intercom/Destroy()
processing_objects -= src
..()
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index dab778dcb9..d03179cff8 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -45,6 +45,15 @@
if(radio_controller)
initialize()
+/obj/item/device/radio/Destroy()
+ qdel(wires)
+ wires = null
+ if(radio_controller)
+ radio_controller.remove_object(src, frequency)
+ for (var/ch_name in channels)
+ radio_controller.remove_object(src, radiochannels[ch_name])
+ ..()
+
/obj/item/device/radio/initialize()
@@ -172,7 +181,7 @@
0, "*garbled automated announcement*", src,
message, from, "Automated Announcement", from, "synthesized voice",
4, 0, list(0), connection.frequency, "states")
- del(A)
+ qdel(A)
return
// Interprets the message mode when talking into a radio, possibly returning a connection datum
@@ -625,7 +634,6 @@
onclose(user, "radio")
return
-
/obj/item/device/radio/proc/config(op)
if(radio_controller)
for (var/ch_name in channels)
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 1e9405cbeb..7e450c8f96 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -48,7 +48,7 @@
if(T)
T.hotspot_expose(700,125)
explosion(T, -1, -1, 0, 4)
- del(src)
+ qdel(src)
return
/obj/item/device/taperecorder/verb/record()
diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm
index 57b569c599..96874bd946 100644
--- a/code/game/objects/items/devices/uplinks.dm
+++ b/code/game/objects/items/devices/uplinks.dm
@@ -64,7 +64,7 @@ datum/nano_item_lists
world_uplinks += src
-/obj/item/device/uplink/Del()
+/obj/item/device/uplink/Destroy()
world_uplinks -= src
..()
@@ -180,7 +180,7 @@ datum/nano_item_lists
/obj/item/device/uplink/hidden/New()
spawn(2)
if(!istype(src.loc, /obj/item))
- del(src)
+ qdel(src)
..()
// Toggles the uplink on and off. Normally this will bypass the item's normal functions and go to the uplink menu, if activated.
diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm
index e341a8747f..a37352c7d3 100644
--- a/code/game/objects/items/latexballoon.dm
+++ b/code/game/objects/items/latexballoon.dm
@@ -30,10 +30,10 @@
burst()
switch(severity)
if (1)
- del(src)
+ qdel(src)
if (2)
if (prob(50))
- del(src)
+ qdel(src)
/obj/item/latexballon/bullet_act()
burst()
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index da508a8a31..6e2f9dd64a 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -134,7 +134,7 @@
if (user.get_inactive_hand()==src)
user.remove_from_mob(src)
user.put_in_inactive_hand(B)
- del(src)
+ qdel(src)
else
user << "You need one sheet of metal to arm the robot frame."
if(istype(W, /obj/item/robot_parts/l_leg))
@@ -250,7 +250,7 @@
callHook("borgify", list(O))
O.Namepick()
- del(src)
+ qdel(src)
else
user << "\blue The MMI must go in after everything else!"
@@ -303,8 +303,8 @@
user << "\blue You install some manipulators and modify the head, creating a functional spider-bot!"
new /mob/living/simple_animal/spiderbot(get_turf(loc))
user.drop_item()
- del(W)
- del(src)
+ qdel(W)
+ qdel(src)
return
return
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 43b852e249..9930a6f2ea 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -28,20 +28,17 @@
/obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R)
if(..()) return 0
R.uneq_all()
- R.hands.icon_state = "nomod"
- R.icon_state = "robot"
- //world << R.custom_sprite
- if(R.custom_sprite == 1)
- //world << R.icon_state
- icon = 'icons/mob/custom-synthetic.dmi'
- R.icon_state = "[R.ckey]-Standard"
- del(R.module)
+ R.modtype = initial(R.modtype)
+ R.hands.icon_state = initial(R.hands.icon_state)
+
+ R.choose_icon(1, R.set_module_sprites(list("Default" = "robot")))
+
R.notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, R.module.name)
+ R.module.Reset(R)
+ qdel(R.module)
R.module = null
- R.camera.remove_networks(list("Engineering","Medical","MINE"))
+
R.updatename("Default")
- R.status_flags |= CANPUSH
- R.updateicon()
return 1
@@ -116,7 +113,7 @@
/obj/item/borg/upgrade/tasercooler/action(var/mob/living/silicon/robot/R)
if(..()) return 0
- if(!istype(R.module, /obj/item/weapon/robot_module/security))
+ if(!R.module || !(src in R.module.supported_upgrades))
R << "Upgrade mounting error! No suitable hardpoint detected!"
usr << "There's no mounting point for the module!"
return 0
@@ -150,7 +147,7 @@
/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R)
if(..()) return 0
- if(!istype(R.module, /obj/item/weapon/robot_module/miner))
+ if(!R.module || !(src in R.module.supported_upgrades))
R << "Upgrade mounting error! No suitable hardpoint detected!"
usr << "There's no mounting point for the module!"
return 0
diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm
index 1d92cb9a81..2893b4f3a1 100644
--- a/code/game/objects/items/shooting_range.dm
+++ b/code/game/objects/items/shooting_range.dm
@@ -9,7 +9,7 @@
var/icon/virtualIcon
var/list/bulletholes = list()
- Del()
+ Destroy()
// if a target is deleted and associated with a stake, force stake to forget
for(var/obj/structure/target_stake/T in view(3,src))
if(T.pinned_target == src)
@@ -97,7 +97,7 @@
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
O << "\red [src] breaks into tiny pieces and collapses!"
- del(src)
+ qdel(src)
// Create a temporary object to represent the damage
var/obj/bmark = new
diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm
index de96eda5f4..f43d7ae320 100644
--- a/code/game/objects/items/stacks/sheets/light.dm
+++ b/code/game/objects/items/stacks/sheets/light.dm
@@ -20,7 +20,7 @@
new/obj/item/stack/sheet/glass(user.loc)
if(amount <= 0)
user.drop_from_inventory(src)
- del(src)
+ qdel(src)
if(istype(O,/obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/metal/M = O
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index a4e7d94fad..a34e39ab9a 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -29,12 +29,12 @@
src.amount = amount
return
-/obj/item/stack/Del()
+/obj/item/stack/Destroy()
if(uses_charge)
- return
+ return 1
if (src && usr && usr.machine == src)
usr << browse(null, "window=stack")
- ..()
+ return ..()
/obj/item/stack/examine(mob/user)
if(..(user, 1))
@@ -139,7 +139,7 @@
if (istype(O, /obj/item/weapon/storage)) //BubbleWrap - so newly formed boxes are empty
for (var/obj/item/I in O)
- del(I)
+ qdel(I)
/obj/item/stack/Topic(href, href_list)
..()
@@ -150,7 +150,7 @@
list_recipes(usr, text2num(href_list["sublist"]))
if (href_list["make"])
- if (src.get_amount() < 1) del(src) //Never should happen
+ if (src.get_amount() < 1) qdel(src) //Never should happen
var/list/recipes_list = recipes
if (href_list["sublist"])
@@ -187,7 +187,7 @@
if (amount <= 0) //check again in case someone transferred stuff to us
if(usr)
usr.remove_from_mob(src)
- del(src)
+ qdel(src)
return 1
else
if(get_amount() < used)
diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm
index 3a14ff1e56..dc57abc513 100644
--- a/code/game/objects/items/stacks/tiles/light.dm
+++ b/code/game/objects/items/stacks/tiles/light.dm
@@ -33,4 +33,4 @@
new/obj/item/stack/light_w(user.loc)
if(amount <= 0)
user.drop_from_inventory(src)
- del(src)
+ qdel(src)
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index ddf9cc52c4..dbb67decb7 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -63,7 +63,7 @@
if(O.reagents.has_reagent("pacid", 1))
user << "The acid chews through the balloon!"
O.reagents.reaction(user)
- del(src)
+ qdel(src)
else
src.desc = "A translucent balloon with some form of liquid sloshing around in it."
user << "\blue You fill the balloon with the contents of [O]."
@@ -80,7 +80,7 @@
src.icon_state = "burst"
spawn(5)
if(src)
- del(src)
+ qdel(src)
return
/obj/item/toy/balloon/update_icon()
@@ -233,7 +233,7 @@
if(istype(I, /obj/item/toy/ammo/crossbow))
if(bullets <= 4)
user.drop_item()
- del(I)
+ qdel(I)
bullets++
user << "\blue You load the foam dart into the crossbow."
else
@@ -265,21 +265,21 @@
for(var/mob/O in viewers(world.view, D))
O.show_message(text("\red [] was hit by the foam dart!", M), 1)
new /obj/item/toy/ammo/crossbow(M.loc)
- del(D)
+ qdel(D)
return
for(var/atom/A in D.loc)
if(A == user) continue
if(A.density)
new /obj/item/toy/ammo/crossbow(A.loc)
- del(D)
+ qdel(D)
sleep(1)
spawn(10)
if(D)
new /obj/item/toy/ammo/crossbow(D.loc)
- del(D)
+ qdel(D)
return
else if (bullets == 0)
@@ -418,7 +418,7 @@
new /obj/effect/decal/cleanable/ash(src.loc)
src.visible_message("\red The [src.name] explodes!","\red You hear a snap!")
playsound(src, 'sound/effects/snap.ogg', 50, 1)
- del(src)
+ qdel(src)
/obj/item/toy/snappop/Crossed(H as mob|obj)
if((ishuman(H))) //i guess carp and shit shouldn't set them off
@@ -432,7 +432,7 @@
new /obj/effect/decal/cleanable/ash(src.loc)
src.visible_message("\red The [src.name] explodes!","\red You hear a snap!")
playsound(src, 'sound/effects/snap.ogg', 50, 1)
- del(src)
+ qdel(src)
/*
* Water flower
@@ -494,7 +494,7 @@
if(ismob(T) && T:client)
T:client << "\red [user] has sprayed you with water!"
sleep(4)
- del(D)
+ qdel(D)
return
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index 37dcbf9f4e..52e7fac02d 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -40,6 +40,11 @@
spark_system.set_up(5, 0, src)
spark_system.attach(src)
+/obj/item/weapon/rcd/Destroy()
+ qdel(spark_system)
+ spark_system = null
+ return ..()
+
/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/rcd_ammo))
@@ -47,7 +52,7 @@
user << "The RCD can't hold any more matter-units."
return
user.drop_from_inventory(W)
- del(W)
+ qdel(W)
stored_matter += 10
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
user << "The RCD now holds [stored_matter]/30 matter-units."
@@ -138,7 +143,7 @@
else if(build_other)
new build_other(T)
else
- del(T)
+ qdel(T)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
return 1
diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm
index d3dc598cc3..b96d53c2a8 100644
--- a/code/game/objects/items/weapons/RSF.dm
+++ b/code/game/objects/items/weapons/RSF.dm
@@ -28,7 +28,7 @@ RSF
user << "The RSF can't hold any more matter."
return
- del(W)
+ qdel(W)
stored_matter += 10
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm
index dc6787a73b..bf8c9d583c 100644
--- a/code/game/objects/items/weapons/autopsy.dm
+++ b/code/game/objects/items/weapons/autopsy.dm
@@ -68,7 +68,7 @@
else
D.organ_names += ", [O.name]"
- del D.organs_scanned[O.name]
+ qdel(D.organs_scanned[O.name])
D.organs_scanned[O.name] = W.copy()
for(var/V in O.trace_chemicals)
diff --git a/code/game/objects/items/weapons/candle.dm b/code/game/objects/items/weapons/candle.dm
index 6fc63420de..2d8bb8a36a 100644
--- a/code/game/objects/items/weapons/candle.dm
+++ b/code/game/objects/items/weapons/candle.dm
@@ -56,7 +56,7 @@
new/obj/item/trash/candle(src.loc)
if(istype(src.loc, /mob))
src.dropped()
- del(src)
+ qdel(src)
update_icon()
if(istype(loc, /turf)) //start a fire if possible
var/turf/T = loc
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 393f10363a..47976ca5e4 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -118,7 +118,7 @@
user.drop_item()
var/obj/item/weapon/card/emag_broken/junk = new(user.loc)
junk.add_fingerprint(user)
- del(src)
+ qdel(src)
return
..()
@@ -170,7 +170,7 @@
src.desc = W.desc
src.icon = W.icon
src.icon_state = W.icon_state
- del(W)
+ qdel(W)
return
/obj/item/weapon/card/id/verb/read()
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index fbba55b040..15b43d63e0 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -93,9 +93,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
flags |= NOREACT // so it doesn't react until you light it
create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15
-/obj/item/clothing/mask/smokable/Del()
+/obj/item/clothing/mask/smokable/Destroy()
..()
- del(reagents)
+ qdel(reagents)
/obj/item/clothing/mask/smokable/process()
var/turf/location = get_turf(src)
@@ -127,13 +127,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round(reagents.get_reagent_amount("phoron") / 2.5, 1), get_turf(src), 0, 0)
e.start()
- del(src)
+ qdel(src)
return
if(reagents.get_reagent_amount("fuel")) // the fuel explodes, too, but much less violently
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round(reagents.get_reagent_amount("fuel") / 5, 1), get_turf(src), 0, 0)
e.start()
- del(src)
+ qdel(src)
return
flags &= ~NOREACT // allowing reagents to react after being lit
reagents.handle_reactions()
@@ -162,7 +162,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
M.update_inv_l_hand(0)
M.update_inv_r_hand(1)
processing_objects.Remove(src)
- del(src)
+ qdel(src)
else
new /obj/effect/decal/cleanable/ash(T)
if(ismob(loc))
@@ -377,7 +377,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(G.reagents)
G.reagents.trans_to(src, G.reagents.total_volume)
name = "[G.name]-packed [initial(name)]"
- del(G)
+ qdel(G)
else if(istype(W, /obj/item/weapon/flame/lighter))
var/obj/item/weapon/flame/lighter/L = W
diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm
index 4536123b86..f86359c21d 100644
--- a/code/game/objects/items/weapons/clown_items.dm
+++ b/code/game/objects/items/weapons/clown_items.dm
@@ -28,7 +28,7 @@
user << "You need to take that [target.name] off before cleaning it."
else if(istype(target,/obj/effect/decal/cleanable))
user << "You scrub \the [target.name] out."
- del(target)
+ qdel(target)
else if(istype(target,/turf))
user << "You scrub \the [target.name] clean."
var/turf/T = target
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index dfd221650b..8ccc1f1006 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -92,7 +92,7 @@
spawn(0)//this prevents the collapse of space-time continuum
if (user)
user.drop_from_inventory(src)
- del(src)
+ qdel(src)
return uses
/obj/item/weapon/dnainjector/attack(mob/M as mob, mob/user as mob)
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 030437b446..36c97d3df2 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -80,7 +80,7 @@
target.ex_act(1)
if(target)
target.overlays -= image_overlay
- del(src) // qdel
+ qdel(src)
/obj/item/weapon/plastique/attack(mob/M as mob, mob/user as mob, def_zone)
return
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index 4408e998ce..1348fc7605 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -115,7 +115,7 @@
for(var/a=0, a < spray_particles, a++)
spawn(0)
- var/obj/effect/effect/water/W = new /obj/effect/effect/water( get_turf(src) )
+ var/obj/effect/effect/water/W = PoolOrNew(/obj/effect/effect/water, get_turf(src))
var/turf/my_target = pick(the_targets)
var/datum/reagents/R = new/datum/reagents(spray_amount)
if(!W) return
@@ -139,7 +139,7 @@
M.ExtinguishMob()
if(W.loc == my_target) break
sleep(2)
- W.delete()
+ qdel(W)
if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity == 0))
user.inertia_dir = get_dir(target, user)
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index 50508594cf..d90709d9c3 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -22,13 +22,13 @@
var/obj/item/weapon/tank/phoron/ptank = null
-/obj/item/weapon/flamethrower/Del()
+/obj/item/weapon/flamethrower/Destroy()
if(weldtool)
- del(weldtool)
+ qdel(weldtool)
if(igniter)
- del(igniter)
+ qdel(igniter)
if(ptank)
- del(ptank)
+ qdel(ptank)
..()
return
@@ -83,7 +83,7 @@
ptank.loc = T
ptank = null
new /obj/item/stack/rods(T)
- del(src)
+ qdel(src)
return
if(isscrewdriver(W) && igniter && !lit)
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index dd3d0886fb..023eb3bfd3 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -31,11 +31,11 @@
src.gift.add_fingerprint(user)
else
user << "\blue The gift was empty!"
- del(src)
+ qdel(src)
return
/obj/item/weapon/a_gift/ex_act()
- del(src)
+ qdel(src)
return
/obj/effect/spresent/relaymove(mob/user as mob)
@@ -58,7 +58,7 @@
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
- del(src)
+ qdel(src)
/obj/item/weapon/a_gift/attack_self(mob/M as mob)
var/gift_type = pick(/obj/item/weapon/sord,
@@ -112,7 +112,7 @@
M.remove_from_mob(src)
M.put_in_hands(I)
I.add_fingerprint(M)
- del(src)
+ qdel(src)
return
/*
@@ -152,7 +152,7 @@
src.add_fingerprint(user)
if (src.amount <= 0)
new /obj/item/weapon/c_tube( src.loc )
- del(src)
+ qdel(src)
return
else
user << "\blue You need scissors!"
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index bb440d1215..a58ebe4cbe 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -167,7 +167,7 @@
invisibility = INVISIBILITY_MAXIMUM //Why am i doing this?
spawn(50) //To make sure all reagents can work
- del(src) //correctly before deleting the grenade.
+ qdel(src) //correctly before deleting the grenade.
/obj/item/weapon/grenade/chem_grenade/large
diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm
index 3446fa46c3..c354aa4039 100644
--- a/code/game/objects/items/weapons/grenades/emgrenade.dm
+++ b/code/game/objects/items/weapons/grenades/emgrenade.dm
@@ -7,5 +7,5 @@
prime()
..()
if(empulse(src, 4, 10))
- del(src)
+ qdel(src)
return
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 03d8ccdffc..4c3c73c485 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -23,7 +23,7 @@
new/obj/effect/effect/sparks(src.loc)
new/obj/effect/effect/smoke/illumination(src.loc, brightness=15)
- del(src)
+ qdel(src)
return
proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged.
@@ -124,9 +124,8 @@
spawn(0)
new /obj/item/weapon/grenade/flashbang/clusterbang/segment(src.loc)//Creates a 'segment' that launches a few more flashbangs
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
- spawn(0)
- del(src)
- return
+ qdel(src)
+ return
/obj/item/weapon/grenade/flashbang/clusterbang/segment
desc = "A smaller segment of a clusterbang. Better run."
@@ -156,9 +155,8 @@
spawn(0)
new /obj/item/weapon/grenade/flashbang/cluster(src.loc)
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
- spawn(0)
- del(src)
- return
+ qdel(src)
+ return
/obj/item/weapon/grenade/flashbang/cluster/New()//Same concept as the segments, so that all of the parts don't become reliant on the clusterbang
spawn(0)
diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm
index 139baacb6f..e1e58b62ac 100644
--- a/code/game/objects/items/weapons/grenades/smokebomb.dm
+++ b/code/game/objects/items/weapons/grenades/smokebomb.dm
@@ -10,7 +10,7 @@
New()
..()
- src.smoke = new /datum/effect/effect/system/smoke_spread/bad
+ src.smoke = PoolOrNew(/datum/effect/effect/system/smoke_spread/bad)
src.smoke.attach(src)
prime()
@@ -30,5 +30,5 @@
B.health -= damage
B.update_icon()
sleep(80)
- del(src)
+ qdel(src)
return
diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
index 8b6b6e938d..6adea8e2f5 100644
--- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm
+++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
@@ -28,7 +28,7 @@
// Spawn some hostile syndicate critters
- del(src)
+ qdel(src)
return
/obj/item/weapon/grenade/spawnergrenade/manhacks
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 85bec3a8ea..8aa2f1819d 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -132,7 +132,7 @@ var/last_chew = 0
user.put_in_hands(W)
user << "You wrap the cable restraint around the top of the rod."
- del(src)
+ qdel(src)
update_icon(user)
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index d0add791f9..7a200891ed 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -46,7 +46,7 @@
icon_state = "implant_melted"
malfunction = MALFUNCTION_PERMANENT
- Del()
+ Destroy()
if(part)
part.implants.Remove(src)
..()
@@ -155,7 +155,7 @@ Implant Specifics:
"}
msg = replace_characters(msg, replacechars)
if(findtext(msg,phrase))
activate()
- del(src)
+ qdel(src)
activate()
if (malfunction == MALFUNCTION_PERMANENT)
@@ -179,11 +179,11 @@ Implant Specifics:
"}
istype(part,/obj/item/organ/external/head))
part.createwound(BRUISE, 60) //mangle them instead
explosion(get_turf(imp_in), -1, -1, 2, 3)
- del(src)
+ qdel(src)
else
explosion(get_turf(imp_in), -1, -1, 2, 3)
part.droplimb(0,DROPLIMB_BLUNT)
- del(src)
+ qdel(src)
if (elevel == "Destroy Body")
explosion(get_turf(T), -1, 0, 1, 6)
T.gib()
@@ -249,7 +249,7 @@ Implant Specifics:
"}
else
part.droplimb(0,DROPLIMB_BLUNT)
explosion(get_turf(imp_in), -1, -1, 2, 3)
- del(src)
+ qdel(src)
/obj/item/weapon/implant/chem
name = "chemical implant"
@@ -296,7 +296,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
if(!src.reagents.total_volume)
R << "You hear a faint click from your chest."
spawn(0)
- del(src)
+ qdel(src)
return
emp_act(severity)
@@ -421,17 +421,17 @@ the implant may become unstable and either pre-maturely inject the subject or si
a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm")
else
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm")
- del(a)
+ qdel(a)
processing_objects.Remove(src)
if ("emp")
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
var/name = prob(50) ? t.name : pick(teleportlocs)
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm")
- del(a)
+ qdel(a)
else
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm")
- del(a)
+ qdel(a)
processing_objects.Remove(src)
emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this
@@ -489,7 +489,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
imp_in.put_in_hands(scanned)
else
scanned.loc = t
- del src
+ qdel(src)
implanted(mob/source as mob)
src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm
index 535a4264c0..2f33eba413 100644
--- a/code/game/objects/items/weapons/implants/implantchair.dm
+++ b/code/game/objects/items/weapons/implants/implantchair.dm
@@ -84,7 +84,7 @@
return
var/mob/M = G:affecting
if(put_mob(M))
- del(G)
+ qdel(G)
src.updateUsrDialog()
return
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index 631b6895f9..8b2a657dd5 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -193,16 +193,16 @@
processing_objects |= src
-/obj/item/weapon/melee/energy/blade/Del()
+/obj/item/weapon/melee/energy/blade/Destroy()
processing_objects -= src
..()
/obj/item/weapon/melee/energy/blade/attack_self(mob/user as mob)
user.drop_from_inventory(src)
- spawn(1) if(src) del(src)
+ spawn(1) if(src) qdel(src)
/obj/item/weapon/melee/energy/blade/dropped()
- spawn(1) if(src) del(src)
+ spawn(1) if(src) qdel(src)
/obj/item/weapon/melee/energy/blade/process()
if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src))
@@ -217,4 +217,4 @@
host.pinned -= src
host.embedded -= src
host.drop_from_inventory(src)
- spawn(1) if(src) del(src)
+ spawn(1) if(src) qdel(src)
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index fe9945f8f0..0df10cd97c 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -24,7 +24,7 @@
T.dirt = 0
for(var/obj/effect/O in src)
if(istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay))
- del(O)
+ qdel(O)
source.reagents.reaction(src, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly.
source.reagents.remove_any(1) //reaction() doesn't use up the reagents
diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm
index 283e7e5877..48d1d4cf64 100644
--- a/code/game/objects/items/weapons/policetape.dm
+++ b/code/game/objects/items/weapons/policetape.dm
@@ -191,10 +191,10 @@ var/list/tape_roll_applications = list()
for (var/obj/item/tape/P in cur)
if(P.icon_state == icon_dir)
N = 0
- del(P)
+ qdel(P)
cur = get_step(cur,dir[i])
- del(src)
+ qdel(src)
return
diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm
index 6b48653a6a..a383d8fb0c 100644
--- a/code/game/objects/items/weapons/shards.dm
+++ b/code/game/objects/items/weapons/shards.dm
@@ -64,7 +64,7 @@
G.attackby(NG, user)
usr << "You add the newly-formed glass to the stack. It now contains [NG.amount] sheets."
//SN src = null
- del(src)
+ qdel(src)
return
return ..()
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index 6969fdd386..541b41f74d 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -61,18 +61,18 @@
return
if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
user << "\red The Bluespace interfaces of the two devices conflict and malfunction."
- del(W)
+ qdel(W)
return
/* //BoH+BoH=Singularity, commented out.
if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
investigate_log("has become a singularity. Caused by [user.key]","singulo")
user << "\red The Bluespace interfaces of the two devices catastrophically malfunction!"
- del(W)
- var/obj/machinery/singularity/singulo = new /obj/machinery/singularity (get_turf(src))
+ qdel(W)
+ var/obj/singularity/singulo = new /obj/singularity (get_turf(src))
singulo.energy = 300 //should make it a bit bigger~
message_admins("[key_name_admin(user)] detonated a bag of holding")
log_game("[key_name(user)] detonated a bag of holding")
- del(src)
+ qdel(src)
return
*/
..()
@@ -90,7 +90,7 @@
else
user << "\red The Bluespace generator malfunctions!"
for (var/obj/O in src.contents) //it broke, delete what was in it
- del(O)
+ qdel(O)
crit_fail = 1
icon_state = "brokenpack"
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 0ee5df08e0..52eaa4510d 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -162,7 +162,7 @@
usr.client.screen -= S
S.dropped(usr)
if(!S.amount)
- del S
+ qdel(S)
else
S.loc = src
@@ -207,7 +207,7 @@
N.amount = stacksize
S.amount -= stacksize
if(!S.amount)
- del S // todo: there's probably something missing here
+ qdel(S) // todo: there's probably something missing here
orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 4c0c58a05a..f8be15d3e4 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -48,7 +48,7 @@
// Now make the cardboard
user << "You fold [src] flat."
new src.foldable(get_turf(src))
- del(src)
+ qdel(src)
/obj/item/weapon/storage/box/survival/
New()
@@ -243,6 +243,20 @@
new /obj/item/ammo_casing/shotgun/stunshell(src)
new /obj/item/ammo_casing/shotgun/stunshell(src)
+/obj/item/weapon/storage/box/practiceshells
+ name = "box of practice shells"
+ desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death."
+
+ New()
+ ..()
+ new /obj/item/ammo_casing/shotgun/practice(src)
+ new /obj/item/ammo_casing/shotgun/practice(src)
+ new /obj/item/ammo_casing/shotgun/practice(src)
+ new /obj/item/ammo_casing/shotgun/practice(src)
+ new /obj/item/ammo_casing/shotgun/practice(src)
+ new /obj/item/ammo_casing/shotgun/practice(src)
+ new /obj/item/ammo_casing/shotgun/practice(src)
+
/obj/item/weapon/storage/box/sniperammo
name = "box of 14.5mm shells"
desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death."
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 7af6e3b16e..4e0098eb97 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -146,8 +146,8 @@
new /obj/item/clothing/mask/smokable/cigarette(src)
create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one
-/obj/item/weapon/storage/fancy/cigarettes/Del()
- del(reagents)
+/obj/item/weapon/storage/fancy/cigarettes/Destroy()
+ qdel(reagents)
..()
@@ -202,8 +202,8 @@
new /obj/item/clothing/mask/smokable/cigarette/cigar(src)
create_reagents(15 * storage_slots)
-/obj/item/weapon/storage/fancy/cigar/Del()
- del(reagents)
+/obj/item/weapon/storage/fancy/cigar/Destroy()
+ qdel(reagents)
..()
/obj/item/weapon/storage/fancy/cigar/update_icon()
diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm
index 5dda9b89c2..89f058ba47 100644
--- a/code/game/objects/items/weapons/storage/internal.dm
+++ b/code/game/objects/items/weapons/storage/internal.dm
@@ -9,6 +9,10 @@
name = master_item.name
verbs -= /obj/item/verb/verb_pickup //make sure this is never picked up.
..()
+
+/obj/item/weapon/storage/internal/Destroy()
+ master_item = null
+ ..()
/obj/item/weapon/storage/internal/attack_hand()
return //make sure this is never picked up
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 495d4d7516..61786e10db 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -11,6 +11,7 @@
w_class = 3
var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else)
var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
+ var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage
var/max_w_class = 2 //Max size of objects that this object can store (in effect only if can_hold isn't set)
var/max_storage_space = 14 //The sum of the storage costs of all the items in this storage item.
var/storage_slots = 7 //The number of storage slots in this container.
@@ -23,6 +24,12 @@
var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/use_sound = "rustle" //sound played when used. null for no sound.
+/obj/item/weapon/storage/Destroy()
+ close_all()
+ qdel(boxes)
+ qdel(closer)
+ ..()
+
/obj/item/weapon/storage/MouseDrop(obj/over_object as obj)
if(!canremove)
@@ -30,7 +37,7 @@
if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist
- if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
+ if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why?
return
if(over_object == usr && Adjacent(usr)) // this must come before the screen objects only block
@@ -44,18 +51,21 @@
//there's got to be a better way of doing this.
if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
return
-
- if (!( usr.restrained() ) && !( usr.stat ))
- switch(over_object.name)
- if("r_hand")
- usr.u_equip(src)
- usr.put_in_r_hand(src)
- if("l_hand")
- usr.u_equip(src)
- usr.put_in_l_hand(src)
- src.add_fingerprint(usr)
+
+ if (( usr.restrained() ) || ( usr.stat ))
return
- return
+
+ if ((src.loc == usr) && !usr.unEquip(src))
+ return
+
+ switch(over_object.name)
+ if("r_hand")
+ usr.u_equip(src)
+ usr.put_in_r_hand(src)
+ if("l_hand")
+ usr.u_equip(src)
+ usr.put_in_l_hand(src)
+ src.add_fingerprint(usr)
/obj/item/weapon/storage/proc/return_inv()
@@ -86,6 +96,7 @@
user.client.screen += src.closer
user.client.screen += src.contents
user.s_active = src
+ is_seeing |= user
return
/obj/item/weapon/storage/proc/hide_from(mob/user as mob)
@@ -97,7 +108,7 @@
user.client.screen -= src.contents
if(user.s_active == src)
user.s_active = null
- return
+ is_seeing -= user
/obj/item/weapon/storage/proc/open(mob/user as mob)
if (src.use_sound)
@@ -109,11 +120,24 @@
show_to(user)
/obj/item/weapon/storage/proc/close(mob/user as mob)
-
src.hide_from(user)
user.s_active = null
return
+/obj/item/weapon/storage/proc/close_all()
+ for(var/mob/M in can_see_contents())
+ close(M)
+ . = 1
+
+/obj/item/weapon/storage/proc/can_see_contents()
+ var/list/cansee = list()
+ for(var/mob/M in is_seeing)
+ if(M.s_active == src && M.client)
+ cansee |= M
+ else
+ is_seeing -= M
+ return cansee
+
//This proc draws out the inventory and places the items on it. tx and ty are the upper left tile and mx, my are the bottm right.
//The numbers are calculated from the bottom-left The bottom-left slot being 1,1.
/obj/item/weapon/storage/proc/orient_objs(tx, ty, mx, my)
@@ -163,7 +187,7 @@
New(obj/item/sample as obj)
if(!istype(sample))
- del(src)
+ qdel(src)
sample_object = sample
number = 1
@@ -463,4 +487,4 @@
return depth
/obj/item/proc/get_storage_cost()
- return 2**(w_class-1) //1,2,4,8,16,...
+ return 2**(w_class-1) //1,2,4,8,16,...
diff --git a/code/game/objects/items/weapons/surgery_limbattachment.dm b/code/game/objects/items/weapons/surgery_limbattachment.dm
index 23e5013f1a..b52bb1bb3f 100644
--- a/code/game/objects/items/weapons/surgery_limbattachment.dm
+++ b/code/game/objects/items/weapons/surgery_limbattachment.dm
@@ -65,7 +65,7 @@
H.update_body()
M.updatehealth()
M.UpdateDamageIcon()
- del(src)
+ qdel(src)
return 1
return 0
diff --git a/code/game/objects/items/weapons/syndie.dm b/code/game/objects/items/weapons/syndie.dm
index e205f20bb0..a0af746ab4 100644
--- a/code/game/objects/items/weapons/syndie.dm
+++ b/code/game/objects/items/weapons/syndie.dm
@@ -44,7 +44,7 @@
D.open()
if(istype(T,/turf/simulated/wall))
T.dismantle_wall(1)
- del(src)
+ qdel(src)
/*Detonator, disguised as a lighter*/
diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm
index 2dfc3f4730..79e512321e 100644
--- a/code/game/objects/items/weapons/table_rack_parts.dm
+++ b/code/game/objects/items/weapons/table_rack_parts.dm
@@ -20,7 +20,7 @@
if (istype(W, /obj/item/weapon/wrench))
for(var/material_type in stack_types)
new material_type(get_turf(user))
- del(src)
+ qdel(src)
return
else
if(alter_type && alter_with && istype(W,alter_with))
@@ -28,7 +28,7 @@
if (R.use(alter_cost))
var/obj/item/new_parts = new alter_type (get_turf(loc))
user << "You modify \the [name] into \a [new_parts]."
- del(src)
+ qdel(src)
else
user << "You need at least [alter_cost] sheets to reinforce the [name]."
return
@@ -41,7 +41,7 @@
new build_type( user.loc )
user.drop_item()
- del(src)
+ qdel(src)
return
/obj/item/weapon/table_parts/reinforced
@@ -87,7 +87,7 @@
new /obj/item/stack/tile/carpet( get_turf(loc) )
new /obj/item/weapon/table_parts/wood( get_turf(loc) )
user << "You pry the carpet out of the table."
- del(src)
+ qdel(src)
..()
/obj/item/weapon/table_parts/rack
diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm
index 422af1d652..67b5f007a5 100644
--- a/code/game/objects/items/weapons/tanks/jetpack.dm
+++ b/code/game/objects/items/weapons/tanks/jetpack.dm
@@ -63,7 +63,7 @@
if(allgases >= 0.005)
return 1
- del(G)
+ qdel(G)
return
/obj/item/weapon/tank/jetpack/ui_action_click()
@@ -143,5 +143,5 @@
var/allgases = G.gas["carbon_dioxide"] + G.gas["nitrogen"] + G.gas["oxygen"] + G.gas["phoron"]
if(allgases >= 0.005)
return 1
- del(G)
+ qdel(G)
return
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index 04d32c49b2..f1cd0286ba 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -31,9 +31,9 @@
processing_objects.Add(src)
return
-/obj/item/weapon/tank/Del()
+/obj/item/weapon/tank/Destroy()
if(air_contents)
- del(air_contents)
+ qdel(air_contents)
processing_objects.Remove(src)
@@ -71,12 +71,12 @@
if(prob(50))
var/turf/location = src.loc
if (!( istype(location, /turf) ))
- del(src)
+ qdel(src)
if(src.air_contents)
location.assume_air(air_contents)
- del(src)
+ qdel(src)
/obj/item/weapon/tank/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
@@ -274,7 +274,7 @@
//world << "\blue Exploding Pressure: [pressure] kPa, intensity: [range]"
explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5))
- del(src)
+ qdel(src)
else if(pressure > TANK_RUPTURE_PRESSURE)
//world << "\blue[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]"
@@ -284,7 +284,7 @@
return
T.assume_air(air_contents)
playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3)
- del(src)
+ qdel(src)
else
integrity--
diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm
index 477bce6b32..911a6334d2 100644
--- a/code/game/objects/items/weapons/tape.dm
+++ b/code/game/objects/items/weapons/tape.dm
@@ -58,7 +58,7 @@
user.put_in_hands(stuck)
stuck = null
overlays = null
- del(src)
+ qdel(src)
/obj/item/weapon/ducttape/afterattack(var/A, mob/user, flag, params)
if(!in_range(user, A) || istype(A, /obj/machinery/door) || !stuck)
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index bce7eabe9d..480709c34a 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -112,10 +112,10 @@
name = "offhand"
unwield()
- del(src)
+ qdel(src)
wield()
- del(src)
+ qdel(src)
/obj/item/weapon/twohanded/offhand/update_icon()
return
@@ -149,7 +149,7 @@
if (W.dir == SOUTHWEST)
new /obj/item/weapon/shard( W.loc )
if(W.reinf) new /obj/item/stack/rods( W.loc)
- del(A)
+ qdel(A)
/*
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index 295fa0c67d..3cabb3f685 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -177,7 +177,7 @@
if(istype(W,/obj/item/weapon/screwdriver))
user << "You finish the concealed blade weapon."
new /obj/item/weapon/butterfly(user.loc)
- del(src)
+ qdel(src)
return
/obj/item/butterflyblade
@@ -198,8 +198,8 @@
if(istype(W,/obj/item/butterflyblade))
user << "You attach the two concealed blade parts."
new /obj/item/butterflyconstruction(user.loc)
- del(W)
- del(src)
+ qdel(W)
+ qdel(src)
return
update_icon(user)
@@ -252,8 +252,8 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
user.put_in_hands(S)
user << "You fasten the glass shard to the top of the rod with the cable."
- del(I)
- del(src)
+ qdel(I)
+ qdel(src)
update_icon(user)
else if(istype(I, /obj/item/weapon/wirecutters))
@@ -261,8 +261,8 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
user.put_in_hands(P)
user << "You fasten the wirecutters to the top of the rod with the cable, prongs outward."
- del(I)
- del(src)
+ qdel(I)
+ qdel(src)
update_icon(user)
update_icon(user)
@@ -309,7 +309,7 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
/obj/item/weapon/energy_net/dropped()
spawn(10)
- if(src) del(src)
+ if(src) qdel(src)
/obj/item/weapon/energy_net/throw_impact(atom/hit_atom)
..()
@@ -317,7 +317,7 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
var/mob/living/M = hit_atom
if(!istype(M) || locate(/obj/effect/energy_net) in M.loc)
- del(src)
+ qdel(src)
return 0
var/turf/T = get_turf(M)
@@ -327,11 +327,11 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
M.captured = 1
net.affecting = M
T.visible_message("[M] was caught in an energy net!")
- del(src)
+ qdel(src)
// If we miss or hit an obstacle, we still want to delete the net.
spawn(10)
- if(src) del(src)
+ if(src) qdel(src)
/obj/effect/energy_net
name = "energy net"
@@ -356,7 +356,7 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
..()
processing_objects |= src
-/obj/effect/energy_net/Del()
+/obj/effect/energy_net/Destroy()
if(affecting)
var/mob/living/carbon/M = affecting
@@ -372,13 +372,13 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
if(health <=0)
density = 0
src.visible_message("The energy net is torn apart!")
- del(src)
+ qdel(src)
return
/obj/effect/energy_net/process()
if(isnull(affecting) || affecting.loc != loc)
- del(src)
+ qdel(src)
return
// Countdown begin set to -1 will stop the teleporter from firing.
@@ -411,7 +411,7 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
playsound(affecting.loc, 'sound/effects/sparks2.ogg', 50, 1)
anim(affecting.loc,affecting,'icons/mob/mob.dmi',,"phasein",,affecting.dir)
- del(src)
+ qdel(src)
/obj/effect/energy_net/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
diff --git a/code/game/objects/items/weapons/weldbackpack.dm b/code/game/objects/items/weapons/weldbackpack.dm
index f1c786d3e1..74d119f417 100644
--- a/code/game/objects/items/weapons/weldbackpack.dm
+++ b/code/game/objects/items/weapons/weldbackpack.dm
@@ -22,7 +22,7 @@
user << "\red That was stupid of you."
explosion(get_turf(src),-1,0,2)
if(src)
- del(src)
+ qdel(src)
return
else
if(T.welding)
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index 7508d34a94..de73e5e7b3 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -11,7 +11,7 @@
..()
if (!prob(spawn_nothing_percentage))
spawn_item()
- del src
+ qdel(src)
// this function should return a specific item to spawn
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 967c0e78a6..a37ccd6c65 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -6,11 +6,12 @@
var/parts
var/list/climbers = list()
-/obj/structure/proc/destroy()
+/obj/structure/Destroy()
+ if(opacity)
+ UpdateAffectingLights()
if(parts)
new parts(loc)
- density = 0
- del(src)
+ ..()
/obj/structure/attack_hand(mob/user)
if(breakable)
@@ -31,10 +32,10 @@
/obj/structure/blob_act()
if(prob(50))
- del(src)
+ qdel(src)
/obj/structure/meteorhit(obj/O as obj)
- destroy(src)
+ qdel(src)
/obj/structure/attack_tk()
return
@@ -42,24 +43,24 @@
/obj/structure/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)
return
/obj/structure/meteorhit(obj/O as obj)
- del(src)
+ qdel(src)
/obj/structure/New()
..()
if(climbable)
verbs += /obj/structure/proc/climb_on
-/obj/structure/Del()
+/obj/structure/Destroy()
..()
/obj/structure/proc/climb_on()
@@ -193,5 +194,5 @@
if(!breakable || !damage || !wallbreaker)
return 0
visible_message("[user] [attack_verb] the [src] apart!")
- spawn(1) destroy()
+ spawn(1) qdel(src)
return 1
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 08abff9c2b..07ede680ac 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -146,19 +146,19 @@
for(var/atom/movable/A as mob|obj in src)//pulls everything out of the locker and hits it with an explosion
A.loc = src.loc
A.ex_act(severity++)
- del(src)
+ qdel(src)
if(2)
if(prob(50))
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
A.ex_act(severity++)
- del(src)
+ qdel(src)
if(3)
if(prob(5))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
A.ex_act(severity++)
- del(src)
+ qdel(src)
/obj/structure/closet/bullet_act(var/obj/item/projectile/Proj)
if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
@@ -169,7 +169,7 @@
if(health <= 0)
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
- del(src)
+ qdel(src)
return
@@ -178,14 +178,14 @@
if(prob(75))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
- del(src)
+ qdel(src)
/obj/structure/closet/meteorhit(obj/O as obj)
if(O.icon_state == "flaming")
for(var/mob/M in src)
M.meteorhit(O)
src.dump_contents()
- del(src)
+ qdel(src)
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(src.opened)
@@ -202,7 +202,7 @@
new /obj/item/stack/sheet/metal(src.loc)
for(var/mob/M in viewers(src))
M.show_message("\The [src] has been cut apart by [user] with \the [WT].", 3, "You hear welding.", 2)
- del(src)
+ qdel(src)
return
if(isrobot(user))
return
@@ -310,5 +310,5 @@
return
visible_message("[user] [attack_message] the [src]!")
dump_contents()
- spawn(1) del(src)
+ spawn(1) qdel(src)
return 1
diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
index bb5fe26e4f..294ee43725 100644
--- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
@@ -18,6 +18,7 @@
/obj/structure/closet/l3closet/general/New()
..()
+ qdel(contents)
contents = list()
new /obj/item/clothing/suit/bio_suit/general( src )
new /obj/item/clothing/head/bio_hood/general( src )
@@ -30,6 +31,7 @@
/obj/structure/closet/l3closet/virology/New()
..()
+ qdel(contents)
contents = list()
new /obj/item/clothing/suit/bio_suit/virology( src )
new /obj/item/clothing/head/bio_hood/virology( src )
@@ -44,6 +46,7 @@
/obj/structure/closet/l3closet/security/New()
..()
+ qdel(contents)
contents = list()
new /obj/item/clothing/suit/bio_suit/security( src )
new /obj/item/clothing/head/bio_hood/security( src )
@@ -56,6 +59,7 @@
/obj/structure/closet/l3closet/janitor/New()
..()
+ qdel(contents)
contents = list()
new /obj/item/clothing/suit/bio_suit/janitor( src )
new /obj/item/clothing/head/bio_hood/janitor( src )
@@ -68,6 +72,7 @@
/obj/structure/closet/l3closet/scientist/New()
..()
+ qdel(contents)
contents = list()
new /obj/item/clothing/suit/bio_suit/scientist( src )
new /obj/item/clothing/head/bio_hood/scientist( src )
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index 8fc77c5b92..2534c09caa 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -23,7 +23,7 @@
spawn(4)
// Not really the best way to do this, but it's better than "contents = list()"!
for(var/atom/movable/AM in contents)
- del(AM)
+ qdel(AM)
new /obj/item/clothing/under/color/white( src )
new /obj/item/clothing/shoes/white( src )
return
@@ -55,7 +55,7 @@
spawn(4)
// Not really the best way to do this, but it's better than "contents = list()"!
for(var/atom/movable/AM in contents)
- del(AM)
+ qdel(AM)
new /obj/item/weapon/storage/backpack/satchel/withwallet( src )
new /obj/item/device/radio/headset( src )
return
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index 644f2d7531..67a159e7ca 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -40,7 +40,7 @@
desc = "If it takes forever, I will wait for you..."
if(health == 0) //meaning if the statue didn't find a valid target
- del(src)
+ qdel(src)
return
processing_objects.Add(src)
@@ -56,7 +56,7 @@
if (timer <= 0)
dump_contents()
processing_objects.Remove(src)
- del(src)
+ qdel(src)
/obj/structure/closet/statue/dump_contents()
@@ -130,4 +130,4 @@
user.dust()
dump_contents()
visible_message("[src] shatters!.")
- del(src)
+ qdel(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index c274a237b6..31f8115b91 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -56,12 +56,12 @@
// teehee - Ah, tg coders...
if ("delete")
- del(src)
+ qdel(src)
//If you want to re-add fire, just add "fire" = 15 to the pick list.
/*if ("fire")
new /obj/structure/closet/firecloset(src.loc)
- del(src)*/
+ qdel(src)*/
/obj/structure/closet/emcloset/legacy/New()
..()
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 917d244afa..95e8c06e85 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -105,18 +105,18 @@
switch(severity)
if(1.0)
for(var/obj/O in src.contents)
- del(O)
- del(src)
+ qdel(O)
+ qdel(src)
return
if(2.0)
for(var/obj/O in src.contents)
if(prob(50))
- del(O)
- del(src)
+ qdel(O)
+ qdel(src)
return
if(3.0)
if (prob(50))
- del(src)
+ qdel(src)
return
else
return
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index d2b1f56eb3..5419ee2639 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -18,7 +18,7 @@
user.visible_message("[user] pries \the [src] open.", \
"You pry open \the [src].", \
"You hear splitting wood.")
- del(src)
+ qdel(src)
else
return attack_hand(user)
diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm
index fa1cd02b7b..5fd82b27f0 100644
--- a/code/game/objects/structures/curtains.dm
+++ b/code/game/objects/structures/curtains.dm
@@ -17,7 +17,7 @@
/obj/structure/curtain/bullet_act(obj/item/projectile/P, def_zone)
if(!P.nodamage)
visible_message("[P] tears [src] down!")
- del(src)
+ qdel(src)
else
..(P, def_zone)
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 4eb2236ec0..5150319f15 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -17,7 +17,7 @@
if (occupied)
new /obj/item/weapon/gun/energy/captain( src.loc )
occupied = 0
- del(src)
+ qdel(src)
if (2)
if (prob(50))
src.health -= 15
@@ -41,13 +41,13 @@
if (occupied)
new /obj/item/weapon/gun/energy/captain( src.loc )
occupied = 0
- del(src)
+ qdel(src)
/obj/structure/displaycase/meteorhit(obj/O as obj)
new /obj/item/weapon/shard( src.loc )
new /obj/item/weapon/gun/energy/captain( src.loc )
- del(src)
+ qdel(src)
/obj/structure/displaycase/proc/healthcheck()
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 1b92926acd..a15650405e 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -166,7 +166,7 @@
if(!src || !WT.isOn()) return
user << "\blue You dissasembled the airlock assembly!"
new /obj/item/stack/sheet/metal(src.loc, 4)
- del (src)
+ qdel (src)
else
user << "\blue You need more welding fuel."
return
@@ -277,7 +277,7 @@
var/obj/machinery/door/new_airlock = new path(src.loc, src)
new_airlock.dir = src.dir
- del(src)
+ qdel(src)
else
..()
update_state()
diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm
index 074d7c7618..2608a311e3 100644
--- a/code/game/objects/structures/electricchair.dm
+++ b/code/game/objects/structures/electricchair.dm
@@ -19,7 +19,7 @@
part.loc = loc
part.master = null
part = null
- del(src)
+ qdel(src)
return
return
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index f68c7ae7cb..186f1debac 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -13,7 +13,7 @@
relativewall_neighbours()
..()
-/obj/structure/falsewall/Del()
+/obj/structure/falsewall/Destroy()
var/temploc = src.loc
@@ -98,7 +98,7 @@
T.ChangeTurf(/turf/simulated/wall)
else
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
- del(src)
+ qdel(src)
if( istype(W, /obj/item/weapon/weldingtool) )
var/obj/item/weapon/weldingtool/WT = W
@@ -110,7 +110,7 @@
if(mineral != "phoron")//Stupid shit keeps me from pushing the attackby() to phoron walls -Sieve
T = get_turf(src)
T.attackby(W,user)
- del(src)
+ qdel(src)
else
user << "\blue You can't reach, close it first!"
@@ -123,7 +123,7 @@
if(mineral != "phoron")
T = get_turf(src)
T.attackby(W,user)
- del(src)
+ qdel(src)
//DRILLING
else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
@@ -134,7 +134,7 @@
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
T = get_turf(src)
T.attackby(W,user)
- del(src)
+ qdel(src)
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
var/turf/T = get_turf(src)
@@ -145,7 +145,7 @@
if(mineral != "phoron")
T = get_turf(src)
T.attackby(W,user)
- del(src)
+ qdel(src)
/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
..()
@@ -232,7 +232,7 @@
var/turf/T = get_turf(src)
user.visible_message("[user] tightens some bolts on the r wall.", "You tighten the bolts on the wall.")
T.ChangeTurf(/turf/simulated/wall) //Intentionally makes a regular wall instead of an r-wall (no cheap r-walls for you).
- del(src)
+ qdel(src)
if( istype(W, /obj/item/weapon/weldingtool) )
var/obj/item/weapon/weldingtool/WT = W
@@ -241,14 +241,14 @@
T.ChangeTurf(/turf/simulated/wall)
T = get_turf(src)
T.attackby(W,user)
- del(src)
+ qdel(src)
else if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) )
var/turf/T = get_turf(src)
T.ChangeTurf(/turf/simulated/wall)
T = get_turf(src)
T.attackby(W,user)
- del(src)
+ qdel(src)
//DRILLING
else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
@@ -256,14 +256,14 @@
T.ChangeTurf(/turf/simulated/wall)
T = get_turf(src)
T.attackby(W,user)
- del(src)
+ qdel(src)
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
var/turf/T = get_turf(src)
T.ChangeTurf(/turf/simulated/wall)
T = get_turf(src)
T.attackby(W,user)
- del(src)
+ qdel(src)
/*
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index c73c955701..8c53135528 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -31,7 +31,7 @@
..()
if(health <= 0)
new /obj/item/stack/sheet/metal(get_turf(src))
- del(src)
+ qdel(src)
return
@@ -50,7 +50,7 @@
if(get_turf(user, 40))
user << "\blue You secured the girder!"
new/obj/structure/girder( src.loc )
- del(src)
+ qdel(src)
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
user << "\blue Now slicing apart the girder"
@@ -78,7 +78,7 @@
if(!src) return
user << "\blue You removed the support struts!"
new/obj/structure/girder( src.loc )
- del(src)
+ qdel(src)
else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored )
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
@@ -87,7 +87,7 @@
if(!src) return
user << "\blue You dislodged the girder!"
new/obj/structure/girder/displaced( src.loc )
- del(src)
+ qdel(src)
else if(istype(W, /obj/item/stack/sheet))
@@ -99,7 +99,7 @@
if(S.use(2))
user << "You create a false wall! Push on it to open or close the passage."
new /obj/structure/falsewall (src.loc)
- del(src)
+ qdel(src)
else
if(S.get_amount() < 2) return ..()
user << "Now adding plating..."
@@ -110,7 +110,7 @@
Tsrc.ChangeTurf(/turf/simulated/wall)
for(var/turf/simulated/wall/X in Tsrc.loc)
if(X) X.add_hiddenprint(usr)
- del(src)
+ qdel(src)
return
if(/obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/plasteel/cyborg)
@@ -118,7 +118,7 @@
if(S.use(2))
user << "\blue You create a false wall! Push on it to open or close the passage."
new /obj/structure/falserwall (src.loc)
- del(src)
+ qdel(src)
else
if (src.icon_state == "reinforced") //I cant believe someone would actually write this line of code...
if(S.get_amount() < 1) return ..()
@@ -130,7 +130,7 @@
Tsrc.ChangeTurf(/turf/simulated/wall/r_wall)
for(var/turf/simulated/wall/r_wall/X in Tsrc.loc)
if(X) X.add_hiddenprint(usr)
- del(src)
+ qdel(src)
return
else
if(S.get_amount() < 1) return ..()
@@ -139,7 +139,7 @@
if(S.use(1))
user << "Girders reinforced!"
new/obj/structure/girder/reinforced( src.loc )
- del(src)
+ qdel(src)
return
if(S.sheettype)
@@ -154,7 +154,7 @@
user << "\blue You create a false wall! Push on it to open or close the passage."
var/F = text2path("/obj/structure/falsewall/[M]")
new F (src.loc)
- del(src)
+ qdel(src)
else
if(S.amount < 2) return ..()
user << "\blue Now adding plating..."
@@ -166,7 +166,7 @@
Tsrc.ChangeTurf(text2path("/turf/simulated/wall/mineral/[M]"))
for(var/turf/simulated/wall/mineral/X in Tsrc.loc)
if(X) X.add_hiddenprint(usr)
- del(src)
+ qdel(src)
return
add_hiddenprint(usr)
@@ -182,7 +182,7 @@
/obj/structure/girder/proc/dismantle()
new /obj/item/stack/sheet/metal(get_turf(src))
- del(src)
+ qdel(src)
/obj/structure/girder/attack_hand(mob/user as mob)
if (HULK in user.mutations)
@@ -193,25 +193,25 @@
/obj/structure/girder/blob_act()
if(prob(40))
- del(src)
+ qdel(src)
/obj/structure/girder/ex_act(severity)
switch(severity)
if(1.0)
- del(src)
+ qdel(src)
return
if(2.0)
if (prob(30))
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal)
new remains(loc)
- del(src)
+ qdel(src)
return
if(3.0)
if (prob(5))
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal)
new remains(loc)
- del(src)
+ qdel(src)
return
else
return
@@ -246,7 +246,7 @@
/obj/structure/cultgirder/proc/dismantle()
new /obj/effect/decal/remains/human(get_turf(src))
- del(src)
+ qdel(src)
/obj/structure/cultgirder/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench))
@@ -289,7 +289,7 @@
/obj/structure/cultgirder/ex_act(severity)
switch(severity)
if(1.0)
- del(src)
+ qdel(src)
return
if(2.0)
if (prob(30))
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index dda21468a4..54536dd400 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -14,13 +14,13 @@
/obj/structure/grille/ex_act(severity)
- del(src)
+ qdel(src)
/obj/structure/grille/blob_act()
- del(src)
+ qdel(src)
/obj/structure/grille/meteorhit(var/obj/M)
- del(src)
+ qdel(src)
/obj/structure/grille/update_icon()
if(destroyed)
@@ -104,7 +104,7 @@
if(!shock(user, 100))
playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1)
new /obj/item/stack/rods(loc, 2)
- del(src)
+ qdel(src)
else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored))
if(!shock(user, 90))
playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1)
@@ -178,7 +178,7 @@
else
if(health <= -6)
new /obj/item/stack/rods(loc)
- del(src)
+ qdel(src)
return
return
diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
index 4bbb01a9c5..a9b1359b75 100644
--- a/code/game/objects/structures/inflatable.dm
+++ b/code/game/objects/structures/inflatable.dm
@@ -11,7 +11,7 @@
var/obj/structure/inflatable/R = new /obj/structure/inflatable(user.loc)
src.transfer_fingerprints_to(R)
R.add_fingerprint(user)
- del(src)
+ qdel(src)
/obj/structure/inflatable
name = "inflatable wall"
@@ -30,7 +30,7 @@
..()
update_nearby_tiles(need_rebuild=1)
-/obj/structure/inflatable/Del()
+/obj/structure/inflatable/Destroy()
update_nearby_tiles()
..()
@@ -50,7 +50,7 @@
/obj/structure/inflatable/ex_act(severity)
switch(severity)
if(1.0)
- del(src)
+ qdel(src)
return
if(2.0)
deflate(1)
@@ -94,14 +94,14 @@
visible_message("[src] rapidly deflates!")
var/obj/item/inflatable/torn/R = new /obj/item/inflatable/torn(loc)
src.transfer_fingerprints_to(R)
- del(src)
+ qdel(src)
else
//user << "\blue You slowly deflate the inflatable wall."
visible_message("[src] slowly deflates.")
spawn(50)
var/obj/item/inflatable/R = new /obj/item/inflatable(loc)
src.transfer_fingerprints_to(R)
- del(src)
+ qdel(src)
/obj/structure/inflatable/verb/hand_deflate()
set name = "Deflate"
@@ -134,7 +134,7 @@
var/obj/structure/inflatable/door/R = new /obj/structure/inflatable/door(user.loc)
src.transfer_fingerprints_to(R)
R.add_fingerprint(user)
- del(src)
+ qdel(src)
/obj/structure/inflatable/door //Based on mineral door code
name = "inflatable door"
@@ -219,13 +219,13 @@
visible_message("[src] rapidly deflates!")
var/obj/item/inflatable/door/torn/R = new /obj/item/inflatable/door/torn(loc)
src.transfer_fingerprints_to(R)
- del(src)
+ qdel(src)
else
visible_message("[src] slowly deflates.")
spawn(50)
var/obj/item/inflatable/door/R = new /obj/item/inflatable/door(loc)
src.transfer_fingerprints_to(R)
- del(src)
+ qdel(src)
/obj/item/inflatable/torn
name = "torn inflatable wall"
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index de2fef2875..e865805991 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -20,8 +20,8 @@
else
if(spike(G.affecting))
visible_message("[user] has forced [G.affecting] onto the spike, killing them instantly!")
- del(G.affecting)
- del(G)
+ qdel(G.affecting)
+ qdel(G)
else
user << "They are too big for the spike, try something smaller!"
diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm
index 6bbb8cfa24..3c32052d72 100644
--- a/code/game/objects/structures/lamarr_cage.dm
+++ b/code/game/objects/structures/lamarr_cage.dm
@@ -15,7 +15,7 @@
if (1)
new /obj/item/weapon/shard( src.loc )
Break()
- del(src)
+ qdel(src)
if (2)
if (prob(50))
src.health -= 15
@@ -37,13 +37,13 @@
if (prob(75))
new /obj/item/weapon/shard( src.loc )
Break()
- del(src)
+ qdel(src)
/obj/structure/lamarr/meteorhit(obj/O as obj)
new /obj/item/weapon/shard( src.loc )
Break()
- del(src)
+ qdel(src)
/obj/structure/lamarr/proc/healthcheck()
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index a32af450d5..788a6711f0 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -13,10 +13,10 @@
///// Z-Level Stuff
if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/floor/open)))
///// Z-Level Stuff
- del(src)
+ qdel(src)
for(var/obj/structure/lattice/LAT in src.loc)
if(LAT != src)
- del(LAT)
+ qdel(LAT)
icon = 'icons/obj/smoothlattice.dmi'
icon_state = "latticeblank"
updateOverlays()
@@ -26,7 +26,7 @@
L = locate(/obj/structure/lattice, get_step(src, dir))
L.updateOverlays()
-/obj/structure/lattice/Del()
+/obj/structure/lattice/Destroy()
for (var/dir in cardinal)
var/obj/structure/lattice/L
if(locate(/obj/structure/lattice, get_step(src, dir)))
@@ -35,16 +35,16 @@
..()
/obj/structure/lattice/blob_act()
- del(src)
+ qdel(src)
return
/obj/structure/lattice/ex_act(severity)
switch(severity)
if(1.0)
- del(src)
+ qdel(src)
return
if(2.0)
- del(src)
+ qdel(src)
return
if(3.0)
return
@@ -62,13 +62,13 @@
if(WT.remove_fuel(0, user))
user << "\blue Slicing lattice joints ..."
new /obj/item/stack/rods(src.loc)
- del(src)
+ qdel(src)
return
/obj/structure/lattice/proc/updateOverlays()
//if(!(istype(src.loc, /turf/space)))
- // del(src)
+ // qdel(src)
spawn(1)
overlays = list()
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 8ce25ddb67..d0a60d2a3e 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -22,7 +22,7 @@
name = "[mineralType] door"
update_nearby_tiles(need_rebuild=1)
- Del()
+ Destroy()
update_nearby_tiles()
..()
@@ -137,7 +137,7 @@
var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]")
for(var/i = 3, i <= oreAmount, i++)
new ore(get_turf(src))
- del(src)
+ qdel(src)
ex_act(severity = 1)
switch(severity)
@@ -239,7 +239,7 @@
if(!devastated)
for(var/i = 1, i <= oreAmount, i++)
new/obj/item/stack/sheet/wood(get_turf(src))
- del(src)
+ qdel(src)
/obj/structure/mineral_door/resin
mineralType = "resin"
@@ -279,7 +279,7 @@
isSwitchingStates = 0
Dismantle(devastated = 0)
- del(src)
+ qdel(src)
CheckHardness()
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index f0a5b9003a..4868f6e0ca 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -91,5 +91,5 @@
vox.real_name = newname
vox.name = vox.real_name
raiders.update_access(vox)
- del(user)
+ qdel(user)
..()
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index f30c4d854d..599e8aabc8 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -36,21 +36,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(5))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
- del(src)
+ qdel(src)
return
return
@@ -64,7 +64,7 @@
A.loc = src
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
//src.connected = null
- del(src.connected)
+ qdel(src.connected)
else
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
src.connected = new /obj/structure/m_tray( src.loc )
@@ -80,7 +80,7 @@
src.connected.set_dir(src.dir)
else
//src.connected = null
- del(src.connected)
+ qdel(src.connected)
src.add_fingerprint(user)
update()
return
@@ -116,7 +116,7 @@
src.connected.icon_state = "morguet"
else
//src.connected = null
- del(src.connected)
+ qdel(src.connected)
return
@@ -144,7 +144,7 @@
src.connected.update()
add_fingerprint(user)
//SN src = null
- del(src)
+ qdel(src)
return
return
@@ -195,21 +195,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(5))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
- del(src)
+ qdel(src)
return
return
@@ -232,7 +232,7 @@
A.loc = src
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
//src.connected = null
- del(src.connected)
+ qdel(src.connected)
else if (src.locked == 0)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
src.connected = new /obj/structure/c_tray( src.loc )
@@ -247,7 +247,7 @@
src.connected.icon_state = "cremat"
else
//src.connected = null
- del(src.connected)
+ qdel(src.connected)
src.add_fingerprint(user)
update()
@@ -282,7 +282,7 @@
src.connected.icon_state = "cremat"
else
//src.connected = null
- del(src.connected)
+ qdel(src.connected)
return
/obj/structure/crematorium/proc/cremate(atom/A, mob/user as mob)
@@ -323,10 +323,10 @@
//log_attack("\[[time_stamp()]\] [user]/[user.ckey] cremated [M]/[M.ckey]")
M.death(1)
M.ghostize()
- del(M)
+ qdel(M)
for(var/obj/O in contents) //obj instead of obj/item so that bodybags and ashes get destroyed. We dont want tons and tons of ash piling up
- del(O)
+ qdel(O)
new /obj/effect/decal/cleanable/ash(src)
sleep(30)
@@ -360,7 +360,7 @@
src.connected.update()
add_fingerprint(user)
//SN src = null
- del(src)
+ qdel(src)
return
return
diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm
index 0b11d09fcc..f5c988ae97 100644
--- a/code/game/objects/structures/signs.dm
+++ b/code/game/objects/structures/signs.dm
@@ -8,19 +8,19 @@
/obj/structure/sign/ex_act(severity)
switch(severity)
if(1.0)
- del(src)
+ qdel(src)
return
if(2.0)
- del(src)
+ qdel(src)
return
if(3.0)
- del(src)
+ qdel(src)
return
else
return
/obj/structure/sign/blob_act()
- del(src)
+ qdel(src)
return
/obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction
@@ -33,7 +33,7 @@
//var/icon/I = icon('icons/obj/decals.dmi', icon_state)
//S.icon = I.Scale(24, 24)
S.sign_state = icon_state
- del(src)
+ qdel(src)
else ..()
/obj/item/sign
@@ -62,7 +62,7 @@
S.desc = desc
S.icon_state = sign_state
user << "You fasten \the [S] with your [tool]."
- del(src)
+ qdel(src)
else ..()
/obj/structure/sign/double/map
diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
index fad0c3d0bd..46cf8ffcd8 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
@@ -79,5 +79,5 @@
/obj/structure/bed/nest/proc/healthcheck()
if(health <=0)
density = 0
- del(src)
+ qdel(src)
return
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index 6d50066a74..7e412cfaa9 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -20,27 +20,27 @@
/obj/structure/bed/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(5))
- del(src)
+ qdel(src)
return
/obj/structure/bed/blob_act()
if(prob(75))
new /obj/item/stack/sheet/metal(src.loc)
- del(src)
+ qdel(src)
/obj/structure/bed/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench))
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
new /obj/item/stack/sheet/metal(src.loc)
- del(src)
+ qdel(src)
else
..()
@@ -71,7 +71,7 @@
visible_message("[user] collapses \the [src.name].")
new/obj/item/roller(get_turf(src))
spawn(0)
- del(src)
+ qdel(src)
return
..()
@@ -85,7 +85,7 @@
/obj/item/roller/attack_self(mob/user)
var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(user.loc)
R.add_fingerprint(user)
- del(src)
+ qdel(src)
/obj/item/roller/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -119,7 +119,7 @@
user << "\blue You deploy the roller bed."
var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(user.loc)
R.add_fingerprint(user)
- del(held)
+ qdel(held)
held = null
@@ -153,5 +153,5 @@
visible_message("[usr] collapses \the [src.name].")
new/obj/item/roller(get_turf(src))
spawn(0)
- del(src)
+ qdel(src)
return
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index c8746e1919..b811294a07 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -26,7 +26,7 @@
E.part = SK
SK.loc = E
SK.master = E
- del(src)
+ qdel(src)
/obj/structure/bed/chair/attack_tk(mob/user as mob)
if(buckled_mob)
@@ -79,7 +79,7 @@
if(istype(W, /obj/item/weapon/wrench))
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
new /obj/item/stack/sheet/wood(src.loc)
- del(src)
+ qdel(src)
else
..()
diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
index 16e9161dcf..8de3bcf0a5 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
@@ -13,7 +13,7 @@
user.remove_from_mob(src)
var/obj/item/stack/sheet/metal/m = new/obj/item/stack/sheet/metal
m.loc = get_turf(src)
- del src
+ qdel(src)
var/mob/living/T = M
T.Weaken(10)
T.apply_damage(20)
@@ -23,25 +23,25 @@
/obj/item/weapon/stool/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(5))
- del(src)
+ qdel(src)
return
/obj/item/weapon/stool/blob_act()
if(prob(75))
new /obj/item/stack/sheet/metal(src.loc)
- del(src)
+ qdel(src)
/obj/item/weapon/stool/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench))
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
new /obj/item/stack/sheet/metal(src.loc)
- del(src)
+ qdel(src)
..()
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index d14ddf1405..f206bfc11f 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -59,11 +59,11 @@
..()
for(var/obj/structure/table/T in src.loc)
if(T != src)
- del(T)
+ qdel(T)
update_icon()
update_adjacent()
-/obj/structure/table/Del()
+/obj/structure/table/Destroy()
update_adjacent()
..()
@@ -328,7 +328,7 @@
return 0
else
visible_message("[src] breaks down!")
- destroy()
+ qdel(src)
return 1
return 1
@@ -375,7 +375,7 @@
G.affecting.loc = src.loc
G.affecting.Weaken(5)
visible_message("[G.assailant] puts [G.affecting] on \the [src].")
- del(W)
+ qdel(W)
return
// Handle dissembly.
@@ -386,7 +386,7 @@
user << "You locate the bolts and begin disassembling \the [src]..."
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user,50))
- destroy()
+ qdel(src)
return
// Handle weakening.
@@ -429,7 +429,7 @@
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
user.visible_message("The [src] was sliced apart by [user]!")
- destroy()
+ qdel(src)
user.drop_item(src.loc)
return
diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm
index fcd65e2cdf..47a2f53fb3 100644
--- a/code/game/objects/structures/transit_tubes.dm
+++ b/code/game/objects/structures/transit_tubes.dm
@@ -47,7 +47,7 @@
-/obj/structure/transit_tube_pod/Del()
+/obj/structure/transit_tube_pod/Destroy()
for(var/atom/movable/AM in contents)
AM.loc = loc
@@ -63,7 +63,7 @@ obj/structure/ex_act(severity)
AM.loc = loc
AM.ex_act(severity++)
- del(src)
+ qdel(src)
return
if(2.0)
if(prob(50))
@@ -71,7 +71,7 @@ obj/structure/ex_act(severity)
AM.loc = loc
AM.ex_act(severity++)
- del(src)
+ qdel(src)
return
if(3.0)
return
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 62f3ef60c1..81a3a16cdd 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -173,7 +173,7 @@
/obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up
overlays.Cut() //once it's been on for a while, in addition to handling the water overlay.
if(mymist)
- del(mymist)
+ qdel(mymist)
if(on)
overlays += image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir)
@@ -183,16 +183,16 @@
spawn(50)
if(src && on)
ismist = 1
- mymist = new /obj/effect/mist(loc)
+ mymist = PoolOrNew(/obj/effect/mist,loc)
else
ismist = 1
- mymist = new /obj/effect/mist(loc)
+ mymist = PoolOrNew(/obj/effect/mist,loc)
else if(ismist)
ismist = 1
- mymist = new /obj/effect/mist(loc)
+ mymist = PoolOrNew(/obj/effect/mist,loc)
spawn(250)
if(src && !on)
- del(mymist)
+ qdel(mymist)
ismist = 0
/obj/machinery/shower/Crossed(atom/movable/O)
@@ -292,7 +292,7 @@
loc.clean_blood()
for(var/obj/effect/E in tile)
if(istype(E,/obj/effect/rune) || istype(E,/obj/effect/decal/cleanable) || istype(E,/obj/effect/overlay))
- del(E)
+ qdel(E)
/obj/machinery/shower/process()
if(!on) return
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index a0855a35b0..0aaeb83c98 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -37,7 +37,7 @@ obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0)
update_nearby_tiles(need_rebuild=1)
-obj/structure/windoor_assembly/Del()
+obj/structure/windoor_assembly/Destroy()
density = 0
update_nearby_tiles()
..()
@@ -79,7 +79,7 @@ obj/structure/windoor_assembly/Del()
new /obj/item/stack/sheet/glass/reinforced(get_turf(src), 5)
if(secure)
new /obj/item/stack/rods(get_turf(src), 4)
- del(src)
+ qdel(src)
else
user << "\blue You need more welding fuel to dissassemble the windoor assembly."
return
@@ -249,7 +249,7 @@ obj/structure/windoor_assembly/Del()
src.electronics.loc = windoor
- del(src)
+ qdel(src)
else
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index fd96873b7a..c6afa5e2c1 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -93,7 +93,7 @@
else
new shardtype(loc)
if(reinf) new /obj/item/stack/rods(loc)
- del(src)
+ qdel(src)
return
@@ -111,7 +111,7 @@
/obj/structure/window/ex_act(severity)
switch(severity)
if(1.0)
- del(src)
+ qdel(src)
return
if(2.0)
shatter(0)
@@ -216,7 +216,7 @@
if(istype(G.affecting,/mob/living))
var/mob/living/M = G.affecting
var/state = G.state
- del(W) //gotta delete it here because if window breaks, it won't get deleted
+ qdel(W) //gotta delete it here because if window breaks, it won't get deleted
switch (state)
if(1)
M.visible_message("[user] slams [M] against \the [src]!")
@@ -266,7 +266,7 @@
mats.amount = is_fulltile() ? 4 : 2
else
new glasstype(loc)
- del(src)
+ qdel(src)
else
if(W.damtype == BRUTE || W.damtype == BURN)
hit(W.force)
@@ -334,7 +334,7 @@
update_nearby_icons()
-/obj/structure/window/Del()
+/obj/structure/window/Destroy()
density = 0
update_nearby_tiles()
update_nearby_icons()
diff --git a/code/game/response_team.dm b/code/game/response_team.dm
index a64230b1d6..23e5f764a3 100644
--- a/code/game/response_team.dm
+++ b/code/game/response_team.dm
@@ -58,7 +58,7 @@ client/verb/JoinResponseTeam()
L.name = "Commando"
return
create_response_team(L.loc, new_name)
- del(L)
+ qdel(L)
else
usr << "You need to be an observer or new player to use this."
diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm
index 907b2f6758..c31b5a8ef1 100644
--- a/code/game/smoothwall.dm
+++ b/code/game/smoothwall.dm
@@ -100,7 +100,7 @@
..()*/
-/turf/simulated/wall/Del()
+/turf/simulated/wall/Destroy()
spawn(10)
for(var/turf/simulated/wall/W in range(src,1))
W.relativewall()
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index d32173c267..3c6e434b8c 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -84,13 +84,13 @@ var/list/mechtoys = list(
/obj/structure/plasticflaps/ex_act(severity)
switch(severity)
if (1)
- del(src)
+ qdel(src)
if (2)
if (prob(50))
- del(src)
+ qdel(src)
if (3)
if (prob(5))
- del(src)
+ qdel(src)
/obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates
name = "airtight plastic flaps"
@@ -102,7 +102,7 @@ var/list/mechtoys = list(
T.blocks_air = 1
..()
- Del() //lazy hack to set the turf to allow air to pass if it's a simulated floor
+ Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor
var/turf/T = get_turf(loc)
if(T)
if(istype(T, /turf/simulated/floor))
@@ -217,7 +217,7 @@ var/list/mechtoys = list(
var/obj/item/stack/sheet/mineral/platinum/P = A
plat_count += P.get_amount()
- del(MA)
+ qdel(MA)
if(phoron_count)
points += phoron_count * points_per_phoron
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 07b68a329a..46007735c3 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -457,7 +457,7 @@ turf/simulated/floor/proc/update_icon()
if(is_light_floor())
if(get_lightfloor_state())
user.remove_from_mob(C)
- del(C)
+ qdel(C)
set_lightfloor_state(0) //fixing it by bashing it with a light bulb, fun eh?
update_icon()
user << "\blue You replace the light bulb."
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index e19fadf863..ef7dd74e8f 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -45,12 +45,12 @@
take_damage(tforce)
-/turf/simulated/wall/Del()
- for(var/obj/effect/E in src) if(E.name == "Wallrot") del E
+/turf/simulated/wall/Destroy()
+ for(var/obj/effect/E in src) if(E.name == "Wallrot") qdel(E)
..()
/turf/simulated/wall/ChangeTurf(var/newtype)
- for(var/obj/effect/E in src) if(E.name == "Wallrot") del E
+ for(var/obj/effect/E in src) if(E.name == "Wallrot") qdel(E)
for(var/obj/effect/plant/plant in range(1))
plant.update_neighbors()
..(newtype)
@@ -251,7 +251,7 @@
user << "The thermite starts melting through the wall."
spawn(100)
- if(O) del(O)
+ if(O) qdel(O)
// F.sd_LumReset() //TODO: ~Carn
return
@@ -326,7 +326,7 @@
user << "You burn away the fungi with \the [WT]."
playsound(src, 'sound/items/Welder.ogg', 10, 1)
for(var/obj/effect/E in src) if(E.name == "Wallrot")
- del E
+ qdel(E)
rotting = 0
return
else if(!is_sharp(W) && W.force >= 10 || W.force >= 20)
diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm
index 5585de31d8..335d701656 100644
--- a/code/game/turfs/simulated/walls_mineral.dm
+++ b/code/game/turfs/simulated/walls_mineral.dm
@@ -92,7 +92,7 @@
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))
diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm
index 497371eb5f..102a51b2b4 100644
--- a/code/game/turfs/simulated/walls_reinforced.dm
+++ b/code/game/turfs/simulated/walls_reinforced.dm
@@ -41,7 +41,7 @@
user << "You burn away the fungi with \the [WT]."
playsound(src, 'sound/items/Welder.ogg', 10, 1)
for(var/obj/effect/E in src) if(E.name == "Wallrot")
- del E
+ qdel(E)
rotting = 0
return
else if(!is_sharp(W) && W.force >= 10 || W.force >= 20)
@@ -126,7 +126,7 @@
if (O.amount > 1)
O.amount--
else
- del(O)
+ qdel(O)
return
if(2)
@@ -272,7 +272,7 @@
if (MS.amount > 1)
MS.amount--
else
- del(MS)
+ qdel(MS)
//APC
else if( istype(W,/obj/item/apc_frame) )
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 2fd89bb876..bfd7548276 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -43,7 +43,7 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" =
var/obj/item/stack/tile/plasteel/S = C
if (S.get_amount() < 1)
return
- del(L)
+ qdel(L)
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
S.build(src)
S.use(1)
@@ -69,11 +69,11 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" =
if(A.z > 6 && !config.use_overmap) return
if (A.x <= TRANSITIONEDGE || A.x >= (world.maxx - TRANSITIONEDGE - 1) || A.y <= TRANSITIONEDGE || A.y >= (world.maxy - TRANSITIONEDGE - 1))
if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
- del(A)
+ qdel(A)
return
if(istype(A, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks travel Z levels ... And moving this shit down here so it only fires when they're actually trying to change z-level.
- del(A) //The disk's Del() proc ensures a new one is created
+ qdel(A) //The disk's Destroy() proc ensures a new one is created
return
if(config.use_overmap)
overmap_spacetravel(src,A)
@@ -94,10 +94,10 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" =
MM.inertia_dir = 2
else
for(var/obj/item/weapon/disk/nuclear/N in disk_search)
- del(N)//Make the disk respawn it is on a clientless mob or corpse
+ qdel(N)//Make the disk respawn it is on a clientless mob or corpse
else
for(var/obj/item/weapon/disk/nuclear/N in disk_search)
- del(N)//Make the disk respawn if it is floating on its own
+ qdel(N)//Make the disk respawn if it is floating on its own
return
var/move_to_z = src.z
@@ -148,7 +148,7 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" =
if(src.x <= 1)
if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
- del(A)
+ qdel(A)
return
var/list/cur_pos = src.get_global_map_pos()
@@ -173,7 +173,7 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" =
A.loc.Entered(A)
else if (src.x >= world.maxx)
if(istype(A, /obj/effect/meteor))
- del(A)
+ qdel(A)
return
var/list/cur_pos = src.get_global_map_pos()
@@ -198,7 +198,7 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" =
A.loc.Entered(A)
else if (src.y <= 1)
if(istype(A, /obj/effect/meteor))
- del(A)
+ qdel(A)
return
var/list/cur_pos = src.get_global_map_pos()
if(!cur_pos) return
@@ -223,7 +223,7 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" =
else if (src.y >= world.maxy)
if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
- del(A)
+ qdel(A)
return
var/list/cur_pos = src.get_global_map_pos()
if(!cur_pos) return
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 1bc058ef6d..7353531f59 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -197,7 +197,7 @@
/turf/proc/RemoveLattice()
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
if(L)
- del L
+ qdel(L)
//Creates a new turf
/turf/proc/ChangeTurf(var/turf/N, var/tell_universe=1, var/force_lighting_update = 0)
diff --git a/code/game/turfs/turf_flick_animations.dm b/code/game/turfs/turf_flick_animations.dm
index 59bcfd56d7..b1bccd51bc 100644
--- a/code/game/turfs/turf_flick_animations.dm
+++ b/code/game/turfs/turf_flick_animations.dm
@@ -17,5 +17,5 @@
flick("turf_animation",c_animation)
spawn(10)
if(c_animation)
- PlaceInPool(c_animation)
+ qdel(c_animation)
c_animation = null
diff --git a/code/game/vehicles/vehicle.dm b/code/game/vehicles/vehicle.dm
index 3ec73f3eeb..4088528b35 100644
--- a/code/game/vehicles/vehicle.dm
+++ b/code/game/vehicles/vehicle.dm
@@ -1,190 +1,190 @@
-
-
-/obj/vehicle
- name = "Vehicle"
- icon = 'icons/vehicles/vehicles.dmi'
- density = 1
- anchored = 1
- unacidable = 1 //To avoid the pilot-deleting shit that came with mechas
- layer = MOB_LAYER
- //var/can_move = 1
- var/mob/living/carbon/occupant = null
- //var/step_in = 10 //make a step in step_in/10 sec.
- //var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South.
- //var/step_energy_drain = 10
- var/health = 300 //health is health
- //var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
- //the values in this list show how much damage will pass through, not how much will be absorbed.
- var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1)
- var/obj/item/weapon/cell/cell //Our power source
- var/state = 0
- var/list/log = new
- var/last_message = 0
- var/add_req_access = 1
- var/maint_access = 1
- //var/dna //dna-locking the mech
- var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference
- var/datum/effect/effect/system/spark_spread/spark_system = new
- var/lights = 0
- var/lights_power = 6
-
- //inner atmos //These go in airtight.dm, not all vehicles are space-faring -Agouri
- //var/use_internal_tank = 0
- //var/internal_tank_valve = ONE_ATMOSPHERE
- //var/obj/machinery/portable_atmospherics/canister/internal_tank
- //var/datum/gas_mixture/cabin_air
- //var/obj/machinery/atmospherics/portables_connector/connected_port = null
-
- var/obj/item/device/radio/radio = null
-
- var/max_temperature = 2500
- //var/internal_damage_threshold = 50 //health percentage below which internal damage is possible
- var/internal_damage = 0 //contains bitflags
-
- var/list/operation_req_access = list()//required access level for mecha operation
- var/list/internals_req_access = list(access_engine,access_robotics)//required access level to open cell compartment
-
- //var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature //In airtight.dm you go -Agouri
- var/datum/global_iterator/pr_inertial_movement //controls intertial movement in spesss
-
- //var/datum/global_iterator/pr_give_air //moves air from tank to cabin //Y-you too -Agouri
-
- var/datum/global_iterator/pr_internal_damage //processes internal damage
-
-
- var/wreckage
-
- var/list/equipment = new
- var/obj/selected
- //var/max_equip = 3
-
- var/datum/events/events
-
-
-
-/obj/vehicle/New()
- ..()
- events = new
- icon_state += "-unmanned"
- add_radio()
- //add_cabin() //No cabin for non-airtights
-
- spark_system.set_up(2, 0, src)
- spark_system.attach(src)
- add_cell()
- add_iterators()
- removeVerb(/obj/mecha/verb/disconnect_from_port)
- removeVerb(/atom/movable/verb/pull)
- log_message("[src.name]'s functions initialised. Work protocols active - Entering IDLE mode.")
- loc.Entered(src)
- return
-
-
-//################ Helpers ###########################################################
-
-
-/obj/vehicle/proc/removeVerb(verb_path)
- verbs -= verb_path
-
-/obj/vehicle/proc/addVerb(verb_path)
- verbs += verb_path
-
-/*/obj/vehicle/proc/add_airtank() //In airtight.dm -Agouri
- internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src)
- return internal_tank*/
-
-/obj/vehicle/proc/add_cell(var/obj/item/weapon/cell/C=null)
- if(C)
- C.forceMove(src)
- cell = C
- return
- cell = new(src)
- cell.charge = 15000
- cell.maxcharge = 15000
-
-/*/obj/vehicle/proc/add_cabin() //In airtight.dm -Agouri
- cabin_air = new
- cabin_air.temperature = T20C
- cabin_air.volume = 200
- cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
- cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
- return cabin_air*/
-
-/obj/vehicle/proc/add_radio()
- radio = new(src)
- radio.name = "[src] radio"
- radio.icon = icon
- radio.icon_state = icon_state
- radio.subspace_transmission = 1
-
-/obj/vehicle/proc/add_iterators()
- pr_inertial_movement = new /datum/global_iterator/vehicle_intertial_movement(null,0)
- //pr_internal_damage = new /datum/global_iterator/vehicle_internal_damage(list(src),0)
- //pr_int_temp_processor = new /datum/global_iterator/vehicle_preserve_temp(list(src)) //In airtight.dm's add_airtight_iterators -Agouri
- //pr_give_air = new /datum/global_iterator/vehicle_tank_give_air(list(src) //Same here -Agouri
-
-/obj/vehicle/proc/check_for_support()
- if(locate(/obj/structure/grille, orange(1, src)) || locate(/obj/structure/lattice, orange(1, src)) || locate(/turf/simulated, orange(1, src)) || locate(/turf/unsimulated, orange(1, src)))
- return 1
- else
- return 0
-
-//################ Logs and messages ############################################
-
-
-/obj/vehicle/proc/log_message(message as text,red=null)
- log.len++
- log[log.len] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]")
- return log.len
-
-
-
-//################ Global Iterator Datums ######################################
-
-
-/datum/global_iterator/vehicle_intertial_movement //inertial movement in space
- delay = 7
-
- process(var/obj/vehicle/V as obj, direction)
- if(direction)
- if(!step(V, direction)||V.check_for_support())
- src.stop()
- else
- src.stop()
- return
-
-
-/datum/global_iterator/mecha_internal_damage // processing internal damage
-
- process(var/obj/mecha/mecha)
- if(!mecha.hasInternalDamage())
- return stop()
- if(mecha.hasInternalDamage(MECHA_INT_FIRE))
- if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5))
- mecha.clearInternalDamage(MECHA_INT_FIRE)
- if(mecha.internal_tank)
- if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)))
- mecha.setInternalDamage(MECHA_INT_TANK_BREACH)
- var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
- if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents
- int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15))
- if(mecha.cabin_air && mecha.cabin_air.return_volume()>0)
- mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.return_temperature()+rand(10,15))
- if(mecha.cabin_air.return_temperature()>mecha.max_temperature/2)
- mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.return_temperature(),0.1),"fire")
- if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum
- mecha.pr_int_temp_processor.stop()
- if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank
- if(mecha.internal_tank)
- var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
- var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10)
- if(mecha.loc && hascall(mecha.loc,"assume_air"))
- mecha.loc.assume_air(leaked_gas)
- else
- del(leaked_gas)
- if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT))
- if(mecha.get_charge())
- mecha.spark_system.start()
- mecha.cell.charge -= min(20,mecha.cell.charge)
- mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge)
+
+
+/obj/vehicle
+ name = "Vehicle"
+ icon = 'icons/vehicles/vehicles.dmi'
+ density = 1
+ anchored = 1
+ unacidable = 1 //To avoid the pilot-deleting shit that came with mechas
+ layer = MOB_LAYER
+ //var/can_move = 1
+ var/mob/living/carbon/occupant = null
+ //var/step_in = 10 //make a step in step_in/10 sec.
+ //var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South.
+ //var/step_energy_drain = 10
+ var/health = 300 //health is health
+ //var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
+ //the values in this list show how much damage will pass through, not how much will be absorbed.
+ var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1)
+ var/obj/item/weapon/cell/cell //Our power source
+ var/state = 0
+ var/list/log = new
+ var/last_message = 0
+ var/add_req_access = 1
+ var/maint_access = 1
+ //var/dna //dna-locking the mech
+ var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference
+ var/datum/effect/effect/system/spark_spread/spark_system = new
+ var/lights = 0
+ var/lights_power = 6
+
+ //inner atmos //These go in airtight.dm, not all vehicles are space-faring -Agouri
+ //var/use_internal_tank = 0
+ //var/internal_tank_valve = ONE_ATMOSPHERE
+ //var/obj/machinery/portable_atmospherics/canister/internal_tank
+ //var/datum/gas_mixture/cabin_air
+ //var/obj/machinery/atmospherics/portables_connector/connected_port = null
+
+ var/obj/item/device/radio/radio = null
+
+ var/max_temperature = 2500
+ //var/internal_damage_threshold = 50 //health percentage below which internal damage is possible
+ var/internal_damage = 0 //contains bitflags
+
+ var/list/operation_req_access = list()//required access level for mecha operation
+ var/list/internals_req_access = list(access_engine,access_robotics)//required access level to open cell compartment
+
+ //var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature //In airtight.dm you go -Agouri
+ var/datum/global_iterator/pr_inertial_movement //controls intertial movement in spesss
+
+ //var/datum/global_iterator/pr_give_air //moves air from tank to cabin //Y-you too -Agouri
+
+ var/datum/global_iterator/pr_internal_damage //processes internal damage
+
+
+ var/wreckage
+
+ var/list/equipment = new
+ var/obj/selected
+ //var/max_equip = 3
+
+ var/datum/events/events
+
+
+
+/obj/vehicle/New()
+ ..()
+ events = new
+ icon_state += "-unmanned"
+ add_radio()
+ //add_cabin() //No cabin for non-airtights
+
+ spark_system.set_up(2, 0, src)
+ spark_system.attach(src)
+ add_cell()
+ add_iterators()
+ removeVerb(/obj/mecha/verb/disconnect_from_port)
+ removeVerb(/atom/movable/verb/pull)
+ log_message("[src.name]'s functions initialised. Work protocols active - Entering IDLE mode.")
+ loc.Entered(src)
+ return
+
+
+//################ Helpers ###########################################################
+
+
+/obj/vehicle/proc/removeVerb(verb_path)
+ verbs -= verb_path
+
+/obj/vehicle/proc/addVerb(verb_path)
+ verbs += verb_path
+
+/*/obj/vehicle/proc/add_airtank() //In airtight.dm -Agouri
+ internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src)
+ return internal_tank*/
+
+/obj/vehicle/proc/add_cell(var/obj/item/weapon/cell/C=null)
+ if(C)
+ C.forceMove(src)
+ cell = C
+ return
+ cell = new(src)
+ cell.charge = 15000
+ cell.maxcharge = 15000
+
+/*/obj/vehicle/proc/add_cabin() //In airtight.dm -Agouri
+ cabin_air = new
+ cabin_air.temperature = T20C
+ cabin_air.volume = 200
+ cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
+ cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
+ return cabin_air*/
+
+/obj/vehicle/proc/add_radio()
+ radio = new(src)
+ radio.name = "[src] radio"
+ radio.icon = icon
+ radio.icon_state = icon_state
+ radio.subspace_transmission = 1
+
+/obj/vehicle/proc/add_iterators()
+ pr_inertial_movement = new /datum/global_iterator/vehicle_intertial_movement(null,0)
+ //pr_internal_damage = new /datum/global_iterator/vehicle_internal_damage(list(src),0)
+ //pr_int_temp_processor = new /datum/global_iterator/vehicle_preserve_temp(list(src)) //In airtight.dm's add_airtight_iterators -Agouri
+ //pr_give_air = new /datum/global_iterator/vehicle_tank_give_air(list(src) //Same here -Agouri
+
+/obj/vehicle/proc/check_for_support()
+ if(locate(/obj/structure/grille, orange(1, src)) || locate(/obj/structure/lattice, orange(1, src)) || locate(/turf/simulated, orange(1, src)) || locate(/turf/unsimulated, orange(1, src)))
+ return 1
+ else
+ return 0
+
+//################ Logs and messages ############################################
+
+
+/obj/vehicle/proc/log_message(message as text,red=null)
+ log.len++
+ log[log.len] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]")
+ return log.len
+
+
+
+//################ Global Iterator Datums ######################################
+
+
+/datum/global_iterator/vehicle_intertial_movement //inertial movement in space
+ delay = 7
+
+ process(var/obj/vehicle/V as obj, direction)
+ if(direction)
+ if(!step(V, direction)||V.check_for_support())
+ src.stop()
+ else
+ src.stop()
+ return
+
+
+/datum/global_iterator/mecha_internal_damage // processing internal damage
+
+ process(var/obj/mecha/mecha)
+ if(!mecha.hasInternalDamage())
+ return stop()
+ if(mecha.hasInternalDamage(MECHA_INT_FIRE))
+ if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5))
+ mecha.clearInternalDamage(MECHA_INT_FIRE)
+ if(mecha.internal_tank)
+ if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)))
+ mecha.setInternalDamage(MECHA_INT_TANK_BREACH)
+ var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
+ if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents
+ int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15))
+ if(mecha.cabin_air && mecha.cabin_air.return_volume()>0)
+ mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.return_temperature()+rand(10,15))
+ if(mecha.cabin_air.return_temperature()>mecha.max_temperature/2)
+ mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.return_temperature(),0.1),"fire")
+ if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum
+ mecha.pr_int_temp_processor.stop()
+ if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank
+ if(mecha.internal_tank)
+ var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
+ var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10)
+ if(mecha.loc && hascall(mecha.loc,"assume_air"))
+ mecha.loc.assume_air(leaked_gas)
+ else
+ qdel(leaked_gas)
+ if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT))
+ if(mecha.get_charge())
+ mecha.spark_system.start()
+ mecha.cell.charge -= min(20,mecha.cell.charge)
+ mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge)
return
\ No newline at end of file
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 0da8f61240..f5bf7af81d 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -523,7 +523,7 @@ var/list/admin_verbs_mentor = list(
if(C)
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.")
C << "You have been autobanned due to a warning by [ckey].
This is a temporary ban, it will be removed in [AUTOBANTIME] minutes."
- del(C)
+ qdel(C)
else
message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.")
AddBan(warned_ckey, D.last_id, "Autobanning due to too many formal warnings", ckey, 1, AUTOBANTIME)
diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm
index 0588ef5e6d..dbd4de6444 100644
--- a/code/modules/admin/holder2.dm
+++ b/code/modules/admin/holder2.dm
@@ -16,7 +16,7 @@ var/list/admin_datums = list()
/datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey)
if(!ckey)
error("Admin datum created without a ckey argument. Datum has been deleted")
- del(src)
+ qdel(src)
return
admincaster_signature = "Nanotrasen Officer #[rand(0,9)][rand(0,9)][rand(0,9)]"
rank = initial_rank
@@ -91,5 +91,5 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check
/client/proc/deadmin()
if(holder)
holder.disassociate()
- //del(holder)
+ //qdel(holder)
return 1
diff --git a/code/modules/admin/player_notes.dm b/code/modules/admin/player_notes.dm
index 3a74da5fca..a00a208d3b 100644
--- a/code/modules/admin/player_notes.dm
+++ b/code/modules/admin/player_notes.dm
@@ -1,167 +1,167 @@
-//This stuff was originally intended to be integrated into the ban-system I was working on
-//but it's safe to say that'll never be finished. So I've merged it into the current player panel.
-//enjoy ~Carn
-/*
-#define NOTESFILE "data/player_notes.sav" //where the player notes are saved
-
-datum/admins/proc/notes_show(var/ckey)
- usr << browse("Player Notes[notes_gethtml(ckey)]","window=player_notes;size=700x400")
-
-
-datum/admins/proc/notes_gethtml(var/ckey)
- var/savefile/notesfile = new(NOTESFILE)
- if(!notesfile) return "Error: Cannot access [NOTESFILE]"
- if(ckey)
- . = "Notes for [ckey]: \[+\] \[-\]
"
- notesfile.cd = "/[ckey]"
- var/index = 1
- while( !notesfile.eof )
- var/note
- notesfile >> note
- . += "[note] \[-\]
"
- index++
- else
- . = "All Notes: \[+\] \[-\]
"
- notesfile.cd = "/"
- for(var/dir in notesfile.dir)
- . += "[dir]
"
- return
-
-
-//handles adding notes to the end of a ckey's buffer
-//originally had seperate entries such as var/by to record who left the note and when
-//but the current bansystem is a heap of dung.
-/proc/notes_add(var/ckey, var/note)
- if(!ckey)
- ckey = ckey(input(usr,"Who would you like to add notes for?","Enter a ckey",null) as text|null)
- if(!ckey) return
-
- if(!note)
- note = html_encode(input(usr,"Enter your note:","Enter some text",null) as message|null)
- if(!note) return
-
- var/savefile/notesfile = new(NOTESFILE)
- if(!notesfile) return
- notesfile.cd = "/[ckey]"
- notesfile.eof = 1 //move to the end of the buffer
- notesfile << "[time2text(world.realtime,"DD-MMM-YYYY")] | [note][(usr && usr.ckey)?" ~[usr.ckey]":""]"
- return
-
-//handles removing entries from the buffer, or removing the entire directory if no start_index is given
-/proc/notes_remove(var/ckey, var/start_index, var/end_index)
- var/savefile/notesfile = new(NOTESFILE)
- if(!notesfile) return
-
- if(!ckey)
- notesfile.cd = "/"
- ckey = ckey(input(usr,"Who would you like to remove notes for?","Enter a ckey",null) as null|anything in notesfile.dir)
- if(!ckey) return
-
- if(start_index)
- notesfile.cd = "/[ckey]"
- var/list/noteslist = list()
- if(!end_index) end_index = start_index
- var/index = 0
- while( !notesfile.eof )
- index++
- var/temp
- notesfile >> temp
- if( (start_index <= index) && (index <= end_index) )
- continue
- noteslist += temp
-
- notesfile.eof = -2 //Move to the start of the buffer and then erase.
-
- for( var/note in noteslist )
- notesfile << note
- else
- notesfile.cd = "/"
- if(alert(usr,"Are you sure you want to remove all their notes?","Confirmation","No","Yes - Remove all notes") == "Yes - Remove all notes")
- notesfile.dir.Remove(ckey)
- return
-
-#undef NOTESFILE
-*/
-
-//Hijacking this file for BS12 playernotes functions. I like this ^ one systemm alright, but converting sounds too bothersome~ Chinsky.
-
-/proc/notes_add(var/key, var/note, var/mob/usr)
- if (!key || !note)
- return
-
- //Loading list of notes for this key
- var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
- var/list/infos
- info >> infos
- if(!infos) infos = list()
-
- //Overly complex timestamp creation
- var/modifyer = "th"
- switch(time2text(world.timeofday, "DD"))
- if("01","21","31")
- modifyer = "st"
- if("02","22",)
- modifyer = "nd"
- if("03","23")
- modifyer = "rd"
- var/day_string = "[time2text(world.timeofday, "DD")][modifyer]"
- if(copytext(day_string,1,2) == "0")
- day_string = copytext(day_string,2)
- var/full_date = time2text(world.timeofday, "DDD, Month DD of YYYY")
- var/day_loc = findtext(full_date, time2text(world.timeofday, "DD"))
-
- var/datum/player_info/P = new
- if (usr)
- P.author = usr.key
- P.rank = usr.client.holder.rank
- else
- P.author = "Adminbot"
- P.rank = "Friendly Robot"
- P.content = note
- P.timestamp = "[copytext(full_date,1,day_loc)][day_string][copytext(full_date,day_loc+2)]"
-
- infos += P
- info << infos
-
- message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.")
- log_admin("[key_name(usr)] has edited [key]'s notes.")
-
- del info
-
- //Updating list of keys with notes on them
- var/savefile/note_list = new("data/player_notes.sav")
- var/list/note_keys
- note_list >> note_keys
- if(!note_keys) note_keys = list()
- if(!note_keys.Find(key)) note_keys += key
- note_list << note_keys
- del note_list
-
-
-/proc/notes_del(var/key, var/index)
- var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
- var/list/infos
- info >> infos
- if(!infos || infos.len < index) return
-
- var/datum/player_info/item = infos[index]
- infos.Remove(item)
- info << infos
-
- message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.")
- log_admin("[key_name(usr)] deleted one of [key]'s notes.")
-
- del info
-
-/proc/show_player_info_irc(var/key as text)
- var/dat = " Info on [key]%0D%0A"
- var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
- var/list/infos
- info >> infos
- if(!infos)
- dat = "No information found on the given key."
- else
- for(var/datum/player_info/I in infos)
- dat += "[I.content]%0D%0Aby [I.author] ([I.rank]) on [I.timestamp]%0D%0A%0D%0A"
-
- return dat
+//This stuff was originally intended to be integrated into the ban-system I was working on
+//but it's safe to say that'll never be finished. So I've merged it into the current player panel.
+//enjoy ~Carn
+/*
+#define NOTESFILE "data/player_notes.sav" //where the player notes are saved
+
+datum/admins/proc/notes_show(var/ckey)
+ usr << browse("Player Notes[notes_gethtml(ckey)]","window=player_notes;size=700x400")
+
+
+datum/admins/proc/notes_gethtml(var/ckey)
+ var/savefile/notesfile = new(NOTESFILE)
+ if(!notesfile) return "Error: Cannot access [NOTESFILE]"
+ if(ckey)
+ . = "Notes for [ckey]: \[+\] \[-\]
"
+ notesfile.cd = "/[ckey]"
+ var/index = 1
+ while( !notesfile.eof )
+ var/note
+ notesfile >> note
+ . += "[note] \[-\]
"
+ index++
+ else
+ . = "All Notes: \[+\] \[-\]
"
+ notesfile.cd = "/"
+ for(var/dir in notesfile.dir)
+ . += "[dir]
"
+ return
+
+
+//handles adding notes to the end of a ckey's buffer
+//originally had seperate entries such as var/by to record who left the note and when
+//but the current bansystem is a heap of dung.
+/proc/notes_add(var/ckey, var/note)
+ if(!ckey)
+ ckey = ckey(input(usr,"Who would you like to add notes for?","Enter a ckey",null) as text|null)
+ if(!ckey) return
+
+ if(!note)
+ note = html_encode(input(usr,"Enter your note:","Enter some text",null) as message|null)
+ if(!note) return
+
+ var/savefile/notesfile = new(NOTESFILE)
+ if(!notesfile) return
+ notesfile.cd = "/[ckey]"
+ notesfile.eof = 1 //move to the end of the buffer
+ notesfile << "[time2text(world.realtime,"DD-MMM-YYYY")] | [note][(usr && usr.ckey)?" ~[usr.ckey]":""]"
+ return
+
+//handles removing entries from the buffer, or removing the entire directory if no start_index is given
+/proc/notes_remove(var/ckey, var/start_index, var/end_index)
+ var/savefile/notesfile = new(NOTESFILE)
+ if(!notesfile) return
+
+ if(!ckey)
+ notesfile.cd = "/"
+ ckey = ckey(input(usr,"Who would you like to remove notes for?","Enter a ckey",null) as null|anything in notesfile.dir)
+ if(!ckey) return
+
+ if(start_index)
+ notesfile.cd = "/[ckey]"
+ var/list/noteslist = list()
+ if(!end_index) end_index = start_index
+ var/index = 0
+ while( !notesfile.eof )
+ index++
+ var/temp
+ notesfile >> temp
+ if( (start_index <= index) && (index <= end_index) )
+ continue
+ noteslist += temp
+
+ notesfile.eof = -2 //Move to the start of the buffer and then erase.
+
+ for( var/note in noteslist )
+ notesfile << note
+ else
+ notesfile.cd = "/"
+ if(alert(usr,"Are you sure you want to remove all their notes?","Confirmation","No","Yes - Remove all notes") == "Yes - Remove all notes")
+ notesfile.dir.Remove(ckey)
+ return
+
+#undef NOTESFILE
+*/
+
+//Hijacking this file for BS12 playernotes functions. I like this ^ one systemm alright, but converting sounds too bothersome~ Chinsky.
+
+/proc/notes_add(var/key, var/note, var/mob/usr)
+ if (!key || !note)
+ return
+
+ //Loading list of notes for this key
+ var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
+ var/list/infos
+ info >> infos
+ if(!infos) infos = list()
+
+ //Overly complex timestamp creation
+ var/modifyer = "th"
+ switch(time2text(world.timeofday, "DD"))
+ if("01","21","31")
+ modifyer = "st"
+ if("02","22",)
+ modifyer = "nd"
+ if("03","23")
+ modifyer = "rd"
+ var/day_string = "[time2text(world.timeofday, "DD")][modifyer]"
+ if(copytext(day_string,1,2) == "0")
+ day_string = copytext(day_string,2)
+ var/full_date = time2text(world.timeofday, "DDD, Month DD of YYYY")
+ var/day_loc = findtext(full_date, time2text(world.timeofday, "DD"))
+
+ var/datum/player_info/P = new
+ if (usr)
+ P.author = usr.key
+ P.rank = usr.client.holder.rank
+ else
+ P.author = "Adminbot"
+ P.rank = "Friendly Robot"
+ P.content = note
+ P.timestamp = "[copytext(full_date,1,day_loc)][day_string][copytext(full_date,day_loc+2)]"
+
+ infos += P
+ info << infos
+
+ message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.")
+ log_admin("[key_name(usr)] has edited [key]'s notes.")
+
+ qdel(info)
+
+ //Updating list of keys with notes on them
+ var/savefile/note_list = new("data/player_notes.sav")
+ var/list/note_keys
+ note_list >> note_keys
+ if(!note_keys) note_keys = list()
+ if(!note_keys.Find(key)) note_keys += key
+ note_list << note_keys
+ qdel(note_list)
+
+
+/proc/notes_del(var/key, var/index)
+ var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
+ var/list/infos
+ info >> infos
+ if(!infos || infos.len < index) return
+
+ var/datum/player_info/item = infos[index]
+ infos.Remove(item)
+ info << infos
+
+ message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.")
+ log_admin("[key_name(usr)] deleted one of [key]'s notes.")
+
+ qdel(info)
+
+/proc/show_player_info_irc(var/key as text)
+ var/dat = " Info on [key]%0D%0A"
+ var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
+ var/list/infos
+ info >> infos
+ if(!infos)
+ dat = "No information found on the given key."
+ else
+ for(var/datum/player_info/I in infos)
+ dat += "[I.content]%0D%0Aby [I.author] ([I.rank]) on [I.timestamp]%0D%0A%0D%0A"
+
+ return dat
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 95c3cab734..08e0c6cba7 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -745,7 +745,7 @@
log_admin("[key_name(usr)] booted [key_name(M)].")
message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1)
//M.client = null
- del(M.client)
+ qdel(M.client)
/*
//Player Notes
else if(href_list["notes"])
@@ -811,8 +811,8 @@
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
- del(M.client)
- //del(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
+ qdel(M.client)
+ //qdel(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
if("No")
if(!check_rights(R_BAN)) return
var/reason = sanitize(input(usr,"Reason?","reason","Griefer") as text|null)
@@ -836,8 +836,8 @@
feedback_inc("ban_perma",1)
DB_ban_record(BANTYPE_PERMA, M, -1, reason)
- del(M.client)
- //del(M)
+ qdel(M.client)
+ //qdel(M)
if("Cancel")
return
@@ -1301,7 +1301,7 @@
S.victim = M
S.loc = M.loc
spawn(20)
- del(S)
+ qdel(S)
var/turf/simulated/floor/T = get_turf(M)
if(istype(T))
@@ -1424,7 +1424,7 @@
src.owner << "\red Message reply failed."
spawn(100)
- del(P)
+ qdel(P)
return
else if(href_list["SolGovFaxReply"])
@@ -1669,28 +1669,28 @@
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","SC")
for(var/obj/item/clothing/under/O in world)
- del(O)
+ qdel(O)
ok = 1
if("sec_all_clothes")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","SAC")
for(var/obj/item/clothing/O in world)
- del(O)
+ qdel(O)
ok = 1
if("sec_classic1")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","SC1")
for(var/obj/item/clothing/suit/fire/O in world)
- del(O)
+ qdel(O)
for(var/obj/structure/grille/O in world)
- del(O)
+ qdel(O)
/* for(var/obj/machinery/vehicle/pod/O in world)
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
M.client.perspective = MOB_PERSPECTIVE
M.client.eye = M
- del(O)
+ qdel(O)
ok = 1*/
if("monkey")
feedback_inc("admin_secrets_fun_used",1)
@@ -2044,7 +2044,7 @@
var/turf/T = pick(blobstart)
var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 )
spawn(rand(100, 600))
- del(bh)
+ qdel(bh)
if("timeanomalies") //dear god this code was awful :P Still needs further optimisation
feedback_inc("admin_secrets_fun_used",1)
@@ -2272,7 +2272,7 @@
feedback_add_details("admin_secrets_fun_used","NS")
var/choice = input("You sure you want to end the round and summon narsie at your location? Misuse of this could result in removal of flags or halarity.") in list("PRAISE SATAN", "Cancel")
if(choice == "PRAISE SATAN")
- new /obj/machinery/singularity/narsie/large(get_turf(usr))
+ new /obj/singularity/narsie/large(get_turf(usr))
message_admins("[key_name_admin(usr)] has summoned narsie and brought about a new realm of suffering.")
if("supermattercascade")
feedback_inc("admin_secrets_fun_used",1)
diff --git a/code/modules/admin/verbs/BrokenInhands.dm b/code/modules/admin/verbs/BrokenInhands.dm
index 914ba1b5df..e5d6dc2661 100644
--- a/code/modules/admin/verbs/BrokenInhands.dm
+++ b/code/modules/admin/verbs/BrokenInhands.dm
@@ -26,7 +26,7 @@
// if(!istates.Find(O.item_state))
// text += "[O.type] MISSING NORMAL ICON CALLED\n\"[O.item_state]\" IN \"[O.icon]\"\n"
//text+="\n"
- del(O)
+ qdel(O)
if(text)
var/F = file("broken_icons.txt")
fdel(F)
diff --git a/code/modules/admin/verbs/SDQL.dm b/code/modules/admin/verbs/SDQL.dm
index d8626da403..a98cc3a1d9 100644
--- a/code/modules/admin/verbs/SDQL.dm
+++ b/code/modules/admin/verbs/SDQL.dm
@@ -1,497 +1,497 @@
-
-//Structured Datum Query Language. Basically SQL meets BYOND objects.
-
-//Note: For use in BS12, need text_starts_with proc, and to modify the action on select to use BS12's object edit command(s).
-
-/client/proc/SDQL_query(query_text as message)
- set category = "Admin"
- if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe.
- message_admins("\red ERROR: Non-admin [usr.key] attempted to execute a SDQL query!")
- log_admin("Non-admin [usr.key] attempted to execute a SDQL query!")
-
- var/list/query_list = SDQL_tokenize(query_text)
-
- if(query_list.len < 2)
- if(query_list.len > 0)
- usr << "\red SDQL: Too few discrete tokens in query \"[query_text]\". Please check your syntax and try again."
- return
-
- if(!(lowertext(query_list[1]) in list("select", "delete", "update")))
- usr << "\red SDQL: Unknown query type: \"[query_list[1]]\" in query \"[query_text]\". Please check your syntax and try again."
- return
-
- var/list/types = list()
-
- var/i
- for(i = 2; i <= query_list.len; i += 2)
- types += query_list[i]
-
- if(i + 1 >= query_list.len || query_list[i + 1] != ",")
- break
-
- i++
-
- var/list/from = list()
-
- if(i <= query_list.len)
- if(lowertext(query_list[i]) in list("from", "in"))
- for(i++; i <= query_list.len; i += 2)
- from += query_list[i]
-
- if(i + 1 >= query_list.len || query_list[i + 1] != ",")
- break
-
- i++
-
- if(from.len < 1)
- from += "world"
-
- var/list/set_vars = list()
-
- if(lowertext(query_list[1]) == "update")
- if(i <= query_list.len && lowertext(query_list[i]) == "set")
- for(i++; i <= query_list.len; i++)
- if(i + 2 <= query_list.len && query_list[i + 1] == "=")
- set_vars += query_list[i]
- set_vars[query_list[i]] = query_list[i + 2]
-
- else
- usr << "\red SDQL: Invalid set parameter in query \"[query_text]\". Please check your syntax and try again."
- return
-
- i += 3
-
- if(i >= query_list.len || query_list[i] != ",")
- break
-
- if(set_vars.len < 1)
- usr << "\red SDQL: Invalid or missing set in query \"[query_text]\". Please check your syntax and try again."
- return
-
- var/list/where = list()
-
- if(i <= query_list.len && lowertext(query_list[i]) == "where")
- where = query_list.Copy(i + 1)
-
- var/list/from_objs = list()
- if("world" in from)
- from_objs += world
- else
- for(var/f in from)
- if(copytext(f, 1, 2) == "'" || copytext(f, 1, 2) == "\"")
- from_objs += locate(copytext(f, 2, length(f)))
- else if(copytext(f, 1, 2) != "/")
- from_objs += locate(f)
- else
- var/f2 = text2path(f)
- if(text_starts_with(f, "/mob"))
- for(var/mob/m in world)
- if(istype(m, f2))
- from_objs += m
-
- else if(text_starts_with(f, "/turf/space"))
- for(var/turf/space/m in world)
- if(istype(m, f2))
- from_objs += m
-
- else if(text_starts_with(f, "/turf/simulated"))
- for(var/turf/simulated/m in world)
- if(istype(m, f2))
- from_objs += m
-
- else if(text_starts_with(f, "/turf/unsimulated"))
- for(var/turf/unsimulated/m in world)
- if(istype(m, f2))
- from_objs += m
-
- else if(text_starts_with(f, "/turf"))
- for(var/turf/m in world)
- if(istype(m, f2))
- from_objs += m
-
- else if(text_starts_with(f, "/area"))
- for(var/area/m in world)
- if(istype(m, f2))
- from_objs += m
-
- else if(text_starts_with(f, "/obj/item"))
- for(var/obj/item/m in world)
- if(istype(m, f2))
- from_objs += m
-
- else if(text_starts_with(f, "/obj/machinery"))
- for(var/obj/machinery/m in world)
- if(istype(m, f2))
- from_objs += m
-
- else if(text_starts_with(f, "/obj"))
- for(var/obj/m in world)
- if(istype(m, f2))
- from_objs += m
-
- else if(text_starts_with(f, "/atom"))
- for(var/atom/m in world)
- if(istype(m, f2))
- from_objs += m
-/*
- else
- for(var/datum/m in world)
- if(istype(m, f2))
- from_objs += m
-*/
-
- var/list/objs = list()
-
- for(var/from_obj in from_objs)
- if("*" in types)
- objs += from_obj:contents
- else
- for(var/f in types)
- if(copytext(f, 1, 2) == "'" || copytext(f, 1, 2) == "\"")
- objs += locate(copytext(f, 2, length(f))) in from_obj
- else if(copytext(f, 1, 2) != "/")
- objs += locate(f) in from_obj
- else
- var/f2 = text2path(f)
- if(text_starts_with(f, "/mob"))
- for(var/mob/m in from_obj)
- if(istype(m, f2))
- objs += m
-
- else if(text_starts_with(f, "/turf/space"))
- for(var/turf/space/m in from_obj)
- if(istype(m, f2))
- objs += m
-
- else if(text_starts_with(f, "/turf/simulated"))
- for(var/turf/simulated/m in from_obj)
- if(istype(m, f2))
- objs += m
-
- else if(text_starts_with(f, "/turf/unsimulated"))
- for(var/turf/unsimulated/m in from_obj)
- if(istype(m, f2))
- objs += m
-
- else if(text_starts_with(f, "/turf"))
- for(var/turf/m in from_obj)
- if(istype(m, f2))
- objs += m
-
- else if(text_starts_with(f, "/area"))
- for(var/area/m in from_obj)
- if(istype(m, f2))
- objs += m
-
- else if(text_starts_with(f, "/obj/item"))
- for(var/obj/item/m in from_obj)
- if(istype(m, f2))
- objs += m
-
- else if(text_starts_with(f, "/obj/machinery"))
- for(var/obj/machinery/m in from_obj)
- if(istype(m, f2))
- objs += m
-
- else if(text_starts_with(f, "/obj"))
- for(var/obj/m in from_obj)
- if(istype(m, f2))
- objs += m
-
- else if(text_starts_with(f, "/atom"))
- for(var/atom/m in from_obj)
- if(istype(m, f2))
- objs += m
-
- else
- for(var/datum/m in from_obj)
- if(istype(m, f2))
- objs += m
-
-
- for(var/datum/t in objs)
- var/currently_false = 0
- for(i = 1, i - 1 < where.len, i++)
- var/v = where[i++]
- var/compare_op = where[i++]
- if(!(compare_op in list("==", "=", "<>", "<", ">", "<=", ">=", "!=")))
- usr << "\red SDQL: Unknown comparison operator [compare_op] in where clause following [v] in query \"[query_text]\". Please check your syntax and try again."
- return
-
- var/j
- for(j = i, j <= where.len, j++)
- if(lowertext(where[j]) in list("and", "or", ";"))
- break
-
- if(!currently_false)
- var/value = SDQL_text2value(t, v)
- var/result = SDQL_evaluate(t, where.Copy(i, j))
-
- switch(compare_op)
- if("=", "==")
- currently_false = !(value == result)
-
- if("!=", "<>")
- currently_false = !(value != result)
-
- if("<")
- currently_false = !(value < result)
-
- if(">")
- currently_false = !(value > result)
-
- if("<=")
- currently_false = !(value <= result)
-
- if(">=")
- currently_false = !(value >= result)
-
-
- if(j > where.len || lowertext(where[j]) == ";")
- break
- else if(lowertext(where[j]) == "or")
- if(currently_false)
- currently_false = 0
- else
- break
-
- i = j
-
- if(currently_false)
- objs -= t
-
-
-
- usr << "\blue SQDL Query: [query_text]"
- message_admins("[usr] executed SDQL query: \"[query_text]\".")
-/*
- for(var/t in types)
- usr << "Type: [t]"
-
- for(var/t in from)
- usr << "From: [t]"
-
- for(var/t in set_vars)
- usr << "Set: [t] = [set_vars[t]]"
-
- if(where.len)
- var/where_str = ""
- for(var/t in where)
- where_str += "[t] "
-
- usr << "Where: [where_str]"
-
- usr << "From objects:"
- for(var/datum/t in from_objs)
- usr << t
-
- usr << "Objects:"
- for(var/datum/t in objs)
- usr << t
-*/
- switch(lowertext(query_list[1]))
- if("delete")
- for(var/datum/t in objs)
- del t
-
- if("update")
- for(var/datum/t in objs)
- objs[t] = list()
- for(var/v in set_vars)
- if(v in t.vars)
- objs[t][v] = SDQL_text2value(t, set_vars[v])
-
- for(var/datum/t in objs)
- for(var/v in objs[t])
- t.vars[v] = objs[t][v]
-
- if("select")
- var/text = ""
- for(var/datum/t in objs)
- if(istype(t, /atom))
- var/atom/a = t
-
- if(a.x)
- text += "\ref[t]: [t] at ([a.x], [a.y], [a.z])
"
-
- else if(a.loc && a.loc.x)
- text += "\ref[t]: [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])
"
-
- else
- text += "\ref[t]: [t]
"
-
- else
- text += "\ref[t]: [t]
"
-
- //text += "[t]
"
- usr << browse(text, "window=sdql_result")
-
-
-/client/Topic(href,href_list[],hsrc)
- if(href_list["SDQL_select"])
- debug_variables(locate(href_list["SDQL_select"]))
-
- ..()
-
-
-/proc/SDQL_evaluate(datum/object, list/equation)
- if(equation.len == 0)
- return null
-
- else if(equation.len == 1)
- return SDQL_text2value(object, equation[1])
-
- else if(equation[1] == "!")
- return !SDQL_evaluate(object, equation.Copy(2))
-
- else if(equation[1] == "-")
- return -SDQL_evaluate(object, equation.Copy(2))
-
-
- else
- usr << "\red SDQL: Sorry, equations not yet supported :("
- return null
-
-
-/proc/SDQL_text2value(datum/object, text)
- if(text2num(text) != null)
- return text2num(text)
- else if(text == "null")
- return null
- else if(copytext(text, 1, 2) == "'" || copytext(text, 1, 2) == "\"" )
- return copytext(text, 2, length(text))
- else if(copytext(text, 1, 2) == "/")
- return text2path(text)
- else
- if(findtext(text, "."))
- var/split = findtext(text, ".")
- var/v = copytext(text, 1, split)
-
- if((v in object.vars) && istype(object.vars[v], /datum))
- return SDQL_text2value(object.vars[v], copytext(text, split + 1))
- else
- return null
-
- else
- if(text in object.vars)
- return object.vars[text]
- else
- return null
-
-
-/proc/text_starts_with(text, start)
- if(copytext(text, 1, length(start) + 1) == start)
- return 1
- else
- return 0
-
-
-
-
-
-/proc/SDQL_tokenize(query_text)
-
- var/list/whitespace = list(" ", "\n", "\t")
- var/list/single = list("(", ")", ",", "+", "-")
- var/list/multi = list(
- "=" = list("", "="),
- "<" = list("", "=", ">"),
- ">" = list("", "="),
- "!" = list("", "="))
-
- var/word = ""
- var/list/query_list = list()
- var/len = length(query_text)
-
- for(var/i = 1, i <= len, i++)
- var/char = copytext(query_text, i, i + 1)
-
- if(char in whitespace)
- if(word != "")
- query_list += word
- word = ""
-
- else if(char in single)
- if(word != "")
- query_list += word
- word = ""
-
- query_list += char
-
- else if(char in multi)
- if(word != "")
- query_list += word
- word = ""
-
- var/char2 = copytext(query_text, i + 1, i + 2)
-
- if(char2 in multi[char])
- query_list += "[char][char2]"
- i++
-
- else
- query_list += char
-
- else if(char == "'")
- if(word != "")
- usr << "\red SDQL: You have an error in your SDQL syntax, unexpected ' in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again."
- return null
-
- word = "'"
-
- for(i++, i <= len, i++)
- char = copytext(query_text, i, i + 1)
-
- if(char == "'")
- if(copytext(query_text, i + 1, i + 2) == "'")
- word += "'"
- i++
-
- else
- break
-
- else
- word += char
-
- if(i > len)
- usr << "\red SDQL: You have an error in your SDQL syntax, unmatched ' in query: \"[query_text]\". Please check your syntax, and try again."
- return null
-
- query_list += "[word]'"
- word = ""
-
- else if(char == "\"")
- if(word != "")
- usr << "\red SDQL: You have an error in your SDQL syntax, unexpected \" in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again."
- return null
-
- word = "\""
-
- for(i++, i <= len, i++)
- char = copytext(query_text, i, i + 1)
-
- if(char == "\"")
- if(copytext(query_text, i + 1, i + 2) == "'")
- word += "\""
- i++
-
- else
- break
-
- else
- word += char
-
- if(i > len)
- usr << "\red SDQL: You have an error in your SDQL syntax, unmatched \" in query: \"[query_text]\". Please check your syntax, and try again."
- return null
-
- query_list += "[word]\""
- word = ""
-
- else
- word += char
-
- if(word != "")
- query_list += word
-
- return query_list
+
+//Structured Datum Query Language. Basically SQL meets BYOND objects.
+
+//Note: For use in BS12, need text_starts_with proc, and to modify the action on select to use BS12's object edit command(s).
+
+/client/proc/SDQL_query(query_text as message)
+ set category = "Admin"
+ if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe.
+ message_admins("\red ERROR: Non-admin [usr.key] attempted to execute a SDQL query!")
+ log_admin("Non-admin [usr.key] attempted to execute a SDQL query!")
+
+ var/list/query_list = SDQL_tokenize(query_text)
+
+ if(query_list.len < 2)
+ if(query_list.len > 0)
+ usr << "\red SDQL: Too few discrete tokens in query \"[query_text]\". Please check your syntax and try again."
+ return
+
+ if(!(lowertext(query_list[1]) in list("select", "delete", "update")))
+ usr << "\red SDQL: Unknown query type: \"[query_list[1]]\" in query \"[query_text]\". Please check your syntax and try again."
+ return
+
+ var/list/types = list()
+
+ var/i
+ for(i = 2; i <= query_list.len; i += 2)
+ types += query_list[i]
+
+ if(i + 1 >= query_list.len || query_list[i + 1] != ",")
+ break
+
+ i++
+
+ var/list/from = list()
+
+ if(i <= query_list.len)
+ if(lowertext(query_list[i]) in list("from", "in"))
+ for(i++; i <= query_list.len; i += 2)
+ from += query_list[i]
+
+ if(i + 1 >= query_list.len || query_list[i + 1] != ",")
+ break
+
+ i++
+
+ if(from.len < 1)
+ from += "world"
+
+ var/list/set_vars = list()
+
+ if(lowertext(query_list[1]) == "update")
+ if(i <= query_list.len && lowertext(query_list[i]) == "set")
+ for(i++; i <= query_list.len; i++)
+ if(i + 2 <= query_list.len && query_list[i + 1] == "=")
+ set_vars += query_list[i]
+ set_vars[query_list[i]] = query_list[i + 2]
+
+ else
+ usr << "\red SDQL: Invalid set parameter in query \"[query_text]\". Please check your syntax and try again."
+ return
+
+ i += 3
+
+ if(i >= query_list.len || query_list[i] != ",")
+ break
+
+ if(set_vars.len < 1)
+ usr << "\red SDQL: Invalid or missing set in query \"[query_text]\". Please check your syntax and try again."
+ return
+
+ var/list/where = list()
+
+ if(i <= query_list.len && lowertext(query_list[i]) == "where")
+ where = query_list.Copy(i + 1)
+
+ var/list/from_objs = list()
+ if("world" in from)
+ from_objs += world
+ else
+ for(var/f in from)
+ if(copytext(f, 1, 2) == "'" || copytext(f, 1, 2) == "\"")
+ from_objs += locate(copytext(f, 2, length(f)))
+ else if(copytext(f, 1, 2) != "/")
+ from_objs += locate(f)
+ else
+ var/f2 = text2path(f)
+ if(text_starts_with(f, "/mob"))
+ for(var/mob/m in world)
+ if(istype(m, f2))
+ from_objs += m
+
+ else if(text_starts_with(f, "/turf/space"))
+ for(var/turf/space/m in world)
+ if(istype(m, f2))
+ from_objs += m
+
+ else if(text_starts_with(f, "/turf/simulated"))
+ for(var/turf/simulated/m in world)
+ if(istype(m, f2))
+ from_objs += m
+
+ else if(text_starts_with(f, "/turf/unsimulated"))
+ for(var/turf/unsimulated/m in world)
+ if(istype(m, f2))
+ from_objs += m
+
+ else if(text_starts_with(f, "/turf"))
+ for(var/turf/m in world)
+ if(istype(m, f2))
+ from_objs += m
+
+ else if(text_starts_with(f, "/area"))
+ for(var/area/m in world)
+ if(istype(m, f2))
+ from_objs += m
+
+ else if(text_starts_with(f, "/obj/item"))
+ for(var/obj/item/m in world)
+ if(istype(m, f2))
+ from_objs += m
+
+ else if(text_starts_with(f, "/obj/machinery"))
+ for(var/obj/machinery/m in world)
+ if(istype(m, f2))
+ from_objs += m
+
+ else if(text_starts_with(f, "/obj"))
+ for(var/obj/m in world)
+ if(istype(m, f2))
+ from_objs += m
+
+ else if(text_starts_with(f, "/atom"))
+ for(var/atom/m in world)
+ if(istype(m, f2))
+ from_objs += m
+/*
+ else
+ for(var/datum/m in world)
+ if(istype(m, f2))
+ from_objs += m
+*/
+
+ var/list/objs = list()
+
+ for(var/from_obj in from_objs)
+ if("*" in types)
+ objs += from_obj:contents
+ else
+ for(var/f in types)
+ if(copytext(f, 1, 2) == "'" || copytext(f, 1, 2) == "\"")
+ objs += locate(copytext(f, 2, length(f))) in from_obj
+ else if(copytext(f, 1, 2) != "/")
+ objs += locate(f) in from_obj
+ else
+ var/f2 = text2path(f)
+ if(text_starts_with(f, "/mob"))
+ for(var/mob/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+ else if(text_starts_with(f, "/turf/space"))
+ for(var/turf/space/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+ else if(text_starts_with(f, "/turf/simulated"))
+ for(var/turf/simulated/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+ else if(text_starts_with(f, "/turf/unsimulated"))
+ for(var/turf/unsimulated/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+ else if(text_starts_with(f, "/turf"))
+ for(var/turf/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+ else if(text_starts_with(f, "/area"))
+ for(var/area/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+ else if(text_starts_with(f, "/obj/item"))
+ for(var/obj/item/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+ else if(text_starts_with(f, "/obj/machinery"))
+ for(var/obj/machinery/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+ else if(text_starts_with(f, "/obj"))
+ for(var/obj/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+ else if(text_starts_with(f, "/atom"))
+ for(var/atom/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+ else
+ for(var/datum/m in from_obj)
+ if(istype(m, f2))
+ objs += m
+
+
+ for(var/datum/t in objs)
+ var/currently_false = 0
+ for(i = 1, i - 1 < where.len, i++)
+ var/v = where[i++]
+ var/compare_op = where[i++]
+ if(!(compare_op in list("==", "=", "<>", "<", ">", "<=", ">=", "!=")))
+ usr << "\red SDQL: Unknown comparison operator [compare_op] in where clause following [v] in query \"[query_text]\". Please check your syntax and try again."
+ return
+
+ var/j
+ for(j = i, j <= where.len, j++)
+ if(lowertext(where[j]) in list("and", "or", ";"))
+ break
+
+ if(!currently_false)
+ var/value = SDQL_text2value(t, v)
+ var/result = SDQL_evaluate(t, where.Copy(i, j))
+
+ switch(compare_op)
+ if("=", "==")
+ currently_false = !(value == result)
+
+ if("!=", "<>")
+ currently_false = !(value != result)
+
+ if("<")
+ currently_false = !(value < result)
+
+ if(">")
+ currently_false = !(value > result)
+
+ if("<=")
+ currently_false = !(value <= result)
+
+ if(">=")
+ currently_false = !(value >= result)
+
+
+ if(j > where.len || lowertext(where[j]) == ";")
+ break
+ else if(lowertext(where[j]) == "or")
+ if(currently_false)
+ currently_false = 0
+ else
+ break
+
+ i = j
+
+ if(currently_false)
+ objs -= t
+
+
+
+ usr << "\blue SQDL Query: [query_text]"
+ message_admins("[usr] executed SDQL query: \"[query_text]\".")
+/*
+ for(var/t in types)
+ usr << "Type: [t]"
+
+ for(var/t in from)
+ usr << "From: [t]"
+
+ for(var/t in set_vars)
+ usr << "Set: [t] = [set_vars[t]]"
+
+ if(where.len)
+ var/where_str = ""
+ for(var/t in where)
+ where_str += "[t] "
+
+ usr << "Where: [where_str]"
+
+ usr << "From objects:"
+ for(var/datum/t in from_objs)
+ usr << t
+
+ usr << "Objects:"
+ for(var/datum/t in objs)
+ usr << t
+*/
+ switch(lowertext(query_list[1]))
+ if("delete")
+ for(var/datum/t in objs)
+ qdel(t)
+
+ if("update")
+ for(var/datum/t in objs)
+ objs[t] = list()
+ for(var/v in set_vars)
+ if(v in t.vars)
+ objs[t][v] = SDQL_text2value(t, set_vars[v])
+
+ for(var/datum/t in objs)
+ for(var/v in objs[t])
+ t.vars[v] = objs[t][v]
+
+ if("select")
+ var/text = ""
+ for(var/datum/t in objs)
+ if(istype(t, /atom))
+ var/atom/a = t
+
+ if(a.x)
+ text += "\ref[t]: [t] at ([a.x], [a.y], [a.z])
"
+
+ else if(a.loc && a.loc.x)
+ text += "\ref[t]: [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])
"
+
+ else
+ text += "\ref[t]: [t]
"
+
+ else
+ text += "\ref[t]: [t]
"
+
+ //text += "[t]
"
+ usr << browse(text, "window=sdql_result")
+
+
+/client/Topic(href,href_list[],hsrc)
+ if(href_list["SDQL_select"])
+ debug_variables(locate(href_list["SDQL_select"]))
+
+ ..()
+
+
+/proc/SDQL_evaluate(datum/object, list/equation)
+ if(equation.len == 0)
+ return null
+
+ else if(equation.len == 1)
+ return SDQL_text2value(object, equation[1])
+
+ else if(equation[1] == "!")
+ return !SDQL_evaluate(object, equation.Copy(2))
+
+ else if(equation[1] == "-")
+ return -SDQL_evaluate(object, equation.Copy(2))
+
+
+ else
+ usr << "\red SDQL: Sorry, equations not yet supported :("
+ return null
+
+
+/proc/SDQL_text2value(datum/object, text)
+ if(text2num(text) != null)
+ return text2num(text)
+ else if(text == "null")
+ return null
+ else if(copytext(text, 1, 2) == "'" || copytext(text, 1, 2) == "\"" )
+ return copytext(text, 2, length(text))
+ else if(copytext(text, 1, 2) == "/")
+ return text2path(text)
+ else
+ if(findtext(text, "."))
+ var/split = findtext(text, ".")
+ var/v = copytext(text, 1, split)
+
+ if((v in object.vars) && istype(object.vars[v], /datum))
+ return SDQL_text2value(object.vars[v], copytext(text, split + 1))
+ else
+ return null
+
+ else
+ if(text in object.vars)
+ return object.vars[text]
+ else
+ return null
+
+
+/proc/text_starts_with(text, start)
+ if(copytext(text, 1, length(start) + 1) == start)
+ return 1
+ else
+ return 0
+
+
+
+
+
+/proc/SDQL_tokenize(query_text)
+
+ var/list/whitespace = list(" ", "\n", "\t")
+ var/list/single = list("(", ")", ",", "+", "-")
+ var/list/multi = list(
+ "=" = list("", "="),
+ "<" = list("", "=", ">"),
+ ">" = list("", "="),
+ "!" = list("", "="))
+
+ var/word = ""
+ var/list/query_list = list()
+ var/len = length(query_text)
+
+ for(var/i = 1, i <= len, i++)
+ var/char = copytext(query_text, i, i + 1)
+
+ if(char in whitespace)
+ if(word != "")
+ query_list += word
+ word = ""
+
+ else if(char in single)
+ if(word != "")
+ query_list += word
+ word = ""
+
+ query_list += char
+
+ else if(char in multi)
+ if(word != "")
+ query_list += word
+ word = ""
+
+ var/char2 = copytext(query_text, i + 1, i + 2)
+
+ if(char2 in multi[char])
+ query_list += "[char][char2]"
+ i++
+
+ else
+ query_list += char
+
+ else if(char == "'")
+ if(word != "")
+ usr << "\red SDQL: You have an error in your SDQL syntax, unexpected ' in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again."
+ return null
+
+ word = "'"
+
+ for(i++, i <= len, i++)
+ char = copytext(query_text, i, i + 1)
+
+ if(char == "'")
+ if(copytext(query_text, i + 1, i + 2) == "'")
+ word += "'"
+ i++
+
+ else
+ break
+
+ else
+ word += char
+
+ if(i > len)
+ usr << "\red SDQL: You have an error in your SDQL syntax, unmatched ' in query: \"[query_text]\". Please check your syntax, and try again."
+ return null
+
+ query_list += "[word]'"
+ word = ""
+
+ else if(char == "\"")
+ if(word != "")
+ usr << "\red SDQL: You have an error in your SDQL syntax, unexpected \" in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again."
+ return null
+
+ word = "\""
+
+ for(i++, i <= len, i++)
+ char = copytext(query_text, i, i + 1)
+
+ if(char == "\"")
+ if(copytext(query_text, i + 1, i + 2) == "'")
+ word += "\""
+ i++
+
+ else
+ break
+
+ else
+ word += char
+
+ if(i > len)
+ usr << "\red SDQL: You have an error in your SDQL syntax, unmatched \" in query: \"[query_text]\". Please check your syntax, and try again."
+ return null
+
+ query_list += "[word]\""
+ word = ""
+
+ else
+ word += char
+
+ if(word != "")
+ query_list += word
+
+ return query_list
diff --git a/code/modules/admin/verbs/SDQL_2.dm b/code/modules/admin/verbs/SDQL_2.dm
index 549447da11..236237c23a 100644
--- a/code/modules/admin/verbs/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL_2.dm
@@ -1,426 +1,426 @@
-
-
-/client/proc/SDQL2_query(query_text as message)
- set category = "Admin"
- if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe.
- message_admins("\red ERROR: Non-admin [usr.key] attempted to execute a SDQL query!")
- log_admin("Non-admin [usr.key] attempted to execute a SDQL query!")
-
- if(!query_text || length(query_text) < 1)
- return
-
- //world << query_text
-
- var/list/query_list = SDQL2_tokenize(query_text)
-
- if(!query_list || query_list.len < 1)
- return
-
- var/list/query_tree = SDQL_parse(query_list)
-
- if(query_tree.len < 1)
- return
-
- var/list/from_objs = list()
- var/list/select_types = list()
-
- switch(query_tree[1])
- if("explain")
- SDQL_testout(query_tree["explain"])
- return
-
- if("call")
- if("on" in query_tree)
- select_types = query_tree["on"]
- else
- return
-
- if("select", "delete", "update")
- select_types = query_tree[query_tree[1]]
-
- from_objs = SDQL_from_objs(query_tree["from"])
-
- var/list/objs = list()
-
- for(var/type in select_types)
- var/char = copytext(type, 1, 2)
-
- if(char == "/" || char == "*")
- for(var/from in from_objs)
- objs += SDQL_get_all(type, from)
-
- else if(char == "'" || char == "\"")
- objs += locate(copytext(type, 2, length(type)))
-
- if("where" in query_tree)
- var/objs_temp = objs
- objs = list()
- for(var/datum/d in objs_temp)
- if(SDQL_expression(d, query_tree["where"]))
- objs += d
-
- //usr << "Query: [query_text]"
- message_admins("[usr] executed SDQL query: \"[query_text]\".")
-
- switch(query_tree[1])
- if("delete")
- for(var/datum/d in objs)
- del d
-
- if("select")
- var/text = ""
- for(var/datum/t in objs)
- if(istype(t, /atom))
- var/atom/a = t
-
- if(a.x)
- text += "\ref[t]: [t] at ([a.x], [a.y], [a.z])
"
-
- else if(a.loc && a.loc.x)
- text += "\ref[t]: [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])
"
-
- else
- text += "\ref[t]: [t]
"
-
- else
- text += "\ref[t]: [t]
"
-
- usr << browse(text, "window=SDQL-result")
-
- if("update")
- if("set" in query_tree)
- var/list/set_list = query_tree["set"]
- for(var/datum/d in objs)
- var/list/vals = list()
- for(var/v in set_list)
- if(v in d.vars)
- vals += v
- vals[v] = SDQL_expression(d, set_list[v])
-
- if(istype(d, /turf))
- for(var/v in vals)
- if(v == "x" || v == "y" || v == "z")
- continue
-
- d.vars[v] = vals[v]
-
- else
- for(var/v in vals)
- d.vars[v] = vals[v]
-
-
-
-
-
-/proc/SDQL_parse(list/query_list)
- var/datum/SDQL_parser/parser = new(query_list)
- var/list/query_tree = parser.parse()
-
- del(parser)
-
- return query_tree
-
-
-
-/proc/SDQL_testout(list/query_tree, indent = 0)
- var/spaces = ""
- for(var/s = 0, s < indent, s++)
- spaces += " "
-
- for(var/item in query_tree)
- if(istype(item, /list))
- world << "[spaces]("
- SDQL_testout(item, indent + 1)
- world << "[spaces])"
-
- else
- world << "[spaces][item]"
-
- if(!isnum(item) && query_tree[item])
-
- if(istype(query_tree[item], /list))
- world << "[spaces] ("
- SDQL_testout(query_tree[item], indent + 2)
- world << "[spaces] )"
-
- else
- world << "[spaces] [query_tree[item]]"
-
-
-
-/proc/SDQL_from_objs(list/tree)
- if("world" in tree)
- return list(world)
-
- var/list/out = list()
-
- for(var/type in tree)
- var/char = copytext(type, 1, 2)
-
- if(char == "/")
- out += SDQL_get_all(type, world)
-
- else if(char == "'" || char == "\"")
- out += locate(copytext(type, 2, length(type)))
-
- return out
-
-
-/proc/SDQL_get_all(type, location)
- var/list/out = list()
-
- if(type == "*")
- for(var/datum/d in location)
- out += d
-
- return out
-
- type = text2path(type)
-
- if(ispath(type, /mob))
- for(var/mob/d in location)
- if(istype(d, type))
- out += d
-
- else if(ispath(type, /turf))
- for(var/turf/d in location)
- if(istype(d, type))
- out += d
-
- else if(ispath(type, /obj))
- for(var/obj/d in location)
- if(istype(d, type))
- out += d
-
- else if(ispath(type, /area))
- for(var/area/d in location)
- if(istype(d, type))
- out += d
-
- else if(ispath(type, /atom))
- for(var/atom/d in location)
- if(istype(d, type))
- out += d
-
- else
- for(var/datum/d in location)
- if(istype(d, type))
- out += d
-
- return out
-
-
-/proc/SDQL_expression(datum/object, list/expression, start = 1)
- var/result = 0
- var/val
-
- for(var/i = start, i <= expression.len, i++)
- var/op = ""
-
- if(i > start)
- op = expression[i]
- i++
-
- var/list/ret = SDQL_value(object, expression, i)
- val = ret["val"]
- i = ret["i"]
-
- if(op != "")
- switch(op)
- if("+")
- result += val
- if("-")
- result -= val
- if("*")
- result *= val
- if("/")
- result /= val
- if("&")
- result &= val
- if("|")
- result |= val
- if("^")
- result ^= val
- if("=", "==")
- result = (result == val)
- if("!=", "<>")
- result = (result != val)
- if("<")
- result = (result < val)
- if("<=")
- result = (result <= val)
- if(">")
- result = (result > val)
- if(">=")
- result = (result >= val)
- if("and", "&&")
- result = (result && val)
- if("or", "||")
- result = (result || val)
- else
- usr << "\red SDQL2: Unknown op [op]"
- result = null
- else
- result = val
-
- return result
-
-/proc/SDQL_value(datum/object, list/expression, start = 1)
- var/i = start
- var/val = null
-
- if(i > expression.len)
- return list("val" = null, "i" = i)
-
- if(istype(expression[i], /list))
- val = SDQL_expression(object, expression[i])
-
- else if(expression[i] == "!")
- var/list/ret = SDQL_value(object, expression, i + 1)
- val = !ret["val"]
- i = ret["i"]
-
- else if(expression[i] == "~")
- var/list/ret = SDQL_value(object, expression, i + 1)
- val = ~ret["val"]
- i = ret["i"]
-
- else if(expression[i] == "-")
- var/list/ret = SDQL_value(object, expression, i + 1)
- val = -ret["val"]
- i = ret["i"]
-
- else if(expression[i] == "null")
- val = null
-
- else if(isnum(expression[i]))
- val = expression[i]
-
- else if(copytext(expression[i], 1, 2) in list("'", "\""))
- val = copytext(expression[i], 2, length(expression[i]))
-
- else
- val = SDQL_var(object, expression, i)
- i = expression.len
-
- return list("val" = val, "i" = i)
-
-/proc/SDQL_var(datum/object, list/expression, start = 1)
-
- if(expression[start] in object.vars)
-
- if(start < expression.len && expression[start + 1] == ".")
- return SDQL_var(object.vars[expression[start]], expression[start + 2])
-
- else
- return object.vars[expression[start]]
-
- else
- return null
-
-/proc/SDQL2_tokenize(query_text)
-
- var/list/whitespace = list(" ", "\n", "\t")
- var/list/single = list("(", ")", ",", "+", "-", ".")
- var/list/multi = list(
- "=" = list("", "="),
- "<" = list("", "=", ">"),
- ">" = list("", "="),
- "!" = list("", "="))
-
- var/word = ""
- var/list/query_list = list()
- var/len = length(query_text)
-
- for(var/i = 1, i <= len, i++)
- var/char = copytext(query_text, i, i + 1)
-
- if(char in whitespace)
- if(word != "")
- query_list += word
- word = ""
-
- else if(char in single)
- if(word != "")
- query_list += word
- word = ""
-
- query_list += char
-
- else if(char in multi)
- if(word != "")
- query_list += word
- word = ""
-
- var/char2 = copytext(query_text, i + 1, i + 2)
-
- if(char2 in multi[char])
- query_list += "[char][char2]"
- i++
-
- else
- query_list += char
-
- else if(char == "'")
- if(word != "")
- usr << "\red SDQL2: You have an error in your SDQL syntax, unexpected ' in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again."
- return null
-
- word = "'"
-
- for(i++, i <= len, i++)
- char = copytext(query_text, i, i + 1)
-
- if(char == "'")
- if(copytext(query_text, i + 1, i + 2) == "'")
- word += "'"
- i++
-
- else
- break
-
- else
- word += char
-
- if(i > len)
- usr << "\red SDQL2: You have an error in your SDQL syntax, unmatched ' in query: \"[query_text]\". Please check your syntax, and try again."
- return null
-
- query_list += "[word]'"
- word = ""
-
- else if(char == "\"")
- if(word != "")
- usr << "\red SDQL2: You have an error in your SDQL syntax, unexpected \" in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again."
- return null
-
- word = "\""
-
- for(i++, i <= len, i++)
- char = copytext(query_text, i, i + 1)
-
- if(char == "\"")
- if(copytext(query_text, i + 1, i + 2) == "'")
- word += "\""
- i++
-
- else
- break
-
- else
- word += char
-
- if(i > len)
- usr << "\red SDQL2: You have an error in your SDQL syntax, unmatched \" in query: \"[query_text]\". Please check your syntax, and try again."
- return null
-
- query_list += "[word]\""
- word = ""
-
- else
- word += char
-
- if(word != "")
- query_list += word
-
- return query_list
+
+
+/client/proc/SDQL2_query(query_text as message)
+ set category = "Admin"
+ if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe.
+ message_admins("\red ERROR: Non-admin [usr.key] attempted to execute a SDQL query!")
+ log_admin("Non-admin [usr.key] attempted to execute a SDQL query!")
+
+ if(!query_text || length(query_text) < 1)
+ return
+
+ //world << query_text
+
+ var/list/query_list = SDQL2_tokenize(query_text)
+
+ if(!query_list || query_list.len < 1)
+ return
+
+ var/list/query_tree = SDQL_parse(query_list)
+
+ if(query_tree.len < 1)
+ return
+
+ var/list/from_objs = list()
+ var/list/select_types = list()
+
+ switch(query_tree[1])
+ if("explain")
+ SDQL_testout(query_tree["explain"])
+ return
+
+ if("call")
+ if("on" in query_tree)
+ select_types = query_tree["on"]
+ else
+ return
+
+ if("select", "delete", "update")
+ select_types = query_tree[query_tree[1]]
+
+ from_objs = SDQL_from_objs(query_tree["from"])
+
+ var/list/objs = list()
+
+ for(var/type in select_types)
+ var/char = copytext(type, 1, 2)
+
+ if(char == "/" || char == "*")
+ for(var/from in from_objs)
+ objs += SDQL_get_all(type, from)
+
+ else if(char == "'" || char == "\"")
+ objs += locate(copytext(type, 2, length(type)))
+
+ if("where" in query_tree)
+ var/objs_temp = objs
+ objs = list()
+ for(var/datum/d in objs_temp)
+ if(SDQL_expression(d, query_tree["where"]))
+ objs += d
+
+ //usr << "Query: [query_text]"
+ message_admins("[usr] executed SDQL query: \"[query_text]\".")
+
+ switch(query_tree[1])
+ if("delete")
+ for(var/datum/d in objs)
+ qdel(d)
+
+ if("select")
+ var/text = ""
+ for(var/datum/t in objs)
+ if(istype(t, /atom))
+ var/atom/a = t
+
+ if(a.x)
+ text += "\ref[t]: [t] at ([a.x], [a.y], [a.z])
"
+
+ else if(a.loc && a.loc.x)
+ text += "\ref[t]: [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])
"
+
+ else
+ text += "\ref[t]: [t]
"
+
+ else
+ text += "\ref[t]: [t]
"
+
+ usr << browse(text, "window=SDQL-result")
+
+ if("update")
+ if("set" in query_tree)
+ var/list/set_list = query_tree["set"]
+ for(var/datum/d in objs)
+ var/list/vals = list()
+ for(var/v in set_list)
+ if(v in d.vars)
+ vals += v
+ vals[v] = SDQL_expression(d, set_list[v])
+
+ if(istype(d, /turf))
+ for(var/v in vals)
+ if(v == "x" || v == "y" || v == "z")
+ continue
+
+ d.vars[v] = vals[v]
+
+ else
+ for(var/v in vals)
+ d.vars[v] = vals[v]
+
+
+
+
+
+/proc/SDQL_parse(list/query_list)
+ var/datum/SDQL_parser/parser = new(query_list)
+ var/list/query_tree = parser.parse()
+
+ qdel(parser)
+
+ return query_tree
+
+
+
+/proc/SDQL_testout(list/query_tree, indent = 0)
+ var/spaces = ""
+ for(var/s = 0, s < indent, s++)
+ spaces += " "
+
+ for(var/item in query_tree)
+ if(istype(item, /list))
+ world << "[spaces]("
+ SDQL_testout(item, indent + 1)
+ world << "[spaces])"
+
+ else
+ world << "[spaces][item]"
+
+ if(!isnum(item) && query_tree[item])
+
+ if(istype(query_tree[item], /list))
+ world << "[spaces] ("
+ SDQL_testout(query_tree[item], indent + 2)
+ world << "[spaces] )"
+
+ else
+ world << "[spaces] [query_tree[item]]"
+
+
+
+/proc/SDQL_from_objs(list/tree)
+ if("world" in tree)
+ return list(world)
+
+ var/list/out = list()
+
+ for(var/type in tree)
+ var/char = copytext(type, 1, 2)
+
+ if(char == "/")
+ out += SDQL_get_all(type, world)
+
+ else if(char == "'" || char == "\"")
+ out += locate(copytext(type, 2, length(type)))
+
+ return out
+
+
+/proc/SDQL_get_all(type, location)
+ var/list/out = list()
+
+ if(type == "*")
+ for(var/datum/d in location)
+ out += d
+
+ return out
+
+ type = text2path(type)
+
+ if(ispath(type, /mob))
+ for(var/mob/d in location)
+ if(istype(d, type))
+ out += d
+
+ else if(ispath(type, /turf))
+ for(var/turf/d in location)
+ if(istype(d, type))
+ out += d
+
+ else if(ispath(type, /obj))
+ for(var/obj/d in location)
+ if(istype(d, type))
+ out += d
+
+ else if(ispath(type, /area))
+ for(var/area/d in location)
+ if(istype(d, type))
+ out += d
+
+ else if(ispath(type, /atom))
+ for(var/atom/d in location)
+ if(istype(d, type))
+ out += d
+
+ else
+ for(var/datum/d in location)
+ if(istype(d, type))
+ out += d
+
+ return out
+
+
+/proc/SDQL_expression(datum/object, list/expression, start = 1)
+ var/result = 0
+ var/val
+
+ for(var/i = start, i <= expression.len, i++)
+ var/op = ""
+
+ if(i > start)
+ op = expression[i]
+ i++
+
+ var/list/ret = SDQL_value(object, expression, i)
+ val = ret["val"]
+ i = ret["i"]
+
+ if(op != "")
+ switch(op)
+ if("+")
+ result += val
+ if("-")
+ result -= val
+ if("*")
+ result *= val
+ if("/")
+ result /= val
+ if("&")
+ result &= val
+ if("|")
+ result |= val
+ if("^")
+ result ^= val
+ if("=", "==")
+ result = (result == val)
+ if("!=", "<>")
+ result = (result != val)
+ if("<")
+ result = (result < val)
+ if("<=")
+ result = (result <= val)
+ if(">")
+ result = (result > val)
+ if(">=")
+ result = (result >= val)
+ if("and", "&&")
+ result = (result && val)
+ if("or", "||")
+ result = (result || val)
+ else
+ usr << "\red SDQL2: Unknown op [op]"
+ result = null
+ else
+ result = val
+
+ return result
+
+/proc/SDQL_value(datum/object, list/expression, start = 1)
+ var/i = start
+ var/val = null
+
+ if(i > expression.len)
+ return list("val" = null, "i" = i)
+
+ if(istype(expression[i], /list))
+ val = SDQL_expression(object, expression[i])
+
+ else if(expression[i] == "!")
+ var/list/ret = SDQL_value(object, expression, i + 1)
+ val = !ret["val"]
+ i = ret["i"]
+
+ else if(expression[i] == "~")
+ var/list/ret = SDQL_value(object, expression, i + 1)
+ val = ~ret["val"]
+ i = ret["i"]
+
+ else if(expression[i] == "-")
+ var/list/ret = SDQL_value(object, expression, i + 1)
+ val = -ret["val"]
+ i = ret["i"]
+
+ else if(expression[i] == "null")
+ val = null
+
+ else if(isnum(expression[i]))
+ val = expression[i]
+
+ else if(copytext(expression[i], 1, 2) in list("'", "\""))
+ val = copytext(expression[i], 2, length(expression[i]))
+
+ else
+ val = SDQL_var(object, expression, i)
+ i = expression.len
+
+ return list("val" = val, "i" = i)
+
+/proc/SDQL_var(datum/object, list/expression, start = 1)
+
+ if(expression[start] in object.vars)
+
+ if(start < expression.len && expression[start + 1] == ".")
+ return SDQL_var(object.vars[expression[start]], expression[start + 2])
+
+ else
+ return object.vars[expression[start]]
+
+ else
+ return null
+
+/proc/SDQL2_tokenize(query_text)
+
+ var/list/whitespace = list(" ", "\n", "\t")
+ var/list/single = list("(", ")", ",", "+", "-", ".")
+ var/list/multi = list(
+ "=" = list("", "="),
+ "<" = list("", "=", ">"),
+ ">" = list("", "="),
+ "!" = list("", "="))
+
+ var/word = ""
+ var/list/query_list = list()
+ var/len = length(query_text)
+
+ for(var/i = 1, i <= len, i++)
+ var/char = copytext(query_text, i, i + 1)
+
+ if(char in whitespace)
+ if(word != "")
+ query_list += word
+ word = ""
+
+ else if(char in single)
+ if(word != "")
+ query_list += word
+ word = ""
+
+ query_list += char
+
+ else if(char in multi)
+ if(word != "")
+ query_list += word
+ word = ""
+
+ var/char2 = copytext(query_text, i + 1, i + 2)
+
+ if(char2 in multi[char])
+ query_list += "[char][char2]"
+ i++
+
+ else
+ query_list += char
+
+ else if(char == "'")
+ if(word != "")
+ usr << "\red SDQL2: You have an error in your SDQL syntax, unexpected ' in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again."
+ return null
+
+ word = "'"
+
+ for(i++, i <= len, i++)
+ char = copytext(query_text, i, i + 1)
+
+ if(char == "'")
+ if(copytext(query_text, i + 1, i + 2) == "'")
+ word += "'"
+ i++
+
+ else
+ break
+
+ else
+ word += char
+
+ if(i > len)
+ usr << "\red SDQL2: You have an error in your SDQL syntax, unmatched ' in query: \"[query_text]\". Please check your syntax, and try again."
+ return null
+
+ query_list += "[word]'"
+ word = ""
+
+ else if(char == "\"")
+ if(word != "")
+ usr << "\red SDQL2: You have an error in your SDQL syntax, unexpected \" in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again."
+ return null
+
+ word = "\""
+
+ for(i++, i <= len, i++)
+ char = copytext(query_text, i, i + 1)
+
+ if(char == "\"")
+ if(copytext(query_text, i + 1, i + 2) == "'")
+ word += "\""
+ i++
+
+ else
+ break
+
+ else
+ word += char
+
+ if(i > len)
+ usr << "\red SDQL2: You have an error in your SDQL syntax, unmatched \" in query: \"[query_text]\". Please check your syntax, and try again."
+ return null
+
+ query_list += "[word]\""
+ word = ""
+
+ else
+ word += char
+
+ if(word != "")
+ query_list += word
+
+ return query_list
diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm
index 71bdabf4be..4b90283a56 100644
--- a/code/modules/admin/verbs/buildmode.dm
+++ b/code/modules/admin/verbs/buildmode.dm
@@ -8,7 +8,7 @@
M.client.show_popup_menus = 1
for(var/obj/effect/bmode/buildholder/H)
if(H.cl == M.client)
- del(H)
+ qdel(H)
else
log_admin("[key_name(usr)] has entered build mode.")
M.client.buildmode = 1
@@ -220,7 +220,7 @@
T.ChangeTurf(/turf/simulated/wall)
return
else if(istype(object,/obj))
- del(object)
+ qdel(object)
return
else if(istype(object,/turf) && pa.Find("alt") && pa.Find("left"))
new/obj/machinery/door/airlock(get_turf(object))
@@ -250,7 +250,7 @@
var/obj/A = new holder.buildmode.objholder (get_turf(object))
A.set_dir(holder.builddir.dir)
else if(pa.Find("right"))
- if(isobj(object)) del(object)
+ if(isobj(object)) qdel(object)
if(pa.Find("middle"))
holder.buildmode.objholder = text2path("[object.type]")
if(holder.buildmode.objsay) usr << "[object.type]"
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 43e2211aba..62c9de0d6f 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -350,7 +350,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(hsbitem)
for(var/atom/O in world)
if(istype(O, hsbitem))
- del(O)
+ qdel(O)
log_admin("[key_name(src)] has deleted all instances of [hsbitem].")
message_admins("[key_name_admin(src)] has deleted all instances of [hsbitem].", 0)
feedback_add_details("admin_verb","DELA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -420,7 +420,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/mob/adminmob = src.mob
M.ckey = src.ckey
if( isobserver(adminmob) )
- del(adminmob)
+ qdel(adminmob)
feedback_add_details("admin_verb","ADC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -555,7 +555,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
for (var/obj/item/I in M)
if (istype(I, /obj/item/weapon/implant))
continue
- del(I)
+ qdel(I)
switch(dresscode)
if ("strip")
//do nothing
@@ -614,7 +614,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
var/obj/item/weapon/storage/backpack/backpack = new(M)
for(var/obj/item/I in backpack)
- del(I)
+ qdel(I)
M.equip_to_slot_or_del(backpack, slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/mop(M), slot_r_hand)
@@ -705,7 +705,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M)
for(var/obj/item/briefcase_item in sec_briefcase)
- del(briefcase_item)
+ qdel(briefcase_item)
for(var/i=3, i>0, i--)
sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000
sec_briefcase.contents += new /obj/item/weapon/gun/energy/crossbow
@@ -927,9 +927,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
spawn(30)
for(var/obj/machinery/the_singularitygen/G in world)
if(G.anchored)
- var/obj/machinery/singularity/S = new /obj/machinery/singularity(get_turf(G), 50)
+ var/obj/singularity/S = new /obj/singularity(get_turf(G), 50)
spawn(0)
- del(G)
+ qdel(G)
S.energy = 1750
S.current_size = 7
S.icon = 'icons/effects/224x224.dmi'
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index c6f91e89d3..bd3c4be0d9 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -55,7 +55,7 @@ var/intercom_range_display_status = 0
for(var/obj/effect/debugging/camera_range/C in world)
- del(C)
+ qdel(C)
if(camera_range_display_status)
for(var/obj/machinery/camera/C in cameranet.cameras)
@@ -114,14 +114,14 @@ var/intercom_range_display_status = 0
intercom_range_display_status = 1
for(var/obj/effect/debugging/marker/M in world)
- del(M)
+ qdel(M)
if(intercom_range_display_status)
for(var/obj/item/device/radio/intercom/I in world)
for(var/turf/T in orange(7,I))
var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
if (!(F in view(7,I.loc)))
- del(F)
+ qdel(F)
feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
var/list/debug_verbs = list (
@@ -276,7 +276,7 @@ var/list/debug_verbs = list (
var/datum/controller/air_system/old_air = air_master
for(var/zone/zone in old_air.zones)
zone.c_invalidate()
- del old_air
+ qdel(old_air)
air_master = new
air_master.Setup()
spawn air_master.Start()
diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm
index de69f149d7..6de30853ce 100644
--- a/code/modules/admin/verbs/possess.dm
+++ b/code/modules/admin/verbs/possess.dm
@@ -2,7 +2,7 @@
set name = "Possess Obj"
set category = "Object"
- if(istype(O,/obj/machinery/singularity))
+ if(istype(O,/obj/singularity))
if(config.forbid_singulo_possession)
usr << "It is forbidden to possess singularities."
return
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index ad4f7eda04..fd55a5a1e9 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -686,7 +686,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
world.Export("http://216.38.134.132/adminlog.php?type=ban&key=[usr.client.key]&key2=[M.key]&msg=[html_decode(reason)]&time=[mins]&server=[replacetext(config.server_name, "#", "")]")
del(M.client)
- del(M)
+ qdel(M)
else
if("No")
@@ -701,7 +701,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
world.Export("http://216.38.134.132/adminlog.php?type=ban&key=[usr.client.key]&key2=[M.key]&msg=[html_decode(reason)]&time=perma&server=[replacetext(config.server_name, "#", "")]")
del(M.client)
- del(M)
+ qdel(M)
*/
/client/proc/update_world()
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index ed3edf5fc0..ba071d7c72 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -39,7 +39,7 @@
bombtank.master = null
bombtank = null
- del(src)
+ qdel(src)
return
if((istype(W, /obj/item/weapon/weldingtool) && W:welding))
if(!status)
@@ -144,8 +144,8 @@
ground_zero.hotspot_expose(1000, 125)
if(master)
- del(master)
- del(src)
+ qdel(master)
+ qdel(src)
/obj/item/weapon/tank/proc/release() //This happens when the bomb is not welded. Tank contents are just spat out.
var/datum/gas_mixture/removed = air_contents.remove(air_contents.total_moles)
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index f3bf44b53b..a8a3d246c8 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -190,7 +190,7 @@
a_right:holder = null
a_right.loc = T
spawn(0)
- del(src)
+ qdel(src)
return
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index 79e3cf8637..3f3c4f4dbd 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -32,7 +32,7 @@
processing_objects.Add(src)
else
on = 0
- if(first) del(first)
+ if(first) qdel(first)
processing_objects.Remove(src)
update_icon()
return secured
@@ -53,7 +53,7 @@
process()//Old code
if(!on)
if(first)
- del(first)
+ qdel(first)
return
if((!(first) && (secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf))))))
@@ -77,7 +77,7 @@
attack_hand()
- del(first)
+ qdel(first)
..()
return
@@ -86,14 +86,14 @@
var/t = dir
..()
set_dir(t)
- del(first)
+ qdel(first)
return
holder_movement()
if(!holder) return 0
// set_dir(holder.dir)
- del(first)
+ qdel(first)
return 1
@@ -175,7 +175,7 @@
if(master)
//world << "beam hit \ref[src]: calling master \ref[master].hit"
master.trigger_beam()
- del(src)
+ qdel(src)
return
/obj/effect/beam/i_beam/proc/vis_spread(v)
@@ -193,7 +193,7 @@
if((loc.density || !(master)))
// world << "beam hit loc [loc] or no master [master], deleting"
- del(src)
+ qdel(src)
return
//world << "proccess: [src.left] left"
@@ -233,17 +233,17 @@
return
else
//world << "is a next: \ref[next], deleting beam \ref[I]"
- del(I)
+ qdel(I)
else
//world << "step failed, deleting \ref[next]"
- del(next)
+ qdel(next)
spawn(10)
process()
return
return
/obj/effect/beam/i_beam/Bump()
- del(src)
+ qdel(src)
return
/obj/effect/beam/i_beam/Bumped()
@@ -258,7 +258,10 @@
return
return
-/obj/effect/beam/i_beam/Del()
- del(next)
+/obj/effect/beam/i_beam/Destroy()
+ if(master.first == src)
+ master.first = null
+ if(next)
+ qdel(next)
+ next = null
..()
- return
diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm
index 5e501e3313..8ba62cdc37 100644
--- a/code/modules/assembly/shock_kit.dm
+++ b/code/modules/assembly/shock_kit.dm
@@ -8,9 +8,9 @@
w_class = 5.0
flags = CONDUCT
-/obj/item/assembly/shock_kit/Del()
- del(part1)
- del(part2)
+/obj/item/assembly/shock_kit/Destroy()
+ qdel(part1)
+ qdel(part2)
..()
return
@@ -25,7 +25,7 @@
part2.master = null
part1 = null
part2 = null
- del(src)
+ qdel(src)
return
if(istype(W, /obj/item/weapon/screwdriver))
status = !status
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index ba70b45da4..271b63e6d5 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -141,6 +141,8 @@
proc/set_frequency(new_frequency)
+ if(!frequency)
+ return
if(!radio_controller)
sleep(20)
if(!radio_controller)
@@ -171,3 +173,9 @@
processing_objects.Add(src)
log_and_message_admins("is threatening to trigger a signaler deadman's switch")
usr.visible_message("\red [usr] moves their finger over [src]'s signal button...")
+
+/obj/item/device/assembly/signaler/Destroy()
+ if(radio_controller)
+ radio_controller.remove_object(src,frequency)
+ frequency = 0
+ ..()
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 11f78326c6..b6415f22b5 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -77,7 +77,7 @@
W.assignment = corpseidjob
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
- del(src)
+ qdel(src)
diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm
index 706e1716af..5aeb9651d2 100644
--- a/code/modules/awaymissions/loot.dm
+++ b/code/modules/awaymissions/loot.dm
@@ -21,4 +21,4 @@
continue
new loot_path(get_turf(src))
- del(src)
\ No newline at end of file
+ qdel(src)
diff --git a/code/modules/awaymissions/trigger.dm b/code/modules/awaymissions/trigger.dm
index 65ad8f543d..4afaf4a135 100644
--- a/code/modules/awaymissions/trigger.dm
+++ b/code/modules/awaymissions/trigger.dm
@@ -6,7 +6,7 @@
if(M.client)
M << "[message]"
if(once)
- del(src)
+ qdel(src)
/obj/effect/step_trigger/teleport_fancy
var/locationx
@@ -41,4 +41,4 @@
uses--
if(uses == 0)
- del(src)
\ No newline at end of file
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index 20ee74177e..e1095e55b0 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -33,7 +33,7 @@
if( findtext(href,"