diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 009858118ae..cb731576092 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -142,14 +142,14 @@
/area/science/robotics/lab)
"aas" = (
/obj/docking_port/stationary/random{
- id = "pod_lavaland1";
+ id = "pod_lavaland";
name = "lavaland"
},
/turf/open/space,
/area/space/nearstation)
"aat" = (
/obj/docking_port/stationary/random{
- id = "pod_lavaland2";
+ id = "pod_2_lavaland";
name = "lavaland"
},
/turf/open/space,
@@ -26385,7 +26385,7 @@
"bbz" = (
/obj/docking_port/stationary/random{
dir = 4;
- id = "pod_lavaland4";
+ id = "pod_4_lavaland";
name = "lavaland"
},
/turf/open/space,
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index f526204b4eb..ca2ca3a855f 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -6613,7 +6613,7 @@
"aog" = (
/obj/docking_port/stationary/random/icemoon{
dir = 8;
- id = "pod_lavaland2";
+ id = "pod_2_lavaland";
name = "lavaland"
},
/turf/open/floor/plating/asteroid/snow/icemoon,
@@ -10951,7 +10951,7 @@
"ayw" = (
/obj/docking_port/stationary/random/icemoon{
dir = 4;
- id = "pod_lavaland3";
+ id = "pod_3_lavaland";
name = "lavaland"
},
/turf/open/floor/plating/asteroid/snow/icemoon,
@@ -22785,7 +22785,7 @@
"baC" = (
/obj/docking_port/stationary/random/icemoon{
dir = 8;
- id = "pod_lavaland1";
+ id = "pod_lavaland";
name = "lavaland"
},
/turf/open/floor/plating/asteroid/snow/icemoon,
@@ -31624,7 +31624,7 @@
"bvM" = (
/obj/docking_port/stationary/random/icemoon{
dir = 4;
- id = "pod_lavaland4";
+ id = "pod_4_lavaland";
name = "lavaland"
},
/turf/open/floor/plating/asteroid/snow/icemoon,
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 47628e7d5da..1fba72bf6c3 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -25642,7 +25642,7 @@
"bii" = (
/obj/docking_port/stationary/random{
dir = 4;
- id = "pod_lavaland3";
+ id = "pod_3_lavaland";
name = "lavaland"
},
/turf/open/space,
@@ -59647,7 +59647,7 @@
/area/science/xenobiology)
"cSP" = (
/obj/docking_port/stationary/random{
- id = "pod_lavaland1";
+ id = "pod_lavaland";
name = "lavaland"
},
/turf/open/space,
@@ -78039,7 +78039,7 @@
"vWu" = (
/obj/docking_port/stationary/random{
dir = 4;
- id = "pod_lavaland4";
+ id = "pod_4_lavaland";
name = "lavaland"
},
/turf/open/space,
@@ -78857,7 +78857,7 @@
/area/maintenance/starboard)
"xcN" = (
/obj/docking_port/stationary/random{
- id = "pod_lavaland2";
+ id = "pod_2_lavaland";
name = "lavaland"
},
/turf/open/space,
diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm
index 25803a6ab14..6a55c78b109 100644
--- a/_maps/map_files/debug/runtimestation.dmm
+++ b/_maps/map_files/debug/runtimestation.dmm
@@ -2279,7 +2279,7 @@
/area/storage/primary)
"tG" = (
/obj/docking_port/stationary/random{
- id = "pod_lavaland1";
+ id = "pod_lavaland";
name = "lavaland"
},
/turf/open/space/basic,
diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm
index 290cc490052..147b55bafef 100644
--- a/code/datums/shuttles.dm
+++ b/code/datums/shuttles.dm
@@ -101,7 +101,7 @@
/datum/map_template/shuttle/post_load(obj/docking_port/mobile/M)
if(movement_force)
M.movement_force = movement_force.Copy()
- M.linkup(src)
+ M.linkup()
/datum/map_template/shuttle/emergency
port_id = "emergency"
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index eb04ef93e64..c5a34de23ec 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1277,7 +1277,7 @@
return
///Connect this atom to a shuttle
-/atom/proc/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
+/atom/proc/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
return
/// Generic logging helper
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index fa2546d4228..bf55f7a6e67 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -127,10 +127,10 @@
A.id = id
initialized_button = 1
-/obj/machinery/button/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
- if(id && istype(device, /obj/item/assembly/control))
- var/obj/item/assembly/control/A = device
- A.id = "[idnum][id]"
+/obj/machinery/button/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
+ if(id)
+ id = "[port.id]_[id]"
+ setup_device()
/obj/machinery/button/attack_hand(mob/user)
. = ..()
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 5da24d40194..cb5a9d49c85 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -85,10 +85,10 @@
else //this is handled by toggle_camera, so no need to update it twice.
update_icon()
-/obj/machinery/camera/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
+/obj/machinery/camera/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
for(var/i in network)
network -= i
- network += "[idnum][i]"
+ network += "[port.id]_[i]"
/obj/machinery/proc/create_prox_monitor()
if(!proximity_monitor)
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 961bb940506..da14dcbff6f 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -56,10 +56,10 @@
qdel(cam_background)
return ..()
-/obj/machinery/computer/security/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
+/obj/machinery/computer/security/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
for(var/i in network)
network -= i
- network += "[idnum][i]"
+ network += "[port.id]_[i]"
/obj/machinery/computer/security/ui_interact(mob/user, datum/tgui/ui)
// Update UI
diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm
index 66bacfee9fa..8d4c6ede790 100644
--- a/code/game/machinery/computer/camera_advanced.dm
+++ b/code/game/machinery/computer/camera_advanced.dm
@@ -34,16 +34,16 @@
if(lock_override & CAMERA_LOCK_CENTCOM)
z_lock |= SSmapping.levels_by_trait(ZTRAIT_CENTCOM)
-/obj/machinery/computer/camera_advanced/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
+/obj/machinery/computer/camera_advanced/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
for(var/i in networks)
networks -= i
- networks += "[idnum][i]"
+ networks += "[port.id]_[i]"
/obj/machinery/computer/camera_advanced/syndie
icon_keyboard = "syndie_key"
circuit = /obj/item/circuitboard/computer/advanced_camera
-/obj/machinery/computer/camera_advanced/syndie/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
+/obj/machinery/computer/camera_advanced/syndie/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
return //For syndie nuke shuttle, to spy for station.
/obj/machinery/computer/camera_advanced/proc/CreateEye()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index a1ae4cc424c..c9e636772f5 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -157,9 +157,9 @@
. = ..()
AddComponent(/datum/component/ntnet_interface)
-/obj/machinery/door/airlock/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
+/obj/machinery/door/airlock/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
if(id_tag)
- id_tag = "[idnum][id_tag]"
+ id_tag = "[port.id]_[id_tag]"
/obj/machinery/door/airlock/proc/update_other_id()
for(var/obj/machinery/door/airlock/A in GLOB.airlocks)
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 762289f1ca4..6a3228fa3a4 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -16,8 +16,8 @@
damage_deflection = 70
poddoor = TRUE
-/obj/machinery/door/poddoor/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
- id = "[idnum][id]"
+/obj/machinery/door/poddoor/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
+ id = "[port.id]_[id]"
/obj/machinery/door/poddoor/preopen
icon_state = "open"
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index b87567d11a3..ec9efa8e319 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -39,8 +39,8 @@
bulb = new(src)
-/obj/machinery/flasher/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
- id = "[idnum][id]"
+/obj/machinery/flasher/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
+ id = "[port.id]_[id]"
/obj/machinery/flasher/Destroy()
QDEL_NULL(bulb)
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 86803e4b790..cbfaad9b3ac 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -53,8 +53,8 @@
else
icon_state = "igniter[on]"
-/obj/machinery/igniter/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
- id = "[idnum][id]"
+/obj/machinery/igniter/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
+ id = "[port.id]_[id]"
// Wall mounted remote-control igniter.
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 525f6a43526..6576198ba48 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -17,8 +17,8 @@
control.connected = null
return ..()
-/obj/machinery/mass_driver/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
- id = "[idnum][id]"
+/obj/machinery/mass_driver/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
+ id = "[port.id]_[id]"
/obj/machinery/mass_driver/proc/drive(amount)
if(machine_stat & (BROKEN|NOPOWER))
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 3e711d5e8bd..a4bc3b779c8 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -292,8 +292,8 @@
if(NAMEOF(src, shuttle_id))
update()
-/obj/machinery/status_display/shuttle/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override)
- if (port && (shuttle_id == initial(shuttle_id) || override))
+/obj/machinery/status_display/shuttle/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
+ if(port)
shuttle_id = port.id
update()
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 2959a53ab58..26f4c03efb9 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -229,8 +229,8 @@ GLOBAL_LIST_EMPTY(crematoriums)
connected = new /obj/structure/tray/c_tray(src)
connected.connected = src
-/obj/structure/bodycontainer/crematorium/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
- id = "[idnum][id]"
+/obj/structure/bodycontainer/crematorium/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
+ id = "[port.id]_[id]"
/obj/structure/bodycontainer/crematorium/update_icon()
if(!connected || connected.loc != src)
diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm
index d5607e57298..2cab8cfc6b2 100644
--- a/code/modules/shuttle/computer.dm
+++ b/code/modules/shuttle/computer.dm
@@ -145,7 +145,11 @@
obj_flags |= EMAGGED
to_chat(user, "You fried the consoles ID checking system.")
-/obj/machinery/computer/shuttle/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
- if(port && (shuttleId == initial(shuttleId) || override))
+/obj/machinery/computer/shuttle/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
+ if(port)
+ //Remove old custom port id and ";;"
+ var/find_old = findtextEx(possible_destinations, "[shuttleId]_custom")
+ if(find_old)
+ possible_destinations = replacetext(replacetextEx(possible_destinations, "[shuttleId]_custom", ""), ";;", ";")
shuttleId = port.id
possible_destinations += ";[port.id]_custom"
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index 19837571b07..38571a3370d 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -587,10 +587,9 @@
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)
+/obj/machinery/computer/shuttle/pod/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
. = ..()
- if(possible_destinations == initial(possible_destinations) || override)
- possible_destinations = "pod_lavaland[idnum]"
+ possible_destinations += ";[port.id]_lavaland"
/obj/docking_port/stationary/random
name = "escape pod"
@@ -598,6 +597,7 @@
dwidth = 1
width = 3
height = 4
+ hidden = TRUE
var/target_area = /area/lavaland/surface/outdoors
var/edge_distance = 16
// Minimal distance from the map edge, setting this too low can result in shuttle landing on the edge and getting "sliced"
diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm
index 174b742f5bd..62bf300f4cc 100644
--- a/code/modules/shuttle/navigation_computer.dm
+++ b/code/modules/shuttle/navigation_computer.dm
@@ -171,7 +171,7 @@
my_port.dheight = shuttle_port.dheight
my_port.dwidth = shuttle_port.dwidth
my_port.hidden = shuttle_port.hidden
- my_port.register()
+ my_port.register(TRUE)
my_port.setDir(the_eye.dir)
my_port.forceMove(locate(eyeobj.x - x_offset, eyeobj.y - y_offset, eyeobj.z))
@@ -283,8 +283,8 @@
current_user.client.images -= remove_images
current_user.client.images += add_images
-/obj/machinery/computer/camera_advanced/shuttle_docker/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
- if(port && (shuttleId == initial(shuttleId) || override))
+/obj/machinery/computer/camera_advanced/shuttle_docker/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
+ if(port)
shuttleId = port.id
shuttlePortId = "[port.id]_custom"
if(dock)
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 5e100804f22..18b7d53fa7f 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -36,10 +36,22 @@
///Delete this port after ship fly off.
var/delete_after = FALSE
+ ///are we registered in SSshuttles?
+ var/registered = FALSE
+
+ ///register to SSshuttles
/obj/docking_port/proc/register()
+ if(registered)
+ WARNING("docking_port registered multiple times")
+ unregister()
+ registered = TRUE
return
+ ///unregister from SSshuttles
/obj/docking_port/proc/unregister()
+ if(!registered)
+ WARNING("docking_port unregistered multiple times")
+ registered = FALSE
return
/obj/docking_port/proc/Check_id()
@@ -185,7 +197,8 @@
var/datum/map_template/shuttle/roundstart_template
var/json_key
-/obj/docking_port/stationary/register()
+/obj/docking_port/stationary/register(replace = FALSE)
+ . = ..()
if(!id)
id = "dock"
else
@@ -195,13 +208,14 @@
name = "dock"
var/counter = SSshuttle.assoc_stationary[id]
- if(counter)
- counter++
- SSshuttle.assoc_stationary[id] = counter
- id = "[id]_[counter]"
- name = "[name] [counter]"
- else
- SSshuttle.assoc_stationary[id] = 1
+ if(!replace || !counter)
+ if(counter)
+ counter++
+ SSshuttle.assoc_stationary[id] = counter
+ id = "[id]_[counter]"
+ name = "[name] [counter]"
+ else
+ SSshuttle.assoc_stationary[id] = 1
if(!port_destinations)
port_destinations = id
@@ -224,6 +238,7 @@
#endif
/obj/docking_port/stationary/unregister()
+ . = ..()
SSshuttle.stationary -= src
/obj/docking_port/stationary/Destroy(force)
@@ -351,25 +366,29 @@
var/list/hidden_turfs = list()
/obj/docking_port/mobile/register(replace = FALSE)
+ . = ..()
if(!id)
id = "shuttle"
if(!name)
name = "shuttle"
- if(!replace)
- var/counter = SSshuttle.assoc_mobile[id]
+ var/counter = SSshuttle.assoc_mobile[id]
+ if(!replace || !counter)
if(counter)
counter++
SSshuttle.assoc_mobile[id] = counter
id = "[id]_[counter]"
name = "[name] [counter]"
+ //Re link machinery to new shuttle id
+ linkup()
else
SSshuttle.assoc_mobile[id] = 1
SSshuttle.mobile += src
/obj/docking_port/mobile/unregister()
+ . = ..()
SSshuttle.mobile -= src
/obj/docking_port/mobile/Destroy(force)
@@ -413,13 +432,13 @@
#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)
+/obj/docking_port/mobile/proc/linkup(obj/docking_port/stationary/dock)
for(var/place in shuttle_areas)
var/area/area = place
- area.connect_to_shuttle(src, dock, id, FALSE)
+ area.connect_to_shuttle(src, dock)
for(var/each in place)
var/atom/atom = each
- atom.connect_to_shuttle(src, dock, id, FALSE)
+ atom.connect_to_shuttle(src, dock)
//this is a hook for custom behaviour. Maybe at some point we could add checks to see if engines are intact