diff --git a/code/game/gamemodes/events/dust.dm b/code/game/gamemodes/events/dust.dm
index d7d551396e4..88964fa610f 100644
--- a/code/game/gamemodes/events/dust.dm
+++ b/code/game/gamemodes/events/dust.dm
@@ -81,7 +81,12 @@ The "dust" will damage the hull of the station causin minor hull breaches.
startx = (TRANSITIONEDGE+1)
endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE)
endx = world.maxx-TRANSITIONEDGE
- var/z_level = pick(using_map.station_levels)
+ //VOREStation Edit - No space dust outside of space
+ var/list/z_levels = using_map.station_levels.Copy()
+ for(var/datum/planet/P in planet_controller.planets)
+ z_levels.Remove(P.expected_z_levels)
+ var/z_level = pick(z_levels)
+ //VOREStation Edit End
var/goal = locate(endx, endy, z_level)
src.x = startx
src.y = starty
diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm
index 75c7e680835..00e05adc7e9 100644
--- a/code/game/turfs/simulated/outdoors/outdoors.dm
+++ b/code/game/turfs/simulated/outdoors/outdoors.dm
@@ -102,9 +102,18 @@ var/list/outdoor_turfs = list()
/turf/simulated/floor/outdoors/ex_act(severity)
switch(severity)
+ //VOREStation Edit - Outdoor turfs less explosion resistant
+ if(1)
+ if(prob(66))
+ ChangeTurf(get_base_turf_by_area(src))
+ return
+ demote()
if(2)
if(prob(33))
return
+ else if(prob(33))
+ demote()
+ //VOREStation Edit End
if(3)
if(prob(66))
return
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 376fb8e452a..e29541fb048 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -214,7 +214,7 @@
if(check_destroy_override())
src.ChangeTurf(destroy_floor_override_path)
else
- src.ChangeTurf(/turf/space)
+ src.ChangeTurf(get_base_turf_by_area(src)) //VOREStation Edit - Use area base turf
if(2.0)
if(prob(75))
take_damage(rand(150, 250))
diff --git a/code/modules/events/event_container_vr.dm b/code/modules/events/event_container_vr.dm
index 1381a28417b..3baabf90262 100644
--- a/code/modules/events/event_container_vr.dm
+++ b/code/modules/events/event_container_vr.dm
@@ -92,6 +92,7 @@
available_events = list(
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 900),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 30, list(ASSIGNMENT_ENGINEER = 25), 1),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Strike", /datum/event/meteor_strike, 5, null ,1)
)
add_disabled_events(list(
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 10, list(ASSIGNMENT_ENGINEER = 60), 1),
diff --git a/code/modules/events/meteor_strike_vr.dm b/code/modules/events/meteor_strike_vr.dm
new file mode 100644
index 00000000000..95ad79f8a6c
--- /dev/null
+++ b/code/modules/events/meteor_strike_vr.dm
@@ -0,0 +1,112 @@
+/datum/event/meteor_strike
+ announceWhen = 1
+ var/turf/strike_target
+
+/datum/event/meteor_strike/setup()
+ startWhen = rand(8,15)
+ strike_target = pick(get_area_turfs(/area/tether/surfacebase/outside/outside3))
+
+ if(!strike_target)
+ kill()
+
+/datum/event/meteor_strike/announce()
+ command_announcement.Announce("A meteoroid has been detected entering the atmosphere on a trajectory that will terminate near the surface facilty. Brace for impact.", "Debris Warning")
+
+/datum/event/meteor_strike/start()
+ new /obj/effect/meteor_falling(strike_target)
+
+/obj/effect/meteor_falling
+ name = "meteor"
+ desc = "The sky is falling!"
+ icon = 'icons/obj/meteor.dmi'
+ icon_state = "large"
+ anchored = 1
+
+/obj/effect/meteor_falling/New()
+ ..()
+ SpinAnimation()
+ meteor_fall()
+
+/obj/effect/meteor_falling/proc/meteor_fall()
+ var/turf/current = get_turf(src)
+ if(istype(current, /turf/simulated/open) || istype(current, /turf/space))
+ var/turf/below = GetBelow(src)
+ if(below.density)
+ meteor_impact()
+ return
+ for(var/atom/movable/A in current)
+ A.ex_act(1)
+ forceMove(below)
+ meteor_fall()
+ return
+ meteor_impact()
+
+/obj/effect/meteor_falling/proc/meteor_impact()
+ var/turf/current = get_turf(src)
+ spawn()
+ explosion(current, 2, 4, 6, 10, 0)
+ anim(get_step(current,SOUTHWEST),, 'icons/effects/96x96.dmi',, "explosion")
+ new /obj/structure/meteorite(current)
+
+ var/datum/planet/impacted
+ for(var/datum/planet/P in planet_controller.planets)
+ if(current.z in P.expected_z_levels)
+ impacted = P
+ break
+ if(impacted)
+ for(var/mob/living/L in mob_list)
+ if(!istype(L))
+ continue
+ var/turf/mob_turf = get_turf(L)
+ if(!(mob_turf.z in impacted.expected_z_levels))
+ continue
+ if(!L.buckled)
+ L.throw_at(get_step_rand(L),1,5)
+ L.Weaken(5)
+ if(L.client)
+ to_chat(L, "The ground lurches beneath you!")
+ shake_camera(L, 6, 1)
+ if(!L.ear_deaf)
+ L << 'sound/effects/explosionfar.ogg'
+ qdel(src)
+
+/obj/structure/meteorite
+ name = "meteorite"
+ desc = "A big hunk of star-stuff."
+ icon = 'icons/obj/meteor.dmi'
+ icon_state = "large"
+ density = 1
+ climbable = 1
+
+/obj/structure/meteorite/New()
+ ..()
+ icon = turn(icon, 90)
+ switch(rand(1,100))
+ if(1 to 60)
+ for(var/i=1 to rand(12,36))
+ new /obj/item/weapon/ore/iron(src)
+ if(61 to 90)
+ for(var/i=1 to rand(8,24))
+ new /obj/item/weapon/ore/silver(src)
+ new /obj/item/weapon/ore/gold(src)
+ new /obj/item/weapon/ore/osmium(src)
+ new /obj/item/weapon/ore/diamond(src)
+ if(91 to 100)
+ new /obj/machinery/artifact(src)
+
+/obj/structure/meteorite/ex_act()
+ return
+
+/obj/structure/meteorite/attackby(var/obj/item/I, var/mob/M)
+ if(istype(I, /obj/item/weapon/pickaxe))
+ var/obj/item/weapon/pickaxe/P = I
+ M.visible_message("[M] starts [P.drill_verb] \the [src].", "You start [P.drill_verb] \the [src].")
+
+ if(!do_after(M, P.digspeed*3))
+ return
+
+ M.visible_message("[M] breaks apart \the [src].", "You break apart \the [src].")
+ for(var/obj/O in src)
+ O.forceMove(get_turf(src))
+ qdel(src)
+ return
\ No newline at end of file