From 96685733a9b30d3f76b01ef4a1e9da51b8394ae0 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 20 Jun 2015 01:34:53 -0400 Subject: [PATCH 01/15] Removes a few Hitby Messages --- code/game/machinery/doors/windowdoor.dm | 1 - code/game/machinery/shieldgen.dm | 2 -- code/game/objects/effects/aliens.dm | 1 - code/game/objects/structures/window.dm | 1 - 4 files changed, 5 deletions(-) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 1430e8f00dc..71fe0e46bc2 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -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/shieldgen.dm b/code/game/machinery/shieldgen.dm index eec12fa856b..356d6c25678 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -103,8 +103,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 diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index cac20a32362..ef86f28303a 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -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 diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 64aca8bcbe9..2b4e1b424af 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -102,7 +102,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 From 93392f8e909b88baf651888214a37ded7c230681 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 20 Jun 2015 04:13:55 -0400 Subject: [PATCH 02/15] Explosion Rework --- code/_globalvars/configuration.dm | 3 +- code/controllers/configuration.dm | 19 +++- code/datums/pizza_bomb.dm | 2 +- code/datums/spells/explosion.dm | 3 +- code/datums/spells/wizard.dm | 2 +- .../gamemodes/malfunction/Malf_Modules.dm | 2 +- code/game/gamemodes/wizard/spellbook.dm | 4 +- code/game/machinery/doppler_array.dm | 28 +++-- code/game/machinery/syndicatebomb.dm | 11 +- code/game/mecha/equipment/weapons/weapons.dm | 4 +- code/game/mecha/mecha.dm | 2 +- code/game/objects/explosion.dm | 103 +++++++++++------- code/game/objects/items/devices/PDA/PDA.dm | 4 +- .../items/weapons/grenades/ghettobomb.dm | 2 +- .../items/weapons/grenades/syndieminibomb.dm | 4 +- .../game/objects/items/weapons/tanks/tanks.dm | 8 +- code/modules/admin/admin_verbs.dm | 25 +++-- code/modules/admin/topic.dm | 28 +++-- code/modules/admin/verbs/randomverbs.dm | 12 +- code/modules/events/tgevents/anomaly_flux.dm | 4 +- code/modules/events/tgevents/anomaly_pyro.dm | 2 +- .../events/tgevents/brand_intelligence.dm | 2 +- code/modules/mining/abandonedcrates.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/power/cell.dm | 4 +- code/modules/projectiles/guns/magic/wand.dm | 2 +- code/modules/projectiles/projectile/magic.dm | 2 +- .../modules/projectiles/projectile/special.dm | 4 +- code/modules/reagents/reagent_dispenser.dm | 13 +-- config/example/game_options.txt | 18 +++ 30 files changed, 206 insertions(+), 115 deletions(-) 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/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/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/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/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/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/doppler_array.dm b/code/game/machinery/doppler_array.dm index 840ed1133c2..035a5479991 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -21,10 +21,15 @@ var/list/doppler_arrays = list() /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/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/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..8e394f38d50 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -633,7 +633,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) 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/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index e31bfc79996..82dcf41a2d5 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() 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/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 9d1907df0e8..d5191d42456 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -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/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 89fe2f3a863..d288bb0099a 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) + 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/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/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 7ca5d9496d7..3039ee9a5cd 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -83,7 +83,7 @@ user << "The crate's anti-tamper system activates!" var/turf/T = get_turf(src.loc) explosion(T, 0, 0, 0, 1) - del(src) + 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/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index baaa069d5fb..e1b218474ac 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1236,7 +1236,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/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/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/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..b3af964657c 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 @@ -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/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/config/example/game_options.txt b/config/example/game_options.txt index 4040f7b1e27..efa36e7f72e 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 (4,8,16) (recommended if you enable REACTIONARY_EXPLOSIONS above) +#BOMBCAP 16 +## 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. From 300b96b8dabc900c21d25f2dc751c23492f751c1 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 20 Jun 2015 13:16:27 -0400 Subject: [PATCH 03/15] "responsible" --- code/modules/admin/admin_verbs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index d288bb0099a..92d1bf5a331 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -402,7 +402,7 @@ var/list/admin_verbs_mentor = list( 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) + 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! From a75a1165dc9ba8e58073450a3a28faaebe023bcc Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 20 Jun 2015 15:21:24 -0400 Subject: [PATCH 04/15] Sarin->Tabun --- code/datums/uplink_item.dm | 8 ++++---- .../items/weapons/grenades/chem_grenade.dm | 8 ++++---- .../items/weapons/storage/uplink_kits.dm | 12 +++++------ code/modules/reagents/newchem/medicine.dm | 2 +- code/modules/reagents/newchem/toxins.dm | 20 +++++++++---------- .../reagent_containers/glass/bottle.dm | 2 +- 6 files changed, 26 insertions(+), 26 deletions(-) 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/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/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/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/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 From 1becaa7642fa01974d9e3506c0514725b353653a Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 20 Jun 2015 17:43:42 -0400 Subject: [PATCH 05/15] oops --- code/modules/mining/abandonedcrates.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 3039ee9a5cd..7b7f6eded45 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -82,7 +82,7 @@ if (attempts == 0) user << "The crate's anti-tamper system activates!" var/turf/T = get_turf(src.loc) - explosion(T, 0, 0, 0, 1) + explosion(T, -1, -1, 1, 1) qdel(src) return else From 499385c0819ff9df34e8d02c9bdd8480d547870e Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Sat, 20 Jun 2015 19:14:33 -0700 Subject: [PATCH 06/15] Space Vent fixes and Incinerator Tweak. Fixes a number of space vents not being connected to pipes, should let them function as intended. - Also replaced their vents with "On" vents, just to be sure Tweaked the configuration of the incinerator's pipes, general functionality unchanged. --- _maps/map_files/cyberiad/cyberiad.dmm | 37 ++++++++++++++------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 5916631da0c..934aa2cc5ee 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -4112,7 +4112,7 @@ "bBd" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/assembly/chargebay) "bBe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/assembly/chargebay) "bBf" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/assembly/chargebay) -"bBg" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/medical/virology) +"bBg" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/wall/r_wall,/area/toxins/mixing) "bBh" = (/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/cable_coil,/obj/item/device/flash,/obj/item/device/flash,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/assembly/robotics) "bBi" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Roboticist"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/assembly/robotics) "bBj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor,/area/assembly/robotics) @@ -4414,7 +4414,7 @@ "bGT" = (/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/turf/simulated/floor,/area/quartermaster/office) "bGU" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/central/sw) "bGV" = (/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/yellow{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos) -"bGW" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "virolab"; name = "Virology Laboratory Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/virology/lab) +"bGW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bGX" = (/obj/structure/closet/secure_closet/hop,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/crew_quarters/heads) "bGY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/crew_quarters/heads) "bGZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/pdapainter,/turf/simulated/floor/carpet,/area/crew_quarters/heads) @@ -4982,6 +4982,7 @@ "bRP" = (/obj/machinery/computer/security/mining,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/machinery/camera{c_tag = "Mining Dock"; dir = 4; network = list("SS13")},/turf/simulated/floor,/area/quartermaster/miningdock) "bRQ" = (/turf/simulated/floor,/area/quartermaster/miningdock) "bRR" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/miningdock) +"bRS" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bRT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/qm) "bRU" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/qm) "bRV" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/quartermaster/qm) @@ -5014,12 +5015,16 @@ "bSw" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/hallway/primary/central/sw) "bSx" = (/obj/machinery/iv_drip,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/sleeper) "bSy" = (/obj/machinery/door_control{id = "acutesep"; name = "Acute Separation Shutters Control"; pixel_y = -25},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) +"bSz" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bSA" = (/obj/structure/disposalpipe/segment,/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Chief Medical Officer's Office"},/turf/simulated/floor{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/cmo) "bSB" = (/obj/machinery/light{dir = 1},/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/cmo) "bSC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/cmo) "bSD" = (/obj/structure/closet/secure_closet/CMO,/obj/machinery/light{dir = 1},/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/briefcase,/turf/simulated/floor{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/cmo) +"bSE" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/atmospherics/binary/pump{dir = 4; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bSF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bSG" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay2) +"bSH" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) +"bSI" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/xenobiology) "bSJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/wall,/area/medical/genetics) "bSK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/wall,/area/medical/genetics) "bSL" = (/obj/machinery/computer/scan_consolenew,/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) @@ -5029,6 +5034,7 @@ "bSP" = (/obj/machinery/computer/scan_consolenew,/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) "bSQ" = (/obj/structure/stool/bed/chair/office/light,/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor{icon_state = "dark"},/area/toxins/server) "bSR" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server) +"bSS" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/medical/virology/lab) "bST" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) "bSU" = (/obj/machinery/computer/rdservercontrol,/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server) "bSV" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor{icon_state = "dark"},/area/toxins/server) @@ -5044,13 +5050,15 @@ "bTf" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bTg" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bTh" = (/turf/simulated/wall/r_wall,/area/toxins/mixing) -"bTi" = (/obj/machinery/atmospherics/pipe/simple/insulated,/turf/simulated/wall/r_wall,/area/toxins/mixing) +"bTi" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/wall/r_wall,/area/medical/virology/lab) "bTj" = (/turf/simulated/wall/r_wall{desc = "A specially coated wall that resists temperatures for Science"; max_temperature = 1e+009; name = "Coated Reinforced Wall"},/area/toxins/mixing) "bTk" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor{id_tag = "ToxinsVenting"; name = "Toxins Venting Bay Door"; use_power = 0},/turf/simulated/floor/engine,/area/toxins/mixing) "bTl" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/mining/station) "bTm" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bTn" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bTo" = (/obj/structure/table,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "mining_shuttle"; pixel_x = 25; pixel_y = -8; req_access_txt = "0"; req_one_access_txt = "13;48"; tag_door = "mining_shuttle_hatch"},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/mining/station) +"bTp" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5},/turf/simulated/floor/plating/airless,/area/space) +"bTq" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor/plating/airless,/area/space) "bTs" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/floor{dir = 9; icon_state = "brown"},/area/quartermaster/miningdock) "bTt" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor,/area/quartermaster/miningdock) "bTu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor,/area/quartermaster/miningdock) @@ -6010,7 +6018,6 @@ "cmJ" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cmK" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cmL" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cmM" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cmN" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cmO" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/turf/simulated/floor,/area/storage/tech) "cmP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/storage/tech) @@ -6130,9 +6137,6 @@ "cpq" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator) "cpr" = (/obj/machinery/atmospherics/binary/pump{dir = 4; on = 1},/obj/structure/sign/fire{pixel_y = -32},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cps" = (/obj/machinery/door_control{id = "disvent"; name = "Incinerator Vent Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "12"},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cpt" = (/obj/machinery/light,/obj/machinery/atmospherics/tvalve/mirrored/digital{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cpu" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cpv" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cpw" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/structure/sign/poster{pixel_x = 32},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cpx" = (/turf/simulated/floor/plating,/area/maintenance/apmaint) "cpy" = (/obj/structure/table,/obj/machinery/cell_charger{pixel_y = 5},/obj/machinery/status_display{layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech) @@ -6842,7 +6846,6 @@ "cEl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/toxins/xenobiology) "cEm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cEn" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{tag = "icon-whitehall (WEST)"; icon_state = "whitehall"; dir = 8},/area/toxins/xenobiology) -"cEo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/xenobiology) "cEp" = (/obj/machinery/atmospherics/pipe/vent{dir = 8},/turf/simulated/floor/plating/airless,/area/space) "cEq" = (/turf/simulated/floor/plating/airless,/obj/structure/cable,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/port) "cEu" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -7347,8 +7350,6 @@ "cPp" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cPq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) "cPr" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab) -"cPs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating/airless,/area/space) -"cPt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating/airless,/area/space) "cPu" = (/obj/structure/sign/biohazard{pixel_y = 32},/obj/machinery/atmospherics/pipe/vent{dir = 8},/turf/simulated/floor/plating/airless,/area/space) "cPv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor{desc = "By gods, release the hounds!"; id_tag = "xenobioout6"; name = "Containment Release"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cPw" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "engineering_dock_inner"; locked = 1; name = "Engineering Dock Airlock"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) @@ -8102,7 +8103,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbD aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzOaSZaKcaKcbkRbkRaKcaKcaKcaKcaKcbkRbkRaKcaKcaKcbkRbNBbNBbNBbNCbNBbLXbNDbNEbNFbNGbLXbBZbttbNHbNIbNIbAmbAmbAmbAmbAmbNJbIPbHfbHebNKbNLbNMbNNbKvbKvbthbthbthbFGbFHbFGbFGbFGbFGbFGbFGbFGbNObttbNPbNQbNRbNSbNTbNRbNRbNUbNVbNWbNXbNYbNZbOabObbOcbKLbOdbOebOfbOgbOhbOibOjbOkbOlbOmbOnbOobOpbOqbOrbLcbOsbJybJybPXbOubPXbOtbPYbOtbOtbOtbOvbOwbOxbOxbOybOzbOAbOBaYabOCbODbaabOFbOGbOHbLvbNkaZCaaaaaaaaabDbbOJbOKbDbaTrbDbbDbaTrbDbaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOLaabaaaaaaaaaaaabNBbOMbONbOObOPbLXbOQbORbOSbOTbLXbBZbttbOUbOVbOWbOXbOYbOZbPabPbbPcbPdbPebPfbPgbPhbPibPjbPkbPlbPmbPnbPobPpbPqbPrbPsbscbPtbttbPubPvbPwbttbPxbNRbPybPzbPAbPBbPCbHxbPDbPEbPFbPGbPHbPIbPJbPKbPLbPMbPNbJsbPObMGbPPbPQbPRbPSbPTbPUbJxbPVbLcbLcbLcbPWbJybPXbQabPZbQcbabbRrbQdbRsbOtbQebQfbQgbOxbOxbQhbOAbQibadbQkbQlbaebQnbQobQpbLvbQqbumaaaaaaaaabDbbDbbDbbDbaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNBbQrbQsbQtbQuaXVbQwbQxbQybQzbLXbBZbQAbQBbttbttbEebQCbscbPsbPrbQDbQEbQDbQFbQGbQGbQHbQIbQJbQGbQGbQKbQGbQLbQGbPrbPsbscbQMbQNbQObQPbQQbQRbttbNRbQSbPzbQTbQUbQVbHxbQWbQXbagbafbahbRbbajbaibHxbRebRfbJsbRgbRhbRhbRibRjbRkbRlbRmbJxbRnbRobLcbRpbRqbJybPXbRvbRtbRwbRubSRbSQbRxbOtbRybQfbRzbRzbOxbRAbRBbRCbRDbREbRFbRGbRHbRIbRJbLvbNkbumbRKaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzOaaaaaaaaaaaaaaaaaaaaaaaabRLbRMbRNbRMbROaaaaaaaaabNBbNBbRPbRQbQtbRRaXVbRTbOSbRUbRVbLXbBZbRWbRXbRYbRZbSabSbbScbSdbSebSfbSgbShbSibSjbSjbSkbSlbSlbSlbSlbSlbSlbSmbSnbSobSpbSqbSrbRZbSsbStbSubSvbSwbNRbSxbPzbPAbSybQVbHxbQWbQXbakbSAbSBbSCbSDbalbHFbSFbSGbJsbJsbambambJsbRjbJubSJbSKbJxbSLbSMbSNbSObSPbJybPXbWobSTcZnbancZobSUbSVbOtbSWbQfbRzbRzbOxbSXbSYbSZbTabTbbTcbTdbTebTfbTgbLvbNkbThbTibThbTjbTkbTjbTjbTjaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzOaaaaaaaaaaaaaaaaaaaaaaaabRLbRMbRNbRMbROaaaaaaaaabNBbNBbRPbRQbQtbRRaXVbRTbOSbRUbRVbLXbBZbRWbRXbRYbRZbSabSbbScbSdbSebSfbSgbShbSibSjbSjbSkbSlbSlbSlbSlbSlbSlbSmbSnbSobSpbSqbSrbRZbSsbStbSubSvbSwbNRbSxbPzbPAbSybQVbHxbQWbQXbakbSAbSBbSCbSDbalbHFbSFbSGbJsbJsbambambJsbRjbJubSJbSKbJxbSLbSMbSNbSObSPbJybPXbWobSTcZnbancZobSUbSVbOtbSWbQfbRzbRzbOxbSXbSYbSZbTabTbbTcbTdbTebTfbTgbLvbNkbThbBgbThbTjbTkbTjbTjbTjaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTlbTmbTnbTobTlbaDbaDbaDbNBbTsbTtbTubTvbTwbTxbTybTzbTzbTAbLXbTBbTCbTDbTEbTEbaEbTGbaFbTEbTIbTIbaGbTKbbRbTIbTIbTMbPrbPrbTNbTObTObTObTPbTQbTObTObTRbTSbTTbTTbTUbTTbTVbTWbTTbbUbTYbTZbNRbUabUbbQWbUcbUdbUebUfbUgbUhbUdbHxbRebUibUjbUkbUlbUmbUnbUobUpbUqbUrbUsbUtbUubUvbUwbUxbJybPXbPXcZpcZrcZqcZscZqcZtbOtbUybUzbUAbUAbOxbUBbUCbUDbLvbLvbLvbLvbLvbLvbLvbLvbNkbThbUEbUFbUGbUHbUHbUIbTjaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbcgbcgbcgbcgbUMbUMbUNbUNbUNbUNbUOaabaabaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRNbUPbUQbUPbRNbaDbUSbUTbUUbUVbUWbUXbUYbUZbLXbVabVbbVcbVdbLXbTCbTCbVebTEbWXbVgbVhbVibVjbTIbWUbVlbVmbVnbVobTIbVpbVqbVrbTObVsbVtbVubVvbVwbVxbVybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObQXbVPbVQbVRbVSbVTbVUbHFbVVbVWbVXbVYbUmbVZbVZbWabWbbJxbWcbWdbWebWfbWgbWhbWibJybWjbWkbWlbWmbWlbWlbWncZubWpbWqbWrbWsbWtbOxbWubWvbOBbDbbvWbWwbWxbWybWybWxbWybWzbThbWAbWBbUGbUHbWCbWDbTjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgbWFbWGbWFbUMbUNbUNbWHbdqbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTlbWJbUPbUPbWKbWLbRQbWMbWNbWObRQbUXbWPbWQbLXbLXbLXbLXbLXbLXbWRbTCbWSbWTceLbWVbWVbWVbWWbTIbYtbWYbWYbWYbWZbXabXbbXcbXdbXebXfbXgbXhbXibXjbXkbTObTRbXlbTTbXmbXnbXobXpbXqbTTbQSbPAbQTbQUbXrbXsbXtbXubXvbXwbXxbXybXzbUdbXAbXBbXCbXDbXEbXFbXGbXHbXIbXJbJxbJxbJxbJxbJxbXKbXLbXMbJybXNbWlbWlbXObWlbXPbXQbXRbXSbXTbQfbXUbXUbOxbOzbXVbOBbDbbThbXWbThbThbThbThbThbThbThbXXbXYbTjbXZbYabYbbTjaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbYcbWFbWFbYdbUNbUNbWHbWHbYebWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8116,9 +8117,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciBaaaaabaabciCciCciCciCciCciCciDciCbTCcdbbhtaaabhubjJbhYbjYciJciKciLciMciNciOciPciQciRciSciTciUciVciWciXciYciZchLcjacjbcjbcjbcjcchMbHTbHTcjdcjdcjdcjdcjecjdcjfcjfcjgcjdcjdcjhcjdcjicjjbkycjlbkycjmcjncjocjpcjqbuXbuXcjrcjscjtcjucjvcjwcjxcbScaAcaAcjycaAcjzcaAcjAcjBcjCcfdcjDcjFcjGcjHcjIcjJcjKcjLcjIbvWcgYcjMbvWcjNcjOcjPcjQcfQbvWbvWbvWbvWbvWbvWbvWcjRcjEaZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNbWHbWHbWHbWHbWHbWHceDbWHciAbWHbWHbWHbWHbWHbUNbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjTcjUcjUcjUbkzcjWcjXcjYcjZckackbckccjScdbbhtaaabmZckgckhckickjciKckkcklckmcknchBckoceTbZUbhrckpcgockqcgockrcksbneckuckvckvckvckwchMbHTbHTcjdckxckyckzckAckBckCckCckDckEckFckGckHckIckJckKcdXcdXckLckMckNckOckPaaaaaacjvckQckRckScjrckdckUckVckWckWckXbGickYckZclaclbckZckZckZclcckZckZcldcleclfclgclhclicljclkbWycllclmbWybWybWybWyclnclobWybWybWybWyclpbvWaZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNbUNccYbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclrclsclsclsclscltcluclvclwclxclxclyclzclAceIbhtaaabmZclBclCclDclEclFclGclHclEclEclIclJclKclLclMclMclNclOcgoclPclQbneckvckvckvckvclSchMbHTbHTcjdclTclUclVclWclXclYclYclZcmacmbcmccmdcmecjdcmfcdTcmgbEDcmhckNcmickPaaaaaacjvcmjcmkcmlcjvbHUcmmcmncmncmncmncmncmnckTcmpcmqcmocmscmsbnfbnfcmscmvcmwcmxcmycmzcmAcmBcmCcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAbvWcmDcmraZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZEbUNbUNcgbcgbbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcmFcmGcmHcmGcmIcmJcmKcmLcmLcmMclzcmNcdbbhtaaabmZcmOcmPcmQcmRciKcmScmTcmUcmVchBckoceTcmWcmXceVcmYcmZbhrbhrbhrcndcneckvckvcnfcngchMbHTcnhcjdcnicnjcnkcnlcnlcnlcnmcnncnlcnlcnocnkcnpcnqcnrcdTcnsbEDcntckNcnuckPaaaaaacjvcnvcnwcnxcjvcnybHTcnhcnzcnzcnzcnzcnzbngbnkbnjcnzcnzaaaaaaaaaaaacjIcnDcnEcnFcmAcnGcnIcnHcnKcnJcnMcnLcnOcnNcnQcnPcoXcnRcpacmAcnScnTcnUcnVcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnXcnYbUNbYcbUNbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcmFcmGcmHcmGcmIcmJcmKcmLbRSbGWclzcmNcdbbhtaaabmZcmOcmPcmQcmRciKcmScmTcmUcmVchBckoceTcmWcmXceVcmYcmZbhrbhrbhrcndcneckvckvcnfcngchMbHTcnhcjdcnicnjcnkcnlcnlcnlcnmcnncnlcnlcnocnkcnpcnqcnrcdTcnsbEDcntckNcnuckPaaaaaacjvcnvcnwcnxcjvcnybHTcnhcnzcnzcnzcnzcnzbngbnkbnjcnzcnzaaaaaaaaaaaacjIcnDcnEcnFcmAcnGcnIcnHcnKcnJcnMcnLcnOcnNcnQcnPcoXcnRcpacmAcnScnTcnUcnVcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnXcnYbUNbYcbUNbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaacmEcnZcoacobcocclwcodclwcoeclwcofcogcohcoibhtaaabnlbjJbnIbjYcomciKciKconcoocopcoqcorcoscotcouceVcovcowcoxcoycozchLcoAckvckvckvcoBchMbHTbHTcoCcoCcoDcoEboQboQboQcoCbpobpobpocoLcoMcoDcoNcmfcdTcmgbEDcoOckNckOckPaaaaaacjvcoPcoQcoRcjvbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcoTcoUcoVbqlcpbcoYcoYcoZcoYcoYcoYcoYcoYcpdcpccpfcpecphcpjcpjcpkcplcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNcpmcpncpobUNbUNbWHbWHcppbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcpqcmGcprcmGcpscptcpucpvcqUcpwclzcpxcdbccZaaaaaaaaaaaachucpycpzcpAcpAchBcpBchBcpCceTbZUcpDcpEcpFcpGcpHcpHcpHcpIcpJckvcpKckvcpLchMbHTbHTcoCcpMcpNcpOcpPcpQcpRcoCcpQcpRcpPcpScpTcpUcoNcnrcpVcnsbEDcpWckNcpXckPcnzcnzcjvcjvcjvcjvcjvcpYbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcqacqbcqccqdcpicqfcqhcpgcoYcoYcqjcoYcoYcpdcpfcpfcpfcoXcpjcqncqocqpcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgcqrcqsbYdbUMbUNbUNbWHbdqbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcpqcmGcprcmGcpsbSzbSHbSEcqUcpwclzcpxcdbccZaaaaaaaaaaaachucpycpzcpAcpAchBcpBchBcpCceTbZUcpDcpEcpFcpGcpHcpHcpHcpIcpJckvcpKckvcpLchMbHTbHTcoCcpMcpNcpOcpPcpQcpRcoCcpQcpRcpPcpScpTcpUcoNcnrcpVcnsbEDcpWckNcpXckPcnzcnzcjvcjvcjvcjvcjvcpYbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcqacqbcqccqdcpicqfcqhcpgcoYcoYcqjcoYcoYcpdcpfcpfcpfcoXcpjcqncqocqpcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgcqrcqsbYdbUMbUNbUNbWHbdqbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUabCcqtcqtcqtcqtcqtcqtcqtcqtcqucqucqucqucquciCclzclzclzclzclzclzcqvcqwcqxcqxcqxcqxcqxchuchBchBchBchBchBchBchBcqyceTbZUcqzcqAcqBcqCcqDcqEcqFcqGcqHcqIcqJcqKcqLchMbHTbHTcoCcqMcqNcpOcpPcpPcqOcoCcqPcpPcpPcpScpOcqQcoNbEDbEDbEDcqRcqSckNcqTckPczvbHTbHTbHTbHTcqVbHTbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcqXcqYcqZbricqlcqgcqecqicoYcoYcoYcoYcqmcrhcrbcsvcsucqkcpjcricrjcrkcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgbcgbcgbcgbUMbUMbUNbUNbUNbUNbUOaabaabaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmcrncrocrpcrqcrqcrrcrscrtcrucrvcrwcrxbrMcrzcrzcrzcrAcrBcrCcrDcrDcrEcrFcrGcrHcrIcrHcrHcrHcrGcrHcrHcrJcrKcrLcrMceTbZUcrNcrPcrOcrQceVcrRclMcrScrTcrUcrVcrWcrXcrYbHTbHTcoCcrZcsacsbcsccsdcsecoCcsfcsdcsgcshcsbcsicoNbHTbHTbHTcsjcoOckNcoOcskbHTbHTcFLbHTbHTbHTbHTbHTcfccGOcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacslcjIcsmcjLcslcrccrecrdcuQcrfcsocsncoYcoYcsqcspcsscsrcstcpjcsxcsycszcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmcrncsAcsBcsCcsBcsDcsEcsFcsGcsHcsIcsHcsJcsKcsKcsKcsKceTbZVbZVbZVcsKcsLcsKcsKcsKcsKcsKcsKcsKcsKcsKcsKcsMcsNcsOcsPcsQcsRcsScsTcsUcsVcsWcsXcsYcsZctactbctcctdctecmnctfctgcthctictjctkcpPctlcoCctmcpPctkctncpOctocoNctpcmscmsctqctrctscttckPbnjbnjbnjbnjcnzcnzcnzbnjbnjbnjcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjIctyctzctAcjIcmAcmAcmAcmAcmAcmAcuTcsncuUctBcswctCcmAcmAcpjbsyctMbsybsyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8127,20 +8128,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczaczakSakSaczakSakSakSalwakSakSaabalwawTaaaaabaabcwpcwpcwpcqtcwqcwrcwscwtcwucwvcwwbxYcwybxZcwAcwBcwCcwDcwEcwFcwGcwHcwIcvecwHcwJcwKcwLcwLcwMcvecwNcwOcwPcwQbZUcwRbyfcwTcwUcwVcwWcwVcwXcwYbzncxacxbcxccrYcrYcuFcvAcoNcoNcxdcoNcoNcxecxfcxgcxgcxgcxhcxgcxicxgcxjcnzaaacuGcxkcvMcxlckPbhsbhsbhsbhsckPckPcxpcxqcxqcxrcxqcxqcxrcxsaaaaaacjIcxtcxucxtcxvcxwcqacxxcvWcxycxzcxycjIaaaaaaaaaaaaaaaaaacwecwbcuWcxCcxCcwccweaaaaaaaaacxJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaabaabaaaaabaabaaaaaaaabaabaabaaaawTaaaaaaaaaaabaabcwpcqtcqtcqtcqtcqtcqtcqtcqtcxLcwybxZcxNcxOcxPcxQcxQcxQcxQcxRcxScxTcwLcxUcwLcwLcxVcwLcxWcxXcxYcxZcwQbZUcyacybcyccwUcydcyecyfcwUcygcyhcyicyjcykcylcymcyncyocypcypcyqcyrcyscytcyucdzcdzcdzcyvbHTbHTcbRbHTcnzaaacuGcywcvMcyxcyycyzcyAcyBcyCbzLcyEcyFbzLcyEcyGbzLcyHcyIcyJaaaaaacjIcxtcxtcxtbzMcyLcyMcyNcyOcyPcyQcyRcjIaaaaaaaaaaaaaaaaaacwectKcxCczMcxCcuLcweaaaaaaaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaczaaacyYcyZczaaaacyYcyZczaaaacyYcyZczaaabczbaabaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaabxYcwybxZczdcwLcxVczecwLcwLcwLczfcwLczdczdcwLcwLcwLcwLczgbzPcxXczicsKczjbZUcybcybczkcwUczlczmczncwUczoctaczpczqczrczscztcHZbHTczucbSczubHTbHTbHTcuFcZScnzbnjbnjbnjbnjbnjcnzcnzaaaczwczxczycjqczzczAcoOcoOczBbAbczDczEbAbczDczEbAbczDczEcyJaaaaabcjIcvWcvWcvWcvWczFcqaczGczHczIczJczKcjIaabaaaaaaaaaaaaaaacwecuPcuMcxCcxCcuOctDcEpaaaaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaaacyYczVczaaaacyYczVczaaaacyYczVczaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabbxYcwybxZczdczYcwLczZcAacAbcAbcxUcwLczdcAccwLcwLcwLcwLcAdcAecAfcAgbYxcAhcAicAjcAkcAlcwUczlcAmcAncwUcAoctacrYcApcrVcAqcArcAscAtcAucAvcAwcAtcAtcAtcAxcAtcnzaaaaaaaaaaaaaaaaaaaabaaacuGcAycvMcAzcAAcABcoOcoOczBbBgcADbAbbBgcADbAbbBgcADbAbcyJaabaabcjIcvPcvQcvRbBBcAIcyMcAJcAKcALcAMcANcjIaabaabaabaabaabaaacwecwecuScuRcwdcwecweaaaaaaaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaaacyYczVczaaaacyYczVczaaaacyYczVczaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabbxYcwybxZczdczYcwLczZcAacAbcAbcxUcwLczdcAccwLcwLcwLcwLcAdcAecAfcAgbYxcAhcAicAjcAkcAlcwUczlcAmcAncwUcAoctacrYcApcrVcAqcArcAscAtcAucAvcAwcAtcAtcAtcAxcAtcnzaaaaaaaaaaaaaaaaaaaabaaacuGcAycvMcAzcAAcABcoOcoOczBbAbcADbAbbAbcADbAbbAbcADbAbcyJaabaabcjIcvPcvQcvRbBBcAIcyMcAJcAKcALcAMcANcjIaabaabaabaabaabaaacwecwecuScuRcwdcwecweaaaaaaaaacyXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaagaaaaaaaaaakSaabcyYczVczaaaacyYczVczaaabcyYczVczaaabaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaaaaaabxYcwycvecAWcwLcAXcAYcAZcBacBbcBacBccBacBdcBecwHcBfczdczdbzPcBgcBhcBicBjcBkcBlcBmcBncBocBpcBqcBrcBscBtcBucBvcBvcBwcBxcBycBzbBGcBBcBCcBDcBEcBFcBGcBHbBHaabaaaaaaaaaaaaaaaaaaaabaabczwcBJcBKcBLcBMcBNcoOcoOcoOcBOcoOcoOcoOcoOcoOcoOcoOcBPbBIaaaaaacjIcxtcxtcxtcBRcxwcqacBScBTcBUcBVcBWcjIcjIcjIcjIcjIaabaaaaaacwecwecwecwecweaaaaaaaaaaaacyXaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaabaaacyYczVczaaabcyYczVczaaaacyYczVczaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaaaaabaabaaaaaacxLcBZcvecCacCbcCbcCccvecvecvecvecvecvecvecvecvecvecvecvecvecCdcCecCdcCfcCdcqxbBYcChbCibChbChbCkcCmbClcBucCocCpcCqcCrcCscCtbBGcCvcCwcCxcCycCzcCAcCBbCwaabcCDcCDcCDcCDcCDaaaaaaaabcuGcCEcvMcCFcCGcCHcCIcoOcoOcCJcoOcoOcoOcoOcoOcCKcoOcCLbBIaaaaaacjIcxtcxtcxtbBBcCNcyMcCOcCPcCQcCRcCScCTcCUcCVcCWcjIaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaaacyYczVczaaabcyYczVczaaaacyYczVczaaabaaaaaaaaaaaaaaaaaaaaaaaaaabbCxcCYcCYcCYcCYcxLcCZcwycDacDbcDccDccDdcDecDfcDgcDgcDgcDgcDhcDicDjcDicDicDkcDkcDicDlcDmcDncDocDocDpcDqcDrcDscDtcDucDucDvcDwcDxcDycDzcDAcCscDBbBGcDCcDDcDEcDFcDGcDHcDIbCycDKcDLcDMcDNcDOcCDaaaaaacDPcDQcDRcDScDTcDRcDUcDVcDWcDXcDYcDZbzLcDYcEbcEccEdcEebCMcyJaaaaaacjIcvWcvWcvWcvWcEgcqacBScEhcEicBVcEjcEkcElcEmcEncEocEpaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaabaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaaacyYczVczaaabcyYczVczaaaacyYczVczaaabaaaaaaaaaaaaaaaaaaaaaaaaaabbCxcCYcCYcCYcCYcxLcCZcwycDacDbcDccDccDdcDecDfcDgcDgcDgcDgcDhcDicDjcDicDicDkcDkcDicDlcDmcDncDocDocDpcDqcDrcDscDtcDucDucDvcDwcDxcDycDzcDAcCscDBbBGcDCcDDcDEcDFcDGcDHcDIbCycDKcDLcDMcDNcDOcCDaaaaaacDPcDQcDRcDScDTcDRcDUcDVcDWcDXcDYcDZbzLcDYcEbcEccEdcEebCMcyJaaaaaacjIcvWcvWcvWcvWcEgcqacBScEhcEicBVcEjcEkcElcEmcEnbSIcEpaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaabaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaaaaabaaaaabaabcEqaabaabaabcEqaabaaaaabcEqaabaaaaaaaaaaaaaaaaaaaaaaaabCxbCxbCxcEucEvcEwcExcEycEzcEAcDacDacEBcECcvecvecEDcEEcEEcEEcEEcEFcEGcEHcEGcEGcEGcDocDocEIcEJcEKcELcEMcDucENcDrcDucDucDucDucEOcBucEPcEQcCqcDAcCscDAbBGcDCcDDcEScETcEUcEVcEWbCUaabcEYcEZcDOcFacCDaaaaaaaaacDQcFbcFccFdcDRcFecFfcFgcFhcFiczEczDcFicFjcFkcFlczEczDcyJaaaaaacjIcvPcvQcvRbDrcAIcyMcFncFocFpcEmcFqcFrcFscFtcFucjIaabaabaagaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaabaaaaaaaaaaabaabaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaakSaabcFvcFwcFwcFxcFycFzcFzcFzcFycFzcFzcFzcFycFzcFzcFAcFwcFwcFwcFwcFwcFBcFCcFDcFEcFFcFGcFHcFIcFJceHcwycFKcDacvecvecvecZTcEDcEEcFMcFNcFOcFPbDscFRcFScFTcFUbDtcFWcFXcFYcFZcGabDtcGccGdcDrcGecDucDucDucGfcBucGgcGgcDAcGhcGicGjcGkcGlcGmcGncGocGpcGqcGrbCycGscDLcGtcDOcDOcCDaaaaaaaabcDQcGucFccGvcDRcGwcGxcCIcGycFicGzcGAcFicGBcGCcFlcGzcGDcyJaaaaaacjIcxtcxucxtcGEcxwcqacGFcFocGGcqacqacGHcvWcvWcvWcjIaaaaaaaaaaaaamjamjamjawTaabaabaabaabcGIaabaabaabaabaabalwamjamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaaaaabaaaaabaabcGJaabaaaaabcGJaabaaaaabcGJaabaaaaaaaaaaaaaaaaaaaaaaaabCxbCxbCxcGLcGMcGNcCYcZUceHcGPcEzcEzcEzcEzcGQcEzcFJcEEcGRcGScGTcGUbDGcGWcGXcGYcGZbEocHbcHccHdcHecHfbFlcHhcDqcDrcZicHjcDucDucHkcBucHlcHmcDAcHncCscHocHpbFvbFtbGBbFQbGEbGCbGEbGGaabcCDcCDcCDcCDcCDaabaabaabcHxcHycFccGvcDRcHzcHAcHBcHCcHDcHEcHFcHFcHGcHFcHHcHIcDRcHJaaaaaacjIcxtcxtcxtbDrcHKcHLcHMcHNcHOcCTcCTcCTcHPcHQcHRbGHaaaaaaaaaaaaamjaaaaabaaaaabaaaaaaaaacHTaaaaabaabaaaaaaaaaaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabbCxcCYcCYcCYcCYcHWcHXcHYceHcZVceHceHcEDcIaceHcEEcIbcIccIdcIebGIcIgcIhcIicIjbGRcIlcImcIncIocIpbGRcIrcIscItcIucIvcIwcIxcIycIzcIAcGjcIBcICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMbGVcDKcDLcIPcIOcIOcCDaaaaaaaabcDQcIQcFccIRcDRbIxbGWbGWbIxcDRcIVcIWcIXcIYcIZcJacJbcIYbIBaaacDPcjIcjIcjIcjIcjIcJdcqacJecyMcJfcyMcJgcyMcJhcyMcJibGHaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmaaaaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabbCxcCYcCYcCYcCYcHWcHXcHYceHcZVceHceHcEDcIaceHcEEcIbcIccIdcIebGIcIgcIhcIicIjbGRcIlcImcIncIocIpbGRcIrcIscItcIucIvcIwcIxcIycIzcIAcGjcIBcICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMbGVcDKcDLcIPcIOcIOcCDaaaaaaaabcDQcIQcFccIRcDRbIxbIxbIxbIxcDRcIVcIWcIXcIYcIZcJacJbcIYbIBaaacDPcjIcjIcjIcjIcjIcJdcqacJecyMcJfcyMcJgcyMcJhcyMcJibGHaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmaaaaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaacyYcHUczaaabcyYcHUczaaaacyYcHUczaaaaaaaaaaaabaaaaaaaaaaaaaabaabaabaaaaaaaabaabcJncJncJncJncJncJncJncJocJncJncEEcJpcJqcGTcGTbGIbICbGIbJhcJvcDocJwcJxcFZcJycJzcDocJAcDucDrcJBcJCcJDcIxcJEcJFcJGcJHcJIcJJcJKcJHcJLcJMcJNcJOcDAcJPcJQcJRbJCaabcEYcJUcJTcJVcCDaaaaaaaaacDQcDRcJWcJXcDRcJYcJZcKacKbcKccFccKdcKecIYbJEcKgcKhcKibIBaabaaaaaaaaaaaaaaacjIcKkcKlcKmcKncKocKpcKqcKrcKocKpcKscjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycKzaabamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabcJncKAcKAcKBcKCcKDcKDcKEcKFcKGcKHcIdcIecGTcGTcGTcKIcGTcGTcGTcDocKJbJVcKLbJWbJXcKOcKPcKQcKRbKhbKhbKhcKVcKWcKXcKYcKZcLacHncCscLbcLccLdcLecLfcDAcJPcLgcLhbKMcLjcDLcLkcIOcIOcCDaabaaaaaacHxcLlcLmcLncLocLpcLqcLpcLpcLrcLscLtcLucLubLscLwcLxcLybLtaabaabaaaaaaaaaaaacjIcLAcLBbLucvWbLEcLEbLUcvWbLVcLHbLWcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaaacLJcLJcLJcLJcLJaabamjaaaaaaaaaaaacJmaaaaaacJmaaaaaacJmcJmcJmcJmcJmcJmcJmaaaaaacJmaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaabcyYcHUczaaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacJncKAcKAcKBcLKcLKcLKcLLcLLcLMcEEcLNcLOcLPcLQcLRcLScLTcLUcLUcLVcLWcLXcGTcGTcGTcLYcLZcMacMbcMccMdcMebNdcMgcEEcMhcMhcMicHncCscMjcMkcMlcMmcMncDAcMocMpcMqbNgcMscCDcCDcCDcCDcCDaaaaaaaaacDQcMtcMucMvcMwcMxcMycMxcMxcMzcMAcMBcMCcLybNlcMEcKhcIYbNqaabaabaaaaaaaaaaaacjIcMGcxtcxtcvWcMHcxtcxtcvWcMHcxtcxtcjIaaaaaaaaaaaaamjaaaaabaaaaabaabaabaaacJlaaaaabaaaaabaaaaabaaaamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaalwaabcyYcMIczaaaacyYcMIczaaaacyYcMIczaaabakSaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcJncMJcMKcLKcLKcLKcMLcMMcMMcMNcMMcMMcMMcMMcMOcMPcMQcMRcMScMScMScMTcMUcMVcMScMScMScMUcMWcMXcMYcMdcMZbNdcMgcNbcNccNdcNecNfcNgcNhcNicLfcNjcNkcNlcNmcNncNobGVcNpcDLcNqcNrcNrcCDaaaaaaaaacDQcNscNtcNucNvcNwcNxcNycIYcNzcNAcNBcNCcNDbJEcNFcNGcNHbNqaaaaaaaaaaaaaaaaaacjIcNJcxtcxtcvWcNKcxtcxtcvWcNKcxtcxtcjIaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaakSaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcJncNLcLKcLKcLKcLKcLKcMMcNMcNNcNOcNPcNQcMMcNRcNScNTcJqcGTcGTcNUcNVbNtbNucNYbNvbNvcObcEEcOccMYcMdcOdbNdcMgcEEcOfcMhcOgcOhcDAcNhcNicOicDAcNkcNlcJPcJQcOjbJCcOkcEYcOlcOmcOncCDaaaaaaaaacOobNwbNwbNwbNwcOscOscOtcOubJEbJEbNxbJEbJEcOzcOzcHJcOAcOzaaaaaaaaaaaaaaaaaacjIcxtcxtcxtcvWcOBcxtcxtcvWcOBcxtcxtcjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycOCaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaczakSaczaczalwakSakSakSakSaczakSakSaczcODaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJncOEcLLcOFcOGcOHcOIcMMcOJcOKcOLcOMcONcOOcOPcOQcORcJqcGTcOScOTcOUcOVcOWcOXcOYcOZcPacPbcNTcJqcPccPdcMbcPecEEcPfcMhcPgcPhcDAcNhcNicLfcDAcPicNlcJPcPjcPkbKMcPlcDLcPmcNrcNrcCDaaaaaaaaacPnaaaaaaaaaaaaaaaaaacDQcPocIYcIYcPpcPqcPrcOzaaccPscPtcPuaaaaaaaaaaaaaaaaaacjIcjIcjIcjIcjIcjIcjIcjIcjIcPvcPvcPvcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaabcLJcLJcLJcLJcLJaaaamjaaaaaaaaaaaacJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaakSaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcJncNLcLKcLKcLKcLKcLKcMMcNMcNNcNOcNPcNQcMMcNRcNScNTcJqcGTcGTcNUcNVbNtbNucNYbNvbNvcObcEEcOccMYcMdcOdbNdcMgcEEcOfcMhcOgcOhcDAcNhcNicOicDAcNkcNlcJPcJQcOjbJCcOkcEYcOlcOmcOncCDaaaaaaaaacOobNwbNwbNwbNwcOscOscOtcOubJEbJEbNxbSSbJEcOzcOzbTicOAcOzaaaaaaaaaaaaaaaaaacjIcxtcxtcxtcvWcOBcxtcxtcvWcOBcxtcxtcjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycOCaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaczakSaczaczalwakSakSakSakSaczakSakSaczcODaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJncOEcLLcOFcOGcOHcOIcMMcOJcOKcOLcOMcONcOOcOPcOQcORcJqcGTcOScOTcOUcOVcOWcOXcOYcOZcPacPbcNTcJqcPccPdcMbcPecEEcPfcMhcPgcPhcDAcNhcNicLfcDAcPicNlcJPcPjcPkbKMcPlcDLcPmcNrcNrcCDaaaaaaaaacPnaaaaaaaaaaaaaaaaaacDQcPocIYcIYcPpcPqcPrcOzaacbTpbTqcPuaaaaaaaaaaaaaaaaaacjIcjIcjIcjIcjIcjIcjIcjIcjIcPvcPvcPvcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaabcLJcLJcLJcLJcLJaaaamjaaaaaaaaaaaacJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcJncJncJncPwbNybNybNycMMcPAcPBcPCcPCcPDcPEcMScPFcPGcPHcPIcPJcPJcPKcPLcPMcPNcPOcPPcPKcPQcPRcPScPTcGTcPUcPVcPWcOfcMhcPXcPYcDAcNhcDAcPZcDAcNkcNlcJPcJQcQabJCcOkcCDcCDcCDcCDcCDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDQcQbcIYcIYcKbcQccQdcOzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPnaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaaaaaaaaaaaaaaaawTaaaaabaaaaabaaaaabaaacQeaaaaabaaaaabaabaabaabamjaaaaaaaaaaaacJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabcQfcQgcQhbNyaabaabcMMcQjcQkcPCcPCcQlcMMcQmcQncQocQpcQqcQrcQscEEcQtcQucQvcGTcQwcEEcQxcQycQzcQpcQpcQAcQBcEEcQCcMhcQDcQEcDAcNhcDAcMjcMkcQFcQGcNmcQHcQIbGVcQJcDLcQKcQLcQLcCDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOocQMcQNcQOcQPcQQcQRcOzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcGIaabcJkcJkcJkcJkcJkaabamjaaaaaaaaaaaacJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabcQfcQScQTbNyaabaaacMMcQVcQkcPCcPCcQWcMMcQXcQYcEEcQZcRacRacRacEEcRbcRccRdcRecRfcEEcRacRacRacQZcEEcRgcQXcEEcOfcMhcRhcRicRjcRkcRlcRmcRncRocIKcRpcJQcRqbJCcOkcEYcRrcRscRtcCDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOzbNqbNqbNqbNqbNqbNqcOzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamjaabcKtcKucKucKucKucRxcRycRxcKycKycKycKycOCaabamjaaaaaaaaaaaacJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 8e450f99c8adae8fb36d4d07927020739ca7b7db Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 21 Jun 2015 02:16:18 -0400 Subject: [PATCH 07/15] tweaks and optimization --- code/game/machinery/doors/airlock.dm | 1 + code/game/machinery/hologram.dm | 6 +++--- code/game/mecha/mecha_control_console.dm | 4 ++-- code/game/objects/effects/aliens.dm | 4 ++-- code/game/objects/effects/effect_system.dm | 12 ++++++------ code/game/objects/effects/sm_crystals.dm | 8 ++++---- code/game/objects/items/devices/aicard.dm | 4 ++-- code/game/objects/items/devices/paicard.dm | 2 +- code/game/objects/items/weapons/gift_wrappaper.dm | 2 +- .../game/objects/structures/crates_lockers/crates.dm | 4 ++-- code/game/objects/structures/displaycase.dm | 2 +- code/game/turfs/simulated/walls_mineral.dm | 1 - code/game/vehicles/spacepods/spacepod.dm | 4 ++-- code/modules/assembly/holder.dm | 6 +++--- code/modules/computer3/computer.dm | 4 ++-- code/modules/events/tgevents/dust.dm | 2 +- code/modules/mining/equipment_locker.dm | 2 +- code/modules/mining/manufacturing.dm | 2 +- code/modules/mob/living/simple_animal/tribbles.dm | 2 +- code/modules/paperwork/photocopier.dm | 6 +++--- .../research/xenoarchaeology/machinery/coolant.dm | 2 +- config/example/game_options.txt | 6 +++--- 22 files changed, 43 insertions(+), 43 deletions(-) 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/hologram.dm b/code/game/machinery/hologram.dm index bb6948eda6b..aabf34c4ed0 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -183,13 +183,13 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(2.0) if (prob(50)) - del(src) + qdel(src) if(3.0) if (prob(5)) - del(src) + qdel(src) return /obj/machinery/hologram/blob_act() 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/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index cac20a32362..f59ba1f004f 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -209,8 +209,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/effect_system.dm b/code/game/objects/effects/effect_system.dm index 72c3c4db24f..5387879e668 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -1102,11 +1102,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 +1115,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 +1129,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 +1138,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." 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/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/paicard.dm b/code/game/objects/items/devices/paicard.dm index 2c2c5d9ea07..7dab5448a88 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -317,4 +317,4 @@ if(pai) pai.ex_act(severity) else - del(src) + qdel(src) 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/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..e9e157b1210 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -101,7 +101,7 @@ getFromPool(/obj/item/weapon/shard, loc) if (occupant) dump() - del(src) + qdel(src) if (2) if (prob(50)) src.health -= 15 diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index 6e5aa0c33a8..20d476238cb 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -53,7 +53,6 @@ icon_state = "uranium0" walltype = "uranium" mineral = "uranium" - explosion_block = 0 /turf/simulated/wall/mineral/uranium/proc/radiate() if(!active) diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm index 39b47929c43..41655e04588 100644 --- a/code/game/vehicles/spacepods/spacepod.dm +++ b/code/game/vehicles/spacepods/spacepod.dm @@ -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/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/computer3/computer.dm b/code/modules/computer3/computer.dm index 157fc1e6d2e..42790c5bf00 100644 --- a/code/modules/computer3/computer.dm +++ b/code/modules/computer3/computer.dm @@ -217,11 +217,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/events/tgevents/dust.dm b/code/modules/events/tgevents/dust.dm index cefa4f250c8..e3eb455e018 100644 --- a/code/modules/events/tgevents/dust.dm +++ b/code/modules/events/tgevents/dust.dm @@ -99,5 +99,5 @@ ex_act(severity) - del(src) + qdel(src) return 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..e676efd3d38 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) diff --git a/code/modules/mob/living/simple_animal/tribbles.dm b/code/modules/mob/living/simple_animal/tribbles.dm index 2b6fab41b8e..3e6043f7e71 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 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/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/config/example/game_options.txt b/config/example/game_options.txt index efa36e7f72e..3f282e5a6ce 100644 --- a/config/example/game_options.txt +++ b/config/example/game_options.txt @@ -66,9 +66,9 @@ REACTIONARY_EXPLOSIONS ## Can be any number between 4 and 128, some examples are provided below. ## Default (3,7,14) -BOMBCAP 14 -## One 'step' up (4,8,16) (recommended if you enable REACTIONARY_EXPLOSIONS above) -#BOMBCAP 16 +#BOMBCAP 14 +## One 'step' up (5,10,20) (recommended if you enable REACTIONARY_EXPLOSIONS above) +BOMBCAP 20 ## LagHell (7,14,28) #BOMBCAP 28 From d20298e996ed89e5ca5950a528434571d2ff4776 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sun, 21 Jun 2015 15:47:57 -0700 Subject: [PATCH 08/15] -tg- atom pooling system, qdel changes This commit first and foremost ports the -tg- atom pooling system, and removes the old experimental system entirely. Secondly, this PR modifies the qdel system to use a -tg- lookalike "destroy hint" system, which means that individual objects can tell qdel what to do with them beyond taking care of things they need to delete. This ties into the atom pooling system via a new hint define, QDEL_HINT_PUTINPOOL, which will place the atom in the pool instead of deleting it as per standard. Emitter beams are now fully pooled. Qdel now has semi-compatibility with all datum types, however it is not the same as -tg-'s "Queue everything!" system. It simply passes it through the GC immediately and adds it to the "hard del" lists. This means that reagents can be qdel'ed, but there is no purpose as of yet, as it is more or less the same as just deleting them, with the added effect of adding logs of them being deleted to the garbage collector. --- code/ATMOSPHERICS/atmospherics.dm | 2 +- code/ATMOSPHERICS/pipes.dm | 14 +- code/LINDA/LINDA_fire.dm | 1 + code/__DEFINES/qdel.dm | 7 + code/__HELPERS/experimental.dm | 121 ------------------ code/_onclick/hud/action.dm | 1 + code/controllers/garbage.dm | 48 ++++--- code/datums/spells/trigger.dm | 2 +- code/game/atoms.dm | 1 + code/game/atoms_movable.dm | 3 +- code/game/gamemodes/blob/blobs/factory.dm | 2 +- code/game/gamemodes/blob/overmind.dm | 1 + code/game/gamemodes/nuclear/nuclearbomb.dm | 2 +- code/game/machinery/camera/camera.dm | 2 +- .../machinery/computer/HolodeckControl.dm | 4 +- code/game/machinery/computer/ai_core.dm | 2 +- code/game/machinery/computer/atmos_alert.dm | 2 +- .../game/machinery/computer/communications.dm | 4 +- code/game/machinery/computer/computer.dm | 2 +- code/game/machinery/computer/power.dm | 2 +- code/game/machinery/computer/prisonshuttle.dm | 2 +- code/game/machinery/cryo.dm | 2 +- code/game/machinery/doors/door.dm | 3 +- code/game/machinery/doors/windowdoor.dm | 2 +- code/game/machinery/doppler_array.dm | 2 +- code/game/machinery/machinery.dm | 2 +- code/game/machinery/navbeacon.dm | 2 +- code/game/machinery/newscaster.dm | 2 +- code/game/machinery/portable_turret.dm | 2 +- code/game/machinery/shieldgen.dm | 6 +- code/game/machinery/syndicatebeacon.dm | 2 +- code/game/machinery/telecomms/logbrowser.dm | 2 +- code/game/machinery/telecomms/telemonitor.dm | 2 +- .../machinery/telecomms/traffic_control.dm | 2 +- code/game/machinery/teleporter.dm | 2 +- code/game/machinery/vending.dm | 2 +- code/game/mecha/mecha.dm | 7 +- code/game/mecha/working/ripley.dm | 5 +- code/game/objects/effects/aliens.dm | 4 +- code/game/objects/effects/bump_teleporter.dm | 2 +- code/game/objects/effects/effect_system.dm | 12 +- code/game/objects/effects/glowshroom.dm | 2 +- code/game/objects/effects/landmarks.dm | 2 +- code/game/objects/effects/spiders.dm | 2 +- code/game/objects/items.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 4 +- code/game/objects/items/devices/PDA/radio.dm | 8 +- code/game/objects/items/devices/flashlight.dm | 18 +-- code/game/objects/items/devices/guitar.dm | 2 +- code/game/objects/items/devices/paicard.dm | 2 +- .../items/devices/radio/electropack.dm | 1 + .../objects/items/devices/radio/intercom.dm | 2 +- code/game/objects/items/devices/scanners.dm | 2 +- code/game/objects/items/devices/violin.dm | 2 +- .../objects/items/mountable_frames/frames.dm | 2 +- code/game/objects/items/stacks/stack.dm | 2 +- .../objects/items/weapons/chrono_eraser.dm | 6 +- code/game/objects/items/weapons/cigs.dm | 2 +- code/game/objects/items/weapons/defib.dm | 3 +- .../objects/items/weapons/flamethrower.dm | 2 +- code/game/objects/items/weapons/shards.dm | 6 +- .../objects/items/weapons/storage/fancy.dm | 2 +- .../game/objects/items/weapons/tanks/tanks.dm | 2 +- .../objects/items/weapons/tanks/watertank.dm | 3 +- code/game/objects/items/weapons/twohanded.dm | 4 +- code/game/objects/objs.dm | 3 +- code/game/objects/structures.dm | 2 +- .../structures/crates_lockers/closets.dm | 2 +- code/game/objects/structures/displaycase.dm | 8 +- code/game/objects/structures/false_walls.dm | 2 +- code/game/objects/structures/grille.dm | 17 ++- code/game/objects/structures/lamarr_cage.dm | 8 +- code/game/objects/structures/lattice.dm | 2 +- code/game/objects/structures/musician.dm | 4 +- .../structures/stool_bed_chair_nest/bed.dm | 3 +- code/game/objects/structures/tables_racks.dm | 6 +- .../structures/transit_tubes/station.dm | 2 +- .../transit_tubes/transit_tube_pod.dm | 4 +- .../objects/structures/windoor_assembly.dm | 2 +- code/game/objects/structures/window.dm | 6 +- code/game/smoothwall.dm | 2 +- code/game/vehicles/spacepods/spacepod.dm | 2 +- code/modules/assembly/infrared.dm | 2 +- code/modules/assembly/shock_kit.dm | 3 +- code/modules/clothing/masks/miscellaneous.dm | 2 +- .../modules/clothing/spacesuits/chronosuit.dm | 6 +- code/modules/jungle/jungle_animals.dm | 1 + code/modules/jungle/jungle_tribe.dm | 1 + code/modules/lighting/lighting_overlay.dm | 2 + code/modules/liquid/splash_simulation.dm | 2 +- code/modules/media/machinery.dm | 2 +- code/modules/mining/mine_turfs.dm | 4 +- code/modules/mob/dead/observer/observer.dm | 2 +- .../carbon/alien/special/alien_embryo.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 2 +- .../mob/living/silicon/ai/freelook/eye.dm | 1 + .../modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/mob/living/simple_animal/bees.dm | 2 +- .../simple_animal/friendly/spiderbot.dm | 2 +- .../simple_animal/hostile/retaliate/drone.dm | 10 +- .../simple_animal/hostile/spaceworms.dm | 2 +- code/modules/mob/mob.dm | 2 +- code/modules/mob/mob_grab.dm | 2 +- code/modules/pooling/atom_pool.dm | 101 +++++++++++++++ code/modules/power/antimatter/control.dm | 2 +- code/modules/power/antimatter/shielding.dm | 3 +- code/modules/power/apc.dm | 2 +- code/modules/power/cable.dm | 2 +- code/modules/power/gravitygenerator.dm | 4 +- code/modules/power/lighting.dm | 2 +- code/modules/power/port_gen.dm | 2 +- code/modules/power/power.dm | 2 +- code/modules/power/singularity/collector.dm | 2 +- .../power/singularity/containment_field.dm | 2 +- code/modules/power/singularity/emitter.dm | 9 +- .../power/singularity/field_generator.dm | 2 +- code/modules/power/singularity/singularity.dm | 2 +- code/modules/power/smes.dm | 2 +- code/modules/power/solar.dm | 8 +- code/modules/power/tracker.dm | 2 +- code/modules/power/turbine.dm | 2 +- code/modules/projectiles/guns/energy/laser.dm | 2 +- .../projectiles/guns/energy/special.dm | 4 +- code/modules/projectiles/guns/energy/stun.dm | 4 +- code/modules/projectiles/guns/magic.dm | 2 +- code/modules/projectiles/projectile/beams.dm | 3 + code/modules/reagents/Chemistry-Holder.dm | 4 +- code/modules/reagents/Chemistry-Reagents.dm | 2 + code/modules/reagents/reagent_containers.dm | 2 +- .../reagents/reagent_containers/borghydro.dm | 2 +- .../reagent_containers/food/drinks/bottle.dm | 2 +- .../food/drinks/drinkingglass.dm | 2 +- .../reagent_containers/food/sandwich.dm | 2 +- .../reagent_containers/food/snacks.dm | 2 +- .../reagent_containers/food/snacks/grown.dm | 4 +- code/modules/research/message_server.dm | 7 +- code/modules/research/server.dm | 2 +- .../artifact/artifact_crystal.dm | 16 +-- .../research/xenoarchaeology/finds/finds.dm | 4 +- .../xenoarchaeology/finds/finds_misc.dm | 2 +- .../tools/ano_device_battery.dm | 2 +- .../tools/suspension_generator.dm | 4 +- .../xenoarchaeology/tools/tools_locater.dm | 2 +- code/modules/supermatter/wall.dm | 4 +- code/modules/telesci/gps.dm | 2 +- code/modules/telesci/telepad.dm | 5 +- code/modules/telesci/telesci_computer.dm | 2 +- code/modules/tram/tram.dm | 2 +- paradise.dme | 2 + 149 files changed, 379 insertions(+), 367 deletions(-) create mode 100644 code/__DEFINES/qdel.dm create mode 100644 code/modules/pooling/atom_pool.dm 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/_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/garbage.dm b/code/controllers/garbage.dm index 7a33bd6725b..c14d8179951 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/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/game/atoms.dm b/code/game/atoms.dm index 3248e2fcabd..0cf042c7185 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 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/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/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..f52492b1399 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -182,7 +182,7 @@ //This could all be done better, but it works for now. /obj/machinery/computer/HolodeckControl/Destroy() emergencyShutdown() - ..() + return ..() /obj/machinery/computer/HolodeckControl/meteorhit(var/obj/O as obj) emergencyShutdown() @@ -442,7 +442,7 @@ /obj/structure/holowindow/Destroy() - ..() + return ..() /obj/item/weapon/holo damtype = STAMINA 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..ae85a93d76b 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -129,7 +129,7 @@ C.loc = src.loc if (src.stat & BROKEN) user << "\blue The broken glass falls out." - getFromPool(/obj/item/weapon/shard, loc) + PoolOrNew(/obj/item/weapon/shard, loc) A.state = 3 A.icon_state = "3" else 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/doors/door.dm b/code/game/machinery/doors/door.dm index c9422a930b2..76784c4ebff 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 diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 1430e8f00dc..beaf044b177 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() diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 840ed1133c2..d3bd4f56b47 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -14,7 +14,7 @@ var/list/doppler_arrays = list() /obj/machinery/doppler_array/Destroy() doppler_arrays -= src - ..() + return ..() /obj/machinery/doppler_array/process() return PROCESS_KILL 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..0317cd2d76c 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 @@ -154,7 +154,7 @@ /obj/machinery/shieldgen/Destroy() for(var/obj/machinery/shield/shield_tile in deployed_shields) qdel(shield_tile) - ..() + return ..() /obj/machinery/shieldgen/proc/shields_up() @@ -523,7 +523,7 @@ src.cleanup(2) src.cleanup(4) src.cleanup(8) - ..() + return ..() /obj/machinery/shieldwallgen/bullet_act(var/obj/item/projectile/Proj) storedpower -= Proj.damage 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/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/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/mecha.dm b/code/game/mecha/mecha.dm index a4832793c7e..265c352cb3d 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)) @@ -658,7 +657,7 @@ E.forceMove(T) E.destroy() spawn(0) - del(src) + qdel(src) return /obj/mecha/ex_act(severity) 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..536f6bb8b2f 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 @@ -182,7 +182,7 @@ loc = null for (var/obj/structure/alien/weeds/W in range(1,T)) W.updateWeedOverlays() - ..() + return ..() /obj/structure/alien/weeds/proc/Life() set background = BACKGROUND_ENABLED 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..08640fe9737 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) @@ -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/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/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..d655e2c32ec 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1300,7 +1300,7 @@ var/global/list/obj/item/device/pda/PDAs = list() explosion(T, -1, -1, 2, 3) JFLOG("Exploded") - del(src) + qdel(src) return /obj/item/device/pda/Destroy() @@ -1310,7 +1310,7 @@ var/global/list/obj/item/device/pda/PDAs = list() src.id.loc = get_turf(src.loc) if(src.pai) src.pai.loc = get_turf(src.loc) - ..() + return ..() /obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. if (istype(AM, /mob/living/carbon)) 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/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..d34aa54a96a 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)) 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/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/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 9d1907df0e8..a06e14f6358 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 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..3bfb64cf128 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -26,7 +26,7 @@ /obj/structure/Destroy() if(hascall(src, "unbuckle")) src:unbuckle() - ..() + return ..() /obj/structure/mech_melee_attack(obj/mecha/M) if(M.damtype == "brute") diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index ce4729c3a03..e79d61eb2f4 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) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index f89ed09d6bb..01d5632bd44 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -98,7 +98,7 @@ /obj/structure/displaycase/ex_act(severity) switch(severity) if (1) - getFromPool(/obj/item/weapon/shard, loc) + PoolOrNew(/obj/item/weapon/shard, loc) if (occupant) dump() del(src) @@ -121,13 +121,13 @@ /obj/structure/displaycase/blob_act() if (prob(75)) - getFromPool(/obj/item/weapon/shard, loc) + PoolOrNew(/obj/item/weapon/shard, loc) if(occupant) dump() del(src) /obj/structure/displaycase/meteorhit(obj/O as obj) - getFromPool(/obj/item/weapon/shard, loc) + PoolOrNew(/obj/item/weapon/shard, loc) if(occupant) dump() del(src) @@ -137,7 +137,7 @@ if (!( src.destroyed )) src.density = 0 src.destroyed = 1 - getFromPool(/obj/item/weapon/shard, loc) + PoolOrNew(/obj/item/weapon/shard, loc) playsound(get_turf(src), "shatter", 70, 1) update_icon() else 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..0e8a3ab7dd2 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -37,17 +37,16 @@ icon='icons/fence-ns.dmi' /obj/structure/grille/Destroy() - loc = null //garbage collect - + return QDEL_HINT_PUTINPOOL //pool grilles /obj/structure/grille/ex_act(severity) - returnToPool(src) + qdel(src) /obj/structure/grille/blob_act() - returnToPool(src) + qdel(src) /obj/structure/grille/meteorhit(var/obj/M) - returnToPool(src) + qdel(src) /obj/structure/grille/Bumped(atom/user) @@ -144,7 +143,7 @@ if(!shock(user, 100)) playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) new /obj/item/stack/rods(loc, 2) - returnToPool(src) + qdel(src) else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored)) if(!shock(user, 90)) playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) @@ -224,12 +223,12 @@ icon_state = "brokengrille" density = 0 destroyed = 1 - new /obj/item/stack/rods(loc) + PoolOrNew(/obj/item/stack/rods,loc) else if(health <= -6) - new /obj/item/stack/rods(loc) - returnToPool(src) + PoolOrNew(/obj/item/stack/rods,loc) + qdel(src) return return diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index 229fe4e9055..daea6072db8 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,13 +35,13 @@ /obj/structure/lamarr/blob_act() if (prob(75)) - getFromPool(/obj/item/weapon/shard, loc) + PoolOrNew(/obj/item/weapon/shard, loc) Break() qdel(src) /obj/structure/lamarr/meteorhit(obj/O as obj) - getFromPool(/obj/item/weapon/shard, loc) + PoolOrNew(/obj/item/weapon/shard, loc) Break() qdel(src) @@ -51,7 +51,7 @@ if (!( src.destroyed )) src.density = 0 src.destroyed = 1 - getFromPool(/obj/item/weapon/shard, loc) + PoolOrNew(/obj/item/weapon/shard, loc) playsound(src, "shatter", 70, 1) Break() else 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/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..68c29aab45a 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) 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..f9c3e075530 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 7) //Disassemble deconstructed window into parts playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) for(var/i=0;i 0) 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/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/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 1) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 8c93a7c223f..a17cbdf566b 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)) @@ -167,13 +167,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..467b41c894b 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -175,7 +175,7 @@ field_generator power level display /obj/machinery/field_generator/Destroy() src.cleanup() - ..() + return ..() 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/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/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-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/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/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..72f50c3bfb0 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 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/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/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..01b5066864c 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 diff --git a/paradise.dme b/paradise.dme index 2e62227ebec..36cdcf096ae 100644 --- a/paradise.dme +++ b/paradise.dme @@ -30,6 +30,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" @@ -1491,6 +1492,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" From fee0a6e1489dd29b685fc149632d8aff8981d7b3 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Mon, 22 Jun 2015 01:11:26 +0200 Subject: [PATCH 09/15] oh god I hope this fixes spess --- code/game/turfs/space/space.dm | 2 ++ code/game/turfs/turf.dm | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 87ab3a48ae0..0fd7432660d 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -19,6 +19,8 @@ update_starlight() //MC will initialize all the space turfs that get created before config /turf/space/proc/update_starlight() + . = ..() + if(!config) return if(!config.starlight) return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 0392140834c..7adcbf2560c 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -38,7 +38,8 @@ src.Entered(AM) return - if(!dynamic_lighting) + var/area/A = loc + if(!dynamic_lighting || !A.lighting_use_dynamic) luminosity = 1 // Adds the adjacent turfs to the current atmos processing @@ -431,4 +432,4 @@ if(O.invisibility == 101) O.singularity_act() ChangeTurf(/turf/space) - return(2) \ No newline at end of file + return(2) From 0918ded8be82d50d4b9b4a11eaa819adfa52895b Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sun, 21 Jun 2015 17:06:33 -0700 Subject: [PATCH 10/15] Remove debugging "world <<" from qdel. --- code/controllers/garbage.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/garbage.dm b/code/controllers/garbage.dm index c14d8179951..b9f2a2eea75 100644 --- a/code/controllers/garbage.dm +++ b/code/controllers/garbage.dm @@ -125,7 +125,7 @@ var/datum/garbage_collector/garbageCollector 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]!" + // world << "WARNING GC DID NOT GET A RETURN VALUE FOR [D], [D.type]!" garbageCollector.addTrash(D) /datum/controller From 7c9139d6e008457234e85df8402160d6d2cd4285 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sat, 20 Jun 2015 07:31:08 -0700 Subject: [PATCH 11/15] Bay/-tg- Meteor port Meteors now have different types, properly integrated. Meteoract has been removed, meteors now just call ex_act. --- code/game/atoms.dm | 2 - code/game/gamemodes/events/clang.dm | 2 +- code/game/gamemodes/events/dust.dm | 2 +- code/game/gamemodes/meteor/meteor.dm | 2 +- code/game/gamemodes/meteor/meteors.dm | 345 ++++++++++++------ code/game/machinery/atmoalter/canister.dm | 5 - .../machinery/computer/HolodeckControl.dm | 5 - code/game/machinery/computer/computer.dm | 12 - code/game/machinery/deployable.dm | 14 +- code/game/machinery/doors/door.dm | 5 - code/game/machinery/hologram.dm | 4 - code/game/machinery/shieldgen.dm | 19 - code/game/machinery/turrets.dm | 4 - code/game/mecha/mecha.dm | 3 - code/game/objects/structures.dm | 4 - .../structures/crates_lockers/closets.dm | 7 - .../crates_lockers/closets/statue.dm | 23 +- code/game/objects/structures/displaycase.dm | 7 - code/game/objects/structures/grille.dm | 4 - code/game/objects/structures/inflatable.dm | 5 - code/game/objects/structures/lamarr_cage.dm | 7 - code/game/objects/structures/safe.dm | 4 - code/game/objects/structures/tables_racks.dm | 4 - code/game/objects/structures/window.dm | 3 - code/game/turfs/simulated/walls.dm | 9 - code/modules/computer3/computer.dm | 8 - code/modules/events/event_container.dm | 2 +- code/modules/events/event_dynamic.dm | 1 - code/modules/events/meteors.dm | 63 ++-- code/modules/events/sayuevents/meaty_ores.dm | 2 +- code/modules/events/tgevents/dust.dm | 2 +- code/modules/events/tgevents/immovable_rod.dm | 2 +- code/modules/mining/manufacturing.dm | 4 - .../living/carbon/alien/humanoid/humanoid.dm | 12 - .../mob/living/carbon/alien/larva/larva.dm | 11 - code/modules/mob/living/carbon/human/human.dm | 16 - .../mob/living/carbon/metroid/metroid.dm | 11 - code/modules/mob/living/silicon/ai/ai.dm | 11 - code/modules/mob/living/silicon/pai/pai.dm | 10 - .../modules/mob/living/silicon/robot/robot.dm | 12 - .../mob/living/simple_animal/tribbles.dm | 6 - code/modules/power/apc.dm | 5 - .../power/singularity/containment_field.dm | 2 - code/modules/power/singularity/emitter.dm | 2 - .../power/singularity/field_generator.dm | 2 - .../particle_accelerator.dm | 11 - .../modules/projectiles/projectile/special.dm | 2 +- code/modules/reagents/Chemistry-Machinery.dm | 8 - code/modules/research/server.dm | 5 - code/modules/shieldgen/energy_field.dm | 5 - code/modules/tram/tram.dm | 3 - code/modules/vehicle/vehicle.dm | 4 - icons/obj/meteor.dmi | Bin 7354 -> 4767 bytes 53 files changed, 273 insertions(+), 450 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 3248e2fcabd..110d998be2b 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -88,8 +88,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/gamemodes/events/clang.dm b/code/game/gamemodes/events/clang.dm index 6ba085f98e5..95a4e8a84df 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(3) else del(src) diff --git a/code/game/gamemodes/events/dust.dm b/code/game/gamemodes/events/dust.dm index ff424a51134..453d584469f 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(3)//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/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..5ae702e6494 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, 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/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/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 79af00f560d..b3aec7c17de 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -184,11 +184,6 @@ emergencyShutdown() ..() -/obj/machinery/computer/HolodeckControl/meteorhit(var/obj/O as obj) - emergencyShutdown() - ..() - - /obj/machinery/computer/HolodeckControl/emp_act(severity) emergencyShutdown() ..() diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index c1ec8fb3ddf..c355844a168 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() ..() 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/door.dm b/code/game/machinery/doors/door.dm index c9422a930b2..6499703c388 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -124,11 +124,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/hologram.dm b/code/game/machinery/hologram.dm index aabf34c4ed0..e65f470a0d6 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -196,10 +196,6 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ 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/shieldgen.dm b/code/game/machinery/shieldgen.dm index 356d6c25678..7bf89bd540d 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -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 ..() @@ -190,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) 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/mecha/mecha.dm b/code/game/mecha/mecha.dm index 8e394f38d50..228d5d82c4e 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -710,9 +710,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/objects/structures.dm b/code/game/objects/structures.dm index 69dab06ced4..3fa86ce045e 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -19,10 +19,6 @@ if(3.0) return -/obj/structure/meteorhit(obj/O as obj) - del(src) - - /obj/structure/Destroy() if(hascall(src, "unbuckle")) src:unbuckle() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index ce4729c3a03..f9f44d7cee0 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -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/displaycase.dm b/code/game/objects/structures/displaycase.dm index e9e157b1210..9801a29f500 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -125,13 +125,6 @@ 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 )) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 9e66774f900..8b5d1a40e00 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -46,10 +46,6 @@ /obj/structure/grille/blob_act() returnToPool(src) -/obj/structure/grille/meteorhit(var/obj/M) - returnToPool(src) - - /obj/structure/grille/Bumped(atom/user) if(ismob(user)) shock(user, 70) 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..d44d9bec6a6 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -39,13 +39,6 @@ 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 )) 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/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 520f951bca3..fae4d5e98f9 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -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/window.dm b/code/game/objects/structures/window.dm index 2b4e1b424af..f27e77d932f 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -76,9 +76,6 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f /obj/structure/window/blob_act() destroy() -/obj/structure/window/meteorhit() - destroy() - /obj/structure/window/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) destroy() diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index c0d85564de8..1ffea6a4d93 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -241,15 +241,6 @@ // F.sd_LumReset() //TODO: ~Carn return -/turf/simulated/wall/meteorhit(obj/M as obj) - if (prob(15) && !rotting) - dismantle_wall() - else if(prob(70) && !rotting) - ChangeTurf(/turf/simulated/floor/plating) - else - ReplaceWithLattice() - return 0 - //Interactions /turf/simulated/wall/attack_animal(var/mob/living/simple_animal/M) diff --git a/code/modules/computer3/computer.dm b/code/modules/computer3/computer.dm index 42790c5bf00..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() ..() 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/dust.dm b/code/modules/events/tgevents/dust.dm index e3eb455e018..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 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/mining/manufacturing.dm b/code/modules/mining/manufacturing.dm index e676efd3d38..d74386828df 100644 --- a/code/modules/mining/manufacturing.dm +++ b/code/modules/mining/manufacturing.dm @@ -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/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 6c01076a72f..b8a4cd05a7e 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -125,18 +125,6 @@ adjustFireLoss(damage) return -/mob/living/carbon/alien/humanoid/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) - 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/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..c8b3444aec9 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -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/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index ae26734975f..76a265a7c95 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -203,16 +203,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]") diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index e1b218474ac..a92f775868e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -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() diff --git a/code/modules/mob/living/simple_animal/tribbles.dm b/code/modules/mob/living/simple_animal/tribbles.dm index 3e6043f7e71..fa8051f43a2 100644 --- a/code/modules/mob/living/simple_animal/tribbles.dm +++ b/code/modules/mob/living/simple_animal/tribbles.dm @@ -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/power/apc.dm b/code/modules/power/apc.dm index 95d47aeb451..cd58e3363d5 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) diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index c208c805bfa..491160783f2 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -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..50a88d158fe 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -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)) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 01150e5c416..e71c28ce7f0 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") 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/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index b3af964657c..78128af4d8a 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -76,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(3) playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) for(var/mob/M in range(10, src)) 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/research/server.dm b/code/modules/research/server.dm index b8ef753c4ac..601899d1172 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -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/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/tram/tram.dm b/code/modules/tram/tram.dm index 0ae4ef41e93..c0f79c757fc 100644 --- a/code/modules/tram/tram.dm +++ b/code/modules/tram/tram.dm @@ -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/icons/obj/meteor.dmi b/icons/obj/meteor.dmi index 0dc50a27967220e24e45ed3e7e934945356bd8fd..f928a56a58478bd9317560ea879d3baf8da2e359 100644 GIT binary patch literal 4767 zcmWkyWk8cn93M^?OhSQ|?vfawbdGLGkr*KjQ(8KtL2`gfDJ9YfGNfaKNJ>hVv@jZp zk?-S&=kED*cmMdsU96st8VQsR3Ic&hG}M(1fY}Q8v3cgS2TC39*UNT$8 z*YCMPL|UW79b*R)=&EAaOZc0}^;Xx3dENi!@32Qf3x23_X_n%x+fe=TyCdq5<+op@ z`A*h&BEu=Jrb;R|ZI^k|(x6P;DBx(7+NGMFIBT&JV*K$bKFr#33Iux4r=hH1==X8= z<8x>FsrNrZx~xlBdB%jPc;3dbXW}+T)D5^vM}COTR_I&d$sxz#-nlIupS16Iu}a7j zo4uIm7uyz@u>u?V&#;ljQ*mc$pRA>KOSy`>=f21nKu{rJn&^srjegSRIG zagL9)-zu|(rKb65goJ4wmfL+MPP1>!^-Tbo(XWK1U;{Q++vVn(MG|@az33-w zDZgu{Ea$8uEwqxA-q@R}r><>V728|wnk>81v~x1bPkFak3PxLdIk%j}EY*2;D~@@u z^huPJeJbMx(ei*DEPM<~DdRrnA?fr&c318hXBrfLC2xOjXps7u#CB&IL`tjo@H_T| zobc{JK$kmU#LC%18S685ad+l@>c%hc`*ijOyV@AE+b-(L^h_x&1q37+OpX!FHNaVet%rEz5aB$@b0~;rh3cc z6R2E@Ae#nxS=mtsgxR^Fn9*Nef`N;M*gznCzlpeAb<4w`#aS$#JB~Z9b9=i?YtZ$v zjEu9is?Nn*yOQFJr0V}vJV-pAFe(?qU4=5eA`TA!vQRhPeaTTm>q8kC(ZN#ZGCn>I zme3m&InPNYp8LiU^U2!ZaYTB}?um@LgveOW|CWonWbhZUw{@LDsah6%HT$2FVUIU*8!NWUP za6wGD!!g5~w*LP9#;SUhQO09E4K$d}!9ij)3~Z&n1pun4^0@3T6eF3#m7*^4{qDHP z{?)GARWmI@s6F7wWv&e?^p)u~CRd*2w}Zlvt^`AoL21KxrEJ27w9`bXh;Xe#KD!b} z(KLH&?X5o^1KI0a>{3}pji13Jcv4KL<~6rEXtbD2J1fSZ)HxYXrIflLtFPTvA4c_< zID%f>HM!5ud@LJSJrp(o6BJxM#?9}4sjO`3lb5DgZarJ1FfgLqYR^W87a{E^7qmqg z8#M|IDv80abi5j=FC{{6B@g4Zd)#I~(bmZW>j$_XnbT=o1{uHPAozYj`_Ylm@$oT` z3nOFWK8KnwmH|%_5)+B^9*!$;z4a*kv3Z;_ym@$e4Zu&F$Nj5i9YSSRQ&?Dd{C?2X z25zW~dhhf1G<((op{7a-RFB1xE~4s4Siq-<@oATi52c6-jWHpROGZ6Tdd&6UO!lQbK{_E9>w4flfc}M4Vs076A<&YHscAIe2^5{$m4a#A_3j zgC(JFudfiR+NJMy)Jv>b&jfo=g?V`T_FH$Cj>8781QA}Op*U4ZS^wiL!pEXXhV}oI zmAUdN@u#z)XJD-`SZKB0aIBfJ2wa9R2eAP89Ye zE+QrMLajibfPkQP^LWj(kz}749^}^}tsjDN8UTM9kebtO}*lYLQs+@B`<`}%CDK3nX25PXS677PXp;2O>MD!)exI}T01 zT-7OGk_e1cz%99+NfK{ zIw)xV^$l(lw?d8Sjk-sT;L@j5DJm`=_0GoOa3rE1niFGVi2`kGYz8h}G{PBneH}s? z&AI3jA4y9O2=_V8yGZ4&2Io@?n12OSp~EU!F<-tG;eu;sLiH@bclY)-E>5tFt>O^U zzADU3K*VO%ZS$6Fov>c;>E@f$)BA*448b_U_<%GgH!?8zdUxT3>iqAxE`AC2EMBm! zH%B%wBQw+b^=l@5O0%{hz;Ec48jg5pXJ*n4WlQ@S+q7e=FaqBceT3bnC&8*}YP(@! zc%UO3L*tw&!Mp4E-p>jM>uSGy&Aj&ycfeBY)oLiFTD-CeUJDD0!NI|=zWa;O{OX~{ zo5OPp3k!ZSOqzw{buKk%bf+)o(jq-!baXT+87?V_1jAr3XX%>kVNwzj7wiN6KzWw? zEcF@excR3hJ}G~~?%(UiDw9PX+%3!CQz0%-uzqLOYNrL9bTcO~=|!#P^XJTNttV-q zgVQ;;IbFGHkyz#M#YM}2z(68`h`%Q%kA;NB4y~}sGgDLb>ziC$Tsu)wQ6y__(P_k1 zGz6u;n2DmVSY~C$NG|&M*FrSk3cFc-de!`~3#~#LkI}os21!kezT?lG#V)IOtY^bJ3ISnZ?C$V7Qd2`Qs>A> z@*^Np>6#!}M9QaHCmurS#IGspWE-9-i#JU0;Sx##wKteUN#WbJ+)z1nl9W(iGR$pH zI&ZB#*}cHqi2b0=B_B?_p#)#|m za2de;!CogvX2wGjfDxb?4vvm}o5wH#0U=r0#HIaWbAhMj6Zh|i?T6f6Hq!+*Q=T2Sv|+K-U*fOY{iXnYDN-R?PG3o!u>y} zK~`91>CtJs?i+)&fwwo;fDpTP1+K2Ho(d1kM8F1=3-n2uWYk6IIN$c^l~0ry^3p_i z^!Gy{qzo)6>Q<&y&vE_65&?g?V@Mfiz1>|W*u~zKSU4(7TUCWWCm!XDEO{S%g_~u7 z=c4wiex^uXvcXwF+FM=E-|cusMMZ#^+gMwNnZPF9fBO6j+ASSVTSsU1-o1M+ z7WFFNX&R$g^(U-!C@UJyi%SA-L4?U`Ss%enP5>f8QECrfJ@j zWoLUExDvQ7G_8v*RI23b zX`bll=*TZER!&YOh4?cF=a-?VwhQ#;JSWTO)M>au!fmW90uP1^;uKAL~i&vaS~pFOo@$%xKVjihRXh#^6l}@ zlfTxCaC)s$cg>$4^Rvl5=+A1%0ccyh7wU~UUMxx`#Az5bVG(>U_~5x1E>6}^n+*_Y6aq0LR3Yk zW}+20;WIM(1v@LN&>3uv9z}y$v&|4}i5Q5i6X5k70Cx?ks|>t=Jz{jr&CSSgw~eq( z_^J8e=hrU~^UK+E(Z>yOB`}Jhrtn)V#&Khw!i#8OdH|l_nHh8=1_nb)hR-iDn)$VE zuQuiCL(ZC)Ccr_y;RzB+s@#-p=>yehv?9xW`Kgm6sx>k8X;c2H zkk-tY+Ha(OH!}*q3bA%@1Sdg777GqMttuM{psIgeS~PFr^bZP!nj3YZ)JUDKcVh-T zG~&yo`+=K_SdC>I!1oXTU32&L_tnzuJsTO~&?(XKX*XFrhZF~N#ga)Nu z2p_gybJ%G7%KcFy;BRWqZDWkT^CEZ>5}|M>Og^~VnWlO6KMIwU2nZQDGz#F0s3`pY zb#$Nz641g$Oo$u+B~LQ_svg|&X4D69x70p6x;uY$Mk-FnUl0XIJ7e*lpRYYVoUIl# zmTMO4vIV2a$>2jLQMAyy*rSp+`a&LdJu~R}-J*n72di4oFUT{WM4Q#S<|7di`sEY6 zfLSI{@V2u9Y;vafQqa@Tq1u6O^iKIFp=~a77m3d;Drd^?aDEBbH_2~l&}`7kH+s-# zPZg_*g`gS7vO5=Ct>(mXLvAE%#QmGcXDxz%1~Y|Et8IIL zWZ-cA=$Q&EkuSwhgMr%pj>*Ll2ivqzfPue#R247iOZ{M`OvQc5CT3vJ`xB-I`$;emyNLA z8{Up=M=a%}4y*%oeiAjkvlIMMOU8Haqe~W7Eg})n<2;O6Wy;Gav{kAV}|#A_SxalqyB4G!alhAoPxk z7!eT>5RfXpg(Cm`yDxX{%ze0bW@qOqXR^O7|8q+U3G_N!Bs(mUm*o$TV*?~T+`xBRkSi~GC~MZ0HQVQX~N#rE9Ohd0Sa zZ!6g9d8fPzL|rDuM<-?pjHYZ(JWUd)6?CwZ3P7V0k_n;tA2`cq&!GH|gO~os3?KAy zAJJEg?$cEecOk7mT3bZa?M?{dp43)XH4S|6*Us)CeDJ)Yej~SQ0V92%qoh=JQD=eAQ05O}yVyxOI1pX;dumZ}*h zwT{1|K^{Qt74 zP54rhA(I_zmwa37)ZwgPSBUs$`@>Yxwq3%G*=@>Cr6T$}KP3GPG3^w0>Gi67gnhZ` z`ddP8Fe08zpJ-HW+P7}?R_V&Q&r_VGZfZnSW+~3Uh2X34%ehJGNQBC!*3#G4POHR3 zRXQi8)a^uuh{}S($76oL*>DA8_XTndx+NKwnm?V1-_9s0!_;2iCMn40GU*Z3MbcoB z_n*2;ha|*>&(6$Xp7PiSK#Dc4-t5j_-6z~Rp6gIjQ&T79Uo!NQ)IWzuQ#^5iAgU-B z#E(bw^ClNfc^;czsGY`zPEJlrGLUDNc1kkLKayLIXw-P| zQEVYXQs3u!O)hQYdHCAjzb}c){2U1|PSIkEORDok6l1kHeU={8*!}ahmTRBT-~ajx z3`;dMG)VF=!Dh_0B#2v;D#q-H_^$cu`sd;c3#L2;v-AqV`S57u*x410&RR=`q&fav z19IrgGKwpa3Mv?1g<;FS8NO8`h4MDP-qDCEATD=!^ElO8fdw^I&s7u{8!+k#t?dQt zsfi_vOAMXI>xtA72#k=C+4<9OKB#FeH}_IaLM!EPUEhEV57We+P8sp1^f2Z!85=7o zV&NzPIjn}_(kM42+e{BdX#}~kst@ZVJw$TMsq$Mp>JwR#`(agDYWTy2M;Ggmf?SF4 zoR4s>#4bq&*`#ivpOce!)edpt?aWr`@24uqDry#tZ@PPUB;rRJJc>;&w~ctfF1Q`X z&?5XbksMLZR*)uZCUSVdN$UI5l!h#i{mLxIWs7k?C#j2I$tIC^OBz+1J8)7llQqZ1 zW$8W9ZekjE{|&{Ms7YR8g1h+(rT^CYY93?UQ*6MujL-MqeRh|IK@A>7_BG^?eOo9k zrlX7-;4b>782S*eaV_PfME&JzYMFlu@gHnvzR&Hb^viz8)Ve02|;I*1}KH`iNKh>f;wI=MWqt=?438{_5g-^U1h z`V)FY2?5B~++cB^)T}m-Ds_9~!3|JkUvn$n`9*Fn3}R*&uKUhM+4?TBKD1ID{unJp zhGBmeBoVf-r<<6Ngw657AuWM>vR*3N`21lQshM88H z@zMh1T)1!nK&ZhZgg0@p?x}V46O(cZt8~zql|6Y-8f)CDpGS z+@FZfb?AwN5vDiQTeM|j_?l}3%B z8*~F)R{)6y51&h})>K$q@mS5G$6m5e!SZkUIB(O)JLMSwrwt+SqV(r37MO~G-vfZ% zNiPIwfa7V7vp^Te$sXhJ1?{BA_BFAUl~=&g8K}s4o#un9>Nwk2U@cSY-=!!z_1o^% z)0&wH4A+Uy7maE$bI`?LCZ*M0vY47_AlQG8s4q5-y3UYx7TN6VzdEqd`n>0HtmSl{ zyqBQfwkQ?;8SWR?>)5*cWpyv`s!4Q)GoACzj>(HLksm^pM#5{Ht@KWuCqo3tQX^DX z72a7Vjz_3(3$xLx7mYd(k)p3*3HuAIUYKuBg~PwU0uhbG^dC z812T5tIbDO_dKf~n^&6MK^7dkTUc1w<~ds_?6n8)4edp%G2=YQGEZLo&n!} zNlDF_pR3JNa3{hhLqsF8^AhhVZ%tT)eTy;dZn|}>P0h4^G*3U~c23k&4O1I9kXL~i}eZQ9V9{-%_|g}GjEd-MSB3nwF^`i_V!E{3=@ zR671Ywt^(TWYyzN&!1(dvlxj$efQr+9WvUSVsEflI<6XW;M7CMpLl2JyOrm#KY{DX zUukl+snSrn|I{p+*5b0(VJ0y63kb75iaK;WRvSbUlV?-!$HyOC!&$V zCs}v6g47|*Zq>6a4yM@tZL^cFm-Whsw_{$u;t!DF_Iz#SZi*)lhwX@iYsrazR#f3mkZi# zGO%?W&LKu33U5$00cDmB(mI%m!r?e=Sp9-=x;1t2$xL{AvL&)lZ~DiNNVjajm68nI zK5k4V+)$s-?e1AgsVoMDZcLcM=+(_CGEO{y{)msb)D2%*p1$>U@oBBWIs0__pB#g` zHk?Cd)D8BFi;Gop_p?P3&Vebxfm=B^MzY+H;Lq0X0P^LtaCqLJ6X5E_rTybD&p>0s zxy@36f!{_3_hosW0H*epM`R2mpEVH(iRP8P2P6UZ<%aNLBNcLWv;UaEaL7N+(D<26 zml0}4g!Wd@-bq>{v)W4|%wq(E{CU~&Tb1NrXAo6l4Ak8Va)J=f~eWky_V{LtXd&Kt)_2Dhn^p#~GX!f<0 zU_w$bfyr*%>XjtG2<@Lh7+c&|6l1#cHCp-@vPx5ZxWG*Hd7;Lr(rHt%-lI?y`P$l= zirLsZ=h>h9Tly=3%|MFPjB}^`{p;V7ciC4z`xH$Tv!d2Bvhe5)GC`vd;o)npBA+oj+{%y`y?m^lD@n|$mS3Y+i#ebP2fz7JXvvHV0 zR98st1=Bbs$r^MD6kAWe8B7vTsP<_WN2sXHMpG<+?dPz;{5@!0q;s6hE%k|B;o+Zp_;WE5cM43zo?CKdB8>?4{Sy-x0nLNa z56%LfEIJ`UVDI<-yt)UbDHW)VC^MA(QN+4BU3A#U(^v?D8cXXnHaicb+o-VGy^roC@`66_4q_d7m5h9pJ45(tF9<&-bf)mTZPc?-Cakr9%T z_mr<$+-f+Oo)hlr8U-|-H&9%h36A#cAD9i91;wSl-M_kPRW|e9K~)VYRKk}@>scuhhHipq}(*pfm4zpikb>PLQmk-CkASs z8-{!Dnw0mfUyu}EY@zw%*?T@gqudfH4}>xv9Zi4k{58=|31# z$=y+oT)u+sS4=Fx={4h zL>Wi!{<$ri+gG07%EysAWJy~dNp`h7>eF-Qj|^Ek=%yof(zC6ytCDwBhHYvW5CV+L zm^(O0tvnRIt-3#t{nCs>V+V?5Tt0OXl$a587GE|3j721~X?y&n@B6mj$<^tR(f4uB z!VN5zER^jh_RlFa9i9IBZZ8S72JKLFxQ+x&Y)73NeJ~?Fh5tP+TBGqLLG-1@Hp!dK zB~@9!EKj8K;DD04DWvs^*gN}A@-W!O}tW zW-%Uo;9cA%7(C54<*U_`=V@`zdO&z1&zpQKf7ILK z3RO|5XwN>QxGFMpxW%!jJzvD|77(_R6s{99qpO5^Zg@%D+BTp`a8;qY_B_phV){O({0hGGTeH(|fxXeLrw$s8DdZ+B_lV@siVP*`rpDD&Mr4 z>5cA&zt;$D=9M=}jhBRfZ^;HUW%?TWc~`=Bk5Atb?~39g$uKa;8{&N8ty}d7zr7fL z4kyI|lp$|&a^jnuoSa$(n791CBOU)X>>>ALE(7CJ`8e@M^sT0^velJX9d%yueMWhF z_yHB|do4b=U6%0MXt;q~@jCv6@0(?KSBtRPfG}(IZfl*(5f)xV9o3mBO#^XUE_8Ap zWgfa$kNidW(A}ci9QE}(Q20QX&&B%B0&WbRU$D`jwM&}nO zO-xNKxT9*7vP-?gfbz}}rK4*#i$j+Y-Mw)y3T3|_nLaS8_1Kzb?=QjCJ}*6ZXZ;z) zxa^y);rqu7!_{LftG%Mi?o@0{^YpD1b}tGhLqcqr@sI#*IP3h}6ognTAa#vMpx4uB z1z7cUrfkpesH@^!)z#wrG%_%(F|TnH?292p6tJMc;?+&8^(-@UmYd==;}QICnOJ)y z@4Wc4LsE!PzJYb%tg=}uxlceVX&7%VjS7BynN>>JbYESTzK{kX$wdR-(r$QdQtp+~ z!1MqJmuorIpSyHKqZ;%g=YW5}92ezm>hJj)Av5Rvp zJTHR7)XX%%-&r%3n9!y>*9sS0$rw%?yJVRk-Rn3i;N~>r0jZEnr4355YWPWIOIajF zy5J(gg#HFIVUMZ4X60IYdP6_wa+=I@?0Qwm_Kr>o8#ohJVqYevun?iA)*OqjjX#g% zNJu^8uc%16?0^#-LFu#8Q9_$~uX55aEltp%>a@=?f5cG1NH15#dN|tCH8}>gMnqoI zun5o;8&Fj>8Y%0tKN~7_F%U@$WqvPeDte$s;J!_Z5Oaia)=T#UHj8p3TvK)B5`V6< zrd2hU0FlJ}z7Ij?qtG~`vqPs~h6E&Q!2lyoH+L`fZU>SN8X|Nz+7!$$iVHkXm8w$rnP2dh1}` zYXEcTF^MiQ(W3~yL*H4X5%>pschgORjpVxU7z|;7;q9*a4mG;+d9=y=f`6Mv{|j;W zB{QeqQ?zy{jW;1#C4IlLri~2ZEf0S=zB;?ILI(zZR42A9sIJvM#gL(+r=aUp8g7-| zzaR79UG}0*buV6J`8!hOCNF$eo3VY$v&f`;lk$US!uwd(pU0i+F;NMK_JFCSFZXwJfoSB}1P}@uz%+w2l)Iom!2e>8+X8U+hCMs-zn2tY&66De78U zB>F99ocC|B%i}#sr_6~3Hb^u}Z+rD3bVh@IVC5+HJ4*%QB+#maSe1spl1#q|9fmO( zRrNQAweNaY6>3ql5+cz|GakE3CFl9+(QOXA+KHm(?rVexMN+8yjnY zVDH-6+Ugn!4Gdg5S+QtW6JmQ@QE|9>=WONVXuSR3x3?2;%RstP^@}FuChX3I{vTSR z)6&i@&d)pjmFMN-yQzFMn!HKO|Hm$2-)eby>}1sk^c}c&;^N}6F2Wr)$fG{r{xF&? zJ2L#*T(UB6z4-dHMQ6eVi5Hg0Ct%&HAMF2kK^1uQb3cIBy%W0C+dM|Cufmr7$kNcJV5nXy6Qh2Xc~)(A9Bt#A%Iy z{K7vVfYb(bZ@gupwa84a5*>cIGm859#!WdnZ*d8UhxmtPAfY;E3{BXrRSjYmKFAbn5gi zMw^;(tDK&zLx_0m*Sc*Qkx#VKKkHtRr3IH5MWda% zIpLB|d3%fJ!#ixD5GD574aoTX%jpfl{E@kpm7)6iC5<@LAXi>qo_v~;GN|dFu*I_c z@D-zH8%+HFcFUCIKx_=2e zkODipxKIO&04l2b-nP$6R=s9C$}PL;{rgU8zECV^AjsTLP8OB>wfMrK`A%l2RlTHO zx^ja;QQjaPT%pM>t;Gs&niI2T#*W1d3=MOGST~oK%YA}^-aopSDg=`1jyfdpc{7KH znX8JN3`SzlL2{I6QDZ-=d`4nEQx5(GY6ZssOecBh;cV>TOce8Ga>NNah_o{@G6ohN z-JQOO!TG7M^@zmX&lIvh++NTHNw)R1owu{;z5fBnin!F=sV&Q+Da6(}Ha6DNE|a6* zdiL-5v)`q3=h*~_HcW&B57Q1rc>n%!sauNkMG$F&Y_Hrj-g%6ywHKtIT;dtSwG5mj zY$1Qqq>L?9eW@ipBOlh6CTdu`y82)@SaCO)aE(tgWBBFd-$D?+=Njw;7Yk_v*Z}Yx zp6rYWLkhxWCYN`Q!$L_58CBJ5<00znS2*ghLc#UG)92)Hr_aN2@vf*~U1e+bF?(Mb zC#y#vw+}=d@cd3cKJ`9~IJTjMl9G~M=#)gxddY6tTcvN+M4Zy|g&ztaha=}?2kzCs z8eawJb=7Y^Omqwldi$;Ca{c{x@p>XrIwf61Ny2AJPW{R7D)M+)IXQ>vlmS_fE1&37 zp65IfHOxZ;0`mfVVr8kwkpP-fFyVgmi}!%hhxYKD(u+C!B=6xp>vT#pGgi8o!wvhR zh&0JW%v+n^|3WX)A7`|m^pX~p&jt%$bkDMsx{3QzeUW51IcPrvgRuh`wd3eSO+nd| znJzV@g6~Va*Atzr<4QBW8nKXd>^O6>?tD6`zI&RKoSX|H0<=(9Me&5YzkAru;o4EYN?~H7`pKyVZY%OK!^3=NuS92XHQpfgmO74Gow&EfQAC}rbIB>Ay z5Yp~iSP*`|M=rRn7<$Ok{QB;Xx{-R9kz#OCSsNRhHy$DDUr#-Ht>pwj_$x0fJJVfJ z%t9AfInwA}0A48=5mDDT88++lPZ_|g1rS++%HF+sF{%@)xzo-|FZN#_fYX>hT@PSm zSqnvy8Gfx@*WvXrj=Q}hrmmo%;QL=>E%WeK2kIm4+bVO!VH7!bu_~D@isWdO% zw!gUL1N%IWZ(rgseDgBq;pLTYKUt6v&}IXp1K4K{_-tb?_CWrs&#zybb}Y&K!&3Hy z;22Y}n2qp*mbMxw^tM+G&63DZJ2rP-aQT0=21Nl70m2V=FvLzY9o*h*i7qqDmrr+g zkmdP3QSb7Yxd~c-P8mAx9T<4{$#VWUlHWz3Lvt&FIV!18dQ4dkyo`jjH4M~Wt6?Jl E2e5jzB>(^b From f916eb7e2d478a5030bebad3bcfc9dba62f6660d Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sat, 20 Jun 2015 11:24:08 -0700 Subject: [PATCH 12/15] Fix a few ex_act's. --- code/game/gamemodes/events/clang.dm | 2 +- code/game/gamemodes/events/dust.dm | 2 +- code/modules/projectiles/projectile/special.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/events/clang.dm b/code/game/gamemodes/events/clang.dm index 95a4e8a84df..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.ex_act(3) + clong.ex_act(2) else del(src) diff --git a/code/game/gamemodes/events/dust.dm b/code/game/gamemodes/events/dust.dm index 453d584469f..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.ex_act(3)//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/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 78128af4d8a..c4813e05bb1 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -76,7 +76,7 @@ if(src)//Do not add to this if() statement, otherwise the meteor won't delete them if(A) - A.ex_act(3) + A.ex_act(2) playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) for(var/mob/M in range(10, src)) From 831332155a9329dd9546ec41a42d6d19bf13a2de Mon Sep 17 00:00:00 2001 From: Krausus Date: Sun, 21 Jun 2015 21:50:35 -0400 Subject: [PATCH 13/15] Fixes generic wardrobe contents This fixes the wardrobe base type creating items, which was fine when wardrobes didn't call their parent's New proc, but was causing literally every wardrobe to contain some junk now that they do. The base wardrobe type's items have been moved to a new "generic" wardrobe, which is now used in the derelicts and an unused away mission, replacing mapped instances of the base type. --- _maps/map_files/MetaStation/z4.dmm | 2 +- _maps/map_files/RandomZLevels/stationCollision.dmm | 2 +- _maps/map_files/cyberiad/z6.dmm | 2 +- .../objects/structures/crates_lockers/closets/wardrobe.dm | 5 ++++- 4 files changed, 7 insertions(+), 4 deletions(-) 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/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/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index ee2b6d7754c..b5a787d5647 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) From d129ceb53f20f7e75d796095719a614c5f2b2e4a Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sun, 21 Jun 2015 18:54:42 -0700 Subject: [PATCH 14/15] Make flaming meteors more flamey. --- code/game/gamemodes/meteor/meteors.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 5ae702e6494..ff04ec4d190 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -216,7 +216,7 @@ /obj/effect/meteor/flaming/meteor_effect() ..(heavy) - explosion(src.loc, 1, 2, 3, 4, 0, 0, 5) + explosion(src.loc, 1, 2, 3, 4, 0, 0, flame_range = 5) //Radiation meteor /obj/effect/meteor/irradiated From 62946e52175734c784e7d7e20db4661699bc997f Mon Sep 17 00:00:00 2001 From: Krausus Date: Sun, 21 Jun 2015 22:07:40 -0400 Subject: [PATCH 15/15] Fixes medical wardrobe containing excess clothing --- _maps/map_files/MetaStation/MetaStation.v41A.II.dmm | 4 ++-- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- .../objects/structures/crates_lockers/closets/wardrobe.dm | 6 ++++-- 3 files changed, 7 insertions(+), 5 deletions(-) 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/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/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index b5a787d5647..08130cac90a 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -270,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)