diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm
index ee491f17be1..0c957919a11 100644
--- a/code/modules/shuttle/computer.dm
+++ b/code/modules/shuttle/computer.dm
@@ -69,3 +69,6 @@
obj_flags |= EMAGGED
to_chat(user, "You fried the consoles ID checking system.")
+/obj/machinery/computer/shuttle/proc/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
+ if(port && (shuttleId == initial(shuttleId) || override))
+ shuttleId = port.id
\ No newline at end of file
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index 20b8c26d832..a1b57946d84 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -427,26 +427,6 @@
to_chat(usr, "Escape pods will only launch during \"Code Red\" security alert.")
return TRUE
-/obj/docking_port/mobile/pod/Initialize()
- . = ..()
- var/static/i = 1
- if(id == initial(id))
- id = "[initial(id)][i]"
- if(name == initial(name))
- name = "[initial(name)] [i]"
-
- for(var/k in shuttle_areas)
- var/area/place = k
- for(var/obj/machinery/computer/shuttle/pod/pod_comp in place)
- if(pod_comp.shuttleId == initial(pod_comp.shuttleId))
- pod_comp.shuttleId = id
- if(pod_comp.possible_destinations == initial(pod_comp.possible_destinations))
- pod_comp.possible_destinations = "pod_lavaland[i]"
-
- i++
-
-
-
/obj/docking_port/mobile/pod/cancel()
return
@@ -470,6 +450,11 @@
obj_flags |= EMAGGED
to_chat(user, "You fry the pod's alert level checking system.")
+/obj/machinery/computer/shuttle/pod/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
+ . = ..()
+ if(possible_destinations == initial(possible_destinations) || override)
+ possible_destinations = "pod_lavaland[idnum]"
+
/obj/docking_port/stationary/random
name = "escape pod"
id = "pod"
diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm
index 275f2abb60e..274e6c7c402 100644
--- a/code/modules/shuttle/manipulator.dm
+++ b/code/modules/shuttle/manipulator.dm
@@ -198,7 +198,8 @@
preview_template = null
if(!preview_shuttle)
- load_template(loading_template)
+ if(load_template(loading_template))
+ preview_shuttle.linkup(loading_template, destination_port)
preview_template = loading_template
// get the existing shuttle information, if any
@@ -249,8 +250,8 @@
existing_shuttle = null
selected = null
-/obj/machinery/shuttle_manipulator/proc/load_template(
- datum/map_template/shuttle/S)
+/obj/machinery/shuttle_manipulator/proc/load_template(datum/map_template/shuttle/S)
+ . = FALSE
// load shuttle template, centred at shuttle import landmark,
var/turf/landmark_turf = get_turf(locate(/obj/effect/landmark/shuttle_import) in GLOB.landmarks_list)
S.load(landmark_turf, centered = TRUE)
@@ -293,6 +294,7 @@
return
//Everything fine
S.on_bought()
+ return TRUE
/obj/machinery/shuttle_manipulator/proc/unload_preview()
if(preview_shuttle)
diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm
index 4e105191ee7..03538d1085c 100644
--- a/code/modules/shuttle/navigation_computer.dm
+++ b/code/modules/shuttle/navigation_computer.dm
@@ -247,6 +247,12 @@
current_user.client.images -= remove_images
current_user.client.images += add_images
+/obj/machinery/computer/camera_advanced/shuttle_docker/proc/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
+ if(port && (shuttleId == initial(shuttleId) || override))
+ shuttleId = port.id
+ if(dock)
+ jumpto_ports += dock.id
+
/mob/camera/aiEye/remote/shuttle_docker
visible_icon = FALSE
use_static = USE_STATIC_NONE
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 32c186023bc..495ca3285d7 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -303,6 +303,26 @@
highlight("#0f0")
#endif
+// Called after the shuttle is loaded from template
+/obj/docking_port/mobile/proc/linkup(datum/map_template/shuttle/template, obj/docking_port/stationary/dock)
+ var/list/static/shuttle_id = list()
+ var/idnum
+ if(!shuttle_id[template])
+ shuttle_id[template] = idnum = 1
+ else
+ idnum = shuttle_id[template]++
+ if(id == initial(id))
+ id = "[id][idnum]"
+ if(name == initial(name) && idnum > 1)
+ name = "[name] [idnum]"
+ for(var/i in shuttle_areas)
+ var/area/place = i
+ for(var/obj/machinery/computer/shuttle/comp in place)
+ comp.connect_to_shuttle(src, dock, idnum)
+ for(var/obj/machinery/computer/camera_advanced/shuttle_docker/comp in place)
+ comp.connect_to_shuttle(src, dock, idnum)
+
+
//this is a hook for custom behaviour. Maybe at some point we could add checks to see if engines are intact
/obj/docking_port/mobile/proc/canMove()
return TRUE