From 916e9ef0ed3aa2b7b9576be6953761a735e679b7 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sun, 22 Oct 2023 01:27:47 +0200 Subject: [PATCH] [MIRROR] Tram door/panel hotfix [NO GBP] [MDB IGNORE] (#24505) * Tram door/panel hotfix [NO GBP] (#79093) ## About The Pull Request - The actions to open/close and lock/unlock are supposed to match closets, but I got it backwards. Swaps them around. - The lock now works as expected no matter if your ID card is in hand, in a wallet, or in your PDA. - Moves early return for when welder has no fuel. - There was no indication spoilers were tampered/malfunctioning. Added an overlay, examine text, context hint, and welder action so it's more apparent to players. - Fixing an emagged spoiler is now multitool-weld, to match the overlay. - Added some missing var docs. - Improved the wording of some tram error messages about why it's broken (ie: no power.) - Fixed crossing signals not showing correct status/examine text when broken/no power ![image](https://github.com/tgstation/tgstation/assets/83487515/a5539303-88a4-469b-afaf-65c8d67ce2e8) ## Changelog :cl: LT3 fix: Fixed tram cabinet LMB/RMB actions being reversed fix: Tram cabinet can now read IDs inside PDAs and wallets fix: Crossing signals now correctly indicate broken/no power fix: Trying to repair tram (weld) without welding fuel fails fix: You can actually unbolt the tram controller from the wall qol: Tram spoilers now have visual and examine hints about being malfunctioning/emagged qol: Improved some tram error messages /:cl: --------- Co-authored-by: Jacquerel * Tram door/panel hotfix [NO GBP] * Update CODEOWNERS --------- Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> Co-authored-by: Jacquerel --- .github/CODEOWNERS | 2 +- .../modules/transport/_transport_machinery.dm | 1 + .../modules/transport/tram/tram_controller.dm | 147 +++++++++++------- code/modules/transport/tram/tram_controls.dm | 2 +- code/modules/transport/tram/tram_machinery.dm | 6 +- code/modules/transport/tram/tram_signals.dm | 30 ++-- .../modules/transport/tram/tram_structures.dm | 77 ++++++++- icons/obj/tram/crossing_signal.dmi | Bin 9414 -> 5193 bytes icons/obj/tram/tram_sensor.dmi | Bin 2488 -> 2488 bytes icons/obj/tram/tram_structure.dmi | Bin 37082 -> 38456 bytes tools/UpdatePaths/Scripts/77777_Tram_2023.txt | 11 -- .../79093_tram_and_elevators_repath.txt | 21 +++ 12 files changed, 205 insertions(+), 92 deletions(-) delete mode 100644 tools/UpdatePaths/Scripts/77777_Tram_2023.txt create mode 100644 tools/UpdatePaths/Scripts/79093_tram_and_elevators_repath.txt diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 2d1b433a8e2..ed255a80ce6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -30,7 +30,7 @@ /tools/UpdatePaths @Jolly-66 # LT3 -/code/modules/industrial_lift/ @lessthnthree +/code/modules/transport/ @lessthnthree /modular_skyrat/master_files/code/controllers/subsystem/ @lessthnthree /modular_skyrat/modules/advanced_engineering/ @lessthnthree /modular_skyrat/modules/airlock_override/ @lessthnthree diff --git a/code/modules/transport/_transport_machinery.dm b/code/modules/transport/_transport_machinery.dm index 33824d288a1..2d10b4ada5d 100644 --- a/code/modules/transport/_transport_machinery.dm +++ b/code/modules/transport/_transport_machinery.dm @@ -132,6 +132,7 @@ QDEL_LAZYLIST(methods_to_fix) malfunctioning = FALSE set_machine_stat(machine_stat & ~EMAGGED) + set_is_operational(TRUE) update_appearance() return TRUE diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index e04e1bd26b6..c20fb1bfef4 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -73,7 +73,7 @@ */ /datum/tram_mfg_info/New(specific_transport_id) if(GLOB.round_id) - serial_number = "LT306TG[add_leading(GLOB.round_id, 6, 0)]" + serial_number = "LT306TG[add_leading(GLOB.round_id, 6, "0")]" else serial_number = "LT306TG[rand(000000, 999999)]" @@ -724,10 +724,9 @@ context[SCREENTIP_CONTEXT_RMB] = panel_open ? "close panel" : "open panel" if(!held_item) - context[SCREENTIP_CONTEXT_RMB] = cover_open ? "close cabinet" : "open cabinet" + context[SCREENTIP_CONTEXT_LMB] = cover_open ? "access controls" : "open cabinet" + context[SCREENTIP_CONTEXT_RMB] = cover_open ? "close cabinet" : "toggle lock" - if(istype(held_item, /obj/item/card/id/) && allowed(user) && !cover_open) - context[SCREENTIP_CONTEXT_LMB] = cover_locked ? "unlock cabinet" : "lock cabinet" if(panel_open) if(held_item?.tool_behaviour == TOOL_WRENCH) @@ -748,6 +747,7 @@ . += span_notice("The door appears to be [cover_locked ? "locked. Swipe an ID card to unlock" : "unlocked. Swipe an ID card to lock"].") if(panel_open) . += span_notice("It is secured to the tram wall with [EXAMINE_HINT("bolts.")]") + . += span_notice("The maintenance panel can be closed with a [EXAMINE_HINT("screwdriver.")]") else . += span_notice("The maintenance panel can be opened with a [EXAMINE_HINT("screwdriver.")]") @@ -756,35 +756,108 @@ . += span_notice("The [EXAMINE_HINT("red stop button")] immediately stops the tram, requiring a reset afterwards.") . += span_notice("The cabinet can be closed with a [EXAMINE_HINT("Right-click.")]") else - . += span_notice("The cabinet can be opened with a [EXAMINE_HINT("Right-click.")]") + . += span_notice("The cabinet can be opened with a [EXAMINE_HINT("Left-click.")]") /obj/machinery/transport/tram_controller/attackby(obj/item/weapon, mob/living/user, params) - if(!user.combat_mode) - if(weapon && istype(weapon, /obj/item/card/id) && !cover_open) - return try_toggle_lock(user) + if(user.combat_mode || cover_open) + return ..() + + var/obj/item/card/id/id_card = user.get_id_in_hand() + if(!isnull(id_card)) + try_toggle_lock(user, id_card) + return return ..() +/obj/machinery/transport/tram_controller/attack_hand(mob/living/user, params) + . = ..() + if(cover_open) + return + + if(cover_locked) + var/obj/item/card/id/id_card = user.get_idcard(TRUE) + if(isnull(id_card)) + balloon_alert(user, "access denied!") + return + + try_toggle_lock(user, id_card) + return + + toggle_door() + +/obj/machinery/transport/tram_controller/attack_hand_secondary(mob/living/user, params) + . = ..() + + if(!cover_open) + var/obj/item/card/id/id_card = user.get_idcard(TRUE) + if(isnull(id_card)) + balloon_alert(user, "access denied!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + try_toggle_lock(user, id_card) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + toggle_door() + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/machinery/transport/tram_controller/proc/toggle_door() + if(!cover_open) + playsound(loc, 'sound/machines/closet_open.ogg', 35, TRUE, -3) + else + playsound(loc, 'sound/machines/closet_close.ogg', 50, TRUE, -3) + cover_open = !cover_open + update_appearance() + +/obj/machinery/transport/tram_controller/proc/try_toggle_lock(mob/living/user, obj/item/card/id_card, params) + if(isnull(id_card)) + id_card = user.get_idcard(TRUE) + if(obj_flags & EMAGGED) + balloon_alert(user, "access controller damaged!") + return FALSE + + if(check_access(id_card)) + cover_locked = !cover_locked + balloon_alert(user, "controls [cover_locked ? "locked" : "unlocked"]") + update_appearance() + return TRUE + + balloon_alert(user, "access denied!") + return FALSE + /obj/machinery/transport/tram_controller/wrench_act_secondary(mob/living/user, obj/item/tool) . = ..() - if(panel_open) + if(panel_open && cover_open) balloon_alert(user, "unsecuring...") tool.play_tool_sound(src) - if(tool.use_tool(src, user, 6 SECONDS)) - playsound(loc, 'sound/items/deconstruct.ogg', 50, vary = TRUE) - balloon_alert(user, "unsecured") - deconstruct() + if(!tool.use_tool(src, user, 6 SECONDS)) + return + playsound(loc, 'sound/items/deconstruct.ogg', 50, vary = TRUE) + balloon_alert(user, "unsecured") + deconstruct() + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/machinery/transport/tram_controller/screwdriver_act_secondary(mob/living/user, obj/item/tool) + . = ..() + if(!cover_open) + return + + tool.play_tool_sound(src) + panel_open = !panel_open + balloon_alert(user, "[panel_open ? "mounting bolts exposed" : "mounting bolts hidden"]") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/machinery/transport/tram_controller/deconstruct(disassembled = TRUE) if(flags_1 & NODECONSTRUCT_1) return + + var/turf/drop_location = find_obstruction_free_location(1, src) + if(disassembled) - new /obj/item/wallframe/tram/controller(drop_location()) + new /obj/item/wallframe/tram/controller(drop_location) else - new /obj/item/stack/sheet/mineral/titanium(drop_location(), 2) - new /obj/item/stack/sheet/iron(drop_location(), 1) - new /obj/item/shard(drop_location()) + new /obj/item/stack/sheet/mineral/titanium(drop_location, 2) + new /obj/item/stack/sheet/iron(drop_location, 1) qdel(src) /** @@ -877,46 +950,6 @@ return update_appearance() -/obj/machinery/transport/tram_controller/attack_hand(mob/living/user, params) - . = ..() - if(!cover_open && cover_locked) - balloon_alert(user, "it's locked! swipe ID!") - return - -/obj/machinery/transport/tram_controller/attack_hand_secondary(mob/living/user, params) - . = ..() - - if(!cover_open && cover_locked) - balloon_alert(user, "it's locked! swipe ID!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - - toggle_door() - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - -/obj/machinery/transport/tram_controller/proc/toggle_door() - if(!cover_open) - playsound(loc, 'sound/machines/closet_open.ogg', 35, TRUE, -3) - else - playsound(loc, 'sound/machines/closet_close.ogg', 50, TRUE, -3) - cover_open = !cover_open - update_appearance() - -/obj/machinery/transport/tram_controller/proc/try_toggle_lock(mob/living/user, item, params) - var/obj/item/card/id/id_card = user.get_idcard(TRUE) - if(obj_flags & EMAGGED) - balloon_alert(user, "access controller damaged!") - return FALSE - - else if(check_access(id_card)) - cover_locked = !cover_locked - balloon_alert(user, "controls [cover_locked ? "locked" : "unlocked"]") - update_appearance() - return TRUE - - else - balloon_alert(user, "access denied") - return FALSE - /obj/machinery/transport/tram_controller/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) balloon_alert(user, "already fried!") diff --git a/code/modules/transport/tram/tram_controls.dm b/code/modules/transport/tram/tram_controls.dm index e62943c6623..2ecdad304bb 100644 --- a/code/modules/transport/tram/tram_controls.dm +++ b/code/modules/transport/tram/tram_controls.dm @@ -241,7 +241,7 @@ if(INVALID_PLATFORM) say("Configuration error. Please contact the nearest engineer.") if(INTERNAL_ERROR) - say("Tram controller error. Please contact the nearest engineer.") + say("Tram controller error. Please contact the nearest engineer or crew member with telecommunications access to reset the controller.") else return diff --git a/code/modules/transport/tram/tram_machinery.dm b/code/modules/transport/tram/tram_machinery.dm index 32887dffec7..7371447d082 100644 --- a/code/modules/transport/tram/tram_machinery.dm +++ b/code/modules/transport/tram/tram_machinery.dm @@ -58,17 +58,17 @@ if(BROKEN_BEYOND_REPAIR) say("The tram has suffered a catastrophic failure. Please seek alternate modes of travel.") if(NOT_IN_SERVICE) //tram has no power or other fault, but it's not broken forever - say("The tram is not in service. Please contact the nearest engineer.") + say("The tram is not in service due to loss of power or system problems. Please contact the nearest engineer to check power and controller.") if(INVALID_PLATFORM) //engineer needs to fix button say("Button configuration error. Please contact the nearest engineer.") if(TRANSPORT_IN_USE) say("The tram is tramversing the station, please wait.") if(INTERNAL_ERROR) - say("Tram controller error. Please contact the nearest engineer.") + say("Tram controller error. Please contact the nearest engineer or crew member with telecommunications access to reset the controller.") if(NO_CALL_REQUIRED) //already here say("The tram is already here. Please board the tram and select a destination.") else - say("Tram controller error. Please contact the nearest engineer.") + say("Tram controller error. Please contact the nearest engineer or crew member with telecommunications access to reset the controller.") /obj/item/assembly/control/transport/call_button/activate() if(cooldown) diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm index 57cb89f3629..9983b32fe33 100644 --- a/code/modules/transport/tram/tram_signals.dm +++ b/code/modules/transport/tram/tram_signals.dm @@ -151,7 +151,7 @@ . += span_notice("It can be flipped or rotated with a [EXAMINE_HINT("wrench.")]") switch(operating_status) if(TRANSPORT_REMOTE_WARNING) - . += span_notice("The yellow [EXAMINE_HINT("remote warning")] light is on.") + . += span_notice("The orange [EXAMINE_HINT("remote warning")] light is on.") . += span_notice("The status display reads: Check track sensor.") if(TRANSPORT_REMOTE_FAULT) . += span_notice("The blue [EXAMINE_HINT("remote fault")] light is on.") @@ -250,19 +250,24 @@ SIGNAL_HANDLER if(machine_stat & BROKEN || machine_stat & NOPOWER) + operating_status = TRANSPORT_LOCAL_FAULT + update_appearance() return if(prob(TRANSPORT_BREAKDOWN_RATE)) + operating_status = TRANSPORT_LOCAL_FAULT local_fault() return - operating_status = TRANSPORT_SYSTEM_NORMAL - var/datum/transport_controller/linear/tram/tram = transport_ref?.resolve() var/obj/machinery/transport/guideway_sensor/linked_sensor = sensor_ref?.resolve() - if(isnull(tram) || tram.controller_status & COMM_ERROR) + if(malfunctioning) + operating_status = TRANSPORT_LOCAL_FAULT + else if(isnull(tram) || tram.controller_status & COMM_ERROR) operating_status = TRANSPORT_REMOTE_FAULT + else + operating_status = TRANSPORT_SYSTEM_NORMAL if(isnull(linked_sensor)) link_sensor() @@ -271,14 +276,17 @@ /obj/machinery/transport/crossing_signal/on_set_machine_stat() . = ..() - if(machine_stat & BROKEN) - operating_status = TRANSPORT_REMOTE_FAULT + if(machine_stat & BROKEN || machine_stat & NOPOWER) + operating_status = TRANSPORT_LOCAL_FAULT else operating_status = TRANSPORT_SYSTEM_NORMAL /obj/machinery/transport/crossing_signal/on_set_is_operational() . = ..() - + if(!is_operational) + operating_status = TRANSPORT_LOCAL_FAULT + else + operating_status = TRANSPORT_SYSTEM_NORMAL update_operating() /obj/machinery/transport/crossing_signal/proc/comms_change(source, controller, new_status) @@ -529,7 +537,7 @@ . += span_notice("It can be rotated with a [EXAMINE_HINT("wrench.")]") switch(operating_status) if(TRANSPORT_REMOTE_WARNING) - . += span_notice("The yellow [EXAMINE_HINT("remote warning")] light is on.") + . += span_notice("The orange [EXAMINE_HINT("remote warning")] light is on.") . += span_notice("The status display reads: Check paired sensor.") if(TRANSPORT_REMOTE_FAULT) . += span_notice("The blue [EXAMINE_HINT("remote fault")] light is on.") @@ -603,10 +611,8 @@ /obj/machinery/transport/guideway_sensor/update_overlays() . = ..() - if(machine_stat & NOPOWER) - return - if(machine_stat & BROKEN) + if(machine_stat & BROKEN || machine_stat & NOPOWER || malfunctioning) operating_status = TRANSPORT_LOCAL_FAULT . += mutable_appearance(icon, "sensor-[TRANSPORT_LOCAL_FAULT]") . += emissive_appearance(icon, "sensor-[TRANSPORT_LOCAL_FAULT]", src, alpha = src.alpha) @@ -649,9 +655,11 @@ SIGNAL_HANDLER if(machine_stat & BROKEN) + update_appearance() return if(prob(TRANSPORT_BREAKDOWN_RATE)) + operating_status = TRANSPORT_LOCAL_FAULT local_fault() var/obj/machinery/transport/guideway_sensor/buddy = paired_sensor?.resolve() diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm index 03b36c1f528..c6291f775b3 100644 --- a/code/modules/transport/tram/tram_structures.dm +++ b/code/modules/transport/tram/tram_structures.dm @@ -40,14 +40,22 @@ explosion_block = 3 receive_ricochet_chance_mod = 1.2 rad_insulation = RAD_MEDIUM_INSULATION + /// What state of de/construction it's in var/state = TRAM_SCREWED_TO_FRAME + /// Mineral to return when deconstructed var/mineral = /obj/item/stack/sheet/titaniumglass + /// Amount of mineral to return when deconstructed var/mineral_amount = 2 + /// Type of structure made out of girder var/tram_wall_type = /obj/structure/tram + /// Type of girder made when deconstructed var/girder_type = /obj/structure/girder/tram var/mutable_appearance/damage_overlay + /// Sound when it breaks var/break_sound = SFX_SHATTER + /// Sound when hit without combat mode var/knock_sound = 'sound/effects/glassknock.ogg' + /// Sound when hit with combat mode var/bash_sound = 'sound/effects/glassbash.ogg' /obj/structure/tram/split @@ -459,18 +467,20 @@ desc = "Nanotrasen bought the luxury package under the impression titanium spoilers make the tram go faster. They're just for looks, or potentially stabbing anybody who gets in the way." icon_state = "tram-spoiler-retracted" max_integrity = 400 - ///Position of the spoiler - var/deployed = FALSE - ///Weakref to the tram piece we control - var/datum/weakref/tram_ref - ///The tram we're attached to - var/tram_id = TRAMSTATION_LINE_1 obj_flags = CAN_BE_HIT mineral = /obj/item/stack/sheet/mineral/titanium girder_type = /obj/structure/girder/tram/corner smoothing_flags = NONE smoothing_groups = null canSmoothWith = null + /// Position of the spoiler + var/deployed = FALSE + /// Malfunctioning due to tampering or emag + var/malfunctioning = FALSE + /// Weakref to the tram piece we control + var/datum/weakref/tram_ref + /// The tram we're attached to + var/tram_id = TRAMSTATION_LINE_1 /obj/structure/tram/spoiler/Initialize(mapload) . = ..() @@ -485,15 +495,33 @@ if(held_item?.tool_behaviour == TOOL_MULTITOOL && (obj_flags & EMAGGED)) context[SCREENTIP_CONTEXT_LMB] = "repair" + if(held_item?.tool_behaviour == TOOL_WELDER && atom_integrity >= max_integrity) + context[SCREENTIP_CONTEXT_LMB] = "[malfunctioning ? "repair" : "lock"]" + return CONTEXTUAL_SCREENTIP_SET +/obj/structure/tram/spoiler/examine(mob/user) + . = ..() + if(obj_flags & EMAGGED) + . += span_warning("The electronics panel is sparking occasionally. It can be reset with a [EXAMINE_HINT("multitool.")]") + + if(malfunctioning) + . += span_warning("The spoiler is [EXAMINE_HINT("welded")] in place!") + else + . += span_notice("The spoiler can be locked in to place with a [EXAMINE_HINT("welder.")]") + /obj/structure/tram/spoiler/proc/set_spoiler(source, controller, controller_active, controller_status, travel_direction) SIGNAL_HANDLER var/spoiler_direction = travel_direction - if(obj_flags & EMAGGED || controller_status & COMM_ERROR) + if(obj_flags & EMAGGED && !malfunctioning) + malfunctioning = TRUE + + if(malfunctioning || controller_status & COMM_ERROR) if(!deployed) // Bring out the blades + if(malfunctioning) + visible_message(span_danger("\the [src] locks up due to its servo overheating!")) do_sparks(3, cardinal_only = FALSE, source = src) deploy_spoiler() return @@ -523,6 +551,7 @@ flick("tram-spoiler-deploying", src) icon_state = "tram-spoiler-deployed" deployed = TRUE + update_appearance() /obj/structure/tram/spoiler/proc/retract_spoiler() if(!deployed) @@ -530,11 +559,12 @@ flick("tram-spoiler-retracting", src) icon_state = "tram-spoiler-retracted" deployed = FALSE + update_appearance() /obj/structure/tram/spoiler/emag_act(mob/user) if(obj_flags & EMAGGED) return - to_chat(user, span_warning("You short-circuit the [src]'s locking mechanism!"), type = MESSAGE_TYPE_INFO) + to_chat(user, span_warning("You short-circuit the [src]'s servo to overheat!"), type = MESSAGE_TYPE_INFO) playsound(src, SFX_SPARKS, 100, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) do_sparks(5, cardinal_only = FALSE, source = src) obj_flags |= EMAGGED @@ -550,6 +580,37 @@ return FALSE +/obj/structure/tram/spoiler/welder_act(mob/living/user, obj/item/tool) + if(!tool.tool_start_check(user, amount = 1)) + return FALSE + + if(atom_integrity >= max_integrity) + to_chat(user, span_warning("You begin to weld \the [src], [malfunctioning ? "repairing damage" : "preventing retraction"].")) + if(!tool.use_tool(src, user, 4 SECONDS, volume = 50)) + return + malfunctioning = !malfunctioning + user.visible_message(span_warning("[user] [malfunctioning ? "welds \the [src] in place" : "repairs \the [src]"] with [tool]."), \ + span_warning("You finish welding \the [src], [malfunctioning ? "locking it in place." : "it can move freely again!"]"), null, COMBAT_MESSAGE_RANGE) + + if(malfunctioning) + deploy_spoiler() + + update_appearance() + return TOOL_ACT_TOOLTYPE_SUCCESS + + to_chat(user, span_notice("You begin repairing [src]...")) + if(!tool.use_tool(src, user, 4 SECONDS, volume = 50)) + return + atom_integrity = max_integrity + to_chat(user, span_notice("You repair [src].")) + update_appearance() + return TOOL_ACT_TOOLTYPE_SUCCESS + +/obj/structure/tram/spoiler/update_overlays() + . = ..() + if(deployed && malfunctioning) + . += mutable_appearance(icon, "tram-spoiler-welded") + /obj/structure/chair/sofa/bench/tram name = "bench" desc = "Perfectly designed to be comfortable to sit on, and hellish to sleep on." diff --git a/icons/obj/tram/crossing_signal.dmi b/icons/obj/tram/crossing_signal.dmi index b532ca1e175325646481b444395411b9d50e9b51..bfcda58c7f3a157d04d5a174477917a46225aa5c 100644 GIT binary patch literal 5193 zcmd^?dsNcty2l}>?4nuIbg@*dJu@D2%F@hAg-Y9|j#)ZpnS|XmuXra#{dw$arB-UD zqErrMWuke-8vVFdPkzy}j9bA^&>botfZzNIsvFW{wvme8Y z&pRfu*aIvLXIXM7GE z_~g94KfvoJ;vC7@dK2MD;lbqQ$wnu*#nP|i?GGn}qB|$o)<2jw00Pp`-D@`yPUk3+ zuH8FsZroxt?{<~iRO{QRvue-XwbM%-e0E;Ews!B5mD@_k*J0j}^t-KwP2OKWahiq) z?(&KRyr0#V$wjYv09P^2}$k z@RQf>+btbhUAuD4h8$GNr1v)$Qly2}$96#TFhOl?0>_8AhR&AQESEuyN5S_crgq48 z-t@lpw#CxwGQ{5(Uw+m8lr5e3QrvVl`!v53l*7|c${R3#{(H_K zY3m`rjYdvF2n6S_Lqw&nylvB@=t5kK%R1~t3H_$`P!RM2m^!t|}y`QH2H{V1*)mR3QEE|%U$A2s+h`+KhxMin6V3r<*@oJc8x9WQ7nWlao zgs77bydypoNo6^JcE*r@V5d1@Hd5GGu4jfvP(|q5MNB(n`}Or|C9A8^rP2igiOpcWI2=qqg5705`2ow#MgT( z3oQgO^F>JPi%j=WVWWpiiV$Wou)<6%pC)cvH%b!Yr2st7` zdW)smsluzFj5B+iI)dxxX;4_&!DN|)>V{Wzv2fD))s#xT&)d;}fyj;|+QAvYmh*i@kSsN3%aC|ZLa0r!yzpa<;wy&Lqk zAYU!t_4}g4s+kIxe?CCTA-5`So`ZF1!&eV%9_7)9um-+&vW!9{NAm_$b37W2Bb5Wnd^-JSOwo?sym31Vwh{MgT@<-#OPOiXntifn`}?o!CP2>Is<&cYl| z8=X=Uswqn?{re{8=GGqFtsaq0Wsqg#t4!|uAJRIQ1o@4?*joT&j87MvF!sqAZ|k?_ z0LIE2kO{2)vVBesTOP;=nTj@6yy$wyd(9dQur>l4w|tFr7}0H0NPk`UQ1KXQd@u=W z?E8{eSEZ9X_nGk}Nl&c7joA6A33C5^jfA z2fr7!b9}NoyJP5%UZ29fodJ%_bYbD-AKpxO!DMPim(AZ8>h0u)N9E<`!-98MkTWA*sYiPW_-q9W6C^R`uze zZ9TZE_fJLq8l+!6+aPu7_^plq8(&@UdWdejT%*x`Rcm>fr>a%7s~f+e2HsvV-tb}* z4C((Le)f{P*+ay{35(tN5qej?OM4$xu-rUC&b}pVOGTSXSa*=L>c&~w412gx<#dYM zels0Y+E6sdu&D$u&THL%Nd)|L502B+ZQsMQFg(#s)uY~Dw2Jg0?P+J zt%6ks4dK0vrY7k4=%8FL8mQcrn7ANeJG#9MH0u&Nn_}4_5NkQ%n2y+y0Jn9rn-)SP zCKIK-%`KJ!OF@j_$JKGfff;rIB&z`U@G*lBI7Qz31-_s^Gluv!(ICG(WiLls|54$( zUv*1&AFSY!(VQg7dOX^TFbwKct|!SMo*qjx{TD?2k7L zGbIF1yWES*$R5vhpOV6E(4aINxlO}kE55+QnN-%B?bsdZc+n%SGL6let_#iLX+a`q zP$!oBHlu!vVSl-G4`k;tZdMpwhR5DZb3-FGzstL0!fo%JwzVnWR|EFn=VU`_L_ycJ$(W$U0+tk4U00eHccd?^yWhZ87nh?7Bb*}V{gF~_mTkY!>^v>tO}Y9s5^#Ws_Tq;OLX-3@QXF(WeNZPutnzp$2PsQAKJhLQJ$Cv3z4 zfZk-_zZ8TP`|i^8Yyw+Ttq)&^`K0Tzp9anG>_G7h-|rQZ5^?`>xA%n}={#d+g&`!m zYyGI_h}PMxC)mdwtuY1BH_o5DKwik{XpL&O^M&kf_Dz!Cylb9a!I|M~GrGvIU~gr6 zE{$0&vAt;XP5DZBv}mUDk^pMHxRtB!Of7?C8M|%Z?5j7Cw$PWEVq*XkE*_ z;hGojir05HCG7d9a<#hjM*@jZfo|hh+>eSZ@@mPsM|ua5lx3SB#Vx>*6@UCX@kg&C zfA;fR){UB3=k6uVXKm>UT@{ZWako;t-Mi)D^oRxNkL{jv#?Tju}WamSNF0{C|p3<7QWzz#!e{ zr1=*=r;`I5e=YvX!e5I&rt)8o*6U3DLq4Cc$$@5k$$&Q8?tz$i!N*y4rxwd8~sk7`g{HC|Ap^$>V#Pa)_dE3A*=k$VL>V6F9@EJ z1!$ld62aF9n|T}5rZq(rPHoo+R^Fak^sh>-jags;-hFBG=o0?o83soqvq!Wc`@)B{ zmL)-;f9*)}m@H3y-koMn%?9h)Pj^C8Pz>90rWTSC4YgQ-mKO_l9u=0IT3sfq8Uy{ LjyaSb_D%i=OKtEr literal 9414 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 diff --git a/icons/obj/tram/tram_sensor.dmi b/icons/obj/tram/tram_sensor.dmi index de50b20e701a8460333f07f5406e5fd6f7c39f17..5146e79c4ac3b61b080d5dfc36e8210d76336cc1 100644 GIT binary patch delta 1207 zcmaJ=eN0n#6#YS=bP;G5OOLUq92+IjhA}4NGl1o@517JY zzP*B*S!QNJ@5>ElF?pFB~0$%;VzQ1n~x=?A*@vSkgdb6$;+x899_y6S_A5Y`kO2O3?%qA zejk(`2jYuN%CC^hZU(eWRgX^OCbHS0HI`atIc2q4n^Zcpp`{RjlVbdIjNM!IP}@1@ zmGHeZj%dYc(IO@*`CP^lmc6bF1f=({1}WYBi-8}W=DTsfIkLzr8&}RE=(=+zf7Gq- zXUmB6U3CVCA5ONbUC$iTGhH)swR^wcyl_O58OrS)rC^KnyDRK zvrWbid+aKY(ZhOaLuR^&Y)YXyAwy{+7;lv-))$9~jqI0hX_^o>?MW}gQ5t#cZk=i8 zGt&?>AAfgwlOTi`Rd5)6oa2Rh4LQYfBekMGHe6#UQn`)hJ0ijA>i&?8TfKwz`7_TW zoyVdC#gfumBt+0d4%d*gY7&?g>)%y49FN+gswZhy;_v~ZiVsm5QJ=x}LsM&St?yc7 zyousxEI{n0AynOoqS?T#pN-V8eZCh1a>zR>ha9}jyHH=Qndw?9SA(hqXqlXuI=@RJ z*0$CMCcg!eE(4GpD+rs`N1;mta%t5`O5J!r18|^W^Ttt~#F}-ay%b1=eU-wjb-2)^ ztaM5tbdh664NkiLxtO$sKrRovW;yLcrSDI6Q!2|nm%f1W$o2xD+)xriu`9vngZ9$< z^T3!+XN?o_FCyC#Y2^ZePm*<7C3jz-UWsTOzu|IM8y(>0co!9P4+)yg6skjfA1kcnKt#TCN!!92JvD2OJ;bD1f~RbAr9 zD}0{a&lY*t-Rz14Nlzx3I*uryE=&;s2LyBAq~LAQ;(^s~I<{;n7hc*j8z$nv z1hJS=C*YDyzoR#GRlI8BKm{8JI%@>r=dp!K(?%%B*Mz~*_|vch_jXL)@4#5~!S0C~ z)4nmfP4Pq$W5EW$Kz&+_13w=5$y&L52*?8BVIJW#Sc9j;_ME{TNYS2sXziT!-f8)? zdE6=UmtTqKwkZEznE&4-I-tSBzu~^6eHo@^uA)nb*;>^_o~h{vUYS7X0gNl`(C#0-pBT oy{C+oTA%4$*}uoXjXy;0LBUGn;~*9}Sq`u`aWo~l_akn@UjhSs5&!@I delta 1271 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 delta 8094 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 diff --git a/tools/UpdatePaths/Scripts/77777_Tram_2023.txt b/tools/UpdatePaths/Scripts/77777_Tram_2023.txt deleted file mode 100644 index f3ac42e09f5..00000000000 --- a/tools/UpdatePaths/Scripts/77777_Tram_2023.txt +++ /dev/null @@ -1,11 +0,0 @@ -#comment Repathing for Transport Subsystem - -/obj/structure/industrial_lift : /obj/structure/transport/linear{@OLD} -/obj/structure/industrial_lift/public : /obj/structure/transport/linear/public{@OLD} -/obj/structure/industrial_lift/debug : /obj/structure/transport/linear/debug{@OLD} -/obj/structure/industrial_lift/tram : /obj/structure/transport/linear/tram{@OLD} -/obj/effect/landmark/lift_id : /obj/effect/landmark/transport/transport_id{@OLD} -/obj/effect/landmark/tram/nav/immovable_rod : /obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod{@OLD} -/turf/open/floor/noslip/tram_plate : /turf/open/floor/tram/plate{@OLD} -/turf/open/floor/noslip/tram_plate/energized : /turf/open/floor/tram/plate/energized{@OLD} -/turf/open/floor/noslip/tram_platform : /turf/open/floor/tram{@OLD} \ No newline at end of file diff --git a/tools/UpdatePaths/Scripts/79093_tram_and_elevators_repath.txt b/tools/UpdatePaths/Scripts/79093_tram_and_elevators_repath.txt new file mode 100644 index 00000000000..7f2995fe464 --- /dev/null +++ b/tools/UpdatePaths/Scripts/79093_tram_and_elevators_repath.txt @@ -0,0 +1,21 @@ +#comment Repathing for Transport Subsystem + +/obj/structure/industrial_lift{specific_lift_id=@ANY} : /obj/structure/transport/linear{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id} +/obj/structure/industrial_lift/public{specific_lift_id=@ANY} : /obj/structure/transport/linear/public{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id} +/obj/structure/industrial_lift/debug{specific_lift_id=@ANY} : /obj/structure/transport/linear/debug{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id} +/obj/structure/industrial_lift/tram{specific_lift_id=@ANY} : /obj/structure/transport/linear/tram{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id} +/obj/effect/landmark/lift_id{specific_lift_id=@ANY} : /obj/effect/landmark/transport/transport_id{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id} +/obj/effect/landmark/tram/nav/immovable_rod{specific_lift_id=@ANY} : /obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id} +/turf/open/floor/noslip/tram_plate : /turf/open/floor/tram/plate{@OLD} +/turf/open/floor/noslip/tram_plate/energized : /turf/open/floor/tram/plate/energized{@OLD} +/turf/open/floor/noslip/tram_platform : /turf/open/floor/tram{@OLD} +/obj/machinery/door/window/elevator/left{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/left{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id} +/obj/machinery/door/window/elevator/left/directional/north{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/left/directional/north{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id} +/obj/machinery/door/window/elevator/left/directional/south{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/left/directional/south{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id} +/obj/machinery/door/window/elevator/left/directional/east{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/left/directional/east{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id} +/obj/machinery/door/window/elevator/left/directional/west{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/left/directional/west{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id} +/obj/machinery/door/window/elevator/right{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/right{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id} +/obj/machinery/door/window/elevator/right/directional/north{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/right/directional/north{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id} +/obj/machinery/door/window/elevator/right/directional/south{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/right/directional/south{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id} +/obj/machinery/door/window/elevator/right/directional/east{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/right/directional/east{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id} +/obj/machinery/door/window/elevator/right/directional/west{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/right/directional/west{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}