diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
index 8e4b0e3676f..852a8761a24 100644
--- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
@@ -5432,7 +5432,7 @@
"cax" = (/obj/structure/noticeboard{pixel_y = 32},/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/large{pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 8; pixel_y = 2},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = -5; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"cay" = (/obj/structure/closet/secure_closet/medical3,/obj/item/weapon/screwdriver{pixel_y = 6},/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = 30},/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"caz" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 24},/obj/item/weapon/screwdriver{pixel_y = 6},/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
-"caA" = (/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 30},/obj/structure/closet/wardrobe/white/medical,/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
+"caA" = (/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 30},/obj/structure/closet/wardrobe/medical_white,/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"caB" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{dir = 5; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"caC" = (/obj/machinery/power/apc{dir = 8; name = "Medical Security Checkpoint APC"; pixel_x = -24; pixel_y = 0},/obj/machinery/alarm{pixel_y = 28},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/closet/secure_closet/security/med,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/checkpoint/medical)
"caD" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table/reinforced,/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Security Post - Medbay"; dir = 2; network = list("SS13","Medbay")},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint/medical)
@@ -7978,7 +7978,7 @@
"cXv" = (/obj/machinery/smartfridge,/turf/simulated/wall,/area/crew_quarters/bar)
"cXw" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id_tag = "Xenolab"; name = "test chamber blast door"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"})
"cXx" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id_tag = "Xenolab"; name = "test chamber blast door"},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"})
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/MetaStation/z4.dmm b/_maps/map_files/MetaStation/z4.dmm
index d8409fa724a..e9ad9ae4182 100644
--- a/_maps/map_files/MetaStation/z4.dmm
+++ b/_maps/map_files/MetaStation/z4.dmm
@@ -593,7 +593,7 @@
"lS" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor/plating/airless,/area/space)
"lT" = (/obj/structure/window/basic{dir = 4},/turf/space,/area/space)
"lU" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/derelict/arrival)
-"lV" = (/obj/structure/closet/wardrobe,/turf/simulated/floor,/area/derelict/arrival)
+"lV" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor,/area/derelict/arrival)
"lW" = (/turf/simulated/floor/plating/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary)
"lX" = (/obj/structure/closet,/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"lY" = (/turf/simulated/floor,/area/derelict/atmospherics)
diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm
index b1757a12302..43bbb2b261d 100644
--- a/_maps/map_files/RandomZLevels/stationCollision.dmm
+++ b/_maps/map_files/RandomZLevels/stationCollision.dmm
@@ -317,7 +317,7 @@
"ge" = (/obj/item/weapon/storage/secure/safe/sc_ssafe{pixel_x = 4; pixel_y = -26},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/northblock)
"gf" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/item/clothing/under/rank/captain,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/energy/laser/retro/sc_retro,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/northblock)
"gg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/awaymission/midblock)
-"gh" = (/obj/structure/closet/wardrobe,/turf/simulated/floor,/area/awaymission/midblock)
+"gh" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor,/area/awaymission/midblock)
"gi" = (/turf/simulated/floor,/area/awaymission/midblock)
"gj" = (/obj/structure/closet/wardrobe/pjs,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/awaymission/midblock)
"gk" = (/obj/structure/closet/wardrobe/pink,/turf/simulated/floor,/area/awaymission/midblock)
diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 934aa2cc5ee..19ca2c9e865 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -4614,7 +4614,7 @@
"bKL" = (/turf/simulated/floor{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2)
"bKM" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos)
"bKN" = (/obj/structure/table,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -27},/obj/machinery/light,/obj/item/weapon/gun/syringe,/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay3)
-"bKO" = (/obj/machinery/camera{c_tag = "Medbay Equipment"; dir = 1; network = list("SS13")},/obj/structure/closet/wardrobe/white/medical,/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3)
+"bKO" = (/obj/machinery/camera{c_tag = "Medbay Equipment"; dir = 1; network = list("SS13")},/obj/structure/closet/wardrobe/medical_white,/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3)
"bKP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3)
"bKQ" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves{pixel_y = 8},/obj/item/weapon/storage/box/masks{pixel_y = -3},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/item/weapon/wirecutters{desc = "This cuts gloves."; name = "Glove Snippers"},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay3)
"bKR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay2)
diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm
index 50d36ba0a3a..8be2571bced 100644
--- a/_maps/map_files/cyberiad/z6.dmm
+++ b/_maps/map_files/cyberiad/z6.dmm
@@ -498,7 +498,7 @@
"jM" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor/airless,/area/space)
"jN" = (/obj/structure/window/basic{dir = 4},/turf/space,/area/space)
"jO" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/derelict/arrival)
-"jP" = (/obj/structure/closet/wardrobe,/turf/simulated/floor,/area/derelict/arrival)
+"jP" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor,/area/derelict/arrival)
"jQ" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary)
"jR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/space)
"jS" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/space)
diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index de3d9544d22..9102ceb7164 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -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)
diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm
index f2f1b4b904c..c2cfa133de1 100644
--- a/code/ATMOSPHERICS/pipes.dm
+++ b/code/ATMOSPHERICS/pipes.dm
@@ -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)
diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm
index 67278d3f5fd..bdfa2971881 100644
--- a/code/LINDA/LINDA_fire.dm
+++ b/code/LINDA/LINDA_fire.dm
@@ -163,6 +163,7 @@
if(T.active_hotspot == src)
T.active_hotspot = null
loc = null
+ return ..()
/obj/effect/hotspot/proc/DestroyTurf()
diff --git a/code/__DEFINES/qdel.dm b/code/__DEFINES/qdel.dm
new file mode 100644
index 00000000000..9e4917802c8
--- /dev/null
+++ b/code/__DEFINES/qdel.dm
@@ -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.
\ No newline at end of file
diff --git a/code/__HELPERS/experimental.dm b/code/__HELPERS/experimental.dm
index da9c2a17446..27daccfc58c 100644
--- a/code/__HELPERS/experimental.dm
+++ b/code/__HELPERS/experimental.dm
@@ -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
diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm
index 30974675e07..509f8b3c66c 100644
--- a/code/_globalvars/configuration.dm
+++ b/code/_globalvars/configuration.dm
@@ -28,12 +28,11 @@ var/Debug = 0 // global debug switch
var/Debug2 = 1 // enables detailed job debug file in secrets
//This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage
-var/MAX_EXPLOSION_RANGE = 14
var/MAX_EX_DEVESTATION_RANGE = 3
var/MAX_EX_HEAVY_RANGE = 7
var/MAX_EX_LIGHT_RANGE = 14
var/MAX_EX_FLASH_RANGE = 14
-//#define MAX_EXPLOSION_RANGE 14 // Defaults to 12 (was 8) -- TLE
+var/MAX_EX_FLAME_RANGE = 14
var/list/be_special_flags = list(
"traitor" = BE_TRAITOR,
diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm
index c44db2eb120..3f4fd2ed815 100644
--- a/code/_onclick/hud/action.dm
+++ b/code/_onclick/hud/action.dm
@@ -30,6 +30,7 @@
/datum/action/Destroy()
if(owner)
Remove(owner)
+ return ..()
/datum/action/proc/Grant(mob/living/T)
if(owner)
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 5aec63c8129..658d255aa64 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -346,9 +346,6 @@
if("protect_roles_from_antagonist")
config.protect_roles_from_antagonist = 1
- if("reactionary_explosions")
- config.reactionary_explosions = 1
-
if ("probability")
var/prob_pos = findtext(value, " ")
var/prob_name = null
@@ -561,6 +558,22 @@
config.bones_can_break = value
if("limbs_can_break")
config.limbs_can_break = value
+ if("reactionary_explosions")
+ config.reactionary_explosions = 1
+ if("bombcap")
+ var/BombCap = text2num(value)
+ if (!BombCap)
+ continue
+ if (BombCap < 4)
+ BombCap = 4
+ if (BombCap > 128)
+ BombCap = 128
+
+ MAX_EX_DEVESTATION_RANGE = round(BombCap/4)
+ MAX_EX_HEAVY_RANGE = round(BombCap/2)
+ MAX_EX_LIGHT_RANGE = BombCap
+ MAX_EX_FLASH_RANGE = BombCap
+ MAX_EX_FLAME_RANGE = BombCap
if("default_laws")
config.default_laws = text2num(value)
else
diff --git a/code/controllers/garbage.dm b/code/controllers/garbage.dm
index 7a33bd6725b..b9f2a2eea75 100644
--- a/code/controllers/garbage.dm
+++ b/code/controllers/garbage.dm
@@ -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"
diff --git a/code/datums/pizza_bomb.dm b/code/datums/pizza_bomb.dm
index 1ec911ccb72..9a3180a15e8 100644
--- a/code/datums/pizza_bomb.dm
+++ b/code/datums/pizza_bomb.dm
@@ -54,7 +54,7 @@
return
src.audible_message("\icon[src] [src] beeps, \"Enjoy the pizza!\"")
src.visible_message("\The [src] violently explodes!")
- explosion(src.loc,1,2,4) //Identical to a minibomb
+ explosion(src.loc,1,2,4,flame_range = 2) //Identical to a minibomb
qdel(src)
/obj/item/device/pizza_bomb/attackby(var/obj/item/I, var/mob/user, params)
diff --git a/code/datums/spells/explosion.dm b/code/datums/spells/explosion.dm
index dc319800a43..1e3d3bddb2f 100644
--- a/code/datums/spells/explosion.dm
+++ b/code/datums/spells/explosion.dm
@@ -5,10 +5,11 @@
var/ex_severe = 1
var/ex_heavy = 2
var/ex_light = 3
+ var/ex_flash = 4
/obj/effect/proc_holder/spell/wizard/targeted/explosion/cast(list/targets)
for(var/mob/living/target in targets)
- explosion(target.loc,ex_severe,ex_heavy,ex_light)
+ explosion(target.loc,ex_severe,ex_heavy,ex_light,ex_flash)
return
\ No newline at end of file
diff --git a/code/datums/spells/trigger.dm b/code/datums/spells/trigger.dm
index 3c9f3998bcd..194110c384c 100644
--- a/code/datums/spells/trigger.dm
+++ b/code/datums/spells/trigger.dm
@@ -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)
diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm
index 60978486a0f..97a693317fe 100644
--- a/code/datums/spells/wizard.dm
+++ b/code/datums/spells/wizard.dm
@@ -272,7 +272,7 @@
action_icon_state = "fireball"
/obj/effect/proc_holder/spell/wizard/turf/fireball/cast(var/turf/T)
- explosion(T, -1, 0, 2, 3, 0)
+ explosion(T, -1, 0, 2, 3, 0, flame_range = 2)
/obj/effect/proc_holder/spell/wizard/targeted/inflict_handler/fireball
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index 24bbaa3b2d8..5f79615f4b9 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -293,10 +293,10 @@ var/list/uplink_items = list()
gamemodes = list("nuclear emergency")
surplus = 35
-/datum/uplink_item/dangerous/saringrenades
- name = "Sarin Gas Grenades"
- desc = "A box of four (4) grenades filled with sarin, a deadly neurotoxin. Use extreme caution when handling and be sure to vacate the premise after using; ensure communication is maintaind with team to avoid accidental gassings."
- item = /obj/item/weapon/storage/box/syndie_kit/sarin
+/datum/uplink_item/dangerous/tabungrenades
+ name = "Tabun Gas Grenades"
+ desc = "A box of four (4) grenades filled with tabun, a deadly neurotoxin. Use extreme caution when handling and be sure to vacate the premise after using; ensure communication is maintaind with team to avoid accidental gassings."
+ item = /obj/item/weapon/storage/box/syndie_kit/tabun
cost = 15
gamemodes = list("nuclear emergency")
surplus = 0
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 3248e2fcabd..e73508e2678 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -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
@@ -88,8 +89,6 @@ var/global/list/ghdel_profiling = list()
*/
-/atom/proc/meteorhit(obj/meteor as obj)
- return
/atom/proc/allow_drop()
return 1
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 50acd6da750..25be7e055f1 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -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
diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm
index 3b50e03533f..1b81a87690f 100644
--- a/code/game/gamemodes/blob/blobs/factory.dm
+++ b/code/game/gamemodes/blob/blobs/factory.dm
@@ -126,4 +126,4 @@
if(contents)
for(var/mob/M in contents)
M.loc = src.loc
- ..()
+ return ..()
diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm
index daf7763b7da..a7a194885ef 100644
--- a/code/game/gamemodes/blob/overmind.dm
+++ b/code/game/gamemodes/blob/overmind.dm
@@ -33,6 +33,7 @@
del(ghostimage)
ghostimage = null;
updateallghostimages()
+ return ..()
/mob/camera/blob/Login()
..()
diff --git a/code/game/gamemodes/events/clang.dm b/code/game/gamemodes/events/clang.dm
index 6ba085f98e5..560e86ec8bb 100644
--- a/code/game/gamemodes/events/clang.dm
+++ b/code/game/gamemodes/events/clang.dm
@@ -34,7 +34,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
else if (istype(clong, /mob))
if(clong.density || prob(10))
- clong.meteorhit(src)
+ clong.ex_act(2)
else
del(src)
diff --git a/code/game/gamemodes/events/dust.dm b/code/game/gamemodes/events/dust.dm
index ff424a51134..73ada2fc387 100644
--- a/code/game/gamemodes/events/dust.dm
+++ b/code/game/gamemodes/events/dust.dm
@@ -99,7 +99,7 @@ The "dust" will damage the hull of the station causin minor hull breaches.
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
if(ismob(A))
- A.meteorhit(src)//This should work for now I guess
+ A.ex_act(strength)//This should work for now I guess
else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field_generator)) //Protect the singularity from getting released every round!
A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index 7b3066160e7..7266762eeb1 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -196,7 +196,7 @@ rcd light flash thingy on matter drain
V.show_message("You hear a loud electrical buzzing sound!", 2)
spawn(50)
explosion(get_turf(M), 0,1,1,0)
- del(M)
+ qdel(M)
else src << "Out of uses."
else src << "That's not a machine."
diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm
index 2f3b19f0dcc..95f5dc8b7ff 100644
--- a/code/game/gamemodes/meteor/meteor.dm
+++ b/code/game/gamemodes/meteor/meteor.dm
@@ -37,7 +37,7 @@
var/waitduration = rand(3000,9000)
while(waveduration - world.time > 0)
sleep(20)
- spawn() spawn_meteors(6)
+ spawn() spawn_meteors(6, meteors_normal)
sleep(waitduration)
nometeors = 0
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index c0e48f5b7ba..ff04ec4d190 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -1,149 +1,254 @@
-/*/proc/meteor_wave(var/number = meteors_in_wave)
- if(!ticker || wavesecret)
- return
+//Meteors probability of spawning during a given wave
+/var/list/meteors_normal = list(/obj/effect/meteor/dust=3, /obj/effect/meteor/medium=8, /obj/effect/meteor/big=3, \
+ /obj/effect/meteor/flaming=1, /obj/effect/meteor/irradiated=3) //for normal meteor event
- wavesecret = 1
- for(var/i = 0 to number)
- spawn(rand(10,100))
- spawn_meteor()
- spawn(meteor_wave_delay)
- wavesecret = 0
-*/
-/proc/spawn_meteors(var/number)
+/var/list/meteors_threatening = list(/obj/effect/meteor/medium=4, /obj/effect/meteor/big=8, \
+ /obj/effect/meteor/flaming=3, /obj/effect/meteor/irradiated=3) //for threatening meteor event
+
+/var/list/meteors_catastrophic = list(/obj/effect/meteor/medium=5, /obj/effect/meteor/big=75, \
+ /obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/tunguska = 1) //for catastrophic meteor event
+
+/var/list/meteors_dust = list(/obj/effect/meteor/dust) //for space dust event
+
+
+///////////////////////////////
+//Meteor spawning global procs
+///////////////////////////////
+/proc/spawn_meteors(var/number = 10, var/list/meteortypes)
for(var/i = 0; i < number; i++)
- spawn(0)
- spawn_meteor()
+ spawn_meteor(meteortypes)
-/proc/spawn_meteor()
-
- var/startx
- var/starty
- var/endx
- var/endy
+/proc/spawn_meteor(var/list/meteortypes)
var/turf/pickedstart
var/turf/pickedgoal
var/max_i = 10//number of tries to spawn meteor.
-
-
- do
- switch(pick(1,2,3,4))
- if(1) //NORTH
- starty = world.maxy-(TRANSITIONEDGE+1)
- startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
- endy = TRANSITIONEDGE
- endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
- if(2) //EAST
- starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1))
- startx = world.maxx-(TRANSITIONEDGE+1)
- endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE)
- endx = TRANSITIONEDGE
- if(3) //SOUTH
- starty = (TRANSITIONEDGE+1)
- startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
- endy = world.maxy-TRANSITIONEDGE
- endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
- if(4) //WEST
- starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1))
- startx = (TRANSITIONEDGE+1)
- endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE)
- endx = world.maxx-TRANSITIONEDGE
-
- pickedstart = locate(startx, starty, 1)
- pickedgoal = locate(endx, endy, 1)
+ while (!istype(pickedstart, /turf/space))
+ var/startSide = pick(cardinal)
+ pickedstart = spaceDebrisStartLoc(startSide, 1)
+ pickedgoal = spaceDebrisFinishLoc(startSide, 1)
max_i--
- if(max_i<=0) return
-
- while (!istype(pickedstart, /turf/space) || pickedstart.loc.name != "Space" ) //FUUUCK, should never happen.
-
-
- var/obj/effect/meteor/M
- switch(rand(1, 100))
-
- if(1 to 10)
- M = new /obj/effect/meteor/big( pickedstart )
- if(11 to 75)
- M = new /obj/effect/meteor( pickedstart )
- if(76 to 100)
- M = new /obj/effect/meteor/small( pickedstart )
-
+ if(max_i<=0)
+ return
+ var/Me = pickweight(meteortypes)
+ var/obj/effect/meteor/M = new Me(pickedstart)
M.dest = pickedgoal
+ M.z_original = 1
spawn(0)
walk_towards(M, M.dest, 1)
-
return
+/proc/spaceDebrisStartLoc(startSide, Z)
+ var/starty
+ var/startx
+ switch(startSide)
+ if(NORTH)
+ starty = world.maxy-(TRANSITIONEDGE+1)
+ startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
+ if(EAST)
+ starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1))
+ startx = world.maxx-(TRANSITIONEDGE+1)
+ if(SOUTH)
+ starty = (TRANSITIONEDGE+1)
+ startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
+ if(WEST)
+ starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1))
+ startx = (TRANSITIONEDGE+1)
+ var/turf/T = locate(startx, starty, Z)
+ return T
+
+/proc/spaceDebrisFinishLoc(startSide, Z)
+ var/endy
+ var/endx
+ switch(startSide)
+ if(NORTH)
+ endy = TRANSITIONEDGE
+ endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
+ if(EAST)
+ endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE)
+ endx = TRANSITIONEDGE
+ if(SOUTH)
+ endy = world.maxy-TRANSITIONEDGE
+ endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
+ if(WEST)
+ endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE)
+ endx = world.maxx-TRANSITIONEDGE
+ var/turf/T = locate(endx, endy, Z)
+ return T
+
+///////////////////////
+//The meteor effect
+//////////////////////
+
/obj/effect/meteor
- name = "meteor"
+ name = "the concept of meteor"
+ desc = "You should probably run instead of gawking at this."
icon = 'icons/obj/meteor.dmi'
- icon_state = "flaming"
+ icon_state = "small"
density = 1
- anchored = 1.0
- var/hits = 1
+ anchored = 1
+ var/hits = 4
+ var/hitpwr = 2 //Level of ex_act to be called on hit.
var/dest
pass_flags = PASSTABLE
+ var/heavy = 0
+ var/meteorsound = 'sound/effects/meteorimpact.ogg'
+ var/z_original = 1
-/obj/effect/meteor/small
- name = "small meteor"
- icon_state = "smallf"
- pass_flags = PASSTABLE | PASSGRILLE
+ var/meteordrop = /obj/item/weapon/ore/iron
+ var/dropamt = 2
+
+/obj/effect/meteor/Move()
+ if(z != z_original || loc == dest)
+ qdel(src)
+ return
+
+ . = ..() //process movement...
+
+ if(.)//.. if did move, ram the turf we get in
+ var/turf/T = get_turf(loc)
+ ram_turf(T)
+
+ if(prob(10) && !istype(T, /turf/space))//randomly takes a 'hit' from ramming
+ get_hit()
+
+ return .
+
+/obj/effect/meteor/Destroy()
+ walk(src,0) //this cancels the walk_towards() proc
+ ..()
+
+/obj/effect/meteor/New()
+ ..()
+ SpinAnimation()
/obj/effect/meteor/Bump(atom/A)
- spawn(0)
+ if(A)
+ ram_turf(get_turf(A))
+ playsound(src.loc, meteorsound, 40, 1)
+ get_hit()
- if (A)
- A.meteorhit(src)
- playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 40, 1)
- if (--src.hits <= 0)
+/obj/effect/meteor/proc/ram_turf(var/turf/T)
+ //first bust whatever is in the turf
+ for(var/atom/A in T)
+ if(A != src)
+ A.ex_act(hitpwr)
- //Prevent meteors from blowing up the singularity's containment.
- //Changing emitter and generator ex_act would result in them being bomb and C4 proof.
- if(!istype(A,/obj/machinery/power/emitter) && \
- !istype(A,/obj/machinery/field_generator) && \
- prob(15))
- explosion(src.loc, 4, 5, 6, 7, 0)
- del(src)
- return
+ //then, ram the turf if it still exists
+ if(T)
+ T.ex_act(hitpwr)
-
-/obj/effect/meteor/ex_act(severity)
-
- if (severity < 4)
+//process getting 'hit' by colliding with a dense object
+//or randomly when ramming turfs
+/obj/effect/meteor/proc/get_hit()
+ hits--
+ if(hits <= 0)
+ make_debris()
+ meteor_effect(heavy)
qdel(src)
+
+/obj/effect/meteor/ex_act()
return
-/obj/effect/meteor/big
- name = "big meteor"
- hits = 5
-
- ex_act(severity)
- return
-
- Bump(atom/A)
- spawn(0)
- //Prevent meteors from blowing up the singularity's containment.
- //Changing emitter and generator ex_act would result in them being bomb and C4 proof
- 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.
-
- if (A)
- for(var/mob/M in player_list)
- var/turf/T = get_turf(M)
- if(!T || T.z != src.z)
- continue
- shake_camera(M, 3, get_dist(M.loc, src.loc) > 20 ? 1 : 3)
- M.playsound_local(src.loc, 'sound/effects/meteorimpact.ogg', 50, 1, get_rand_frequency(), 10)
- explosion(src.loc, 0, 1, 2, 3, 0)
-
- if (--src.hits <= 0)
- if(prob(15) && !istype(A, /obj/structure/grille))
- explosion(src.loc, 1, 2, 3, 4, 0)
- del(src)
- return
-
/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/pickaxe))
- del(src)
+ qdel(src)
return
- ..()
\ No newline at end of file
+ ..()
+
+/obj/effect/meteor/proc/make_debris()
+ for(var/throws = dropamt, throws > 0, throws--)
+ var/obj/item/O = new meteordrop(get_turf(src))
+ O.throw_at(dest, 5, 10)
+
+/obj/effect/meteor/proc/meteor_effect(var/sound=1)
+ if(sound)
+ for(var/mob/M in player_list)
+ var/turf/T = get_turf(M)
+ if(!T || T.z != src.z)
+ continue
+ var/dist = get_dist(M.loc, src.loc)
+ shake_camera(M, dist > 20 ? 3 : 5, dist > 20 ? 1 : 3)
+ M.playsound_local(src.loc, meteorsound, 50, 1, get_rand_frequency(), 10)
+
+///////////////////////
+//Meteor types
+///////////////////////
+
+//Dust
+/obj/effect/meteor/dust
+ name = "space dust"
+ icon_state = "dust"
+ pass_flags = PASSTABLE | PASSGRILLE
+ hits = 1
+ hitpwr = 3
+ meteorsound = 'sound/weapons/tap.ogg'
+ meteordrop = /obj/item/weapon/ore/glass
+
+//Medium-sized
+/obj/effect/meteor/medium
+ name = "meteor"
+ dropamt = 3
+
+/obj/effect/meteor/medium/meteor_effect()
+ ..(heavy)
+ explosion(src.loc, 0, 1, 2, 3, 0)
+
+//Large-sized
+/obj/effect/meteor/big
+ name = "big meteor"
+ icon_state = "large"
+ hits = 6
+ heavy = 1
+ dropamt = 4
+
+/obj/effect/meteor/big/meteor_effect()
+ ..(heavy)
+ explosion(src.loc, 1, 2, 3, 4, 0)
+
+//Flaming meteor
+/obj/effect/meteor/flaming
+ name = "flaming meteor"
+ icon_state = "flaming"
+ hits = 5
+ heavy = 1
+ meteorsound = 'sound/effects/bamf.ogg'
+ meteordrop = /obj/item/weapon/ore/plasma
+
+/obj/effect/meteor/flaming/meteor_effect()
+ ..(heavy)
+ explosion(src.loc, 1, 2, 3, 4, 0, 0, flame_range = 5)
+
+//Radiation meteor
+/obj/effect/meteor/irradiated
+ name = "glowing meteor"
+ icon_state = "glowing"
+ heavy = 1
+ meteordrop = /obj/item/weapon/ore/uranium
+
+
+/obj/effect/meteor/irradiated/meteor_effect()
+ ..(heavy)
+ explosion(src.loc, 0, 0, 4, 3, 0)
+ new /obj/effect/decal/cleanable/greenglow(get_turf(src))
+ for(var/mob/living/L in view(5, src))
+ L.apply_effect(40, IRRADIATE)
+
+//Station buster Tunguska
+/obj/effect/meteor/tunguska
+ name = "tunguska meteor"
+ icon_state = "flaming"
+ desc = "Your life briefly passes before your eyes the moment you lay them on this monstruosity."
+ hits = 30
+ hitpwr = 1
+ heavy = 1
+ meteorsound = 'sound/effects/bamf.ogg'
+ meteordrop = /obj/item/weapon/ore/plasma
+
+/obj/effect/meteor/tunguska/meteor_effect()
+ ..(heavy)
+ explosion(src.loc, 5, 10, 15, 20, 0)
+
+/obj/effect/meteor/tunguska/Bump()
+ ..()
+ if(prob(20))
+ explosion(src.loc,2,4,6,8)
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 921b765bf75..c9f28e0c47c 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -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 ..()
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index c0af29571d0..d126c6c164e 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -555,8 +555,8 @@
/obj/item/weapon/spellbook/oneuse/fireball/recoil(mob/user as mob)
..()
- explosion(user.loc, -1, 0, 2, 3, 0)
- del(src)
+ explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
+ qdel(src)
/obj/item/weapon/spellbook/oneuse/smoke
spell = /obj/effect/proc_holder/spell/wizard/targeted/smoke
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 80c4d5dfea7..8ab3b3e626a 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -334,11 +334,6 @@ update_flag
healthcheck()
..()
-/obj/machinery/portable_atmospherics/canister/meteorhit(var/obj/O as obj)
- src.health = 0
- healthcheck()
- return
-
/obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params)
if(iswelder(W) && src.destroyed)
if(weld(W, user))
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 7051d805c82..10835470300 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -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())
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 79af00f560d..c8d2addfc09 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -182,12 +182,7 @@
//This could all be done better, but it works for now.
/obj/machinery/computer/HolodeckControl/Destroy()
emergencyShutdown()
- ..()
-
-/obj/machinery/computer/HolodeckControl/meteorhit(var/obj/O as obj)
- emergencyShutdown()
- ..()
-
+ return ..()
/obj/machinery/computer/HolodeckControl/emp_act(severity)
emergencyShutdown()
@@ -442,7 +437,7 @@
/obj/structure/holowindow/Destroy()
- ..()
+ return ..()
/obj/item/weapon/holo
damtype = STAMINA
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 064814b7846..92a47bad1a4 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -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?
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index 998d79b33ab..1ba23d9b2ed 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -118,4 +118,4 @@
/obj/machinery/computer/atmos_alert/Destroy()
radio_controller.remove_object(src, receive_frequency)
- ..()
+ return ..()
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 66ee77fcf7d..0b83144b356 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -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 ..()
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index c1ec8fb3ddf..d6a71a72080 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -22,21 +22,9 @@
/obj/machinery/computer/process()
if(stat & (NOPOWER|BROKEN))
- luminosity = 0
return 0
- luminosity = 2
return 1
-/obj/machinery/computer/meteorhit(var/obj/O as obj)
- for(var/x in verbs)
- verbs -= x
- set_broken()
- var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
- smoke.set_up(5, 0, src)
- smoke.start()
- return
-
-
/obj/machinery/computer/emp_act(severity)
if(prob(20/severity)) set_broken()
..()
@@ -129,7 +117,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
diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm
index f713732ff69..9eff8165eb5 100644
--- a/code/game/machinery/computer/power.dm
+++ b/code/game/machinery/computer/power.dm
@@ -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
diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm
index 4e8ad7498f0..6d646b9ebbd 100644
--- a/code/game/machinery/computer/prisonshuttle.dm
+++ b/code/game/machinery/computer/prisonshuttle.dm
@@ -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
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 59e726b2202..ae3b91c3ca3 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -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
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index 8cde409e649..48b1ce8418a 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -108,14 +108,6 @@ for reference:
qdel(src)
return
- meteorhit()
- visible_message("\red The barricade is smashed apart!")
- 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)
- return
-
blob_act()
src.health -= 25
if (src.health <= 0)
@@ -200,7 +192,7 @@ for reference:
if (src.health <= 0)
src.explode()
..()
-
+
emag_act(user as mob)
if (!emagged)
emagged = 1
@@ -236,10 +228,6 @@ for reference:
anchored = !anchored
icon_state = "barrier[src.locked]"
- meteorhit()
- src.explode()
- return
-
blob_act()
src.health -= 25
if (src.health <= 0)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 89b54d18c8c..ac589278c09 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -97,6 +97,7 @@
icon = 'icons/obj/doors/vault.dmi'
opacity = 1
assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites.
+ explosion_block = 2
/obj/machinery/door/airlock/freezer
name = "Freezer Airlock"
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index c9422a930b2..6702399aad3 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -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
@@ -124,11 +123,6 @@
flick("door_deny", src)
return
-/obj/machinery/door/meteorhit(obj/M as obj)
- src.open()
- return
-
-
/obj/machinery/door/attack_ai(mob/user as mob)
return src.attack_hand(user)
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 1430e8f00dc..e731689cbba 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -25,7 +25,7 @@
density = 0
if(health == 0)
playsound(src, "shatter", 70, 1)
- ..()
+ return ..()
/obj/machinery/door/window/proc/open_and_close()
@@ -175,7 +175,6 @@
/obj/machinery/door/window/hitby(AM as mob|obj)
..()
- visible_message("\The [src] was hit by \the [AM].")
var/tforce = 0
if(ismob(AM))
tforce = 40
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index 840ed1133c2..643aacaf549 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -14,17 +14,22 @@ var/list/doppler_arrays = list()
/obj/machinery/doppler_array/Destroy()
doppler_arrays -= src
- ..()
+ return ..()
/obj/machinery/doppler_array/process()
return PROCESS_KILL
/obj/machinery/doppler_array/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O, /obj/item/weapon/wrench))
+ if(!anchored && !isinspace())
+ anchored = 1
+ power_change()
+ user << "You fasten [src]."
+ else if(anchored)
+ anchored = 0
+ power_change()
+ user << "You unfasten [src]."
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
- anchored = !anchored
- power_change()
- user << "You [anchored ? "wrench" : "unwrench"] [src]."
/obj/machinery/doppler_array/verb/rotate()
set name = "Rotate Tachyon-doppler Dish"
@@ -33,12 +38,13 @@ var/list/doppler_arrays = list()
if(!usr || !isturf(usr.loc))
return
- if(usr.stat || usr.restrained())
+ if(usr.stat || usr.restrained() || !usr.canmove)
return
src.dir = turn(src.dir, 90)
return
-/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,var/took)
+/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,
+ var/took,var/orig_dev_range,var/orig_heavy_range,var/orig_light_range)
if(stat & NOPOWER) return
if(z != z0) return
@@ -59,10 +65,18 @@ var/list/doppler_arrays = list()
if(distance > 100) return
if(!(direct & dir)) return
- var/message = "Explosive disturbance detected - Epicenter at: grid ([x0],[y0]). Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range]. Temporal displacement of tachyons: [took] seconds."
+
+ var/list/messages = list("Explosive disturbance detected.", \
+ "Epicenter at: grid ([x0],[y0]). Temporal displacement of tachyons: [took] seconds.", \
+ "Factual: Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range].")
+
+ // If the bomb was capped, say it's theoretical size.
+ if(devastation_range < orig_dev_range || heavy_impact_range < orig_heavy_range || light_impact_range < orig_light_range)
+ messages += "Theoretical: Epicenter radius: [orig_dev_range]. Outer radius: [orig_heavy_range]. Shockwave radius: [orig_light_range]."
for(var/mob/O in hearers(src, null))
- O.show_message("[src] states coldly, \"[message]\"",2)
+ for(var/message in messages)
+ O.show_message("[src] states coldly, \"[message]\"",2)
/obj/machinery/doppler_array/power_change()
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index bb6948eda6b..e65f470a0d6 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -183,23 +183,19 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/hologram/ex_act(severity)
switch(severity)
if(1.0)
- del(src)
+ qdel(src)
if(2.0)
if (prob(50))
- del(src)
+ qdel(src)
if(3.0)
if (prob(5))
- del(src)
+ qdel(src)
return
/obj/machinery/hologram/blob_act()
del(src)
return
-/obj/machinery/hologram/meteorhit()
- del(src)
- return
-
/obj/machinery/hologram/Del()
if(hologram)
src:clear_holo()
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 9651d57e461..1ed3173e74f 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -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
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 8ce8273a526..3559013ce54 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -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()
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index 9aa87881287..876e1404411 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -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)
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 4458f560715..65c41918e6c 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -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)))
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index eec12fa856b..c5c61e87c69 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -19,7 +19,7 @@
opacity = 0
density = 0
air_update_turf(1)
- ..()
+ return ..()
/obj/machinery/shield/Move()
var/turf/T = loc
@@ -55,18 +55,6 @@
..()
-/obj/machinery/shield/meteorhit()
- src.health -= max_health*0.75 //3/4 health as damage
-
- if(src.health <= 0)
- visible_message("\blue The [src] dissipates")
- del(src)
- return
-
- opacity = 1
- spawn(20) if(src) opacity = 0
- return
-
/obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
@@ -103,8 +91,6 @@
/obj/machinery/shield/hitby(AM as mob|obj)
- //Let everyone know we've been hit!
- visible_message("\red [src] was hit by [AM].")
//Super realistic, resource-intensive, real-time damage calculations.
var/tforce = 0
@@ -154,7 +140,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()
@@ -192,13 +178,6 @@
update_icon()
return
-/obj/machinery/shieldgen/meteorhit(obj/O as obj)
- src.health -= max_health*0.25 //A quarter of the machine's health
- if (prob(5))
- src.malfunction = 1
- src.checkhp()
- return
-
/obj/machinery/shieldgen/ex_act(severity)
switch(severity)
if(1.0)
@@ -523,7 +502,7 @@
src.cleanup(2)
src.cleanup(4)
src.cleanup(8)
- ..()
+ return ..()
/obj/machinery/shieldwallgen/bullet_act(var/obj/item/projectile/Proj)
storedpower -= Proj.damage
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index 292e3eacbe0..ab65c5a1e3d 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -184,7 +184,7 @@
/obj/machinery/power/singularity_beacon/Destroy()
if(active)
Deactivate()
- ..()
+ return ..()
//stealth direct power usage
/obj/machinery/power/singularity_beacon/process()
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index fb6b23d17d1..1cb98f35541 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -187,8 +187,10 @@
if(adminlog)
message_admins(adminlog)
log_game(adminlog)
- explosion(get_turf(src),2,5,11)
- del(src)
+ explosion(get_turf(src),2,5,11, flame_range = 11)
+ if(src.loc && istype(src.loc,/obj/machinery/syndicatebomb/))
+ qdel(src.loc)
+ qdel(src)
/obj/item/weapon/bombcore/proc/defuse()
//Note: Because of how var/defused is used you shouldn't override this UNLESS you intend to set the var to 0 or
@@ -269,16 +271,17 @@
var/HeavyExplosion = 2
var/MediumExplosion = 5
var/LightExplosion = 11
+ var/Flames = 11
/obj/item/weapon/bombcore/badmin/explosion/detonate()
- explosion(get_turf(src),HeavyExplosion,MediumExplosion,LightExplosion)
+ explosion(get_turf(src),HeavyExplosion,MediumExplosion,LightExplosion, flame_range = Flames)
/obj/item/weapon/bombcore/miniature
name = "small bomb core"
w_class = 2
/obj/item/weapon/bombcore/miniature/detonate()
- explosion(src.loc,1,2,4) //Identical to a minibomb
+ explosion(src.loc,1,2,4,flame_range = 2) //Identical to a minibomb
qdel(src)
///Syndicate Detonator (aka the big red button)///
diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm
index 9708dbf3304..732affcaa17 100644
--- a/code/game/machinery/telecomms/logbrowser.dm
+++ b/code/game/machinery/telecomms/logbrowser.dm
@@ -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
diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm
index 1899ee09ac3..e6e60cfe5a2 100644
--- a/code/game/machinery/telecomms/telemonitor.dm
+++ b/code/game/machinery/telecomms/telemonitor.dm
@@ -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
diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm
index 967cef6617c..6149c7989f3 100644
--- a/code/game/machinery/telecomms/traffic_control.dm
+++ b/code/game/machinery/telecomms/traffic_control.dm
@@ -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
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 6937938b135..d9b57fcbf16 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -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)
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index c6979895b8c..18f41d604a7 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -422,10 +422,6 @@
/obj/machinery/gun_turret/emp_act() //Can't emp an mechanical turret.
return
-/obj/machinery/gun_turret/meteorhit()
- die()
- return
-
/obj/machinery/gun_turret/update_icon()
if(state > 2 || state < 0) //someone fucked up the vars so fix them
take_damage(0)
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index dad171e0e59..bf58a6f6129 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -151,7 +151,7 @@
if(coin)
del(coin) // qdel
coin = null
- ..()
+ return ..()
/obj/machinery/vending/ex_act(severity)
switch(severity)
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 3f82973767d..a9ef99f5676 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -363,8 +363,8 @@
throw_impact(atom/hit_atom)
if(primed)
- explosion(hit_atom, 0, 0, 2, 4)
- del(src)
+ explosion(hit_atom, 0, 0, 2, 4, 0)
+ qdel(src)
else
..()
return
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index a4832793c7e..f40127bf46b 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -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))
@@ -633,7 +632,7 @@
T.Entered(O)
if(prob(30))
- explosion(T, 0, 0, 1, 3)
+ explosion(get_turf(loc), 0, 0, 1, 3)
spawn(0)
if(wreckage)
var/obj/effect/decal/mecha_wreckage/WR = new wreckage(T)
@@ -658,7 +657,7 @@
E.forceMove(T)
E.destroy()
spawn(0)
- del(src)
+ qdel(src)
return
/obj/mecha/ex_act(severity)
@@ -710,9 +709,6 @@
take_damage(30, "brute")
return
-/obj/mecha/meteorhit()
- return ex_act(rand(1,3))//should do for now
-
/obj/mecha/emp_act(severity)
if(get_charge())
use_power((cell.charge/2)/severity)
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index f88992671ca..3608b06c25d 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -91,11 +91,11 @@
return answer
emp_act()
- del src
+ qdel(src)
return
ex_act()
- del src
+ qdel(src)
return
proc/in_mecha()
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 64c29246834..dd9a4480e3d 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -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
\ No newline at end of file
+ return ..()
\ No newline at end of file
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index cac20a32362..8312fc0f328 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -35,7 +35,7 @@
var/turf/T = loc
loc = null
T.relativewall_neighbours()
- ..()
+ return ..()
/obj/structure/alien/resin/Move()
var/turf/T = loc
@@ -99,7 +99,6 @@
/obj/structure/alien/resin/hitby(atom/movable/AM)
..()
- visible_message("[src] was hit by [AM].")
var/tforce = 0
if(!isobj(AM))
tforce = 10
@@ -182,7 +181,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
@@ -209,8 +208,8 @@
new /obj/structure/alien/weeds(T, linked_node)
-/obj/structure/alien/weeds/ex_act(severity, target)
- del(src)
+/obj/structure/alien/weeds/ex_act(severity)
+ qdel(src)
/obj/structure/alien/weeds/attackby(obj/item/I, mob/user, params)
diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm
index 256caa010a5..9379234ca68 100644
--- a/code/game/objects/effects/bump_teleporter.dm
+++ b/code/game/objects/effects/bump_teleporter.dm
@@ -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))
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 72c3c4db24f..b897b1899dc 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -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)
@@ -1102,11 +1100,11 @@ steam.start() -- spawns the effect
qdel(src)
blob_act()
- del(src)
+ qdel(src)
bullet_act()
if(metal==1 || prob(50))
- del(src)
+ qdel(src)
attack_hand(var/mob/user)
if ((HULK in user.mutations) || (prob(75 - metal*25)))
@@ -1115,7 +1113,7 @@ steam.start() -- spawns the effect
if ((O.client && !( O.blinded )))
O << "\red [user] smashes through the foamed metal."
- del(src)
+ qdel(src)
else
user << "\blue You hit the metal foam but bounce off it."
return
@@ -1129,8 +1127,8 @@ steam.start() -- spawns the effect
for(var/mob/O in viewers(src))
if (O.client)
O << "\red [G.assailant] smashes [G.affecting] through the foamed metal wall."
- del(I)
- del(src)
+ qdel(I)
+ qdel(src)
return
if(prob(I.force*20 - metal*25))
@@ -1138,7 +1136,7 @@ steam.start() -- spawns the effect
for(var/mob/O in oviewers(user))
if ((O.client && !( O.blinded )))
O << "\red [user] smashes through the foamed metal."
- del(src)
+ qdel(src)
else
user << "\blue You hit the metal foam to no effect."
@@ -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
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index ae04632a0f8..2fdad42d3c7 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -51,7 +51,7 @@
/obj/effect/glowshroom/Destroy()
processing_objects -= src
- ..()
+ return ..()
/obj/effect/glowshroom/process()
if(!spreaded)
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 5b13f3258dc..136efaab9a0 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -99,7 +99,7 @@
/obj/effect/landmark/Destroy()
landmarks_list -= src
- ..()
+ return ..()
/obj/effect/landmark/nations
name = "nations"
diff --git a/code/game/objects/effects/sm_crystals.dm b/code/game/objects/effects/sm_crystals.dm
index d725b23d0bc..910f724d079 100644
--- a/code/game/objects/effects/sm_crystals.dm
+++ b/code/game/objects/effects/sm_crystals.dm
@@ -156,15 +156,15 @@
/obj/effect/supermatter_crystal/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
@@ -176,4 +176,4 @@
/obj/effect/supermatter_crystal/proc/CheckEndurance()
if(endurance <= 0)
- del(src)
\ No newline at end of file
+ qdel(src)
\ No newline at end of file
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 53178432ef6..60085d0f9b0 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -220,4 +220,4 @@
src.visible_message("\The [src] splits open.")
for(var/atom/movable/A in contents)
A.loc = src.loc
- ..()
+ return ..()
diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm
index 169486cd78e..60cbc8daafd 100644
--- a/code/game/objects/explosion.dm
+++ b/code/game/objects/explosion.dm
@@ -6,7 +6,7 @@
if(dx>=dy) return dx + (0.5*dy) //The longest side add half the shortest side approximates the hypotenuse
else return dy + (0.5*dx)
-proc/trange(var/Dist=0,var/turf/Center=null)//alternative to range (ONLY processes turfs and thus less intensive)
+/proc/trange(var/Dist=0,var/turf/Center=null)//alternative to range (ONLY processes turfs and thus less intensive)
if(Center==null) return
//var/x1=((Center.x-Dist)<1 ? 1 : Center.x-Dist)
@@ -19,42 +19,60 @@ proc/trange(var/Dist=0,var/turf/Center=null)//alternative to range (ONLY process
return block(x1y1,x2y2)
-proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, adminlog = 1)
+/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0)
src = null //so we don't abort once src is deleted
+ epicenter = get_turf(epicenter)
+
+ // Archive the uncapped explosion for the doppler array
+ var/orig_dev_range = devastation_range
+ var/orig_heavy_range = heavy_impact_range
+ var/orig_light_range = light_impact_range
+
+ if(!ignorecap)
+ // Clamp all values to MAX_EXPLOSION_RANGE
+ devastation_range = min (MAX_EX_DEVESTATION_RANGE, devastation_range)
+ heavy_impact_range = min (MAX_EX_HEAVY_RANGE, heavy_impact_range)
+ light_impact_range = min (MAX_EX_LIGHT_RANGE, light_impact_range)
+ flash_range = min (MAX_EX_FLASH_RANGE, flash_range)
+ flame_range = min (MAX_EX_FLAME_RANGE, flame_range)
+
spawn(0)
var/start = world.timeofday
- epicenter = get_turf(epicenter)
if(!epicenter) return
- var/max_range = max(devastation_range, heavy_impact_range, light_impact_range)
+ var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
- // Play sounds; since playsound uses range() for each use, we'll try doing it through the player list.
- // Playsound_local will also have an extra bonus of panning the sound, depending on the source. So stereo users will hear the direction of the explosion
- for(var/mob/M in player_list)
- // Double check for client
- if(M && M.client)
- var/turf/M_turf = get_turf(M)
- if(M_turf && M_turf.z == epicenter.z)
- var/dist = get_dist(M_turf, epicenter)
- // If inside the blast radius + world.view - 2
- if(dist <= round(max_range + world.view - 2, 1))
- M.playsound_local(epicenter, "explosion", 100, 1)
- // You hear a far explosion if you're outside the blast radius (*5) Small bombs shouldn't be heard all over the station.
- else if(dist <= round(max_range * 10, 1))
- var/far_volume = Clamp(max_range * 10, 30, 60) // Volume is based on explosion size and dist
- far_volume += (dist > max_range * 2 ? 0 : 40) // add 40 volume if the mob is pretty close to the explosion
- M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1)
-
-
- var/close = range(world.view+round(devastation_range,1), epicenter)
- // to all distanced mobs play a different sound
- for(var/mob/M in world) if(M.z == epicenter.z) if(!(M in close))
- // check if the mob can hear
- if(M.ear_deaf <= 0 || !M.ear_deaf) if(!istype(M.loc,/turf/space))
- M << 'sound/effects/explosionfar.ogg'
if(adminlog)
- msg_admin_attack("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (JMP)")
- log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
+ message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (JMP)")
+ log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
+
+ // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves.
+ // Stereo users will also hear the direction of the explosion!
+
+ // Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions.
+ // 3/7/14 will calculate to 80 + 35
+
+ var/far_dist = 0
+ far_dist += heavy_impact_range * 5
+ far_dist += devastation_range * 20
+
+ if(!silent)
+ var/frequency = get_rand_frequency()
+ for(var/mob/M in player_list)
+ // Double check for client
+ if(M && M.client)
+ var/turf/M_turf = get_turf(M)
+ if(M_turf && M_turf.z == epicenter.z)
+ var/dist = get_dist(M_turf, epicenter)
+ // If inside the blast radius + world.view - 2
+ if(dist <= round(max_range + world.view - 2, 1))
+ M.playsound_local(epicenter, get_sfx("explosion"), 100, 1, frequency, falloff = 5) // get_sfx() is so that everyone gets the same sound
+ // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
+ else if(dist <= far_dist)
+ var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
+ far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
+ M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5)
+
//Pause the lighting updates for a bit
var/datum/controller/process/lighting = processScheduler.getProcess("lighting")
@@ -74,7 +92,8 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
var/z0 = epicenter.z
for(var/turf/T in trange(max_range, epicenter))
- var/dist = sqrt((T.x - x0)**2 + (T.y - y0)**2)
+
+ var/dist = cheap_pythag(T.x - x0,T.y - y0)
if(config.reactionary_explosions)
var/turf/Trajectory = T
@@ -87,19 +106,25 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
if(D.density && D.explosion_block)
dist += D.explosion_block
+ var/flame_dist = 0
var/throw_dist = dist
+ if(dist < flame_range)
+ flame_dist = 1
+
if(dist < devastation_range) dist = 1
else if(dist < heavy_impact_range) dist = 2
else if(dist < light_impact_range) dist = 3
- else dist = 0
+ else dist = 0
+
+ //------- TURF FIRES -------
if(T)
for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway
var/atom/movable/AM = atom_movable
- if(AM && AM.simulated) AM.ex_act(dist)
-// if(flame_dist && prob(40) && !istype(T, /turf/space) && !T.density)
-// PoolOrNew(/obj/effect/hotspot, T) //Mostly for ambience!
+ if(AM) AM.ex_act(dist)
+ if(flame_dist && prob(40) && !istype(T, /turf/space) && !T.density)
+ new/obj/effect/hotspot(T) //Mostly for ambience!
if(dist > 0)
T.ex_act(dist)
@@ -122,7 +147,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
for(var/i,i<=doppler_arrays.len,i++)
var/obj/machinery/doppler_array/Array = doppler_arrays[i]
if(Array)
- Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took)
+ Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range)
sleep(8)
@@ -136,7 +161,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
-proc/secondaryexplosion(turf/epicenter, range)
+/proc/secondaryexplosion(turf/epicenter, range)
for(var/turf/tile in trange(range, epicenter))
tile.ex_act(2)
@@ -145,8 +170,10 @@ proc/secondaryexplosion(turf/epicenter, range)
set category = "Debug"
var/newmode = alert("Use reactionary explosions?","Check Bomb Impact", "Yes", "No")
+ var/turf/epicenter = get_turf(mob)
+ if(!epicenter)
+ return
- var/turf/epicenter = get_turf(usr)
var/dev = 0
var/heavy = 0
var/light = 0
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 728c4528da5..e1b8e41baf8 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -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'
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index e31bfc79996..bc161a5d70e 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -1293,14 +1293,14 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (ismob(loc))
var/mob/M = loc
- M.show_message("\red Your [src] explodes!", 1)
+ M.show_message("Your [src] explodes!", 1)
if(T)
T.hotspot_expose(700,125)
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))
diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm
index e3ea25af4e4..bc631aece49 100644
--- a/code/game/objects/items/devices/PDA/radio.dm
+++ b/code/game/objects/items/devices/PDA/radio.dm
@@ -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)
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index 70791bddab2..b2107561a60 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -134,6 +134,6 @@
if(1.0)
del(src)
if(2.0)
- if(prob(50)) del(src)
+ if(prob(50)) qdel(src)
if(3.0)
- if(prob(25)) del(src)
+ if(prob(25)) qdel(src)
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 76202bb6016..22ea7441935 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -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
diff --git a/code/game/objects/items/devices/guitar.dm b/code/game/objects/items/devices/guitar.dm
index 7cc6aa7ec22..e8aa4e3dd6d 100644
--- a/code/game/objects/items/devices/guitar.dm
+++ b/code/game/objects/items/devices/guitar.dm
@@ -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)
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 2c2c5d9ea07..4393408d8f7 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -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))
@@ -317,4 +317,4 @@
if(pai)
pai.ex_act(severity)
else
- del(src)
+ qdel(src)
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index d67537d747e..98130412312 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -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)
..()
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 48adb04c988..3cbcde23f4a 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -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)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index d25883e547c..388467ac607 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -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)
diff --git a/code/game/objects/items/devices/violin.dm b/code/game/objects/items/devices/violin.dm
index 0efcf5e6f84..99288450a9b 100644
--- a/code/game/objects/items/devices/violin.dm
+++ b/code/game/objects/items/devices/violin.dm
@@ -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)
diff --git a/code/game/objects/items/mountable_frames/frames.dm b/code/game/objects/items/mountable_frames/frames.dm
index d40bb2572fe..b6848fc6d12 100644
--- a/code/game/objects/items/mountable_frames/frames.dm
+++ b/code/game/objects/items/mountable_frames/frames.dm
@@ -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)
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 3db6ae018f8..18283f81efe 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -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)
diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm
index e0608af5e06..b3cbbcd7421 100644
--- a/code/game/objects/items/weapons/chrono_eraser.dm
+++ b/code/game/objects/items/weapons/chrono_eraser.dm
@@ -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))
diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm
index 6816a9cbe3f..efa5684027d 100644
--- a/code/game/objects/items/weapons/cigs.dm
+++ b/code/game/objects/items/weapons/cigs.dm
@@ -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)
diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm
index 58ebf621f7d..2faf8a19083 100644
--- a/code/game/objects/items/weapons/defib.dm
+++ b/code/game/objects/items/weapons/defib.dm
@@ -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)
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index 70b2b5fe03e..1df86de4c29 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -29,7 +29,7 @@
qdel(igniter)
if(ptank)
qdel(ptank)
- ..()
+ return ..()
/obj/item/weapon/flamethrower/process()
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index c87d3f9ef3f..c972821fcb0 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -35,7 +35,7 @@
return
/obj/item/weapon/a_gift/ex_act()
- del(src)
+ qdel(src)
return
/obj/effect/spresent/relaymove(mob/user as mob)
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index 37353662f00..9adf9cf5d4b 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -479,9 +479,9 @@
beakers += B2
update_icon()
-/obj/item/weapon/grenade/chem_grenade/saringas
- payload_name = "saringas"
- desc = "Contains sarin gas; extremely deadly and fast acting; use with extreme caution."
+/obj/item/weapon/grenade/chem_grenade/tabungas
+ payload_name = "tabungas"
+ desc = "Contains tabun gas; extremely deadly and fast acting; use with extreme caution."
stage = READY
New()
@@ -489,7 +489,7 @@
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
- B1.reagents.add_reagent("sarin", 25)
+ B1.reagents.add_reagent("tabun", 25)
B1.reagents.add_reagent("potassium", 25)
B2.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("sugar", 25)
diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm
index 707697a9fba..bc07fb389b9 100644
--- a/code/game/objects/items/weapons/grenades/ghettobomb.dm
+++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm
@@ -122,7 +122,7 @@
/obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up
update_mob()
- explosion(src.loc,0,0,2,2) //explosion(src.loc,-1,-1,-1, flame_range = range)
+ explosion(src.loc,-1,-1,-1, flame_range = range) // no explosive damage, only a large fireball.
qdel(src)
/obj/item/weapon/grenade/iedcasing/examine(mob/user)
diff --git a/code/game/objects/items/weapons/grenades/syndieminibomb.dm b/code/game/objects/items/weapons/grenades/syndieminibomb.dm
index acd086c6205..52efab0a48b 100644
--- a/code/game/objects/items/weapons/grenades/syndieminibomb.dm
+++ b/code/game/objects/items/weapons/grenades/syndieminibomb.dm
@@ -9,5 +9,5 @@
/obj/item/weapon/grenade/syndieminibomb/prime()
update_mob()
- explosion(src.loc,1,2,4)
- del(src)
\ No newline at end of file
+ explosion(src.loc,1,2,4,flame_range = 2)
+ qdel(src)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index b44235a3c4f..4f4d23b739d 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -157,7 +157,7 @@ var/last_chew = 0
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C)
C.update_inv_handcuffed(1)
user << "You handcuff [C]."
- add_logs(user, C, "handcuffed")
+ add_logs(C, user, "ziptie-cuffed")
else
user << "You fail to handcuff [C]."
diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm
index bc230944398..0707df46608 100644
--- a/code/game/objects/items/weapons/shards.dm
+++ b/code/game/objects/items/weapons/shards.dm
@@ -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))
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index add69354396..e7986575e8e 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -183,7 +183,7 @@
/obj/item/weapon/storage/fancy/cigarettes/Destroy()
del(reagents)
- ..()
+ return ..()
/obj/item/weapon/storage/fancy/cigarettes/update_icon()
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index efc648d1dbf..09fa9b17db8 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -199,12 +199,12 @@
new /obj/item/weapon/implanter/emp/(src)
new /obj/item/device/flashlight/emp/(src)
-/obj/item/weapon/storage/box/syndie_kit/sarin
- name = "Sarin Gas Grenades"
+/obj/item/weapon/storage/box/syndie_kit/tabun
+ name = "Tabun Gas Grenades"
New()
..()
- new /obj/item/weapon/grenade/chem_grenade/saringas(src)
- new /obj/item/weapon/grenade/chem_grenade/saringas(src)
- new /obj/item/weapon/grenade/chem_grenade/saringas(src)
- new /obj/item/weapon/grenade/chem_grenade/saringas(src)
\ No newline at end of file
+ new /obj/item/weapon/grenade/chem_grenade/tabungas(src)
+ new /obj/item/weapon/grenade/chem_grenade/tabungas(src)
+ new /obj/item/weapon/grenade/chem_grenade/tabungas(src)
+ new /obj/item/weapon/grenade/chem_grenade/tabungas(src)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index 9d1907df0e8..6a977006fb8 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -37,7 +37,7 @@
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/tank/examine()
var/obj/icon = src
@@ -248,13 +248,15 @@
air_contents.react()
pressure = air_contents.return_pressure()
var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE
- range = min(range, MAX_EXPLOSION_RANGE) // was 8 - - - Changed to a configurable define -- TLE
var/turf/epicenter = get_turf(loc)
//world << "\blue Exploding Pressure: [pressure] kPa, intensity: [range]"
explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5))
- del(src)
+ if(istype(src.loc,/obj/item/device/transfer_valve))
+ qdel(src.loc)
+ else
+ qdel(src)
else if(pressure > TANK_RUPTURE_PRESSURE)
//world << "\blue[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]"
@@ -264,7 +266,7 @@
return
T.assume_air(air_contents)
playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3)
- del(src)
+ qdel(src)
else
integrity--
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index 149ef830713..ff76e6259d3 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -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)
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 69b7358d96f..bce7bb25ea7 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -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()
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index d3dbd5d9045..5c09ac57c0d 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -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()
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 69dab06ced4..88649ff62fa 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -19,14 +19,10 @@
if(3.0)
return
-/obj/structure/meteorhit(obj/O as obj)
- del(src)
-
-
/obj/structure/Destroy()
if(hascall(src, "unbuckle"))
src:unbuckle()
- ..()
+ return ..()
/obj/structure/mech_melee_attack(obj/mecha/M)
if(M.damtype == "brute")
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index ce4729c3a03..edc99071fb4 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -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)
@@ -175,13 +175,6 @@
A.loc = src.loc
del(src)
-/obj/structure/closet/meteorhit(obj/O as obj)
- if(O.icon_state == "flaming")
- for(var/mob/M in src)
- M.meteorhit(O)
- src.dump_contents()
- del(src)
-
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/rcs) && !src.opened)
var/obj/item/weapon/rcs/E = W
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index dfe09d025d9..e4249321488 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -99,12 +99,15 @@
/obj/structure/closet/statue/toggle()
return
-/obj/structure/closet/statue/bullet_act(var/obj/item/projectile/Proj)
- health -= Proj.damage
+/obj/structure/closet/statue/proc/check_health()
if(health <= 0)
for(var/mob/M in src)
shatter(M)
+/obj/structure/closet/statue/bullet_act(var/obj/item/projectile/Proj)
+ health -= Proj.damage
+ check_health()
+
return
/obj/structure/closet/statue/attack_animal(mob/living/simple_animal/user as mob)
@@ -116,21 +119,17 @@
for(var/mob/M in src)
shatter(M)
-/obj/structure/closet/statue/meteorhit(obj/O as obj)
- if(O.icon_state == "flaming")
- for(var/mob/M in src)
- M.meteorhit(O)
- shatter(M)
+/obj/structure/closet/statue/ex_act(severity)
+ for(var/mob/M in src)
+ M.ex_act(severity)
+ health -= 60 / severity
+ check_health()
/obj/structure/closet/statue/attackby(obj/item/I as obj, mob/user as mob, params)
user.changeNext_move(CLICK_CD_MELEE)
health -= I.force
visible_message("\red [user] strikes [src] with [I].")
- if(health <= 0)
- for(var/mob/M in src)
- shatter(M)
-
-
+ check_health()
/obj/structure/closet/statue/MouseDrop_T()
return
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index ee2b6d7754c..08130cac90a 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -4,7 +4,10 @@
icon_state = "blue"
icon_closed = "blue"
-/obj/structure/closet/wardrobe/New()
+/obj/structure/closet/wardrobe/generic
+ // Identical to the base wardrobe, aside from containing some stuff.
+
+/obj/structure/closet/wardrobe/generic/New()
..()
sleep(2)
new /obj/item/clothing/under/color/blue(src)
@@ -267,10 +270,12 @@
new /obj/item/clothing/shoes/white(src)
return
-/obj/structure/closet/wardrobe/white/medical
+/obj/structure/closet/wardrobe/medical_white
name = "medical doctor's wardrobe"
+ icon_state = "white"
+ icon_closed = "white"
-/obj/structure/closet/wardrobe/white/medical/New()
+/obj/structure/closet/wardrobe/medical_white/New()
..()
sleep(2)
new /obj/item/clothing/under/rank/nursesuit (src)
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 8a7202b1925..115f4a0b5d2 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -181,13 +181,13 @@
switch(severity)
if(1.0)
for(var/obj/O in src.contents)
- del(O)
+ qdel(O)
qdel(src)
return
if(2.0)
for(var/obj/O in src.contents)
if(prob(50))
- del(O)
+ qdel(O)
qdel(src)
return
if(3.0)
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index f89ed09d6bb..b33bb093469 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -98,10 +98,10 @@
/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)
+ qdel(src)
if (2)
if (prob(50))
src.health -= 15
@@ -121,23 +121,16 @@
/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)
- if(occupant) dump()
- del(src)
-
-
+
/obj/structure/displaycase/proc/healthcheck()
if (src.health <= 0)
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
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 196e5d29c3d..638657621e4 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -37,7 +37,7 @@
for(var/obj/structure/falsewall/W in range(temploc,1))
W.relativewall()
- ..()
+ return ..()
/obj/structure/falsewall/relativewall()
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 9e66774f900..9af24b455f8 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -37,19 +37,14 @@
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)
-
-/obj/structure/grille/meteorhit(var/obj/M)
- returnToPool(src)
-
-
+ qdel(src)
+
/obj/structure/grille/Bumped(atom/user)
if(ismob(user)) shock(user, 70)
@@ -144,7 +139,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 +219,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
diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
index e75625b6a78..fe5171d84c9 100644
--- a/code/game/objects/structures/inflatable.dm
+++ b/code/game/objects/structures/inflatable.dm
@@ -62,11 +62,6 @@
blob_act()
deflate(1)
-
- meteorhit()
- //world << "glass at [x],[y],[z] Mhit"
- deflate(1)
-
attack_hand(mob/user as mob)
add_fingerprint(user)
return
diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm
index 229fe4e9055..c59bcaf648b 100644
--- a/code/game/objects/structures/lamarr_cage.dm
+++ b/code/game/objects/structures/lamarr_cage.dm
@@ -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,23 +35,16 @@
/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)
- Break()
- qdel(src)
-
-
+
/obj/structure/lamarr/proc/healthcheck()
if (src.health <= 0)
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
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index e14c9024d77..3b23f7df034 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -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)
diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm
index 6ed7da87a3b..165436ba3ee 100644
--- a/code/game/objects/structures/musician.dm
+++ b/code/game/objects/structures/musician.dm
@@ -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)
diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm
index d665589182e..10b8d73a92b 100644
--- a/code/game/objects/structures/safe.dm
+++ b/code/game/objects/structures/safe.dm
@@ -168,10 +168,6 @@ obj/structure/safe/ex_act(severity)
return
-obj/structure/safe/meteorhit(obj/O as obj)
- return
-
-
//FLOOR SAFES
/obj/structure/safe/floor
name = "floor safe"
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index b19876e2e8e..58723261562 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -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)
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 520f951bca3..de51f62114d 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -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("\The [src] shatters, and the frame collapses!", "You hear metal collapsing and glass shattering.")
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)
@@ -905,10 +905,6 @@
W.Move(loc)
return
-/obj/structure/rack/meteorhit(obj/O as obj)
- del(src)
-
-
/obj/structure/table/attack_hand(mob/user)
if(HULK in user.mutations)
visible_message("[user] smashes [src] apart!")
diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm
index 4806844ac4d..b103179d58b 100644
--- a/code/game/objects/structures/transit_tubes/station.dm
+++ b/code/game/objects/structures/transit_tubes/station.dm
@@ -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
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index 293f823fc43..bae36458f76 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -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)
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index a9ef0455066..f732e1d78d2 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -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
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 64aca8bcbe9..ac2efbe2866 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -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= STAGE_FIVE)
destroy()
@@ -102,7 +99,6 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
/obj/structure/window/hitby(AM as mob|obj)
..()
- visible_message("[src] was hit by [AM].")
var/tforce = 0
if(isobj(AM))
var/obj/item/I = AM
@@ -223,7 +219,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 0)
@@ -179,8 +179,8 @@
H2.forceMove(get_turf(src))
H2.ex_act(severity + 1)
H2 << "You are forcefully thrown from \the [src]!"
- del(ion_trail)
- del(src)
+ qdel(ion_trail)
+ qdel(src)
if(2)
deal_damage(100)
if(3)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 89fe2f3a863..92d1bf5a331 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -384,17 +384,26 @@ var/list/admin_verbs_mentor = list(
if(null)
return 0
if("Small Bomb")
- explosion(epicenter, 1, 2, 3)
+ explosion(epicenter, 1, 2, 3, 3)
if("Medium Bomb")
- explosion(epicenter, 2, 3, 4)
+ explosion(epicenter, 2, 3, 4, 4)
if("Big Bomb")
- explosion(epicenter, 3, 5, 7)
+ explosion(epicenter, 3, 5, 7, 5)
if("Custom Bomb")
- var/devastation_range = input("Devastation range (in tiles):") as num
- var/heavy_impact_range = input("Heavy impact range (in tiles):") as num
- var/light_impact_range = input("Light impact range (in tiles):") as num
- explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range)
- message_admins("\blue [ckey] creating an admin explosion at [epicenter.loc].")
+ var/devastation_range = input("Devastation range (in tiles):") as null|num
+ if(devastation_range == null)
+ return
+ var/heavy_impact_range = input("Heavy impact range (in tiles):") as null|num
+ if(heavy_impact_range == null)
+ return
+ var/light_impact_range = input("Light impact range (in tiles):") as null|num
+ if(light_impact_range == null)
+ return
+ var/flash_range = input("Flash range (in tiles):") as null|num
+ if(flash_range == null)
+ return
+ explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, 1, 1)
+ message_admins("[ckey] creating an admin explosion at [epicenter.loc].")
feedback_add_details("admin_verb","DB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/give_spell(mob/T as mob in mob_list) // -- Urist
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index ec3362fa23b..fc6bfa4ed53 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -2332,18 +2332,22 @@
if("togglebombcap")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","BC")
- switch(MAX_EXPLOSION_RANGE)
- if(14) MAX_EXPLOSION_RANGE = 16
- if(16) MAX_EXPLOSION_RANGE = 20
- if(20) MAX_EXPLOSION_RANGE = 28
- if(28) MAX_EXPLOSION_RANGE = 56
- if(56) MAX_EXPLOSION_RANGE = 128
- else MAX_EXPLOSION_RANGE = 14
- var/range_dev = MAX_EXPLOSION_RANGE *0.25
- var/range_high = MAX_EXPLOSION_RANGE *0.5
- var/range_low = MAX_EXPLOSION_RANGE
- message_admins("\red [key_name_admin(usr)] changed the bomb cap to [range_dev], [range_high], [range_low]", 1)
- log_admin("[key_name_admin(usr)] changed the bomb cap to [MAX_EXPLOSION_RANGE]")
+
+ var/newBombCap = input(usr,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be between 4 and 128)", "New Bomb Cap", MAX_EX_LIGHT_RANGE) as num|null
+ if (newBombCap < 4)
+ return
+ if (newBombCap > 128)
+ newBombCap = 128
+
+ MAX_EX_DEVESTATION_RANGE = round(newBombCap/4)
+ MAX_EX_HEAVY_RANGE = round(newBombCap/2)
+ MAX_EX_LIGHT_RANGE = newBombCap
+ //I don't know why these are their own variables, but fuck it, they are.
+ MAX_EX_FLASH_RANGE = newBombCap
+ MAX_EX_FLAME_RANGE = newBombCap
+
+ message_admins("[key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]")
+ log_admin("[key_name(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]")
if("flicklights")
feedback_inc("admin_secrets_fun_used",1)
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 385dccf3e01..feb735baef2 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -698,15 +698,17 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(light == null) return
var/flash = input("Range of flash. -1 to none", text("Input")) as num|null
if(flash == null) return
+ var/flames = input("Range of flames. -1 to none", text("Input")) as num|null
+ if(flames == null) return
- if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1))
- if ((devastation > 20) || (heavy > 20) || (light > 20))
+ if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1) || (flames != -1))
+ if ((devastation > 20) || (heavy > 20) || (light > 20) || (flames > 20))
if (alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No")
return
- explosion(O, devastation, heavy, light, flash)
- log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])")
- message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])", 1)
+ explosion(O, devastation, heavy, light, flash, null, null,flames)
+ log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flames]) at ([O.x],[O.y],[O.z])")
+ message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flames]) at ([O.x],[O.y],[O.z])")
feedback_add_details("admin_verb","EXPL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
else
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index 127f3c5d9ca..19fe8d84219 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -192,15 +192,15 @@
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
return
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index e35e890fd8f..05f56f223f6 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -216,4 +216,4 @@
if(previous)
previous.next = null
master.last = previous
- ..()
\ No newline at end of file
+ return ..()
\ No newline at end of file
diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm
index 53bbd47beca..049b87640ee 100644
--- a/code/modules/assembly/shock_kit.dm
+++ b/code/modules/assembly/shock_kit.dm
@@ -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)
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 49da421a9ca..fb2e5ec16ef 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -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))
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index ce52c7525a5..c0b47824979 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -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
- ..()
\ No newline at end of file
+ return ..()
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index f92c7fcde21..305d2933ef6 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -214,82 +214,54 @@
if(!istype(user,/mob/living)) return
- if(user.a_intent == "help")
- if(istype(src.loc,/mob/living))
- user << "How do you propose to modify a hardsuit while it is being worn?"
+ if(istype(src.loc,/mob/living))
+ user << "How do you propose to modify a hardsuit while it is being worn?"
+ return
+
+ if(istype(W,/obj/item/weapon/screwdriver))
+ if(!helmet)
+ user << "\The [src] does not have a helmet installed."
+ else
+ user << "You detach \the [helmet] from \the [src]'s helmet mount."
+ helmet.loc = get_turf(src)
+ src.helmet = null
+ return
+ if(!boots)
+ user << "\The [src] does not have any boots installed."
+ else
+ user << "You detatch \the [boots] from \the [src]'s boot mounts."
+ boots.loc = get_turf(src)
+ boots = null
+ return
+
+ else if(istype(W,/obj/item/clothing/head/helmet/space))
+ if(!attached_helmet)
+ user << "\The [src] does not have a helmet mount."
+ return
+ if(helmet)
+ user << "\The [src] already has a helmet installed."
+ else
+ user << "You attach \the [W] to \the [src]'s helmet mount."
+ user.drop_item()
+ W.loc = src
+ src.helmet = W
+ return
+
+ else if(istype(W,/obj/item/clothing/shoes/magboots))
+ if(!attached_boots)
+ user << "\The [src] does not have boot mounts."
return
- var/target_zone = user.zone_sel.selecting
-
- if(target_zone == "head")
-
- //Installing a component into or modifying the contents of the helmet.
- if(!attached_helmet)
- user << "\The [src] does not have a helmet mount."
- return
-
- if(istype(W,/obj/item/weapon/screwdriver))
- if(!helmet)
- user << "\The [src] does not have a helmet installed."
- else
- user << "You detach \the [helmet] from \the [src]'s helmet mount."
- helmet.loc = get_turf(src)
- src.helmet = null
- return
- else if(istype(W,/obj/item/clothing/head/helmet/space))
- if(helmet)
- user << "\The [src] already has a helmet installed."
- else
- user << "You attach \the [W] to \the [src]'s helmet mount."
- user.drop_item()
- W.loc = src
- src.helmet = W
- return
- else
- return ..()
-
- else if(target_zone == "l_leg" || target_zone == "r_leg" || target_zone == "l_foot" || target_zone == "r_foot")
-
- //Installing a component into or modifying the contents of the feet.
- if(!attached_boots)
- user << "\The [src] does not have boot mounts."
- return
-
- if(istype(W,/obj/item/weapon/screwdriver))
- if(!boots)
- user << "\The [src] does not have any boots installed."
- else
- user << "You detatch \the [boots] from \the [src]'s boot mounts."
- boots.loc = get_turf(src)
- boots = null
- return
- else if(istype(W,/obj/item/clothing/shoes/magboots))
- if(boots)
- user << "\The [src] already has magboots installed."
- else
- user << "You attach \the [W] to \the [src]'s boot mounts."
- user.drop_item()
- W.loc = src
- boots = W
- else
- return ..()
-
- /*
- else if(target_zone == "l_arm" || target_zone == "r_arm" || target_zone == "l_hand" || target_zone == "r_hand")
-
- //Installing a component into or modifying the contents of the hands.
-
- else if(target_zone == "torso" || target_zone == "groin")
-
- //Modifying the cell or mounted devices
-
- if(!mounted_devices)
- return
- */
-
- else //wat
- return ..()
+ if(boots)
+ user << "\The [src] already has magboots installed."
+ else
+ user << "You attach \the [W] to \the [src]'s boot mounts."
+ user.drop_item()
+ W.loc = src
+ boots = W
+ else
+ return ..()
..()
diff --git a/code/modules/computer3/computer.dm b/code/modules/computer3/computer.dm
index 157fc1e6d2e..3e4d8116fac 100644
--- a/code/modules/computer3/computer.dm
+++ b/code/modules/computer3/computer.dm
@@ -201,14 +201,6 @@
// todo does this do enough
-
- meteorhit(var/obj/O as obj)
- for(var/x in verbs)
- verbs -= x
- set_broken()
- return
-
-
emp_act(severity)
if(prob(20/severity)) set_broken()
..()
@@ -217,11 +209,11 @@
ex_act(severity)
switch(severity)
if(1.0)
- del(src)
+ qdel(src)
return
if(2.0)
if (prob(25))
- del(src)
+ qdel(src)
return
if (prob(50))
for(var/x in verbs)
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index 0504ab42c35..62bd113f2d7 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -236,7 +236,7 @@
icon_state = "noble_boot"
_color = "noble_boot"
item_state = "noble_boot"
-
+
/////Arachno-Man Costume set //the flagbearer: Willow Walker
/obj/item/clothing/under/fluff/arachno_suit // Custom Jumpsuit
name = "Arachno-Man costume"
@@ -247,7 +247,7 @@
_color = "superior_suit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES
-
+
/obj/item/clothing/head/fluff/arachno_mask
name = "Arachno-Man mask"
desc = "Put it on. The mask, it's gonna make you stronger!"
@@ -258,4 +258,25 @@
flags = BLOCKHAIR
flags_inv = HIDEFACE
+
+///Aeronuatical Jumpsuit and Jacket //Fox P McCloud: Fox McCloud
+
+//Huge thanks to Nienhaus for these sprites!
+
+/obj/item/clothing/under/fluff/fox
+ name = "Aeronuatics Jumpsuit"
+ desc = "A jumpsuit tailor made for spacefaring fighter pilots; this one seems very old."
+ icon = 'icons/obj/custom_items.dmi'
+ icon_state = "fox_suit"
+ item_state = "g_suit"
+ _color = "fox_suit"
+ displays_id = 0 //still appears on examine; this is pure fluff.
+
+/obj/item/clothing/suit/jacket/fluff/fox
+ name = "Aeronautics Jacket"
+ desc = "An aviator styled jacket made from a peculiar material; this one seems very old."
+ icon = 'icons/obj/custom_items.dmi'
+ icon_state = "fox_jacket"
+ item_state = "fox_jacket"
+
//////////// Weapons ////////////
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 4347ae160a3..1908bfde173 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -144,7 +144,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Vines", /datum/event/spacevine, 250, list(ASSIGNMENT_ENGINEER = 10)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 20)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meaty Ores", /datum/event/dust/meaty, 0, list(ASSIGNMENT_ENGINEER = 30)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)),
diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm
index 3838980832d..c73b85a4857 100644
--- a/code/modules/events/event_dynamic.dm
+++ b/code/modules/events/event_dynamic.dm
@@ -86,7 +86,6 @@ var/global/list/possibleEvents = list()
possibleEvents[/datum/event/anomaly/anomaly_flux] = 50 + 50 * active_with_role["Engineer"]
possibleEvents[/datum/event/meteor_wave] = 10 * active_with_role["Engineer"]
- possibleEvents[/datum/event/meteor_shower] = 20 * active_with_role["Engineer"]
possibleEvents[/datum/event/blob] = 10 * active_with_role["Engineer"]
if(active_with_role["Medical"] > 0)
diff --git a/code/modules/events/meteors.dm b/code/modules/events/meteors.dm
index 42b0b1eda1d..d26e43dba6b 100644
--- a/code/modules/events/meteors.dm
+++ b/code/modules/events/meteors.dm
@@ -1,46 +1,39 @@
-//cael - two events here
-
-//meteor storms are much heavier
/datum/event/meteor_wave
- startWhen = 6
- endWhen = 33
-
-/datum/event/meteor_wave/setup()
- endWhen = rand(10,25) * 3
-
-/datum/event/meteor_wave/announce()
- command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
-
-/datum/event/meteor_wave/tick()
- if(IsMultiple(activeFor, 3))
- spawn_meteors(rand(2,5))
-
-/datum/event/meteor_wave/end()
- command_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
-
-//
-/datum/event/meteor_shower
startWhen = 5
endWhen = 7
var/next_meteor = 6
var/waves = 1
-/datum/event/meteor_shower/setup()
- waves = rand(1,4)
+/datum/event/meteor_wave/setup()
+ waves = severity * rand(1,3)
-/datum/event/meteor_shower/announce()
- command_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
+/datum/event/meteor_wave/announce()
+ switch(severity)
+ if(EVENT_LEVEL_MAJOR)
+ command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
+ else
+ command_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
//meteor showers are lighter and more common,
-/datum/event/meteor_shower/tick()
- if(activeFor >= next_meteor)
- spawn_meteors(rand(1,4))
- next_meteor += rand(20,100)
+/datum/event/meteor_wave/tick()
+ if(waves && activeFor >= next_meteor)
+ spawn() spawn_meteors(severity * rand(1,2), get_meteors())
+ next_meteor += rand(15, 30) / severity
waves--
- if(waves <= 0)
- endWhen = activeFor + 1
- else
- endWhen = next_meteor + 1
+ endWhen = (waves ? next_meteor + 1 : activeFor + 15)
-/datum/event/meteor_shower/end()
- command_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
+/datum/event/meteor_wave/end()
+ switch(severity)
+ if(EVENT_LEVEL_MAJOR)
+ command_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
+ else
+ command_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
+
+/datum/event/meteor_wave/proc/get_meteors()
+ switch(severity)
+ if(EVENT_LEVEL_MAJOR)
+ return meteors_catastrophic
+ if(EVENT_LEVEL_MODERATE)
+ return meteors_threatening
+ else
+ return meteors_normal
\ No newline at end of file
diff --git a/code/modules/events/sayuevents/meaty_ores.dm b/code/modules/events/sayuevents/meaty_ores.dm
index d6e640934d9..b5cb7e390cc 100644
--- a/code/modules/events/sayuevents/meaty_ores.dm
+++ b/code/modules/events/sayuevents/meaty_ores.dm
@@ -32,7 +32,7 @@
invisibility = 101
new /obj/effect/decal/cleanable/blood(get_turf(A))
if(ismob(A))
- A.meteorhit(src)
+ A.ex_act(strength)
else
spawn(0)
if(A)
diff --git a/code/modules/events/tgevents/anomaly_flux.dm b/code/modules/events/tgevents/anomaly_flux.dm
index d02af07b3ef..b7a14ab9327 100644
--- a/code/modules/events/tgevents/anomaly_flux.dm
+++ b/code/modules/events/tgevents/anomaly_flux.dm
@@ -12,6 +12,6 @@
newAnomaly = new /obj/effect/anomaly/flux(T.loc)
/datum/event/anomaly/anomaly_flux/end()
- if(newAnomaly)//If it hasn't been neutralized, it's time to blow up.
- explosion(newAnomaly.loc, 0, 4, 6, 5)
+ if(newAnomaly.loc)//If it hasn't been neutralized, it's time to blow up.
+ explosion(newAnomaly, -1, 3, 5, 5)
qdel(newAnomaly)
\ No newline at end of file
diff --git a/code/modules/events/tgevents/anomaly_pyro.dm b/code/modules/events/tgevents/anomaly_pyro.dm
index 29e2a1c1401..b1cf81b23c3 100644
--- a/code/modules/events/tgevents/anomaly_pyro.dm
+++ b/code/modules/events/tgevents/anomaly_pyro.dm
@@ -20,7 +20,7 @@
/datum/event/anomaly/anomaly_pyro/end()
if(newAnomaly.loc)
- explosion(get_turf(newAnomaly), -1,0,3)
+ explosion(get_turf(newAnomaly), -1,0,3, flame_range = 4)
var/mob/living/carbon/slime/S = new/mob/living/carbon/slime(get_turf(newAnomaly))
S.colour = pick("red", "orange")
diff --git a/code/modules/events/tgevents/brand_intelligence.dm b/code/modules/events/tgevents/brand_intelligence.dm
index edc01bd81ed..661adb95f0c 100644
--- a/code/modules/events/tgevents/brand_intelligence.dm
+++ b/code/modules/events/tgevents/brand_intelligence.dm
@@ -50,7 +50,7 @@
M.speak = rampant_speeches.Copy()
M.speak_chance = 15
else
- explosion(upriser.loc, -1, 1, 2)
+ explosion(upriser.loc, -1, 1, 2, 4, 0)
qdel(upriser)
kill()
diff --git a/code/modules/events/tgevents/dust.dm b/code/modules/events/tgevents/dust.dm
index cefa4f250c8..17523a92e8e 100644
--- a/code/modules/events/tgevents/dust.dm
+++ b/code/modules/events/tgevents/dust.dm
@@ -80,7 +80,7 @@
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
if(ismob(A))
- A.meteorhit(src)//This should work for now I guess
+ A.ex_act(strength)//This should work for now I guess
else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field_generator)) //Protect the singularity from getting released every round!
A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4
@@ -99,5 +99,5 @@
ex_act(severity)
- del(src)
+ qdel(src)
return
diff --git a/code/modules/events/tgevents/immovable_rod.dm b/code/modules/events/tgevents/immovable_rod.dm
index ec86e89981f..d1a09d8633d 100644
--- a/code/modules/events/tgevents/immovable_rod.dm
+++ b/code/modules/events/tgevents/immovable_rod.dm
@@ -85,7 +85,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
else if (istype(clong, /mob))
if(clong.density || prob(10))
- clong.meteorhit(src)
+ clong.ex_act(2)
else
del(src)
diff --git a/code/modules/jungle/jungle_animals.dm b/code/modules/jungle/jungle_animals.dm
index cb138b8baac..37d22ead14e 100644
--- a/code/modules/jungle/jungle_animals.dm
+++ b/code/modules/jungle/jungle_animals.dm
@@ -25,6 +25,7 @@
/obj/effect/landmark/animal_spawner/Destroy()
processing_objects.Remove(src)
+ return ..()
/obj/effect/landmark/animal_spawner/panther
name = "panther spawner"
diff --git a/code/modules/jungle/jungle_tribe.dm b/code/modules/jungle/jungle_tribe.dm
index e5a38944846..70dade70dbf 100644
--- a/code/modules/jungle/jungle_tribe.dm
+++ b/code/modules/jungle/jungle_tribe.dm
@@ -29,6 +29,7 @@
/obj/effect/jungle_tribe_spawn/Destroy()
processing_objects.Remove(src)
+ return ..()
/obj/effect/jungle_tribe_spawn/process()
set background = 1
diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm
index e37ea9cad65..56d05576f45 100644
--- a/code/modules/lighting/lighting_overlay.dm
+++ b/code/modules/lighting/lighting_overlay.dm
@@ -113,3 +113,5 @@
D.effect_r -= src
D.effect_g -= src
D.effect_b -= src
+
+ return ..()
\ No newline at end of file
diff --git a/code/modules/liquid/splash_simulation.dm b/code/modules/liquid/splash_simulation.dm
index da344cb609b..b1d47a77def 100644
--- a/code/modules/liquid/splash_simulation.dm
+++ b/code/modules/liquid/splash_simulation.dm
@@ -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)) )
diff --git a/code/modules/media/machinery.dm b/code/modules/media/machinery.dm
index 143af212562..cf46c8dcdf8 100644
--- a/code/modules/media/machinery.dm
+++ b/code/modules/media/machinery.dm
@@ -101,4 +101,4 @@
/obj/machinery/media/Destroy()
disconnect_media_source()
- ..()
\ No newline at end of file
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm
index 7ca5d9496d7..7b7f6eded45 100644
--- a/code/modules/mining/abandonedcrates.dm
+++ b/code/modules/mining/abandonedcrates.dm
@@ -82,8 +82,8 @@
if (attempts == 0)
user << "The crate's anti-tamper system activates!"
var/turf/T = get_turf(src.loc)
- explosion(T, 0, 0, 0, 1)
- del(src)
+ explosion(T, -1, -1, 1, 1)
+ qdel(src)
return
else
user << "You attempt to interact with the device using a hand gesture, but it appears this crate is from before the DECANECT came out."
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 702a87ab336..52998277e5a 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -264,7 +264,7 @@
s.set_up(5, 1, src)
s.start()
if(prob(50 / severity) && severity < 3)
- del(src)
+ qdel(src)
/**********************Mining Equipment Locker Items**************************/
diff --git a/code/modules/mining/manufacturing.dm b/code/modules/mining/manufacturing.dm
index 52274b0ea32..d74386828df 100644
--- a/code/modules/mining/manufacturing.dm
+++ b/code/modules/mining/manufacturing.dm
@@ -43,7 +43,7 @@
ex_act(severity)
switch(severity)
- if(1.0) del(src)
+ if(1.0) qdel(src)
if(2.0)
if (prob(60)) stat |= BROKEN
if(3.0)
@@ -54,10 +54,6 @@
if (prob(25)) del src
return
- meteorhit()
- if (prob(50)) del src
- return
-
power_change()
if(stat & BROKEN) icon_state = "fab-broken"
else
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 533c47a253d..57bfce341df 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -343,12 +343,12 @@
if(5)
var/quantity = rand(1,3)
for(var/i=0, i 0)
- adjustFireLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
- adjustFireLoss(30)
-
- updatehealth()
- return
-
-
/mob/living/carbon/alien/humanoid/attack_slime(mob/living/carbon/slime/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index a7207f22f9d..2934093a3f6 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -129,17 +129,6 @@
/mob/living/carbon/alien/larva/attack_ui(slot_id)
return
-/mob/living/carbon/alien/larva/meteorhit(O as obj)
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message(text("\red [] has been hit by []", src, O), 1)
- if (health > 0)
- adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
- adjustFireLoss(30)
-
- updatehealth()
- return
-
/mob/living/carbon/alien/larva/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
index 2db6b56b75a..68c67b0418c 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -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
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 7adb3db6607..93199dce0c2 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -382,22 +382,6 @@
apply_damage(rand(20,30), BRUTE, affecting, run_armor_check(affecting, "melee"))
return
-/mob/living/carbon/human/meteorhit(O as obj)
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\red [src] has been hit by [O]", 1)
- if (health > 0)
- var/obj/item/organ/external/affecting = get_organ(pick("chest", "chest", "chest", "head"))
- if(!affecting) return
- if (istype(O, /obj/effect/immovablerod))
- if(affecting.take_damage(101, 0))
- UpdateDamageIcon()
- else
- if(affecting.take_damage((istype(O, /obj/effect/meteor/small) ? 10 : 25), 30))
- UpdateDamageIcon()
- updatehealth()
- return
-
/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index 25c197c70f5..1981bb8ec6c 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -239,17 +239,6 @@
/mob/living/carbon/slime/attack_ui(slot)
return
-/mob/living/carbon/slime/meteorhit(O as obj)
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message(text("\red [] has been hit by []", src, O), 1)
- if (health > 0)
- adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
- adjustFireLoss(30)
-
- updatehealth()
- return
-
/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 4533ffcc49b..5324628ef90 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -225,7 +225,7 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/Destroy()
ai_list -= src
- ..()
+ return ..()
/*
@@ -591,17 +591,6 @@ var/list/ai_verbs_default = list(
return
-/mob/living/silicon/ai/meteorhit(obj/O as obj)
- for(var/mob/M in viewers(src, null))
- M.show_message(text("\red [] has been hit by []", src, O), 1)
- //Foreach goto(19)
- if (health > 0)
- adjustBruteLoss(30)
- if ((O.icon_state == "flaming"))
- adjustFireLoss(40)
- updatehealth()
- return
-
/mob/living/silicon/ai/bullet_act(var/obj/item/projectile/Proj)
..(Proj)
updatehealth()
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index 86e9be09ca1..bc775bfeb42 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -29,6 +29,7 @@
del(ghostimage)
ghostimage = null;
updateallghostimages()
+ return ..()
// Movement code. Returns 0 to stop air movement from moving it.
/mob/aiEye/Move()
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 246be32b073..31ca993ce96 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -201,16 +201,6 @@
// See software.dm for Topic()
-/mob/living/silicon/pai/meteorhit(obj/O as obj)
- for(var/mob/M in viewers(src, null))
- M.show_message(text("\red [] has been hit by []", src, O), 1)
- if (src.health > 0)
- src.adjustBruteLoss(30)
- if ((O.icon_state == "flaming"))
- src.adjustFireLoss(40)
- src.updatehealth()
- return
-
/mob/living/silicon/pai/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
@@ -545,4 +535,4 @@
pie.item_state = "pai-[icon_state]"
return
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index baaa069d5fb..3ae26fea4cf 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -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)
@@ -528,18 +528,6 @@ var/list/robot_verbs_default = list(
return
-/mob/living/silicon/robot/meteorhit(obj/O as obj)
- for(var/mob/M in viewers(src, null))
- M.show_message(text("\red [src] has been hit by [O]"), 1)
- //Foreach goto(19)
- if (health > 0)
- adjustBruteLoss(30)
- if ((O.icon_state == "flaming"))
- adjustFireLoss(40)
- updatehealth()
- return
-
-
/mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj)
..(Proj)
updatehealth()
@@ -1236,7 +1224,7 @@ var/list/robot_verbs_default = list(
if(emagged)
if(mmi)
qdel(mmi)
- explosion(src.loc,1,2,4)
+ explosion(src.loc,1,2,4,flame_range = 2)
else
explosion(src.loc,-1,0,2)
gib()
diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm
index 4373dbab81d..b6d6b13db11 100644
--- a/code/modules/mob/living/simple_animal/bees.dm
+++ b/code/modules/mob/living/simple_animal/bees.dm
@@ -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()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm
index 20a8765921a..3cecd09c4d6 100644
--- a/code/modules/mob/living/simple_animal/friendly/pet.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pet.dm
@@ -14,6 +14,7 @@
user << "You put the [P] around [src]'s neck."
if(P.tagname)
name = P.tagname
+ real_name = P.tagname
qdel(P)
return
if(istype(O, /obj/item/weapon/newspaper))
@@ -43,4 +44,4 @@
/mob/living/simple_animal/pet/regenerate_icons()
overlays.Cut()
overlays += collar
- overlays += pettag
\ No newline at end of file
+ overlays += pettag
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index d59fa20ffc1..e66fa1754c7 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -193,7 +193,7 @@
/mob/living/simple_animal/spiderbot/Destroy()
eject_brain()
- ..()
+ return ..()
/mob/living/simple_animal/spiderbot/New()
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
index 6f681fc4acb..58be749d984 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
@@ -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
diff --git a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm
index 951c71bc27d..f5e98b2a2ec 100644
--- a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm
+++ b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm
@@ -216,7 +216,7 @@
/mob/living/simple_animal/hostile/spaceWorm/Destroy()
if(previousWorm)
previousWorm.Detach(0)
- ..()
+ return ..()
//Move all segments if one piece moves.
diff --git a/code/modules/mob/living/simple_animal/tribbles.dm b/code/modules/mob/living/simple_animal/tribbles.dm
index 2b6fab41b8e..fa8051f43a2 100644
--- a/code/modules/mob/living/simple_animal/tribbles.dm
+++ b/code/modules/mob/living/simple_animal/tribbles.dm
@@ -140,7 +140,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
if (1)
new /obj/item/weapon/shard( src.loc )
Break()
- del(src)
+ qdel(src)
if (2)
if (prob(50))
src.health -= 15
@@ -165,12 +165,6 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
del(src)
-/obj/structure/tribble_cage/meteorhit(obj/O as obj)
- new /obj/item/weapon/shard( src.loc )
- Break()
- del(src)
-
-
/obj/structure/tribble_cage/proc/healthcheck()
if (src.health <= 0)
if (!( src.destroyed ))
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 0792f04bf8e..e0c6b9128de 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -3,7 +3,7 @@
dead_mob_list -= src
living_mob_list -= src
ghostize()
- ..()
+ return ..()
/mob/New()
mob_list += src
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 0527fa5d93e..de745ec80b4 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -416,7 +416,7 @@
affecting.layer = initial(affecting.layer)
affecting.grabbed_by -= src
del(hud)
- ..()
+ return ..()
#undef EAT_TIME_XENO
#undef EAT_TIME_FAT
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index d2d68db05db..bc20b6fe13c 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -132,10 +132,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))
@@ -149,7 +149,7 @@
/obj/machinery/photocopier/blob_act()
if(prob(50))
- del(src)
+ qdel(src)
else
if(toner > 0)
new /obj/effect/decal/cleanable/blood/oil(get_turf(src))
diff --git a/code/modules/pooling/atom_pool.dm b/code/modules/pooling/atom_pool.dm
new file mode 100644
index 00000000000..c5d11f6b599
--- /dev/null
+++ b/code/modules/pooling/atom_pool.dm
@@ -0,0 +1,101 @@
+/*
+/tg/station13 /atom/movable Pool:
+---------------------------------
+By RemieRichards
+Creation/Deletion is laggy, so let's reduce reuse and recycle!
+Locked to /atom/movable and it's subtypes due to Loc being a const var on /atom
+but being read&write on /movable due to how they... move.
+Usage:
+To get a object, just called PoolOrNew(type, list of args to pass to New)
+To put a object back in the pool, call place in pool.
+This will call destroy on the object, set its loc to null,
+and reset all of its vars to their default
+You can override your object's destroy to return QDEL_HINT_PLACEINPOOL
+to ensure its always placed in this pool (this will only be acted on if qdel calls destroy, and destroy will not get called twice)
+*/
+
+var/global/list/GlobalPool = list()
+
+//You'll be using this proc 90% of the time.
+//It grabs a type from the pool if it can
+//And if it can't, it creates one
+//The pool is flexible and will expand to fit
+//The new created atom when it eventually
+//Goes into the pool
+
+//Second argument can be a new location
+//Or a list of arguments
+//Either way it gets passed to new
+
+/proc/PoolOrNew(var/get_type,var/second_arg)
+ if(!get_type)
+ return
+
+ var/atom/movable/AM
+ AM = GetFromPool(get_type,second_arg)
+
+ if(!AM)
+ if(ispath(get_type))
+ if(islist(second_arg))
+ AM = new get_type (arglist(second_arg))
+ else
+ AM = new get_type (second_arg)
+
+ if(AM)
+ return AM
+
+
+
+/proc/GetFromPool(var/get_type,var/second_arg)
+ if(!get_type)
+ return 0
+
+ if(isnull(GlobalPool[get_type]))
+ return 0
+
+ if(length(GlobalPool[get_type]) == 0)
+ return 0
+
+ var/atom/movable/AM = pick_n_take(GlobalPool[get_type])
+ if(AM)
+ AM.ResetVars()
+ if(islist(second_arg))
+ AM.loc = second_arg[1]
+ AM.New(arglist(second_arg))
+ else
+ AM.loc = second_arg
+ AM.New(second_arg)
+ return AM
+ return 0
+
+
+
+/proc/PlaceInPool(var/atom/movable/AM, destroy = 1)
+ if(!istype(AM))
+ return
+
+ if(AM in GlobalPool[AM.type])
+ return
+
+ if(!GlobalPool[AM.type])
+ GlobalPool[AM.type] = list()
+
+ GlobalPool[AM.type] |= AM
+
+ if (destroy)
+ AM.Destroy()
+
+ AM.ResetVars()
+
+
+
+/atom/movable/proc/ResetVars()
+ var/list/excluded = list("animate_movement", "loc", "locs", "parent_type", "vars", "verbs", "type")
+
+ for(var/V in vars)
+ if(V in excluded)
+ continue
+
+ vars[V] = initial(vars[V])
+
+ vars["loc"] = null
diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm
index 2bd10af8f20..5e98a2fa41a 100644
--- a/code/modules/power/antimatter/control.dm
+++ b/code/modules/power/antimatter/control.dm
@@ -38,7 +38,7 @@
/obj/machinery/power/am_control_unit/Destroy()//Perhaps damage and run stability checks rather than just del on the others
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
del(AMS)
- ..()
+ return ..()
/obj/machinery/power/am_control_unit/process()
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index 736237ad55c..722ba2b54ac 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -70,8 +70,7 @@ proc/cardinalrange(var/center)
if(processing) shutdown_core()
visible_message("\red The [src.name] melts!")
//Might want to have it leave a mess on the floor but no sprites for now
- ..()
- return
+ return ..()
/obj/machinery/am_shielding/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 95d47aeb451..d8570e289d2 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -1254,11 +1254,6 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
// damage and destruction acts
-/obj/machinery/power/apc/meteorhit(var/obj/O as obj)
-
- set_broken()
- return
-
/obj/machinery/power/apc/emp_act(severity)
if(cell)
cell.emp_act(severity)
@@ -1335,7 +1330,7 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
area.power_change()
if(occupant)
malfvacate(1)
- ..()
+ return ..()
/obj/machinery/power/apc/proc/shock(mob/user, prb)
if(!prob(prb))
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index a9e7049c9d1..f6fa448bb3e 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -98,7 +98,7 @@
attached.anchored = 0
attached.attached = null
attached = null*/
- ..() // then go ahead and delete the cable
+ return ..() // then go ahead and delete the cable
/obj/structure/cable/hide(var/i)
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 72ed8a10f71..5d61d7a93ca 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -110,9 +110,7 @@
message_admins("LOG: Rigged power cell explosion, last touched by [fingerprintslast]")
explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range)
-
- spawn(1)
- del(src)
+ qdel(src)
/obj/item/weapon/stock_parts/cell/proc/corrupt()
charge /= 2
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 9f594b46052..795990fef40 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -54,7 +54,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
set_broken()
if(main_part)
qdel(main_part)
- ..()
+ return ..()
//
// Part generator which is mostly there for looks
@@ -126,7 +126,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
if (!(A.z in config.station_levels)) continue
A.gravitychange(0,A)
shake_everyone()
- ..()
+ return ..()
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 317acddeaa4..3075773e553 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -211,7 +211,7 @@
if(A)
on = 0
// A.update_lights()
- ..()
+ return ..()
/obj/machinery/light/update_icon()
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index ccb5e52ff6c..5431c137b4c 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -125,7 +125,7 @@ display round(lastgen) and plasmatank amount
/obj/machinery/power/port_gen/pacman/Destroy()
DropFuel()
- ..()
+ return ..()
/obj/machinery/power/port_gen/pacman/RefreshParts()
var/temp_rating = 0
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index c66ebbe6557..768bf712c0f 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -11,7 +11,7 @@
/obj/machinery/power/Destroy()
disconnect_from_network()
- ..()
+ return ..()
// common helper procs for all power machines
/obj/machinery/power/proc/add_avail(var/amount)
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 9b16ca3130f..25df3769d72 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -23,7 +23,7 @@ var/global/list/rad_collectors = list()
/obj/machinery/power/rad_collector/Destroy()
rad_collectors -= src
- ..()
+ return ..()
/obj/machinery/power/rad_collector/process()
if(P)
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index c208c805bfa..b908fc4be22 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -19,7 +19,7 @@
FG1.cleanup()
if(FG2 && !FG2.clean_up)
FG2.cleanup()
- ..()
+ return ..()
/obj/machinery/containment_field/attack_hand(mob/user as mob)
if(get_dist(src, user) > 1)
@@ -36,8 +36,6 @@
/obj/machinery/containment_field/ex_act(severity)
return 0
-/obj/machinery/containment_field/meteorhit()
- return 0
/obj/machinery/containment_field/HasProximity(atom/movable/AM as mob|obj)
if(istype(AM,/mob/living/silicon) && prob(40))
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 8c93a7c223f..687cbd7dcb5 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -89,7 +89,7 @@
msg_admin_attack("Emitter deleted at ([x],[y],[z] - JMP)",0,1)
log_game("Emitter deleted at ([x],[y],[z])")
investigate_log("deleted at ([x],[y],[z])","singulo")
- ..()
+ return ..()
/obj/machinery/power/emitter/update_icon()
if (active && powernet && avail(active_power_usage))
@@ -135,8 +135,6 @@
src.use_power = 1 */
return 1
-/obj/machinery/containment_field/meteorhit()
- return 0
/obj/machinery/power/emitter/process()
if(stat & (BROKEN))
@@ -167,13 +165,16 @@
else
src.fire_delay = rand(20,100)
src.shot_number = 0
- var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter(src.loc)
+
+ var/obj/item/projectile/beam/emitter/A = PoolOrNew(/obj/item/projectile/beam/emitter,src.loc)
+
+ A.dir = src.dir
playsound(get_turf(src), 'sound/weapons/emitter.ogg', 25, 1)
if(prob(35))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
- A.dir = src.dir
+
switch(dir)
if(NORTH)
A.yo = 20
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 01150e5c416..826f75c140e 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -163,8 +163,6 @@ field_generator power level display
else
..()
-/obj/machinery/containment_field/meteorhit()
- return 0
/obj/machinery/field_generator/bullet_act(var/obj/item/projectile/Proj)
if(Proj.flag != "bullet")
@@ -175,7 +173,7 @@ field_generator power level display
/obj/machinery/field_generator/Destroy()
src.cleanup()
- ..()
+ return ..()
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index b645f7b6b79..0163786e65e 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -157,11 +157,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
return
-/obj/structure/particle_accelerator/meteorhit()
- if(prob(50))
- del(src)
- return
-
/obj/structure/particle_accelerator/update_icon()
switch(construction_state)
if(0,1)
@@ -344,12 +339,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
return
-/obj/machinery/particle_accelerator/meteorhit()
- if(prob(50))
- del(src)
- return
-
-
/obj/machinery/particle_accelerator/proc/update_state()
return 0
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 4c9fc74cad7..efc75eae0c6 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -43,7 +43,7 @@
/obj/singularity/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/singularity/Move(atom/newloc, direct)
if(current_size >= STAGE_FIVE || check_turfs_in(direct))
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 3d2196ed254..d2feb74a12b 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -219,7 +219,7 @@
investigate_log("deleted at ([area.name])","singulo")
if(terminal)
disconnect_terminal()
- ..()
+ return ..()
// create a terminal object pointing towards the SMES
// wires will attach to this
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 7b9df9303b2..2f1390e583f 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -29,7 +29,7 @@ var/list/solars_list = list()
/obj/machinery/power/solar/Destroy()
unset_control() //remove from control computer
- ..()
+ return ..()
//set the control of the panel to a given computer if closer than SOLAR_MAX_DIST
/obj/machinery/power/solar/proc/set_control(var/obj/machinery/power/solar_control/SC)
@@ -304,7 +304,7 @@ var/list/solars_list = list()
M.unset_control()
if(connected_tracker)
connected_tracker.unset_control()
- ..()
+ return ..()
/obj/machinery/power/solar_control/disconnect_from_network()
..()
@@ -386,7 +386,7 @@ var/list/solars_list = list()
data["connected_panels"] = connected_panels.len
data["connected_tracker"] = (connected_tracker ? 1 : 0)
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "solar_control.tmpl", name, 490, 420)
ui.set_initial_data(data)
@@ -446,7 +446,7 @@ var/list/solars_list = list()
/obj/machinery/power/solar_control/Topic(href, href_list)
if(..())
return
-
+
if(href_list["rate_control"])
if(href_list["cdir"])
src.cdir = dd_range(0,359,(360+src.cdir+text2num(href_list["cdir"]))%360)
diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm
index 9b66f6afb91..d429d876769 100644
--- a/code/modules/power/tracker.dm
+++ b/code/modules/power/tracker.dm
@@ -23,7 +23,7 @@
/obj/machinery/power/tracker/Destroy()
unset_control() //remove from control computer
- ..()
+ return ..()
//set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST
/obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC)
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index cb11b2bc437..01e52edfee9 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -229,7 +229,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/turbine_control/M = new /obj/item/weapon/circuitboard/turbine_control( A )
for (var/obj/C in src)
C.loc = src.loc
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 650369e7190..73ae2c07d27 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -38,7 +38,7 @@ obj/item/weapon/gun/energy/laser/retro
/obj/item/weapon/gun/energy/laser/captain/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/gun/energy/laser/captain/process()
charge_tick++
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 0f36f012b71..c34048c6970 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -312,7 +312,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
/obj/item/weapon/gun/energy/disabler/cyborg/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/gun/energy/disabler/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg
if(power_supply.charge == power_supply.maxcharge)
@@ -369,7 +369,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
/obj/item/weapon/gun/energy/printer/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/gun/energy/printer/process()
if(power_supply.charge == power_supply.maxcharge)
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index ea52d3a78e7..22704b55079 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -26,7 +26,7 @@
/obj/item/weapon/gun/energy/taser/cyborg/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/gun/energy/taser/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg
if(power_supply.charge == power_supply.maxcharge)
@@ -77,7 +77,7 @@
/obj/item/weapon/gun/energy/crossbow/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/gun/energy/crossbow/process()
charge_tick++
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
index a874573aa25..3bdcbdce860 100644
--- a/code/modules/projectiles/guns/magic.dm
+++ b/code/modules/projectiles/guns/magic.dm
@@ -46,7 +46,7 @@
/obj/item/weapon/gun/magic/Destroy()
if(can_charge) processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/gun/magic/process()
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index 10dcf66ee00..b2ab8f470ff 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -148,6 +148,6 @@
/obj/item/weapon/gun/magic/wand/fireball/zap_self(mob/living/user as mob)
if(alert(user, "Zapping yourself with a wand of fireball is probably a bad idea, do it anyway?",, "Yes", "No") == "Yes" && charges && user.get_active_hand() == src && isliving(user))
- explosion(user.loc, -1, 0, 2, 3, 0)
+ explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
charges--
..()
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 556e172050b..cf74904bed0 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -75,6 +75,9 @@
/obj/item/projectile/beam/emitter/singularity_pull()
return //don't want the emitters to miss
+/obj/item/projectile/beam/emitter/Destroy()
+ return QDEL_HINT_PUTINPOOL
+
/obj/item/projectile/lasertag
name = "laser tag beam"
icon_state = "omnilaser"
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 3f2e4d0f245..785b619186b 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -24,7 +24,7 @@
/obj/item/projectile/magic/fireball/on_hit(var/target)
var/turf/T = get_turf(target)
- explosion(T, -1, 0, 2, 3, 0)
+ explosion(T, -1, 0, 2, 3, 0, flame_range = 2)
if(ismob(target)) //multiple flavors of pain
var/mob/living/M = target
M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 77d5ea37bc8..c4813e05bb1 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -38,7 +38,8 @@
flag = "bullet"
/obj/item/projectile/bullet/a40mm/on_hit(atom/target, blocked = 0)
- explosion(target, -1, 0, 2, 1, 0)
+ ..()
+ explosion(target, -1, 0, 2, 1, 0, flame_range = 3)
return 1
/obj/item/projectile/temp
@@ -75,7 +76,7 @@
if(src)//Do not add to this if() statement, otherwise the meteor won't delete them
if(A)
- A.meteorhit(src)
+ A.ex_act(2)
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
for(var/mob/M in range(10, src))
@@ -217,6 +218,7 @@ obj/item/projectile/kinetic/New()
weaken = 5
/obj/item/projectile/bullet/frag12/on_hit(atom/target, blocked = 0)
+ ..()
explosion(target, -1, 0, 1)
return 1
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index 954b10268a3..722c75da1c6 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -633,4 +633,6 @@ atom/proc/create_reagents(var/max_vol)
reagent.Destroy()
if(my_atom)
- my_atom = null
\ No newline at end of file
+ my_atom = null
+
+ return ..()
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 2fd1d0cdde1..44e077013bd 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -97,10 +97,6 @@
if (prob(50))
del(src)
-/obj/machinery/chem_dispenser/meteorhit()
- del(src)
- return
-
/**
* The ui_interact proc is used to open and update Nano UIs
* If ui_interact is not used then the UI will not update correctly
@@ -401,10 +397,6 @@
if (prob(50))
qdel(src)
-/obj/machinery/chem_master/meteorhit()
- qdel(src)
- return
-
/obj/machinery/chem_master/power_change()
if(powered())
stat &= ~NOPOWER
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index fd0b5638d68..586354d69b2 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -3215,3 +3215,5 @@ datum
if(holder)
holder.reagent_list -= src
holder = null
+
+ return ..()
\ No newline at end of file
diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm
index a4f712ba524..defbb6246ab 100644
--- a/code/modules/reagents/newchem/medicine.dm
+++ b/code/modules/reagents/newchem/medicine.dm
@@ -560,7 +560,7 @@ datum/reagent/atropine/on_mob_life(var/mob/living/M as mob)
M.losebreath = 5
if(M.confused > 60)
M.confused += 5
- M.reagents.remove_reagent("sarin",10)
+ M.reagents.remove_reagent("tabun",10)
..()
return
diff --git a/code/modules/reagents/newchem/toxins.dm b/code/modules/reagents/newchem/toxins.dm
index ca38bf6de7f..410aa5be2e2 100644
--- a/code/modules/reagents/newchem/toxins.dm
+++ b/code/modules/reagents/newchem/toxins.dm
@@ -502,25 +502,25 @@ datum/reagent/curare/on_mob_life(var/mob/living/M as mob)
..()
return
-datum/reagent/sarin
- name = "Sarin"
- id = "sarin"
+datum/reagent/tabun
+ name = "Tabun"
+ id = "tabun"
description = "An extremely deadly neurotoxin."
reagent_state = LIQUID
color = "#C7C7C7"
metabolization_rate = 0.1
penetrates_skin = 1
-/datum/chemical_reaction/sarin
- name = "sarin"
- id = "sarin"
- result = "sarin"
- required_reagents = list("chlorine" = 1, "fluorine" = 1, "hydrogen" = 1, "oxygen" = 1, "phosphorus" = 1, "fuel" = 1, "acetone" = 1, "atrazine" = 1)
- result_amount = 3
+/datum/chemical_reaction/tabun
+ name = "tabun"
+ id = "tabun"
+ result = "tabun"
+ required_reagents = list("phenol" = 1, "diethylamine" = 1, "phosphorus" = 1, "oxygen" = 1, "chlorine" = 1, "sodiumchloride" = 1, "ethanol" = 1, "cyanide" = 1)
+ result_amount = 8
mix_message = "The mixture yields a colorless, odorless liquid."
required_temp = 374
-datum/reagent/sarin/on_mob_life(var/mob/living/M as mob)
+datum/reagent/tabun/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustFireLoss(1)
if(prob(20))
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index e2ae6da9032..017216887f4 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -29,7 +29,7 @@
/obj/item/weapon/reagent_containers/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/reagent_containers/process()
if(reagents)
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 513d8c9920c..98366e36e22 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -33,7 +33,7 @@
/obj/item/weapon/reagent_containers/borghypo/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg
charge_tick++
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
index fd6621feafe..58945a89c4d 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
@@ -18,7 +18,7 @@
var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(user.loc)
user.put_in_active_hand(B)
if(prob(33))
- getFromPool(/obj/item/weapon/shard, target.loc) // Create a glass shard at the target's location!
+ PoolOrNew(/obj/item/weapon/shard, target.loc) // Create a glass shard at the target's location!
B.icon_state = src.icon_state
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
index 9614311ade1..74d1d6e775a 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
@@ -12,7 +12,7 @@
proc/smash(mob/living/target as mob, mob/living/user as mob)
//Creates a shattering noise and replaces the drinking glass with a glass shard
user.drop_item()
- var/obj/item/weapon/shard/S = getFromPool(/obj/item/weapon/shard, user.loc)
+ var/obj/item/weapon/shard/S = PoolOrNew(/obj/item/weapon/shard, user.loc)
user.put_in_active_hand(S)
playsound(src, "shatter", 70, 1)
diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm
index 1ecb6bdf897..77a39976980 100644
--- a/code/modules/reagents/reagent_containers/food/sandwich.dm
+++ b/code/modules/reagents/reagent_containers/food/sandwich.dm
@@ -78,7 +78,7 @@
/obj/item/weapon/reagent_containers/food/snacks/csandwich/Destroy()
for(var/obj/item/O in ingredients)
del(O)
- ..()
+ return ..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine()
..()
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 35439d27c02..389243486dd 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -235,7 +235,7 @@
if(contents)
for(var/atom/movable/something in contents)
something.loc = get_turf(src)
- ..()
+ return ..()
/obj/item/weapon/reagent_containers/food/snacks/attack_animal(mob/M)
if(isanimal(M))
diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
index 1f23b5cb849..9c25497409c 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
@@ -186,7 +186,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/Destroy()
if(istype(loc,/mob))
loc.set_light(round(loc.luminosity - potency/5,1))
- ..()
+ return ..()
/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/pickup(mob/user)
src.set_light(0)
@@ -614,7 +614,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/Destroy()
if(istype(loc,/mob))
loc.set_light(round(loc.luminosity - potency/10,1))
- ..()
+ return ..()
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/pickup(mob/user)
set_light(0)
diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm
index 3c5c213eef3..f6a4d019fc4 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle.dm
@@ -275,4 +275,4 @@
New()
..()
- reagents.add_reagent(pick("polonium","initropidril","concentrated_initro","pancuronium","sodium_thiopental","ketamine","sulfonal","amanitin","coniine","curare","sarin","histamine","venom","cyanide"), 40)
\ No newline at end of file
+ reagents.add_reagent(pick("polonium","initropidril","concentrated_initro","pancuronium","sodium_thiopental","ketamine","sulfonal","amanitin","coniine","curare","tabun","histamine","venom","cyanide"), 40)
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 244d65aab13..eb13ba91b21 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -103,7 +103,7 @@
explode()
blob_act()
- explode()
+ explosion(src.loc,0,1,5,7,10, flame_range = 5)
ex_act()
explode()
@@ -150,14 +150,13 @@
return ..()
/obj/structure/reagent_dispensers/fueltank/proc/explode()
- explosion(src.loc,0,1,4)
+ explosion(src.loc,-1,0,2, flame_range = 2)
if(src)
- del(src)
+ qdel(src)
/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume)
- if(temperature > T0C+500)
- explode()
- return ..()
+ blob_act() //saving a few lines of copypasta
+
/obj/structure/reagent_dispensers/fueltank/Move()
..()
@@ -219,7 +218,7 @@
/obj/structure/reagent_dispensers/beerkeg/blob_act()
explosion(src.loc,0,3,5,7,10)
- del(src)
+ qdel(src)
/obj/structure/reagent_dispensers/virusfood
name = "Virus Food Dispenser"
diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm
index afa7bf2d10b..df881681284 100644
--- a/code/modules/research/message_server.dm
+++ b/code/modules/research/message_server.dm
@@ -68,8 +68,7 @@ var/global/list/obj/machinery/message_server/message_servers = list()
/obj/machinery/message_server/Destroy()
message_servers -= src
- ..()
- return
+ return ..()
/obj/machinery/message_server/process()
//if(decryptkey == "password")
@@ -185,7 +184,7 @@ var/obj/machinery/blackbox_recorder/blackbox
var/list/msg_syndicate = list()
var/list/msg_mining = list()
var/list/msg_cargo = list()
- var/list/msg_service = list()
+ var/list/msg_service = list()
var/list/datum/feedback_variable/feedback = new()
@@ -217,7 +216,7 @@ var/obj/machinery/blackbox_recorder/blackbox
BR.messages_admin = messages_admin
if(blackbox != BR)
blackbox = BR
- ..()
+ return ..()
/obj/machinery/blackbox_recorder/proc/find_feedback_datum(var/variable)
for(var/datum/feedback_variable/FV in feedback)
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index b8ef753c4ac..295094b7856 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -26,7 +26,7 @@
/obj/machinery/r_n_d/server/Destroy()
griefProtection()
- ..()
+ return ..()
/obj/machinery/r_n_d/server/RefreshParts()
var/tot_rating = 0
@@ -70,11 +70,6 @@
produce_heat(heat_gen)
delay = initial(delay)
-/obj/machinery/r_n_d/server/meteorhit(var/obj/O as obj)
- griefProtection()
- ..()
-
-
/obj/machinery/r_n_d/server/emp_act(severity)
griefProtection()
..()
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
index 09ea465a67f..27a51f80135 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
@@ -18,19 +18,19 @@
"It's mesmerizing to behold.")
/obj/structure/crystal/Destroy()
- src.visible_message("\red[src] shatters!")
+ src.visible_message("\The [src] shatters!")
if(prob(75))
- getFromPool(/obj/item/weapon/shard/plasma, loc)
+ PoolOrNew(/obj/item/weapon/shard/plasma, loc)
if(prob(50))
- getFromPool(/obj/item/weapon/shard/plasma, loc)
+ PoolOrNew(/obj/item/weapon/shard/plasma, loc)
if(prob(25))
- getFromPool(/obj/item/weapon/shard/plasma, loc)
+ PoolOrNew(/obj/item/weapon/shard/plasma, loc)
if(prob(75))
- getFromPool(/obj/item/weapon/shard, loc)
+ PoolOrNew(/obj/item/weapon/shard, loc)
if(prob(50))
- getFromPool(/obj/item/weapon/shard, loc)
+ PoolOrNew(/obj/item/weapon/shard, loc)
if(prob(25))
- getFromPool(/obj/item/weapon/shard, loc)
- ..()
+ PoolOrNew(/obj/item/weapon/shard, loc)
+ return ..()
//todo: laser_act
diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm
index cfe6cc2c57c..0f5475338ad 100644
--- a/code/modules/research/xenoarchaeology/finds/finds.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds.dm
@@ -311,9 +311,9 @@
apply_material_decorations = 0
if(22)
if(prob(50))
- new_item = getFromPool(/obj/item/weapon/shard, loc)
+ new_item = PoolOrNew(/obj/item/weapon/shard, loc)
else
- new_item = getFromPool(/obj/item/weapon/shard/plasma, loc)
+ new_item = PoolOrNew(/obj/item/weapon/shard/plasma, loc)
apply_prefix = 0
apply_image_decorations = 0
diff --git a/code/modules/research/xenoarchaeology/finds/finds_misc.dm b/code/modules/research/xenoarchaeology/finds/finds_misc.dm
index 06ac8960c44..fb3fce5d26b 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_misc.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_misc.dm
@@ -38,7 +38,7 @@
G.attackby(NG, user, params)
usr << "You add the newly-formed plasma glass to the stack. It now contains [NG.amount] sheets."
//SN src = null
- returnToPool(src)
+ qdel(src)
return
return ..()
diff --git a/code/modules/research/xenoarchaeology/machinery/coolant.dm b/code/modules/research/xenoarchaeology/machinery/coolant.dm
index 30b43495dba..79da41e5f2a 100644
--- a/code/modules/research/xenoarchaeology/machinery/coolant.dm
+++ b/code/modules/research/xenoarchaeology/machinery/coolant.dm
@@ -56,4 +56,4 @@ datum/chemical_reaction/coolant
sleep(10)
if(src)
- del(src)
+ qdel(src)
diff --git a/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm b/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm
index 4df47996e50..bb1d7e30c4f 100644
--- a/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm
+++ b/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm
@@ -192,7 +192,7 @@
/obj/item/weapon/anodevice/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/anodevice/attack(mob/living/M as mob, mob/living/user as mob, def_zone)
if (!istype(M))
diff --git a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
index dd129d48d47..2d65cbb5e1e 100644
--- a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
+++ b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
@@ -315,7 +315,7 @@
/obj/machinery/suspension_gen/Destroy()
//safety checks: clear the field and drop anything it's holding
deactivate()
- ..()
+ return ..()
/obj/machinery/suspension_gen/verb/rotate_ccw()
set src in view(1)
@@ -347,4 +347,4 @@
/obj/effect/suspension_field/Destroy()
for(var/obj/I in src)
I.loc = src.loc
- ..()
+ return ..()
diff --git a/code/modules/research/xenoarchaeology/tools/tools_locater.dm b/code/modules/research/xenoarchaeology/tools/tools_locater.dm
index c2438168a91..9a5ea72f241 100644
--- a/code/modules/research/xenoarchaeology/tools/tools_locater.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools_locater.dm
@@ -18,7 +18,7 @@
/obj/item/device/beacon_locator/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/device/beacon_locator/process()
if(target_radio)
diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm
index b3d22e0e36f..8eaa0b168b8 100644
--- a/code/modules/shieldgen/energy_field.dm
+++ b/code/modules/shieldgen/energy_field.dm
@@ -18,11 +18,6 @@
/obj/effect/energy_field/bullet_act(var/obj/item/projectile/Proj)
Stress(Proj.damage / 10)
-/obj/effect/energy_field/meteorhit(obj/effect/meteor/M as obj)
- if(M)
- walk(M,0)
- Stress(2)
-
/obj/effect/energy_field/proc/Stress(var/severity)
strength -= severity
diff --git a/code/modules/supermatter/wall.dm b/code/modules/supermatter/wall.dm
index 60f85bc0270..e8997dee07c 100644
--- a/code/modules/supermatter/wall.dm
+++ b/code/modules/supermatter/wall.dm
@@ -18,7 +18,7 @@
/turf/simulated/floor/plating/smatter/Destroy()
- ..()
+ . = ..()
var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST)
// Kill and update the space overlays around us.
@@ -60,7 +60,7 @@
turf_to_check.overlays += image('icons/turf/walls.dmi', "smatter_side_[direction]")
/turf/simulated/smatter/Destroy()
- ..()
+ . = ..()
var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST)
// Kill and update the space overlays around us.
diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm
index c0a3e9fd58f..97962435e7d 100644
--- a/code/modules/telesci/gps.dm
+++ b/code/modules/telesci/gps.dm
@@ -19,7 +19,7 @@ var/list/GPS_list = list()
/obj/item/device/gps/Destroy()
GPS_list.Remove(src)
- ..()
+ return ..()
/obj/item/device/gps/emp_act(severity)
emped = 1
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index b2645dc5d55..01dc7636d24 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -126,8 +126,8 @@
/obj/item/weapon/rcs/Destroy()
processing_objects.Remove(src)
- ..()
-
+ return ..()
+
/obj/item/weapon/rcs/process()
if(rcharges > 10)
rcharges = 10
@@ -156,4 +156,3 @@
s.start()
user << " You emag the RCS. Click on it to toggle between modes."
return
-
\ No newline at end of file
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index b4bff7b37f2..6ed06571eed 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -39,7 +39,7 @@
if(inserted_gps)
inserted_gps.loc = loc
inserted_gps = null
- ..()
+ return ..()
/obj/machinery/computer/telescience/examine(mob/user)
..()
diff --git a/code/modules/tram/tram.dm b/code/modules/tram/tram.dm
index 0ae4ef41e93..9e76a976028 100644
--- a/code/modules/tram/tram.dm
+++ b/code/modules/tram/tram.dm
@@ -40,7 +40,7 @@
for(var/obj/tram/controlpad/CP in controllers)
remove_controller(CP)
killLoop()
- ..()
+ return ..()
/obj/tram/tram_controller/emp_act(severity)
if(automode) automode = 0
@@ -242,9 +242,6 @@
if(prob(50))
qdel(src)
-/obj/tram/meteorhit()
- qdel(src)
-
/obj/tram/attack_animal(var/mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0) return
if(prob(M.melee_damage_upper))
diff --git a/code/modules/vehicle/vehicle.dm b/code/modules/vehicle/vehicle.dm
index d74897a1b76..08fc98cacf0 100644
--- a/code/modules/vehicle/vehicle.dm
+++ b/code/modules/vehicle/vehicle.dm
@@ -118,10 +118,6 @@
..()
healthcheck()
-/obj/vehicle/meteorhit()
- explode()
- return
-
/obj/vehicle/blob_act()
src.health -= rand(20,40)*fire_dam_coeff
healthcheck()
diff --git a/config/example/game_options.txt b/config/example/game_options.txt
index 4040f7b1e27..3f282e5a6ce 100644
--- a/config/example/game_options.txt
+++ b/config/example/game_options.txt
@@ -54,6 +54,24 @@ ALIEN_DELAY 0
METROID_DELAY 0
ANIMAL_DELAY 0
+
+//Comment for "normal" explosions, which ignore obstacles
+//Uncomment for explosions that react to doors and walls
+REACTIONARY_EXPLOSIONS
+
+### Configure the bomb cap
+## This caps all explosions to the specified range. Used for both balance reasons and to prevent overloading the server and lagging the game out.
+## This is given as the 3rd number(light damage) in the standard (1,2,3) explosion notation. The other numbers are derived by dividing by 2 and 4.
+## eg: If you give the number 20. The bomb cap will be 5,10,20.
+## Can be any number between 4 and 128, some examples are provided below.
+
+## Default (3,7,14)
+#BOMBCAP 14
+## One 'step' up (5,10,20) (recommended if you enable REACTIONARY_EXPLOSIONS above)
+BOMBCAP 20
+## LagHell (7,14,28)
+#BOMBCAP 28
+
### ROUNDSTART SILICON LAWS ###
## This controls what the AI's laws are at the start of the round.
## Set to 0/commented for "off", silicons will just start with Asimov.
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 9a73984b638..fb5ee2cc19f 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index b207e3c1ed2..7c5615d1913 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi
index 169af7c8fa8..31c03e4ec0a 100644
Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ
diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi
index 0dc50a27967..f928a56a584 100644
Binary files a/icons/obj/meteor.dmi and b/icons/obj/meteor.dmi differ
diff --git a/paradise.dme b/paradise.dme
index f7f216ff6ac..5d82953f0fc 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -109,6 +109,7 @@
#include "code\__DEFINES\misc.dm"
#include "code\__DEFINES\mob.dm"
#include "code\__DEFINES\preferences.dm"
+#include "code\__DEFINES\qdel.dm"
#include "code\__DEFINES\sight.dm"
#include "code\__DEFINES\stat.dm"
#include "code\__HELPERS\_string_lists.dm"
@@ -1570,6 +1571,7 @@
#include "code\modules\paperwork\photography.dm"
#include "code\modules\paperwork\silicon_photography.dm"
#include "code\modules\paperwork\stamps.dm"
+#include "code\modules\pooling\atom_pool.dm"
#include "code\modules\power\apc.dm"
#include "code\modules\power\cable.dm"
#include "code\modules\power\cable_heavyduty.dm"