From 7c9139d6e008457234e85df8402160d6d2cd4285 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sat, 20 Jun 2015 07:31:08 -0700 Subject: [PATCH] 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 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 E2e5jzB>(^b