From ae61b17587a1ef1ba1b90e4792248a89e4c76b0e Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 15 Oct 2020 23:09:49 +0200 Subject: [PATCH] [MIRROR] Shuttle tweak and fix (#1330) * Shuttle tweak and fix (#54395) Fix lavaland podding Make lavaland pod destinations hidden Removed unused variables from connect_to_shuttle() proc Shuttle consoles remove old custom port id from possible destinations when connects to new shuttle Custom ports keeps clear from unwanted numbers. Now shuttle machinery property connects to additional loaded shuttles. Add some docking_port register logging and safety. * Shuttle tweak and fix Co-authored-by: Dennok --- .../map_files/Deltastation/DeltaStation2.dmm | 6 +-- .../map_files/IceBoxStation/IceBoxStation.dmm | 8 ++-- _maps/map_files/MetaStation/MetaStation.dmm | 8 ++-- _maps/map_files/debug/runtimestation.dmm | 2 +- code/datums/shuttles.dm | 2 +- code/game/atoms.dm | 2 +- code/game/machinery/buttons.dm | 8 ++-- code/game/machinery/camera/camera.dm | 4 +- code/game/machinery/computer/camera.dm | 4 +- .../machinery/computer/camera_advanced.dm | 6 +-- code/game/machinery/doors/airlock.dm | 4 +- code/game/machinery/doors/poddoor.dm | 4 +- code/game/machinery/flasher.dm | 4 +- code/game/machinery/igniter.dm | 4 +- code/game/machinery/mass_driver.dm | 4 +- code/game/machinery/status_display.dm | 4 +- code/game/objects/structures/morgue.dm | 4 +- code/modules/shuttle/computer.dm | 8 +++- code/modules/shuttle/emergency.dm | 6 +-- code/modules/shuttle/navigation_computer.dm | 6 +-- code/modules/shuttle/shuttle.dm | 45 +++++++++++++------ 21 files changed, 83 insertions(+), 60 deletions(-) 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