diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index a3a995bb28a..c80d5d4315d 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -246,6 +246,25 @@
usr.client.trigger_centcom_recall()
+ else if(href_list["move_shuttle"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ var/obj/docking_port/mobile/shuttle = SSshuttle.getShuttle(href_list["move_shuttle"])
+ if(!shuttle)
+ return
+ shuttle.admin_fly_shuttle(usr)
+
+ else if(href_list["unlock_shuttle"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ var/obj/machinery/computer/shuttle/shuttle_console = locate(href_list["unlock_shuttle"])
+ if(!shuttle_console)
+ return
+ shuttle_console.admin_controlled = !shuttle_console.admin_controlled
+ to_chat(usr, "[shuttle_console] was [shuttle_console.admin_controlled ? "locked" : "unlocked"].", confidential = TRUE)
+
else if(href_list["toggle_continuous"])
if(!check_rights(R_ADMIN))
return
diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm
index 882d93e891f..3a17b3dab11 100644
--- a/code/modules/security_levels/security_levels.dm
+++ b/code/modules/security_levels/security_levels.dm
@@ -60,7 +60,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(is_station_level(FA.z))
FA.update_icon()
for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines)
- pod.admin_controlled = FALSE
+ pod.locked = FALSE
if(SEC_LEVEL_DELTA)
minor_announce(CONFIG_GET(string/alert_delta), "Attention! Delta security level reached!",1)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
@@ -73,7 +73,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(is_station_level(FA.z))
FA.update_icon()
for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines)
- pod.admin_controlled = FALSE
+ pod.locked = FALSE
if(level >= SEC_LEVEL_RED)
for(var/obj/machinery/door/D in GLOB.machines)
if(D.red_alert_access)
diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm
index 6dfdd8fbb8e..d0dbf15d56c 100644
--- a/code/modules/shuttle/computer.dm
+++ b/code/modules/shuttle/computer.dm
@@ -15,6 +15,8 @@
var/no_destination_swap = FALSE
/// ID of the currently selected destination of the attached shuttle
var/destination
+ /// If the console controls are locked
+ var/locked = FALSE
/// Authorization request cooldown to prevent request spam to admin staff
COOLDOWN_DECLARE(request_cooldown)
@@ -30,7 +32,7 @@
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
data["docked_location"] = M ? M.get_status_text_tgui() : "Unknown"
data["locations"] = list()
- data["locked"] = FALSE
+ data["locked"] = locked
data["authorization_required"] = admin_controlled
data["timer_str"] = M ? M.getTimerStr() : "00:00"
data["destination"] = destination
@@ -39,8 +41,16 @@
return data
if(admin_controlled)
data["status"] = "Unauthorized Access"
+ else if(locked)
+ data["status"] = "Locked"
else
- data["status"] = M.mode == SHUTTLE_IGNITING ? "Igniting" : M.mode != SHUTTLE_IDLE ? "In Transit" : "Idle"
+ switch(M.mode)
+ if(SHUTTLE_IGNITING)
+ data["status"] = "Igniting"
+ if(SHUTTLE_IDLE)
+ data["status"] = "Idle"
+ else
+ data["status"] = "In Transit"
for(var/obj/docking_port/stationary/S in SSshuttle.stationary)
if(!options.Find(S.id))
continue
@@ -106,7 +116,7 @@
return
COOLDOWN_START(src, request_cooldown, 1 MINUTES)
to_chat(usr, "Your request has been received by CentCom.")
- to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to CentCom.")
+ to_chat(GLOB.admins, "SHUTTLE: [ADMIN_LOOKUPFLW(usr)] (Move Shuttle)(Lock/Unlock Shuttle) is requesting to move or unlock the shuttle.")
return TRUE
/obj/machinery/computer/shuttle/emag_act(mob/user)
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index 0f532aec134..636f6fc3274 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -465,7 +465,7 @@
/obj/machinery/computer/shuttle/pod
name = "pod control computer"
- admin_controlled = TRUE
+ locked = TRUE
possible_destinations = "pod_asteroid"
icon = 'icons/obj/terminals.dmi'
icon_state = "dorm_available"