diff --git a/src/d_player.h b/src/d_player.h index 10a8c02e5..5930cdede 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -743,6 +743,7 @@ struct player_t mobj_t *sliptideZipIndicator; UINT8 instaShieldCooldown; + UINT8 guardCooldown; uint8_t public_key[PUBKEYLENGTH]; diff --git a/src/k_collide.cpp b/src/k_collide.cpp index af5e79d48..300db8f50 100644 --- a/src/k_collide.cpp +++ b/src/k_collide.cpp @@ -832,6 +832,7 @@ boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim) attackerPlayer->spindashboost = 0; attackerPlayer->sneakertimer = 0; attackerPlayer->instaShieldCooldown = TICRATE*2; + attackerPlayer->guardCooldown = TICRATE*2; attackerPlayer->flashing = 0; mobj_t *broly = Obj_SpawnBrolyKi(victim, victimHitlag); diff --git a/src/k_kart.c b/src/k_kart.c index 075a57dbc..f9a32344d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3647,6 +3647,7 @@ void K_DoGuardBreak(mobj_t *t1, mobj_t *t2) { // short-circuit instashield for vfx visibility t1->player->instaShieldCooldown = 2*TICRATE; + t1->player->guardCooldown = 2*TICRATE; S_StartSound(t1, sfx_gbrk); K_AddHitLag(t1, 24, true); @@ -7920,6 +7921,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (!P_IsObjectOnGround(player->mo)) player->instaShieldCooldown = max(player->instaShieldCooldown, 1); } + + if (player->guardCooldown) + player->guardCooldown--; if (player->startboost > 0 && onground == true) @@ -8142,6 +8146,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->pflags &= ~PF_DRIFTINPUT; } + if (K_PlayerGuard(player)) + player->instaShieldCooldown = max(player->instaShieldCooldown, 12); + // Roulette Code K_KartItemRoulette(player, cmd); @@ -9831,7 +9838,7 @@ boolean K_PlayerEBrake(player_t *player) boolean K_PlayerGuard(player_t *player) { - return (K_PlayerEBrake(player) && player->spheres > 0 && player->instaShieldCooldown == 0); + return (K_PlayerEBrake(player) && player->spheres > 0 && player->guardCooldown == 0); } SINT8 K_Sliptiding(player_t *player) @@ -10609,6 +10616,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else { player->instaShieldCooldown = 50; + player->guardCooldown = 50; S_StartSound(player->mo, sfx_iwhp); mobj_t *whip = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_INSTAWHIP); P_SetScale(whip, player->mo->scale); diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 39039e011..60f7959b5 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -321,6 +321,8 @@ static int player_get(lua_State *L) lua_pushinteger(L, plr->sliptideZipBoost); else if (fastcmp(field,"instaShieldCooldown")) lua_pushinteger(L, plr->instaShieldCooldown); + else if (fastcmp(field,"guardCooldown")) + lua_pushinteger(L, plr->guardCooldown); /* else if (fastcmp(field,"itemroulette")) lua_pushinteger(L, plr->itemroulette); @@ -717,6 +719,8 @@ static int player_set(lua_State *L) plr->sliptideZipBoost = luaL_checkinteger(L, 3); else if (fastcmp(field,"instaShieldCooldown")) plr->instaShieldCooldown = luaL_checkinteger(L, 3); + else if (fastcmp(field,"guardCooldown")) + plr->guardCooldown = 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 46cf3afeb..3b821e990 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -420,6 +420,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEMEM(save->p, players[i].public_key, PUBKEYLENGTH); WRITEUINT8(save->p, players[i].instaShieldCooldown); + WRITEUINT8(save->p, players[i].guardCooldown); // respawnvars_t WRITEUINT8(save->p, players[i].respawn.state); @@ -807,6 +808,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) READMEM(save->p, players[i].public_key, PUBKEYLENGTH); players[i].instaShieldCooldown = READUINT8(save->p); + players[i].guardCooldown = READUINT8(save->p); // respawnvars_t players[i].respawn.state = READUINT8(save->p);