From 87d5eb626787747f47b6c35252e55423dd2792da 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 | 1 + src/k_kart.c | 12 +++++++++++- src/lua_playerlib.c | 4 ++++ src/p_saveg.c | 2 ++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/d_player.h b/src/d_player.h index 44e7ed57b..bfa5c7873 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -417,6 +417,7 @@ typedef struct player_s UINT8 tripwireState; // see tripwirestate_t UINT8 tripwirePass; // see tripwirepass_t UINT16 tripwireLeniency; // When reaching a state that lets you go thru tripwire, you get an extra second leniency after it ends to still go through it. + UINT8 tripwireReboundDelay; // When failing Tripwire, brieftly lock out speed-based tripwire pass (anti-cheese) UINT16 itemroulette; // Used for the roulette when deciding what item to give you (was "pw_kartitem") UINT8 roulettetype; // Used for the roulette, for deciding type (0 = normal, 1 = better, 2 = eggman mark) diff --git a/src/k_kart.c b/src/k_kart.c index 9a51032da..ed886f906 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2688,7 +2688,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; @@ -3297,10 +3297,17 @@ void K_SquishPlayer(player_t *player, mobj_t *inflictor, mobj_t *source) 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))) + P_DamageMobj(player->mo, NULL, NULL, 1, DMG_STING); + 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; } @@ -6722,6 +6729,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->pogospring = 0; } + if (player->tripwireReboundDelay) + player->tripwireReboundDelay--; + if (player->ringdelay) player->ringdelay--; diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 84528f94b..9cdc31b7e 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -282,6 +282,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); else if (fastcmp(field,"roulettetype")) @@ -634,6 +636,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); else if (fastcmp(field,"roulettetype")) diff --git a/src/p_saveg.c b/src/p_saveg.c index 7dce0865b..311026c8a 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -296,6 +296,7 @@ static void P_NetArchivePlayers(void) WRITEUINT8(save_p, players[i].tripwireState); WRITEUINT8(save_p, players[i].tripwirePass); WRITEUINT16(save_p, players[i].tripwireLeniency); + WRITEUINT8(save_p, players[i].tripwireReboundDelay); WRITEUINT16(save_p, players[i].itemroulette); WRITEUINT8(save_p, players[i].roulettetype); @@ -564,6 +565,7 @@ static void P_NetUnArchivePlayers(void) players[i].tripwireState = READUINT8(save_p); players[i].tripwirePass = READUINT8(save_p); players[i].tripwireLeniency = READUINT16(save_p); + players[i].tripwireReboundDelay = READUINT8(save_p); players[i].itemroulette = READUINT16(save_p); players[i].roulettetype = READUINT8(save_p);