Added a garbage collector implementation based on rumors from Goon and proc references in released gooncode.

And holy shit it's fast
This commit is contained in:
Rob Nelson
2014-01-29 03:08:00 -08:00
parent 057b10bb22
commit cc66747f94
72 changed files with 244 additions and 184 deletions

View File

@@ -79,6 +79,7 @@
#include "code\controllers\_DynamicAreaLighting_TG.dm"
#include "code\controllers\configuration.dm"
#include "code\controllers\failsafe.dm"
#include "code\controllers\garbage.dm"
#include "code\controllers\hooks-defs.dm"
#include "code\controllers\hooks.dm"
#include "code\controllers\lighting_controller.dm"

View File

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

View File

@@ -90,6 +90,9 @@
if(welded)
return 0
// New GC does this sometimes
if(!loc) return
var/datum/gas_mixture/environment = loc.return_air()
var/environment_pressure = environment.return_pressure()

View File

@@ -109,6 +109,8 @@
//broadcast_status()
if(!on)
return 0
// New GC does this sometimes
if(!loc) return
var/datum/gas_mixture/environment = loc.return_air()

View File

@@ -30,7 +30,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)
@@ -39,7 +39,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

View File

@@ -119,7 +119,7 @@
icon_state = "exposed[have_node1][have_node2]"
if(!node1&&!node2)
del(src)
qdel(src)
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/initialize(var/suppress_icon_check=0)
node1 = findConnecting(initialize_directions)

View File

@@ -179,7 +179,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()
@@ -216,7 +216,7 @@
else
if(!node1&&!node2)
del(src) //TODO: silent deleting looks weird
qdel(src) //TODO: silent deleting looks weird
var/have_node1 = node1?1:0
var/have_node2 = node2?1:0
icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]"
@@ -739,7 +739,7 @@
icon_state = "manifold_[connected]_[unconnected]"
if(!connected)
del(src)
qdel(src)
return
@@ -970,7 +970,7 @@
overlays += new/image(con,dir=8)
if(!node1 && !node2 && !node3 && !node4)
del(src)
qdel(src)
return
@@ -1178,5 +1178,5 @@
if (meter.target == src)
new /obj/item/pipe_meter(T)
del(meter)
del(src)
qdel(src)

View File

@@ -0,0 +1,42 @@
#define GC_COLLECTIONS_PER_TICK 100
var/global/datum/controller/garbage_collector/garbage
/datum/controller/garbage_collector
var/list/queue=list()
var/waiting=0
var/turf/trashbin=null
New()
trashbin=locate(0,0,CENTCOMM_Z)
proc/AddTrash(var/atom/movable/A)
if(!A)
return
A.loc=trashbin
queue.Add(A)
waiting++
proc/Pop()
var/atom/movable/A = queue[1]
if(!A) return
if(!istype(A,/atom/movable))
testing("GC given a [A.type].")
del(A)
return
for(var/vname in A.vars)
switch(vname)
if("tag","bestF","type","parent_type","vars","type","loc","locs","vars", "parent", "parent_type","verbs","ckey","key","x","y","z","contents", "luminosity", "gender", "alpha", "color")
continue
else
A.vars[vname]=null
queue.Remove(A)
proc/process()
for(var/i=0;i<min(waiting,GC_COLLECTIONS_PER_TICK);i++)
if(waiting)
Pop()
waiting--
/proc/qdel(var/atom/A)
garbage.AddTrash(A)

View File

@@ -27,6 +27,7 @@ datum/controller/game_controller
var/nano_cost = 0
var/events_cost = 0
var/ticker_cost = 0
var/gc_cost = 0
var/total_cost = 0
var/last_thing_processed
@@ -66,6 +67,9 @@ datum/controller/game_controller/proc/setup()
if(!ticker)
ticker = new /datum/controller/gameticker()
if(!garbage)
garbage = new /datum/controller/garbage_collector()
setup_objects()
setupgenetics()
setupfactions()
@@ -222,8 +226,14 @@ datum/controller/game_controller/proc/process()
ticker.process()
ticker_cost = (world.timeofday - timer) / 10
// GC
timer = world.timeofday
last_thing_processed = garbage.type
garbage.process()
gc_cost = (world.timeofday - timer) / 10
//TIMING
total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + nano_cost + events_cost + ticker_cost
total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + nano_cost + events_cost + ticker_cost + gc_cost
var/end_time = world.timeofday
if(end_time < start_time)
@@ -258,7 +268,7 @@ datum/controller/game_controller/proc/process_machines()
var/i = 1
while(i<=machines.len)
var/obj/machinery/Machine = machines[i]
if(Machine)
if(Machine && Machine.loc)
last_thing_processed = Machine.type
if(Machine.process() != PROCESS_KILL)
if(Machine)
@@ -272,7 +282,7 @@ datum/controller/game_controller/proc/process_objects()
var/i = 1
while(i<=processing_objects.len)
var/obj/Object = processing_objects[i]
if(Object)
if(Object && Object.loc)
last_thing_processed = Object.type
Object.process()
i++

View File

@@ -253,7 +253,7 @@
ex_act(severity)
//Foreach goto(35)
//SN src = null
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
@@ -262,7 +262,7 @@
ex_act(severity)
//Foreach goto(108)
//SN src = null
del(src)
qdel(src)
return
if(3.0)
if (prob(25))
@@ -271,7 +271,7 @@
ex_act(severity)
//Foreach goto(181)
//SN src = null
del(src)
qdel(src)
return
else
return
@@ -353,12 +353,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

View File

@@ -162,7 +162,7 @@
loc=location
src.icon = I
spawn(duration)
del(src)
qdel(src)
///////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -142,15 +142,15 @@
/obj/effect/biomass/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(90))
del(src)
qdel(src)
return
if(3.0)
if (prob(50))
del(src)
qdel(src)
return
return

View File

@@ -118,5 +118,5 @@ The "dust" will damage the hull of the station causin minor hull breaches.
ex_act(severity)
del(src)
qdel(src)
return

View File

@@ -227,15 +227,15 @@
/obj/effect/spacevine/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(90))
del(src)
qdel(src)
return
if(3.0)
if (prob(50))
del(src)
qdel(src)
return
return

View File

@@ -127,7 +127,7 @@
/obj/effect/meteor/ex_act(severity)
if (severity < 4)
del(src)
qdel(src)
return
/obj/effect/meteor/big

View File

@@ -27,12 +27,12 @@
switch(severity)
if(1.0)
//SN src = null
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
//SN src = null
del(src)
qdel(src)
return
if(3.0)
if (prob(25))

View File

@@ -16,12 +16,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
@@ -268,21 +268,21 @@
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
if(2.0)
if(prob(50))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
if(3.0)
if(prob(25))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
return
/obj/machinery/sleeper/emp_act(severity)

View File

@@ -153,7 +153,7 @@
ex_act(severity)
//Foreach goto(35)
//SN src = null
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
@@ -162,7 +162,7 @@
ex_act(severity)
//Foreach goto(108)
//SN src = null
del(src)
qdel(src)
return
if(3.0)
if (prob(25))
@@ -171,7 +171,7 @@
ex_act(severity)
//Foreach goto(181)
//SN src = null
del(src)
qdel(src)
return
else
return
@@ -187,12 +187,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

View File

@@ -27,7 +27,7 @@
SetLuminosity(0)
/obj/machinery/bot/proc/explode()
del(src)
qdel(src)
/obj/machinery/bot/proc/healthcheck()
if (src.health <= 0)

View File

@@ -429,21 +429,21 @@
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
if(3.0)
if (prob(25))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
else
return

View File

@@ -41,11 +41,11 @@
/obj/machinery/computer/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(25))
del(src)
qdel(src)
return
if (prob(50))
for(var/x in verbs)

View File

@@ -96,7 +96,7 @@ for reference:
switch(severity)
if(1.0)
visible_message("\red <B>The barricade is blown apart!</B>")
del(src)
qdel(src)
return
if(2.0)
src.health -= 25
@@ -105,7 +105,7 @@ for reference:
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
del(src)
qdel(src)
return
meteorhit()
@@ -269,4 +269,4 @@ for reference:
explosion(src.loc,-1,-1,0)
if(src)
del(src)
qdel(src)

View File

@@ -166,10 +166,10 @@
/obj/machinery/door/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(2.0)
if(prob(25))
del(src)
qdel(src)
if(3.0)
if(prob(80))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread

View File

@@ -160,13 +160,13 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/hologram/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(2.0)
if (prob(50))
del(src)
qdel(src)
if(3.0)
if (prob(5))
del(src)
qdel(src)
return
/obj/machinery/hologram/blob_act()

View File

@@ -141,15 +141,15 @@ Class Procs:
/obj/machinery/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(25))
del(src)
qdel(src)
return
else
return

View File

@@ -158,12 +158,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
/obj/machinery/newscaster/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
src.isbroken=1
if(prob(50))
del(src)
qdel(src)
else
src.update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in.
return

View File

@@ -407,7 +407,7 @@ Status: []<BR>"},
/obj/machinery/porta_turret/ex_act(severity)
if(severity >= 3) // turret dies if an explosion touches it!
del(src)
qdel(src)
else
src.die()
@@ -419,7 +419,7 @@ Status: []<BR>"},
invisibility=0
src.spark_system.start() // creates some sparks because they look cool
src.density=1
del(cover) // deletes the cover - no need on keeping it there!
qdel(cover) // deletes the cover - no need on keeping it there!

View File

@@ -29,12 +29,12 @@
ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
new /obj/item/weapon/circuitboard/recharge_station(src.loc)
del(src)
qdel(src)
return
if(3.0)
if (prob(25))

View File

@@ -92,13 +92,13 @@
switch(severity)
if(1.0)
if (prob(75))
del(src)
qdel(src)
if(2.0)
if (prob(50))
del(src)
qdel(src)
if(3.0)
if (prob(25))
del(src)
qdel(src)
return
/obj/machinery/shield/emp_act(severity)
@@ -164,7 +164,7 @@
/obj/machinery/shieldgen/Del()
for(var/obj/machinery/shield/shield_tile in deployed_shields)
del(shield_tile)
qdel(shield_tile)
..()

View File

@@ -101,12 +101,12 @@
if(1.0)
if(prob(50))
src.dump_everything() //So suits dont survive all the time
del(src)
qdel(src)
return
if(2.0)
if(prob(50))
src.dump_everything()
del(src)
qdel(src)
return
else
return

View File

@@ -309,7 +309,7 @@
sleep(3)
flick("explosion", src)
spawn(13)
del(src)
qdel(src)
/obj/machinery/turretid
name = "Turret deactivation control"

View File

@@ -84,11 +84,11 @@
/obj/machinery/vending/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if(prob(25))

View File

@@ -23,7 +23,7 @@
/obj/effect/decal/mecha_wreckage/ex_act(severity)
if(severity < 2)
spawn
del src
qdel(src)
return
/obj/effect/decal/mecha_wreckage/bullet_act(var/obj/item/projectile/Proj)

View File

@@ -56,7 +56,7 @@
/obj/effect/alien/resin/proc/healthcheck()
if(health <=0)
density = 0
del(src)
qdel(src)
return
/obj/effect/alien/resin/bullet_act(var/obj/item/projectile/Proj)
@@ -253,13 +253,13 @@ Alien plants should do something if theres a lot of poison
/obj/effect/alien/weeds/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(2.0)
if (prob(50))
del(src)
qdel(src)
if(3.0)
if (prob(5))
del(src)
qdel(src)
return
/obj/effect/alien/weeds/attackby(var/obj/item/weapon/W, var/mob/user)

View File

@@ -800,7 +800,7 @@ steam.start() -- spawns the effect
ex_act(severity)
del(src)
qdel(src)
blob_act()
del(src)

View File

@@ -135,15 +135,15 @@
/obj/effect/glowshroom/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
del(src)
qdel(src)
return
else
return

View File

@@ -11,13 +11,13 @@
/obj/effect/spider/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(2.0)
if (prob(50))
del(src)
qdel(src)
if(3.0)
if (prob(5))
del(src)
qdel(src)
return
/obj/effect/spider/attackby(var/obj/item/weapon/W, var/mob/user)

View File

@@ -46,15 +46,15 @@
/obj/item/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
del(src)
qdel(src)
return
else
return

View File

@@ -30,10 +30,10 @@
burst()
switch(severity)
if (1)
del(src)
qdel(src)
if (2)
if (prob(50))
del(src)
qdel(src)
/obj/item/latexballon/bullet_act()
burst()

View File

@@ -8,11 +8,11 @@ obj/structure/blob_act()
obj/structure/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if(prob(50))
del(src)
qdel(src)
return
if(3.0)
return

View File

@@ -138,19 +138,19 @@
for(var/atom/movable/A as mob|obj in src)//pulls everything out of the locker and hits it with an explosion
A.loc = src.loc
A.ex_act(severity++)
del(src)
qdel(src)
if(2)
if(prob(50))
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
A.ex_act(severity++)
del(src)
qdel(src)
if(3)
if(prob(5))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
A.ex_act(severity++)
del(src)
qdel(src)
/obj/structure/closet/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage

View File

@@ -452,18 +452,18 @@
switch(severity)
if(1.0)
for(var/obj/O in src.contents)
del(O)
del(src)
qdel(O)
qdel(src)
return
if(2.0)
for(var/obj/O in src.contents)
if(prob(50))
del(O)
del(src)
qdel(O)
qdel(src)
return
if(3.0)
if (prob(50))
del(src)
qdel(src)
return
else
return

View File

@@ -95,7 +95,7 @@
new /obj/item/weapon/shard( src.loc )
if (occupant)
dump()
del(src)
qdel(src)
if (2)
if (prob(50))
src.health -= 15

View File

@@ -184,19 +184,19 @@
ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(30))
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal)
new remains(loc)
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal)
new remains(loc)
del(src)
qdel(src)
return
else
return
@@ -245,17 +245,17 @@
ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(30))
new /obj/effect/decal/remains/human(loc)
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
new /obj/effect/decal/remains/human(loc)
del(src)
qdel(src)
return
else
return

View File

@@ -22,13 +22,13 @@
icon='icons/fence-ns.dmi'
/obj/structure/grille/ex_act(severity)
del(src)
qdel(src)
/obj/structure/grille/blob_act()
del(src)
qdel(src)
/obj/structure/grille/meteorhit(var/obj/M)
del(src)
qdel(src)
/obj/structure/grille/Bumped(atom/user)

View File

@@ -15,7 +15,7 @@
if (1)
new /obj/item/weapon/shard( src.loc )
Break()
del(src)
qdel(src)
if (2)
if (prob(50))
src.health -= 15
@@ -37,13 +37,13 @@
if (prob(75))
new /obj/item/weapon/shard( src.loc )
Break()
del(src)
qdel(src)
/obj/structure/lamarr/meteorhit(obj/O as obj)
new /obj/item/weapon/shard( src.loc )
Break()
del(src)
qdel(src)
/obj/structure/lamarr/proc/healthcheck()

View File

@@ -39,10 +39,10 @@
/obj/structure/lattice/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
del(src)
qdel(src)
return
if(3.0)
return

View File

@@ -138,7 +138,7 @@
var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]")
for(var/i = 3, i <= oreAmount, i++)
new ore(get_turf(src))
del(src)
qdel(src)
ex_act(severity = 1)
switch(severity)

View File

@@ -43,13 +43,13 @@
/obj/structure/mopbucket/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
del(src)
qdel(src)
return

View File

@@ -36,21 +36,21 @@
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
return
@@ -204,21 +204,21 @@
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
qdel(src)
return
return

View File

@@ -8,19 +8,19 @@
/obj/structure/sign/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
del(src)
qdel(src)
return
if(3.0)
del(src)
qdel(src)
return
else
return
/obj/structure/sign/blob_act()
del(src)
qdel(src)
return
/obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction

View File

@@ -10,15 +10,15 @@
/obj/structure/stool/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
del(src)
qdel(src)
return
return

View File

@@ -44,12 +44,12 @@
/obj/structure/table/proc/destroy()
new parts(loc)
density = 0
del(src)
qdel(src)
/obj/structure/rack/proc/destroy()
new parts(loc)
density = 0
del(src)
qdel(src)
/obj/structure/table/update_icon()
spawn(2) //So it properly updates when deleting
@@ -248,11 +248,11 @@
/obj/structure/table/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(25))
@@ -581,14 +581,14 @@
/obj/structure/rack/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(2.0)
del(src)
qdel(src)
if(prob(50))
new /obj/item/weapon/rack_parts(src.loc)
if(3.0)
if(prob(25))
del(src)
qdel(src)
new /obj/item/weapon/rack_parts(src.loc)
/obj/structure/rack/blob_act()

View File

@@ -61,9 +61,10 @@ obj/structure/ex_act(severity)
if(1.0)
for(var/atom/movable/AM in contents)
AM.loc = loc
// TODO: What the fuck are you doing
AM.ex_act(severity++)
del(src)
qdel(src)
return
if(2.0)
if(prob(50))
@@ -71,7 +72,7 @@ obj/structure/ex_act(severity)
AM.loc = loc
AM.ex_act(severity++)
del(src)
qdel(src)
return
if(3.0)
return

View File

@@ -63,13 +63,13 @@ var/list/mechtoys = list(
/obj/structure/plasticflaps/ex_act(severity)
switch(severity)
if (1)
del(src)
qdel(src)
if (2)
if (prob(50))
del(src)
qdel(src)
if (3)
if (prob(5))
del(src)
qdel(src)
/obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates
name = "\improper Airtight plastic flaps"

View File

@@ -56,20 +56,20 @@
switch(severity)
if(1.0)
for(var/obj/item/weapon/book/b in contents)
del(b)
del(src)
qdel(b)
qdel(src)
return
if(2.0)
for(var/obj/item/weapon/book/b in contents)
if (prob(50)) b.loc = (get_turf(src))
else del(b)
del(src)
else qdel(b)
qdel(src)
return
if(3.0)
if (prob(50))
for(var/obj/item/weapon/book/b in contents)
b.loc = (get_turf(src))
del(src)
qdel(src)
return
else
return

View File

@@ -135,7 +135,7 @@ var/list/artifact_spawn = list() // Runtime fix for geometry loading before cont
/turf/unsimulated/mineral/ex_act(severity)
switch(severity)
if(3.0)
return
GetDrilled()
if(2.0)
if (prob(70))
mined_ore = 1 //some of the stuff gets blown up

View File

@@ -298,10 +298,10 @@
/obj/machinery/photocopier/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(2.0)
if(prob(50))
del(src)
qdel(src)
else
if(toner > 0)
new /obj/effect/decal/cleanable/blood/oil(get_turf(src))

View File

@@ -20,13 +20,13 @@
if(1.0)
explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess
if(src)
del(src)
qdel(src)
return
if(2.0)
if(prob((fuel/10)-stability))
explosion(get_turf(src), 1, 2, 3, 5)
if(src)
del(src)
qdel(src)
return
stability -= 40
if(3.0)

View File

@@ -1055,7 +1055,7 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
//set_broken() //now Del() do what we need
if (cell)
cell.ex_act(1.0) // more lags woohoo
del(src)
qdel(src)
return
if(2.0)
if (prob(50))

View File

@@ -151,16 +151,16 @@
/obj/structure/cable/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(2.0)
if (prob(50))
new/obj/item/weapon/cable_coil(src.loc, src.d1 ? 2 : 1, _color)
del(src)
qdel(src)
if(3.0)
if (prob(25))
new/obj/item/weapon/cable_coil(src.loc, src.d1 ? 2 : 1, _color)
del(src)
qdel(src)
return
// the cable coil object, used for laying cable

View File

@@ -130,17 +130,17 @@
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if (prob(50))
corrupt()
if(3.0)
if (prob(25))
del(src)
qdel(src)
return
if (prob(25))
corrupt()

View File

@@ -22,12 +22,12 @@
switch(severity)
if(1.0)
ChangeTurf(/turf/space)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
ChangeTurf(/turf/space)
del(src)
qdel(src)
return
else
return

View File

@@ -574,7 +574,7 @@
/obj/machinery/light/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(75))

View File

@@ -67,7 +67,7 @@
/obj/effect/accelerated_particle/ex_act(severity)
del(src)
qdel(src)
return

View File

@@ -137,15 +137,15 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
/obj/structure/particle_accelerator/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(25))
del(src)
qdel(src)
return
else
return
@@ -324,15 +324,15 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
/obj/machinery/particle_accelerator/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(25))
del(src)
qdel(src)
return
else
return

View File

@@ -66,7 +66,7 @@ var/global/list/uneatable = list(
switch(severity)
if(1.0)
if(prob(25))
del(src)
qdel(src)
return
else
energy += 50

View File

@@ -157,14 +157,14 @@ var/list/solars_list = list()
/obj/machinery/power/solar/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(prob(15))
new /obj/item/weapon/shard( src.loc )
return
if(2.0)
if (prob(25))
new /obj/item/weapon/shard( src.loc )
del(src)
qdel(src)
return
if (prob(50))
broken()
@@ -520,7 +520,7 @@ Manual Tracking Direction:"}
switch(severity)
if(1.0)
//SN src = null
del(src)
qdel(src)
return
if(2.0)
if (prob(50))

View File

@@ -71,11 +71,11 @@
/obj/machinery/chem_dispenser/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
/obj/machinery/chem_dispenser/blob_act()
@@ -288,19 +288,19 @@
/obj/machinery/chem_master/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
/obj/machinery/chem_master/blob_act()
if (prob(50))
del(src)
qdel(src)
/obj/machinery/chem_master/meteorhit()
del(src)
qdel(src)
return
/obj/machinery/chem_master/power_change()

View File

@@ -49,17 +49,17 @@
ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
new /obj/effect/effect/water(src.loc)
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
new /obj/effect/effect/water(src.loc)
del(src)
qdel(src)
return
else
return
@@ -67,7 +67,7 @@
blob_act()
if(prob(50))
new /obj/effect/effect/water(src.loc)
del(src)
qdel(src)

View File

@@ -343,10 +343,10 @@ var/list/valid_secondary_effect_types = list(\
/obj/machinery/artifact/ex_act(severity)
switch(severity)
if(1.0) del src
if(1.0) qdel(src)
if(2.0)
if (prob(50))
del src
qdel(src)
else
if(my_effect.trigger == TRIGGER_FORCE || my_effect.trigger == TRIGGER_HEAT)
my_effect.ToggleActivate()

View File

@@ -79,6 +79,7 @@
<h2 class="date">In development</h2>
<h3 class="author">N3X15 updated:</h3>
<ul class="changes bgimages16">
<li class="experiment">All objects caught in explosions are now deleted using a new technique. This should make explosions nearly lagless.</li>
<li class="experiment">Xenoarch updated from Bay.</li>
<li class="rscadd">Ghosts can no longer interact with an object if it's blessed with holy water.</li>
<li class="rscadd">Plant pods now spawn Dionae.</li>