diff --git a/code/datums/outfits/jobs/special_vr.dm b/code/datums/outfits/jobs/special_vr.dm
index dd8316358b..89c4883e92 100644
--- a/code/datums/outfits/jobs/special_vr.dm
+++ b/code/datums/outfits/jobs/special_vr.dm
@@ -9,6 +9,18 @@
id_type = /obj/item/weapon/card/id/centcom
pda_type = /obj/item/device/pda/centcom
+/decl/hierarchy/outfit/job/emergency_responder
+ name = OUTFIT_JOB_NAME("Emergency Responder")
+ uniform = /obj/item/clothing/under/ert
+ shoes = /obj/item/clothing/shoes/boots/swat
+ gloves = /obj/item/clothing/gloves/swat
+ l_ear = /obj/item/device/radio/headset/ert
+ belt = /obj/item/weapon/gun/energy/gun
+ glasses = /obj/item/clothing/glasses/sunglasses
+ back = /obj/item/weapon/storage/backpack/satchel
+ id_type = /obj/item/weapon/card/id/centcom/ERT
+ pda_type = /obj/item/device/pda/centcom
+
/decl/hierarchy/outfit/job/clown
name = OUTFIT_JOB_NAME("Clown")
uniform = /obj/item/clothing/under/rank/clown
diff --git a/code/datums/supplypacks/munitions_vr.dm b/code/datums/supplypacks/munitions_vr.dm
index e8674dd390..75f2124c96 100644
--- a/code/datums/supplypacks/munitions_vr.dm
+++ b/code/datums/supplypacks/munitions_vr.dm
@@ -2,7 +2,7 @@
name = "Frontier phaser (station-locked) crate"
contains = list(
/obj/item/weapon/gun/energy/locked/frontier = 2,
- /obj/item/weapon/gun/energy/locked/frontier/holdout = 1,
+ /obj/item/weapon/gun/energy/locked/frontier/holdout = 2,
)
cost = 35
containertype = /obj/structure/closet/crate/secure
diff --git a/code/game/jobs/job/special_vr.dm b/code/game/jobs/job/special_vr.dm
index d2de3db85c..dcb6a51521 100644
--- a/code/game/jobs/job/special_vr.dm
+++ b/code/game/jobs/job/special_vr.dm
@@ -24,47 +24,31 @@
get_access()
return get_all_accesses().Copy()
-/*/datum/job/centcom_visitor //For Pleasure // You mean for admin abuse... -Ace
- title = "CentCom Visitor"
- department = "Civilian"
- head_position = 1
+/datum/job/emergency_responder //For staff managing/leading ERTs
+ title = "Emergency Responder"
+ departments = list("Central Command")
+ department_accounts = list(DEPARTMENT_COMMAND, DEPARTMENT_ENGINEERING, DEPARTMENT_MEDICAL, DEPARTMENT_RESEARCH, DEPARTMENT_SECURITY, DEPARTMENT_CARGO, DEPARTMENT_PLANET, DEPARTMENT_CIVILIAN)
faction = "Station"
total_positions = 2
spawn_positions = 1
supervisors = "company officials and Corporate Regulations"
selection_color = "#1D1D4F"
- idtype = /obj/item/weapon/card/id/centcom
access = list()
minimal_access = list()
minimal_player_age = 14
economic_modifier = 20
whitelist_only = 1
latejoin_only = 1
+ outfit_type = /decl/hierarchy/outfit/job/emergency_responder
+ job_description = "Emergency Responders are usually called in to deal with on-station emergencies that the crew require assistance to deal with."
- minimum_character_age = 25
- ideal_character_age = 40
+ minimum_character_age = 18
+ ideal_character_age = 30
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/centcom(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom, slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/device/pda/centcom(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/gloves/white(H), slot_gloves)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/centcom/officer(H), slot_head)
- H.equip_to_slot_or_del(new /obj/item/clothing/glasses/omnihud(H), slot_l_store)
-
- H.implant_loyalty()
-
- return 1
+ pto_type = PTO_CIVILIAN
get_access()
- var/access = get_all_accesses()
- return access*/
+ return get_all_accesses().Copy()
/datum/job/clown
title = "Clown"
diff --git a/code/game/objects/effects/landmarks_vr.dm b/code/game/objects/effects/landmarks_vr.dm
index 1111b71724..b9dd81e967 100644
--- a/code/game/objects/effects/landmarks_vr.dm
+++ b/code/game/objects/effects/landmarks_vr.dm
@@ -1,3 +1,6 @@
+/obj/effect/landmark
+ var/abductor = 0
+
/obj/effect/landmark/late_antag
name = "Antag Latespawn"
var/antag_id
diff --git a/code/global_vr.dm b/code/global_vr.dm
index 9d06ea18a3..278df90f79 100644
--- a/code/global_vr.dm
+++ b/code/global_vr.dm
@@ -12,7 +12,9 @@ var/list/shell_module_types = list(
"Standard", "Service", "Clerical", "Service-Hound"
)
+var/list/awayabductors = list() // List of scatter landmarks for Abductors in Gateways
var/list/eventdestinations = list() // List of scatter landmarks for VOREStation event portals
+var/list/eventabductors = list() // List of scatter landmarks for VOREStation abductor portals
var/global/list/acceptable_fruit_types= list(
"ambrosia",
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index 987d395992..6467eb6e15 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -145,6 +145,51 @@ obj/machinery/gateway/centerstation/process()
if(dest)
M.forceMove(dest.loc)
M.set_dir(SOUTH)
+ //VOREStation Addition Start: Abduction!
+ if(istype(M, /mob/living) && dest.abductor)
+ var/mob/living/L = M
+ //Situations to get the mob out of
+ if(L.buckled)
+ L.buckled.unbuckle_mob()
+ if(istype(L.loc,/obj/mecha))
+ var/obj/mecha/ME = L.loc
+ ME.go_out()
+ else if(istype(L.loc,/obj/machinery/sleeper))
+ var/obj/machinery/sleeper/SL = L.loc
+ SL.go_out()
+ else if(istype(L.loc,/obj/machinery/recharge_station))
+ var/obj/machinery/recharge_station/RS = L.loc
+ RS.go_out()
+ if(!issilicon(L)) //Don't drop borg modules...
+ var/list/mob_contents = list() //Things which are actually drained as a result of the above not being null.
+ mob_contents |= L // The recursive check below does not add the object being checked to its list.
+ mob_contents |= recursive_content_check(L, mob_contents, recursion_limit = 3, client_check = 0, sight_check = 0, include_mobs = 1, include_objects = 1, ignore_show_messages = 1)
+ for(var/obj/item/weapon/holder/I in mob_contents)
+ var/obj/item/weapon/holder/H = I
+ var/mob/living/MI = H.held_mob
+ MI.forceMove(get_turf(H))
+ if(!issilicon(MI)) //Don't drop borg modules...
+ for(var/obj/item/II in MI)
+ if(istype(II,/obj/item/weapon/implant) || istype(II,/obj/item/device/nif))
+ continue
+ MI.drop_from_inventory(II, dest.loc)
+ var/obj/effect/landmark/finaldest = pick(awayabductors)
+ MI.forceMove(finaldest.loc)
+ sleep(1)
+ MI.Paralyse(10)
+ MI << 'sound/effects/bamf.ogg'
+ to_chat(MI,"You're starting to come to. You feel like you've been out for a few minutes, at least...")
+ for(var/obj/item/I in L)
+ if(istype(I,/obj/item/weapon/implant) || istype(I,/obj/item/device/nif))
+ continue
+ L.drop_from_inventory(I, dest.loc)
+ var/obj/effect/landmark/finaldest = pick(awayabductors)
+ L.forceMove(finaldest.loc)
+ sleep(1)
+ L.Paralyse(10)
+ L << 'sound/effects/bamf.ogg'
+ to_chat(L,"You're starting to come to. You feel like you've been out for a few minutes, at least...")
+ //VOREStation Addition End
return
/obj/machinery/gateway/centerstation/attackby(obj/item/device/W as obj, mob/user as mob)
diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm
index 43c1dc4a91..ee065d41d7 100644
--- a/code/modules/awaymissions/zlevel.dm
+++ b/code/modules/awaymissions/zlevel.dm
@@ -63,9 +63,29 @@ proc/createRandomZlevel()
. = ..()
awaydestinations += src
+/obj/effect/landmark/gateway_scatter/abduct
+ name = "uncalibrated gateway abductor"
+ abductor = 1
+
/obj/effect/landmark/event_scatter
- name = "uncalibrated gateway destination"
+ name = "uncalibrated event destination"
/obj/effect/landmark/event_scatter/Initialize()
. = ..()
eventdestinations += src
+
+/obj/effect/landmark/event_scatter/abduct
+ name = "uncalibrated event abductor"
+ abductor = 1
+
+/obj/effect/landmark/gateway_abduct_dest
+ name = "abductor gateway destination"
+/obj/effect/landmark/gateway_abduct_dest/Initialize()
+ . = ..()
+ awayabductors += src
+
+/obj/effect/landmark/event_abduct_dest
+ name = "abductor event destination"
+/obj/effect/landmark/event_abduct_dest/Initialize()
+ . = ..()
+ eventabductors += src
//VOREStation Add End
diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm
index ef631fa897..7aadfcd30e 100644
--- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm
+++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm
@@ -4,7 +4,7 @@
#define SA_ICON_REST 0x04
/mob/living/simple_mob
- base_attack_cooldown = 15
+ base_attack_cooldown = 10
var/temperature_range = 40 // How close will they get to environmental temperature before their body stops changing its heat
diff --git a/code/modules/multiz/structures_vr.dm b/code/modules/multiz/structures_vr.dm
index e55b0eae5a..8f96800a7e 100644
--- a/code/modules/multiz/structures_vr.dm
+++ b/code/modules/multiz/structures_vr.dm
@@ -76,4 +76,47 @@
M << 'sound/effects/phasein.ogg'
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
M.forceMove(dest.loc)
+ if(istype(M, /mob/living) && dest.abductor)
+ var/mob/living/L = M
+ //Situations to get the mob out of
+ if(L.buckled)
+ L.buckled.unbuckle_mob()
+ if(istype(L.loc,/obj/mecha))
+ var/obj/mecha/ME = L.loc
+ ME.go_out()
+ else if(istype(L.loc,/obj/machinery/sleeper))
+ var/obj/machinery/sleeper/SL = L.loc
+ SL.go_out()
+ else if(istype(L.loc,/obj/machinery/recharge_station))
+ var/obj/machinery/recharge_station/RS = L.loc
+ RS.go_out()
+ if(!issilicon(L)) //Don't drop borg modules...
+ var/list/mob_contents = list() //Things which are actually drained as a result of the above not being null.
+ mob_contents |= L // The recursive check below does not add the object being checked to its list.
+ mob_contents |= recursive_content_check(L, mob_contents, recursion_limit = 3, client_check = 0, sight_check = 0, include_mobs = 1, include_objects = 1, ignore_show_messages = 1)
+ for(var/obj/item/weapon/holder/I in mob_contents)
+ var/obj/item/weapon/holder/H = I
+ var/mob/living/MI = H.held_mob
+ MI.forceMove(get_turf(H))
+ if(!issilicon(MI)) //Don't drop borg modules...
+ for(var/obj/item/II in MI)
+ if(istype(II,/obj/item/weapon/implant) || istype(II,/obj/item/device/nif))
+ continue
+ MI.drop_from_inventory(II, dest.loc)
+ var/obj/effect/landmark/finaldest = pick(awayabductors)
+ MI.forceMove(finaldest.loc)
+ sleep(1)
+ MI.Paralyse(10)
+ MI << 'sound/effects/bamf.ogg'
+ to_chat(MI,"You're starting to come to. You feel like you've been out for a few minutes, at least...")
+ for(var/obj/item/I in L)
+ if(istype(I,/obj/item/weapon/implant) || istype(I,/obj/item/device/nif))
+ continue
+ L.drop_from_inventory(I, dest.loc)
+ var/obj/effect/landmark/finaldest = pick(awayabductors)
+ L.forceMove(finaldest.loc)
+ sleep(1)
+ L.Paralyse(10)
+ L << 'sound/effects/bamf.ogg'
+ to_chat(L,"You're starting to come to. You feel like you've been out for a few minutes, at least...")
return
diff --git a/code/modules/projectiles/guns/energy/laser_vr.dm b/code/modules/projectiles/guns/energy/laser_vr.dm
index 86a32cb97f..f6bc584455 100644
--- a/code/modules/projectiles/guns/energy/laser_vr.dm
+++ b/code/modules/projectiles/guns/energy/laser_vr.dm
@@ -209,8 +209,8 @@
projectile_type = /obj/item/projectile/beam
firemodes = list(
- list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam, charge_cost = 300),
- list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
+ list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam/blue, charge_cost = 300),
+ list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser/blue, charge_cost = 80),
)
/obj/item/weapon/gun/energy/locked/frontier/unload_ammo(var/mob/user)
@@ -260,8 +260,8 @@
modifystate = "carbinekill"
firemodes = list(
- list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam, modifystate="carbinekill", charge_cost = 300),
- list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, modifystate="carbinestun", charge_cost = 60),
+ list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam/blue, modifystate="carbinekill", charge_cost = 300),
+ list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser/blue, modifystate="carbinestun", charge_cost = 80),
)
/obj/item/weapon/gun/energy/locked/frontier/carbine/update_icon()
@@ -290,8 +290,8 @@
charge_cost = 600
modifystate = "holdoutkill"
firemodes = list(
- list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam, modifystate="holdoutkill", charge_cost = 600),
- list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, modifystate="holdoutstun", charge_cost = 120),
+ list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam/blue, modifystate="holdoutkill", charge_cost = 600),
+ list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser/blue, modifystate="holdoutstun", charge_cost = 160),
list(mode_name="stun", fire_delay=12, projectile_type=/obj/item/projectile/beam/stun/med, modifystate="holdoutshock", charge_cost = 300),
)
diff --git a/code/modules/projectiles/projectile/beams_vr.dm b/code/modules/projectiles/projectile/beams_vr.dm
index 8930260e9e..f4aa2522de 100644
--- a/code/modules/projectiles/projectile/beams_vr.dm
+++ b/code/modules/projectiles/projectile/beams_vr.dm
@@ -42,6 +42,11 @@
tracer_type = /obj/effect/projectile/tracer/laser_blue
impact_type = /obj/effect/projectile/impact/laser_blue
+/obj/item/projectile/beam/weaklaser/blue
+ muzzle_type = /obj/effect/projectile/muzzle/laser_blue
+ tracer_type = /obj/effect/projectile/tracer/laser_blue
+ impact_type = /obj/effect/projectile/impact/laser_blue
+
/obj/item/projectile/beam/medigun
name = "healing beam"
icon_state = "healbeam"
diff --git a/maps/submaps/admin_use_vr/ert.dmm b/maps/submaps/admin_use_vr/ert.dmm
index 350005bbbc..0081799cc3 100644
--- a/maps/submaps/admin_use_vr/ert.dmm
+++ b/maps/submaps/admin_use_vr/ert.dmm
@@ -5270,25 +5270,13 @@
/area/ship/ert/atmos)
"Lq" = (
/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/energy/gun/martin{
- battery_lock = 0
- },
-/obj/item/weapon/gun/energy/gun/martin{
- battery_lock = 0
- },
-/obj/item/weapon/gun/energy/gun/martin{
- battery_lock = 0
- },
-/obj/item/weapon/gun/energy/gun/martin{
- battery_lock = 0
- },
-/obj/item/weapon/gun/energy/gun/martin{
- battery_lock = 0
- },
-/obj/item/weapon/gun/energy/gun/martin{
- battery_lock = 0
- },
/obj/effect/floor_decal/industrial/outline/grey,
+/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked,
+/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked,
+/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked,
+/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked,
+/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked,
+/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked,
/turf/simulated/floor/tiled/techfloor,
/area/ship/ert/armoury_st)
"LA" = (
@@ -5601,6 +5589,7 @@
"NI" = (
/obj/structure/table/rack,
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid,
+/obj/item/weapon/storage/belt/explorer/pathfinder,
/turf/simulated/floor/wood,
/area/ship/ert/commander)
"NJ" = (
@@ -6757,7 +6746,7 @@
/turf/simulated/floor/wood,
/area/ship/ert/commander)
"Wd" = (
-/obj/machinery/telecomms/relay/preset/centcom/tether,
+/obj/machinery/telecomms/relay,
/turf/simulated/floor/tiled/techfloor,
/area/ship/ert/atmos)
"Wj" = (
diff --git a/maps/submaps/pois_vr/aerostat/Rockybase.dmm b/maps/submaps/pois_vr/aerostat/Rockybase.dmm
index b9c9e2e327..657988b585 100644
--- a/maps/submaps/pois_vr/aerostat/Rockybase.dmm
+++ b/maps/submaps/pois_vr/aerostat/Rockybase.dmm
@@ -659,12 +659,6 @@
/obj/item/mecha_parts/chassis/gygax,
/turf/simulated/floor/tiled/techfloor/virgo2,
/area/submap/virgo2/Rockybase)
-"co" = (
-/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced{
- faction = "syndicate"
- },
-/turf/simulated/floor/tiled/techfloor/virgo2,
-/area/submap/virgo2/Rockybase)
"cp" = (
/obj/machinery/vending/robotics,
/obj/machinery/light{
@@ -1302,7 +1296,7 @@ al
bA
ao
ao
-co
+ao
bq
ao
al
diff --git a/maps/submaps/surface_submaps/plains/Thiefc_vr.dmm b/maps/submaps/surface_submaps/plains/Thiefc_vr.dmm
index aab0b0eb08..412b6c8739 100644
--- a/maps/submaps/surface_submaps/plains/Thiefc_vr.dmm
+++ b/maps/submaps/surface_submaps/plains/Thiefc_vr.dmm
@@ -75,7 +75,6 @@
/obj/random/firstaid,
/obj/random/firstaid,
/obj/random/firstaid,
-/obj/random/firstaid,
/turf/simulated/floor/outdoors/dirt{
outdoors = 0
},
@@ -103,7 +102,6 @@
/obj/vehicle/train/trolley,
/obj/random/multiple/voidsuit,
/obj/random/multiple/voidsuit,
-/obj/random/multiple/voidsuit,
/turf/simulated/floor/outdoors/dirt{
outdoors = 0
},
@@ -121,15 +119,13 @@
/area/submap/Thiefc)
"p" = (
/obj/structure/closet/crate,
-/obj/item/weapon/storage/box/shotgunammo,
/obj/item/weapon/storage/box/practiceshells,
-/obj/item/weapon/grenade/spawnergrenade/manhacks/station,
/turf/simulated/floor/outdoors/dirt{
outdoors = 0
},
/area/submap/Thiefc)
-"u" = (
-/mob/living/simple_mob/humanoid/merc/ranged/virgo,
+"B" = (
+/mob/living/simple_mob/animal/giant_spider/phorogenic,
/turf/simulated/floor/outdoors/dirt{
outdoors = 0
},
@@ -322,7 +318,7 @@ a
c
c
c
-u
+h
h
h
h
@@ -346,7 +342,7 @@ c
f
h
h
-h
+B
h
h
c
@@ -387,12 +383,12 @@ a
a
c
e
-h
-u
+B
h
h
h
h
+B
h
h
c
@@ -414,7 +410,7 @@ i
h
h
h
-u
+h
c
c
c
diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm
index 85316eacdd..575ec6b44c 100644
--- a/maps/tether/tether-03-surface3.dmm
+++ b/maps/tether/tether-03-surface3.dmm
@@ -2460,7 +2460,7 @@
dir = 10
},
/obj/effect/floor_decal/steeldecal/steel_decals4,
-/obj/machinery/button/windowtint/doortint{
+/obj/machinery/button/windowtint/multitint{
id = "medbayfoyer";
pixel_x = -8;
pixel_y = -24
@@ -26246,33 +26246,9 @@
/area/tether/surfacebase/medical/storage)
"aSM" = (
/obj/structure/grille,
-/obj/structure/window/reinforced/full,
/obj/machinery/door/firedoor,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/tether/surfacebase/medical/triage)
-"aSN" = (
-/obj/structure/grille,
-/obj/structure/window/reinforced/full,
-/obj/machinery/door/firedoor,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced{
- dir = 4
+/obj/structure/window/reinforced/polarized/full{
+ id = "medbayfoyer"
},
/turf/simulated/floor/plating,
/area/tether/surfacebase/medical/triage)
@@ -55536,7 +55512,7 @@ acR
aap
akb
aFC
-aSN
+aSM
ahY
afz
bnX
diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm
index 903026b657..2d981f1a48 100644
--- a/maps/tether/tether_things.dm
+++ b/maps/tether/tether_things.dm
@@ -366,7 +366,7 @@ var/global/list/latejoin_tram = list()
/obj/structure/closet/secure_closet/guncabinet/excursion/New()
..()
- for(var/i = 1 to 3)
+ for(var/i = 1 to 2)
new /obj/item/weapon/gun/energy/locked/frontier(src)
// Used at centcomm for the elevator