Extend defensive Overdrive until you leave painstate

This commit is contained in:
Antonio Martinez 2024-08-24 20:20:30 -07:00
parent 5c9cc631c4
commit 716ba4cabb
4 changed files with 27 additions and 7 deletions

View file

@ -1039,6 +1039,7 @@ struct player_t
UINT16 overshield;
fixed_t overdrivepower;
UINT8 overdriveready;
boolean overdrivelenient;
UINT8 itemflags; // holds IF_ flags (see itemflags_t)

View file

@ -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)
{

View file

@ -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"))

View file

@ -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);