From 2230c855aeb201df0754ad4c3d16e85dfbcba680 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Mon, 21 Aug 2023 02:14:25 -0400 Subject: [PATCH] Some quake improvements - Use easing functions for quake intensity - Camera distance takes Z height into account --- 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 a9dc3760f..3d7fda055 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -47,6 +47,7 @@ #include "k_respawn.h" #include "k_terrain.h" #include "acs/interface.h" +#include "m_easing.h" #ifdef HW3SOUND #include "hardware/hw3sound.h" @@ -9411,17 +9412,20 @@ void P_DoQuakeOffset(UINT8 view, mappoint_t *viewPos, mappoint_t *offset) ir = quake->intensity; // Modulate with time remaining. - ir = FixedMul(ir, 2 * FRACUNIT * (quake->time + 1) / quake->startTime); + ir = Easing_InOutSine(FRACUNIT * (quake->time + 1) / quake->startTime, ir, 0); // Modulate with distance from epicenter, if it exists. if (quake->radius > 0 && quake->epicenter != NULL) { fixed_t epidist = P_AproxDistance( - viewPos->x - quake->epicenter->x, - viewPos->y - quake->epicenter->y + P_AproxDistance( + viewPos->x - quake->epicenter->x, + viewPos->y - quake->epicenter->y + ), + viewPos->z - quake->epicenter->z ); - ir = FixedMul(ir, FixedDiv(max(0, quake->radius - epidist), quake->radius)); + ir = Easing_InOutSine(min(FRACUNIT, FixedDiv(epidist, quake->radius)), ir, 0); } addZ += ir;