Briefly lock out TRIPWIRE_BLASTER after failing a tripwire

This commit is contained in:
AJ Martinez 2023-02-24 00:30:21 -07:00
parent ffb0596581
commit 9b5bd70cae
4 changed files with 21 additions and 1 deletions

View file

@ -661,6 +661,8 @@ struct player_t
UINT8 eggmanTransferDelay; UINT8 eggmanTransferDelay;
UINT8 tripwireReboundDelay; // When failing Tripwire, brieftly lock out speed-based tripwire pass (anti-cheese)
mobj_t *stumbleIndicator; mobj_t *stumbleIndicator;
#ifdef HWRENDER #ifdef HWRENDER

View file

@ -2683,7 +2683,7 @@ tripwirepass_t K_TripwirePassConditions(player_t *player)
if ( if (
player->flamedash || player->flamedash ||
player->speed > 2 * K_GetKartSpeed(player, false, false) (player->speed > 2 * K_GetKartSpeed(player, false, false) && player->tripwireReboundDelay == 0)
) )
return TRIPWIRE_BOOST; return TRIPWIRE_BOOST;
@ -4078,10 +4078,17 @@ void K_TumbleInterrupt(player_t *player)
void K_ApplyTripWire(player_t *player, tripwirestate_t state) void K_ApplyTripWire(player_t *player, tripwirestate_t state)
{ {
// We are either softlocked or wildly misbehaving. Stop that!
if (state == TRIPSTATE_BLOCKED && player->tripwireReboundDelay && (player->speed > 5 * K_GetKartSpeed(player, false, false)))
K_TumblePlayer(player, NULL, NULL);
if (state == TRIPSTATE_PASSED) if (state == TRIPSTATE_PASSED)
S_StartSound(player->mo, sfx_ssa015); S_StartSound(player->mo, sfx_ssa015);
else if (state == TRIPSTATE_BLOCKED) else if (state == TRIPSTATE_BLOCKED)
{
S_StartSound(player->mo, sfx_kc40); S_StartSound(player->mo, sfx_kc40);
player->tripwireReboundDelay = 60;
}
player->tripwireState = state; player->tripwireState = state;
K_AddHitLag(player->mo, 10, false); K_AddHitLag(player->mo, 10, false);
@ -7713,6 +7720,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->eggmanTransferDelay) if (player->eggmanTransferDelay)
player->eggmanTransferDelay--; player->eggmanTransferDelay--;
if (player->tripwireReboundDelay)
player->tripwireReboundDelay--;
if (player->ringdelay) if (player->ringdelay)
player->ringdelay--; player->ringdelay--;

View file

@ -306,6 +306,8 @@ static int player_get(lua_State *L)
lua_pushinteger(L, plr->tripwirePass); lua_pushinteger(L, plr->tripwirePass);
else if (fastcmp(field,"tripwireLeniency")) else if (fastcmp(field,"tripwireLeniency"))
lua_pushinteger(L, plr->tripwireLeniency); lua_pushinteger(L, plr->tripwireLeniency);
else if (fastcmp(field,"tripwireReboundDelay"))
lua_pushinteger(L, plr->tripwireReboundDelay);
/* /*
else if (fastcmp(field,"itemroulette")) else if (fastcmp(field,"itemroulette"))
lua_pushinteger(L, plr->itemroulette); lua_pushinteger(L, plr->itemroulette);
@ -684,6 +686,8 @@ static int player_set(lua_State *L)
plr->tripwirePass = luaL_checkinteger(L, 3); plr->tripwirePass = luaL_checkinteger(L, 3);
else if (fastcmp(field,"tripwireLeniency")) else if (fastcmp(field,"tripwireLeniency"))
plr->tripwireLeniency = luaL_checkinteger(L, 3); plr->tripwireLeniency = luaL_checkinteger(L, 3);
else if (fastcmp(field,"tripwireReboundDelay"))
plr->tripwireReboundDelay = luaL_checkinteger(L, 3);
/* /*
else if (fastcmp(field,"itemroulette")) else if (fastcmp(field,"itemroulette"))
plr->itemroulette = luaL_checkinteger(L, 3); plr->itemroulette = luaL_checkinteger(L, 3);

View file

@ -395,6 +395,8 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEUINT8(save->p, players[i].eggmanTransferDelay); WRITEUINT8(save->p, players[i].eggmanTransferDelay);
WRITEUINT8(save->p, players[i].tripwireReboundDelay);
// respawnvars_t // respawnvars_t
WRITEUINT8(save->p, players[i].respawn.state); WRITEUINT8(save->p, players[i].respawn.state);
WRITEUINT32(save->p, K_GetWaypointHeapIndex(players[i].respawn.wp)); WRITEUINT32(save->p, K_GetWaypointHeapIndex(players[i].respawn.wp));
@ -750,6 +752,8 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].eggmanTransferDelay = READUINT8(save->p); players[i].eggmanTransferDelay = READUINT8(save->p);
players[i].tripwireReboundDelay = READUINT8(save->p);
// respawnvars_t // respawnvars_t
players[i].respawn.state = READUINT8(save->p); players[i].respawn.state = READUINT8(save->p);
players[i].respawn.wp = (waypoint_t *)(size_t)READUINT32(save->p); players[i].respawn.wp = (waypoint_t *)(size_t)READUINT32(save->p);