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"