From 2d95ea6b2dad4b99a560a70096f8841ffa6765db Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 5 Jan 2021 04:54:24 +0100 Subject: [PATCH] [MIRROR] Makes a few changes to tesla movment (#2499) * Makes telsas move properly, they were ping ponging around due to how miniballs move, I've made the shocked targets list properly fill, and make the shocked targets list retain some entries to preserve momentum (#55712) * Makes a few changes to tesla movment Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> --- code/modules/power/tesla/energy_ball.dm | 26 +++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 0c7e810fe14..18fea4a5dd4 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -73,16 +73,19 @@ pixel_x = 0 pixel_y = 0 - shocked_things.Cut() - tesla_zap(src, 3, TESLA_DEFAULT_POWER, shocked_targets = shocked_things) + shocked_things.Cut(1, shocked_things.len / 1.3) + var/list/shocking_info = list() + tesla_zap(src, 3, TESLA_DEFAULT_POWER, shocked_targets = shocking_info) pixel_x = -32 pixel_y = -32 for (var/ball in orbiting_balls) var/range = rand(1, clamp(orbiting_balls.len, 2, 3)) var/list/temp_shock = list() - tesla_zap(ball, range, TESLA_MINI_POWER/7*range, shocked_targets = temp_shock) - shocked_things += temp_shock + //We zap off the main ball instead of ourselves to make things looks proper + tesla_zap(src, range, TESLA_MINI_POWER/7*range, shocked_targets = temp_shock) + shocking_info += temp_shock + shocked_things += shocking_info /obj/energy_ball/examine(mob/user) . = ..() @@ -91,9 +94,10 @@ /obj/energy_ball/proc/move(move_amount) var/list/dirs = GLOB.alldirs.Copy() - for (var/i in 1 to 30) - var/atom/real_thing = pick(shocked_things) - dirs += get_dir(src, real_thing) //Carry some momentum yeah? Just a bit tho + if(shocked_things.len) + for (var/i in 1 to 30) + var/atom/real_thing = pick(shocked_things) + dirs += get_dir(src, real_thing) //Carry some momentum yeah? Just a bit tho for (var/i in 0 to move_amount) var/move_dir = pick(dirs) //ensures teslas don't just sit around if (target && prob(10)) @@ -335,10 +339,12 @@ power /= 1.5 else - power = closest_atom.zap_act(power, zap_flags, shocked_targets) + power = closest_atom.zap_act(power, zap_flags) if(prob(20))//I know I know - tesla_zap(closest_atom, next_range, power * 0.5, zap_flags, shocked_targets.Copy())//No pass by ref, it's a bad play - tesla_zap(closest_atom, next_range, power * 0.5, zap_flags, shocked_targets.Copy()) + var/list/shocked_copy = shocked_targets.Copy() + tesla_zap(closest_atom, next_range, power * 0.5, zap_flags, shocked_copy)//Normally I'd copy here so grounding rods work properly, but it fucks with movement + tesla_zap(closest_atom, next_range, power * 0.5, zap_flags, shocked_targets) + shocked_targets += shocked_copy else tesla_zap(closest_atom, next_range, power, zap_flags, shocked_targets)