[HL25] Backport changes to multiplayer corpses

This commit is contained in:
Joël Troch 2024-08-28 09:47:39 +02:00
parent c3b58b1bb4
commit ac6b6646cc
3 changed files with 20 additions and 9 deletions

View file

@ -788,7 +788,7 @@ void CBasePlayer::Killed(entvars_t* pevAttacker, int iGib)
SetAnimation(PLAYER_DIE);
m_iRespawnFrames = 0;
m_flRespawnTimer = 0.0f;
pev->modelindex = g_ulModelIndexPlayer; // don't use eyes
@ -925,6 +925,8 @@ void CBasePlayer::SetAnimation(PLAYER_ANIM playerAnim)
if (pev->sequence == animDesired)
return;
//ALERT(at_console, "Set die animation to %d\n", animDesired);
pev->gaitsequence = 0;
pev->sequence = animDesired;
pev->frame = 0;
@ -1206,19 +1208,28 @@ void CBasePlayer::PlayerDeathThink()
{
StudioFrameAdvance();
m_iRespawnFrames++; // Note, these aren't necessarily real "frames", so behavior is dependent on # of client movement commands
if (m_iRespawnFrames < 120) // Animations should be no longer than this
m_flRespawnTimer += gpGlobals->frametime;
if (m_flRespawnTimer < 4.0f) // 120 frames at 30 fps -- animations should be no longer than this
return;
}
if (pev->deadflag == DEAD_DYING)
{
// Once we finish animating, if we're in multiplayer just make a copy of our body right away.
if (m_fSequenceFinished && g_pGameRules->IsMultiplayer() && pev->movetype == MOVETYPE_NONE)
{
CopyToBodyQue(pev);
pev->modelindex = 0;
}
pev->deadflag = DEAD_DEAD;
}
// once we're done animating our death and we're on the ground, we want to set movetype to None so our dead body won't do collisions and stuff anymore
// this prevents a bug where the dead body would go to a player's head if he walked over it while the dead player was clicking their button to respawn
if (pev->movetype != MOVETYPE_NONE && FBitSet(pev->flags, FL_ONGROUND))
pev->movetype = MOVETYPE_NONE;
if (pev->deadflag == DEAD_DYING)
pev->deadflag = DEAD_DEAD;
StopAnimation();
pev->effects |= EF_NOINTERP;
@ -1258,7 +1269,7 @@ void CBasePlayer::PlayerDeathThink()
return;
pev->button = 0;
m_iRespawnFrames = 0;
m_flRespawnTimer = 0.0f;
//ALERT(at_console, "Respawn\n");

View file

@ -196,7 +196,7 @@ public:
Vector m_vecAutoAim;
bool m_fOnTarget;
int m_iDeaths;
float m_iRespawnFrames; // used in PlayerDeathThink() to make sure players can always respawn
float m_flRespawnTimer; // used in PlayerDeathThink() to make sure players can always respawn
int m_lastx, m_lasty; // These are the previous update's crosshair angles, DON"T SAVE/RESTORE

View file

@ -226,7 +226,7 @@ static void InitBodyQue()
//
void CopyToBodyQue(entvars_t* pev)
{
if ((pev->effects & EF_NODRAW) != 0)
if ((pev->effects & EF_NODRAW) != 0 || pev->modelindex == 0)
return;
entvars_t* pevHead = VARS(g_pBodyQueueHead);