diff --git a/code/datums/ghost_query_vr.dm b/code/datums/ghost_query_vr.dm
index e74aa9ff1a2..aba3165c63a 100644
--- a/code/datums/ghost_query_vr.dm
+++ b/code/datums/ghost_query_vr.dm
@@ -1,4 +1,9 @@
/datum/ghost_query/morph
role_name = "Morph"
- question = "A weird morphic creature appears to have snuck onstation. Do you want to play as it? ((Expect to be treated as vore predator))"
+ question = "A weird morphic creature appears to have snuck onstation. Do you want to play as it? ((Expect to be treated as vore predator.))"
+ cutoff_number = 1
+
+/datum/ghost_query/maints_pred
+ role_name = "Maintenance Predator"
+ question = "It appears a predatory critter is lurking in the maintenance. Do you want to play as it? ((You get to choose type of critter. Expect to be treated as vore predator.))"
cutoff_number = 1
\ No newline at end of file
diff --git a/code/modules/events/event_container_vr.dm b/code/modules/events/event_container_vr.dm
index 284d74906f9..3c6733984c1 100644
--- a/code/modules/events/event_container_vr.dm
+++ b/code/modules/events/event_container_vr.dm
@@ -82,7 +82,8 @@
//Evil grubs that drain station power slightly
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grub Infestation", /datum/event/grub_infestation, 0, list(ASSIGNMENT_SECURITY = 10, ASSIGNMENT_ENGINEER = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 10, list(ASSIGNMENT_SCIENTIST = 40), 1),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(ASSIGNMENT_SECURITY = 35), 1)
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(ASSIGNMENT_SECURITY = 35), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 75, list(ASSIGNMENT_SECURITY = 25, ASSIGNMENT_SCIENTIST = 10), 1)
)
add_disabled_events(list(
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1),
diff --git a/code/modules/events/maintenance_predator_vr.dm b/code/modules/events/maintenance_predator_vr.dm
new file mode 100644
index 00000000000..856e8276beb
--- /dev/null
+++ b/code/modules/events/maintenance_predator_vr.dm
@@ -0,0 +1,73 @@
+/datum/event/maintenance_predator
+ startWhen = 1
+ announceWhen = 50
+ endWhen = 100
+ var/announceProb = 35
+ var/list/possible_mobs = list("Space Bumblebee" = /mob/living/simple_mob/vore/bee,
+ "Voracious Lizard" = /mob/living/simple_mob/vore/aggressive/dino,
+ "Giant Frog" = /mob/living/simple_mob/vore/aggressive/frog,
+ "Giant Rat" = /mob/living/simple_mob/vore/aggressive/rat,
+ "Crate Mimic" = /mob/living/simple_mob/vore/aggressive/mimic,
+ "Juvenile Solargrub" = /mob/living/simple_mob/vore/solargrub,
+ "Red Panda" = /mob/living/simple_mob/vore/redpanda,
+ "Fennec" = /mob/living/simple_mob/vore/fennec,
+ "Fennix" = /mob/living/simple_mob/vore/fennix,
+ "Jelly Blob" = /mob/living/simple_mob/animal/space/jelly,
+ "Wolf" = /mob/living/simple_mob/animal/wolf)
+
+/datum/event/maintenance_predator/start()
+
+ var/obj/effect/landmark/spawnspot = null
+ var/list/possibleSpawnspots = list()
+ for(var/obj/effect/landmark/L in landmarks_list)
+ if(L.name == "maint_pred")
+ possibleSpawnspots += L
+ if(possibleSpawnspots.len)
+ spawnspot = pick(possibleSpawnspots)
+ else
+ kill() // To prevent fake announcements
+ return
+
+ if(!spawnspot)
+ kill() // To prevent fake announcements
+ return
+
+ var/datum/ghost_query/Q = new /datum/ghost_query/maints_pred()
+ var/list/winner = Q.query()
+
+ if(winner.len)
+ var/mob/observer/dead/D = winner[1]
+ var/choice
+ var/randomize
+ var/finalized = "No"
+
+ while(finalized == "No" && D.client)
+ choice = input(D,"What type of predator do you want to play as?") as null|anything in possible_mobs
+ if(!choice)
+ randomize = TRUE
+ break
+
+ if(choice)
+ finalized = alert(D, "Are you sure you want to play as [choice]?","Confirmation","No","Yes")
+
+ if(randomize)
+ choice = pick(possible_mobs)
+
+ var/mobtype = possible_mobs[choice]
+ var/mob/living/simple_mob/newPred = new mobtype(get_turf(spawnspot))
+ newPred.movement_cooldown = 0 // Remove the needless artificial speed cap
+ if(D.mind)
+ D.mind.transfer_to(newPred)
+ to_chat(D, "You are [newPred], somehow having gotten aboard the station in search of food. \
+ You are wary of environment around you, but you do feel rather peckish. Stick around dark, secluded places to avoid danger or, \
+ if you are cute enough, try to make friends with this place's inhabitants.")
+ newPred.ckey = D.ckey
+ newPred.visible_message("[newPred] emerges from somewhere!")
+ else
+ kill() // To prevent fake announcements
+ return
+
+
+/datum/event/maintenance_predator/announce()
+ if(prob(announceProb))
+ command_announcement.Announce("Unexpected biosignature detected in the maintenance tunnels of [station_name()].", "Lifesign Alert")
\ No newline at end of file
diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm
index 025989c7720..ee2cccd109b 100644
--- a/maps/tether/tether-01-surface1.dmm
+++ b/maps/tether/tether-01-surface1.dmm
@@ -32277,6 +32277,20 @@
},
/turf/simulated/floor/outdoors/grass/sif/virgo3b,
/area/tether/surfacebase/outside/outside1)
+"bcW" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/landmark{
+ name = "maint_pred"
+ },
+/turf/simulated/floor/plating,
+/area/maintenance/lower/research)
+"bcX" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/landmark{
+ name = "maint_pred"
+ },
+/turf/simulated/floor/plating,
+/area/maintenance/lower/atmos)
"cGJ" = (
/turf/simulated/floor/plating,
/area/maintenance/lower/mining_eva)
@@ -41487,7 +41501,7 @@ aah
aah
aah
aBO
-aHZ
+bcW
aHc
aJF
aKk
@@ -42650,7 +42664,7 @@ aUT
aVn
aVn
aTZ
-aUE
+bcX
aVn
aVn
aXz
diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm
index 1542fcf9a01..0f5ae0caac8 100644
--- a/maps/tether/tether-02-surface2.dmm
+++ b/maps/tether/tether-02-surface2.dmm
@@ -2142,6 +2142,9 @@
/obj/effect/floor_decal/techfloor{
dir = 8
},
+/obj/effect/landmark{
+ name = "maint_pred"
+ },
/turf/simulated/floor/tiled/techfloor,
/area/maintenance/lower/north)
"aeD" = (
@@ -14060,6 +14063,9 @@
/obj/effect/floor_decal/corner_techfloor_grid/full{
dir = 4
},
+/obj/effect/landmark{
+ name = "maint_pred"
+ },
/turf/simulated/floor/tiled/techfloor,
/area/maintenance/lower/south)
"azV" = (
@@ -21560,6 +21566,13 @@
/obj/structure/window/reinforced,
/turf/simulated/floor/plating,
/area/maintenance/lower/atmos)
+"aOt" = (
+/obj/structure/catwalk,
+/obj/effect/landmark{
+ name = "maint_pred"
+ },
+/turf/simulated/floor/plating,
+/area/maintenance/lower/atmos)
"aOw" = (
/obj/machinery/camera/network/command{
icon_state = "camera";
@@ -39158,7 +39171,7 @@ aMq
aMq
aDS
aNG
-aEp
+aOt
aDS
aac
aac
diff --git a/maps/tether/tether-06-station2.dmm b/maps/tether/tether-06-station2.dmm
index fea2bb4960d..fcdb64e9957 100644
--- a/maps/tether/tether-06-station2.dmm
+++ b/maps/tether/tether-06-station2.dmm
@@ -15688,6 +15688,12 @@
},
/turf/simulated/floor/tiled/white,
/area/medical/biostorage)
+"xL" = (
+/obj/effect/landmark{
+ name = "maint_pred"
+ },
+/turf/simulated/floor,
+/area/maintenance/station/sec_lower)
"xO" = (
/obj/structure/table/standard,
/obj/item/weapon/storage/box/syringegun,
@@ -32131,7 +32137,7 @@ aP
at
TW
OY
-RS
+xL
at
RS
RS
diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm
index f0ba8ae2347..e552f481ace 100644
--- a/maps/tether/tether-07-station3.dmm
+++ b/maps/tether/tether-07-station3.dmm
@@ -29232,13 +29232,11 @@
/turf/simulated/floor/tiled,
/area/security/hallwayaux)
"UD" = (
-/obj/structure/shuttle/engine/propulsion{
- dir = 8;
- icon_state = "propulsion_l"
+/obj/effect/landmark{
+ name = "maint_pred"
},
-/turf/simulated/floor/tiled/asteroid_steel/airless,
-/turf/simulated/shuttle/plating/airless/carry,
-/area/shuttle/belter/station)
+/turf/simulated/floor,
+/area/maintenance/station/ai)
"UE" = (
/obj/structure/bed/chair/shuttle,
/turf/simulated/floor/tiled,
@@ -29415,12 +29413,12 @@
/turf/simulated/floor/tiled,
/area/quartermaster/belterdock)
"UY" = (
-/obj/structure/shuttle/engine/propulsion{
- dir = 8
+/obj/structure/catwalk,
+/obj/effect/landmark{
+ name = "maint_pred"
},
-/turf/simulated/floor/tiled/asteroid_steel/airless,
-/turf/simulated/shuttle/plating/airless/carry,
-/area/shuttle/belter/station)
+/turf/simulated/floor,
+/area/maintenance/cargo)
"UZ" = (
/obj/structure/shuttle/engine/heater{
dir = 8
@@ -29651,7 +29649,7 @@
"Vz" = (
/obj/structure/shuttle/engine/propulsion{
dir = 8;
- icon_state = "propulsion_r"
+ icon_state = "propulsion_l"
},
/turf/simulated/floor/tiled/asteroid_steel/airless,
/turf/simulated/shuttle/plating/airless/carry,
@@ -29683,12 +29681,11 @@
/area/shuttle/excursion/tether)
"VC" = (
/obj/structure/shuttle/engine/propulsion{
- dir = 8;
- icon_state = "propulsion_l"
+ dir = 8
},
-/turf/space,
+/turf/simulated/floor/tiled/asteroid_steel/airless,
/turf/simulated/shuttle/plating/airless/carry,
-/area/shuttle/large_escape_pod1/station)
+/area/shuttle/belter/station)
"VD" = (
/obj/machinery/atmospherics/binary/pump,
/obj/machinery/atmospherics/pipe/simple/hidden/universal{
@@ -29766,15 +29763,23 @@
/area/ai_core_foyer)
"VN" = (
/obj/structure/shuttle/engine/propulsion{
- dir = 8
+ dir = 8;
+ icon_state = "propulsion_r"
+ },
+/turf/simulated/floor/tiled/asteroid_steel/airless,
+/turf/simulated/shuttle/plating/airless/carry,
+/area/shuttle/belter/station)
+"VO" = (
+/obj/structure/shuttle/engine/propulsion{
+ dir = 8;
+ icon_state = "propulsion_l"
},
/turf/space,
/turf/simulated/shuttle/plating/airless/carry,
/area/shuttle/large_escape_pod1/station)
-"VO" = (
+"VP" = (
/obj/structure/shuttle/engine/propulsion{
- dir = 8;
- icon_state = "propulsion_r"
+ dir = 8
},
/turf/space,
/turf/simulated/shuttle/plating/airless/carry,
@@ -29792,6 +29797,14 @@
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/shuttle/excursion/tether)
+"VS" = (
+/obj/structure/shuttle/engine/propulsion{
+ dir = 8;
+ icon_state = "propulsion_r"
+ },
+/turf/space,
+/turf/simulated/shuttle/plating/airless/carry,
+/area/shuttle/large_escape_pod1/station)
"VU" = (
/obj/machinery/firealarm{
dir = 2;
@@ -40184,11 +40197,11 @@ MK
Iy
ab
NL
-VC
-VN
-VN
-VN
VO
+VP
+VP
+VP
+VS
NL
vt
vt
@@ -41415,7 +41428,7 @@ jV
ms
Oz
be
-nx
+UY
RT
dT
Se
@@ -44109,7 +44122,7 @@ du
fy
fy
RI
-gK
+UD
fp
RN
eI
@@ -44297,11 +44310,11 @@ Ty
TL
QG
Ue
-UD
-UY
-UY
-UY
Vz
+VC
+VC
+VC
+VN
VH
vt
vt
diff --git a/vorestation.dme b/vorestation.dme
index e0e0c6b9b9f..4d1dc2cb323 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1871,6 +1871,7 @@
#include "code\modules\events\ian_storm_vr.dm"
#include "code\modules\events\infestation.dm"
#include "code\modules\events\ion_storm.dm"
+#include "code\modules\events\maintenance_predator_vr.dm"
#include "code\modules\events\meteor_strike_vr.dm"
#include "code\modules\events\meteors.dm"
#include "code\modules\events\money_hacker.dm"