Merge remote-tracking branch 'upstream/dev' into BorgModules

Conflicts:
	code/game/objects/items/robot/robot_upgrades.dm
	code/modules/mob/living/silicon/ai/subsystems.dm
	code/modules/mob/living/silicon/robot/robot.dm
	code/modules/mob/living/silicon/robot/robot_upgrades.dm
This commit is contained in:
PsiOmega
2015-04-26 15:46:24 +02:00
654 changed files with 10014 additions and 8915 deletions

View File

@@ -16,7 +16,7 @@
#include "code\setup.dm" #include "code\setup.dm"
#include "code\stylesheet.dm" #include "code\stylesheet.dm"
#include "code\world.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\files.dm"
#include "code\__HELPERS\game.dm" #include "code\__HELPERS\game.dm"
#include "code\__HELPERS\global_lists.dm" #include "code\__HELPERS\global_lists.dm"
@@ -328,6 +328,7 @@
#include "code\game\machinery\bioprinter.dm" #include "code\game\machinery\bioprinter.dm"
#include "code\game\machinery\bluespacerelay.dm" #include "code\game\machinery\bluespacerelay.dm"
#include "code\game\machinery\buttons.dm" #include "code\game\machinery\buttons.dm"
#include "code\game\machinery\CableLayer.dm"
#include "code\game\machinery\cell_charger.dm" #include "code\game\machinery\cell_charger.dm"
#include "code\game\machinery\cloning.dm" #include "code\game\machinery\cloning.dm"
#include "code\game\machinery\constructable_frame.dm" #include "code\game\machinery\constructable_frame.dm"
@@ -338,6 +339,7 @@
#include "code\game\machinery\doppler_array.dm" #include "code\game\machinery\doppler_array.dm"
#include "code\game\machinery\flasher.dm" #include "code\game\machinery\flasher.dm"
#include "code\game\machinery\floodlight.dm" #include "code\game\machinery\floodlight.dm"
#include "code\game\machinery\floorlayer.dm"
#include "code\game\machinery\hologram.dm" #include "code\game\machinery\hologram.dm"
#include "code\game\machinery\holosign.dm" #include "code\game\machinery\holosign.dm"
#include "code\game\machinery\igniter.dm" #include "code\game\machinery\igniter.dm"
@@ -476,6 +478,7 @@
#include "code\game\machinery\kitchen\smartfridge.dm" #include "code\game\machinery\kitchen\smartfridge.dm"
#include "code\game\machinery\pipe\construction.dm" #include "code\game\machinery\pipe\construction.dm"
#include "code\game\machinery\pipe\pipe_dispenser.dm" #include "code\game\machinery\pipe\pipe_dispenser.dm"
#include "code\game\machinery\pipe\pipelayer.dm"
#include "code\game\machinery\telecomms\broadcaster.dm" #include "code\game\machinery\telecomms\broadcaster.dm"
#include "code\game\machinery\telecomms\logbrowser.dm" #include "code\game\machinery\telecomms\logbrowser.dm"
#include "code\game\machinery\telecomms\machine_interactions.dm" #include "code\game\machinery\telecomms\machine_interactions.dm"

View File

@@ -1,6 +1,11 @@
// BEGIN_INTERNALS // BEGIN_INTERNALS
/* /*
MAP_ICON_TYPE: 0 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 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 // END_INTERNALS

View File

@@ -44,15 +44,15 @@ obj/machinery/atmospherics/binary
return null return null
Del() Destroy()
loc = null loc = null
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
del(network1) qdel(network1)
if(node2) if(node2)
node2.disconnect(src) node2.disconnect(src)
del(network2) qdel(network2)
node1 = null node1 = null
node2 = null node2 = null
@@ -123,11 +123,11 @@ obj/machinery/atmospherics/binary
disconnect(obj/machinery/atmospherics/reference) disconnect(obj/machinery/atmospherics/reference)
if(reference==node1) if(reference==node1)
del(network1) qdel(network1)
node1 = null node1 = null
else if(reference==node2) else if(reference==node2)
del(network2) qdel(network2)
node2 = null node2 = null
update_icon() update_icon()

View File

@@ -112,10 +112,10 @@
else else
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
del(network1) qdel(network1)
if(node2) if(node2)
node2.disconnect(src) node2.disconnect(src)
del(network2) qdel(network2)
node1 = null node1 = null
node2 = null node2 = null

View File

@@ -258,4 +258,4 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) qdel(src)

View File

@@ -38,15 +38,15 @@
if(WEST) if(WEST)
initialize_directions = NORTH|SOUTH initialize_directions = NORTH|SOUTH
Del() Destroy()
loc = null loc = null
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
del(network1) qdel(network1)
if(node2) if(node2)
node2.disconnect(src) node2.disconnect(src)
del(network2) qdel(network2)
node1 = null node1 = null
node2 = null node2 = null
@@ -110,10 +110,10 @@
else else
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
del(network1) qdel(network1)
if(node2) if(node2)
node2.disconnect(src) node2.disconnect(src)
del(network2) qdel(network2)
node1 = null node1 = null
node2 = null node2 = null
@@ -216,11 +216,11 @@
disconnect(obj/machinery/atmospherics/reference) disconnect(obj/machinery/atmospherics/reference)
if(reference==node1) if(reference==node1)
del(network1) qdel(network1)
node1 = null node1 = null
else if(reference==node2) else if(reference==node2)
del(network2) qdel(network2)
node2 = null node2 = null
return null return null

View File

@@ -235,4 +235,4 @@ Thus, the two variables affect pump operation are set in New():
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) qdel(src)

View File

@@ -24,7 +24,7 @@
for(var/datum/omni_port/P in ports) for(var/datum/omni_port/P in ports)
P.air.volume = ATMOS_DEFAULT_VOLUME_FILTER P.air.volume = ATMOS_DEFAULT_VOLUME_FILTER
/obj/machinery/atmospherics/omni/filter/Del() /obj/machinery/atmospherics/omni/filter/Destroy()
input = null input = null
output = null output = null
filters.Cut() filters.Cut()

View File

@@ -49,7 +49,7 @@
for(var/datum/omni_port/P in ports) for(var/datum/omni_port/P in ports)
P.air.volume = ATMOS_DEFAULT_VOLUME_MIXER P.air.volume = ATMOS_DEFAULT_VOLUME_MIXER
/obj/machinery/atmospherics/omni/mixer/Del() /obj/machinery/atmospherics/omni/mixer/Destroy()
inputs.Cut() inputs.Cut()
output = null output = null
..() ..()

View File

@@ -98,7 +98,7 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear a ratchet.") "You hear a ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) qdel(src)
/obj/machinery/atmospherics/omni/attack_hand(user as mob) /obj/machinery/atmospherics/omni/attack_hand(user as mob)
if(..()) if(..())
@@ -231,13 +231,13 @@
return null return null
/obj/machinery/atmospherics/omni/Del() /obj/machinery/atmospherics/omni/Destroy()
loc = null loc = null
for(var/datum/omni_port/P in ports) for(var/datum/omni_port/P in ports)
if(P.node) if(P.node)
P.node.disconnect(src) P.node.disconnect(src)
del(P.network) qdel(P.network)
P.node = null P.node = null
..() ..()
@@ -292,7 +292,7 @@
/obj/machinery/atmospherics/omni/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/omni/disconnect(obj/machinery/atmospherics/reference)
for(var/datum/omni_port/P in ports) for(var/datum/omni_port/P in ports)
if(reference == P.node) if(reference == P.node)
del(P.network) qdel(P.network)
P.node = null P.node = null
P.update = 1 P.update = 1
break break

View File

@@ -60,7 +60,7 @@
return null return null
/obj/machinery/atmospherics/portables_connector/Del() /obj/machinery/atmospherics/portables_connector/Destroy()
loc = null loc = null
if(connected_device) if(connected_device)
@@ -68,7 +68,7 @@
if(node) if(node)
node.disconnect(src) node.disconnect(src)
del(network) qdel(network)
node = null node = null
@@ -122,7 +122,7 @@
/obj/machinery/atmospherics/portables_connector/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/portables_connector/disconnect(obj/machinery/atmospherics/reference)
if(reference==node) if(reference==node)
del(network) qdel(network)
node = null node = null
update_underlays() update_underlays()
@@ -152,4 +152,4 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) qdel(src)

View File

@@ -148,7 +148,7 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) qdel(src)
/obj/machinery/atmospherics/trinary/filter/attack_hand(user as mob) // -- TLE /obj/machinery/atmospherics/trinary/filter/attack_hand(user as mob) // -- TLE

View File

@@ -120,7 +120,7 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) qdel(src)
/obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob) /obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob)
if(..()) if(..())

View File

@@ -52,18 +52,18 @@ obj/machinery/atmospherics/trinary
return null return null
Del() Destroy()
loc = null loc = null
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
del(network1) qdel(network1)
if(node2) if(node2)
node2.disconnect(src) node2.disconnect(src)
del(network2) qdel(network2)
if(node3) if(node3)
node3.disconnect(src) node3.disconnect(src)
del(network3) qdel(network3)
node1 = null node1 = null
node2 = null node2 = null
@@ -153,15 +153,15 @@ obj/machinery/atmospherics/trinary
disconnect(obj/machinery/atmospherics/reference) disconnect(obj/machinery/atmospherics/reference)
if(reference==node1) if(reference==node1)
del(network1) qdel(network1)
node1 = null node1 = null
else if(reference==node2) else if(reference==node2)
del(network2) qdel(network2)
node2 = null node2 = null
else if(reference==node3) else if(reference==node3)
del(network3) qdel(network3)
node3 = null node3 = null
update_underlays() update_underlays()

View File

@@ -101,18 +101,18 @@
return null return null
/obj/machinery/atmospherics/tvalve/Del() /obj/machinery/atmospherics/tvalve/Destroy()
loc = null loc = null
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
del(network_node1) qdel(network_node1)
if(node2) if(node2)
node2.disconnect(src) node2.disconnect(src)
del(network_node2) qdel(network_node2)
if(node3) if(node3)
node3.disconnect(src) node3.disconnect(src)
del(network_node3) qdel(network_node3)
node1 = null node1 = null
node2 = null node2 = null
@@ -128,9 +128,9 @@
update_icon() update_icon()
if(network_node1) if(network_node1)
del(network_node1) qdel(network_node1)
if(network_node3) if(network_node3)
del(network_node3) qdel(network_node3)
build_network() build_network()
if(network_node1&&network_node2) if(network_node1&&network_node2)
@@ -153,9 +153,9 @@
update_icon() update_icon()
if(network_node1) if(network_node1)
del(network_node1) qdel(network_node1)
if(network_node2) if(network_node2)
del(network_node2) qdel(network_node2)
build_network() build_network()
if(network_node1&&network_node3) if(network_node1&&network_node3)
@@ -262,15 +262,15 @@
/obj/machinery/atmospherics/tvalve/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/tvalve/disconnect(obj/machinery/atmospherics/reference)
if(reference==node1) if(reference==node1)
del(network_node1) qdel(network_node1)
node1 = null node1 = null
else if(reference==node2) else if(reference==node2)
del(network_node2) qdel(network_node2)
node2 = null node2 = null
else if(reference==node3) else if(reference==node3)
del(network_node3) qdel(network_node3)
node2 = null node2 = null
update_underlays() update_underlays()
@@ -366,7 +366,7 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) qdel(src)
/obj/machinery/atmospherics/tvalve/mirrored /obj/machinery/atmospherics/tvalve/mirrored
icon_state = "map_tvalvem0" icon_state = "map_tvalvem0"

View File

@@ -86,4 +86,4 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) qdel(src)

View File

@@ -28,12 +28,12 @@
return null return null
Del() Destroy()
loc = null loc = null
if(node) if(node)
node.disconnect(src) node.disconnect(src)
del(network) qdel(network)
node = null node = null
@@ -84,7 +84,7 @@
disconnect(obj/machinery/atmospherics/reference) disconnect(obj/machinery/atmospherics/reference)
if(reference==node) if(reference==node)
del(network) qdel(network)
node = null node = null
update_icon() update_icon()

View File

@@ -414,9 +414,9 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) 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) if(initial_loc)
initial_loc.air_vent_info -= id_tag initial_loc.air_vent_info -= id_tag
initial_loc.air_vent_names -= id_tag initial_loc.air_vent_names -= id_tag

View File

@@ -270,7 +270,7 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) qdel(src)
/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user) /obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user)
if(..(user, 1)) if(..(user, 1))
@@ -278,7 +278,7 @@
else else
user << "You are too far away to read the gauge." 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) if(initial_loc)
initial_loc.air_scrub_info -= id_tag initial_loc.air_scrub_info -= id_tag
initial_loc.air_scrub_names -= id_tag initial_loc.air_scrub_names -= id_tag

View File

@@ -73,15 +73,15 @@
return null return null
/obj/machinery/atmospherics/valve/Del() /obj/machinery/atmospherics/valve/Destroy()
loc = null loc = null
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
del(network_node1) qdel(network_node1)
if(node2) if(node2)
node2.disconnect(src) node2.disconnect(src)
del(network_node2) qdel(network_node2)
node1 = null node1 = null
node2 = null node2 = null
@@ -113,9 +113,9 @@
update_icon() update_icon()
if(network_node1) if(network_node1)
del(network_node1) qdel(network_node1)
if(network_node2) if(network_node2)
del(network_node2) qdel(network_node2)
build_network() build_network()
@@ -214,11 +214,11 @@
/obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference)
if(reference==node1) if(reference==node1)
del(network_node1) qdel(network_node1)
node1 = null node1 = null
else if(reference==node2) else if(reference==node2)
del(network_node2) qdel(network_node2)
node2 = null node2 = null
update_underlays() update_underlays()
@@ -310,7 +310,7 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) qdel(src)
/obj/machinery/atmospherics/valve/examine(mob/user) /obj/machinery/atmospherics/valve/examine(mob/user)
..() ..()

View File

@@ -31,7 +31,7 @@ datum/pipe_network
//Notes: Assuming that members will add themselves to appropriate roster in network_expand() //Notes: Assuming that members will add themselves to appropriate roster in network_expand()
if(!start_normal) if(!start_normal)
del(src) qdel(src)
start_normal.network_expand(src, reference) start_normal.network_expand(src, reference)
@@ -40,7 +40,7 @@ datum/pipe_network
if((normal_members.len>0)||(line_members.len>0)) if((normal_members.len>0)||(line_members.len>0))
pipe_networks += src pipe_networks += src
else else
del(src) qdel(src)
proc/merge(datum/pipe_network/giver) proc/merge(datum/pipe_network/giver)
if(giver==src) return 0 if(giver==src) return 0

View File

@@ -9,13 +9,13 @@ datum/pipeline
var/alert_pressure = 0 var/alert_pressure = 0
Del() Destroy()
if(network) if(network)
del(network) qdel(network)
if(air && air.volume) if(air && air.volume)
temporarily_store_air() temporarily_store_air()
del(air) qdel(air)
..() ..()

View File

@@ -44,7 +44,7 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging
node2 = target node2 = target
break break
if(!node1 && !node2) if(!node1 && !node2)
del(src) qdel(src)
return return
update_icon() update_icon()
@@ -141,7 +141,7 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction
break break
if(!node1&&!node2) if(!node1&&!node2)
del(src) qdel(src)
return return
update_icon() update_icon()

View File

@@ -99,7 +99,7 @@ obj/machinery/atmospherics/mains_pipe
for(var/obj/machinery/atmospherics/pipe/mains_component/node in nodes) for(var/obj/machinery/atmospherics/pipe/mains_component/node in nodes)
node.disconnect() node.disconnect()
Del() Destroy()
disconnect() disconnect()
..() ..()
@@ -152,7 +152,7 @@ obj/machinery/atmospherics/mains_pipe/simple
else else
if(!nodes[1]&&!nodes[2]) 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_node1 = nodes[1]?1:0
var/have_node2 = nodes[2]?1:0 var/have_node2 = nodes[2]?1:0
icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]"

View File

@@ -30,7 +30,7 @@
/obj/machinery/atmospherics/pipe/proc/check_pressure(pressure) /obj/machinery/atmospherics/pipe/proc/check_pressure(pressure)
//Return 1 if parent should continue checking other pipes //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 return 1
@@ -62,8 +62,8 @@
return parent.return_network(reference) return parent.return_network(reference)
/obj/machinery/atmospherics/pipe/Del() /obj/machinery/atmospherics/pipe/Destroy()
del(parent) qdel(parent)
if(air_temporary) if(air_temporary)
loc.assume_air(air_temporary) loc.assume_air(air_temporary)
@@ -101,8 +101,8 @@
for (var/obj/machinery/meter/meter in T) for (var/obj/machinery/meter/meter in T)
if (meter.target == src) if (meter.target == src)
new /obj/item/pipe_meter(T) new /obj/item/pipe_meter(T)
del(meter) qdel(meter)
del(src) qdel(src)
/obj/machinery/atmospherics/proc/change_color(var/new_color) /obj/machinery/atmospherics/proc/change_color(var/new_color)
//only pass valid pipe colors please ~otherwise your pipe will turn invisible //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 var/datum/effect/effect/system/smoke_spread/smoke = new
smoke.set_up(1,0, src.loc, 0) smoke.set_up(1,0, src.loc, 0)
smoke.start() smoke.start()
del(src) qdel(src)
/obj/machinery/atmospherics/pipe/simple/proc/normalize_dir() /obj/machinery/atmospherics/pipe/simple/proc/normalize_dir()
if(dir==3) if(dir==3)
@@ -227,7 +227,7 @@
else if(dir==12) else if(dir==12)
set_dir(4) set_dir(4)
/obj/machinery/atmospherics/pipe/simple/Del() /obj/machinery/atmospherics/pipe/simple/Destroy()
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
if(node2) if(node2)
@@ -260,8 +260,8 @@
for (var/obj/machinery/meter/meter in T) for (var/obj/machinery/meter/meter in T)
if (meter.target == src) if (meter.target == src)
new /obj/item/pipe_meter(T) new /obj/item/pipe_meter(T)
del(meter) qdel(meter)
del(src) qdel(src)
else if(node1 && node2) else if(node1 && node2)
overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]") overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]")
else else
@@ -294,7 +294,7 @@
break break
if(!node1 && !node2) if(!node1 && !node2)
del(src) qdel(src)
return return
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
@@ -305,12 +305,12 @@
/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1) if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe)) if(istype(node1, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node1 = null node1 = null
if(reference == node2) if(reference == node2)
if(istype(node2, /obj/machinery/atmospherics/pipe)) if(istype(node2, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node2 = null node2 = null
update_icon() update_icon()
@@ -459,7 +459,7 @@
else else
. = PROCESS_KILL . = PROCESS_KILL
/obj/machinery/atmospherics/pipe/manifold/Del() /obj/machinery/atmospherics/pipe/manifold/Destroy()
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
if(node2) if(node2)
@@ -472,17 +472,17 @@
/obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1) if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe)) if(istype(node1, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node1 = null node1 = null
if(reference == node2) if(reference == node2)
if(istype(node2, /obj/machinery/atmospherics/pipe)) if(istype(node2, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node2 = null node2 = null
if(reference == node3) if(reference == node3)
if(istype(node3, /obj/machinery/atmospherics/pipe)) if(istype(node3, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node3 = null node3 = null
update_icon() update_icon()
@@ -511,8 +511,8 @@
for (var/obj/machinery/meter/meter in T) for (var/obj/machinery/meter/meter in T)
if (meter.target == src) if (meter.target == src)
new /obj/item/pipe_meter(T) new /obj/item/pipe_meter(T)
del(meter) qdel(meter)
del(src) qdel(src)
else else
overlays.Cut() overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type) overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)
@@ -578,7 +578,7 @@
break break
if(!node1 && !node2 && !node3) if(!node1 && !node2 && !node3)
del(src) qdel(src)
return return
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
@@ -701,7 +701,7 @@
else else
. = PROCESS_KILL . = PROCESS_KILL
/obj/machinery/atmospherics/pipe/manifold4w/Del() /obj/machinery/atmospherics/pipe/manifold4w/Destroy()
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
if(node2) if(node2)
@@ -716,22 +716,22 @@
/obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1) if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe)) if(istype(node1, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node1 = null node1 = null
if(reference == node2) if(reference == node2)
if(istype(node2, /obj/machinery/atmospherics/pipe)) if(istype(node2, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node2 = null node2 = null
if(reference == node3) if(reference == node3)
if(istype(node3, /obj/machinery/atmospherics/pipe)) if(istype(node3, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node3 = null node3 = null
if(reference == node4) if(reference == node4)
if(istype(node4, /obj/machinery/atmospherics/pipe)) if(istype(node4, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node4 = null node4 = null
update_icon() update_icon()
@@ -762,8 +762,8 @@
for (var/obj/machinery/meter/meter in T) for (var/obj/machinery/meter/meter in T)
if (meter.target == src) if (meter.target == src)
new /obj/item/pipe_meter(T) new /obj/item/pipe_meter(T)
del(meter) qdel(meter)
del(src) qdel(src)
else else
overlays.Cut() overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type) overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)
@@ -837,7 +837,7 @@
break break
if(!node1 && !node2 && !node3 && !node4) if(!node1 && !node2 && !node3 && !node4)
del(src) qdel(src)
return return
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
@@ -958,7 +958,7 @@
..() ..()
else else
. = PROCESS_KILL . = PROCESS_KILL
/obj/machinery/atmospherics/pipe/cap/Del() /obj/machinery/atmospherics/pipe/cap/Destroy()
if(node) if(node)
node.disconnect(src) node.disconnect(src)
@@ -967,7 +967,7 @@
/obj/machinery/atmospherics/pipe/cap/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/pipe/cap/disconnect(obj/machinery/atmospherics/reference)
if(reference == node) if(reference == node)
if(istype(node, /obj/machinery/atmospherics/pipe)) if(istype(node, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node = null node = null
update_icon() update_icon()
@@ -1074,7 +1074,7 @@
else else
. = PROCESS_KILL . = PROCESS_KILL
/obj/machinery/atmospherics/pipe/tank/Del() /obj/machinery/atmospherics/pipe/tank/Destroy()
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
@@ -1108,7 +1108,7 @@
/obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1) if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe)) if(istype(node1, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node1 = null node1 = null
update_underlays() update_underlays()
@@ -1258,7 +1258,7 @@
else else
parent.mingle_with_turf(loc, volume) parent.mingle_with_turf(loc, volume)
/obj/machinery/atmospherics/pipe/vent/Del() /obj/machinery/atmospherics/pipe/vent/Destroy()
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
@@ -1290,7 +1290,7 @@
/obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1) if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe)) if(istype(node1, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node1 = null node1 = null
update_icon() update_icon()

View File

@@ -342,7 +342,7 @@ obj/machinery/atmospherics
set src in world set src in world
set category = "Minor" set category = "Minor"
del(src) qdel(src)
pipeline_data() pipeline_data()
set src in world set src in world
@@ -487,7 +487,7 @@ obj/window
destroy() destroy()
set category = "Minor" set category = "Minor"
set src in world set src in world
del(src) qdel(src)
mob mob
sight = SEE_OBJS|SEE_TURFS sight = SEE_OBJS|SEE_TURFS

View File

@@ -171,7 +171,7 @@
return return
/* /*
/obj/effect/hotspot/Del() /obj/effect/hotspot/Destroy()
if (istype(loc, /turf/simulated)) if (istype(loc, /turf/simulated))
DestroyTurf() DestroyTurf()
..() ..()

View File

@@ -346,7 +346,7 @@ What are the archived variables for?
trace_gases += corresponding trace_gases += corresponding
corresponding.moles += trace_gas.moles*giver.group_multiplier/group_multiplier corresponding.moles += trace_gas.moles*giver.group_multiplier/group_multiplier
// del(giver) // qdel(giver)
return 1 return 1
remove(amount) remove(amount)

View File

@@ -291,7 +291,7 @@ datum
var/turf/simulated/T = turf var/turf/simulated/T = turf
T.parent = null T.parent = null
turfs += T turfs += T
del(turf_AG) qdel(turf_AG)
for(var/turf/simulated/S in turfs) //Have old members try to form new groups for(var/turf/simulated/S in turfs) //Have old members try to form new groups
if(!S.parent) if(!S.parent)
@@ -306,7 +306,7 @@ datum
for(var/obj/movable/floor/OM in object_AG.members) for(var/obj/movable/floor/OM in object_AG.members)
OM.parent = null OM.parent = null
movable_objects += OM 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 for(var/obj/movable/floor/OM in movable_objects) //Have old members try to form new groups
if(!OM.parent) if(!OM.parent)

View File

@@ -14,7 +14,7 @@ atom/movable/proc/experience_pressure_difference(pressure_difference, direction)
turf turf
assume_air(datum/gas_mixture/giver) //use this for machines to adjust air assume_air(datum/gas_mixture/giver) //use this for machines to adjust air
del(giver) qdel(giver)
return 0 return 0
return_air() return_air()
@@ -148,7 +148,7 @@ turf/simulated
if(istype(target)) if(istype(target))
air_master.tiles_to_update.Add(target) air_master.tiles_to_update.Add(target)
Del() Destroy()
if(air_master) if(air_master)
if(parent) if(parent)
air_master.groups_to_rebuild.Add(parent) air_master.groups_to_rebuild.Add(parent)

View File

@@ -80,7 +80,7 @@ obj/machinery/atmospherics/pipe/zpipe/proc/burst()
var/datum/effect/effect/system/smoke_spread/smoke = new var/datum/effect/effect/system/smoke_spread/smoke = new
smoke.set_up(1,0, src.loc, 0) smoke.set_up(1,0, src.loc, 0)
smoke.start() smoke.start()
del(src) qdel(src) // NOT qdel.
obj/machinery/atmospherics/pipe/zpipe/proc/normalize_dir() obj/machinery/atmospherics/pipe/zpipe/proc/normalize_dir()
if(dir==3) if(dir==3)
@@ -88,7 +88,7 @@ obj/machinery/atmospherics/pipe/zpipe/proc/normalize_dir()
else if(dir==12) else if(dir==12)
set_dir(4) set_dir(4)
obj/machinery/atmospherics/pipe/zpipe/Del() obj/machinery/atmospherics/pipe/zpipe/Destroy()
if(node1) if(node1)
node1.disconnect(src) node1.disconnect(src)
if(node2) if(node2)
@@ -104,12 +104,12 @@ obj/machinery/atmospherics/pipe/zpipe/update_icon()
obj/machinery/atmospherics/pipe/zpipe/disconnect(obj/machinery/atmospherics/reference) obj/machinery/atmospherics/pipe/zpipe/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1) if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe)) if(istype(node1, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node1 = null node1 = null
if(reference == node2) if(reference == node2)
if(istype(node2, /obj/machinery/atmospherics/pipe)) if(istype(node2, /obj/machinery/atmospherics/pipe))
del(parent) qdel(parent)
node2 = null node2 = null
return null return null

View File

@@ -41,18 +41,18 @@
switch(severity) switch(severity)
if(1.0) if(1.0)
if(icon_state == "ladderup" && prob(10)) if(icon_state == "ladderup" && prob(10))
Del() qdel(src)
if(2.0) if(2.0)
if(prob(50)) if(prob(50))
Del() qdel(src)
if(3.0) if(3.0)
Del() qdel(src)
return*/ return*/
Del() Destroy()
spawn(1) spawn(1)
if(target && icon_state == "ladderdown") if(target && icon_state == "ladderdown")
del target qdel(target)
return ..() return ..()
attackby(obj/item/C as obj, mob/user as mob) attackby(obj/item/C as obj, mob/user as mob)
@@ -78,7 +78,7 @@
if(!blocked && !istype(below, /turf/simulated/wall)) if(!blocked && !istype(below, /turf/simulated/wall))
var/obj/multiz/ladder/X = new /obj/multiz/ladder(below) var/obj/multiz/ladder/X = new /obj/multiz/ladder(below)
S.amount = S.amount - 2 S.amount = S.amount - 2
if(S.amount == 0) S.Del() if(S.amount == 0) qdel(S)
X.icon_state = "ladderup" X.icon_state = "ladderup"
connect() connect()
user << "You finish the ladder." user << "You finish the ladder."
@@ -99,7 +99,7 @@
if(target) if(target)
var/obj/item/stack/rods/R = new /obj/item/stack/rods(target.loc) var/obj/item/stack/rods/R = new /obj/item/stack/rods(target.loc)
R.amount = 2 R.amount = 2
target.Del() qdel(Target)
user << "<span class='notice'>You remove the bolts anchoring the ladder.</span>" user << "<span class='notice'>You remove the bolts anchoring the ladder.</span>"
return return
@@ -117,7 +117,7 @@
var/obj/item/stack/sheet/metal/S = new /obj/item/stack/sheet/metal( src ) var/obj/item/stack/sheet/metal/S = new /obj/item/stack/sheet/metal( src )
S.amount = 2 S.amount = 2
user << "<span class='notice'>You remove the ladder and close the hole.</span>" user << "<span class='notice'>You remove the ladder and close the hole.</span>"
Del() qdel(src)
else else
user << "<span class='notice'>You need more welding fuel to complete this task.</span>" user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
return return
@@ -167,7 +167,7 @@
attack_hand(var/mob/M) attack_hand(var/mob/M)
if(!target || !istype(target.loc, /turf)) if(!target || !istype(target.loc, /turf))
del src qdel(src)
if(active) if(active)
M << "That [src] is being used." M << "That [src] is being used."
@@ -185,7 +185,7 @@
spawn(7) spawn(7)
if(!target || !istype(target.loc, /turf)) if(!target || !istype(target.loc, /turf))
del src qdel(src)
if(M.z == z && get_dist(src,M) <= 1) if(M.z == z && get_dist(src,M) <= 1)
var/list/adjacent_to_me = global_adjacent_z_levels["[z]"] 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.") 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.")

View File

@@ -120,7 +120,7 @@
var/obj/item/stack/tile/plasteel/S = C var/obj/item/stack/tile/plasteel/S = C
if (S.get_amount() < 1) if (S.get_amount() < 1)
return return
del(L) qdel(L)
playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1) playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
S.build(src) S.build(src)
S.use(1) S.use(1)

View File

@@ -28,9 +28,9 @@
initialized = 1 initialized = 1
return 1 return 1
/obj/effect/landmark/zcontroller/Del() /obj/effect/landmark/zcontroller/Destroy()
processing_objects.Remove(src) processing_objects.Remove(src)
return return ..()
/obj/effect/landmark/zcontroller/process() /obj/effect/landmark/zcontroller/process()
if (world.time > fast_time) if (world.time > fast_time)

View File

@@ -162,7 +162,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
..() ..()
if(!istype(loc, /turf)) if(!istype(loc, /turf))
del src qdel(src)
set_dir(pick(cardinal)) set_dir(pick(cardinal))
SetLuminosity(3) SetLuminosity(3)
@@ -170,7 +170,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
air_master.active_hotspots.Add(src) air_master.active_hotspots.Add(src)
/obj/fire/Del() /obj/fire/Destroy()
if (istype(loc, /turf/simulated)) if (istype(loc, /turf/simulated))
RemoveFire() RemoveFire()
@@ -278,8 +278,8 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
zone.fuel_objs -= fuel zone.fuel_objs -= fuel
if(liquidonly) if(liquidonly)
var/turf/T = fuel.loc var/turf/T = fuel.loc
if(istype(T) && T.fire) del(T.fire) if(istype(T) && T.fire) qdel(T.fire)
del(fuel) qdel(fuel)
//calculate the energy produced by the reaction and then set the new temperature of the mix //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() temperature = (starting_energy + vsc.fire_fuel_energy_release * used_fuel) / heat_capacity()

View File

@@ -102,7 +102,7 @@
//This happens when windows move or are constructed. We need to rebuild. //This happens when windows move or are constructed. We need to rebuild.
if((previously_open & d) && istype(unsim, /turf/simulated)) if((previously_open & d) && istype(unsim, /turf/simulated))
var/turf/simulated/sim = unsim var/turf/simulated/sim = unsim
if(sim.zone == zone) if(zone && sim.zone == zone)
zone.rebuild() zone.rebuild()
return return

View File

@@ -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

View File

@@ -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

View File

@@ -18,9 +18,9 @@
/proc/get_area(O) /proc/get_area(O)
var/turf/loc = get_turf(O) var/turf/loc = get_turf(O)
if(!loc) if(loc)
return null var/area/res = loc.loc
return loc.loc .= res.master
/proc/get_area_name(N) //get area by its name /proc/get_area_name(N) //get area by its name
for(var/area/A in world) for(var/area/A in world)

View File

@@ -226,6 +226,31 @@
/proc/capitalize(var/t as text) /proc/capitalize(var/t as text)
return uppertext(copytext(t, 1, 2)) + copytext(t, 2) return uppertext(copytext(t, 1, 2)) + copytext(t, 2)
//This proc strips html properly, remove < > and all text between
//for complete text sanitizing should be used sanitize()
/proc/strip_html_properly(var/input)
if(!input)
return
var/opentag = 1 //These store the position of < and > respectively.
var/closetag = 1
while(1)
opentag = findtext(input, "<")
closetag = findtext(input, ">")
if(closetag && opentag)
if(closetag < opentag)
input = copytext(input, (closetag + 1))
else
input = copytext(input, 1, opentag) + copytext(input, (closetag + 1))
else if(closetag || opentag)
if(opentag)
input = copytext(input, 1, opentag)
else
input = copytext(input, (closetag + 1))
else
break
return input
//This proc fills in all spaces with the "replace" var (* by default) with whatever //This proc fills in all spaces with the "replace" var (* by default) with whatever
//is in the other string at the same spot (assuming it is not a replace char). //is in the other string at the same spot (assuming it is not a replace char).
//This is used for fingerprints //This is used for fingerprints
@@ -274,7 +299,11 @@ proc/TextPreview(var/string,var/len=40)
else else
return string return string
else else
return "[copytext(string, 1, 37)]..." return "[copytext_preserve_html(string, 1, 37)]..."
//alternative copytext() for encoded text, doesn't break html entities (&#34; and other)
/proc/copytext_preserve_html(var/text, var/first, var/last)
return html_encode(copytext(html_decode(text), first, last))
//For generating neat chat tag-images //For generating neat chat tag-images
//The icon var could be local in the proc, but it's a waste of resources //The icon var could be local in the proc, but it's a waste of resources

View File

@@ -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 animation.master = target
flick(flick_anim, animation) flick(flick_anim, animation)
sleep(max(sleeptime, 15)) sleep(max(sleeptime, 15))
del(animation) qdel(animation)
//Will return the contents of an atom recursivly to a depth of 'searchDepth' //Will return the contents of an atom recursivly to a depth of 'searchDepth'
/atom/proc/GetAllContents(searchDepth = 5) /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 = 'icons/turf/shuttle.dmi'
X.icon_state = replacetext(O.icon_state, "_f", "_s") // revert the turf to the old icon_state X.icon_state = replacetext(O.icon_state, "_f", "_s") // revert the turf to the old icon_state
X.name = "wall" X.name = "wall"
del(O) // prevents multiple shuttle corners from stacking qdel(O) // prevents multiple shuttle corners from stacking
continue continue
if(!istype(O,/obj)) continue if(!istype(O,/obj)) continue
O.loc = X O.loc = X

View File

@@ -14,6 +14,9 @@
var/obj/master = null //A reference to the object in the slot. Grabs or items, generally. var/obj/master = null //A reference to the object in the slot. Grabs or items, generally.
var/gun_click_time = -100 //I'm lazy. var/gun_click_time = -100 //I'm lazy.
/obj/screen/Destroy()
master = null
..()
/obj/screen/text /obj/screen/text
icon = null icon = null

View File

@@ -20,7 +20,7 @@
return // seems legit. return // seems legit.
// Things you might plausibly want to follow // 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) ManualFollow(A)
// Otherwise jump // Otherwise jump

View File

@@ -253,7 +253,7 @@
See the previous More info, for... more info... See the previous More info, for... more info...
*/ */
//del(D) //qdel(D)
// Garbage Collect Dummy // Garbage Collect Dummy
D.loc = null D.loc = null
D = null D = null

View File

@@ -80,14 +80,14 @@ var/const/tk_maxrange = 15
if(focus.Adjacent(loc)) if(focus.Adjacent(loc))
focus.loc = loc focus.loc = loc
del(src) qdel(src)
return return
//stops TK grabs being equipped anywhere but into hands //stops TK grabs being equipped anywhere but into hands
equipped(var/mob/user, var/slot) equipped(var/mob/user, var/slot)
if( (slot == slot_l_hand) || (slot== slot_r_hand) ) return if( (slot == slot_l_hand) || (slot== slot_r_hand) ) return
del(src) qdel(src)
return return
@@ -99,10 +99,10 @@ var/const/tk_maxrange = 15
if(!target || !user) return if(!target || !user) return
if(last_throw+3 > world.time) return if(last_throw+3 > world.time) return
if(!host || host != user) if(!host || host != user)
del(src) qdel(src)
return return
if(!(TK in host.mutations)) if(!(TK in host.mutations))
del(src) qdel(src)
return return
if(isobj(target) && !isturf(target.loc)) if(isobj(target) && !isturf(target.loc))
return return
@@ -152,7 +152,7 @@ var/const/tk_maxrange = 15
proc/focus_object(var/obj/target, var/mob/living/user) 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(!istype(target,/obj)) return//Cant throw non objects atm might let it do mobs later
if(target.anchored || !isturf(target.loc)) if(target.anchored || !isturf(target.loc))
del src qdel(src)
return return
focus = target focus = target
update_icon() update_icon()
@@ -162,7 +162,7 @@ var/const/tk_maxrange = 15
proc/apply_focus_overlay() proc/apply_focus_overlay()
if(!focus) return 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.name = "sparkles"
O.anchored = 1 O.anchored = 1
O.density = 0 O.density = 0
@@ -172,7 +172,7 @@ var/const/tk_maxrange = 15
O.icon_state = "nothing" O.icon_state = "nothing"
flick("empdisable",O) flick("empdisable",O)
spawn(5) spawn(5)
O.delete() qdel(O)
return return

View File

@@ -184,8 +184,7 @@ datum/controller/process/proc/kill()
killed = TRUE killed = TRUE
// This should del del(src) // This should del
del(src)
datum/controller/process/proc/scheck(var/tickId = 0) datum/controller/process/proc/scheck(var/tickId = 0)
if (killed) if (killed)
@@ -315,3 +314,9 @@ datum/controller/process/proc/enable()
/datum/controller/process/proc/getTicks() /datum/controller/process/proc/getTicks()
return ticks return ticks
/datum/controller/process/proc/getStatName()
return name
/datum/controller/process/proc/getTickTime()
return "#[getTicks()]\t- [getLastRunTime()]"

View File

@@ -4,3 +4,7 @@
/datum/controller/process/alarm/doWork() /datum/controller/process/alarm/doWork()
alarm_manager.fire() alarm_manager.fire()
/datum/controller/process/alarm/getStatName()
var/list/alarms = alarm_manager.active_alarms()
return ..()+"([alarms.len])"

View File

@@ -9,3 +9,6 @@
/datum/controller/process/disease/doWork() /datum/controller/process/disease/doWork()
updateQueueInstance.init(active_diseases, "process") updateQueueInstance.init(active_diseases, "process")
updateQueueInstance.Run() updateQueueInstance.Run()
/datum/controller/process/disease/getStatName()
return ..()+"([active_diseases.len])"

View File

@@ -1,12 +1,14 @@
var/datum/controller/process/garbage_collector/garbage_collector var/datum/controller/process/garbage_collector/garbage_collector
var/list/delayed_garbage = list()
// #define GC_DEBUG 1
/datum/controller/process/garbage_collector /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/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_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 SS tick. 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 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() // 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 // 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() /datum/controller/process/garbage_collector/setup()
name = "garbage" name = "garbage"
schedule_interval = 60 // every 6 seconds schedule_interval = 6 SECONDS
if(!garbage_collector) if(!garbage_collector)
garbage_collector = src garbage_collector = src
/datum/controller/process/garbage_collector/doWork() for(var/garbage in delayed_garbage)
dels = 0 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/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/checkRemain = max_checks_multiplier * schedule_interval
var/maxDels = max_forcedel_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) while(destroyed.len && --checkRemain >= 0)
if(dels >= maxDels) if(dels >= maxDels)
#ifdef GC_DEBUG #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 #endif
break // Server's already pretty pounded, everything else can wait 2 seconds break // Server's already pretty pounded, everything else can wait 2 seconds
var/refID = destroyed[1] var/refID = destroyed[1]
var/GCd_at_time = destroyed[refID] var/GCd_at_time = destroyed[refID]
if(GCd_at_time > time_to_kill) if(GCd_at_time > time_to_kill)
#ifdef GC_DEBUG #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 #endif
break // Everything else is newer, skip them break // Everything else is newer, skip them
var/atom/A = locate(refID) var/atom/A = locate(refID)
#ifdef GC_DEBUG #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]") testing("GC: [refID] old enough to test: GCd_at_time: [GCd_at_time] time_to_kill: [time_to_kill] current: [world.time]")
#endif #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. // 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 --") testing("GC: -- \ref[A] | [A.type] was unable to be GC'd and was deleted --")
logging["[A.type]"]++ logging["[A.type]"]++
del(A) del(A)
++dels ++dels
++hard_dels
#ifdef GC_DEBUG #ifdef GC_DEBUG
else else
testing("GC: [refID] properly GC'd at [world.time] with timeout [GCd_at_time]") testing("GC: [refID] properly GC'd at [world.time] with timeout [GCd_at_time]")
#endif #endif
destroyed.Cut(1, 2) destroyed.Cut(1, 2)
scheck()
/datum/controller/process/garbage_collector/proc/AddTrash(datum/A) /datum/controller/process/garbage_collector/proc/AddTrash(datum/A)
if(!istype(A) || !isnull(A.gc_destroyed)) if(!istype(A) || !isnull(A.gcDestroyed))
return return
#ifdef GC_DEBUG #ifdef GC_DEBUG
testing("GC: AddTrash([A.type])") testing("GC: AddTrash(\ref[A] - [A.type])")
#endif #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]" // 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 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. // 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. // 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) /proc/qdel(var/datum/A)
if(!A) if(!A)
return return
if(istype(A, /list))
var/list/L = A
for(var/E in L)
qdel(E)
return
if(!istype(A)) if(!istype(A))
//warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.") //warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.")
del(A) del(A)
garbage_collector.dels++ garbage_collector.dels++
else if(isnull(A.gc_destroyed)) garbage_collector.hard_dels++
// Let our friend know they're about to get fucked up. else if(isnull(A.gcDestroyed))
// Let our friend know they're about to get collected
. = !A.Destroy() . = !A.Destroy()
if(. && A) if(. && A)
A.finalize_qdel() A.finalize_qdel()
/datum/proc/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) del(src)
/turf/finalize_qdel() /turf/finalize_qdel()
garbage_collector.AddTrash(src) del(src)
// Default implementation of clean-up code. // Default implementation of clean-up code.
// This should be overridden to remove all references pointing to the object being destroyed. // 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.) // Return true if the the GC controller should allow the object to continue existing. (Useful if pooling objects.)
/datum/proc/Destroy() /datum/proc/Destroy()
tag = null
return return
/datum/var/gc_destroyed //Time when this object was destroyed.
#ifdef TESTING #ifdef TESTING
/client/var/running_find_references /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() /atom/verb/find_references()
set category = "Debug" set category = "Debug"
set name = "Find References" set name = "Find References"
@@ -119,8 +165,8 @@ var/datum/controller/process/garbage_collector/garbage_collector
return return
// Remove this object from the list of things to be auto-deleted. // Remove this object from the list of things to be auto-deleted.
if(garbage) if(garbage_collector)
garbage.destroyed -= "\ref[src]" garbage_collector.destroyed -= "\ref[src]"
usr.client.running_find_references = type usr.client.running_find_references = type
testing("Beginning search for references to a [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() /client/verb/purge_all_destroyed_objects()
set category = "Debug" set category = "Debug"
if(garbage) if(garbage_collector)
while(garbage.destroyed.len) while(garbage_collector.destroyed.len)
var/datum/o = locate(garbage.destroyed[1]) var/datum/o = locate(garbage_collector.destroyed[1])
if(istype(o) && o.gc_destroyed) if(istype(o) && o.gcDestroyed)
del(o) del(o)
garbage.dels++ garbage_collector.dels++
garbage.destroyed.Cut(1, 2) garbage_collector.destroyed.Cut(1, 2)
#endif #endif
#ifdef GC_DEBUG #ifdef GC_DEBUG

View File

@@ -9,7 +9,7 @@
if(!istype(C.mob, /mob/dead)) if(!istype(C.mob, /mob/dead))
log_access("AFK: [key_name(C)]") log_access("AFK: [key_name(C)]")
C << "<SPAN CLASS='warning'>You have been inactive for more than 10 minutes and have been disconnected.</SPAN>" C << "<SPAN CLASS='warning'>You have been inactive for more than 10 minutes and have been disconnected.</SPAN>"
del(C) del(C) // Don't qdel, cannot override finalize_qdel behaviour for clients.
scheck() scheck()

View File

@@ -42,3 +42,7 @@
#endif #endif
scheck() scheck()
/datum/controller/process/machinery/getStatName()
return ..()+"([machines.len])"

View File

@@ -18,3 +18,6 @@
if(updateQueueInstance) if(updateQueueInstance)
updateQueueInstance.init(mob_list, "Life") updateQueueInstance.init(mob_list, "Life")
updateQueueInstance.Run() updateQueueInstance.Run()
/datum/controller/process/mob/getStatName()
return ..()+"([mob_list.len])"

View File

@@ -9,3 +9,6 @@
/datum/controller/process/nanoui/doWork() /datum/controller/process/nanoui/doWork()
updateQueueInstance.init(nanomanager.processing_uis, "process") updateQueueInstance.init(nanomanager.processing_uis, "process")
updateQueueInstance.Run() updateQueueInstance.Run()
/datum/controller/process/nanoui/getStatName()
return ..()+"([nanomanager.processing_uis.len])"

View File

@@ -19,3 +19,6 @@ var/global/list/object_profiling = list()
if(updateQueueInstance) if(updateQueueInstance)
updateQueueInstance.init(processing_objects, "process") updateQueueInstance.init(processing_objects, "process")
updateQueueInstance.Run() updateQueueInstance.Run()
/datum/controller/process/obj/getStatName()
return ..()+"([processing_objects.len])"

View File

@@ -10,3 +10,6 @@
continue continue
pipe_networks.Remove(pipeNetwork) pipe_networks.Remove(pipeNetwork)
/datum/controller/process/pipenet/getStatName()
return ..()+"([pipe_networks.len])"

View File

@@ -10,3 +10,6 @@
continue continue
powernets.Remove(powerNetwork) powernets.Remove(powerNetwork)
/datum/controller/process/powernet/getStatName()
return ..()+"([powernets.len])"

View File

@@ -161,15 +161,6 @@ atom/movable/New()
trueLuminosity = luminosity * luminosity trueLuminosity = luminosity * luminosity
light = new(src) 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. //Sets our luminosity.
//If we have no light it will create one. //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 //If we are setting luminosity to 0 the light will be cleaned up by the controller and garbage collected once all its

View File

@@ -7,7 +7,7 @@ datum/controller/transfer_controller/New()
timerbuffer = config.vote_autotransfer_initial timerbuffer = config.vote_autotransfer_initial
processing_objects += src processing_objects += src
datum/controller/transfer_controller/Del() datum/controller/transfer_controller/Destroy()
processing_objects -= src processing_objects -= src
datum/controller/transfer_controller/proc/process() datum/controller/transfer_controller/proc/process()

View File

@@ -223,7 +223,7 @@ var/global/datum/controller/radio/radio_controller
frequency.remove_listener(device) frequency.remove_listener(device)
if(frequency.devices.len == 0) if(frequency.devices.len == 0)
del(frequency) qdel(frequency)
frequencies -= f_text frequencies -= f_text
return 1 return 1
@@ -248,7 +248,7 @@ var/global/datum/controller/radio/radio_controller
if(range) if(range)
start_point = get_turf(source) start_point = get_turf(source)
if(!start_point) if(!start_point)
del(signal) qdel(signal)
return 0 return 0
if (filter) if (filter)
send_to_filter(source, signal, filter, start_point, range) send_to_filter(source, signal, filter, start_point, range)
@@ -297,7 +297,7 @@ var/global/datum/controller/radio/radio_controller
devices_line -= null devices_line -= null
if (devices_line.len==0) if (devices_line.len==0)
devices -= devices_filter devices -= devices_filter
del(devices_line) qdel(devices_line)
/datum/signal /datum/signal
var/obj/source var/obj/source

View File

@@ -242,8 +242,8 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
sleep(speed) sleep(speed)
step(src, direction) step(src, direction)
for(var/obj/effect/starender/E in loc) for(var/obj/effect/starender/E in loc)
del(src) qdel(src)
return
/obj/effect/starender /obj/effect/starender
invisibility = 101 invisibility = 101

View File

@@ -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) //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(Failsafe != src)
if(istype(Failsafe)) if(istype(Failsafe))
del(Failsafe) qdel(Failsafe)
Failsafe = src Failsafe = src
Failsafe.process() Failsafe.process()

View File

@@ -22,7 +22,7 @@ datum/controller/lighting/New()
if(lighting_controller != src) if(lighting_controller != src)
if(istype(lighting_controller,/datum/controller/lighting)) 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 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 lighting_controller = src

View File

@@ -19,7 +19,7 @@ datum/controller/game_controller/New()
if(master_controller != src) if(master_controller != src)
log_debug("Rebuilding Master Controller") log_debug("Rebuilding Master Controller")
if(istype(master_controller)) if(istype(master_controller))
del(master_controller) qdel(master_controller)
master_controller = src master_controller = src
if(!job_master) if(!job_master)

View File

@@ -62,7 +62,7 @@
usr.client.debug_variables(antag) usr.client.debug_variables(antag)
message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.") message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.")
/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano")) /client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Ticker Process","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano"))
set category = "Debug" set category = "Debug"
set name = "Debug Controller" set name = "Debug Controller"
set desc = "Debug the various periodic loop controllers for the game (be careful!)" set desc = "Debug the various periodic loop controllers for the game (be careful!)"
@@ -78,6 +78,9 @@
if("Ticker") if("Ticker")
debug_variables(ticker) debug_variables(ticker)
feedback_add_details("admin_verb","DTicker") feedback_add_details("admin_verb","DTicker")
if("Ticker Process")
debug_variables(tickerProcess)
feedback_add_details("admin_verb","DTickerProcess")
if("Lighting") if("Lighting")
debug_variables(lighting_controller) debug_variables(lighting_controller)
feedback_add_details("admin_verb","DLighting") feedback_add_details("admin_verb","DLighting")

View File

@@ -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 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 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 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 ********************/ /******************** Robocop ********************/

View File

@@ -293,7 +293,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
preview_icon.Blend(eyes_s, ICON_OVERLAY) preview_icon.Blend(eyes_s, ICON_OVERLAY)
if(clothes_s) if(clothes_s)
preview_icon.Blend(clothes_s, ICON_OVERLAY) preview_icon.Blend(clothes_s, ICON_OVERLAY)
del(eyes_s) qdel(eyes_s)
del(clothes_s) qdel(clothes_s)
return preview_icon return preview_icon

View File

@@ -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 Diseases are referenced in a global list, so simply setting mob or obj vars
to null does not delete the object itself. Thank you. 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(D != src)
if(IsSame(D)) if(IsSame(D))
//error("Deleting [D.name] because it's the same as [src.name].") //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(holder == affected_mob)
if(affected_mob.stat != DEAD) //he's alive 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. /*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.status_flags &= ~(XENO_HOST)*/
affected_mob.viruses -= src //remove the datum from the list 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 return
@@ -193,6 +193,9 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
active_diseases += src active_diseases += src
initial_spread = spread initial_spread = spread
/datum/disease/Destroy()
active_diseases.Remove(src)
/datum/disease/proc/IsSame(var/datum/disease/D) /datum/disease/proc/IsSame(var/datum/disease/D)
if(istype(src, D.type)) if(istype(src, D.type))
return 1 return 1
@@ -200,8 +203,3 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
/datum/disease/proc/Copy(var/process = 0) /datum/disease/proc/Copy(var/process = 0)
return new type(process, src) return new type(process, src)
/*
/datum/disease/Del()
active_diseases.Remove(src)
*/

View File

@@ -71,7 +71,7 @@ var/list/advance_cures = list(
..(process, D) ..(process, D)
return return
/datum/disease/advance/Del() /datum/disease/advance/Destroy()
if(processing) if(processing)
for(var/datum/symptom/S in symptoms) for(var/datum/symptom/S in symptoms)
S.End(src) S.End(src)
@@ -109,7 +109,7 @@ var/list/advance_cures = list(
if(resistance && !(id in affected_mob.resistances)) if(resistance && !(id in affected_mob.resistances))
affected_mob.resistances[id] = id affected_mob.resistances[id] = id
affected_mob.viruses -= src //remove the datum from the list 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 return
// Returns the advance disease with a different reference memory. // Returns the advance disease with a different reference memory.

View File

@@ -113,7 +113,7 @@ Des: Removes all infection images from aliens and places an infection image on a
if (alien.client) if (alien.client)
for(var/image/I in alien.client.images) for(var/image/I in alien.client.images)
if(dd_hasprefix_case(I.icon_state, "infected")) if(dd_hasprefix_case(I.icon_state, "infected"))
del(I) qdel(I)
for (var/mob/living/carbon/alien/alien in player_list) for (var/mob/living/carbon/alien/alien in player_list)
if (alien.client) 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) for(var/image/I in alien.client.images)
if(I.loc == C) if(I.loc == C)
if(dd_hasprefix_case(I.icon_state, "infected")) if(dd_hasprefix_case(I.icon_state, "infected"))
del(I) qdel(I)
return return

View File

@@ -34,7 +34,7 @@
if(4) if(4)
if(!src.transformed) if(!src.transformed)
if ((!strain_data["name"]) || (!strain_data["UI"]) || (!strain_data["SE"])) if ((!strain_data["name"]) || (!strain_data["UI"]) || (!strain_data["SE"]))
del(affected_mob.virus) qdel(affected_mob.virus)
return return
//Save original dna for when the disease is cured. //Save original dna for when the disease is cured.
@@ -56,7 +56,7 @@
return return
/datum/disease/dnaspread/Del() /datum/disease/dnaspread/Destroy()
if ((original_dna["name"]) && (original_dna["UI"]) && (original_dna["SE"])) if ((original_dna["name"]) && (original_dna["UI"]) && (original_dna["SE"]))
var/list/newUI=original_dna["UI"] var/list/newUI=original_dna["UI"]
var/list/newSE=original_dna["SE"] var/list/newSE=original_dna["SE"]

View File

@@ -12,7 +12,7 @@
holder = atom holder = atom
if(!holder) //don't want this without a holder if(!holder) //don't want this without a holder
spawn spawn
del src qdel(src)
set_desc(steps.len) set_desc(steps.len)
return return
@@ -61,7 +61,7 @@
if(result) if(result)
new result(get_turf(holder)) new result(get_turf(holder))
spawn() spawn()
del holder qdel(holder)
return return
proc/set_desc(index as num) proc/set_desc(index as num)

View File

@@ -151,4 +151,8 @@ Data storage vars:
start() start()
return active() return active()
/datum/global_iterator/Destroy()
tag = null
arg_list.Cut()
stop()
//Do not call ..()

View File

@@ -49,7 +49,7 @@
//must succeed in most cases //must succeed in most cases
proc/setTeleatom(atom/movable/ateleatom) proc/setTeleatom(atom/movable/ateleatom)
if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon)) if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon))
del(ateleatom) qdel(ateleatom)
return 0 return 0
if(istype(ateleatom)) if(istype(ateleatom))
teleatom = ateleatom teleatom = ateleatom

View File

@@ -311,7 +311,7 @@ datum/mind
for(var/obj/item/weapon/implant/loyalty/I in H.contents) for(var/obj/item/weapon/implant/loyalty/I in H.contents)
for(var/obj/item/organ/external/organs in H.organs) for(var/obj/item/organ/external/organs in H.organs)
if(I in organs.implants) if(I in organs.implants)
I.Del() qdel(I)
break break
H << "<span class='notice'><font size =3><B>Your loyalty implant has been deactivated.</font></span>" H << "<span class='notice'><font size =3><B>Your loyalty implant has been deactivated.</font></span>"
log_admin("[key_name_admin(usr)] has de-loyalty implanted [current].") log_admin("[key_name_admin(usr)] has de-loyalty implanted [current].")
@@ -368,7 +368,7 @@ datum/mind
src = null src = null
m2h.inject(M) m2h.inject(M)
src = mobfinder.loc:mind src = mobfinder.loc:mind
del(mobfinder) qdel(mobfinder)
current.radiation -= 50 current.radiation -= 50
*/ */
else if (href_list["silicon"]) else if (href_list["silicon"])
@@ -445,10 +445,10 @@ datum/mind
var/list/L = current.get_contents() var/list/L = current.get_contents()
for (var/t in L) for (var/t in L)
if (istype(t, /obj/item/device/pda)) if (istype(t, /obj/item/device/pda))
if (t:uplink) del(t:uplink) if (t:uplink) qdel(t:uplink)
t:uplink = null t:uplink = null
else if (istype(t, /obj/item/device/radio)) else if (istype(t, /obj/item/device/radio))
if (t:traitorradio) del(t:traitorradio) if (t:traitorradio) qdel(t:traitorradio)
t:traitorradio = null t:traitorradio = null
t:traitor_frequency = 0.0 t:traitor_frequency = 0.0
else if (istype(t, /obj/item/weapon/SWF_uplink) || istype(t, /obj/item/weapon/syndicate_uplink)) 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.loc = current.loc
R.traitorradio = null R.traitorradio = null
R.traitor_frequency = 0.0 R.traitor_frequency = 0.0
del(t) qdel(t)
// remove wizards spells // remove wizards spells
//If there are more special powers that need removal, they can be procced into here./N //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() proc/take_uplink()
var/obj/item/device/uplink/hidden/H = find_syndicate_uplink() var/obj/item/device/uplink/hidden/H = find_syndicate_uplink()
if(H) if(H)
del(H) qdel(H)
// check whether this mind's mob has been brigged for the given duration // check whether this mind's mob has been brigged for the given duration

View File

@@ -24,7 +24,8 @@ var/list/modules = list( // global associative list
var/mneed = mods.inmodlist(type) // find if this type has modules defined var/mneed = mods.inmodlist(type) // find if this type has modules defined
if(!mneed) // not found in module list? 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 var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object
status = needed status = needed

View File

@@ -95,7 +95,7 @@
var/obj/result_obj = new result(container) var/obj/result_obj = new result(container)
for (var/obj/O in (container.contents-result_obj)) for (var/obj/O in (container.contents-result_obj))
O.reagents.trans_to(result_obj, O.reagents.total_volume) O.reagents.trans_to(result_obj, O.reagents.total_volume)
del(O) qdel(O)
container.reagents.clear_reagents() container.reagents.clear_reagents()
return result_obj return result_obj
@@ -110,7 +110,7 @@
O.reagents.del_reagent("nutriment") O.reagents.del_reagent("nutriment")
O.reagents.update_total() O.reagents.update_total()
O.reagents.trans_to(result_obj, O.reagents.total_volume) O.reagents.trans_to(result_obj, O.reagents.total_volume)
del(O) qdel(O)
container.reagents.clear_reagents() container.reagents.clear_reagents()
return result_obj return result_obj

View File

@@ -350,7 +350,7 @@
/obj/item/weapon/module/power_control/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) /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)) if (istype(W, /obj/item/device/multitool))
var/obj/item/weapon/circuitboard/ghettosmes/newcircuit = new/obj/item/weapon/circuitboard/ghettosmes(user.loc) var/obj/item/weapon/circuitboard/ghettosmes/newcircuit = new/obj/item/weapon/circuitboard/ghettosmes(user.loc)
del(src) qdel(src)
user.put_in_hands(newcircuit) user.put_in_hands(newcircuit)

View File

@@ -22,7 +22,7 @@
G.fields["photo_side"] = side G.fields["photo_side"] = side
data_core.general += G data_core.general += G
del(dummy) qdel(dummy)
return G return G
/proc/CreateSecurityRecord(var/name as text, var/id as text) /proc/CreateSecurityRecord(var/name as text, var/id as text)

View File

@@ -77,12 +77,12 @@ proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\
var/sd_alert/T = locate(tag) var/sd_alert/T = locate(tag)
if(T) if(T)
if(istype(T)) del(T) if(istype(T)) qdel(T)
else CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])") else CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])")
T = new(who, tag) T = new(who, tag)
if(duration) if(duration)
spawn(duration) spawn(duration)
if(T) del(T) if(T) qdel(T)
return return
T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags) T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags)
. = T.Response() . = T.Response()
@@ -93,7 +93,7 @@ sd_alert
response response
list/validation list/validation
Del() Destroy()
target << browse(null,"window=\ref[src]") target << browse(null,"window=\ref[src]")
..() ..()
@@ -164,5 +164,5 @@ sd_alert
else if(response in validation) validated = 1 else if(response in validation) validated = 1
else response=null else response=null
else validated = 1 else validated = 1
spawn(2) del(src) spawn(2) qdel(src)
return response return response

View File

@@ -199,7 +199,7 @@
for(var/datum/uplink_item/UI in H.purchase_log) for(var/datum/uplink_item/UI in H.purchase_log)
var/obj/I = new UI.path var/obj/I = new UI.path
refined_log.Add("[H.purchase_log[UI]]x\icon[I][UI.name]") refined_log.Add("[H.purchase_log[UI]]x\icon[I][UI.name]")
del(I) qdel(I)
purchases = english_list(refined_log, nothing_text = "") purchases = english_list(refined_log, nothing_text = "")
if(uplink_true) if(uplink_true)
text += " (used [TC_uses] TC)" text += " (used [TC_uses] TC)"
@@ -215,7 +215,7 @@
if(antag.current && antag.current.client) if(antag.current && antag.current.client)
for(var/image/I in antag.current.client.images) for(var/image/I in antag.current.client.images)
if(I.icon_state == antag_indicator) if(I.icon_state == antag_indicator)
del(I) qdel(I)
for(var/datum/mind/other_antag in current_antagonists) for(var/datum/mind/other_antag in current_antagonists)
if(other_antag.current) if(other_antag.current)
antag.current.client.images |= image('icons/mob/mob.dmi', loc = other_antag.current, icon_state = antag_indicator) 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) if(antag.current.client)
for(var/image/I in antag.current.client.images) for(var/image/I in antag.current.client.images)
if(I.icon_state == antag_indicator && I.loc == player.current) if(I.icon_state == antag_indicator && I.loc == player.current)
del(I) qdel(I)
if(player.current && player.current.client) if(player.current && player.current.client)
for(var/image/I in player.current.client.images) for(var/image/I in player.current.client.images)
if(I.icon_state == antag_indicator) if(I.icon_state == antag_indicator)
del(I) qdel(I)

View File

@@ -15,7 +15,7 @@
var/mob/holder = player.current var/mob/holder = player.current
player.current = new mob_path(get_turf(player.current)) player.current = new mob_path(get_turf(player.current))
player.transfer_to(player.current) player.transfer_to(player.current)
if(holder) del(holder) if(holder) qdel(holder)
player.original = player.current player.original = player.current
return player.current return player.current
@@ -30,7 +30,7 @@
for(var/obj/item/thing in player.contents) for(var/obj/item/thing in player.contents)
player.drop_from_inventory(thing) player.drop_from_inventory(thing)
if(thing.loc != player) if(thing.loc != player)
del(thing) qdel(thing)
return 1 return 1
if(flags & ANTAG_SET_APPEARANCE) if(flags & ANTAG_SET_APPEARANCE)

View File

@@ -32,7 +32,7 @@ var/datum/antagonist/highlander/highlanders
for (var/obj/item/I in player) for (var/obj/item/I in player)
if (istype(I, /obj/item/weapon/implant)) if (istype(I, /obj/item/weapon/implant))
continue 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/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) player.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(player), slot_l_ear)

View File

@@ -27,7 +27,7 @@ var/datum/antagonist/rogue_ai/malf
hacked_apcs |= apc hacked_apcs |= apc
/datum/antagonist/rogue_ai/proc/update_takeover_time() /datum/antagonist/rogue_ai/proc/update_takeover_time()
hack_time -= ((hacked_apcs.len/6)*tickerProcess.getLastTickerTimeDuration()) hack_time -= ((hacked_apcs.len/6)*2.0)
/datum/antagonist/rogue_ai/tick() /datum/antagonist/rogue_ai/tick()
if(revealed && hacked_apcs.len >= 3) if(revealed && hacked_apcs.len >= 3)
@@ -213,7 +213,7 @@ var/datum/antagonist/rogue_ai/malf
/client/proc/reactivate_camera) /client/proc/reactivate_camera)
current:laws = new /datum/ai_laws/nanotrasen current:laws = new /datum/ai_laws/nanotrasen
del(current:malf_picker) qdel(current:malf_picker)
current:show_laws() current:show_laws()
current.icon_state = "ai" current.icon_state = "ai"

View File

@@ -56,7 +56,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/air_doors_activated = 0 var/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/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
var/sound/forced_ambience = null var/sound/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*/ /*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*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
var/list/teleportlocs = list() var/list/teleportlocs = list()
@@ -808,6 +808,9 @@ area/space/atmosalert()
//Hallway //Hallway
/area/hallway/primary/
sound_env = 12 //hallway
/area/hallway/primary/fore /area/hallway/primary/fore
name = "\improper Fore Primary Hallway" name = "\improper Fore Primary Hallway"
icon_state = "hallF" icon_state = "hallF"

View File

@@ -3,6 +3,7 @@
/area/mine /area/mine
icon_state = "mining" icon_state = "mining"
music = 'sound/ambience/song_game.ogg' music = 'sound/ambience/song_game.ogg'
sound_env = 5 //stoneroom
/area/mine/explored /area/mine/explored
name = "Mine" name = "Mine"

View File

@@ -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) var/cur_loc = locate(start_loc.x+x,start_loc.y+y,start_loc.z)
if(clean) if(clean)
for(var/O in cur_loc) for(var/O in cur_loc)
del(O) qdel(O)
var/area/asteroid/artifactroom/A = new var/area/asteroid/artifactroom/A = new
if(name) if(name)

View File

@@ -22,6 +22,18 @@
//Detective Work, used for the duplicate data points kept in the scanners //Detective Work, used for the duplicate data points kept in the scanners
var/list/original_atom 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) /atom/proc/assume_air(datum/gas_mixture/giver)
return null return null
@@ -66,7 +78,6 @@
return flags & INSERT_CONTAINER return flags & INSERT_CONTAINER
*/ */
/atom/proc/meteorhit(obj/meteor as obj) /atom/proc/meteorhit(obj/meteor as obj)
return 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 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 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/Angle=round(Get_Angle(src,BeamTarget))
var/icon/I=new(icon,icon_state) var/icon/I=new(icon,icon_state)
I.Turn(Angle) I.Turn(Angle)
@@ -189,7 +200,7 @@ its easier to just keep the beam vertical.
X.pixel_y=Pixel_y 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. 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. //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 //All atoms
@@ -362,7 +373,7 @@ its easier to just keep the beam vertical.
//Cleaning up shit. //Cleaning up shit.
if(fingerprints && !fingerprints.len) if(fingerprints && !fingerprints.len)
del(fingerprints) qdel(fingerprints)
return return
@@ -419,7 +430,7 @@ its easier to just keep the beam vertical.
src.color = initial(src.color) //paint src.color = initial(src.color) //paint
src.germ_level = 0 src.germ_level = 0
if(istype(blood_DNA, /list)) if(istype(blood_DNA, /list))
del(blood_DNA) qdel(blood_DNA)
return 1 return 1

View File

@@ -14,6 +14,25 @@
var/moved_recently = 0 var/moved_recently = 0
var/mob/pulledby = null 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) /atom/movable/Bump(var/atom/A, yes)
if(src.throwing) if(src.throwing)
src.throw_impact(A) src.throw_impact(A)

View File

@@ -420,7 +420,7 @@
animation.master = src animation.master = src
flick("h2monkey", animation) flick("h2monkey", animation)
sleep(48) sleep(48)
del(animation) qdel(animation)
var/mob/living/carbon/monkey/O = null var/mob/living/carbon/monkey/O = null
@@ -447,7 +447,7 @@
for(var/obj/T in (M.contents-implants)) for(var/obj/T in (M.contents-implants))
del(T) qdel(T)
O.loc = M.loc O.loc = M.loc
@@ -469,7 +469,7 @@
I.loc = O I.loc = O
I.implanted = O I.implanted = O
// O.update_icon = 1 //queue a full icon update at next life() call // O.update_icon = 1 //queue a full icon update at next life() call
del(M) qdel(M)
return return
if (!isblockon(getblock(M.dna.struc_enzymes, MONKEYBLOCK,3),MONKEYBLOCK) && !istype(M, /mob/living/carbon/human)) if (!isblockon(getblock(M.dna.struc_enzymes, MONKEYBLOCK,3),MONKEYBLOCK) && !istype(M, /mob/living/carbon/human))
@@ -493,7 +493,7 @@
animation.master = src animation.master = src
flick("monkey2h", animation) flick("monkey2h", animation)
sleep(48) sleep(48)
del(animation) qdel(animation)
var/mob/living/carbon/human/O = new( src ) var/mob/living/carbon/human/O = new( src )
if(Mo.greaterform) if(Mo.greaterform)
@@ -519,7 +519,7 @@
M.viruses -= D M.viruses -= D
//for(var/obj/T in M) //for(var/obj/T in M)
// del(T) // qdel(T)
O.loc = M.loc O.loc = M.loc
@@ -553,7 +553,7 @@
I.loc = O I.loc = O
I.implanted = O I.implanted = O
// O.update_icon = 1 //queue a full icon update at next life() call // O.update_icon = 1 //queue a full icon update at next life() call
del(M) qdel(M)
return return
//////////////////////////////////////////////////////////// Monkey Block //////////////////////////////////////////////////////////// Monkey Block
if(M) if(M)

View File

@@ -144,7 +144,7 @@
return return
put_in(G.affecting) put_in(G.affecting)
src.add_fingerprint(user) src.add_fingerprint(user)
del(G) qdel(G)
return return
/obj/machinery/dna_scannernew/proc/put_in(var/mob/M) /obj/machinery/dna_scannernew/proc/put_in(var/mob/M)
@@ -187,7 +187,7 @@
ex_act(severity) ex_act(severity)
//Foreach goto(35) //Foreach goto(35)
//SN src = null //SN src = null
del(src) qdel(src)
return return
if(2.0) if(2.0)
if (prob(50)) if (prob(50))
@@ -196,7 +196,7 @@
ex_act(severity) ex_act(severity)
//Foreach goto(108) //Foreach goto(108)
//SN src = null //SN src = null
del(src) qdel(src)
return return
if(3.0) if(3.0)
if (prob(25)) if (prob(25))
@@ -205,7 +205,7 @@
ex_act(severity) ex_act(severity)
//Foreach goto(181) //Foreach goto(181)
//SN src = null //SN src = null
del(src) qdel(src)
return return
else else
return return
@@ -215,7 +215,7 @@
if(prob(75)) if(prob(75))
for(var/atom/movable/A as mob|obj in src) for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc A.loc = src.loc
del(src) qdel(src)
/obj/machinery/computer/scan_consolenew /obj/machinery/computer/scan_consolenew
name = "DNA Modifier Access Console" name = "DNA Modifier Access Console"
@@ -262,12 +262,12 @@
switch(severity) switch(severity)
if(1.0) if(1.0)
//SN src = null //SN src = null
del(src) qdel(src)
return return
if(2.0) if(2.0)
if (prob(50)) if (prob(50))
//SN src = null //SN src = null
del(src) qdel(src)
return return
else else
return return
@@ -275,7 +275,7 @@
/obj/machinery/computer/scan_consolenew/blob_act() /obj/machinery/computer/scan_consolenew/blob_act()
if(prob(75)) if(prob(75))
del(src) qdel(src)
/obj/machinery/computer/scan_consolenew/power_change() /obj/machinery/computer/scan_consolenew/power_change()
..() ..()

View File

@@ -33,7 +33,7 @@
animation.master = src animation.master = src
flick("h2monkey", animation) flick("h2monkey", animation)
sleep(48) sleep(48)
del(animation) qdel(animation)
var/mob/living/carbon/monkey/O = null var/mob/living/carbon/monkey/O = null
@@ -60,7 +60,7 @@
for(var/obj/T in (M.contents-implants)) for(var/obj/T in (M.contents-implants))
del(T) qdel(T)
O.loc = M.loc O.loc = M.loc
@@ -82,7 +82,7 @@
I.loc = O I.loc = O
I.implanted = O I.implanted = O
// O.update_icon = 1 //queue a full icon update at next life() call // O.update_icon = 1 //queue a full icon update at next life() call
del(M) qdel(M)
return return
/datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags) /datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags)
@@ -108,7 +108,7 @@
animation.master = src animation.master = src
flick("monkey2h", animation) flick("monkey2h", animation)
sleep(48) sleep(48)
del(animation) qdel(animation)
var/mob/living/carbon/human/O var/mob/living/carbon/human/O
if(Mo.greaterform) if(Mo.greaterform)
@@ -136,7 +136,7 @@
M.viruses -= D M.viruses -= D
//for(var/obj/T in M) //for(var/obj/T in M)
// del(T) // qdel(T)
O.loc = M.loc O.loc = M.loc
@@ -171,5 +171,5 @@
I.loc = O I.loc = O
I.implanted = O I.implanted = O
// O.update_icon = 1 //queue a full icon update at next life() call // O.update_icon = 1 //queue a full icon update at next life() call
del(M) qdel(M)
return return

View File

@@ -14,7 +14,7 @@
..(loc, h) ..(loc, h)
Del() Destroy()
blob_cores -= src blob_cores -= src
processing_objects.Remove(src) processing_objects.Remove(src)
..() ..()
@@ -24,7 +24,7 @@
update_icon() update_icon()
if(health <= 0) if(health <= 0)
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
del(src) qdel(src)
return return
return return

View File

@@ -12,7 +12,7 @@
update_icon() update_icon()
if(health <= 0) if(health <= 0)
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
del(src) qdel(src)
return return
return return
@@ -22,6 +22,11 @@
new/mob/living/simple_animal/hostile/blobspore(src.loc, src) new/mob/living/simple_animal/hostile/blobspore(src.loc, src)
return 1 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 /mob/living/simple_animal/hostile/blobspore
name = "blob" name = "blob"
@@ -58,9 +63,10 @@
..(loc) ..(loc)
return return
death() death()
..() qdel(src)
/mob/living/simple_animal/hostile/blobspore/Destroy()
if(factory) if(factory)
factory.spores -= src factory.spores -= src
factory = null
..() ..()
del(src)

View File

@@ -14,7 +14,7 @@
..(loc, h) ..(loc, h)
Del() Destroy()
blob_nodes -= src blob_nodes -= src
processing_objects.Remove(src) processing_objects.Remove(src)
..() ..()
@@ -24,7 +24,7 @@
update_icon() update_icon()
if(health <= 0) if(health <= 0)
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
del(src) qdel(src)
return return
return return

View File

@@ -14,7 +14,7 @@
update_icon() update_icon()
if(health <= 0) if(health <= 0)
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
del(src) qdel(src)
return return
return return

View File

@@ -31,7 +31,7 @@
return return
Del() Destroy()
blobs -= src blobs -= src
..() ..()
return return
@@ -110,7 +110,7 @@
B.loc = T B.loc = T
else else
T.blob_act()//If we cant move in hit the turf 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 for(var/atom/A in T)//Hit everything in the turf
A.blob_act() A.blob_act()
return 1 return 1
@@ -134,7 +134,7 @@
update_icon()//Needs to be updated with the types update_icon()//Needs to be updated with the types
if(health <= 0) if(health <= 0)
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
del(src) qdel(src)
return return
if(health <= 15) if(health <= 15)
icon_state = "blob_damaged" icon_state = "blob_damaged"
@@ -158,7 +158,7 @@
attackby(var/obj/item/weapon/W, var/mob/user) attackby(var/obj/item/weapon/W, var/mob/user)
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
src.visible_message("\red <B>The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]") src.visible_message("<span class='danger'>The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]</span>")
var/damage = 0 var/damage = 0
switch(W.damtype) switch(W.damtype)
if("fire") if("fire")
@@ -182,7 +182,7 @@
new/obj/effect/blob/factory(src.loc,src.health) new/obj/effect/blob/factory(src.loc,src.health)
if("Shield") if("Shield")
new/obj/effect/blob/shield(src.loc,src.health*2) new/obj/effect/blob/shield(src.loc,src.health*2)
del(src) qdel(src)
return return
//////////////////////////////****IDLE BLOB***///////////////////////////////////// //////////////////////////////****IDLE BLOB***/////////////////////////////////////
@@ -201,7 +201,7 @@
proc/update_idle() proc/update_idle()
if(health<=0) if(health<=0)
del(src) qdel(src)
return return
if(health<4) if(health<4)
icon_state = "blobc0" icon_state = "blobc0"
@@ -212,7 +212,7 @@
icon_state = "blobidle0" icon_state = "blobidle0"
Del() Destroy()
var/obj/effect/blob/B = new /obj/effect/blob( src.loc ) var/obj/effect/blob/B = new /obj/effect/blob( src.loc )
spawn(30) spawn(30)
B.Life() B.Life()

View File

@@ -385,7 +385,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
animation.master = src animation.master = src
flick("monkey2h", animation) flick("monkey2h", animation)
sleep(48) sleep(48)
del(animation) qdel(animation)
for(var/obj/item/W in src) for(var/obj/item/W in src)
C.drop_from_inventory(W) 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 O.real_name = chosen_dna.real_name
for(var/obj/T in C) for(var/obj/T in C)
del(T) qdel(T)
O.loc = C.loc 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) O.changeling_update_languages(changeling.absorbed_languages)
feedback_add_details("changeling_powers","LFT") feedback_add_details("changeling_powers","LFT")
del(C) qdel(C)
return 1 return 1

View File

@@ -155,7 +155,7 @@
if(istype(M, /mob/living/silicon/robot)) if(istype(M, /mob/living/silicon/robot))
var/mob/living/silicon/robot/Robot = M var/mob/living/silicon/robot/Robot = M
if(Robot.mmi) if(Robot.mmi)
del(Robot.mmi) qdel(Robot.mmi)
else else
for(var/obj/item/W in M) for(var/obj/item/W in M)
if(istype(W, /obj/item/weapon/implant)) if(istype(W, /obj/item/weapon/implant))

View File

@@ -32,11 +32,11 @@
else else
dust() 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(N.chained)
if(narsimage) if(narsimage)
del(narsimage) qdel(narsimage)
del(narglow) qdel(narglow)
return return
if((N.z == src.z)&&(get_dist(N,src) <= (N.consume_range+10)) && !(N in view(src))) if((N.z == src.z)&&(get_dist(N,src) <= (N.consume_range+10)) && !(N in view(src)))
if(!narsimage) //Create narsimage if(!narsimage) //Create narsimage
@@ -59,5 +59,5 @@
src << narglow src << narglow
else else
if(narsimage) if(narsimage)
del(narsimage) qdel(narsimage)
del(narglow) qdel(narglow)

View File

@@ -65,8 +65,11 @@
new /obj/structure/cult/tome(loc) new /obj/structure/cult/tome(loc)
qdel(src) qdel(src)
/obj/machinery/door/cultify() /obj/machinery/door/airlock/external/cultify()
new /obj/structure/mineral_door/wood(loc) new /obj/structure/mineral_door/wood(loc)
..()
/obj/machinery/door/cultify()
icon_state = "null" icon_state = "null"
density = 0 density = 0
c_animation = new /atom/movable/overlay(src.loc) c_animation = new /atom/movable/overlay(src.loc)
@@ -79,7 +82,7 @@
c_animation.icon_state = "breakdoor" c_animation.icon_state = "breakdoor"
flick("cultification",c_animation) flick("cultification",c_animation)
spawn(10) spawn(10)
del(c_animation) qdel(c_animation)
qdel(src) qdel(src)
/obj/machinery/door/firedoor/cultify() /obj/machinery/door/firedoor/cultify()
@@ -125,7 +128,7 @@
/obj/structure/mineral_door/wood/cultify() /obj/structure/mineral_door/wood/cultify()
return return
/obj/machinery/singularity/cultify() /obj/singularity/cultify()
var/dist = max((current_size - 2), 1) var/dist = max((current_size - 2), 1)
explosion(get_turf(src), dist, dist * 2, dist * 4) explosion(get_turf(src), dist, dist * 2, dist * 4)
qdel(src) qdel(src)

Some files were not shown because too many files have changed in this diff Show More