mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
-tg- atom pooling system, qdel changes
This commit first and foremost ports the -tg- atom pooling system, and removes the old experimental system entirely. Secondly, this PR modifies the qdel system to use a -tg- lookalike "destroy hint" system, which means that individual objects can tell qdel what to do with them beyond taking care of things they need to delete. This ties into the atom pooling system via a new hint define, QDEL_HINT_PUTINPOOL, which will place the atom in the pool instead of deleting it as per standard. Emitter beams are now fully pooled. Qdel now has semi-compatibility with all datum types, however it is not the same as -tg-'s "Queue everything!" system. It simply passes it through the GC immediately and adds it to the "hard del" lists. This means that reagents can be qdel'ed, but there is no purpose as of yet, as it is more or less the same as just deleting them, with the added effect of adding logs of them being deleted to the garbage collector.
This commit is contained in:
@@ -35,7 +35,7 @@ Pipelines + Other Objects -> Pipe network
|
||||
M.forceMove(src.loc)
|
||||
if(pipe_image)
|
||||
del(pipe_image) //we have to del it, or it might keep a ref somewhere else
|
||||
..()
|
||||
return ..()
|
||||
|
||||
// Find a connecting /obj/machinery/atmospherics in specified direction.
|
||||
/obj/machinery/atmospherics/proc/findConnecting(var/direction)
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
if(air_temporary && loc)
|
||||
loc.assume_air(air_temporary)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params)
|
||||
if (istype(src, /obj/machinery/atmospherics/pipe/tank))
|
||||
@@ -252,7 +252,7 @@
|
||||
if(node2)
|
||||
node2.disconnect(src)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/pipeline_expansion()
|
||||
return list(node1, node2)
|
||||
@@ -580,7 +580,7 @@
|
||||
if(node3)
|
||||
node3.disconnect(src)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
@@ -820,7 +820,7 @@
|
||||
if(node4)
|
||||
node4.disconnect(src)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
@@ -1070,7 +1070,7 @@
|
||||
if(node)
|
||||
node.disconnect(src)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/cap/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node)
|
||||
@@ -1188,7 +1188,7 @@
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/pipeline_expansion()
|
||||
return list(node1)
|
||||
@@ -1388,7 +1388,7 @@
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/vent/pipeline_expansion()
|
||||
return list(node1)
|
||||
|
||||
@@ -163,6 +163,7 @@
|
||||
if(T.active_hotspot == src)
|
||||
T.active_hotspot = null
|
||||
loc = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/hotspot/proc/DestroyTurf()
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
//defines that give qdel hints. these can be given as a return in destory() or by calling
|
||||
|
||||
#define QDEL_HINT_QUEUE 0 //qdel should queue the object for deletion.
|
||||
#define QDEL_HINT_LETMELIVE 1 //qdel should let the object live after calling destory.
|
||||
#define QDEL_HINT_IWILLGC 2 //functionally the same as the above. qdel should assume the object will gc on its own, and not check it.
|
||||
#define QDEL_HINT_HARDDEL_NOW 4 //qdel should assume this object won't gc, and hard del it post haste.
|
||||
#define QDEL_HINT_PUTINPOOL 5 //qdel will put this object in the atom pool.
|
||||
@@ -31,127 +31,6 @@
|
||||
. = i
|
||||
i = findtext(A, B, i + 1)
|
||||
|
||||
/**
|
||||
* Object pooling.
|
||||
*
|
||||
* If this file is named experimental,
|
||||
* well treat this implementation as experimental experimental (redundancy intended).
|
||||
*
|
||||
* WARNING, only supports /atom/movable (/mob and /obj)
|
||||
*/
|
||||
|
||||
// Uncomment to show debug messages.
|
||||
//#define DEBUG_OBJECT_POOL
|
||||
|
||||
#define MAINTAINING_OBJECT_POOL_COUNT 500
|
||||
|
||||
var/global/list/masterPool = new
|
||||
|
||||
// Read-only or compile-time vars and special exceptions.
|
||||
var/list/exclude = list("inhand_states", "loc", "locs", "parent_type", "vars", "verbs", "type", "x", "y", "z")
|
||||
|
||||
/*
|
||||
* @args
|
||||
* A, object type
|
||||
* B, location to spawn
|
||||
*
|
||||
* Example call: getFromPool(/obj/item/weapon/shard, loc)
|
||||
*/
|
||||
/proc/getFromPool()
|
||||
var/A = args[1]
|
||||
var/list/B = list()
|
||||
B += (args - A)
|
||||
if(length(masterPool["[A]"]) <= 0)
|
||||
#ifdef DEBUG_OBJECT_POOL
|
||||
world << text("DEBUG_OBJECT_POOL: new proc has been called ([]).", A)
|
||||
#endif
|
||||
//so the GC knows we're pooling this type.
|
||||
if(isnull(masterPool["[A]"]))
|
||||
masterPool["[A]"] = list(new A)
|
||||
if(B && B.len)
|
||||
return new A(arglist(B))
|
||||
else
|
||||
return new A()
|
||||
|
||||
var/atom/movable/O = masterPool["[A]"][1]
|
||||
masterPool["[A]"] -= O
|
||||
|
||||
#ifdef DEBUG_OBJECT_POOL
|
||||
world << text("DEBUG_OBJECT_POOL: getFromPool([]) [] left.", A, length(masterPool[A]))
|
||||
#endif
|
||||
if(!O || !istype(O))
|
||||
O = new A(arglist(B))
|
||||
else
|
||||
if(length(B))
|
||||
O.loc = B[1]
|
||||
O.New(arglist(B))
|
||||
return O
|
||||
|
||||
/*
|
||||
* @args
|
||||
* A, object instance
|
||||
*
|
||||
* @return
|
||||
* -1, if A is not a movable atom
|
||||
*
|
||||
* Example call: returnToPool(src)
|
||||
*/
|
||||
/proc/returnToPool(const/atom/movable/AM)
|
||||
if(istype(AM.loc,/mob/living))
|
||||
var/mob/living/L = AM.loc
|
||||
L.unEquip(AM)
|
||||
if(length(masterPool["[AM.type]"]) > MAINTAINING_OBJECT_POOL_COUNT)
|
||||
#ifdef DEBUG_OBJECT_POOL
|
||||
world << text("DEBUG_OBJECT_POOL: returnToPool([]) exceeds [] discarding...", AM.type, MAINTAINING_OBJECT_POOL_COUNT)
|
||||
#endif
|
||||
|
||||
qdel(AM, 1)
|
||||
return
|
||||
|
||||
if(isnull(masterPool["[AM.type]"]))
|
||||
masterPool["[AM.type]"] = list()
|
||||
|
||||
AM.resetVariables()
|
||||
masterPool["[AM.type]"] += AM
|
||||
|
||||
#ifdef DEBUG_OBJECT_POOL
|
||||
world << text("DEBUG_OBJECT_POOL: returnToPool([]) [] left.", AM.type, length(masterPool["[AM.type]"]))
|
||||
#endif
|
||||
|
||||
#undef MAINTAINING_OBJECT_POOL_COUNT
|
||||
|
||||
#ifdef DEBUG_OBJECT_POOL
|
||||
#undef DEBUG_OBJECT_POOL
|
||||
#endif
|
||||
|
||||
/*
|
||||
* if you have a variable that needed to be preserve, override this and call ..
|
||||
*
|
||||
* example
|
||||
*
|
||||
* /obj/item/resetVariables()
|
||||
* ..("var1", "var2", "var3")
|
||||
*
|
||||
* however, if the object has a child type an it has overridden resetVariables()
|
||||
* this should be
|
||||
*
|
||||
* /obj/item/resetVariables()
|
||||
* ..("var1", "var2", "var3", args)
|
||||
*
|
||||
* /obj/item/weapon/resetVariables()
|
||||
* ..("var4")
|
||||
*/
|
||||
/atom/movable/proc/resetVariables()
|
||||
loc = null
|
||||
|
||||
var/list/exclude = global.exclude + args // explicit var exclusion
|
||||
|
||||
for(var/key in vars)
|
||||
if(key in exclude)
|
||||
continue
|
||||
|
||||
vars[key] = initial(vars[key])
|
||||
|
||||
/proc/isInTypes(atom/Object, types)
|
||||
var/prototype = Object.type
|
||||
Object = null
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
/datum/action/Destroy()
|
||||
if(owner)
|
||||
Remove(owner)
|
||||
return ..()
|
||||
|
||||
/datum/action/proc/Grant(mob/living/T)
|
||||
if(owner)
|
||||
|
||||
+30
-18
@@ -85,36 +85,48 @@ var/datum/garbage_collector/garbageCollector
|
||||
|
||||
dels_count++
|
||||
|
||||
/datum/garbage_collector/proc/hardDel(const/datum/D)
|
||||
WARNING("GC hard-delling [D.type].")
|
||||
gc_hard_del_types |= D.type
|
||||
del(D)
|
||||
garbageCollector.hard_dels++
|
||||
garbageCollector.dels_count++
|
||||
|
||||
/*
|
||||
* NEVER USE THIS FOR ANYTHING OTHER THAN /atom/movable
|
||||
* OTHER TYPES CANNOT BE QDEL'D BECAUSE THEIR LOC IS LOCKED OR THEY DON'T HAVE ONE.
|
||||
*/
|
||||
/proc/qdel(const/atom/movable/AM, ignore_pooling = 0)
|
||||
if(isnull(AM))
|
||||
/proc/qdel(var/datum/D, ignore_pooling = 0)
|
||||
if(isnull(D))
|
||||
return
|
||||
|
||||
if(isnull(garbageCollector))
|
||||
del(AM)
|
||||
del(D)
|
||||
return
|
||||
|
||||
if(!istype(AM))
|
||||
WARNING("qdel() passed object of type [AM.type]. qdel() can only handle /atom/movable types.")
|
||||
gc_hard_del_types |= AM.type
|
||||
del(AM)
|
||||
garbageCollector.hard_dels++
|
||||
garbageCollector.dels_count++
|
||||
if(!istype(D))
|
||||
WARNING("qdel() passed object of type [D.type]. qdel() can only handle /datum/ types.")
|
||||
del(D) //no clue what could even do this, but just in case.
|
||||
return
|
||||
|
||||
//We are object pooling this.
|
||||
if(("[AM.type]" in masterPool) && !ignore_pooling)
|
||||
returnToPool(AM)
|
||||
return
|
||||
|
||||
if(isnull(AM.gcDestroyed))
|
||||
if(isnull(D.gcDestroyed))
|
||||
// Let our friend know they're about to get fucked up.
|
||||
AM.Destroy()
|
||||
var/hint = D.Destroy()
|
||||
|
||||
garbageCollector.addTrash(AM)
|
||||
switch(hint)
|
||||
if(QDEL_HINT_QUEUE) //qdel should queue the object for deletion
|
||||
garbageCollector.addTrash(D)
|
||||
if(QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destroy.
|
||||
return
|
||||
if(QDEL_HINT_IWILLGC) //functionally the same as the above. qdel should assume the object will gc on its own, and not check it.
|
||||
return
|
||||
if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste.
|
||||
garbageCollector.hardDel(D)
|
||||
if (QDEL_HINT_PUTINPOOL) //qdel will put this object in the pool.
|
||||
PlaceInPool(D,0)
|
||||
else
|
||||
world << "WARNING GC DID NOT GET A RETURN VALUE FOR [D], [D.type]!"
|
||||
garbageCollector.addTrash(D)
|
||||
|
||||
/datum/controller
|
||||
var/processing = 0
|
||||
@@ -128,7 +140,7 @@ var/datum/garbage_collector/garbageCollector
|
||||
* Called BEFORE qdel moves shit.
|
||||
*/
|
||||
/datum/proc/Destroy()
|
||||
del(src)
|
||||
return QDEL_HINT_HARDDEL_NOW //qdel can't handle datums, therefore tell it to immediately del
|
||||
|
||||
/client/proc/qdel_toggle()
|
||||
set name = "Toggle qdel Behavior"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
for(var/spell in contents)
|
||||
del(spell)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/wizard/targeted/trigger/cast(list/targets)
|
||||
for(var/mob/living/target in targets)
|
||||
|
||||
@@ -45,6 +45,7 @@ var/global/list/ghdel_profiling = list()
|
||||
|
||||
// Idea by ChuckTheSheep to make the object even more unreferencable.
|
||||
invisibility = 101
|
||||
return ..()
|
||||
|
||||
/atom/proc/CheckParts()
|
||||
return
|
||||
|
||||
@@ -24,8 +24,9 @@
|
||||
|
||||
|
||||
/atom/movable/Destroy()
|
||||
. = ..()
|
||||
..()
|
||||
loc = null
|
||||
return QDEL_HINT_QUEUE
|
||||
|
||||
/proc/delete_profile(var/type, code = 0)
|
||||
if(!ticker || !ticker.current_state < 3) return
|
||||
|
||||
@@ -126,4 +126,4 @@
|
||||
if(contents)
|
||||
for(var/mob/M in contents)
|
||||
M.loc = src.loc
|
||||
..()
|
||||
return ..()
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
del(ghostimage)
|
||||
ghostimage = null;
|
||||
updateallghostimages()
|
||||
return ..()
|
||||
|
||||
/mob/camera/blob/Login()
|
||||
..()
|
||||
|
||||
@@ -454,4 +454,4 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
var/obj/D = new /obj/item/weapon/disk/nuclear(pick(blobstart))
|
||||
message_admins("[src] has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).")
|
||||
log_game("[src] has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).")
|
||||
..()
|
||||
return ..()
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
bug = null
|
||||
del(wires)
|
||||
cameranet.removeCamera(src) //Will handle removal from the camera network and the chunks, so we don't need to worry about that
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/camera/emp_act(severity)
|
||||
if(!isEmpProof())
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
//This could all be done better, but it works for now.
|
||||
/obj/machinery/computer/HolodeckControl/Destroy()
|
||||
emergencyShutdown()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/HolodeckControl/meteorhit(var/obj/O as obj)
|
||||
emergencyShutdown()
|
||||
@@ -442,7 +442,7 @@
|
||||
|
||||
|
||||
/obj/structure/holowindow/Destroy()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/holo
|
||||
damtype = STAMINA
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
|
||||
/obj/structure/AIcore/deactivated/Destroy()
|
||||
empty_playable_ai_cores -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/AIcore/deactivated/attackby(var/obj/item/W, var/mob/user, params)
|
||||
if(istype(W, /obj/item/device/aicard))//Is it?
|
||||
|
||||
@@ -118,4 +118,4 @@
|
||||
|
||||
/obj/machinery/computer/atmos_alert/Destroy()
|
||||
radio_controller.remove_object(src, receive_frequency)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
@@ -490,7 +490,7 @@ var/shuttle_call/shuttle_calls[0]
|
||||
log_game("All the AIs, comm consoles and boards are destroyed. Shuttle called.")
|
||||
message_admins("All the AIs, comm consoles and boards are destroyed. Shuttle called.", 1)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/circuitboard/communications/Destroy()
|
||||
|
||||
@@ -513,4 +513,4 @@ var/shuttle_call/shuttle_calls[0]
|
||||
log_game("All the AIs, comm consoles and boards are destroyed. Shuttle called.")
|
||||
message_admins("All the AIs, comm consoles and boards are destroyed. Shuttle called.", 1)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
C.loc = src.loc
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
A.state = 3
|
||||
A.icon_state = "3"
|
||||
else
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
var/obj/item/weapon/circuitboard/powermonitor/M = new /obj/item/weapon/circuitboard/powermonitor( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
|
||||
@@ -45,7 +45,7 @@ var/prison_shuttle_timeleft = 0
|
||||
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
A.state = 3
|
||||
A.icon_state = "3"
|
||||
else
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
var/obj/item/weapon/reagent_containers/glass/B = beaker
|
||||
if(beaker)
|
||||
B.loc = get_step(T, SOUTH) //Beaker is carefully ejected from the wreckage of the cryotube
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
|
||||
if(O.loc == user) //no you can't pull things out of your ass
|
||||
|
||||
@@ -56,8 +56,7 @@
|
||||
air_update_turf(1)
|
||||
update_freelok_sight()
|
||||
airlocks -= src
|
||||
..()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/Bumped(atom/AM)
|
||||
if(p_open || operating) return
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
density = 0
|
||||
if(health == 0)
|
||||
playsound(src, "shatter", 70, 1)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/door/window/proc/open_and_close()
|
||||
|
||||
@@ -14,7 +14,7 @@ var/list/doppler_arrays = list()
|
||||
|
||||
/obj/machinery/doppler_array/Destroy()
|
||||
doppler_arrays -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/doppler_array/process()
|
||||
return PROCESS_KILL
|
||||
|
||||
@@ -136,7 +136,7 @@ Class Procs:
|
||||
if (src in machines)
|
||||
removeAtProcessing()
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/process() // If you dont use process or power why are you here
|
||||
return PROCESS_KILL
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
/obj/machinery/navbeacon/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src, freq)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
// set the transponder codes assoc list from codes_txt
|
||||
/obj/machinery/navbeacon/proc/set_codes()
|
||||
|
||||
@@ -116,7 +116,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
|
||||
/obj/machinery/newscaster/Destroy()
|
||||
allCasters -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/newscaster/update_icon()
|
||||
if(!ispowered || isbroken)
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
/obj/machinery/porta_turret/Destroy()
|
||||
//deletes its own cover with it
|
||||
qdel(cover) // qdel
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/porta_turret/proc/isLocked(mob/user)
|
||||
if(ailock && (isrobot(user) || isAI(user)))
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
opacity = 0
|
||||
density = 0
|
||||
air_update_turf(1)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shield/Move()
|
||||
var/turf/T = loc
|
||||
@@ -154,7 +154,7 @@
|
||||
/obj/machinery/shieldgen/Destroy()
|
||||
for(var/obj/machinery/shield/shield_tile in deployed_shields)
|
||||
qdel(shield_tile)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/shieldgen/proc/shields_up()
|
||||
@@ -523,7 +523,7 @@
|
||||
src.cleanup(2)
|
||||
src.cleanup(4)
|
||||
src.cleanup(8)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwallgen/bullet_act(var/obj/item/projectile/Proj)
|
||||
storedpower -= Proj.damage
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
/obj/machinery/power/singularity_beacon/Destroy()
|
||||
if(active)
|
||||
Deactivate()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
//stealth direct power usage
|
||||
/obj/machinery/power/singularity_beacon/process()
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
|
||||
@@ -408,7 +408,7 @@
|
||||
/obj/machinery/teleport/station/Destroy()
|
||||
if(teleporter_hub)
|
||||
teleporter_hub.update_icon()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/teleport/station/attackby(var/obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/device/multitool) && !panel_open)
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
if(coin)
|
||||
del(coin) // qdel
|
||||
coin = null
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/vending/ex_act(severity)
|
||||
switch(severity)
|
||||
|
||||
@@ -99,8 +99,7 @@
|
||||
/obj/mecha/Destroy()
|
||||
src.go_out()
|
||||
mechas_list -= src //global mech list
|
||||
..()
|
||||
return
|
||||
return ..()
|
||||
|
||||
////////////////////////
|
||||
////// Helpers /////////
|
||||
@@ -378,7 +377,7 @@
|
||||
G.destroyed = 1
|
||||
G.icon_state = "[initial(G.icon_state)]-b"
|
||||
G.density = 0
|
||||
getFromPool(/obj/item/stack/rods, get_turf(G.loc))
|
||||
PoolOrNew(/obj/item/stack/rods, get_turf(G.loc))
|
||||
breakthrough = 1
|
||||
|
||||
else if(istype(obstacle, /obj/structure/table))
|
||||
@@ -658,7 +657,7 @@
|
||||
E.forceMove(T)
|
||||
E.destroy()
|
||||
spawn(0)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/mecha/ex_act(severity)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
A.loc = loc
|
||||
step_rand(A)
|
||||
cargo.Cut()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/mecha/working/ripley/go_out()
|
||||
..()
|
||||
@@ -148,5 +148,4 @@
|
||||
if(T)
|
||||
T.Entered(A)
|
||||
step_rand(A)
|
||||
..()
|
||||
return
|
||||
return ..()
|
||||
@@ -35,7 +35,7 @@
|
||||
var/turf/T = loc
|
||||
loc = null
|
||||
T.relativewall_neighbours()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/alien/resin/Move()
|
||||
var/turf/T = loc
|
||||
@@ -182,7 +182,7 @@
|
||||
loc = null
|
||||
for (var/obj/structure/alien/weeds/W in range(1,T))
|
||||
W.updateWeedOverlays()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/alien/weeds/proc/Life()
|
||||
set background = BACKGROUND_ENABLED
|
||||
|
||||
@@ -17,7 +17,7 @@ var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list()
|
||||
|
||||
/obj/effect/bump_teleporter/Destroy()
|
||||
BUMP_TELEPORTERS -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/effect/bump_teleporter/Bumped(atom/user)
|
||||
if(!ismob(user))
|
||||
|
||||
@@ -62,8 +62,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
||||
//if (istype(T, /turf))
|
||||
// T.firelevel = 0 //TODO: FIX
|
||||
src.delete()
|
||||
..()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/effect/effect/water/Move(turf/newloc)
|
||||
//var/turf/T = src.loc
|
||||
@@ -183,8 +182,7 @@ steam.start() -- spawns the effect
|
||||
var/turf/T = src.loc
|
||||
if (istype(T, /turf))
|
||||
T.hotspot_expose(1000,100)
|
||||
..()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/effect/effect/sparks/Move()
|
||||
..()
|
||||
@@ -960,7 +958,7 @@ steam.start() -- spawns the effect
|
||||
if(A == src)
|
||||
continue
|
||||
reagents.reaction(A, 1, 1)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/effect/effect/foam/process()
|
||||
if(--amount < 0)
|
||||
@@ -1249,8 +1247,8 @@ steam.start() -- spawns the effect
|
||||
var/turf/T = src.loc
|
||||
if (istype(T, /turf))
|
||||
T.hotspot_expose(3000,100)
|
||||
..()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/effects/sparkels/Move()
|
||||
..()
|
||||
var/turf/T = src.loc
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
/obj/effect/glowshroom/Destroy()
|
||||
processing_objects -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/effect/glowshroom/process()
|
||||
if(!spreaded)
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
/obj/effect/landmark/Destroy()
|
||||
landmarks_list -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/effect/landmark/nations
|
||||
name = "nations"
|
||||
|
||||
@@ -220,4 +220,4 @@
|
||||
src.visible_message("<span class='danger'>\The [src] splits open.</span>")
|
||||
for(var/atom/movable/A in contents)
|
||||
A.loc = src.loc
|
||||
..()
|
||||
return ..()
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
/* BROKEN, FUCK BYOND
|
||||
if(hasvar(src, "my_atom"))
|
||||
src:my_atom = null*/
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/device
|
||||
icon = 'icons/obj/device.dmi'
|
||||
|
||||
@@ -1300,7 +1300,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
explosion(T, -1, -1, 2, 3)
|
||||
JFLOG("Exploded")
|
||||
del(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/device/pda/Destroy()
|
||||
@@ -1310,7 +1310,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
src.id.loc = get_turf(src.loc)
|
||||
if(src.pai)
|
||||
src.pai.loc = get_turf(src.loc)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery.
|
||||
if (istype(AM, /mob/living/carbon))
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
/obj/item/radio/integrated/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src, control_freq)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/radio/integrated/proc/post_signal(var/freq, var/key, var/value, var/key2, var/value2, var/key3, var/value3,var/key4, var/value4, s_filter)
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
signal.data[key4] = value4
|
||||
|
||||
frequency.post_signal(src, signal, filter = s_filter)
|
||||
|
||||
|
||||
return
|
||||
|
||||
/obj/item/radio/integrated/receive_signal(datum/signal/signal)
|
||||
@@ -139,7 +139,7 @@
|
||||
/obj/item/radio/integrated/mule/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src,beacon_freq)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
// receive radio signals
|
||||
// can detect bot status signals
|
||||
@@ -237,7 +237,7 @@
|
||||
/obj/item/radio/integrated/signal/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/radio/integrated/signal/initialize()
|
||||
if (src.frequency < 1441 || src.frequency > 1489)
|
||||
|
||||
@@ -234,19 +234,19 @@ obj/item/device/flashlight/lamp/bananalamp
|
||||
|
||||
|
||||
/obj/item/device/flashlight/emp/New()
|
||||
..()
|
||||
processing_objects.Add(src)
|
||||
..()
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/item/device/flashlight/emp/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/flashlight/emp/process()
|
||||
charge_tick++
|
||||
if(charge_tick < 10) return 0
|
||||
charge_tick = 0
|
||||
emp_cur_charges = min(emp_cur_charges+1, emp_max_charges)
|
||||
return 1
|
||||
charge_tick++
|
||||
if(charge_tick < 10) return 0
|
||||
charge_tick = 0
|
||||
emp_cur_charges = min(emp_cur_charges+1, emp_max_charges)
|
||||
return 1
|
||||
|
||||
/obj/item/device/flashlight/emp/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(on && user.zone_sel.selecting == "eyes") // call original attack proc only if aiming at the eyes
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
/obj/item/device/guitar/Destroy()
|
||||
del(song)
|
||||
song = null
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/device/guitar/attack_self(mob/user as mob)
|
||||
interact(user)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
//Will stop people throwing friend pAIs into the singularity so they can respawn
|
||||
if(!isnull(pai))
|
||||
pai.death(0)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/device/paicard/attack_self(mob/user)
|
||||
if (!in_range(src, user))
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
else if(S.part2 == src)
|
||||
S.part2 = null
|
||||
master = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/electropack/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
..()
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
/obj/item/device/radio/intercom/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/intercom/attack_ai(mob/user as mob)
|
||||
add_hiddenprint(user)
|
||||
|
||||
@@ -37,7 +37,7 @@ REAGENT SCANNER
|
||||
/obj/item/device/t_scanner/Destroy()
|
||||
if(on)
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/device/t_scanner/attack_self(mob/user)
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/obj/item/device/violin/Destroy()
|
||||
del(song)
|
||||
song = null
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/device/violin/attack_self(mob/user as mob)
|
||||
interact(user)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
..()
|
||||
if (istype(W, /obj/item/weapon/wrench) && sheets_refunded)
|
||||
//new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded )
|
||||
var/obj/item/stack/sheet/metal/M = getFromPool(/obj/item/stack/sheet/metal, get_turf(src))
|
||||
var/obj/item/stack/sheet/metal/M = PoolOrNew(/obj/item/stack/sheet/metal, get_turf(src))
|
||||
M.amount = sheets_refunded
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/obj/item/stack/Destroy()
|
||||
if (src && usr && usr.machine==src)
|
||||
usr << browse(null, "window=stack")
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/examine()
|
||||
set src in view(1)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
/obj/item/weapon/chrono_eraser/Destroy()
|
||||
dropped()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/chrono_eraser/ui_action_click()
|
||||
var/mob/living/carbon/user = src.loc
|
||||
@@ -77,7 +77,7 @@
|
||||
TED = null
|
||||
if(field)
|
||||
field_disconnect(field)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/proc/field_connect(var/obj/effect/chrono_field/F)
|
||||
var/mob/living/user = src.loc
|
||||
@@ -177,7 +177,7 @@
|
||||
/obj/effect/chrono_field/Destroy()
|
||||
if(gun && gun.field_check(src))
|
||||
gun.field_disconnect(src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/effect/chrono_field/update_icon()
|
||||
var/ttk_frame = 1 - (tickstokill / initial(tickstokill))
|
||||
|
||||
@@ -37,7 +37,7 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 30
|
||||
|
||||
/obj/item/clothing/mask/cigarette/Destroy()
|
||||
..()
|
||||
. = ..()
|
||||
del(reagents)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
|
||||
@@ -165,9 +165,8 @@
|
||||
if(on)
|
||||
var/M = get(paddles, /mob)
|
||||
remove_paddles(M)
|
||||
..()
|
||||
. = ..()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/deductcharge(var/chrgdeductamt)
|
||||
if(bcell)
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
qdel(igniter)
|
||||
if(ptank)
|
||||
qdel(ptank)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/flamethrower/process()
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/shard/New()
|
||||
|
||||
src.icon_state = pick("large", "medium", "small")
|
||||
switch(src.icon_state)
|
||||
if("small")
|
||||
@@ -34,7 +33,10 @@
|
||||
src.pixel_x = rand(-5, 5)
|
||||
src.pixel_y = rand(-5, 5)
|
||||
else
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/shard/Destroy()
|
||||
return QDEL_HINT_PUTINPOOL
|
||||
|
||||
/obj/item/weapon/shard/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/weldingtool))
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/Destroy()
|
||||
del(reagents)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/update_icon()
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
processing_objects.Remove(src)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/tank/examine()
|
||||
var/obj/icon = src
|
||||
|
||||
@@ -66,8 +66,7 @@
|
||||
remove_noz()
|
||||
qdel(noz)
|
||||
noz = null
|
||||
..()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/watertank/attack_hand(mob/user as mob)
|
||||
if(src.loc == user)
|
||||
|
||||
@@ -444,7 +444,7 @@ obj/item/weapon/twohanded/
|
||||
|
||||
/obj/item/weapon/twohanded/singularityhammer/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/twohanded/singularityhammer/process()
|
||||
@@ -567,7 +567,7 @@ obj/item/weapon/twohanded/
|
||||
|
||||
/obj/item/weapon/twohanded/knighthammer/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/twohanded/knighthammer/process()
|
||||
|
||||
@@ -48,7 +48,8 @@
|
||||
/obj/Destroy()
|
||||
machines -= src
|
||||
processing_objects -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/proc/is_used_on(obj/O, mob/user)
|
||||
|
||||
/obj/proc/process()
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
/obj/structure/Destroy()
|
||||
if(hascall(src, "unbuckle"))
|
||||
src:unbuckle()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/mech_melee_attack(obj/mecha/M)
|
||||
if(M.damtype == "brute")
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
// Fix for #383 - C4 deleting fridges with corpses
|
||||
/obj/structure/closet/Destroy()
|
||||
dump_contents()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/alter_health()
|
||||
return get_turf(src)
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
/obj/structure/displaycase/ex_act(severity)
|
||||
switch(severity)
|
||||
if (1)
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
if (occupant)
|
||||
dump()
|
||||
del(src)
|
||||
@@ -121,13 +121,13 @@
|
||||
|
||||
/obj/structure/displaycase/blob_act()
|
||||
if (prob(75))
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
if(occupant) dump()
|
||||
del(src)
|
||||
|
||||
|
||||
/obj/structure/displaycase/meteorhit(obj/O as obj)
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
if(occupant) dump()
|
||||
del(src)
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
if (!( src.destroyed ))
|
||||
src.density = 0
|
||||
src.destroyed = 1
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
playsound(get_turf(src), "shatter", 70, 1)
|
||||
update_icon()
|
||||
else
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
for(var/obj/structure/falsewall/W in range(temploc,1))
|
||||
W.relativewall()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/falsewall/relativewall()
|
||||
|
||||
|
||||
@@ -37,17 +37,16 @@
|
||||
icon='icons/fence-ns.dmi'
|
||||
|
||||
/obj/structure/grille/Destroy()
|
||||
loc = null //garbage collect
|
||||
|
||||
return QDEL_HINT_PUTINPOOL //pool grilles
|
||||
|
||||
/obj/structure/grille/ex_act(severity)
|
||||
returnToPool(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/grille/blob_act()
|
||||
returnToPool(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/grille/meteorhit(var/obj/M)
|
||||
returnToPool(src)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/grille/Bumped(atom/user)
|
||||
@@ -144,7 +143,7 @@
|
||||
if(!shock(user, 100))
|
||||
playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
new /obj/item/stack/rods(loc, 2)
|
||||
returnToPool(src)
|
||||
qdel(src)
|
||||
else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored))
|
||||
if(!shock(user, 90))
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
@@ -224,12 +223,12 @@
|
||||
icon_state = "brokengrille"
|
||||
density = 0
|
||||
destroyed = 1
|
||||
new /obj/item/stack/rods(loc)
|
||||
PoolOrNew(/obj/item/stack/rods,loc)
|
||||
|
||||
else
|
||||
if(health <= -6)
|
||||
new /obj/item/stack/rods(loc)
|
||||
returnToPool(src)
|
||||
PoolOrNew(/obj/item/stack/rods,loc)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
/obj/structure/lamarr/ex_act(severity)
|
||||
switch(severity)
|
||||
if (1)
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
Break()
|
||||
qdel(src)
|
||||
if (2)
|
||||
@@ -35,13 +35,13 @@
|
||||
|
||||
/obj/structure/lamarr/blob_act()
|
||||
if (prob(75))
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
Break()
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/lamarr/meteorhit(obj/O as obj)
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
Break()
|
||||
qdel(src)
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
if (!( src.destroyed ))
|
||||
src.density = 0
|
||||
src.destroyed = 1
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
playsound(src, "shatter", 70, 1)
|
||||
Break()
|
||||
else
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
if(locate(/obj/structure/lattice, get_step(src, dir)))
|
||||
L = locate(/obj/structure/lattice, get_step(src, dir))
|
||||
L.updateOverlays(src.loc)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/lattice/blob_act()
|
||||
qdel(src)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
/datum/song/Destroy()
|
||||
instrumentObj = null
|
||||
return
|
||||
return ..()
|
||||
|
||||
// note is a number from 1-7 for A-G
|
||||
// acc is either "b", "n", or "#"
|
||||
@@ -320,7 +320,7 @@
|
||||
/obj/structure/piano/Destroy()
|
||||
del(song)
|
||||
song = null
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/piano/attack_hand(mob/user as mob)
|
||||
interact(user)
|
||||
|
||||
@@ -27,8 +27,7 @@
|
||||
|
||||
/obj/structure/stool/bed/Destroy()
|
||||
unbuckle()
|
||||
..()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/structure/stool/bed/attack_hand(mob/user as mob)
|
||||
manual_unbuckle(user)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
/obj/structure/table/Destroy()
|
||||
update_adjacent()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/table/proc/destroy()
|
||||
new parts(loc)
|
||||
@@ -725,9 +725,9 @@
|
||||
/obj/structure/table/glass/proc/collapse() //glass table collapse is called twice in this code, more efficent to just have a proc
|
||||
src.visible_message("<span class='warning'>\The [src] shatters, and the frame collapses!</span>", "<span class='warning'>You hear metal collapsing and glass shattering.</span>")
|
||||
new /obj/item/weapon/table_parts/glass(loc)
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
if(prob(50)) //50% chance to spawn two shards
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/table/glass/attackby(obj/item/I as obj, mob/user as mob, params)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
/obj/structure/transit_tube/station/Destroy()
|
||||
processing_objects -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
// Stations which will send the tube in the opposite direction after their stop.
|
||||
/obj/structure/transit_tube/station/reverse
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
|
||||
/obj/structure/transit_tube_pod/Destroy()
|
||||
for(var/atom/movable/AM in contents)
|
||||
AM.loc = loc
|
||||
AM.forceMove(get_turf(src))
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/transit_tube_pod/proc/follow_tube(var/reverse_launch)
|
||||
if(moving)
|
||||
|
||||
@@ -35,7 +35,7 @@ obj/structure/windoor_assembly/New(dir=NORTH)
|
||||
obj/structure/windoor_assembly/Destroy()
|
||||
density = 0
|
||||
air_update_turf(1)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/windoor_assembly/Move()
|
||||
var/turf/T = loc
|
||||
|
||||
@@ -53,7 +53,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
|
||||
// This should result in the same materials used to make the window.
|
||||
/obj/structure/window/proc/destroy()
|
||||
for(var/i=0;i<sheets;i++)
|
||||
getFromPool(shardtype, loc)
|
||||
PoolOrNew(shardtype, loc)
|
||||
|
||||
if(reinf)
|
||||
new /obj/item/stack/rods(loc)
|
||||
@@ -223,7 +223,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
|
||||
else if(istype(W, /obj/item/weapon/wrench) && !anchored && health > 7) //Disassemble deconstructed window into parts
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
for(var/i=0;i<sheets;i++)
|
||||
var/obj/item/stack/sheet/glass/NG = getFromPool(glasstype, src.loc)
|
||||
var/obj/item/stack/sheet/glass/NG = PoolOrNew(glasstype, src.loc)
|
||||
for (var/obj/item/stack/sheet/glass/G in src.loc) //Stack em up
|
||||
if(G==NG)
|
||||
continue
|
||||
@@ -335,7 +335,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
|
||||
air_update_turf(1)
|
||||
if(loc && !disassembled)
|
||||
playsound(get_turf(src), "shatter", 70, 1)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/structure/window/Move()
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
crystal.icon_state = "supermatter_crystalf"
|
||||
crystal.pixel_x = 0
|
||||
crystal.pixel_y = 0
|
||||
..()
|
||||
return ..()
|
||||
|
||||
// DE-HACK
|
||||
/turf/simulated/wall/vault/relativewall()
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/obj/spacepod/Destroy()
|
||||
spacepods_list -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/spacepod/process()
|
||||
if(src.empcounter > 0)
|
||||
|
||||
@@ -216,4 +216,4 @@
|
||||
if(previous)
|
||||
previous.next = null
|
||||
master.last = previous
|
||||
..()
|
||||
return ..()
|
||||
@@ -12,8 +12,7 @@
|
||||
/obj/item/assembly/shock_kit/Destroy()
|
||||
del(part1)
|
||||
del(part2)
|
||||
..()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weapon/wrench) && !status)
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
/obj/item/clothing/mask/horsehead/Destroy()
|
||||
if(flags & NODROP)
|
||||
goodbye_horses(loc)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/mask/horsehead/proc/goodbye_horses(mob/user) //I'm flying over you
|
||||
if(!ismob(user))
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
/obj/item/clothing/head/helmet/space/chronos/Destroy()
|
||||
dropped()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/chronos
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
/obj/item/clothing/suit/space/chronos/Destroy()
|
||||
dropped()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/suit/space/chronos/emp_act(severity)
|
||||
var/mob/living/carbon/human/user = src.loc
|
||||
@@ -209,4 +209,4 @@
|
||||
holder.remote_control = null
|
||||
if(holder.client && (holder.client.eye == src))
|
||||
holder.client.eye = holder
|
||||
..()
|
||||
return ..()
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
/obj/effect/landmark/animal_spawner/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/landmark/animal_spawner/panther
|
||||
name = "panther spawner"
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
/obj/effect/jungle_tribe_spawn/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/jungle_tribe_spawn/process()
|
||||
set background = 1
|
||||
|
||||
@@ -113,3 +113,5 @@
|
||||
D.effect_r -= src
|
||||
D.effect_g -= src
|
||||
D.effect_b -= src
|
||||
|
||||
return ..()
|
||||
@@ -133,7 +133,7 @@ obj/effect/liquid/Move()
|
||||
|
||||
obj/effect/liquid/Destroy()
|
||||
src.controller.liquid_objects.Remove(src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
obj/effect/liquid/proc/update_icon2()
|
||||
//icon_state = num2text( max(1,min(7,(floor(volume),10)/10)) )
|
||||
|
||||
@@ -101,4 +101,4 @@
|
||||
|
||||
/obj/machinery/media/Destroy()
|
||||
disconnect_media_source()
|
||||
..()
|
||||
return ..()
|
||||
@@ -343,12 +343,12 @@
|
||||
if(5)
|
||||
var/quantity = rand(1,3)
|
||||
for(var/i=0, i<quantity, i++)
|
||||
getFromPool(/obj/item/weapon/shard, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
|
||||
if(6)
|
||||
var/quantity = rand(1,3)
|
||||
for(var/i=0, i<quantity, i++)
|
||||
getFromPool(/obj/item/weapon/shard/plasma, loc)
|
||||
PoolOrNew(/obj/item/weapon/shard/plasma, loc)
|
||||
|
||||
if(7)
|
||||
var/obj/item/stack/sheet/mineral/uranium/R = new(src)
|
||||
|
||||
@@ -92,7 +92,7 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi
|
||||
del(ghostimage)
|
||||
ghostimage = null
|
||||
updateallghostimages()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
return 1
|
||||
|
||||
@@ -25,7 +25,7 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
|
||||
affected_mob.status_flags &= ~(XENO_HOST)
|
||||
spawn(0)
|
||||
RemoveInfectionImages(affected_mob)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/alien_embryo/process()
|
||||
if(!affected_mob) return
|
||||
|
||||
@@ -225,7 +225,7 @@ var/list/ai_verbs_default = list(
|
||||
|
||||
/mob/living/silicon/ai/Destroy()
|
||||
ai_list -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
del(ghostimage)
|
||||
ghostimage = null;
|
||||
updateallghostimages()
|
||||
return ..()
|
||||
|
||||
// Movement code. Returns 0 to stop air movement from moving it.
|
||||
/mob/aiEye/Move()
|
||||
|
||||
@@ -179,7 +179,7 @@ var/list/robot_verbs_default = list(
|
||||
if(T) mmi.loc = T
|
||||
if(mind) mind.transfer_to(mmi.brainmob)
|
||||
mmi = null
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/proc/pick_module()
|
||||
if(module)
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
/mob/living/simple_animal/bee/Destroy()
|
||||
if(parent)
|
||||
parent.owned_bee_swarms.Remove(src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bee/Life()
|
||||
..()
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
|
||||
/mob/living/simple_animal/spiderbot/Destroy()
|
||||
eject_brain()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/spiderbot/New()
|
||||
|
||||
|
||||
@@ -170,16 +170,16 @@
|
||||
var/obj/O
|
||||
|
||||
//shards
|
||||
O = getFromPool(/obj/item/weapon/shard, loc)
|
||||
O = PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
step_to(O, get_turf(pick(view(7, src))))
|
||||
if(prob(75))
|
||||
O = getFromPool(/obj/item/weapon/shard, loc)
|
||||
O = PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
step_to(O, get_turf(pick(view(7, src))))
|
||||
if(prob(50))
|
||||
O = getFromPool(/obj/item/weapon/shard, loc)
|
||||
O = PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
step_to(O, get_turf(pick(view(7, src))))
|
||||
if(prob(25))
|
||||
O = getFromPool(/obj/item/weapon/shard, loc)
|
||||
O = PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
step_to(O, get_turf(pick(view(7, src))))
|
||||
|
||||
//rods
|
||||
@@ -270,7 +270,7 @@
|
||||
C.name = "Corrupted drone morality core"
|
||||
C.origin_tech = "illegal=[rand(3,6)]"
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/beam/drone
|
||||
damage = 15
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user