From e51ff7684a3eb1f81ee51767a27ed6b4ccb4e390 Mon Sep 17 00:00:00 2001 From: SepuIka <63119568+SepuIka@users.noreply.github.com> Date: Mon, 6 May 2024 21:43:19 +0300 Subject: [PATCH] Fixing shell effects. Updating affects algorithm --- code/modules/projectiles/effects.dm | 45 +++++++++++++----- code/modules/projectiles/projectile.dm | 1 + code/modules/projectiles/projectile/cannon.dm | 25 +++++++--- icons/effects/projectiles.dmi | Bin 8427 -> 8424 bytes 4 files changed, 52 insertions(+), 19 deletions(-) diff --git a/code/modules/projectiles/effects.dm b/code/modules/projectiles/effects.dm index faf140e9fa..40b573e837 100644 --- a/code/modules/projectiles/effects.dm +++ b/code/modules/projectiles/effects.dm @@ -4,6 +4,9 @@ layer = 5 var/angle = 0 var/call_time = 0 + var/life_time = 2 + var/alpha_modifier = 1 + var/update_time = 0.6 /obj/effect/projectile/New(var/turf/location) if (istype(location)) @@ -19,12 +22,12 @@ /obj/effect/projectile/proc/update() var/dt = world.time - call_time - if(dt > 2) + if(dt > life_time) loc = null qdel(src) return - alpha *= 0.9 - spawn(0.3) + alpha *= alpha_modifier + spawn(update_time) update() //---------------------------- @@ -51,24 +54,27 @@ /obj/effect/projectile/impact icon_state = "dust_cloud_generic" + life_time = 6 + alpha_modifier = 0.9 + update_time = 0.5 var/speed_modifier = 1 /obj/effect/projectile/impact/activate(var/direction) pixel_x = cos(direction) * 32 pixel_y = sin(direction) * 32 call_time = world.time - var/dispersion = rand(-30, 30) + var/dispersion = rand(-60, 60) angle = direction + dispersion - 180 - speed_modifier = sqrt(abs(dispersion)) + speed_modifier *= sqrt(abs(dispersion)) * 0.5 update() /obj/effect/projectile/impact/update() var/dt = world.time - call_time - if(dt > 5) + if(dt > life_time) loc = null qdel(src) return - alpha *= 0.85 + alpha *= alpha_modifier var/ds = 20 if(speed_modifier != 0) ds /= speed_modifier @@ -76,15 +82,25 @@ ds /= dt pixel_x += cos(angle) * sqrt(ds) pixel_y += sin(angle) * sqrt(ds) - spawn(0.4) + spawn(update_time) update() +/obj/effect/projectile/impact/heavy + icon_state = "dust_heavy_cloud_generic" + life_time = 10 + alpha_modifier = 0.9 + update_time = 0.6 + speed_modifier = 1.5 + //---------------------------- // Tracer //---------------------------- /obj/effect/projectile/tracer icon_state = "tracer_white" + life_time = 6 + alpha_modifier = 0.9 + update_time = 0.7 /obj/effect/projectile/tracer/activate(var/direction, var/pixel_dist, var/turf/starting) angle = direction @@ -92,21 +108,23 @@ pixel_y = (sin(angle) * pixel_dist) - ((y - starting.y) * world.icon_size) transform = turn(transform, -angle) call_time = world.time - spawn(0.5) + spawn() update() /obj/effect/projectile/tracer/update() var/dt = world.time - call_time - if(dt > 2) + if(dt > life_time) loc = null qdel(src) return - alpha *= 0.8 - spawn(0.6) + alpha *= alpha_modifier + spawn(update_time) update() /obj/effect/projectile/tracer/minor alpha = 64 + life_time = 3 + alpha_modifier = 0.7 /obj/effect/projectile/tracer/red icon_state = "tracer_red" @@ -115,4 +133,5 @@ icon_state = "tracer_green" /obj/effect/projectile/tracer/shell - icon_state = "shell_tracer_white" \ No newline at end of file + icon_state = "shell_tracer_white" + life_time = 10 \ No newline at end of file diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 825e4a9981..b30175a9cd 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -706,6 +706,7 @@ if (istype(src, /obj/item/projectile/shell)) if (loc == trajectory.target) var/obj/item/projectile/shell/S = src + on_impact(T) S.initiate(loc) return FALSE diff --git a/code/modules/projectiles/projectile/cannon.dm b/code/modules/projectiles/projectile/cannon.dm index c7ec32c361..8c26c568a7 100644 --- a/code/modules/projectiles/projectile/cannon.dm +++ b/code/modules/projectiles/projectile/cannon.dm @@ -16,10 +16,11 @@ atype = "HE" tracer_type = /obj/effect/projectile/tracer/shell muzzle_type = /obj/effect/projectile/bullet/muzzle + impact_type = /obj/effect/projectile/impact/heavy var/turf/targloc = null var/initiated = FALSE -/obj/item/projectile/shell/update_icon() +/obj/item/projectile/shell/New() ..() icon_state = "[atype]_shell" @@ -40,12 +41,11 @@ return ..() /obj/item/projectile/shell/on_impact(var/atom/A) - impact_effect(effect_transform) // generate impact effect playsound(src, "ric_sound", 50, TRUE, -2) if (istype(A, /turf)) var/turf/T = A if (atype == "cannonball") - if (!istype(T, /turf/floor/beach) && !istype(T, /turf/floor/broken_floor)) + if (!istype(T, /turf/floor/beach) && !istype(T, /turf/floor/broken_floor) && !istype(T, /turf/floor/trench)) T.ChangeTurf(/turf/floor/dirt/burned) explosion(T, 1, 1, 1, 2) else @@ -56,6 +56,17 @@ qdel(src) return TRUE +/obj/item/projectile/shell/impact_effect() + if (ispath(impact_type)) + var/turf/effect_loc = null + if(permutated.len > 0) + effect_loc = permutated[permutated.len] + else + effect_loc = starting + for(var/i = 0, i < 10, i++) + var/obj/effect/projectile/P = new impact_type(effect_loc) + if (istype(P)) + P.activate(get_angle()) /obj/item/projectile/shell/launch(atom/target, mob/user, obj/structure/cannon/modern/tank/launcher) targloc = get_turf(target) @@ -97,7 +108,8 @@ if(!T) return var/caliber_modifier = clamp(round(caliber / 50), 0, 4) - + if (!istype(T, /turf/floor/beach) && !istype(T, /turf/floor/broken_floor) && !istype(T, /turf/floor/trench)) + T.ChangeTurf(/turf/floor/dirt/burned) if (atype == "HE") var/he_range = caliber_modifier var/list/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment/short_range = 1) @@ -183,8 +195,9 @@ icon = 'icons/obj/projectiles.dmi' icon_state = "bullet" -/obj/item/projectile/shell/autocannon/update_icon() - return +/obj/item/projectile/shell/autocannon/New() + ..() + icon_state = "bullet" /obj/item/projectile/shell/autocannon/a20_aphe atype = "AP" diff --git a/icons/effects/projectiles.dmi b/icons/effects/projectiles.dmi index 36b25cf12988fe7fa2f1abb0e4e65c3d318797eb..c84c6b6ce8a027736aaf93fdc36d6d497cd940fd 100644 GIT binary patch literal 8424 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 Xf9|GNloWgWx&S99tt?d|X#)HYrPj{; literal 8427 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