diff --git a/code/controllers/supply_shuttle.dm b/code/controllers/supply_shuttle.dm
index 1457fa818bb..fd68fcac95f 100644
--- a/code/controllers/supply_shuttle.dm
+++ b/code/controllers/supply_shuttle.dm
@@ -171,24 +171,18 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
proc/send()
var/area/from
var/area/dest
- var/area/the_shuttles_way
switch(at_station)
if(1)
from = locate(SUPPLY_STATION_AREATYPE)
dest = locate(SUPPLY_DOCK_AREATYPE)
- the_shuttles_way = from
at_station = 0
if(0)
from = locate(SUPPLY_DOCK_AREATYPE)
dest = locate(SUPPLY_STATION_AREATYPE)
- the_shuttles_way = dest
at_station = 1
+ dest.clear_docking_area()
moving = 0
- //Do I really need to explain this loop?
- for(var/mob/living/unlucky_person in the_shuttles_way)
- unlucky_person.gib()
-
from.move_contents_to(dest)
//Check whether the shuttle is allowed to move
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 8970bd6951f..a20826004ae 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -298,4 +298,32 @@
// There's a gravity generator on our z level
if(T && gravity_generators["[T.z]"] && length(gravity_generators["[T.z]"]))
return 1
- return 0
\ No newline at end of file
+ return 0
+
+/area/proc/clear_docking_area()
+ var/list/dstturfs = list()
+ var/throwy = world.maxy
+
+ for(var/turf/T in src)
+ dstturfs += T
+ if(T.y < throwy)
+ throwy = T.y
+
+ // hey you, get out of the way!
+ for(var/turf/T in dstturfs)
+ // find the turf to move things to
+ var/turf/D = locate(T.x, throwy - 1, T.z)
+ for(var/atom/movable/AM as mob|obj in T)
+ //mobs take damage
+ if(istype(AM, /mob/living))
+ var/mob/living/living_mob = AM
+ living_mob.Paralyse(10)
+ living_mob.take_organ_damage(80)
+ //Anything not bolted down is moved, everything else is destroyed
+ AM.anchored = 0
+ AM.Move(D)
+ if(istype(T, /turf/simulated))
+ del(T)
+
+ for(var/atom/movable/bug in src) // If someone (or something) is somehow still in the shuttle's docking area...
+ qdel(bug)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 7a7d7c45166..560807e92a5 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -427,6 +427,7 @@ var/global/floorIsLava = 0
Move Ferry
Move Mining Shuttle
+ Move Labor Shuttle
"}
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 25510344edc..20873efa2d3 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1926,15 +1926,22 @@
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","ShM")
var/datum/shuttle_manager/s = shuttles["mining"]
- if(istype(s)) s.move_shuttle()
- message_admins("\blue [key_name_admin(usr)] moved mining shuttle", 1)
+ if(istype(s)) s.move_shuttle(0)
+ message_admins("[key_name_admin(usr)] moved mining shuttle", 1)
log_admin("[key_name(usr)] moved the mining shuttle")
+ if("movelaborshuttle")
+ feedback_inc("admin_secrets_fun_used",1)
+ feedback_add_details("admin_secrets_fun_used","ShL")
+ var/datum/shuttle_manager/s = shuttles["laborcamp"]
+ if(istype(s)) s.move_shuttle(0)
+ message_admins("[key_name_admin(usr)] moved labor shuttle", 1)
+ log_admin("[key_name(usr)] moved the labor shuttle")
if("moveferry")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","ShF")
var/datum/shuttle_manager/s = shuttles["ferry"]
- if(istype(s)) s.move_shuttle()
- message_admins("\blue [key_name_admin(usr)] moved the centcom ferry", 1)
+ if(istype(s)) s.move_shuttle(0)
+ message_admins("[key_name_admin(usr)] moved the centcom ferry", 1)
log_admin("[key_name(usr)] moved the centcom ferry")
if("kick_all_from_lobby")
if(ticker && ticker.current_state == GAME_STATE_PLAYING)
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 8fadd57ba3f..1002d63f30b 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -21,33 +21,7 @@ datum/shuttle_manager/proc/move_shuttle(var/override_delay)
fromArea = locate(location) //the location of the shuttle
toArea = locate(fromArea.destination)
- var/list/dstturfs = list()
- var/throwy = world.maxy
-
- for(var/turf/T in toArea)
- dstturfs += T
- if(T.y < throwy)
- throwy = T.y
-
- // hey you, get out of the way!
- for(var/turf/T in dstturfs)
- // find the turf to move things to
- var/turf/D = locate(T.x, throwy - 1, 1)
- //var/turf/E = get_step(D, SOUTH)
- for(var/atom/movable/AM as mob|obj in T)
- AM.Move(D)
- // NOTE: Commenting this out to avoid recreating mass driver glitch
- /*
- spawn(0)
- AM.throw_at(E, 1, 1)
- return
- */
-
- if(istype(T, /turf/simulated))
- del(T)
-
- for(var/mob/living/carbon/bug in toArea) // If someone somehow is still in the shuttle's docking area...
- bug.gib()
+ toArea.clear_docking_area()
fromArea.move_contents_to(toArea)
location = toArea.type
@@ -74,8 +48,6 @@ datum/shuttle_manager/proc/move_shuttle(var/override_delay)
return 1
-
-
/obj/machinery/computer/shuttle
name = "Shuttle Console"
icon = 'icons/obj/computer.dmi'
@@ -108,11 +80,11 @@ datum/shuttle_manager/proc/move_shuttle(var/override_delay)
if(id in shuttles)
var/datum/shuttle_manager/s = shuttles[id]
if (s.move_shuttle())
- usr << "\blue Shuttle recieved message and will be sent shortly."
+ usr << "Shuttle recieved message and will be sent shortly."
else
- usr << "\blue Shuttle is already moving."
+ usr << "Shuttle is already moving."
else
- usr << "\red Invalid shuttle requested."
+ usr << "Invalid shuttle requested."
/obj/machinery/computer/shuttle/attackby(I as obj, user as mob)