diff --git a/code/datums/shuttle.dm b/code/datums/shuttle.dm
index 96b6cdf73ae..18285b99a4c 100644
--- a/code/datums/shuttle.dm
+++ b/code/datums/shuttle.dm
@@ -79,7 +79,7 @@
var/password = 28011
var/can_link_to_computer = LINK_FORBIDDEN
- //Whether the shuttle gibs or displaces stuff
+ //Whether the shuttle gibs or displaces stuff. Change this to COLLISION_DISPLACE to make all shuttles displace stuff by default
var/collision_type = COLLISION_DESTROY
var/list/control_consoles = list()
@@ -88,6 +88,7 @@
/datum/shuttle/New(var/area/starting_area)
.=..()
+
shuttles |= src
if(starting_area)
@@ -97,7 +98,7 @@
linked_area = starting_area
else
linked_area = starting_area
- warning("Unable to find area [starting_area] in world - [src.type] ([src.name]) will be broken.")
+ warning("Unable to find area [starting_area] in world - [src.type] ([src.name]) won't be able to function properly.")
password = rand(10000,99999)
diff --git a/code/game/shuttles/taxi.dm b/code/game/shuttles/taxi.dm
index 95ad8bf4013..53dfebfe657 100644
--- a/code/game/shuttles/taxi.dm
+++ b/code/game/shuttles/taxi.dm
@@ -30,6 +30,9 @@ var/global/datum/shuttle/taxi/b/taxi_b = new(starting_area = TAXI_B_STARTING_ARE
stable = 1 //Don't stun everyone and don't throw anything when moving
+/datum/shuttle/taxi/is_special()
+ return 1
+
//TAXI A
/datum/shuttle/taxi/a
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index e3029a069bb..76d2af1a6c2 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -846,6 +846,9 @@ var/global/floorIsLava = 0
Add a destination docking port to a shuttle
This will allow the shuttle to move to it.
+ Set a destination docking port to be a shuttle's transit area
+ Use the \"Edit a shuttle's parameters\" option belo to change how the transit area is used
+
Create a shuttle docking port
This will create a shuttle docking port at your location, facing the direction you are currently facing. Shuttle docking ports are used by shuttles to dock to destination docking ports.
@@ -853,7 +856,7 @@ var/global/floorIsLava = 0
If the shuttle has no control consoles linked to it, you'll have the option to create one at your location.
Send a shuttle
- This command allows you to send any existing shuttle to any destination docking port in the world.
+ This command allows you to send any existing shuttle to any destination docking port in the world. Cooldown, lockdown and other factors are respected.
Teleport to a shuttle
@@ -864,20 +867,20 @@ var/global/floorIsLava = 0
Show a shuttle's outline
This command will create a transparent overlay in the shape of a selected shuttle next to you. Its position is calculated as if it were docked at a docking port at your location. The overlay is only visible to you.
-
FUN COMMANDS:
+ FUN BUTTONS:
Turn current area into a shuttle
Send a shuttle to your current location
The shuttle will calculate its position as if you were a destination docking port (including the direction you're facing).
- Forcemove a shuttle
+ Teleport a shuttle
This command allows you to instantly move a shuttle to any destination docking port in the world OR to your location, with no regard for cooldowns and delays.
SUPERCHARGE a shuttle
Once you select a shuttle, its cooldown and movement delay will become 0, but it will sometimes miss its destination.
- EMERGENCY STUFF:
+ EMERGENCY BUTTONS:
Toggle lockdown on a shuttle
Delete a shuttle
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 86df2ee3f49..a1972c8ae44 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -3254,6 +3254,8 @@
PlayerNotesPage(text2num(href_list["index"]))
return
+ //-------------------------------------------------------------Shuttle stuff-----------------------------------------------------------
+
if(href_list["shuttle_create_destination"])
feedback_inc("admin_shuttle_magic_used",1)
feedback_add_details("admin_shuttle_magic_used","DC")
@@ -3284,17 +3286,41 @@
var/datum/shuttle/shuttle_to_link = select_shuttle_from_all(usr,"Select a shuttle to link to [port_to_link] ([port_to_link.areaname])","Admin abuse")
if(!shuttle_to_link) return
- var/choice = input(usr,"Would you like to make [port_to_link] ([port_to_link.areaname]) a transit area?","Admin abuse") in list("Yes","No")
+ if(shuttle_to_link.linked_port.must_rotate(port_to_link))
+ port_to_link.dir = turn(shuttle_to_link.linked_port.dir, 180)
- switch(choice)
- if("No")
- shuttle_to_link.add_dock(port_to_link)
- if("Yes")
- shuttle_to_link.set_transit_dock(port_to_link)
+ if(alert(usr,"[port_to_link] ([port_to_link.areaname]) will be rotated to match [shuttle_to_link.name]'s direction. Continue?","Admin abuse","Yes","No") == "No")
+ return
+
+ shuttle_to_link.add_dock(port_to_link)
message_admins("[key_name_admin(usr)] has added a destination docking port ([port_to_link.areaname]) at [port_to_link.x];[port_to_link.y];[port_to_link.z] to [shuttle_to_link.name] ([shuttle_to_link.type]) [formatJumpTo(get_turf(port_to_link))]", 1)
log_admin("[key_name_admin(usr)] has added a destination docking port ([port_to_link.areaname]) at [port_to_link.x];[port_to_link.y];[port_to_link.z] to [shuttle_to_link.name] ([shuttle_to_link.type])")
+ if(href_list["shuttle_set_transit"])
+ feedback_inc("admin_shuttle_magic_used",1)
+ feedback_add_details("admin_shuttle_magic_used","AT")
+
+ var/list/L = list()
+ for(var/obj/structure/docking_port/destination/D in get_turf(usr) )
+ var/name = "[D.name] ([D.areaname])"
+ L += name
+ L[name]=D
+
+ var/obj/structure/docking_port/port_to_link = L[ (input(usr,"Select a new transit area for the shuttle","Admin abuse") as null|anything in L) ]
+ if(!port_to_link) return
+
+ var/datum/shuttle/shuttle_to_link = select_shuttle_from_all(usr,"Select a shuttle of which you want to change transit area to [port_to_link] ([port_to_link.areaname])","Admin abuse")
+ if(!shuttle_to_link) return
+
+ var/choice = input(usr,"Please confirm that you want to make [port_to_link] ([port_to_link.areaname]) a transit area for [shuttle_to_link.name] ([shuttle_to_link.type])?","Admin abuse") in list("Yes","No")
+
+ if(choice == "Yes")
+ shuttle_to_link.set_transit_dock(port_to_link)
+
+ message_admins("[key_name_admin(usr)] has set a destination docking port ([port_to_link.areaname]) at [port_to_link.x];[port_to_link.y];[port_to_link.z] to be [shuttle_to_link.name] ([shuttle_to_link.type])'s transit area [formatJumpTo(get_turf(port_to_link))]", 1)
+ log_admin("[key_name_admin(usr)] has set a destination docking port ([port_to_link.areaname]) at [port_to_link.x];[port_to_link.y];[port_to_link.z] to be [shuttle_to_link.name] ([shuttle_to_link.type])'s transit area")
+
if(href_list["shuttle_create_shuttleport"])
feedback_inc("admin_shuttle_magic_used",1)
feedback_add_details("admin_shuttle_magic_used","SC")
@@ -3629,7 +3655,7 @@
L+=name
L[name]=D
- var/choice = input(usr, "Select a location to FORCEmove [S.name]!", "Shuttle FORCEmovement") in L
+ var/choice = input(usr, "Select a location to force [S.name] to move to!", "Shuttle ") in L
if(choice == "!!YOUR CURRENT LOCATION!!")
var/area/A = get_area(usr)
@@ -3644,8 +3670,8 @@
S.move_to_dock(temp)
- message_admins("[key_name_admin(usr)] has FORCEmoved [capitalize(S.name)] to himself ([A.name], [temp.x];[temp.y];[temp.z])")
- log_admin("[key_name(usr)] has FORCEmoved [capitalize(S.name)] to himself ([A.name], [temp.x];[temp.y];[temp.z])")
+ message_admins("[key_name_admin(usr)] has teleported [capitalize(S.name)] to himself ([A.name], [temp.x];[temp.y];[temp.z])!")
+ log_admin("[key_name(usr)] has teleported [capitalize(S.name)] to himself by ([A.name], [temp.x];[temp.y];[temp.z])")
qdel(temp)
return
@@ -3655,8 +3681,8 @@
S.move_to_dock(D)
- message_admins("[key_name_admin(usr)] has FORCEmoved [capitalize(S.name)] to [choice] ([D.x];[D.y];[D.z])")
- log_admin("[key_name(usr)] has FORCEmoved [capitalize(S.name)] to [choice] ([D.x];[D.y];[D.z])")
+ message_admins("[key_name_admin(usr)] has teleported [capitalize(S.name)] to [choice] ([D.x];[D.y];[D.z])")
+ log_admin("[key_name(usr)] has teleported [capitalize(S.name)] to [choice] ([D.x];[D.y];[D.z])")
return
@@ -3762,3 +3788,5 @@
for(var/image/I in images)
usr.client.images -= I
return
+
+ //------------------------------------------------------------------Shuttle stuff end---------------------------------
\ No newline at end of file