diff --git a/code/modules/projectiles/effects.dm b/code/modules/projectiles/effects.dm index d765e353da..7874eeb383 100644 --- a/code/modules/projectiles/effects.dm +++ b/code/modules/projectiles/effects.dm @@ -11,8 +11,8 @@ if(istype(M)) transform = M -/obj/effect/projectile/proc/activate() - spawn(3) +/obj/effect/projectile/proc/activate(var/kill_delay = 3) + spawn(kill_delay) qdel(src) //see effect_system.dm - sets loc to null and lets GC handle removing these effects return diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 82b07b21c5..9feebbd64b 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -296,25 +296,26 @@ before_move() Move(location.return_turf()) - if(first_step) - muzzle_effect(effect_transform) - first_step = 0 - else - tracer_effect(effect_transform) - if(!bumped && !isturf(original)) if(loc == get_turf(original)) if(!(original in permutated)) if(Bump(original)) return + if(first_step) + muzzle_effect(effect_transform) + first_step = 0 + else if(!bumped) + tracer_effect(effect_transform) + if(!hitscan) sleep(step_delay) //add delay between movement iterations if it's not a hitscan weapon /obj/item/projectile/proc/process_step(first_step = 0) - + return /obj/item/projectile/proc/before_move() + return /obj/item/projectile/proc/setup_trajectory() // trajectory dispersion @@ -355,7 +356,10 @@ P.set_transform(M) P.pixel_x = location.pixel_x P.pixel_y = location.pixel_y - P.activate() + if(!hitscan) + P.activate(step_delay) //if not a hitscan projectile, remove after a single delay + else + P.activate() /obj/item/projectile/proc/impact_effect(var/matrix/M) if(ispath(tracer_type)) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index eb515298ef..8aa493404a 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -8,6 +8,7 @@ eyeblur = 4 var/frequency = 1 hitscan = 1 + invisibility = 101 //beam projectiles are invisible as they are rendered by the effect engine muzzle_type = /obj/effect/projectile/laser/muzzle tracer_type = /obj/effect/projectile/laser/tracer diff --git a/html/changelogs/Loganbacca-projectilefixes.yml b/html/changelogs/Loganbacca-projectilefixes.yml new file mode 100644 index 0000000000..ec05a99f6e --- /dev/null +++ b/html/changelogs/Loganbacca-projectilefixes.yml @@ -0,0 +1,4 @@ +author: Loganbacca +delete-after: True +changes: + - bugfix: "Fixed visual bugs with projectile effects."