diff --git a/src/d_player.h b/src/d_player.h index 0e5fd613b..60ca7c4bd 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -437,6 +437,8 @@ typedef struct player_s UINT16 draftleeway; // Leniency timer before removing draft power SINT8 lastdraft; // (-1 to 15) - Last player being drafted + 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. + 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_bot.c b/src/k_bot.c index f31317546..9e1212b1f 100644 --- a/src/k_bot.c +++ b/src/k_bot.c @@ -279,7 +279,7 @@ boolean K_BotCanTakeCut(player_t *player) { if ( #if 1 - K_TripwirePass(player) == true + K_TripwirePassConditions(player) == true #else K_ApplyOffroad(player) == false #endif diff --git a/src/k_kart.c b/src/k_kart.c index 92fda8de3..d0210cc79 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2742,7 +2742,7 @@ boolean K_SlopeResistance(player_t *player) return false; } -boolean K_TripwirePass(player_t *player) +boolean K_TripwirePassConditions(player_t *player) { if ( player->invincibilitytimer || @@ -2755,6 +2755,11 @@ boolean K_TripwirePass(player_t *player) return false; } +boolean K_TripwirePass(player_t *player) +{ + return (K_TripwirePassConditions(player) || (player->tripwireLeniency > 0)); +} + boolean K_WaterRun(player_t *player) { if ( @@ -7307,6 +7312,16 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) K_HandleTumbleBounce(player); } + if (player->tripwireLeniency > 0) + { + player->tripwireLeniency--; + } + + if (K_TripwirePassConditions(player) == true) + { + player->tripwireLeniency = max(player->tripwireLeniency, TICRATE); + } + K_KartPlayerHUDUpdate(player); if (battleovertime.enabled && !(player->pflags & PF_ELIMINATED) && player->bumpers <= 0 && player->karmadelay <= 0) diff --git a/src/k_kart.h b/src/k_kart.h index 95e24d7cd..870e162f7 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -116,6 +116,7 @@ void K_StripOther(player_t *player); void K_MomentumToFacing(player_t *player); boolean K_ApplyOffroad(player_t *player); boolean K_SlopeResistance(player_t *player); +boolean K_TripwirePassConditions(player_t *player); boolean K_TripwirePass(player_t *player); boolean K_WaterRun(player_t *player); void K_ApplyTripWire(player_t *player, tripwirestate_t state); diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 6b297c240..3d05d9c15 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -288,6 +288,8 @@ static int player_get(lua_State *L) lua_pushinteger(L, plr->draftleeway); else if (fastcmp(field,"lastdraft")) lua_pushinteger(L, plr->lastdraft); + else if (fastcmp(field,"tripwireLeniency")) + lua_pushinteger(L, plr->tripwireLeniency); else if (fastcmp(field,"itemroulette")) lua_pushinteger(L, plr->itemroulette); else if (fastcmp(field,"roulettetype")) @@ -630,6 +632,8 @@ static int player_set(lua_State *L) plr->draftleeway = luaL_checkinteger(L, 3); else if (fastcmp(field,"lastdraft")) plr->lastdraft = luaL_checkinteger(L, 3); + else if (fastcmp(field,"tripwireLeniency")) + plr->tripwireLeniency = 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 92de0c486..bebc5c161 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -278,6 +278,8 @@ static void P_NetArchivePlayers(void) WRITEUINT16(save_p, players[i].draftleeway); WRITESINT8(save_p, players[i].lastdraft); + WRITEUINT16(save_p, players[i].tripwireLeniency); + WRITEUINT16(save_p, players[i].itemroulette); WRITEUINT8(save_p, players[i].roulettetype); @@ -546,6 +548,8 @@ static void P_NetUnArchivePlayers(void) players[i].draftleeway = READUINT16(save_p); players[i].lastdraft = READSINT8(save_p); + players[i].tripwireLeniency = READUINT16(save_p); + players[i].itemroulette = READUINT16(save_p); players[i].roulettetype = READUINT8(save_p);