From a03233128d1d3af2476651d65f670a95546b1297 Mon Sep 17 00:00:00 2001 From: Git-Nivrak <59925169+Git-Nivrak@users.noreply.github.com> Date: Sat, 13 Apr 2024 10:12:22 +0300 Subject: [PATCH] Better throw logic (#6040) # About the pull request Throw will now attempt to reach the target rather than the a predefined path that could change if thrown towards an object Tested on local but this affect a lot of stuff so needs to be tested # Explain why it's good for the game When you try to throw something and the target slightly moves one nanosecond after you throw it sucks # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: Throws will now attempt to reach their target rather than the turf they were on when thrown /:cl: --- code/modules/movement/launching/launching.dm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/code/modules/movement/launching/launching.dm b/code/modules/movement/launching/launching.dm index 778c452a3240..3e188abb1067 100644 --- a/code/modules/movement/launching/launching.dm +++ b/code/modules/movement/launching/launching.dm @@ -182,21 +182,17 @@ add_temp_pass_flags(pass_flags) - var/turf/start_turf = get_step_towards(src, LM.target) - var/list/turf/path = get_line(start_turf, LM.target) var/last_loc = loc var/early_exit = FALSE LM.dist = 0 - for (var/turf/T in path) - if (!src || !throwing || loc != last_loc || !isturf(src.loc)) - break + while (src && throwing && loc == last_loc && isturf(src.loc)) // While looks scary at first but it's basically just a for until LM.dist reaches LM.range if (!LM || QDELETED(LM)) early_exit = TRUE break if (LM.dist >= LM.range) break - if (!Move(T)) // If this returns FALSE, then a collision happened + if (!Move(get_step_towards(src, LM.target))) // If this returns FALSE, then a collision happened break last_loc = loc if (++LM.dist >= LM.range)