diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index f16b6bac055..f0ff7be5fe2 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -98,6 +98,7 @@
#define SHUTTLE_IDLE 0
#define SHUTTLE_WARMUP 1
#define SHUTTLE_INTRANSIT 2
+#define SHUTTLE_HALT 3 // State of no recovery
// Ferry shuttle processing status.
#define IDLE_STATE 0
diff --git a/code/modules/overmap/ships/computers/shuttle.dm b/code/modules/overmap/ships/computers/shuttle.dm
index ebe76704421..b0d745ee8c3 100644
--- a/code/modules/overmap/ships/computers/shuttle.dm
+++ b/code/modules/overmap/ships/computers/shuttle.dm
@@ -73,6 +73,7 @@
if(SHUTTLE_IDLE) shuttle_state = "idle"
if(SHUTTLE_WARMUP) shuttle_state = "warmup"
if(SHUTTLE_INTRANSIT) shuttle_state = "in_transit"
+ if(SHUTTLE_HALT) shuttle_state = "halt"
var/shuttle_status
switch (shuttle.process_state)
diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm
index 99f0b37af7b..54aaf1c19e1 100644
--- a/code/modules/shuttles/shuttle.dm
+++ b/code/modules/shuttles/shuttle.dm
@@ -90,6 +90,9 @@
if(origin == destination)
return
+ if(!origin.contents.len || !destination.contents.len)
+ return
+
if (docking_controller && !docking_controller.undocked())
docking_controller.force_undock()
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index 2963a1ca8f3..420fdcc5d55 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -30,6 +30,7 @@
if(SHUTTLE_IDLE) shuttle_state = "idle"
if(SHUTTLE_WARMUP) shuttle_state = "warmup"
if(SHUTTLE_INTRANSIT) shuttle_state = "in_transit"
+ if(SHUTTLE_HALT) shuttle_state = "halt"
var/shuttle_status
switch (shuttle.process_state)
diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm
index 13b73ba8e8f..d6df20e23d9 100644
--- a/code/modules/shuttles/shuttle_emergency.dm
+++ b/code/modules/shuttles/shuttle_emergency.dm
@@ -186,6 +186,7 @@
if(SHUTTLE_IDLE) shuttle_state = "idle"
if(SHUTTLE_WARMUP) shuttle_state = "warmup"
if(SHUTTLE_INTRANSIT) shuttle_state = "in_transit"
+ if(SHUTTLE_HALT) shuttle_state = "halt"
var/shuttle_status
switch (shuttle.process_state)
diff --git a/code/modules/shuttles/shuttle_ferry.dm b/code/modules/shuttles/shuttle_ferry.dm
index ceea9b2d396..049b90b3a67 100644
--- a/code/modules/shuttles/shuttle_ferry.dm
+++ b/code/modules/shuttles/shuttle_ferry.dm
@@ -11,8 +11,8 @@
var/move_time = 0 //the time spent in the transition area
var/transit_direction = null //needed for area/move_contents_to() to properly handle shuttle corners - not exactly sure how it works.
- var/area_station
- var/area_offsite
+ var/area/area_station
+ var/area/area_offsite
//TODO: change location to a string and use a mapping for area and dock targets.
var/dock_target_station
var/dock_target_offsite
@@ -67,6 +67,13 @@
Doing so will ensure that multiple jumps cannot be initiated in parallel.
*/
/datum/shuttle/ferry/process()
+ if(moving_status != SHUTTLE_HALT)
+ if(!area_station || !area_offsite)
+ moving_status = SHUTTLE_HALT
+ return
+ if(!area_station.contents.len || !area_offsite.contents.len)
+ moving_status = SHUTTLE_HALT
+ return
switch(process_state)
if (WAIT_LAUNCH)
if (skip_docking_checks() || docking_controller.can_launch())
@@ -151,6 +158,8 @@
return 0
/datum/shuttle/ferry/proc/can_cancel()
+ if(moving_status == SHUTTLE_HALT)
+ return 0
if (moving_status == SHUTTLE_WARMUP || process_state == WAIT_LAUNCH || process_state == FORCE_LAUNCH)
return 1
return 0
diff --git a/html/changelogs/neexplody.yml b/html/changelogs/neexplody.yml
new file mode 100644
index 00000000000..8c2df047e14
--- /dev/null
+++ b/html/changelogs/neexplody.yml
@@ -0,0 +1,4 @@
+author: Karolis2011
+delete-after: True
+changes:
+ - bugfix: "Bluespace drives have been improved to prevent critical drive failure."
diff --git a/nano/templates/shuttle_control_console.tmpl b/nano/templates/shuttle_control_console.tmpl
index ccc4df70aaf..46a44a84978 100644
--- a/nano/templates/shuttle_control_console.tmpl
+++ b/nano/templates/shuttle_control_console.tmpl
@@ -16,6 +16,8 @@
SPINNING UP
{{else data.shuttle_state == "in_transit"}}
ENGAGED
+ {{else data.shuttle_state == "halt"}}
+ NO DESTINATION
{{else}}
ERROR
{{/if}}