From ca0b5902ba1ee80db48fbaab1e2ebc033033e748 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 23 Sep 2023 06:11:40 -0400 Subject: [PATCH] Fix use of easing functions, add distance buffer --- src/p_spec.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/p_spec.c b/src/p_spec.c index d658a7648..dd73fcd7d 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -9412,20 +9412,24 @@ void P_DoQuakeOffset(UINT8 view, mappoint_t *viewPos, mappoint_t *offset) ir = quake->intensity; // Modulate with time remaining. - ir = Easing_InOutSine(FRACUNIT * (quake->time + 1) / quake->startTime, ir, 0); + const fixed_t timeEase = (FRACUNIT * ((quake->startTime - quake->time) - 1)) / quake->startTime; + ir = Easing_InCubic(timeEase, ir, 0); // Modulate with distance from epicenter, if it exists. if (quake->radius > 0 && quake->epicenter != NULL) { - fixed_t epidist = P_AproxDistance( + const fixed_t distBuffer = 256 * mapobjectscale; // add a small buffer zone before it starts to drop off + const fixed_t epidist = P_AproxDistance( P_AproxDistance( viewPos->x - quake->epicenter->x, viewPos->y - quake->epicenter->y ), viewPos->z - quake->epicenter->z - ); + ) - distBuffer; - ir = Easing_InOutSine(min(FRACUNIT, FixedDiv(epidist, quake->radius)), ir, 0); + + const fixed_t distEase = min(FixedDiv(max(epidist, 0), quake->radius), FRACUNIT); + ir = Easing_InCubic(distEase, ir, 0); } addZ += ir;