From 716ba4cabbd401fb465062ebcab9812d9f4b9be6 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sat, 24 Aug 2024 20:20:30 -0700 Subject: [PATCH] Extend defensive Overdrive until you leave painstate --- src/d_player.h | 1 + src/k_kart.c | 27 ++++++++++++++++++++------- src/lua_playerlib.c | 4 ++++ src/p_saveg.c | 2 ++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 6be32e47c..f3f26b808 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -1039,6 +1039,7 @@ struct player_t UINT16 overshield; fixed_t overdrivepower; UINT8 overdriveready; + boolean overdrivelenient; UINT8 itemflags; // holds IF_ flags (see itemflags_t) diff --git a/src/k_kart.c b/src/k_kart.c index ac2663e2c..2a8814a06 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4086,7 +4086,7 @@ void K_AwardPlayerAmps(player_t *player, UINT8 amps) { // Auto Overdrive! // If this is a fresh OD, give 'em some extra juice to make up for lack of flexibility. - if (!player->overdrive && player->mo && !P_MobjWasRemoved(player->mo)) + if (!player->overdrive && player->mo && !P_MobjWasRemoved(player->mo) && player->overdriveready == 0) { S_StartSound(player->mo, sfx_gshac); player->amps *= 2; @@ -4145,6 +4145,7 @@ boolean K_Overdrive(player_t *player) player->amps = 0; player->overdriveready = 0; + player->overdrivelenient = false; return true; } @@ -4166,6 +4167,8 @@ boolean K_DefensiveOverdrive(player_t *player) player->overdrivepower = FRACUNIT; player->amps = 0; + player->overdrivelenient = true; + player->overdriveready = false; return true; } @@ -9204,15 +9207,25 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) } } - if (player->overdrive > 0 && onground == true) + if (player->overdrivelenient) { - player->overdrive--; + // This is a Defensive Overdrive and shouldn't start deducting time until we recover + if (!P_PlayerInPain(player)) + player->overdrivelenient = false; + } + else + { + if (player->overdrive > 0 && onground == true) + { + player->overdrive--; + } + + if (player->overshield > 0 && onground == true) + { + player->overshield--; + } } - if (player->overshield > 0 && onground == true) - { - player->overshield--; - } if (player->wavedashboost == 0 || player->wavedashpower > FRACUNIT) { diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 700eeb98a..6b4eabc69 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -376,6 +376,8 @@ static int player_get(lua_State *L) lua_pushinteger(L, plr->overdrivepower); else if (fastcmp(field,"overdriveready")) lua_pushinteger(L, plr->overdriveready); + else if (fastcmp(field,"overdrivelenient")) + lua_pushinteger(L, plr->overdrivelenient); else if (fastcmp(field,"speedpunt")) lua_pushinteger(L, plr->speedpunt); else if (fastcmp(field,"trickcharge")) @@ -954,6 +956,8 @@ static int player_set(lua_State *L) plr->overdrivepower = luaL_checkinteger(L, 3); else if (fastcmp(field,"overdriveready")) plr->overdriveready = luaL_checkinteger(L, 3); + else if (fastcmp(field,"overdrivelenient")) + plr->overdrivelenient = luaL_checkinteger(L, 3); else if (fastcmp(field,"speedpunt")) plr->speedpunt = luaL_checkinteger(L, 3); else if (fastcmp(field,"trickcharge")) diff --git a/src/p_saveg.c b/src/p_saveg.c index 3b613f95d..b983af70b 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -588,6 +588,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEFIXED(save->p, players[i].wavedashpower); WRITEFIXED(save->p, players[i].overdrivepower); WRITEUINT8(save->p, players[i].overdriveready); + WRITEUINT8(save->p, players[i].overdrivelenient); WRITEUINT16(save->p, players[i].speedpunt); WRITEUINT16(save->p, players[i].trickcharge); @@ -1203,6 +1204,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].wavedashpower = READFIXED(save->p); players[i].overdrivepower = READFIXED(save->p); players[i].overdriveready = READUINT8(save->p); + players[i].overdrivelenient = READUINT8(save->p); players[i].speedpunt = READUINT16(save->p); players[i].trickcharge = READUINT16(save->p);