Reduce hitlag, then respawn when trapped in tripwire

This commit is contained in:
AJ Martinez 2024-01-09 23:08:52 -07:00
parent fed0740d99
commit b2c5502e09
4 changed files with 23 additions and 0 deletions

View file

@ -957,6 +957,8 @@ struct player_t
UINT8 preventfailsafe; // Set when taking damage to prevent cheesing eggboxes
UINT8 tripwireUnstuck;
UINT8 handtimer;
angle_t besthanddirection;

View file

@ -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)

View file

@ -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);

View file

@ -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);