diff --git a/src/d_player.h b/src/d_player.h index dbc76b3e39ab9d4b0a694c23fbb62bec1c9faa24..69a4207c98b5a6fd7068356d14a44e0a8a232a56 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -1010,6 +1010,7 @@ struct player_t UINT8 preventfailsafe; // Set when taking damage to prevent cheesing eggboxes UINT8 tripwireUnstuck; + UINT8 bumpUnstuck; UINT8 handtimer; angle_t besthanddirection; diff --git a/src/k_kart.c b/src/k_kart.c index cc4d78a353870fe1aca0ca9bbbe0347ab0c54d24..98ca7268d33b65d4a5e535edd6671f92969ffb49 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9162,6 +9162,16 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->hyudorotimer) player->hyudorotimer--; + if (player->bumpUnstuck > 30*5) + { + player->bumpUnstuck = 0; + K_DoIngameRespawn(player); + } + else if (player->bumpUnstuck) + { + player->bumpUnstuck--; + } + if (player->fakeBoost) player->fakeBoost--; diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 432af513a3b0fcbb2531dd43f27cd8a605d01bf6..8bd5821db0a6d9d69413b09e40fe8b5ec17de295 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -388,6 +388,8 @@ static int player_get(lua_State *L) lua_pushinteger(L, plr->preventfailsafe); else if (fastcmp(field,"tripwireunstuck")) lua_pushinteger(L, plr->tripwireUnstuck); + else if (fastcmp(field,"bumpunstuck")) + lua_pushinteger(L, plr->bumpUnstuck); /* else if (fastcmp(field,"itemroulette")) lua_pushinteger(L, plr->itemroulette); @@ -946,6 +948,8 @@ static int player_set(lua_State *L) plr->preventfailsafe = luaL_checkinteger(L, 3); else if (fastcmp(field,"tripwireunstuck")) plr->tripwireUnstuck = luaL_checkinteger(L, 3); + else if (fastcmp(field,"bumpunstuck")) + plr->bumpUnstuck = luaL_checkinteger(L, 3); /* else if (fastcmp(field,"itemroulette")) plr->itemroulette = luaL_checkinteger(L, 3); diff --git a/src/p_map.c b/src/p_map.c index bb7868dd44a22ca29359c0fa65dc8c7e678c3744..7f1965aeeaedb63e57c0ad7b0a43970ae5162c7d 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -4085,6 +4085,9 @@ static void P_BouncePlayerMove(mobj_t *mo, TryMoveResult_t *result) P_PlayerHitBounceLine(bestslideline, &result->normal); mo->eflags |= MFE_JUSTBOUNCEDWALL; + if (mo->player) + mo->player->bumpUnstuck += 5; + // Combo avoidance! if (mo->player && P_PlayerInPain(mo->player) && gametyperules & GTR_BUMPERS && mo->health == 1) { diff --git a/src/p_saveg.c b/src/p_saveg.c index 721285c9a51441353cb947a551a3774b74717499..268fc953b8640ccd595e038b2f9e6f73f86dc19b 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -608,6 +608,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEUINT8(save->p, players[i].preventfailsafe); WRITEUINT8(save->p, players[i].tripwireUnstuck); + WRITEUINT8(save->p, players[i].bumpUnstuck); WRITEUINT8(save->p, players[i].handtimer); WRITEANGLE(save->p, players[i].besthanddirection); @@ -1211,6 +1212,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].preventfailsafe = READUINT8(save->p); players[i].tripwireUnstuck = READUINT8(save->p); + players[i].bumpUnstuck = READUINT8(save->p); players[i].handtimer = READUINT8(save->p); players[i].besthanddirection = READANGLE(save->p);