|
154 | 154 | new /obj/effect/temp_visual/portal_animation(start_turf, src, M) |
155 | 155 | playsound(start_turf, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) |
156 | 156 | 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 | + |
158 | 179 | return TRUE |
159 | 180 | return FALSE |
160 | 181 |
|
|
193 | 214 | set_linked() // update portal links |
194 | 215 | . = ..() |
195 | 216 |
|
| 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 | + |
196 | 228 | /obj/effect/portal/permanent/one_way // doesn't have a return portal, can have multiple exits, /obj/effect/landmark/portal_exit to mark them |
197 | 229 | name = "one-way portal" |
198 | 230 | desc = "You get the feeling that this might not be the safest thing you've ever done." |
|
0 commit comments