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