From 19d9d1e318efb67d6fff98c64f4cc756fb2a7d1a Mon Sep 17 00:00:00 2001 From: James R Date: Fri, 5 Jan 2024 18:05:40 -0800 Subject: [PATCH] Battle: use Easing_OutSine to shrink Overtime Barrier Modifies netsave. --- src/k_battle.c | 8 +++++++- src/k_battle.h | 1 + src/p_saveg.c | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/k_battle.c b/src/k_battle.c index 78da21dc0..02aa9c24a 100644 --- a/src/k_battle.c +++ b/src/k_battle.c @@ -23,6 +23,7 @@ #include "k_rank.h" #include "music.h" #include "hu_stuff.h" +#include "m_easing.h" #define BARRIER_MIN_RADIUS (768 * mapobjectscale) @@ -701,6 +702,7 @@ void K_RunBattleOvertime(void) { S_StartSound(NULL, sfx_kc40); P_StartQuake(5, 64 * mapobjectscale, 0, NULL); + battleovertime.start = leveltime; } if (!Music_Playing("level") && !Music_Playing("battle_overtime")) @@ -719,7 +721,11 @@ void K_RunBattleOvertime(void) const fixed_t oldradius = battleovertime.radius; if (battleovertime.radius > minradius) - battleovertime.radius -= (battleovertime.initial_radius / (30*TICRATE)); + { + tic_t t = leveltime - battleovertime.start; + const tic_t duration = 30*TICRATE; + battleovertime.radius = Easing_OutSine(min(t, duration) * FRACUNIT / duration, battleovertime.initial_radius, minradius); + } if (battleovertime.radius <= minradius && oldradius > minradius) { diff --git a/src/k_battle.h b/src/k_battle.h index 023ba0c97..645821920 100644 --- a/src/k_battle.h +++ b/src/k_battle.h @@ -20,6 +20,7 @@ extern struct battleovertime UINT16 enabled; ///< Has this been initalized yet? fixed_t radius; ///< Radius of kill field fixed_t initial_radius; ///< Starting radius of kill field + tic_t start; ///< Leveltime to decrease kill field radius from fixed_t x, y, z; ///< Position to center on } battleovertime; diff --git a/src/p_saveg.c b/src/p_saveg.c index ea9b91275..26b600fa1 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -6454,6 +6454,7 @@ static void P_NetArchiveMisc(savebuffer_t *save, boolean resending) WRITEUINT16(save->p, battleovertime.enabled); WRITEFIXED(save->p, battleovertime.radius); WRITEFIXED(save->p, battleovertime.initial_radius); + WRITEUINT32(save->p, battleovertime.start); WRITEFIXED(save->p, battleovertime.x); WRITEFIXED(save->p, battleovertime.y); WRITEFIXED(save->p, battleovertime.z); @@ -6639,6 +6640,7 @@ static boolean P_NetUnArchiveMisc(savebuffer_t *save, boolean reloading) battleovertime.enabled = READUINT16(save->p); battleovertime.radius = READFIXED(save->p); battleovertime.initial_radius = READFIXED(save->p); + battleovertime.start = READUINT32(save->p); battleovertime.x = READFIXED(save->p); battleovertime.y = READFIXED(save->p); battleovertime.z = READFIXED(save->p);