Underwater: player must be submerged for 15 seconds to play a "gasp" when they resurface

This commit is contained in:
James R 2024-03-08 22:08:39 -08:00
parent fc86b5b1db
commit 44ff1d26cc
4 changed files with 22 additions and 6 deletions

View file

@ -810,6 +810,8 @@ struct player_t
SINT8 glanceDir; // Direction the player is trying to look backwards in
UINT16 breathTimer; // Holding your breath underwater
//////////////
// rideroid //
//////////////

View file

@ -9306,6 +9306,12 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
player->icecube.shaketimer--;
}
if ((player->mo->eflags & MFE_UNDERWATER) && player->curshield != KSHIELD_BUBBLE)
{
if (player->breathTimer < UINT16_MAX)
player->breathTimer++;
}
}
void K_KartResetPlayerColor(player_t *player)

View file

@ -3441,13 +3441,17 @@ void P_MobjCheckWater(mobj_t *mobj)
return;
}
if (p != NULL
&& p->curshield != KSHIELD_BUBBLE
&& mobj->waterskip == 0
&& wasinwater)
if (wasinwater && p != NULL)
{
// Play the gasp sound
S_StartSound(mobj, sfx_s3k38);
if (p->curshield != KSHIELD_BUBBLE
&& mobj->waterskip == 0
&& p->breathTimer > 15*TICRATE)
{
// Play the gasp sound
S_StartSound(mobj, sfx_s3k38);
}
p->breathTimer = 0;
}
if (mobj->flags & MF_APPLYTERRAIN)

View file

@ -549,6 +549,8 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITESINT8(save->p, players[i].glanceDir);
WRITEUINT16(save->p, players[i].breathTimer);
WRITEUINT8(save->p, players[i].typing_timer);
WRITEUINT8(save->p, players[i].typing_duration);
@ -1137,6 +1139,8 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].glanceDir = READSINT8(save->p);
players[i].breathTimer = READUINT16(save->p);
players[i].typing_timer = READUINT8(save->p);
players[i].typing_duration = READUINT8(save->p);