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"