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"