Skip to content

Commit dc0cbf5

Browse files
authored
Portal beams only manifest on same Z (#735)
1 parent cb6786b commit dc0cbf5

1 file changed

Lines changed: 33 additions & 1 deletion

File tree

code/game/objects/effects/portals.dm

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,28 @@
154154
new /obj/effect/temp_visual/portal_animation(start_turf, src, M)
155155
playsound(start_turf, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
156156
playsound(real_target, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
157-
Beam(real_target, icon_state = "portal", icon = 'maplestation_modules/icons/effects/beam.dmi', time = 0.5 SECONDS) //NON-MODULAR CHANGE
157+
var/turf/beam_turf = get_turf(src)
158+
//NON-MODULAR CHANGE
159+
// same z level has a direct beam
160+
if(beam_turf.z == real_target.z)
161+
beam_turf.Beam(real_target, icon_state = "portal", icon = 'maplestation_modules/icons/effects/beam.dmi', time = 0.5 SECONDS)
162+
// similar z level (station-station) splits up the beams per z level travelled
163+
else if(is_valid_z_level(beam_turf, real_target))
164+
var/z_diff = abs(beam_turf.z - real_target.z) + 1
165+
var/segment_distance = ceil((get_dist(beam_turf, real_target)) / z_diff)
166+
var/turf/last_segment = beam_turf
167+
for(var/i in 1 to z_diff)
168+
var/turf/next_segment = get_ranged_target_turf_direct(last_segment, real_target, segment_distance)
169+
if(!istype(next_segment))
170+
break
171+
last_segment.Beam(next_segment, icon_state = "portal", icon = 'maplestation_modules/icons/effects/beam.dmi', time = 0.5 SECONDS)
172+
last_segment = get_step_multiz(next_segment, next_segment.z < real_target.z ? UP : DOWN)
173+
if(!istype(last_segment))
174+
break
175+
// different z level entirely has no indicator (currently...)
176+
else
177+
pass()
178+
158179
return TRUE
159180
return FALSE
160181

@@ -193,6 +214,17 @@
193214
set_linked() // update portal links
194215
. = ..()
195216

217+
/obj/effect/portal/permanent/autolink
218+
219+
/obj/effect/portal/permanent/autolink/set_linked()
220+
if(linked)
221+
return
222+
for(var/obj/effect/portal/permanent/autolink/P in GLOB.portals - src)
223+
if(P.linked)
224+
continue
225+
P.linked = src
226+
linked = P
227+
196228
/obj/effect/portal/permanent/one_way // doesn't have a return portal, can have multiple exits, /obj/effect/landmark/portal_exit to mark them
197229
name = "one-way portal"
198230
desc = "You get the feeling that this might not be the safest thing you've ever done."

0 commit comments

Comments
 (0)