diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm index 9a308d3f9c7..edb3113fa78 100644 --- a/code/__HELPERS/matrices.dm +++ b/code/__HELPERS/matrices.dm @@ -1,3 +1,17 @@ /matrix/proc/TurnTo(old_angle, new_angle) . = new_angle - old_angle Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT + + +/atom/proc/SpinAnimation(speed = 10) + var/matrix/m120 = matrix(transform) + m120.Turn(120) + var/matrix/m240 = matrix(transform) + m240.Turn(240) + var/matrix/m360 = matrix(transform) + speed /= 3 //Gives us 3 equal time segments for our three turns. + //Why not one turn? Because byond will see that the start and finish are the same place and do nothing + //Why not two turns? Because byond will do a flip instead of a turn + animate(src, transform = m120, time = speed, loop = -1) + animate(transform = m240, time = speed) + animate(transform = m360, time = speed) \ No newline at end of file diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 8b7dc07052f..45193079a06 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -80,9 +80,6 @@ */ -/atom/proc/meteorhit(obj/meteor as obj) - return - /atom/proc/allow_drop() return 1 diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 4f790db04fe..f7caf7be4e9 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -1,10 +1,15 @@ /var/const/meteor_wave_delay = 625 //minimum wait between waves in tenths of seconds //set to at least 100 unless you want evarr ruining every round -/var/const/meteors_in_wave = 50 -/var/const/meteors_in_small_wave = 10 +/var/list/meteorsA = 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) -/proc/meteor_wave(var/number = meteors_in_wave) +/var/list/meteorsB = list(/obj/effect/meteor/meaty=5, /obj/effect/meteor/meaty/xeno=1) + +/var/list/meteorsC = list(/obj/effect/meteor/dust) //for space dust event + + +/proc/meteor_wave(var/number = 50) //this proc's unused now. if(!ticker || wavesecret) return @@ -15,12 +20,13 @@ spawn(meteor_wave_delay) wavesecret = 0 -/proc/spawn_meteors(var/number = meteors_in_small_wave) + +/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() +/proc/spawn_meteor(var/list/meteortypes) var/startx var/starty @@ -30,7 +36,6 @@ var/turf/pickedgoal var/max_i = 10//number of tries to spawn meteor. - do switch(pick(1,2,3,4)) if(1) //NORTH @@ -58,90 +63,149 @@ pickedgoal = locate(endx, endy, 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 ) + var/Me = pickweight(meteortypes) + var/obj/effect/meteor/M = new Me(pickedstart) M.dest = pickedgoal spawn(0) walk_towards(M, M.dest, 1) - return + + /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' -/obj/effect/meteor/small - name = "small meteor" - icon_state = "smallf" + var/meteordrop = /obj/item/weapon/ore/iron + var/dropamt = 2 + +/obj/effect/meteor/dust + name = "space dust" + icon_state = "dust" pass_flags = PASSTABLE | PASSGRILLE + hits = 1 + hitpwr = 3 + meteorsound = 'sound/weapons/throwtap.ogg' + meteordrop = /obj/item/weapon/ore/glass -/obj/effect/meteor/Bump(atom/A) - if (A) - A.meteorhit(src) - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) - if (--src.hits <= 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) && \ - prob(15)) - explosion(src.loc, 4, 5, 6, 7, 0) - qdel(src) - - -/obj/effect/meteor/ex_act(severity) - if (severity < 4) - qdel(src) - return +/obj/effect/meteor/medium + name = "meteor" + dropamt = 3 /obj/effect/meteor/big name = "big meteor" - hits = 5 + icon_state = "large" + hits = 7 + heavy = 1 + dropamt = 4 - ex_act(severity) - return +/obj/effect/meteor/flaming + name = "flaming meteor" + icon_state = "flaming" + hits = 3 + heavy = 1 + meteorsound = 'sound/effects/bamf.ogg' + meteordrop = /obj/item/weapon/ore/plasma - Bump(atom/A) - //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) - qdel(src) //Dont blow up singularity containment if we get stuck there. +/obj/effect/meteor/irradiated + name = "glowing meteor" + icon_state = "glowing" + hits = 4 + heavy = 1 + meteordrop = /obj/item/weapon/ore/uranium - if (A) - 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, 'sound/effects/meteorimpact.ogg', 50, 1, get_rand_frequency(), 10) - explosion(src.loc, 0, 1, 2, 3, 0) +/obj/effect/meteor/meaty + name = "meaty ore" + icon_state = "meateor" + desc = "Just... don't think too hard about where this thing came from." + hits = 2 + heavy = 1 + meteorsound = 'sound/effects/blobattack.ogg' + meteordrop = /obj/item/weapon/reagent_containers/food/snacks/meat + var/meteorgibs = /obj/effect/gibspawner/generic + +/obj/effect/meteor/meaty/xeno + color = "#5EFF00" + meteordrop = /obj/item/weapon/reagent_containers/food/snacks/xenomeat + meteorgibs = /obj/effect/gibspawner/xeno + + +/obj/effect/meteor/New() + ..() + SpinAnimation() + +/obj/effect/meteor/Bump(atom/A) + if(A) + A.ex_act(hitpwr) + playsound(src.loc, meteorsound, 40, 1) + if(--src.hits <= 0) + make_debris() + meteor_effect(heavy) + qdel(src) + + +/obj/effect/meteor/ex_act() + return + + +/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) + + +/obj/effect/meteor/medium/meteor_effect() + ..(heavy) + explosion(src.loc, 1, 2, 3, 4, 0) + + +/obj/effect/meteor/big/meteor_effect() + ..(heavy) + explosion(src.loc, 0, 1, 2, 3, 0) + + +/obj/effect/meteor/flaming/meteor_effect() + ..(heavy) + explosion(src.loc, 0, 1, 2, 3, 0, 0, 5) + + +/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) + + + +/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/meaty/make_debris() + ..() + new meteorgibs(get_turf(src)) - if (--src.hits <= 0) - if(prob(15) && !istype(A, /obj/structure/grille)) - explosion(src.loc, 1, 2, 3, 4, 0) - qdel(src) /obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/pickaxe)) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 4c2c0bfbde1..152b25fd4ff 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -204,11 +204,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/ex_act(severity) switch(severity) if(1.0) diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 6628fd712ee..299c700808e 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -108,10 +108,6 @@ healthcheck() return -/obj/machinery/bot/meteorhit() - src.explode() - return - /obj/machinery/bot/blob_act() src.health -= rand(20,40)*fire_dam_coeff healthcheck() diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 6b8b7001005..c05b451ba77 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -140,10 +140,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 738def55fe9..99c19755b5c 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -21,15 +21,6 @@ return 0 return 1 -/obj/machinery/computer/meteorhit(var/obj/O as obj) - verbs.Cut() - 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 9a96425c488..0f772a4baba 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -106,14 +106,6 @@ for reference: qdel(src) return - meteorhit() - visible_message("\red The barricade is smashed apart!") - new /obj/item/stack/sheet/mineral/wood(get_turf(src)) - new /obj/item/stack/sheet/mineral/wood(get_turf(src)) - new /obj/item/stack/sheet/mineral/wood(get_turf(src)) - qdel(src) - return - blob_act() src.health -= 25 if (src.health <= 0) @@ -235,10 +227,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 d71b255df22..352231c2116 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -92,10 +92,6 @@ else 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 c1b0248ac3c..6222d05dd32 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -174,10 +174,6 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ qdel(src) return -/obj/machinery/hologram/meteorhit() - qdel(src) - return - /obj/machinery/hologram/holopad/Destroy() if(hologram) clear_holo() diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 855ca45dc7b..439ae820cb1 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -52,21 +52,8 @@ opacity = 1 spawn(20) if(src) opacity = 0 - ..() -/obj/machinery/shield/meteorhit() - src.health -= max_health*0.75 //3/4 health as damage - - if(src.health <= 0) - visible_message("\blue The [src] dissapates") - qdel(src) - return - - opacity = 1 - spawn(20) if(src) opacity = 0 - return - /obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj) health -= Proj.damage ..() @@ -194,13 +181,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 a035d061161..ed5b1f7356d 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -503,10 +503,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 e0c2c72e051..50409ca1998 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -613,10 +613,6 @@ take_damage(30, "brute") return -//TODO -/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/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index 2a1f13e2340..2ea991543fa 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -17,11 +17,15 @@ anchored = 1 /obj/effect/decal/cleanable/greenglow + name = "green glow" - New() - ..() - spawn(1200)// 2 minutes - qdel(src) +/obj/effect/decal/cleanable/greenglow/New() + ..() + spawn(1200)// 2 minutes + qdel(src) + +/obj/effect/decal/cleanable/greenglow/ex_act() + return /obj/effect/decal/cleanable/dirt name = "dirt" diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index dc81ffab22d..8952a88a1b5 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -15,14 +15,4 @@ obj/structure/ex_act(severity) qdel(src) return if(3.0) - return - -obj/structure/meteorhit(obj/O as obj) - qdel(src) - - - - - - - + return \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 5083689c6c4..97d55bedaab 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -163,12 +163,6 @@ A.loc = src.loc qdel(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() - qdel(src) /obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob) if(src.opened) diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 31aff82fff5..04c1f737b46 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -121,12 +121,6 @@ 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/attackby(obj/item/I as obj, mob/user as mob) health -= I.force visible_message("\red [user] strikes [src] with [I].") diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 74f79c2a49c..27ada72e69d 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -45,12 +45,6 @@ qdel(src) -/obj/structure/displaycase/meteorhit(obj/O as obj) - new /obj/item/weapon/shard( src.loc ) - new /obj/item/weapon/gun/energy/laser/captain( src.loc ) - qdel(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 4e503a71961..ff59707bbed 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -18,10 +18,6 @@ /obj/structure/grille/blob_act() qdel(src) -/obj/structure/grille/meteorhit(var/obj/M) - qdel(src) - - /obj/structure/grille/Bumped(atom/user) if(ismob(user)) shock(user, 70) diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index 39083d27c33..6618e7ee8d7 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -40,12 +40,6 @@ qdel(src) -/obj/structure/lamarr/meteorhit(obj/O as obj) - new /obj/item/weapon/shard( src.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 2554a7a76c3..33a08d1b6de 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -165,15 +165,10 @@ FLOOR SAFES obj/structure/safe/blob_act() return - 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 bc44ecd7791..b0ad2010006 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -730,9 +730,6 @@ Destroy type values: if(W && W.loc) W.loc = src.loc return 1 -/obj/structure/rack/meteorhit(obj/O as obj) - qdel(src) - /obj/structure/rack/attack_hand(mob/user) if(HULK in user.mutations) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 923e254f2cf..f6c8893d2c7 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -50,12 +50,6 @@ qdel(src) -/obj/structure/window/meteorhit() - //world << "glass at [x],[y],[z] Mhit" - new /obj/item/weapon/shard( loc ) - if(reinf) new /obj/item/stack/rods( loc) - qdel(src) - /obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(istype(mover) && mover.checkpass(PASSGLASS)) return 1 diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index d41f2aa6e91..4fd11515506 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -313,13 +313,4 @@ thermite = 0 spawn(50) if(O) qdel(O) - return - -/turf/simulated/wall/meteorhit(obj/M as obj) - if (prob(15)) - dismantle_wall() - else if(prob(70)) - ChangeTurf(/turf/simulated/floor/plating) - else - ReplaceWithLattice() - return 0 \ No newline at end of file + return \ No newline at end of file diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index c26bc1e88c9..7f743f88f04 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -58,7 +58,7 @@ // if(ticker.mode.name == "nuclear emergency") return if(A.z > 6) return if (A.x <= TRANSITIONEDGE || A.x >= (world.maxx - TRANSITIONEDGE - 1) || A.y <= TRANSITIONEDGE || A.y >= (world.maxy - TRANSITIONEDGE - 1)) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + if(istype(A, /obj/effect/meteor)) qdel(A) return @@ -135,7 +135,7 @@ var/list/y_arr if(src.x <= 1) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + if(istype(A, /obj/effect/meteor)) qdel(A) return @@ -210,7 +210,7 @@ A.loc.Entered(A) else if (src.y >= world.maxy) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + if(istype(A, /obj/effect/meteor)) qdel(A) return var/list/cur_pos = src.get_global_map_pos() diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index cde70335756..d24b6cab401 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -1,108 +1,19 @@ -/datum/round_event_control/dust +/datum/round_event_control/meteor_wave/dust name = "Minor Space Dust" - typepath = /datum/round_event/dust - weight = 600 - max_occurrences = 10000 + typepath = /datum/round_event/meteor_wave/dust + weight = 300 + max_occurrences = 1000 earliest_start = 0 -/datum/round_event/dust - var/qnty = 1 +/datum/round_event/meteor_wave/dust + startWhen = 1 + endWhen = 2 -/datum/round_event/dust/setup() - qnty = rand(1,5) +/datum/round_event/meteor_wave/dust/announce() + return -/datum/round_event/dust/start() - while(qnty-- > 0) - new /obj/effect/space_dust/weak() +/datum/round_event/meteor_wave/dust/start() + spawn_meteors(1, meteorsC) - -/obj/effect/space_dust - name = "Space Dust" - desc = "Dust in space." - icon = 'icons/obj/meteor.dmi' - icon_state = "space_dust" - density = 1 - anchored = 1 - var/strength = 2 //ex_act severity number - var/life = 2 //how many things we hit before qdel(src) - - weak - strength = 3 - life = 1 - - strong - strength = 1 - life = 6 - - super - strength = 1 - life = 40 - - - New() - var/startx = 0 - var/starty = 0 - var/endy = 0 - var/endx = 0 - var/startside = pick(cardinal) - - switch(startside) - if(NORTH) - starty = world.maxy-(TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - endy = TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(EAST) - starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1)) - startx = world.maxx-(TRANSITIONEDGE+1) - endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) - endx = TRANSITIONEDGE - if(SOUTH) - starty = (TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - endy = world.maxy-TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(WEST) - starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1)) - startx = (TRANSITIONEDGE+1) - endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) - endx = world.maxx-TRANSITIONEDGE - var/goal = locate(endx, endy, 1) - src.x = startx - src.y = starty - src.z = 1 - spawn(0) - walk_towards(src, goal, 1) - return - - - Bump(atom/A) - spawn(0) - if(prob(50)) - for(var/mob/M in range(10, src)) - if(!M.stat && !istype(M, /mob/living/silicon/ai)) - shake_camera(M, 3, 1) - if (A) - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) - - if(ismob(A)) - A.meteorhit(src)//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 - - life-- - if(life <= 0) - walk(src,0) - qdel(src) - return 0 - return - - - Bumped(atom/A) - Bump(A) - return - - - ex_act(severity) - qdel(src) - return +/datum/round_event/meteor_wave/dust/tick() + return \ No newline at end of file diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index c418e498812..8b1a178b77d 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -89,7 +89,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 qdel(src) diff --git a/code/modules/events/meateor_wave.dm b/code/modules/events/meateor_wave.dm new file mode 100644 index 00000000000..fae9ac4fe4e --- /dev/null +++ b/code/modules/events/meateor_wave.dm @@ -0,0 +1,14 @@ +/datum/round_event_control/meteor_wave/meaty + name = "Meaty Ore Wave" + typepath = /datum/round_event/meteor_wave/meaty + weight = 1 + max_occurrences = 1 + +/datum/round_event/meteor_wave/meaty/announce() + command_alert("Meaty ores have been detected on collision course with the station.", "Oh Crap, Get The Mop.") + world << sound('sound/AI/meteors.ogg') + + +/datum/round_event/meteor_wave/meaty/tick() + if(IsMultiple(activeFor, 3)) + spawn_meteors(5, meteorsB) //meteor list types defined in gamemode/meteor/meteors.dm \ No newline at end of file diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm index 8357f36834d..b77c50b716b 100644 --- a/code/modules/events/meteor_wave.dm +++ b/code/modules/events/meteor_wave.dm @@ -15,4 +15,4 @@ /datum/round_event/meteor_wave/tick() if(IsMultiple(activeFor, 3)) - spawn_meteors(5) \ No newline at end of file + spawn_meteors(5, meteorsA) //meteor list types defined in gamemode/meteor/meteors.dm \ No newline at end of file diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm index 0e26fc11d69..722b75d40bf 100644 --- a/code/modules/events/ninja.dm +++ b/code/modules/events/ninja.dm @@ -2740,11 +2740,6 @@ It is possible to destroy the net by the occupant or someone else. healthcheck() return - meteorhit() - health-=50 - healthcheck() - return - hitby(AM as mob|obj) ..() for(var/mob/O in viewers(src, null)) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index f3bd6e95c7c..ebe2a488d4f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -94,25 +94,11 @@ if(shielded) damage /= 4 - show_message("\red The blob attacks!") - 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_paw(mob/living/carbon/monkey/M as mob) if(!ismonkey(M)) return//Fix for aliens receiving double messages when attacking other aliens. diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 2e2c464a30c..12b3713d6df 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -113,17 +113,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]") @@ -136,7 +125,6 @@ updatehealth() - /mob/living/carbon/alien/larva/attack_paw(mob/living/carbon/monkey/M as mob) if(!(istype(M, /mob/living/carbon/monkey))) return//Fix for aliens receiving double messages when attacking other aliens. diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 50a03307add..23cb9f43723 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -204,22 +204,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/limb/affecting = get_organ(pick("chest", "chest", "chest", "head")) - if(!affecting) return - if (istype(O, /obj/effect/immovablerod)) - if(affecting.take_damage(101, 0)) - update_damage_overlays(0) - else - if(affecting.take_damage((istype(O, /obj/effect/meteor/small) ? 10 : 25), 30)) - update_damage_overlays(0) - updatehealth() - return - /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index ab479dffe30..082f3bbbac1 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -248,17 +248,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(" [] 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) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 205fd2d2584..d1f94f76d29 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -68,19 +68,6 @@ now_pushing = null -/mob/living/carbon/monkey/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 (health > 0) - var/shielded = 0 - adjustBruteLoss(30) - if ((O.icon_state == "flaming" && !( shielded ))) - adjustFireLoss(40) - health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - return - -//mob/living/carbon/monkey/bullet_act(var/obj/item/projectile/Proj)taken care of in living - /mob/living/carbon/monkey/attack_paw(mob/M as mob) ..() @@ -373,4 +360,4 @@ return 0 /mob/living/carbon/monkey/canBeHandcuffed() - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 3870bc92a15..8036721f0cc 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -376,27 +376,16 @@ var/list/ai_list = list() usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)." sleep(40) continue - return - 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() return 2 + /mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M as mob) if (!ticker) M << "You cannot attack people before the game has started." diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 54c38fcb787..9354918ac99 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -336,21 +336,9 @@ if(3.0) if (stat != 2) adjustBruteLoss(30) - 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) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 9735c4fbaa4..f119cecd678 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1183,13 +1183,8 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) return val + // 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/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index efec21ace44..95bb4dec398 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -32,9 +32,6 @@ var/const/GRAV_NEEDS_WRENCH = 3 if(severity == 1) // Very sturdy. set_broken() -/obj/machinery/gravity_generator/meteorhit() - return - /obj/machinery/gravity_generator/update_icon() ..() icon_state = "[get_status()]_[sprite_number]" diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index ca45409875b..56dcd502414 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -36,8 +36,6 @@ /obj/machinery/field/containment/ex_act(severity) return 0 -/obj/machinery/field/containment/meteorhit() - return 0 /obj/machinery/field/containment/Crossed(atom/movable/mover) if(isliving(mover)) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index b249672db3f..e571a4bbf9b 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -88,8 +88,6 @@ src.use_power = 1 */ return 1 -/obj/machinery/field/containment/meteorhit() - return 0 /obj/machinery/power/emitter/process() if(stat & (BROKEN)) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 2e037f8e76e..f4751450a1d 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -163,11 +163,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)) - qdel(src) - return - /obj/structure/particle_accelerator/update_icon() switch(construction_state) if(0,1) @@ -350,12 +345,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)) - qdel(src) - return - - /obj/machinery/particle_accelerator/proc/update_state() return 0 diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index c61c3155796..7c3e16ed5a4 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -138,13 +138,6 @@ var/list/solars_list = list() return -/obj/machinery/power/solar/meteorhit() - if(stat & !BROKEN) - broken() - else - qdel(src) - - /obj/machinery/power/solar/ex_act(severity) switch(severity) if(1.0) @@ -459,11 +452,6 @@ var/list/solars_list = list() update_icon() -/obj/machinery/power/solar_control/meteorhit() - broken() - return - - /obj/machinery/power/solar_control/ex_act(severity) switch(severity) if(1.0) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index c5ffc4bf95f..afe46c110e3 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -62,7 +62,7 @@ if(src)//Do not add to this if() statement, otherwise the meteor won't delete them if(A) - A.meteorhit(src) + A.ex_act(2) playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) for(var/mob/M in range(10, src)) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index cf33cbb7529..8d67ce63f4d 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -64,10 +64,6 @@ if (prob(50)) qdel(src) -/obj/machinery/chem_dispenser/meteorhit() - qdel(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 @@ -276,10 +272,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/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 0b131f0d37e..e5588ca946f 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -43,9 +43,6 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). if (prob(50)) qdel(src) -/obj/machinery/r_n_d/circuit_imprinter/meteorhit() - qdel(src) - return /obj/machinery/r_n_d/circuit_imprinter/proc/check_mat(datum/design/being_built, var/M) switch(M) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index f3515ed345d..9034c3430a4 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -28,9 +28,6 @@ Note: Must be placed within 3 tiles of the R&D Console T += S.rating decon_mod = T -/obj/machinery/r_n_d/destructive_analyzer/meteorhit() - qdel(src) - return /obj/machinery/r_n_d/destructive_analyzer/proc/ConvertReqString2List(var/list/source_list) var/list/temp_list = params2list(source_list) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index bf53508cb38..8abbae4220c 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -74,10 +74,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/icons/obj/meteor.dmi b/icons/obj/meteor.dmi index 123a5bdf86e..84faabcc188 100644 Binary files a/icons/obj/meteor.dmi and b/icons/obj/meteor.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 0094e83fc6b..22fd102974c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -835,6 +835,7 @@ #include "code\modules\events\immovable_rod.dm" #include "code\modules\events\ion_storm.dm" #include "code\modules\events\mass_hallucination.dm" +#include "code\modules\events\meateor_wave.dm" #include "code\modules\events\meteor_wave.dm" #include "code\modules\events\ninja.dm" #include "code\modules\events\prison_break.dm"