From 9b5bd70caeb3c78157baf3cec3c374f47a493e46 Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Fri, 24 Feb 2023 00:30:21 -0700 Subject: [PATCH] Briefly lock out TRIPWIRE_BLASTER after failing a tripwire --- src/d_player.h | 2 ++ src/k_kart.c | 12 +++++++++++- src/lua_playerlib.c | 4 ++++ src/p_saveg.c | 4 ++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/d_player.h b/src/d_player.h index e71063fe4..12cab4a9a 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -661,6 +661,8 @@ struct player_t UINT8 eggmanTransferDelay; + UINT8 tripwireReboundDelay; // When failing Tripwire, brieftly lock out speed-based tripwire pass (anti-cheese) + mobj_t *stumbleIndicator; #ifdef HWRENDER diff --git a/src/k_kart.c b/src/k_kart.c index 45a8eb900..01778ab86 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2683,7 +2683,7 @@ tripwirepass_t K_TripwirePassConditions(player_t *player) if ( player->flamedash || - player->speed > 2 * K_GetKartSpeed(player, false, false) + (player->speed > 2 * K_GetKartSpeed(player, false, false) && player->tripwireReboundDelay == 0) ) return TRIPWIRE_BOOST; @@ -4078,10 +4078,17 @@ void K_TumbleInterrupt(player_t *player) 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) S_StartSound(player->mo, sfx_ssa015); else if (state == TRIPSTATE_BLOCKED) + { S_StartSound(player->mo, sfx_kc40); + player->tripwireReboundDelay = 60; + } player->tripwireState = state; K_AddHitLag(player->mo, 10, false); @@ -7713,6 +7720,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->eggmanTransferDelay) player->eggmanTransferDelay--; + if (player->tripwireReboundDelay) + player->tripwireReboundDelay--; + if (player->ringdelay) player->ringdelay--; diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 7195c90f0..211f83867 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -306,6 +306,8 @@ static int player_get(lua_State *L) lua_pushinteger(L, plr->tripwirePass); else if (fastcmp(field,"tripwireLeniency")) lua_pushinteger(L, plr->tripwireLeniency); + else if (fastcmp(field,"tripwireReboundDelay")) + lua_pushinteger(L, plr->tripwireReboundDelay); /* else if (fastcmp(field,"itemroulette")) lua_pushinteger(L, plr->itemroulette); @@ -684,6 +686,8 @@ static int player_set(lua_State *L) plr->tripwirePass = luaL_checkinteger(L, 3); else if (fastcmp(field,"tripwireLeniency")) plr->tripwireLeniency = luaL_checkinteger(L, 3); + else if (fastcmp(field,"tripwireReboundDelay")) + plr->tripwireReboundDelay = luaL_checkinteger(L, 3); /* else if (fastcmp(field,"itemroulette")) plr->itemroulette = luaL_checkinteger(L, 3); diff --git a/src/p_saveg.c b/src/p_saveg.c index 453eae49c..75c08b834 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -395,6 +395,8 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEUINT8(save->p, players[i].eggmanTransferDelay); + WRITEUINT8(save->p, players[i].tripwireReboundDelay); + // respawnvars_t WRITEUINT8(save->p, players[i].respawn.state); 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].tripwireReboundDelay = READUINT8(save->p); + // respawnvars_t players[i].respawn.state = READUINT8(save->p); players[i].respawn.wp = (waypoint_t *)(size_t)READUINT32(save->p);