diff --git a/src/d_player.h b/src/d_player.h index 2f27838bf..f688b2820 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -957,6 +957,8 @@ struct player_t UINT8 preventfailsafe; // Set when taking damage to prevent cheesing eggboxes + UINT8 tripwireUnstuck; + UINT8 handtimer; angle_t besthanddirection; diff --git a/src/k_kart.c b/src/k_kart.c index 0054b2163..795f49e25 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4644,6 +4644,8 @@ void K_ApplyTripWire(player_t *player, tripwirestate_t state) if (player->hyudorotimer <= 0) { K_AddHitLag(player->mo, 10, false); + CONS_Printf("unstuck %d\n", player->tripwireUnstuck); + player->mo->hitlag -= min(player->mo->hitlag, player->tripwireUnstuck/4); } if (state == TRIPSTATE_PASSED && player->spinouttimer && @@ -4651,6 +4653,8 @@ void K_ApplyTripWire(player_t *player, tripwirestate_t state) { K_TumblePlayer(player, NULL, NULL); } + + player->tripwireUnstuck += 10; } INT32 K_ExplodePlayer(player_t *player, mobj_t *inflictor, mobj_t *source) // A bit of a hack, we just throw the player up higher here and extend their spinout timer @@ -8612,6 +8616,15 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->preventfailsafe) player->preventfailsafe--; + if (player->tripwireUnstuck > 150) + { + player->tripwireUnstuck = 0; + K_DoIngameRespawn(player); + } + + if (player->tripwireUnstuck && !player->mo->hitlag) + player->tripwireUnstuck--; + if ((player->respawn.state == RESPAWNST_NONE) && player->growshrinktimer != 0) { if (player->growshrinktimer > 0 && onground == true) diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index e7d603c6f..f00f74eb3 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -353,6 +353,8 @@ static int player_get(lua_State *L) lua_pushinteger(L, plr->guardCooldown); else if (fastcmp(field,"preventfailsafe")) lua_pushinteger(L, plr->preventfailsafe); + else if (fastcmp(field,"tripwireUnstuck")) + lua_pushinteger(L, plr->tripwireUnstuck); /* else if (fastcmp(field,"itemroulette")) lua_pushinteger(L, plr->itemroulette); @@ -855,6 +857,8 @@ static int player_set(lua_State *L) plr->guardCooldown = luaL_checkinteger(L, 3); else if (fastcmp(field,"preventfailsafe")) plr->preventfailsafe = luaL_checkinteger(L, 3); + else if (fastcmp(field,"tripwireUnstuck")) + plr->tripwireUnstuck = 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 88bb493d7..a605e347a 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -579,6 +579,8 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEUINT8(save->p, players[i].preventfailsafe); + WRITEUINT8(save->p, players[i].tripwireUnstuck); + WRITEUINT8(save->p, players[i].handtimer); WRITEANGLE(save->p, players[i].besthanddirection); @@ -1140,6 +1142,8 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].preventfailsafe = READUINT8(save->p); + players[i].tripwireUnstuck = READUINT8(save->p); + players[i].handtimer = READUINT8(save->p); players[i].besthanddirection = READANGLE(save->p);