diff --git a/src/d_player.h b/src/d_player.h index 7f3a55587..00bb5d1c5 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -1047,6 +1047,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 9139deab6..95faa2a7b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4102,7 +4102,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; @@ -4171,6 +4171,7 @@ boolean K_Overdrive(player_t *player) player->amps = 0; player->overdriveready = 0; + player->overdrivelenient = false; return true; } @@ -4192,6 +4193,8 @@ boolean K_DefensiveOverdrive(player_t *player) player->overdrivepower = FRACUNIT; player->amps = 0; + player->overdrivelenient = true; + player->overdriveready = false; return true; } @@ -9313,15 +9316,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 a7937fbfc..9398ea373 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")) @@ -960,6 +962,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 9a642cc25..a8638d03d 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -601,6 +601,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); @@ -1224,6 +1225,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);