From 2960351ce6c6ae1fa3e535d1bc63cd9268706a50 Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Thu, 18 Jun 2020 09:37:17 +0200 Subject: [PATCH 1/3] Fixes bullets that are GCed from continuing. Remove legacy --- code/modules/projectiles/projectile.dm | 112 +++++++++++-------------- 1 file changed, 49 insertions(+), 63 deletions(-) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 626bcaf05a8..79555d723a6 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -26,7 +26,6 @@ var/speed = 1 //Amount of deciseconds it takes for projectile to travel var/Angle = null var/spread = 0 //amount (in degrees) of projectile spread - var/legacy = FALSE //legacy projectile system animate_movement = 0 var/ignore_source_check = FALSE @@ -232,74 +231,61 @@ return 1 //Bullets don't drift in space /obj/item/projectile/proc/fire(var/setAngle) + set waitfor = 0 if(setAngle) Angle = setAngle - if(!legacy) //new projectiles - set waitfor = 0 - while(loc) - if(!paused) - if((!( current ) || loc == current)) - current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) - if(isnull(Angle)) - Angle=round(Get_Angle(src,current)) - if(spread) - Angle += (rand() - 0.5) * spread - var/matrix/M = new - M.Turn(Angle) - transform = M - var/Pixel_x=round(sin(Angle)+16*sin(Angle)*2) - var/Pixel_y=round(cos(Angle)+16*cos(Angle)*2) - var/pixel_x_offset = pixel_x + Pixel_x - var/pixel_y_offset = pixel_y + Pixel_y - var/new_x = x - var/new_y = y + while(!QDELETED(src)) + if(!paused) + if((!( current ) || loc == current)) + current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) + if(isnull(Angle)) + Angle=round(Get_Angle(src,current)) + if(spread) + Angle += (rand() - 0.5) * spread + var/matrix/M = new + M.Turn(Angle) + transform = M - while(pixel_x_offset > 16) - pixel_x_offset -= 32 - pixel_x -= 32 - new_x++// x++ - while(pixel_x_offset < -16) - pixel_x_offset += 32 - pixel_x += 32 - new_x-- + var/Pixel_x=round(sin(Angle)+16*sin(Angle)*2) + var/Pixel_y=round(cos(Angle)+16*cos(Angle)*2) + var/pixel_x_offset = pixel_x + Pixel_x + var/pixel_y_offset = pixel_y + Pixel_y + var/new_x = x + var/new_y = y - while(pixel_y_offset > 16) - pixel_y_offset -= 32 - pixel_y -= 32 - new_y++ - while(pixel_y_offset < -16) - pixel_y_offset += 32 - pixel_y += 32 - new_y-- + while(pixel_x_offset > 16) + pixel_x_offset -= 32 + pixel_x -= 32 + new_x++// x++ + while(pixel_x_offset < -16) + pixel_x_offset += 32 + pixel_x += 32 + new_x-- - speed = round(speed) - step_towards(src, locate(new_x, new_y, z)) - if(speed <= 1) - pixel_x = pixel_x_offset - pixel_y = pixel_y_offset - else - animate(src, pixel_x = pixel_x_offset, pixel_y = pixel_y_offset, time = max(1, (speed <= 3 ? speed - 1 : speed))) + while(pixel_y_offset > 16) + pixel_y_offset -= 32 + pixel_y -= 32 + new_y++ + while(pixel_y_offset < -16) + pixel_y_offset += 32 + pixel_y += 32 + new_y-- - if(original && (original.layer>=2.75) || ismob(original)) - if(loc == get_turf(original)) - if(!(original in permutated)) - Bump(original, 1) - Range() - sleep(max(1, speed)) - else //old projectile system - set waitfor = 0 - while(loc) - if(!paused) - if((!( current ) || loc == current)) - current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) - step_towards(src, current) - if(original && (original.layer>=2.75) || ismob(original)) - if(loc == get_turf(original)) - if(!(original in permutated)) - Bump(original, 1) - Range() - sleep(1) + speed = round(speed) + step_towards(src, locate(new_x, new_y, z)) + if(speed <= 1) + pixel_x = pixel_x_offset + pixel_y = pixel_y_offset + else + animate(src, pixel_x = pixel_x_offset, pixel_y = pixel_y_offset, time = max(1, (speed <= 3 ? speed - 1 : speed))) + + if(original && (original.layer>=2.75) || ismob(original)) + if(loc == get_turf(original)) + if(!(original in permutated)) + Bump(original, 1) + Range() + sleep(max(1, speed)) obj/item/projectile/proc/reflect_back(atom/source, list/position_modifiers = list(0, 0, 0, 0, 0, -1, 1, -2, 2)) if(starting) @@ -311,7 +297,7 @@ obj/item/projectile/proc/reflect_back(atom/source, list/position_modifiers = lis firer = source // The reflecting mob will be the new firer else firer = null // Reflected by something other than a mob so firer will be null - + // redirect the projectile original = locate(new_x, new_y, z) starting = curloc From b6f26be8da8fb4aa6bbe66829fc1d1a23738eb10 Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Sat, 20 Jun 2020 08:43:39 +0200 Subject: [PATCH 2/3] refactor --- code/modules/projectiles/projectile.dm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 79555d723a6..d3a39894a90 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -231,24 +231,24 @@ return 1 //Bullets don't drift in space /obj/item/projectile/proc/fire(var/setAngle) - set waitfor = 0 + set waitfor = FALSE if(setAngle) Angle = setAngle while(!QDELETED(src)) if(!paused) - if((!( current ) || loc == current)) - current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) + if((!current || loc == current)) + current = locate(Clamp(x + xo, 1, world.maxx), Clamp(y + yo, 1, world.maxy), z) if(isnull(Angle)) - Angle=round(Get_Angle(src,current)) + Angle = round(Get_Angle(src, current)) if(spread) Angle += (rand() - 0.5) * spread var/matrix/M = new M.Turn(Angle) transform = M - var/Pixel_x=round(sin(Angle)+16*sin(Angle)*2) - var/Pixel_y=round(cos(Angle)+16*cos(Angle)*2) + var/Pixel_x = round(sin(Angle) + 16 * sin(Angle) * 2) + var/Pixel_y = round(cos(Angle) + 16 * cos(Angle) * 2) var/pixel_x_offset = pixel_x + Pixel_x var/pixel_y_offset = pixel_y + Pixel_y var/new_x = x @@ -257,7 +257,7 @@ while(pixel_x_offset > 16) pixel_x_offset -= 32 pixel_x -= 32 - new_x++// x++ + new_x++ // x++ while(pixel_x_offset < -16) pixel_x_offset += 32 pixel_x += 32 @@ -280,10 +280,10 @@ else animate(src, pixel_x = pixel_x_offset, pixel_y = pixel_y_offset, time = max(1, (speed <= 3 ? speed - 1 : speed))) - if(original && (original.layer>=2.75) || ismob(original)) + if(ismob(original) || (original && original.layer >= 2.75)) if(loc == get_turf(original)) if(!(original in permutated)) - Bump(original, 1) + Bump(original, TRUE) Range() sleep(max(1, speed)) From 44e73fe219f9b93be3d136df2c2d90b768547b5c Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Sun, 21 Jun 2020 07:51:06 +0200 Subject: [PATCH 3/3] Review tweaks --- code/modules/projectiles/projectile.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index d3a39894a90..44bf4afa72f 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -280,7 +280,7 @@ else animate(src, pixel_x = pixel_x_offset, pixel_y = pixel_y_offset, time = max(1, (speed <= 3 ? speed - 1 : speed))) - if(ismob(original) || (original && original.layer >= 2.75)) + if(original && (original.layer >= 2.75 || ismob(original))) if(loc == get_turf(original)) if(!(original in permutated)) Bump(original, TRUE)