mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-15 04:32:14 +00:00
Updates the atom_pool, now datum_pool, to handle any datum object.
Makes the garbage collector similarly robust. Continues the whole Destroy/qdel porting.
This commit is contained in:
@@ -1,6 +1,11 @@
|
||||
// BEGIN_INTERNALS
|
||||
/*
|
||||
MAP_ICON_TYPE: 0
|
||||
AUTO_FILE_DIR: OFF
|
||||
*/
|
||||
// END_INTERNALS
|
||||
// BEGIN_INTERNALS
|
||||
/*
|
||||
LAST_COMPILE_TIME: 1429517930
|
||||
DIR: code code\controllers code\controllers\Processes code\game code\game\objects code\game\objects\effects code\modules code\modules\client code\modules\examine code\modules\examine\descriptions code\modules\mob
|
||||
AUTO_FILE_DIR: OFF
|
||||
MAP_ICON_TYPE: 0
|
||||
LAST_COMPILE_VERSION: 507.1283
|
||||
WINDOW: code\game\atoms.dm;code\game\atoms_movable.dm;code\modules\client\client procs.dm;code\game\objects\buckling.dm
|
||||
FILE: code\game\objects\buckling.dm
|
||||
*/
|
||||
// END_INTERNALS
|
||||
|
||||
@@ -44,15 +44,15 @@ obj/machinery/atmospherics/binary
|
||||
|
||||
return null
|
||||
|
||||
Del()
|
||||
Destroy()
|
||||
loc = null
|
||||
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
del(network1)
|
||||
qdel(network1)
|
||||
if(node2)
|
||||
node2.disconnect(src)
|
||||
del(network2)
|
||||
qdel(network2)
|
||||
|
||||
node1 = null
|
||||
node2 = null
|
||||
@@ -123,11 +123,11 @@ obj/machinery/atmospherics/binary
|
||||
|
||||
disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference==node1)
|
||||
del(network1)
|
||||
qdel(network1)
|
||||
node1 = null
|
||||
|
||||
else if(reference==node2)
|
||||
del(network2)
|
||||
qdel(network2)
|
||||
node2 = null
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -112,10 +112,10 @@
|
||||
else
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
del(network1)
|
||||
qdel(network1)
|
||||
if(node2)
|
||||
node2.disconnect(src)
|
||||
del(network2)
|
||||
qdel(network2)
|
||||
|
||||
node1 = null
|
||||
node2 = null
|
||||
|
||||
@@ -258,4 +258,4 @@
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -38,15 +38,15 @@
|
||||
if(WEST)
|
||||
initialize_directions = NORTH|SOUTH
|
||||
|
||||
Del()
|
||||
Destroy()
|
||||
loc = null
|
||||
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
del(network1)
|
||||
qdel(network1)
|
||||
if(node2)
|
||||
node2.disconnect(src)
|
||||
del(network2)
|
||||
qdel(network2)
|
||||
|
||||
node1 = null
|
||||
node2 = null
|
||||
@@ -110,10 +110,10 @@
|
||||
else
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
del(network1)
|
||||
qdel(network1)
|
||||
if(node2)
|
||||
node2.disconnect(src)
|
||||
del(network2)
|
||||
qdel(network2)
|
||||
|
||||
node1 = null
|
||||
node2 = null
|
||||
@@ -216,11 +216,11 @@
|
||||
|
||||
disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference==node1)
|
||||
del(network1)
|
||||
qdel(network1)
|
||||
node1 = null
|
||||
|
||||
else if(reference==node2)
|
||||
del(network2)
|
||||
qdel(network2)
|
||||
node2 = null
|
||||
|
||||
return null
|
||||
|
||||
@@ -235,4 +235,4 @@ Thus, the two variables affect pump operation are set in New():
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
for(var/datum/omni_port/P in ports)
|
||||
P.air.volume = ATMOS_DEFAULT_VOLUME_FILTER
|
||||
|
||||
/obj/machinery/atmospherics/omni/filter/Del()
|
||||
/obj/machinery/atmospherics/omni/filter/Destroy()
|
||||
input = null
|
||||
output = null
|
||||
filters.Cut()
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
for(var/datum/omni_port/P in ports)
|
||||
P.air.volume = ATMOS_DEFAULT_VOLUME_MIXER
|
||||
|
||||
/obj/machinery/atmospherics/omni/mixer/Del()
|
||||
/obj/machinery/atmospherics/omni/mixer/Destroy()
|
||||
inputs.Cut()
|
||||
output = null
|
||||
..()
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear a ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/atmospherics/omni/attack_hand(user as mob)
|
||||
if(..())
|
||||
@@ -231,13 +231,13 @@
|
||||
|
||||
return null
|
||||
|
||||
/obj/machinery/atmospherics/omni/Del()
|
||||
/obj/machinery/atmospherics/omni/Destroy()
|
||||
loc = null
|
||||
|
||||
for(var/datum/omni_port/P in ports)
|
||||
if(P.node)
|
||||
P.node.disconnect(src)
|
||||
del(P.network)
|
||||
qdel(P.network)
|
||||
P.node = null
|
||||
|
||||
..()
|
||||
@@ -292,7 +292,7 @@
|
||||
/obj/machinery/atmospherics/omni/disconnect(obj/machinery/atmospherics/reference)
|
||||
for(var/datum/omni_port/P in ports)
|
||||
if(reference == P.node)
|
||||
del(P.network)
|
||||
qdel(P.network)
|
||||
P.node = null
|
||||
P.update = 1
|
||||
break
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
return null
|
||||
|
||||
/obj/machinery/atmospherics/portables_connector/Del()
|
||||
/obj/machinery/atmospherics/portables_connector/Destroy()
|
||||
loc = null
|
||||
|
||||
if(connected_device)
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
if(node)
|
||||
node.disconnect(src)
|
||||
del(network)
|
||||
qdel(network)
|
||||
|
||||
node = null
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/portables_connector/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference==node)
|
||||
del(network)
|
||||
qdel(network)
|
||||
node = null
|
||||
|
||||
update_underlays()
|
||||
@@ -152,4 +152,4 @@
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/trinary/filter/attack_hand(user as mob) // -- TLE
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob)
|
||||
if(..())
|
||||
|
||||
@@ -52,18 +52,18 @@ obj/machinery/atmospherics/trinary
|
||||
|
||||
return null
|
||||
|
||||
Del()
|
||||
Destroy()
|
||||
loc = null
|
||||
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
del(network1)
|
||||
qdel(network1)
|
||||
if(node2)
|
||||
node2.disconnect(src)
|
||||
del(network2)
|
||||
qdel(network2)
|
||||
if(node3)
|
||||
node3.disconnect(src)
|
||||
del(network3)
|
||||
qdel(network3)
|
||||
|
||||
node1 = null
|
||||
node2 = null
|
||||
@@ -153,15 +153,15 @@ obj/machinery/atmospherics/trinary
|
||||
|
||||
disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference==node1)
|
||||
del(network1)
|
||||
qdel(network1)
|
||||
node1 = null
|
||||
|
||||
else if(reference==node2)
|
||||
del(network2)
|
||||
qdel(network2)
|
||||
node2 = null
|
||||
|
||||
else if(reference==node3)
|
||||
del(network3)
|
||||
qdel(network3)
|
||||
node3 = null
|
||||
|
||||
update_underlays()
|
||||
|
||||
@@ -101,18 +101,18 @@
|
||||
|
||||
return null
|
||||
|
||||
/obj/machinery/atmospherics/tvalve/Del()
|
||||
/obj/machinery/atmospherics/tvalve/Destroy()
|
||||
loc = null
|
||||
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
del(network_node1)
|
||||
qdel(network_node1)
|
||||
if(node2)
|
||||
node2.disconnect(src)
|
||||
del(network_node2)
|
||||
qdel(network_node2)
|
||||
if(node3)
|
||||
node3.disconnect(src)
|
||||
del(network_node3)
|
||||
qdel(network_node3)
|
||||
|
||||
node1 = null
|
||||
node2 = null
|
||||
@@ -128,9 +128,9 @@
|
||||
update_icon()
|
||||
|
||||
if(network_node1)
|
||||
del(network_node1)
|
||||
qdel(network_node1)
|
||||
if(network_node3)
|
||||
del(network_node3)
|
||||
qdel(network_node3)
|
||||
build_network()
|
||||
|
||||
if(network_node1&&network_node2)
|
||||
@@ -153,9 +153,9 @@
|
||||
update_icon()
|
||||
|
||||
if(network_node1)
|
||||
del(network_node1)
|
||||
qdel(network_node1)
|
||||
if(network_node2)
|
||||
del(network_node2)
|
||||
qdel(network_node2)
|
||||
build_network()
|
||||
|
||||
if(network_node1&&network_node3)
|
||||
@@ -262,15 +262,15 @@
|
||||
|
||||
/obj/machinery/atmospherics/tvalve/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference==node1)
|
||||
del(network_node1)
|
||||
qdel(network_node1)
|
||||
node1 = null
|
||||
|
||||
else if(reference==node2)
|
||||
del(network_node2)
|
||||
qdel(network_node2)
|
||||
node2 = null
|
||||
|
||||
else if(reference==node3)
|
||||
del(network_node3)
|
||||
qdel(network_node3)
|
||||
node2 = null
|
||||
|
||||
update_underlays()
|
||||
@@ -366,7 +366,7 @@
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/atmospherics/tvalve/mirrored
|
||||
icon_state = "map_tvalvem0"
|
||||
|
||||
@@ -86,4 +86,4 @@
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
@@ -28,12 +28,12 @@
|
||||
|
||||
return null
|
||||
|
||||
Del()
|
||||
Destroy()
|
||||
loc = null
|
||||
|
||||
if(node)
|
||||
node.disconnect(src)
|
||||
del(network)
|
||||
qdel(network)
|
||||
|
||||
node = null
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference==node)
|
||||
del(network)
|
||||
qdel(network)
|
||||
node = null
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -414,9 +414,9 @@
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/Del()
|
||||
/obj/machinery/atmospherics/unary/vent_pump/Destroy()
|
||||
if(initial_loc)
|
||||
initial_loc.air_vent_info -= id_tag
|
||||
initial_loc.air_vent_names -= id_tag
|
||||
|
||||
@@ -270,7 +270,7 @@
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user)
|
||||
if(..(user, 1))
|
||||
@@ -278,7 +278,7 @@
|
||||
else
|
||||
user << "You are too far away to read the gauge."
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/Del()
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/Destroy()
|
||||
if(initial_loc)
|
||||
initial_loc.air_scrub_info -= id_tag
|
||||
initial_loc.air_scrub_names -= id_tag
|
||||
|
||||
@@ -73,15 +73,15 @@
|
||||
|
||||
return null
|
||||
|
||||
/obj/machinery/atmospherics/valve/Del()
|
||||
/obj/machinery/atmospherics/valve/Destroy()
|
||||
loc = null
|
||||
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
del(network_node1)
|
||||
qdel(network_node1)
|
||||
if(node2)
|
||||
node2.disconnect(src)
|
||||
del(network_node2)
|
||||
qdel(network_node2)
|
||||
|
||||
node1 = null
|
||||
node2 = null
|
||||
@@ -113,9 +113,9 @@
|
||||
update_icon()
|
||||
|
||||
if(network_node1)
|
||||
del(network_node1)
|
||||
qdel(network_node1)
|
||||
if(network_node2)
|
||||
del(network_node2)
|
||||
qdel(network_node2)
|
||||
|
||||
build_network()
|
||||
|
||||
@@ -214,11 +214,11 @@
|
||||
|
||||
/obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference==node1)
|
||||
del(network_node1)
|
||||
qdel(network_node1)
|
||||
node1 = null
|
||||
|
||||
else if(reference==node2)
|
||||
del(network_node2)
|
||||
qdel(network_node2)
|
||||
node2 = null
|
||||
|
||||
update_underlays()
|
||||
@@ -310,7 +310,7 @@
|
||||
"\blue You have unfastened \the [src].", \
|
||||
"You hear ratchet.")
|
||||
new /obj/item/pipe(loc, make_from=src)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/atmospherics/valve/examine(mob/user)
|
||||
..()
|
||||
|
||||
@@ -31,7 +31,7 @@ datum/pipe_network
|
||||
//Notes: Assuming that members will add themselves to appropriate roster in network_expand()
|
||||
|
||||
if(!start_normal)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
start_normal.network_expand(src, reference)
|
||||
|
||||
@@ -40,7 +40,7 @@ datum/pipe_network
|
||||
if((normal_members.len>0)||(line_members.len>0))
|
||||
pipe_networks += src
|
||||
else
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
proc/merge(datum/pipe_network/giver)
|
||||
if(giver==src) return 0
|
||||
|
||||
@@ -9,13 +9,13 @@ datum/pipeline
|
||||
|
||||
var/alert_pressure = 0
|
||||
|
||||
Del()
|
||||
Destroy()
|
||||
if(network)
|
||||
del(network)
|
||||
qdel(network)
|
||||
|
||||
if(air && air.volume)
|
||||
temporarily_store_air()
|
||||
del(air)
|
||||
qdel(air)
|
||||
|
||||
..()
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging
|
||||
node2 = target
|
||||
break
|
||||
if(!node1 && !node2)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
update_icon()
|
||||
@@ -141,7 +141,7 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction
|
||||
break
|
||||
|
||||
if(!node1&&!node2)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -99,7 +99,7 @@ obj/machinery/atmospherics/mains_pipe
|
||||
for(var/obj/machinery/atmospherics/pipe/mains_component/node in nodes)
|
||||
node.disconnect()
|
||||
|
||||
Del()
|
||||
Destroy()
|
||||
disconnect()
|
||||
..()
|
||||
|
||||
@@ -152,7 +152,7 @@ obj/machinery/atmospherics/mains_pipe/simple
|
||||
|
||||
else
|
||||
if(!nodes[1]&&!nodes[2])
|
||||
del(src) //TODO: silent deleting looks weird
|
||||
qdel(src) //TODO: silent deleting looks weird
|
||||
var/have_node1 = nodes[1]?1:0
|
||||
var/have_node2 = nodes[2]?1:0
|
||||
icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/pipe/proc/check_pressure(pressure)
|
||||
//Return 1 if parent should continue checking other pipes
|
||||
//Return null if parent should stop checking other pipes. Recall: del(src) will by default return null
|
||||
//Return null if parent should stop checking other pipes. Recall: qdel(src) will by default return null
|
||||
|
||||
return 1
|
||||
|
||||
@@ -62,8 +62,8 @@
|
||||
|
||||
return parent.return_network(reference)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/Del()
|
||||
del(parent)
|
||||
/obj/machinery/atmospherics/pipe/Destroy()
|
||||
qdel(parent)
|
||||
if(air_temporary)
|
||||
loc.assume_air(air_temporary)
|
||||
|
||||
@@ -101,8 +101,8 @@
|
||||
for (var/obj/machinery/meter/meter in T)
|
||||
if (meter.target == src)
|
||||
new /obj/item/pipe_meter(T)
|
||||
del(meter)
|
||||
del(src)
|
||||
qdel(meter)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/atmospherics/proc/change_color(var/new_color)
|
||||
//only pass valid pipe colors please ~otherwise your pipe will turn invisible
|
||||
@@ -219,7 +219,7 @@
|
||||
var/datum/effect/effect/system/smoke_spread/smoke = new
|
||||
smoke.set_up(1,0, src.loc, 0)
|
||||
smoke.start()
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/proc/normalize_dir()
|
||||
if(dir==3)
|
||||
@@ -227,7 +227,7 @@
|
||||
else if(dir==12)
|
||||
set_dir(4)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/Del()
|
||||
/obj/machinery/atmospherics/pipe/simple/Destroy()
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
if(node2)
|
||||
@@ -260,8 +260,8 @@
|
||||
for (var/obj/machinery/meter/meter in T)
|
||||
if (meter.target == src)
|
||||
new /obj/item/pipe_meter(T)
|
||||
del(meter)
|
||||
del(src)
|
||||
qdel(meter)
|
||||
qdel(src)
|
||||
else if(node1 && node2)
|
||||
overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]")
|
||||
else
|
||||
@@ -294,7 +294,7 @@
|
||||
break
|
||||
|
||||
if(!node1 && !node2)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -305,12 +305,12 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node1 = null
|
||||
|
||||
if(reference == node2)
|
||||
if(istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node2 = null
|
||||
|
||||
update_icon()
|
||||
@@ -459,7 +459,7 @@
|
||||
else
|
||||
. = PROCESS_KILL
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/Del()
|
||||
/obj/machinery/atmospherics/pipe/manifold/Destroy()
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
if(node2)
|
||||
@@ -472,17 +472,17 @@
|
||||
/obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node1 = null
|
||||
|
||||
if(reference == node2)
|
||||
if(istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node2 = null
|
||||
|
||||
if(reference == node3)
|
||||
if(istype(node3, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node3 = null
|
||||
|
||||
update_icon()
|
||||
@@ -511,8 +511,8 @@
|
||||
for (var/obj/machinery/meter/meter in T)
|
||||
if (meter.target == src)
|
||||
new /obj/item/pipe_meter(T)
|
||||
del(meter)
|
||||
del(src)
|
||||
qdel(meter)
|
||||
qdel(src)
|
||||
else
|
||||
overlays.Cut()
|
||||
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)
|
||||
@@ -578,7 +578,7 @@
|
||||
break
|
||||
|
||||
if(!node1 && !node2 && !node3)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -701,7 +701,7 @@
|
||||
else
|
||||
. = PROCESS_KILL
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/Del()
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/Destroy()
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
if(node2)
|
||||
@@ -716,22 +716,22 @@
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node1 = null
|
||||
|
||||
if(reference == node2)
|
||||
if(istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node2 = null
|
||||
|
||||
if(reference == node3)
|
||||
if(istype(node3, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node3 = null
|
||||
|
||||
if(reference == node4)
|
||||
if(istype(node4, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node4 = null
|
||||
|
||||
update_icon()
|
||||
@@ -762,8 +762,8 @@
|
||||
for (var/obj/machinery/meter/meter in T)
|
||||
if (meter.target == src)
|
||||
new /obj/item/pipe_meter(T)
|
||||
del(meter)
|
||||
del(src)
|
||||
qdel(meter)
|
||||
qdel(src)
|
||||
else
|
||||
overlays.Cut()
|
||||
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)
|
||||
@@ -837,7 +837,7 @@
|
||||
break
|
||||
|
||||
if(!node1 && !node2 && !node3 && !node4)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -958,7 +958,7 @@
|
||||
..()
|
||||
else
|
||||
. = PROCESS_KILL
|
||||
/obj/machinery/atmospherics/pipe/cap/Del()
|
||||
/obj/machinery/atmospherics/pipe/cap/Destroy()
|
||||
if(node)
|
||||
node.disconnect(src)
|
||||
|
||||
@@ -967,7 +967,7 @@
|
||||
/obj/machinery/atmospherics/pipe/cap/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node)
|
||||
if(istype(node, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node = null
|
||||
|
||||
update_icon()
|
||||
@@ -1074,7 +1074,7 @@
|
||||
else
|
||||
. = PROCESS_KILL
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/Del()
|
||||
/obj/machinery/atmospherics/pipe/tank/Destroy()
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
|
||||
@@ -1108,7 +1108,7 @@
|
||||
/obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node1 = null
|
||||
|
||||
update_underlays()
|
||||
@@ -1258,7 +1258,7 @@
|
||||
else
|
||||
parent.mingle_with_turf(loc, volume)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/vent/Del()
|
||||
/obj/machinery/atmospherics/pipe/vent/Destroy()
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
|
||||
@@ -1290,7 +1290,7 @@
|
||||
/obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node1 = null
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -342,7 +342,7 @@ obj/machinery/atmospherics
|
||||
set src in world
|
||||
set category = "Minor"
|
||||
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
pipeline_data()
|
||||
set src in world
|
||||
@@ -487,7 +487,7 @@ obj/window
|
||||
destroy()
|
||||
set category = "Minor"
|
||||
set src in world
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
mob
|
||||
sight = SEE_OBJS|SEE_TURFS
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
return
|
||||
|
||||
/*
|
||||
/obj/effect/hotspot/Del()
|
||||
/obj/effect/hotspot/Destroy()
|
||||
if (istype(loc, /turf/simulated))
|
||||
DestroyTurf()
|
||||
..()
|
||||
|
||||
@@ -346,7 +346,7 @@ What are the archived variables for?
|
||||
trace_gases += corresponding
|
||||
corresponding.moles += trace_gas.moles*giver.group_multiplier/group_multiplier
|
||||
|
||||
// del(giver)
|
||||
// qdel(giver)
|
||||
return 1
|
||||
|
||||
remove(amount)
|
||||
|
||||
@@ -291,7 +291,7 @@ datum
|
||||
var/turf/simulated/T = turf
|
||||
T.parent = null
|
||||
turfs += T
|
||||
del(turf_AG)
|
||||
qdel(turf_AG)
|
||||
|
||||
for(var/turf/simulated/S in turfs) //Have old members try to form new groups
|
||||
if(!S.parent)
|
||||
@@ -306,7 +306,7 @@ datum
|
||||
for(var/obj/movable/floor/OM in object_AG.members)
|
||||
OM.parent = null
|
||||
movable_objects += OM
|
||||
del(object_AG)
|
||||
qdel(object_AG)
|
||||
|
||||
for(var/obj/movable/floor/OM in movable_objects) //Have old members try to form new groups
|
||||
if(!OM.parent)
|
||||
|
||||
@@ -14,7 +14,7 @@ atom/movable/proc/experience_pressure_difference(pressure_difference, direction)
|
||||
|
||||
turf
|
||||
assume_air(datum/gas_mixture/giver) //use this for machines to adjust air
|
||||
del(giver)
|
||||
qdel(giver)
|
||||
return 0
|
||||
|
||||
return_air()
|
||||
|
||||
@@ -80,7 +80,7 @@ obj/machinery/atmospherics/pipe/zpipe/proc/burst()
|
||||
var/datum/effect/effect/system/smoke_spread/smoke = new
|
||||
smoke.set_up(1,0, src.loc, 0)
|
||||
smoke.start()
|
||||
del(src)
|
||||
qdel(src) // NOT qdel.
|
||||
|
||||
obj/machinery/atmospherics/pipe/zpipe/proc/normalize_dir()
|
||||
if(dir==3)
|
||||
@@ -88,7 +88,7 @@ obj/machinery/atmospherics/pipe/zpipe/proc/normalize_dir()
|
||||
else if(dir==12)
|
||||
set_dir(4)
|
||||
|
||||
obj/machinery/atmospherics/pipe/zpipe/Del()
|
||||
obj/machinery/atmospherics/pipe/zpipe/Destroy()
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
if(node2)
|
||||
@@ -104,12 +104,12 @@ obj/machinery/atmospherics/pipe/zpipe/update_icon()
|
||||
obj/machinery/atmospherics/pipe/zpipe/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node1 = null
|
||||
|
||||
if(reference == node2)
|
||||
if(istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
qdel(parent)
|
||||
node2 = null
|
||||
|
||||
return null
|
||||
|
||||
@@ -41,18 +41,18 @@
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
if(icon_state == "ladderup" && prob(10))
|
||||
Del()
|
||||
qdel(src)
|
||||
if(2.0)
|
||||
if(prob(50))
|
||||
Del()
|
||||
qdel(src)
|
||||
if(3.0)
|
||||
Del()
|
||||
qdel(src)
|
||||
return*/
|
||||
|
||||
Del()
|
||||
Destroy()
|
||||
spawn(1)
|
||||
if(target && icon_state == "ladderdown")
|
||||
del target
|
||||
qdel(target)
|
||||
return ..()
|
||||
|
||||
attackby(obj/item/C as obj, mob/user as mob)
|
||||
@@ -78,7 +78,7 @@
|
||||
if(!blocked && !istype(below, /turf/simulated/wall))
|
||||
var/obj/multiz/ladder/X = new /obj/multiz/ladder(below)
|
||||
S.amount = S.amount - 2
|
||||
if(S.amount == 0) S.Del()
|
||||
if(S.amount == 0) qdel(S)
|
||||
X.icon_state = "ladderup"
|
||||
connect()
|
||||
user << "You finish the ladder."
|
||||
@@ -99,7 +99,7 @@
|
||||
if(target)
|
||||
var/obj/item/stack/rods/R = new /obj/item/stack/rods(target.loc)
|
||||
R.amount = 2
|
||||
target.Del()
|
||||
qdel(Target)
|
||||
|
||||
user << "<span class='notice'>You remove the bolts anchoring the ladder.</span>"
|
||||
return
|
||||
@@ -117,7 +117,7 @@
|
||||
var/obj/item/stack/sheet/metal/S = new /obj/item/stack/sheet/metal( src )
|
||||
S.amount = 2
|
||||
user << "<span class='notice'>You remove the ladder and close the hole.</span>"
|
||||
Del()
|
||||
qdel(src)
|
||||
else
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
@@ -167,7 +167,7 @@
|
||||
attack_hand(var/mob/M)
|
||||
|
||||
if(!target || !istype(target.loc, /turf))
|
||||
del src
|
||||
qdel(src)
|
||||
|
||||
if(active)
|
||||
M << "That [src] is being used."
|
||||
@@ -185,7 +185,7 @@
|
||||
|
||||
spawn(7)
|
||||
if(!target || !istype(target.loc, /turf))
|
||||
del src
|
||||
qdel(src)
|
||||
if(M.z == z && get_dist(src,M) <= 1)
|
||||
var/list/adjacent_to_me = global_adjacent_z_levels["[z]"]
|
||||
M.visible_message("\blue \The [M] scurries [target.z == adjacent_to_me["up"] ? "up" : "down"] \the [src]!", "You scramble [target.z == adjacent_to_me["up"] ? "up" : "down"] \the [src]!", "You hear some grunting, and a hatch sealing.")
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
var/obj/item/stack/tile/plasteel/S = C
|
||||
if (S.get_amount() < 1)
|
||||
return
|
||||
del(L)
|
||||
qdel(L)
|
||||
playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
|
||||
S.build(src)
|
||||
S.use(1)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
initialized = 1
|
||||
return 1
|
||||
|
||||
/obj/effect/landmark/zcontroller/Del()
|
||||
/obj/effect/landmark/zcontroller/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -78,11 +78,11 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
|
||||
fire = new(src, fl)
|
||||
air_master.active_fire_zones |= zone
|
||||
|
||||
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in src
|
||||
zone.fire_tiles |= src
|
||||
if(fuel) zone.fuel_objs += fuel
|
||||
|
||||
|
||||
return 0
|
||||
|
||||
/obj/fire
|
||||
@@ -162,7 +162,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
..()
|
||||
|
||||
if(!istype(loc, /turf))
|
||||
del src
|
||||
qdel(src)
|
||||
|
||||
set_dir(pick(cardinal))
|
||||
SetLuminosity(3)
|
||||
@@ -170,7 +170,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
air_master.active_hotspots.Add(src)
|
||||
|
||||
|
||||
/obj/fire/Del()
|
||||
/obj/fire/Destroy()
|
||||
if (istype(loc, /turf/simulated))
|
||||
RemoveFire()
|
||||
|
||||
@@ -179,7 +179,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
/obj/fire/proc/RemoveFire()
|
||||
if (istype(loc, /turf))
|
||||
SetLuminosity(0)
|
||||
|
||||
|
||||
loc = null
|
||||
air_master.active_hotspots.Remove(src)
|
||||
|
||||
@@ -227,22 +227,22 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
|
||||
//determine how far the reaction can progress
|
||||
var/reaction_limit = min(total_oxidizers*(FIRE_REACTION_FUEL_AMOUNT/FIRE_REACTION_OXIDIZER_AMOUNT), total_fuel) //stoichiometric limit
|
||||
|
||||
|
||||
//determine the actual rate of reaction, as measured by the amount of fuel reacting
|
||||
|
||||
|
||||
//vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn).
|
||||
var/gas_reaction_progress = max(0.2*group_multiplier, (firelevel/vsc.fire_firelevel_multiplier)*gas_fuel)*FIRE_GAS_BURNRATE_MULT
|
||||
//liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning (which is sort of accounted for by firelevel). Having more fuel means a longer burn.
|
||||
var/liquid_reaction_progress = (firelevel/vsc.fire_firelevel_multiplier)*FIRE_LIQUID_BURNRATE_MULT
|
||||
|
||||
|
||||
//world << "liquid_reaction_progress = [liquid_reaction_progress]"
|
||||
//world << "gas_reaction_progress = [gas_reaction_progress]"
|
||||
|
||||
|
||||
var/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress
|
||||
var/used_fuel = min(total_reaction_progress, reaction_limit)
|
||||
var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT)
|
||||
//world << "used_fuel = [used_fuel]; used_oxidizers = [used_oxidizers]; reaction_limit=[reaction_limit]"
|
||||
|
||||
|
||||
//if the reaction is progressing too slow then it isn't self-sustaining anymore and burns out
|
||||
if(zone && zone.fuel_objs.len)
|
||||
if(used_fuel <= FIRE_LIQUD_MIN_BURNRATE)
|
||||
@@ -250,13 +250,13 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
else if(used_fuel <= FIRE_GAS_MIN_BURNRATE*group_multiplier) //purely gas fires have more stringent criteria
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
//*** Remove fuel and oxidizer, add carbon dioxide and heat
|
||||
|
||||
|
||||
//remove and add gasses as calculated
|
||||
var/used_gas_fuel = min(used_fuel*(gas_reaction_progress/total_reaction_progress), gas_fuel) //remove in proportion to the relative reaction progress
|
||||
var/used_liquid_fuel = between(0, used_fuel-used_gas_fuel, liquid_fuel)
|
||||
|
||||
|
||||
//remove_by_flag() and adjust_gas() handle the group_multiplier for us.
|
||||
remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers)
|
||||
remove_by_flag(XGM_GAS_FUEL, used_gas_fuel)
|
||||
@@ -272,14 +272,14 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
if(!istype(fuel))
|
||||
zone.fuel_objs -= fuel
|
||||
continue
|
||||
|
||||
|
||||
fuel.amount -= fuel_to_remove
|
||||
if(fuel.amount <= 0)
|
||||
zone.fuel_objs -= fuel
|
||||
if(liquidonly)
|
||||
var/turf/T = fuel.loc
|
||||
if(istype(T) && T.fire) del(T.fire)
|
||||
del(fuel)
|
||||
if(istype(T) && T.fire) qdel(T.fire)
|
||||
qdel(fuel)
|
||||
|
||||
//calculate the energy produced by the reaction and then set the new temperature of the mix
|
||||
temperature = (starting_energy + vsc.fire_fuel_energy_release * used_fuel) / heat_capacity()
|
||||
|
||||
@@ -50,7 +50,7 @@ var/global/list/GlobalPool = list()
|
||||
var/datum/D = pick_n_take(GlobalPool[get_type])
|
||||
if(D)
|
||||
D.ResetVars()
|
||||
D.Prepare()
|
||||
D.Prepare(second_arg)
|
||||
return D
|
||||
return 0
|
||||
|
||||
@@ -60,9 +60,9 @@ var/global/list/GlobalPool = list()
|
||||
|
||||
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)
|
||||
world << text("DEBUG_DATUM_POOL: PlaceInPool([]) exceeds []. Discarding.", D.type, ATOM_POOL_COUNT)
|
||||
#endif
|
||||
qdel(D)
|
||||
del(D)
|
||||
return
|
||||
|
||||
if(D in GlobalPool[D.type])
|
||||
@@ -71,7 +71,7 @@ var/global/list/GlobalPool = list()
|
||||
if(!GlobalPool[D.type])
|
||||
GlobalPool[D.type] = list()
|
||||
|
||||
GlobalPool[D.type] |= D
|
||||
GlobalPool[D.type] += D
|
||||
|
||||
D.Destroy()
|
||||
D.ResetVars()
|
||||
@@ -86,7 +86,6 @@ var/global/list/GlobalPool = list()
|
||||
/atom/movable/Prepare(args)
|
||||
if(islist(args))
|
||||
loc = args[1]
|
||||
else
|
||||
loc = args
|
||||
..()
|
||||
|
||||
|
||||
@@ -631,7 +631,7 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl
|
||||
animation.master = target
|
||||
flick(flick_anim, animation)
|
||||
sleep(max(sleeptime, 15))
|
||||
del(animation)
|
||||
qdel(animation)
|
||||
|
||||
//Will return the contents of an atom recursivly to a depth of 'searchDepth'
|
||||
/atom/proc/GetAllContents(searchDepth = 5)
|
||||
@@ -902,7 +902,7 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl
|
||||
X.icon = 'icons/turf/shuttle.dmi'
|
||||
X.icon_state = replacetext(O.icon_state, "_f", "_s") // revert the turf to the old icon_state
|
||||
X.name = "wall"
|
||||
del(O) // prevents multiple shuttle corners from stacking
|
||||
qdel(O) // prevents multiple shuttle corners from stacking
|
||||
continue
|
||||
if(!istype(O,/obj)) continue
|
||||
O.loc = X
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
See the previous More info, for... more info...
|
||||
*/
|
||||
|
||||
//del(D)
|
||||
//qdel(D)
|
||||
// Garbage Collect Dummy
|
||||
D.loc = null
|
||||
D = null
|
||||
|
||||
@@ -80,14 +80,14 @@ var/const/tk_maxrange = 15
|
||||
if(focus.Adjacent(loc))
|
||||
focus.loc = loc
|
||||
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
//stops TK grabs being equipped anywhere but into hands
|
||||
equipped(var/mob/user, var/slot)
|
||||
if( (slot == slot_l_hand) || (slot== slot_r_hand) ) return
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -99,10 +99,10 @@ var/const/tk_maxrange = 15
|
||||
if(!target || !user) return
|
||||
if(last_throw+3 > world.time) return
|
||||
if(!host || host != user)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(!(TK in host.mutations))
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(isobj(target) && !isturf(target.loc))
|
||||
return
|
||||
@@ -152,7 +152,7 @@ var/const/tk_maxrange = 15
|
||||
proc/focus_object(var/obj/target, var/mob/living/user)
|
||||
if(!istype(target,/obj)) return//Cant throw non objects atm might let it do mobs later
|
||||
if(target.anchored || !isturf(target.loc))
|
||||
del src
|
||||
qdel(src)
|
||||
return
|
||||
focus = target
|
||||
update_icon()
|
||||
@@ -162,7 +162,7 @@ var/const/tk_maxrange = 15
|
||||
|
||||
proc/apply_focus_overlay()
|
||||
if(!focus) return
|
||||
var/obj/effect/overlay/O = new /obj/effect/overlay(locate(focus.x,focus.y,focus.z))
|
||||
var/obj/effect/overlay/O = PoolOrNew(/obj/effect/overlay, locate(focus.x,focus.y,focus.z))
|
||||
O.name = "sparkles"
|
||||
O.anchored = 1
|
||||
O.density = 0
|
||||
@@ -172,7 +172,7 @@ var/const/tk_maxrange = 15
|
||||
O.icon_state = "nothing"
|
||||
flick("empdisable",O)
|
||||
spawn(5)
|
||||
O.delete()
|
||||
qdel(O)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -184,8 +184,7 @@ datum/controller/process/proc/kill()
|
||||
|
||||
killed = TRUE
|
||||
|
||||
// This should del
|
||||
del(src)
|
||||
del(src) // This should del
|
||||
|
||||
datum/controller/process/proc/scheck(var/tickId = 0)
|
||||
if (killed)
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
var/datum/controller/process/garbage_collector/garbage_collector
|
||||
var/list/delayed_garbage = list()
|
||||
|
||||
// #define GC_DEBUG 1
|
||||
#define GC_DEBUG 1
|
||||
/datum/controller/process/garbage_collector
|
||||
var/garbage_collect = 1 // Whether or not to actually do work
|
||||
var/collection_timeout = 300 //deciseconds to wait to let running procs finish before we just say fuck it and force del() the object
|
||||
var/max_checks_multiplier = 5 //multiplier (per-decisecond) for calculating max number of tests per tick. These tests check if our GC'd objects are actually GC'd
|
||||
var/max_forcedel_multiplier = 1 //multiplier (per-decisecond) for calculating max number of force del() calls per tick.
|
||||
@@ -16,14 +18,21 @@ var/datum/controller/process/garbage_collector/garbage_collector
|
||||
|
||||
/datum/controller/process/garbage_collector/setup()
|
||||
name = "garbage"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
schedule_interval = 6 SECONDS
|
||||
|
||||
if(!garbage_collector)
|
||||
garbage_collector = src
|
||||
|
||||
/datum/controller/process/garbage_collector/doWork()
|
||||
dels = 0
|
||||
for(var/garbage in delayed_garbage)
|
||||
qdel(garbage)
|
||||
delayed_garbage.Cut()
|
||||
delayed_garbage = null
|
||||
|
||||
/datum/controller/process/garbage_collector/doWork()
|
||||
if(!garbage_collect)
|
||||
return
|
||||
|
||||
dels = 0
|
||||
var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del()
|
||||
var/checkRemain = max_checks_multiplier * schedule_interval
|
||||
var/maxDels = max_forcedel_multiplier * schedule_interval
|
||||
@@ -31,21 +40,21 @@ var/datum/controller/process/garbage_collector/garbage_collector
|
||||
while(destroyed.len && --checkRemain >= 0)
|
||||
if(dels >= maxDels)
|
||||
#ifdef GC_DEBUG
|
||||
testing("GC: Reached max force dels per tick [dels] vs [GC_FORCE_DEL_PER_TICK]")
|
||||
testing("GC: Reached max force dels per tick [dels] vs [maxDels]")
|
||||
#endif
|
||||
break // Server's already pretty pounded, everything else can wait 2 seconds
|
||||
var/refID = destroyed[1]
|
||||
var/GCd_at_time = destroyed[refID]
|
||||
if(GCd_at_time > time_to_kill)
|
||||
#ifdef GC_DEBUG
|
||||
testing("GC: [refID] not old enough, breaking at [world.time] for [GCd_at_time - time_to_kill] deciseconds until [GCd_at_time + GC_COLLECTION_TIMEOUT]")
|
||||
testing("GC: [refID] not old enough, breaking at [world.time] for [GCd_at_time - time_to_kill] deciseconds until [GCd_at_time + collection_timeout]")
|
||||
#endif
|
||||
break // Everything else is newer, skip them
|
||||
var/atom/A = locate(refID)
|
||||
#ifdef GC_DEBUG
|
||||
testing("GC: [refID] old enough to test: GCd_at_time: [GCd_at_time] time_to_kill: [time_to_kill] current: [world.time]")
|
||||
#endif
|
||||
if(A && A.gc_destroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake
|
||||
if(A && A.gcDestroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake
|
||||
// Something's still referring to the qdel'd object. Kill it.
|
||||
testing("GC: -- \ref[A] | [A.type] was unable to be GC'd and was deleted --")
|
||||
logging["[A.type]"]++
|
||||
@@ -56,15 +65,14 @@ var/datum/controller/process/garbage_collector/garbage_collector
|
||||
testing("GC: [refID] properly GC'd at [world.time] with timeout [GCd_at_time]")
|
||||
#endif
|
||||
destroyed.Cut(1, 2)
|
||||
scheck()
|
||||
|
||||
/datum/controller/process/garbage_collector/proc/AddTrash(datum/A)
|
||||
if(!istype(A) || !isnull(A.gc_destroyed))
|
||||
if(!istype(A) || !isnull(A.gcDestroyed))
|
||||
return
|
||||
#ifdef GC_DEBUG
|
||||
testing("GC: AddTrash([A.type])")
|
||||
testing("GC: AddTrash(\ref[A] - [A.type])")
|
||||
#endif
|
||||
A.gc_destroyed = world.time
|
||||
A.gcDestroyed = world.time
|
||||
destroyed -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list.
|
||||
destroyed["\ref[A]"] = world.time
|
||||
|
||||
@@ -74,18 +82,39 @@ var/datum/controller/process/garbage_collector/garbage_collector
|
||||
/proc/qdel(var/datum/A)
|
||||
if(!A)
|
||||
return
|
||||
if(istype(A, /list))
|
||||
var/list/L = A
|
||||
for(var/E in L)
|
||||
qdel(E)
|
||||
return
|
||||
|
||||
if(!istype(A))
|
||||
//warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.")
|
||||
del(A)
|
||||
garbage_collector.dels++
|
||||
else if(isnull(A.gc_destroyed))
|
||||
// Let our friend know they're about to get fucked up.
|
||||
else if(isnull(A.gcDestroyed))
|
||||
// Let our friend know they're about to get collected
|
||||
. = !A.Destroy()
|
||||
if(. && A)
|
||||
A.finalize_qdel()
|
||||
|
||||
/datum/proc/finalize_qdel()
|
||||
garbage_collector.AddTrash(src)
|
||||
del(src)
|
||||
|
||||
/atom/finalize_qdel()
|
||||
if(garbage_collector)
|
||||
garbage_collector.AddTrash(src)
|
||||
else
|
||||
delayed_garbage |= src
|
||||
|
||||
/icon/finalize_qdel()
|
||||
del(src)
|
||||
|
||||
/imagine/finalize_qdel()
|
||||
del(src)
|
||||
|
||||
/mob/finalize_qdel()
|
||||
del(src)
|
||||
|
||||
/turf/finalize_qdel()
|
||||
del(src)
|
||||
@@ -97,11 +126,18 @@ var/datum/controller/process/garbage_collector/garbage_collector
|
||||
tag = null
|
||||
return
|
||||
|
||||
/datum/var/gc_destroyed //Time when this object was destroyed.
|
||||
|
||||
#define TESTING 1
|
||||
#ifdef TESTING
|
||||
/client/var/running_find_references
|
||||
|
||||
/mob/verb/create_thing()
|
||||
set category = "Debug"
|
||||
set name = "Create Thing"
|
||||
|
||||
var/path = input("Enter path")
|
||||
var/atom/thing = new path(loc)
|
||||
thing.find_references()
|
||||
|
||||
/atom/verb/find_references()
|
||||
set category = "Debug"
|
||||
set name = "Find References"
|
||||
@@ -120,8 +156,8 @@ var/datum/controller/process/garbage_collector/garbage_collector
|
||||
return
|
||||
|
||||
// Remove this object from the list of things to be auto-deleted.
|
||||
if(garbage)
|
||||
garbage.destroyed -= "\ref[src]"
|
||||
if(garbage_collector)
|
||||
garbage_collector.destroyed -= "\ref[src]"
|
||||
|
||||
usr.client.running_find_references = type
|
||||
testing("Beginning search for references to a [type].")
|
||||
@@ -147,13 +183,13 @@ var/datum/controller/process/garbage_collector/garbage_collector
|
||||
|
||||
/client/verb/purge_all_destroyed_objects()
|
||||
set category = "Debug"
|
||||
if(garbage)
|
||||
while(garbage.destroyed.len)
|
||||
var/datum/o = locate(garbage.destroyed[1])
|
||||
if(istype(o) && o.gc_destroyed)
|
||||
if(garbage_collector)
|
||||
while(garbage_collector.destroyed.len)
|
||||
var/datum/o = locate(garbage_collector.destroyed[1])
|
||||
if(istype(o) && o.gcDestroyed)
|
||||
del(o)
|
||||
garbage.dels++
|
||||
garbage.destroyed.Cut(1, 2)
|
||||
garbage_collector.dels++
|
||||
garbage_collector.destroyed.Cut(1, 2)
|
||||
#endif
|
||||
|
||||
#ifdef GC_DEBUG
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
if(!istype(C.mob, /mob/dead))
|
||||
log_access("AFK: [key_name(C)]")
|
||||
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()
|
||||
|
||||
|
||||
@@ -161,15 +161,6 @@ atom/movable/New()
|
||||
trueLuminosity = luminosity * luminosity
|
||||
light = new(src)
|
||||
|
||||
//Objects with opacity will trigger nearby lights to update at next lighting process.
|
||||
atom/movable/Del()
|
||||
if(opacity)
|
||||
if(isturf(loc))
|
||||
if(loc:lighting_lumcount > 1)
|
||||
UpdateAffectingLights()
|
||||
|
||||
..()
|
||||
|
||||
//Sets our luminosity.
|
||||
//If we have no light it will create one.
|
||||
//If we are setting luminosity to 0 the light will be cleaned up by the controller and garbage collected once all its
|
||||
|
||||
@@ -7,7 +7,7 @@ datum/controller/transfer_controller/New()
|
||||
timerbuffer = config.vote_autotransfer_initial
|
||||
processing_objects += src
|
||||
|
||||
datum/controller/transfer_controller/Del()
|
||||
datum/controller/transfer_controller/Destroy()
|
||||
processing_objects -= src
|
||||
|
||||
datum/controller/transfer_controller/proc/process()
|
||||
|
||||
@@ -223,7 +223,7 @@ var/global/datum/controller/radio/radio_controller
|
||||
frequency.remove_listener(device)
|
||||
|
||||
if(frequency.devices.len == 0)
|
||||
del(frequency)
|
||||
qdel(frequency)
|
||||
frequencies -= f_text
|
||||
|
||||
return 1
|
||||
@@ -248,7 +248,7 @@ var/global/datum/controller/radio/radio_controller
|
||||
if(range)
|
||||
start_point = get_turf(source)
|
||||
if(!start_point)
|
||||
del(signal)
|
||||
qdel(signal)
|
||||
return 0
|
||||
if (filter)
|
||||
send_to_filter(source, signal, filter, start_point, range)
|
||||
@@ -297,7 +297,7 @@ var/global/datum/controller/radio/radio_controller
|
||||
devices_line -= null
|
||||
if (devices_line.len==0)
|
||||
devices -= devices_filter
|
||||
del(devices_line)
|
||||
qdel(devices_line)
|
||||
|
||||
/datum/signal
|
||||
var/obj/source
|
||||
|
||||
@@ -242,8 +242,8 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
|
||||
sleep(speed)
|
||||
step(src, direction)
|
||||
for(var/obj/effect/starender/E in loc)
|
||||
del(src)
|
||||
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/starender
|
||||
invisibility = 101
|
||||
|
||||
@@ -14,7 +14,7 @@ var/datum/controller/failsafe/Failsafe
|
||||
//There can be only one failsafe. Out with the old in with the new (that way we can restart the Failsafe by spawning a new one)
|
||||
if(Failsafe != src)
|
||||
if(istype(Failsafe))
|
||||
del(Failsafe)
|
||||
qdel(Failsafe)
|
||||
Failsafe = src
|
||||
Failsafe.process()
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ datum/controller/lighting/New()
|
||||
if(lighting_controller != src)
|
||||
if(istype(lighting_controller,/datum/controller/lighting))
|
||||
Recover() //if we are replacing an existing lighting_controller (due to a crash) we attempt to preserve as much as we can
|
||||
del(lighting_controller)
|
||||
qdel(lighting_controller)
|
||||
lighting_controller = src
|
||||
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ datum/controller/game_controller/New()
|
||||
if(master_controller != src)
|
||||
log_debug("Rebuilding Master Controller")
|
||||
if(istype(master_controller))
|
||||
del(master_controller)
|
||||
qdel(master_controller)
|
||||
master_controller = src
|
||||
|
||||
if(!job_master)
|
||||
|
||||
@@ -293,7 +293,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
||||
preview_icon.Blend(eyes_s, ICON_OVERLAY)
|
||||
if(clothes_s)
|
||||
preview_icon.Blend(clothes_s, ICON_OVERLAY)
|
||||
del(eyes_s)
|
||||
del(clothes_s)
|
||||
qdel(eyes_s)
|
||||
qdel(clothes_s)
|
||||
|
||||
return preview_icon
|
||||
|
||||
@@ -598,7 +598,7 @@ client
|
||||
for(var/obj/Obj in world)
|
||||
if(Obj.type == O_type)
|
||||
i++
|
||||
del(Obj)
|
||||
qdel(Obj)
|
||||
if(!i)
|
||||
usr << "No objects of this type exist"
|
||||
return
|
||||
@@ -609,7 +609,7 @@ client
|
||||
for(var/obj/Obj in world)
|
||||
if(istype(Obj,O_type))
|
||||
i++
|
||||
del(Obj)
|
||||
qdel(Obj)
|
||||
if(!i)
|
||||
usr << "No objects of this type exist"
|
||||
return
|
||||
@@ -888,7 +888,7 @@ client
|
||||
|
||||
usr << "Removed [rem_organ] from [M]."
|
||||
rem_organ.removed()
|
||||
del(rem_organ)
|
||||
qdel(rem_organ)
|
||||
|
||||
else if(href_list["fix_nano"])
|
||||
if(!check_rights(R_DEBUG)) return
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
/*
|
||||
|
||||
IMPORTANT NOTE: Please delete the diseases by using cure() proc or del() instruction.
|
||||
IMPORTANT NOTE: Please delete the diseases by using cure() proc or qdel() instruction.
|
||||
Diseases are referenced in a global list, so simply setting mob or obj vars
|
||||
to null does not delete the object itself. Thank you.
|
||||
|
||||
@@ -158,7 +158,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
|
||||
if(D != src)
|
||||
if(IsSame(D))
|
||||
//error("Deleting [D.name] because it's the same as [src.name].")
|
||||
del(D) // if there are somehow two viruses of the same kind in the system, delete the other one
|
||||
qdel(D) // if there are somehow two viruses of the same kind in the system, delete the other one
|
||||
|
||||
if(holder == affected_mob)
|
||||
if(affected_mob.stat != DEAD) //he's alive
|
||||
@@ -183,7 +183,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
|
||||
/*if(istype(src, /datum/disease/alien_embryo)) //Get rid of the infection flag if it's a xeno embryo.
|
||||
affected_mob.status_flags &= ~(XENO_HOST)*/
|
||||
affected_mob.viruses -= src //remove the datum from the list
|
||||
del(src) //delete the datum to stop it processing
|
||||
qdel(src) //delete the datum to stop it processing
|
||||
return
|
||||
|
||||
|
||||
@@ -193,6 +193,9 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
|
||||
active_diseases += src
|
||||
initial_spread = spread
|
||||
|
||||
/datum/disease/Destroy()
|
||||
active_diseases.Remove(src)
|
||||
|
||||
/datum/disease/proc/IsSame(var/datum/disease/D)
|
||||
if(istype(src, D.type))
|
||||
return 1
|
||||
@@ -200,8 +203,3 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
|
||||
|
||||
/datum/disease/proc/Copy(var/process = 0)
|
||||
return new type(process, src)
|
||||
|
||||
/*
|
||||
/datum/disease/Del()
|
||||
active_diseases.Remove(src)
|
||||
*/
|
||||
|
||||
@@ -71,7 +71,7 @@ var/list/advance_cures = list(
|
||||
..(process, D)
|
||||
return
|
||||
|
||||
/datum/disease/advance/Del()
|
||||
/datum/disease/advance/Destroy()
|
||||
if(processing)
|
||||
for(var/datum/symptom/S in symptoms)
|
||||
S.End(src)
|
||||
@@ -109,7 +109,7 @@ var/list/advance_cures = list(
|
||||
if(resistance && !(id in affected_mob.resistances))
|
||||
affected_mob.resistances[id] = id
|
||||
affected_mob.viruses -= src //remove the datum from the list
|
||||
del(src) //delete the datum to stop it processing
|
||||
qdel(src) //delete the datum to stop it processing
|
||||
return
|
||||
|
||||
// Returns the advance disease with a different reference memory.
|
||||
|
||||
@@ -113,7 +113,7 @@ Des: Removes all infection images from aliens and places an infection image on a
|
||||
if (alien.client)
|
||||
for(var/image/I in alien.client.images)
|
||||
if(dd_hasprefix_case(I.icon_state, "infected"))
|
||||
del(I)
|
||||
qdel(I)
|
||||
|
||||
for (var/mob/living/carbon/alien/alien in player_list)
|
||||
if (alien.client)
|
||||
@@ -149,5 +149,5 @@ Des: Removes the alien infection image from all aliens in the world located in p
|
||||
for(var/image/I in alien.client.images)
|
||||
if(I.loc == C)
|
||||
if(dd_hasprefix_case(I.icon_state, "infected"))
|
||||
del(I)
|
||||
qdel(I)
|
||||
return
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
if(4)
|
||||
if(!src.transformed)
|
||||
if ((!strain_data["name"]) || (!strain_data["UI"]) || (!strain_data["SE"]))
|
||||
del(affected_mob.virus)
|
||||
qdel(affected_mob.virus)
|
||||
return
|
||||
|
||||
//Save original dna for when the disease is cured.
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
return
|
||||
|
||||
/datum/disease/dnaspread/Del()
|
||||
/datum/disease/dnaspread/Destroy()
|
||||
if ((original_dna["name"]) && (original_dna["UI"]) && (original_dna["SE"]))
|
||||
var/list/newUI=original_dna["UI"]
|
||||
var/list/newSE=original_dna["SE"]
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
holder = atom
|
||||
if(!holder) //don't want this without a holder
|
||||
spawn
|
||||
del src
|
||||
qdel(src)
|
||||
set_desc(steps.len)
|
||||
return
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
if(result)
|
||||
new result(get_turf(holder))
|
||||
spawn()
|
||||
del holder
|
||||
qdel(holder)
|
||||
return
|
||||
|
||||
proc/set_desc(index as num)
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
//must succeed in most cases
|
||||
proc/setTeleatom(atom/movable/ateleatom)
|
||||
if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon))
|
||||
del(ateleatom)
|
||||
qdel(ateleatom)
|
||||
return 0
|
||||
if(istype(ateleatom))
|
||||
teleatom = ateleatom
|
||||
|
||||
@@ -311,7 +311,7 @@ datum/mind
|
||||
for(var/obj/item/weapon/implant/loyalty/I in H.contents)
|
||||
for(var/obj/item/organ/external/organs in H.organs)
|
||||
if(I in organs.implants)
|
||||
I.Del()
|
||||
qdel(I)
|
||||
break
|
||||
H << "<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].")
|
||||
@@ -368,7 +368,7 @@ datum/mind
|
||||
src = null
|
||||
m2h.inject(M)
|
||||
src = mobfinder.loc:mind
|
||||
del(mobfinder)
|
||||
qdel(mobfinder)
|
||||
current.radiation -= 50
|
||||
*/
|
||||
else if (href_list["silicon"])
|
||||
@@ -445,10 +445,10 @@ datum/mind
|
||||
var/list/L = current.get_contents()
|
||||
for (var/t in L)
|
||||
if (istype(t, /obj/item/device/pda))
|
||||
if (t:uplink) del(t:uplink)
|
||||
if (t:uplink) qdel(t:uplink)
|
||||
t:uplink = null
|
||||
else if (istype(t, /obj/item/device/radio))
|
||||
if (t:traitorradio) del(t:traitorradio)
|
||||
if (t:traitorradio) qdel(t:traitorradio)
|
||||
t:traitorradio = null
|
||||
t:traitor_frequency = 0.0
|
||||
else if (istype(t, /obj/item/weapon/SWF_uplink) || istype(t, /obj/item/weapon/syndicate_uplink))
|
||||
@@ -457,7 +457,7 @@ datum/mind
|
||||
R.loc = current.loc
|
||||
R.traitorradio = null
|
||||
R.traitor_frequency = 0.0
|
||||
del(t)
|
||||
qdel(t)
|
||||
|
||||
// remove wizards spells
|
||||
//If there are more special powers that need removal, they can be procced into here./N
|
||||
@@ -479,7 +479,7 @@ datum/mind
|
||||
proc/take_uplink()
|
||||
var/obj/item/device/uplink/hidden/H = find_syndicate_uplink()
|
||||
if(H)
|
||||
del(H)
|
||||
qdel(H)
|
||||
|
||||
|
||||
// check whether this mind's mob has been brigged for the given duration
|
||||
|
||||
@@ -24,7 +24,8 @@ var/list/modules = list( // global associative list
|
||||
var/mneed = mods.inmodlist(type) // find if this type has modules defined
|
||||
|
||||
if(!mneed) // not found in module list?
|
||||
del(src) // delete self, thus ending proc
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object
|
||||
status = needed
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
var/obj/result_obj = new result(container)
|
||||
for (var/obj/O in (container.contents-result_obj))
|
||||
O.reagents.trans_to(result_obj, O.reagents.total_volume)
|
||||
del(O)
|
||||
qdel(O)
|
||||
container.reagents.clear_reagents()
|
||||
return result_obj
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
O.reagents.del_reagent("nutriment")
|
||||
O.reagents.update_total()
|
||||
O.reagents.trans_to(result_obj, O.reagents.total_volume)
|
||||
del(O)
|
||||
qdel(O)
|
||||
container.reagents.clear_reagents()
|
||||
return result_obj
|
||||
|
||||
|
||||
@@ -350,7 +350,7 @@
|
||||
/obj/item/weapon/module/power_control/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
if (istype(W, /obj/item/device/multitool))
|
||||
var/obj/item/weapon/circuitboard/ghettosmes/newcircuit = new/obj/item/weapon/circuitboard/ghettosmes(user.loc)
|
||||
del(src)
|
||||
qdel(src)
|
||||
user.put_in_hands(newcircuit)
|
||||
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
G.fields["photo_side"] = side
|
||||
data_core.general += G
|
||||
|
||||
del(dummy)
|
||||
qdel(dummy)
|
||||
return G
|
||||
|
||||
/proc/CreateSecurityRecord(var/name as text, var/id as text)
|
||||
|
||||
@@ -1,168 +1,168 @@
|
||||
/* sd_Alert library
|
||||
by Shadowdarke (shadowdarke@byond.com)
|
||||
|
||||
sd_Alert() is a powerful and flexible alternative to the built in BYOND
|
||||
alert() proc. sd_Alert offers timed popups, unlimited buttons, custom
|
||||
appearance, and even the option to popup without stealing keyboard focus
|
||||
from the map or command line.
|
||||
|
||||
Please see demo.dm for detailed examples.
|
||||
|
||||
FORMAT
|
||||
sd_Alert(who, message, title, buttons, default, duration, unfocus, \
|
||||
size, table, style, tag, select, flags)
|
||||
|
||||
ARGUMENTS
|
||||
who - the client or mob to display the alert to.
|
||||
message - text message to display
|
||||
title - title of the alert box
|
||||
buttons - list of buttons
|
||||
Default Value: list("Ok")
|
||||
default - default button selestion
|
||||
Default Value: the first button in the list
|
||||
duration - the number of ticks before this alert expires. If not
|
||||
set, the alert lasts until a button is clicked.
|
||||
Default Value: 0 (unlimited)
|
||||
unfocus - if this value is set, the popup will not steal keyboard
|
||||
focus from the map or command line.
|
||||
Default Value: 1 (do not take focus)
|
||||
size - size of the popup window in px
|
||||
Default Value: "300x200"
|
||||
table - optional parameters for the HTML table in the alert
|
||||
Default Value: "width=100% height=100%" (fill the window)
|
||||
style - optional style sheet information
|
||||
tag - lets you specify a certain tag for this sd_Alert so you may manipulate it
|
||||
externally. (i.e. force the alert to close, change options and redisplay,
|
||||
reuse the same window, etc.)
|
||||
select - if set, the buttons will be replaced with a selection box with a number of
|
||||
lines displayed equal to this value.
|
||||
Default value: 0 (use buttons)
|
||||
flags - optional flags effecting the alert display. These flags may be ORed (|)
|
||||
together for multiple effects.
|
||||
SD_ALERT_SCROLL = display a scrollbar
|
||||
SD_ALERT_SELECT_MULTI = forces selection box display (instead of
|
||||
buttons) allows the user to select multiple
|
||||
choices.
|
||||
SD_ALERT_LINKS = display each choice as a plain text link.
|
||||
Any selection box style overrides this flag.
|
||||
SD_ALERT_NOVALIDATE = don't validate responses
|
||||
Default value: SD_ALERT_SCROLL
|
||||
(button display with scroll bar, validate responses)
|
||||
RETURNS
|
||||
The text of the selected button, or null if the alert duration expired
|
||||
without a button click.
|
||||
|
||||
Version 1 changes (from version 0):
|
||||
* Added the tag, select, and flags arguments, thanks to several suggestions from Foomer.
|
||||
* Split the sd_Alert/Alert() proc into New(), Display(), and Response() to allow more
|
||||
customization by developers. Primarily developers would want to use Display() to change
|
||||
the display of active tagged windows
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#define SD_ALERT_SCROLL 1
|
||||
#define SD_ALERT_SELECT_MULTI 2
|
||||
#define SD_ALERT_LINKS 4
|
||||
#define SD_ALERT_NOVALIDATE 8
|
||||
|
||||
proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\
|
||||
default, duration = 0, unfocus = 1, size = "300x200", \
|
||||
table = "width=100% height=100%", style, tag, select, flags = SD_ALERT_SCROLL)
|
||||
|
||||
if(ismob(who))
|
||||
var/mob/M = who
|
||||
who = M.client
|
||||
if(!istype(who)) CRASH("sd_Alert: Invalid target:[who] (\ref[who])")
|
||||
|
||||
var/sd_alert/T = locate(tag)
|
||||
if(T)
|
||||
if(istype(T)) del(T)
|
||||
else CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])")
|
||||
T = new(who, tag)
|
||||
if(duration)
|
||||
spawn(duration)
|
||||
if(T) del(T)
|
||||
return
|
||||
T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags)
|
||||
. = T.Response()
|
||||
|
||||
sd_alert
|
||||
var
|
||||
client/target
|
||||
response
|
||||
list/validation
|
||||
|
||||
Del()
|
||||
target << browse(null,"window=\ref[src]")
|
||||
..()
|
||||
|
||||
New(who, tag)
|
||||
..()
|
||||
target = who
|
||||
src.tag = tag
|
||||
|
||||
Topic(href,params[])
|
||||
if(usr.client != target) return
|
||||
response = params["clk"]
|
||||
|
||||
proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags)
|
||||
if(unfocus) spawn() target << browse(null,null)
|
||||
if(istext(buttons)) buttons = list(buttons)
|
||||
if(!default) default = buttons[1]
|
||||
if(!(flags & SD_ALERT_NOVALIDATE)) validation = buttons.Copy()
|
||||
|
||||
var/html = {"<head><title>[title]</title>[style]<script>\
|
||||
function c(x) {document.location.href='BYOND://?src=\ref[src];'+x;}\
|
||||
</script></head><body onLoad="fcs.focus();"\
|
||||
[(flags&SD_ALERT_SCROLL)?"":" scroll=no"]><table [table]><tr>\
|
||||
<td>[message]</td></tr><tr><th>"}
|
||||
|
||||
if(select || (flags & SD_ALERT_SELECT_MULTI)) // select style choices
|
||||
html += {"<FORM ID=fcs ACTION='BYOND://?' METHOD=GET>\
|
||||
<INPUT TYPE=HIDDEN NAME=src VALUE='\ref[src]'>
|
||||
<SELECT NAME=clk SIZE=[select]\
|
||||
[(flags & SD_ALERT_SELECT_MULTI)?" MULTIPLE":""]>"}
|
||||
for(var/b in buttons)
|
||||
html += "<OPTION[(b == default)?" SELECTED":""]>\
|
||||
[html_encode(b)]</OPTION>"
|
||||
html += "</SELECT><BR><INPUT TYPE=SUBMIT VALUE=Submit></FORM>"
|
||||
else if(flags & SD_ALERT_LINKS) // text link style
|
||||
for(var/b in buttons)
|
||||
var/list/L = list()
|
||||
L["clk"] = b
|
||||
var/html_string=list2params(L)
|
||||
var/focus
|
||||
if(b == default) focus = " ID=fcs"
|
||||
html += "<A[focus] href=# onClick=\"c('[html_string]')\">[html_encode(b)]</A>\
|
||||
<BR>"
|
||||
else // button style choices
|
||||
for(var/b in buttons)
|
||||
var/list/L = list()
|
||||
L["clk"] = b
|
||||
var/html_string=list2params(L)
|
||||
var/focus
|
||||
if(b == default) focus = " ID=fcs"
|
||||
html += "<INPUT[focus] TYPE=button VALUE='[html_encode(b)]' \
|
||||
onClick=\"c('[html_string]')\"> "
|
||||
|
||||
html += "</th></tr></table></body>"
|
||||
|
||||
target << browse(html,"window=\ref[src];size=[size];can_close=0")
|
||||
|
||||
proc/Response()
|
||||
var/validated
|
||||
while(!validated)
|
||||
while(target && !response) // wait for a response
|
||||
sleep(2)
|
||||
|
||||
if(response && validation)
|
||||
if(istype(response, /list))
|
||||
var/list/L = response - validation
|
||||
if(L.len) response = null
|
||||
else validated = 1
|
||||
else if(response in validation) validated = 1
|
||||
else response=null
|
||||
else validated = 1
|
||||
spawn(2) del(src)
|
||||
return response
|
||||
/* sd_Alert library
|
||||
by Shadowdarke (shadowdarke@byond.com)
|
||||
|
||||
sd_Alert() is a powerful and flexible alternative to the built in BYOND
|
||||
alert() proc. sd_Alert offers timed popups, unlimited buttons, custom
|
||||
appearance, and even the option to popup without stealing keyboard focus
|
||||
from the map or command line.
|
||||
|
||||
Please see demo.dm for detailed examples.
|
||||
|
||||
FORMAT
|
||||
sd_Alert(who, message, title, buttons, default, duration, unfocus, \
|
||||
size, table, style, tag, select, flags)
|
||||
|
||||
ARGUMENTS
|
||||
who - the client or mob to display the alert to.
|
||||
message - text message to display
|
||||
title - title of the alert box
|
||||
buttons - list of buttons
|
||||
Default Value: list("Ok")
|
||||
default - default button selestion
|
||||
Default Value: the first button in the list
|
||||
duration - the number of ticks before this alert expires. If not
|
||||
set, the alert lasts until a button is clicked.
|
||||
Default Value: 0 (unlimited)
|
||||
unfocus - if this value is set, the popup will not steal keyboard
|
||||
focus from the map or command line.
|
||||
Default Value: 1 (do not take focus)
|
||||
size - size of the popup window in px
|
||||
Default Value: "300x200"
|
||||
table - optional parameters for the HTML table in the alert
|
||||
Default Value: "width=100% height=100%" (fill the window)
|
||||
style - optional style sheet information
|
||||
tag - lets you specify a certain tag for this sd_Alert so you may manipulate it
|
||||
externally. (i.e. force the alert to close, change options and redisplay,
|
||||
reuse the same window, etc.)
|
||||
select - if set, the buttons will be replaced with a selection box with a number of
|
||||
lines displayed equal to this value.
|
||||
Default value: 0 (use buttons)
|
||||
flags - optional flags effecting the alert display. These flags may be ORed (|)
|
||||
together for multiple effects.
|
||||
SD_ALERT_SCROLL = display a scrollbar
|
||||
SD_ALERT_SELECT_MULTI = forces selection box display (instead of
|
||||
buttons) allows the user to select multiple
|
||||
choices.
|
||||
SD_ALERT_LINKS = display each choice as a plain text link.
|
||||
Any selection box style overrides this flag.
|
||||
SD_ALERT_NOVALIDATE = don't validate responses
|
||||
Default value: SD_ALERT_SCROLL
|
||||
(button display with scroll bar, validate responses)
|
||||
RETURNS
|
||||
The text of the selected button, or null if the alert duration expired
|
||||
without a button click.
|
||||
|
||||
Version 1 changes (from version 0):
|
||||
* Added the tag, select, and flags arguments, thanks to several suggestions from Foomer.
|
||||
* Split the sd_Alert/Alert() proc into New(), Display(), and Response() to allow more
|
||||
customization by developers. Primarily developers would want to use Display() to change
|
||||
the display of active tagged windows
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#define SD_ALERT_SCROLL 1
|
||||
#define SD_ALERT_SELECT_MULTI 2
|
||||
#define SD_ALERT_LINKS 4
|
||||
#define SD_ALERT_NOVALIDATE 8
|
||||
|
||||
proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\
|
||||
default, duration = 0, unfocus = 1, size = "300x200", \
|
||||
table = "width=100% height=100%", style, tag, select, flags = SD_ALERT_SCROLL)
|
||||
|
||||
if(ismob(who))
|
||||
var/mob/M = who
|
||||
who = M.client
|
||||
if(!istype(who)) CRASH("sd_Alert: Invalid target:[who] (\ref[who])")
|
||||
|
||||
var/sd_alert/T = locate(tag)
|
||||
if(T)
|
||||
if(istype(T)) qdel(T)
|
||||
else CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])")
|
||||
T = new(who, tag)
|
||||
if(duration)
|
||||
spawn(duration)
|
||||
if(T) qdel(T)
|
||||
return
|
||||
T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags)
|
||||
. = T.Response()
|
||||
|
||||
sd_alert
|
||||
var
|
||||
client/target
|
||||
response
|
||||
list/validation
|
||||
|
||||
Del()
|
||||
target << browse(null,"window=\ref[src]")
|
||||
..()
|
||||
|
||||
New(who, tag)
|
||||
..()
|
||||
target = who
|
||||
src.tag = tag
|
||||
|
||||
Topic(href,params[])
|
||||
if(usr.client != target) return
|
||||
response = params["clk"]
|
||||
|
||||
proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags)
|
||||
if(unfocus) spawn() target << browse(null,null)
|
||||
if(istext(buttons)) buttons = list(buttons)
|
||||
if(!default) default = buttons[1]
|
||||
if(!(flags & SD_ALERT_NOVALIDATE)) validation = buttons.Copy()
|
||||
|
||||
var/html = {"<head><title>[title]</title>[style]<script>\
|
||||
function c(x) {document.location.href='BYOND://?src=\ref[src];'+x;}\
|
||||
</script></head><body onLoad="fcs.focus();"\
|
||||
[(flags&SD_ALERT_SCROLL)?"":" scroll=no"]><table [table]><tr>\
|
||||
<td>[message]</td></tr><tr><th>"}
|
||||
|
||||
if(select || (flags & SD_ALERT_SELECT_MULTI)) // select style choices
|
||||
html += {"<FORM ID=fcs ACTION='BYOND://?' METHOD=GET>\
|
||||
<INPUT TYPE=HIDDEN NAME=src VALUE='\ref[src]'>
|
||||
<SELECT NAME=clk SIZE=[select]\
|
||||
[(flags & SD_ALERT_SELECT_MULTI)?" MULTIPLE":""]>"}
|
||||
for(var/b in buttons)
|
||||
html += "<OPTION[(b == default)?" SELECTED":""]>\
|
||||
[html_encode(b)]</OPTION>"
|
||||
html += "</SELECT><BR><INPUT TYPE=SUBMIT VALUE=Submit></FORM>"
|
||||
else if(flags & SD_ALERT_LINKS) // text link style
|
||||
for(var/b in buttons)
|
||||
var/list/L = list()
|
||||
L["clk"] = b
|
||||
var/html_string=list2params(L)
|
||||
var/focus
|
||||
if(b == default) focus = " ID=fcs"
|
||||
html += "<A[focus] href=# onClick=\"c('[html_string]')\">[html_encode(b)]</A>\
|
||||
<BR>"
|
||||
else // button style choices
|
||||
for(var/b in buttons)
|
||||
var/list/L = list()
|
||||
L["clk"] = b
|
||||
var/html_string=list2params(L)
|
||||
var/focus
|
||||
if(b == default) focus = " ID=fcs"
|
||||
html += "<INPUT[focus] TYPE=button VALUE='[html_encode(b)]' \
|
||||
onClick=\"c('[html_string]')\"> "
|
||||
|
||||
html += "</th></tr></table></body>"
|
||||
|
||||
target << browse(html,"window=\ref[src];size=[size];can_close=0")
|
||||
|
||||
proc/Response()
|
||||
var/validated
|
||||
while(!validated)
|
||||
while(target && !response) // wait for a response
|
||||
sleep(2)
|
||||
|
||||
if(response && validation)
|
||||
if(istype(response, /list))
|
||||
var/list/L = response - validation
|
||||
if(L.len) response = null
|
||||
else validated = 1
|
||||
else if(response in validation) validated = 1
|
||||
else response=null
|
||||
else validated = 1
|
||||
spawn(2) qdel(src)
|
||||
return response
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
for(var/datum/uplink_item/UI in H.purchase_log)
|
||||
var/obj/I = new UI.path
|
||||
refined_log.Add("[H.purchase_log[UI]]x\icon[I][UI.name]")
|
||||
del(I)
|
||||
qdel(I)
|
||||
purchases = english_list(refined_log, nothing_text = "")
|
||||
if(uplink_true)
|
||||
text += " (used [TC_uses] TC)"
|
||||
@@ -215,7 +215,7 @@
|
||||
if(antag.current && antag.current.client)
|
||||
for(var/image/I in antag.current.client.images)
|
||||
if(I.icon_state == antag_indicator)
|
||||
del(I)
|
||||
qdel(I)
|
||||
for(var/datum/mind/other_antag in current_antagonists)
|
||||
if(other_antag.current)
|
||||
antag.current.client.images |= image('icons/mob/mob.dmi', loc = other_antag.current, icon_state = antag_indicator)
|
||||
@@ -241,10 +241,10 @@
|
||||
if(antag.current.client)
|
||||
for(var/image/I in antag.current.client.images)
|
||||
if(I.icon_state == antag_indicator && I.loc == player.current)
|
||||
del(I)
|
||||
qdel(I)
|
||||
if(player.current && player.current.client)
|
||||
for(var/image/I in player.current.client.images)
|
||||
if(I.icon_state == antag_indicator)
|
||||
del(I)
|
||||
qdel(I)
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/mob/holder = player.current
|
||||
player.current = new mob_path(get_turf(player.current))
|
||||
player.transfer_to(player.current)
|
||||
if(holder) del(holder)
|
||||
if(holder) qdel(holder)
|
||||
|
||||
player.original = player.current
|
||||
return player.current
|
||||
@@ -30,7 +30,7 @@
|
||||
for(var/obj/item/thing in player.contents)
|
||||
player.drop_from_inventory(thing)
|
||||
if(thing.loc != player)
|
||||
del(thing)
|
||||
qdel(thing)
|
||||
return 1
|
||||
|
||||
if(flags & ANTAG_SET_APPEARANCE)
|
||||
|
||||
@@ -32,7 +32,7 @@ var/datum/antagonist/highlander/highlanders
|
||||
for (var/obj/item/I in player)
|
||||
if (istype(I, /obj/item/weapon/implant))
|
||||
continue
|
||||
del(I)
|
||||
qdel(I)
|
||||
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(player), slot_w_uniform)
|
||||
player.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(player), slot_l_ear)
|
||||
|
||||
@@ -213,7 +213,7 @@ var/datum/antagonist/rogue_ai/malf
|
||||
/client/proc/reactivate_camera)
|
||||
|
||||
current:laws = new /datum/ai_laws/nanotrasen
|
||||
del(current:malf_picker)
|
||||
qdel(current:malf_picker)
|
||||
current:show_laws()
|
||||
current.icon_state = "ai"
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ proc/spawn_room(var/atom/start_loc,var/x_size,var/y_size,var/wall,var/floor , va
|
||||
var/cur_loc = locate(start_loc.x+x,start_loc.y+y,start_loc.z)
|
||||
if(clean)
|
||||
for(var/O in cur_loc)
|
||||
del(O)
|
||||
qdel(O)
|
||||
|
||||
var/area/asteroid/artifactroom/A = new
|
||||
if(name)
|
||||
|
||||
@@ -22,6 +22,16 @@
|
||||
//Detective Work, used for the duplicate data points kept in the scanners
|
||||
var/list/original_atom
|
||||
|
||||
/atom/Destroy()
|
||||
. = ..()
|
||||
SetOpacity(0)
|
||||
|
||||
if(reagents)
|
||||
qdel(reagents)
|
||||
for(var/atom/movable/AM in contents)
|
||||
qdel(AM)
|
||||
invisibility = 101
|
||||
|
||||
/atom/proc/assume_air(datum/gas_mixture/giver)
|
||||
return null
|
||||
|
||||
@@ -66,7 +76,6 @@
|
||||
return flags & INSERT_CONTAINER
|
||||
*/
|
||||
|
||||
|
||||
/atom/proc/meteorhit(obj/meteor as obj)
|
||||
return
|
||||
|
||||
@@ -148,7 +157,7 @@ its easier to just keep the beam vertical.
|
||||
|
||||
for(var/obj/effect/overlay/beam/O in orange(10,src)) //This section erases the previously drawn beam because I found it was easier to
|
||||
if(O.BeamSource==src) //just draw another instance of the beam instead of trying to manipulate all the
|
||||
del O //pieces to a new orientation.
|
||||
qdel(O) //pieces to a new orientation.
|
||||
var/Angle=round(Get_Angle(src,BeamTarget))
|
||||
var/icon/I=new(icon,icon_state)
|
||||
I.Turn(Angle)
|
||||
@@ -189,7 +198,7 @@ its easier to just keep the beam vertical.
|
||||
X.pixel_y=Pixel_y
|
||||
sleep(3) //Changing this to a lower value will cause the beam to follow more smoothly with movement, but it will also be more laggy.
|
||||
//I've found that 3 ticks provided a nice balance for my use.
|
||||
for(var/obj/effect/overlay/beam/O in orange(10,src)) if(O.BeamSource==src) del O
|
||||
for(var/obj/effect/overlay/beam/O in orange(10,src)) if(O.BeamSource==src) qdel(O)
|
||||
|
||||
|
||||
//All atoms
|
||||
@@ -229,7 +238,7 @@ its easier to just keep the beam vertical.
|
||||
|
||||
/atom/proc/fire_act()
|
||||
return
|
||||
|
||||
|
||||
/atom/proc/melt()
|
||||
return
|
||||
|
||||
@@ -362,7 +371,7 @@ its easier to just keep the beam vertical.
|
||||
|
||||
//Cleaning up shit.
|
||||
if(fingerprints && !fingerprints.len)
|
||||
del(fingerprints)
|
||||
qdel(fingerprints)
|
||||
return
|
||||
|
||||
|
||||
@@ -419,7 +428,7 @@ its easier to just keep the beam vertical.
|
||||
src.color = initial(src.color) //paint
|
||||
src.germ_level = 0
|
||||
if(istype(blood_DNA, /list))
|
||||
del(blood_DNA)
|
||||
qdel(blood_DNA)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -15,23 +15,23 @@
|
||||
var/mob/pulledby = null
|
||||
|
||||
/atom/movable/Del()
|
||||
if(isnull(gc_destroyed) && loc)
|
||||
if(isnull(gcDestroyed) && loc)
|
||||
testing("GC: -- [type] was deleted via del() rather than qdel() --")
|
||||
Destroy()
|
||||
else if(isnull(gc_destroyed))
|
||||
testing("GC: [type] was deleted via GC without qdel()") //Not really a huge issue but from now on, please 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(reagents)
|
||||
qdel(reagents)
|
||||
for(var/atom/movable/AM in contents)
|
||||
qdel(AM)
|
||||
if(opacity)
|
||||
if(isturf(loc))
|
||||
if(loc:lighting_lumcount > 1)
|
||||
UpdateAffectingLights()
|
||||
loc = null
|
||||
invisibility = 101
|
||||
|
||||
..()
|
||||
|
||||
/atom/movable/Bump(var/atom/A, yes)
|
||||
if(src.throwing)
|
||||
|
||||
@@ -420,7 +420,7 @@
|
||||
animation.master = src
|
||||
flick("h2monkey", animation)
|
||||
sleep(48)
|
||||
del(animation)
|
||||
qdel(animation)
|
||||
|
||||
|
||||
var/mob/living/carbon/monkey/O = null
|
||||
@@ -447,7 +447,7 @@
|
||||
|
||||
|
||||
for(var/obj/T in (M.contents-implants))
|
||||
del(T)
|
||||
qdel(T)
|
||||
|
||||
O.loc = M.loc
|
||||
|
||||
@@ -469,7 +469,7 @@
|
||||
I.loc = O
|
||||
I.implanted = O
|
||||
// O.update_icon = 1 //queue a full icon update at next life() call
|
||||
del(M)
|
||||
qdel(M)
|
||||
return
|
||||
|
||||
if (!isblockon(getblock(M.dna.struc_enzymes, MONKEYBLOCK,3),MONKEYBLOCK) && !istype(M, /mob/living/carbon/human))
|
||||
@@ -493,7 +493,7 @@
|
||||
animation.master = src
|
||||
flick("monkey2h", animation)
|
||||
sleep(48)
|
||||
del(animation)
|
||||
qdel(animation)
|
||||
|
||||
var/mob/living/carbon/human/O = new( src )
|
||||
if(Mo.greaterform)
|
||||
@@ -519,7 +519,7 @@
|
||||
M.viruses -= D
|
||||
|
||||
//for(var/obj/T in M)
|
||||
// del(T)
|
||||
// qdel(T)
|
||||
|
||||
O.loc = M.loc
|
||||
|
||||
@@ -553,7 +553,7 @@
|
||||
I.loc = O
|
||||
I.implanted = O
|
||||
// O.update_icon = 1 //queue a full icon update at next life() call
|
||||
del(M)
|
||||
qdel(M)
|
||||
return
|
||||
//////////////////////////////////////////////////////////// Monkey Block
|
||||
if(M)
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
return
|
||||
put_in(G.affecting)
|
||||
src.add_fingerprint(user)
|
||||
del(G)
|
||||
qdel(G)
|
||||
return
|
||||
|
||||
/obj/machinery/dna_scannernew/proc/put_in(var/mob/M)
|
||||
@@ -187,7 +187,7 @@
|
||||
ex_act(severity)
|
||||
//Foreach goto(35)
|
||||
//SN src = null
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
@@ -196,7 +196,7 @@
|
||||
ex_act(severity)
|
||||
//Foreach goto(108)
|
||||
//SN src = null
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(25))
|
||||
@@ -205,7 +205,7 @@
|
||||
ex_act(severity)
|
||||
//Foreach goto(181)
|
||||
//SN src = null
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
@@ -215,7 +215,7 @@
|
||||
if(prob(75))
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.loc = src.loc
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/computer/scan_consolenew
|
||||
name = "DNA Modifier Access Console"
|
||||
@@ -262,12 +262,12 @@
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
//SN src = null
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
//SN src = null
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
@@ -275,7 +275,7 @@
|
||||
/obj/machinery/computer/scan_consolenew/blob_act()
|
||||
|
||||
if(prob(75))
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/computer/scan_consolenew/power_change()
|
||||
..()
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
animation.master = src
|
||||
flick("h2monkey", animation)
|
||||
sleep(48)
|
||||
del(animation)
|
||||
qdel(animation)
|
||||
|
||||
|
||||
var/mob/living/carbon/monkey/O = null
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
|
||||
for(var/obj/T in (M.contents-implants))
|
||||
del(T)
|
||||
qdel(T)
|
||||
|
||||
O.loc = M.loc
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
I.loc = O
|
||||
I.implanted = O
|
||||
// O.update_icon = 1 //queue a full icon update at next life() call
|
||||
del(M)
|
||||
qdel(M)
|
||||
return
|
||||
|
||||
/datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags)
|
||||
@@ -108,7 +108,7 @@
|
||||
animation.master = src
|
||||
flick("monkey2h", animation)
|
||||
sleep(48)
|
||||
del(animation)
|
||||
qdel(animation)
|
||||
|
||||
var/mob/living/carbon/human/O
|
||||
if(Mo.greaterform)
|
||||
@@ -136,7 +136,7 @@
|
||||
M.viruses -= D
|
||||
|
||||
//for(var/obj/T in M)
|
||||
// del(T)
|
||||
// qdel(T)
|
||||
|
||||
O.loc = M.loc
|
||||
|
||||
@@ -171,5 +171,5 @@
|
||||
I.loc = O
|
||||
I.implanted = O
|
||||
// O.update_icon = 1 //queue a full icon update at next life() call
|
||||
del(M)
|
||||
qdel(M)
|
||||
return
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
..(loc, h)
|
||||
|
||||
|
||||
Del()
|
||||
Destroy()
|
||||
blob_cores -= src
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
@@ -24,7 +24,7 @@
|
||||
update_icon()
|
||||
if(health <= 0)
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
update_icon()
|
||||
if(health <= 0)
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -62,5 +62,5 @@
|
||||
if(factory)
|
||||
factory.spores -= src
|
||||
..()
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
..(loc, h)
|
||||
|
||||
|
||||
Del()
|
||||
Destroy()
|
||||
blob_nodes -= src
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
@@ -24,7 +24,7 @@
|
||||
update_icon()
|
||||
if(health <= 0)
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
update_icon()
|
||||
if(health <= 0)
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
B.loc = T
|
||||
else
|
||||
T.blob_act()//If we cant move in hit the turf
|
||||
del(B)
|
||||
qdel(B)
|
||||
for(var/atom/A in T)//Hit everything in the turf
|
||||
A.blob_act()
|
||||
return 1
|
||||
@@ -134,7 +134,7 @@
|
||||
update_icon()//Needs to be updated with the types
|
||||
if(health <= 0)
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(health <= 15)
|
||||
icon_state = "blob_damaged"
|
||||
@@ -182,7 +182,7 @@
|
||||
new/obj/effect/blob/factory(src.loc,src.health)
|
||||
if("Shield")
|
||||
new/obj/effect/blob/shield(src.loc,src.health*2)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
//////////////////////////////****IDLE BLOB***/////////////////////////////////////
|
||||
@@ -201,7 +201,7 @@
|
||||
|
||||
proc/update_idle()
|
||||
if(health<=0)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(health<4)
|
||||
icon_state = "blobc0"
|
||||
|
||||
@@ -385,7 +385,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
||||
animation.master = src
|
||||
flick("monkey2h", animation)
|
||||
sleep(48)
|
||||
del(animation)
|
||||
qdel(animation)
|
||||
|
||||
for(var/obj/item/W in src)
|
||||
C.drop_from_inventory(W)
|
||||
@@ -400,7 +400,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
||||
O.real_name = chosen_dna.real_name
|
||||
|
||||
for(var/obj/T in C)
|
||||
del(T)
|
||||
qdel(T)
|
||||
|
||||
O.loc = C.loc
|
||||
|
||||
@@ -420,7 +420,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
||||
O.changeling_update_languages(changeling.absorbed_languages)
|
||||
|
||||
feedback_add_details("changeling_powers","LFT")
|
||||
del(C)
|
||||
qdel(C)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/Robot = M
|
||||
if(Robot.mmi)
|
||||
del(Robot.mmi)
|
||||
qdel(Robot.mmi)
|
||||
else
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(W, /obj/item/weapon/implant))
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
/mob/proc/see_narsie(var/obj/singularity/narsie/large/N, var/dir)
|
||||
if(N.chained)
|
||||
if(narsimage)
|
||||
del(narsimage)
|
||||
del(narglow)
|
||||
qdel(narsimage)
|
||||
qdel(narglow)
|
||||
return
|
||||
if((N.z == src.z)&&(get_dist(N,src) <= (N.consume_range+10)) && !(N in view(src)))
|
||||
if(!narsimage) //Create narsimage
|
||||
@@ -59,5 +59,5 @@
|
||||
src << narglow
|
||||
else
|
||||
if(narsimage)
|
||||
del(narsimage)
|
||||
del(narglow)
|
||||
qdel(narsimage)
|
||||
qdel(narglow)
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
c_animation.icon_state = "breakdoor"
|
||||
flick("cultification",c_animation)
|
||||
spawn(10)
|
||||
del(c_animation)
|
||||
qdel(c_animation)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/door/firedoor/cultify()
|
||||
|
||||
@@ -40,6 +40,7 @@ In short:
|
||||
// Apply changes when entering state
|
||||
/datum/universal_state/hell/OnEnter()
|
||||
set background = 1
|
||||
garbage_collector.garbage_collect = 0
|
||||
escape_list = get_area_turfs(locate(/area/hallway/secondary/exit))
|
||||
|
||||
//Separated into separate procs for profiling
|
||||
|
||||
@@ -74,7 +74,7 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","
|
||||
AI.client.images += blood_image
|
||||
rune_list.Add(src)
|
||||
|
||||
Del()
|
||||
Destroy()
|
||||
for(var/mob/living/silicon/ai/AI in player_list)
|
||||
if(AI.client)
|
||||
AI.client.images -= blood_image
|
||||
@@ -92,11 +92,11 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","
|
||||
attackby(I as obj, user as mob)
|
||||
if(istype(I, /obj/item/weapon/book/tome) && iscultist(user))
|
||||
user << "You retrace your steps, carefully undoing the lines of the rune."
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
else if(istype(I, /obj/item/weapon/nullrod))
|
||||
user << "\blue You disrupt the vile magic with the deadening field of the null rod!"
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ var/list/sacrificed = list()
|
||||
user << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric"
|
||||
if (istype(user, /mob/living))
|
||||
user.take_overall_damage(5, 0)
|
||||
del(src)
|
||||
qdel(src)
|
||||
if(allrunesloc && index != 0)
|
||||
if(istype(src,/obj/effect/rune))
|
||||
user.say("Sas[pick("'","`")]so c'arta forbici!")//Only you can stop auto-muting
|
||||
@@ -61,7 +61,7 @@ var/list/sacrificed = list()
|
||||
user << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric"
|
||||
if (istype(user, /mob/living))
|
||||
user.take_overall_damage(5, 0)
|
||||
del(src)
|
||||
qdel(src)
|
||||
for(var/mob/living/carbon/C in orange(1,src))
|
||||
if(iscultist(C) && !C.stat)
|
||||
culcount++
|
||||
@@ -94,7 +94,7 @@ var/list/sacrificed = list()
|
||||
new /obj/item/weapon/book/tome(src.loc)
|
||||
else
|
||||
new /obj/item/weapon/book/tome(usr.loc)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -209,7 +209,7 @@ var/list/sacrificed = list()
|
||||
T.hotspot_expose(700,125)
|
||||
var/rune = src // detaching the proc - in theory
|
||||
empulse(U, (range_red - 2), range_red)
|
||||
del(rune)
|
||||
qdel(rune)
|
||||
return
|
||||
|
||||
/////////////////////////////////////////SIXTH RUNE
|
||||
@@ -369,7 +369,7 @@ var/list/sacrificed = list()
|
||||
usr.say("Kla[pick("'","`")]atu barada nikt'o!")
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message("\red The rune turns into gray dust, veiling the surrounding runes.", 3)
|
||||
del(src)
|
||||
qdel(src)
|
||||
else
|
||||
usr.whisper("Kla[pick("'","`")]atu barada nikt'o!")
|
||||
usr << "\red Your talisman turns into gray dust, veiling the surrounding runes."
|
||||
@@ -545,8 +545,8 @@ var/list/sacrificed = list()
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3)
|
||||
usr.say("H'drak v[pick("'","`")]loso, mir'kanas verbot!")
|
||||
del(imbued_from)
|
||||
del(newtalisman)
|
||||
qdel(imbued_from)
|
||||
qdel(newtalisman)
|
||||
else
|
||||
return fizzle()
|
||||
|
||||
@@ -593,7 +593,7 @@ var/list/sacrificed = list()
|
||||
for(var/datum/mind/H in cult.current_antagonists)
|
||||
if (H.current)
|
||||
H.current << "\red \b [input]"
|
||||
del(src)
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
/////////////////////////////////////////FIFTEENTH RUNE
|
||||
@@ -745,7 +745,7 @@ var/list/sacrificed = list()
|
||||
usr.say("Nikt[pick("'","`")]o barada kla'atu!")
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message("\red The rune turns into red dust, reveaing the surrounding runes.", 3)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(W,/obj/item/weapon/paper/talisman))
|
||||
usr.whisper("Nikt[pick("'","`")]o barada kla'atu!")
|
||||
@@ -818,7 +818,7 @@ var/list/sacrificed = list()
|
||||
for(var/mob/living/carbon/C in users)
|
||||
user.take_overall_damage(dam, 0)
|
||||
C.say("Khari[pick("'","`")]d! Gual'te nikka!")
|
||||
del(src)
|
||||
qdel(src)
|
||||
return fizzle()
|
||||
|
||||
/////////////////////////////////////////NINETEENTH RUNE
|
||||
@@ -858,7 +858,7 @@ var/list/sacrificed = list()
|
||||
user.visible_message("\red Rune disappears with a flash of red light, and in its place now a body lies.", \
|
||||
"\red You are blinded by the flash of red light! After you're able to see again, you see that now instead of the rune there's a body.", \
|
||||
"\red You hear a pop and smell ozone.")
|
||||
del(src)
|
||||
qdel(src)
|
||||
return fizzle()
|
||||
|
||||
/////////////////////////////////////////TWENTIETH RUNES
|
||||
@@ -881,7 +881,7 @@ var/list/sacrificed = list()
|
||||
usr.say("Sti[pick("'","`")] kaliedir!")
|
||||
usr << "\red The world becomes quiet as the deafening rune dissipates into fine dust."
|
||||
admin_attacker_log_many_victims(usr, affected, "Used a deafen rune.", "Was victim of a deafen rune.", "used a deafen rune on")
|
||||
del(src)
|
||||
qdel(src)
|
||||
else
|
||||
return fizzle()
|
||||
else
|
||||
@@ -926,7 +926,7 @@ var/list/sacrificed = list()
|
||||
usr.say("Sti[pick("'","`")] kaliesin!")
|
||||
usr << "\red The rune flashes, blinding those who not follow the Nar-Sie, and dissipates into fine dust."
|
||||
admin_attacker_log_many_victims(usr, affected, "Used a blindness rune.", "Was victim of a blindness rune.", "used a blindness rune on")
|
||||
del(src)
|
||||
qdel(src)
|
||||
else
|
||||
return fizzle()
|
||||
else
|
||||
@@ -984,7 +984,7 @@ var/list/sacrificed = list()
|
||||
C.take_overall_damage(15, 0)
|
||||
admin_attacker_log_many_victims(usr, victims, "Used a blood boil rune.", "Was the victim of a blood boil rune.", "used a blood boil rune on")
|
||||
log_and_message_admins_many(cultists - usr, "assisted activating a blood boil rune.")
|
||||
del(src)
|
||||
qdel(src)
|
||||
else
|
||||
return fizzle()
|
||||
return
|
||||
@@ -1014,8 +1014,8 @@ var/list/sacrificed = list()
|
||||
M << "\red Blood suddenly ignites, burning you!"
|
||||
var/turf/T = get_turf(B)
|
||||
T.hotspot_expose(700,125)
|
||||
del(B)
|
||||
del(src)
|
||||
qdel(B)
|
||||
qdel(src)
|
||||
|
||||
////////// Rune 24 (counting burningblood, which kinda doesnt work yet.)
|
||||
|
||||
@@ -1038,7 +1038,7 @@ var/list/sacrificed = list()
|
||||
S.Weaken(5)
|
||||
S.show_message("\red BZZZT... The rune has exploded in a bright flash.", 3)
|
||||
admin_attack_log(usr, S, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on")
|
||||
del(src)
|
||||
qdel(src)
|
||||
else ///When invoked as talisman, stun and mute the target mob.
|
||||
usr.say("Dream sign ''Evil sealing talisman'[pick("'","`")]!")
|
||||
var/obj/item/weapon/nullrod/N = locate() in T
|
||||
@@ -1081,5 +1081,5 @@ var/list/sacrificed = list()
|
||||
//the below calls update_icons() at the end, which will update overlay icons by using the (now updated) cache
|
||||
user.put_in_hands(new /obj/item/weapon/melee/cultblade(user)) //put in hands or on floor
|
||||
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
user.take_organ_damage(5, 0)
|
||||
if(src && src.imbue!="supply" && src.imbue!="runestun")
|
||||
if(delete)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
user << "You see strange symbols on the paper. Are they supposed to mean something?"
|
||||
@@ -47,7 +47,7 @@
|
||||
if(imbue == "runestun")
|
||||
user.take_organ_damage(5, 0)
|
||||
call(/obj/effect/rune/proc/runestun)(T)
|
||||
del(src)
|
||||
qdel(src)
|
||||
else
|
||||
..() ///If its some other talisman, use the generic attack code, is this supposed to work this way?
|
||||
else
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
proc/supply(var/key)
|
||||
if (!src.uses)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/dat = "<B>There are [src.uses] bloody runes on the parchment.</B><BR>"
|
||||
|
||||
@@ -49,7 +49,8 @@
|
||||
for(var/atom/movable/A in T)
|
||||
if(A)
|
||||
if(istype(A,/mob/living))
|
||||
del(A)
|
||||
qdel(A)
|
||||
continue
|
||||
else if(istype(A,/mob)) // Observers, AI cameras.
|
||||
continue
|
||||
qdel(A)
|
||||
@@ -114,4 +115,4 @@
|
||||
if(istype(user,/mob/dead/observer))
|
||||
return
|
||||
|
||||
del(user)
|
||||
qdel(user)
|
||||
|
||||
@@ -78,4 +78,4 @@
|
||||
|
||||
else
|
||||
if(riftimage)
|
||||
del(riftimage)
|
||||
qdel(riftimage)
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
// Apply changes when entering state
|
||||
/datum/universal_state/supermatter_cascade/OnEnter()
|
||||
set background = 1
|
||||
garbage_collector.garbage_collect = 0
|
||||
world << "<span class='sinister' style='font-size:22pt'>You are blinded by a brilliant flash of energy.</span>"
|
||||
|
||||
world << sound('sound/effects/cascade.ogg')
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
var/turf/T = pick(blobstart)
|
||||
var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 )
|
||||
spawn(rand(50, 300))
|
||||
del(bh)
|
||||
qdel(bh)
|
||||
/*
|
||||
if(3) //Leaving the code in so someone can try and delag it, but this event can no longer occur randomly, per SoS's request. --NEO
|
||||
command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
|
||||
@@ -71,7 +71,7 @@
|
||||
P.icon_state = "anom"
|
||||
P.name = "wormhole"
|
||||
spawn(rand(300,600))
|
||||
del(P)
|
||||
qdel(P)
|
||||
*/
|
||||
if(3)
|
||||
if((world.time/10)>=3600 && config.ninjas_allowed && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
/datum/event/portalstorm
|
||||
|
||||
Announce()
|
||||
command_alert("Subspace disruption detected around the vessel", "Anomaly Alert")
|
||||
LongTerm()
|
||||
|
||||
var/list/turfs = list( )
|
||||
var/turf/picked
|
||||
|
||||
for(var/turf/T in world)
|
||||
if(T.z < 5 && istype(T,/turf/simulated/floor))
|
||||
turfs += T
|
||||
|
||||
for(var/turf/T in world)
|
||||
if(prob(10) && T.z < 5 && istype(T,/turf/simulated/floor))
|
||||
spawn(50+rand(0,3000))
|
||||
picked = pick(turfs)
|
||||
var/obj/portal/P = new /obj/portal( T )
|
||||
P.target = picked
|
||||
P.creator = null
|
||||
P.icon = 'icons/obj/objects.dmi'
|
||||
P.failchance = 0
|
||||
P.icon_state = "anom"
|
||||
P.name = "wormhole"
|
||||
spawn(rand(100,150))
|
||||
del(P)
|
||||
/datum/event/portalstorm
|
||||
|
||||
Announce()
|
||||
command_alert("Subspace disruption detected around the vessel", "Anomaly Alert")
|
||||
LongTerm()
|
||||
|
||||
var/list/turfs = list( )
|
||||
var/turf/picked
|
||||
|
||||
for(var/turf/T in world)
|
||||
if(T.z < 5 && istype(T,/turf/simulated/floor))
|
||||
turfs += T
|
||||
|
||||
for(var/turf/T in world)
|
||||
if(prob(10) && T.z < 5 && istype(T,/turf/simulated/floor))
|
||||
spawn(50+rand(0,3000))
|
||||
picked = pick(turfs)
|
||||
var/obj/portal/P = new /obj/portal( T )
|
||||
P.target = picked
|
||||
P.creator = null
|
||||
P.icon = 'icons/obj/objects.dmi'
|
||||
P.failchance = 0
|
||||
P.icon_state = "anom"
|
||||
P.name = "wormhole"
|
||||
spawn(rand(100,150))
|
||||
qdel(P)
|
||||
|
||||
@@ -1,88 +1,88 @@
|
||||
/obj/effect/bhole
|
||||
name = "black hole"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
desc = "FUCK FUCK FUCK AAAHHH"
|
||||
icon_state = "bhole3"
|
||||
opacity = 1
|
||||
unacidable = 1
|
||||
density = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/effect/bhole/New()
|
||||
spawn(4)
|
||||
controller()
|
||||
|
||||
/obj/effect/bhole/proc/controller()
|
||||
while(src)
|
||||
|
||||
if(!isturf(loc))
|
||||
del(src)
|
||||
return
|
||||
|
||||
//DESTROYING STUFF AT THE EPICENTER
|
||||
for(var/mob/living/M in orange(1,src))
|
||||
del(M)
|
||||
for(var/obj/O in orange(1,src))
|
||||
del(O)
|
||||
for(var/turf/simulated/ST in orange(1,src))
|
||||
ST.ChangeTurf(/turf/space)
|
||||
|
||||
sleep(6)
|
||||
grav(10, 4, 10, 0 )
|
||||
sleep(6)
|
||||
grav( 8, 4, 10, 0 )
|
||||
sleep(6)
|
||||
grav( 9, 4, 10, 0 )
|
||||
sleep(6)
|
||||
grav( 7, 3, 40, 1 )
|
||||
sleep(6)
|
||||
grav( 5, 3, 40, 1 )
|
||||
sleep(6)
|
||||
grav( 6, 3, 40, 1 )
|
||||
sleep(6)
|
||||
grav( 4, 2, 50, 6 )
|
||||
sleep(6)
|
||||
grav( 3, 2, 50, 6 )
|
||||
sleep(6)
|
||||
grav( 2, 2, 75,25 )
|
||||
sleep(6)
|
||||
|
||||
|
||||
|
||||
//MOVEMENT
|
||||
if( prob(50) )
|
||||
src.anchored = 0
|
||||
step(src,pick(alldirs))
|
||||
src.anchored = 1
|
||||
|
||||
/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
|
||||
if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen
|
||||
del(src)
|
||||
return
|
||||
for(var/t = -r, t < r, t++)
|
||||
affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance)
|
||||
affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance)
|
||||
affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance)
|
||||
affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance)
|
||||
return
|
||||
|
||||
/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
|
||||
//Get turf at coordinate
|
||||
var/turf/T = locate(x, y, z)
|
||||
if(isnull(T)) return
|
||||
|
||||
//Pulling and/or ex_act-ing movable atoms in that turf
|
||||
if( prob(pull_chance) )
|
||||
for(var/obj/O in T.contents)
|
||||
if(O.anchored)
|
||||
O.ex_act(ex_act_force)
|
||||
else
|
||||
step_towards(O,src)
|
||||
for(var/mob/living/M in T.contents)
|
||||
step_towards(M,src)
|
||||
|
||||
//Destroying the turf
|
||||
if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) )
|
||||
var/turf/simulated/ST = T
|
||||
ST.ChangeTurf(/turf/space)
|
||||
/obj/effect/bhole
|
||||
name = "black hole"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
desc = "FUCK FUCK FUCK AAAHHH"
|
||||
icon_state = "bhole3"
|
||||
opacity = 1
|
||||
unacidable = 1
|
||||
density = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/effect/bhole/New()
|
||||
spawn(4)
|
||||
controller()
|
||||
|
||||
/obj/effect/bhole/proc/controller()
|
||||
while(src)
|
||||
|
||||
if(!isturf(loc))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
//DESTROYING STUFF AT THE EPICENTER
|
||||
for(var/mob/living/M in orange(1,src))
|
||||
qdel(M)
|
||||
for(var/obj/O in orange(1,src))
|
||||
qdel(O)
|
||||
for(var/turf/simulated/ST in orange(1,src))
|
||||
ST.ChangeTurf(/turf/space)
|
||||
|
||||
sleep(6)
|
||||
grav(10, 4, 10, 0 )
|
||||
sleep(6)
|
||||
grav( 8, 4, 10, 0 )
|
||||
sleep(6)
|
||||
grav( 9, 4, 10, 0 )
|
||||
sleep(6)
|
||||
grav( 7, 3, 40, 1 )
|
||||
sleep(6)
|
||||
grav( 5, 3, 40, 1 )
|
||||
sleep(6)
|
||||
grav( 6, 3, 40, 1 )
|
||||
sleep(6)
|
||||
grav( 4, 2, 50, 6 )
|
||||
sleep(6)
|
||||
grav( 3, 2, 50, 6 )
|
||||
sleep(6)
|
||||
grav( 2, 2, 75,25 )
|
||||
sleep(6)
|
||||
|
||||
|
||||
|
||||
//MOVEMENT
|
||||
if( prob(50) )
|
||||
src.anchored = 0
|
||||
step(src,pick(alldirs))
|
||||
src.anchored = 1
|
||||
|
||||
/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
|
||||
if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen
|
||||
qdel(src)
|
||||
return
|
||||
for(var/t = -r, t < r, t++)
|
||||
affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance)
|
||||
affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance)
|
||||
affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance)
|
||||
affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance)
|
||||
return
|
||||
|
||||
/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
|
||||
//Get turf at coordinate
|
||||
var/turf/T = locate(x, y, z)
|
||||
if(isnull(T)) return
|
||||
|
||||
//Pulling and/or ex_act-ing movable atoms in that turf
|
||||
if( prob(pull_chance) )
|
||||
for(var/obj/O in T.contents)
|
||||
if(O.anchored)
|
||||
O.ex_act(ex_act_force)
|
||||
else
|
||||
step_towards(O,src)
|
||||
for(var/mob/living/M in T.contents)
|
||||
step_towards(M,src)
|
||||
|
||||
//Destroying the turf
|
||||
if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) )
|
||||
var/turf/simulated/ST = T
|
||||
ST.ChangeTurf(/turf/space)
|
||||
return
|
||||
@@ -36,7 +36,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
if(clong.density || prob(10))
|
||||
clong.meteorhit(src)
|
||||
else
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
if(clong && prob(25))
|
||||
src.loc = clong.loc
|
||||
@@ -81,7 +81,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
if (isNotStationLevel(immrod.z))
|
||||
immrod.z = pick(config.station_levels)
|
||||
if(immrod.loc == end)
|
||||
del(immrod)
|
||||
qdel(immrod)
|
||||
sleep(10)
|
||||
for(var/obj/effect/immovablerod/imm in world)
|
||||
return
|
||||
|
||||
@@ -37,7 +37,7 @@ The "dust" will damage the hull of the station causin minor hull breaches.
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/strength = 2 //ex_act severity number
|
||||
var/life = 2 //how many things we hit before del(src)
|
||||
var/life = 2 //how many things we hit before qdel(src)
|
||||
|
||||
weak
|
||||
strength = 3
|
||||
@@ -107,8 +107,7 @@ The "dust" will damage the hull of the station causin minor hull breaches.
|
||||
life--
|
||||
if(life <= 0)
|
||||
walk(src,0)
|
||||
spawn(1)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return 0
|
||||
return
|
||||
|
||||
@@ -119,5 +118,5 @@ The "dust" will damage the hull of the station causin minor hull breaches.
|
||||
|
||||
|
||||
ex_act(severity)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
evil_tree.icon_living = evil_tree.icon_state
|
||||
evil_tree.icon_dead = evil_tree.icon_state
|
||||
evil_tree.icon_gib = evil_tree.icon_state
|
||||
del(xmas)
|
||||
qdel(xmas)
|
||||
|
||||
/obj/item/weapon/toy/xmas_cracker
|
||||
name = "xmas cracker"
|
||||
|
||||
@@ -59,4 +59,4 @@
|
||||
P.icon_state = "anom"
|
||||
P.name = "wormhole"
|
||||
spawn(rand(300,600))
|
||||
del(P)
|
||||
qdel(P)
|
||||
@@ -135,7 +135,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
for(var/obj/effect/landmark/start/S in landmarks_list)
|
||||
//Deleting Startpoints but we need the ai point to AI-ize people later
|
||||
if (S.name != "AI")
|
||||
del(S)
|
||||
qdel(S)
|
||||
world << "<FONT color='blue'><B>Enjoy the game!</B></FONT>"
|
||||
world << sound('sound/AI/welcome.ogg') // Skie
|
||||
//Holiday Round-start stuff ~Carn
|
||||
@@ -265,8 +265,8 @@ var/global/datum/controller/gameticker/ticker
|
||||
//Otherwise if its a verb it will continue on afterwards.
|
||||
sleep(300)
|
||||
|
||||
if(cinematic) del(cinematic) //end the cinematic
|
||||
if(temp_buckle) del(temp_buckle) //release everybody
|
||||
if(cinematic) qdel(cinematic) //end the cinematic
|
||||
if(temp_buckle) qdel(temp_buckle) //release everybody
|
||||
return
|
||||
|
||||
|
||||
@@ -280,7 +280,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
continue
|
||||
else
|
||||
player.create_character()
|
||||
del(player)
|
||||
qdel(player)
|
||||
|
||||
|
||||
proc/collect_minds()
|
||||
|
||||
@@ -26,6 +26,6 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
|
||||
var/area/skipjack = locate(/area/shuttle/skipjack/station)
|
||||
for (var/mob/living/M in skipjack.contents)
|
||||
//maybe send the player a message that they've gone home/been kidnapped? Someone responsible for vox lore should write that.
|
||||
del(M)
|
||||
qdel(M)
|
||||
for (var/obj/O in skipjack.contents)
|
||||
del(O) //no hiding in lockers or anything
|
||||
qdel(O) //no hiding in lockers or anything
|
||||
@@ -89,7 +89,7 @@ rcd light flash thingy on matter drain
|
||||
V.show_message("\blue You hear a loud electrical buzzing sound!", 2)
|
||||
spawn(50)
|
||||
explosion(get_turf(M), 0,1,2,3)
|
||||
del(M)
|
||||
qdel(M)
|
||||
else usr << "Out of uses."
|
||||
else usr << "That's not a machine."
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
M.enter_host(first_host.current)
|
||||
forge_meme_objectives(meme, first_host)
|
||||
|
||||
del original
|
||||
qdel(original)
|
||||
|
||||
log_admin("Created [memes.len] memes.")
|
||||
|
||||
|
||||
@@ -111,14 +111,14 @@
|
||||
!istype(A,/obj/machinery/field_generator) && \
|
||||
prob(detonation_chance))
|
||||
explosion(loc, power, power + power_step, power + power_step * 2, power + power_step * 3, 0)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/meteor/ex_act(severity)
|
||||
|
||||
if (severity < 4)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/meteor/big
|
||||
@@ -136,7 +136,7 @@
|
||||
if(!istype(A,/obj/machinery/power/emitter) && \
|
||||
!istype(A,/obj/machinery/field_generator))
|
||||
if(--src.hits <= 0)
|
||||
del(src) //Dont blow up singularity containment if we get stuck there.
|
||||
qdel(src) //Dont blow up singularity containment if we get stuck there.
|
||||
|
||||
if (A)
|
||||
for(var/mob/M in player_list)
|
||||
@@ -150,11 +150,11 @@
|
||||
if (--src.hits <= 0)
|
||||
if(prob(detonation_chance) && !istype(A, /obj/structure/grille))
|
||||
explosion(loc, power, power + power_step, power + power_step * 2, power + power_step * 3, 0)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/pickaxe))
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user