From faca6ca7b17590d04dd82be48bf7eb9c1761e6f6 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Sun, 29 Jun 2025 22:36:52 -0500 Subject: [PATCH 1/3] Portal beems only work on same Z --- code/game/objects/effects/portals.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 65e4ef3b61a1..a0496337774c 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -154,7 +154,8 @@ new /obj/effect/temp_visual/portal_animation(start_turf, src, M) playsound(start_turf, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) playsound(real_target, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - Beam(real_target, icon_state = "portal", icon = 'maplestation_modules/icons/effects/beam.dmi', time = 0.5 SECONDS) //NON-MODULAR CHANGE + if(start_turf.z == real_target.z) + Beam(real_target, icon_state = "portal", icon = 'maplestation_modules/icons/effects/beam.dmi', time = 0.5 SECONDS) //NON-MODULAR CHANGE return TRUE return FALSE From fafc558aa0562a5b6fac2af999dc64df04b8b8ee Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Wed, 4 Mar 2026 18:48:25 -0600 Subject: [PATCH 2/3] Update --- code/game/objects/effects/portals.dm | 36 ++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 9d06ebd0da77..82e150aa1d80 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -154,8 +154,29 @@ new /obj/effect/temp_visual/portal_animation(start_turf, src, M) playsound(start_turf, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) playsound(real_target, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - if(start_turf.z == real_target.z) - Beam(real_target, icon_state = "portal", icon = 'maplestation_modules/icons/effects/beam.dmi', time = 0.5 SECONDS) //NON-MODULAR CHANGE + var/turf/beam_turf = get_turf(src) + //NON-MODULAR CHANGE + // same z level has a direct beam + if(beam_turf.z == real_target.z) + beam_turf.Beam(real_target, icon_state = "portal", icon = 'maplestation_modules/icons/effects/beam.dmi', time = 0.5 SECONDS) + // similar z level (station-station) splits up the beams per z level travelled + else if(is_valid_z_level(beam_turf, real_target)) + var/z_diff = abs(beam_turf.z - real_target.z) + 1 + var/segment_distance = ceil((get_dist(beam_turf, real_target)) / z_diff) + var/turf/last_segment = beam_turf + for(var/i in 1 to z_diff) + var/turf/next_segment = get_ranged_target_turf_direct(last_segment, real_target, segment_distance) + if(!istype(next_segment)) + break + message_admins("[last_segment.x], [last_segment.y], [last_segment.z] to [next_segment.x], [next_segment.y], [next_segment.z]") + last_segment.Beam(next_segment, icon_state = "portal", icon = 'maplestation_modules/icons/effects/beam.dmi', time = 0.5 SECONDS) + last_segment = get_step_multiz(next_segment, next_segment.z < real_target.z ? UP : DOWN) + if(!istype(last_segment)) + break + // different z level entirely has no indicator (currently...) + else + pass() + return TRUE return FALSE @@ -194,6 +215,17 @@ set_linked() // update portal links . = ..() +/obj/effect/portal/permanent/autolink + +/obj/effect/portal/permanent/autolink/set_linked() + if(linked) + return + for(var/obj/effect/portal/permanent/autolink/P in GLOB.portals - src) + if(P.linked) + continue + P.linked = src + linked = P + /obj/effect/portal/permanent/one_way // doesn't have a return portal, can have multiple exits, /obj/effect/landmark/portal_exit to mark them name = "one-way portal" desc = "You get the feeling that this might not be the safest thing you've ever done." From f9bed0e078623e9cec154a199cca05772246cd7e Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Wed, 4 Mar 2026 18:48:37 -0600 Subject: [PATCH 3/3] Debug --- code/game/objects/effects/portals.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 82e150aa1d80..85907a906636 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -168,7 +168,6 @@ var/turf/next_segment = get_ranged_target_turf_direct(last_segment, real_target, segment_distance) if(!istype(next_segment)) break - message_admins("[last_segment.x], [last_segment.y], [last_segment.z] to [next_segment.x], [next_segment.y], [next_segment.z]") last_segment.Beam(next_segment, icon_state = "portal", icon = 'maplestation_modules/icons/effects/beam.dmi', time = 0.5 SECONDS) last_segment = get_step_multiz(next_segment, next_segment.z < real_target.z ? UP : DOWN) if(!istype(last_segment))