diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index 97198667..95d4407b 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -517,7 +517,7 @@ void zapplayer(playerent *&d) void movelocalplayer() { - if(player1->state==CS_DEAD && !player1->allowmove()) + if(!player1->allowmove()) { if(lastmillis-player1->lastpain<2000) { @@ -1716,6 +1716,7 @@ void spectatemode(int mode) showscores(false); switch(mode) { + case SM_DEATHCAM: case SM_FOLLOW1ST: case SM_FOLLOW3RD: case SM_FOLLOW3RD_TRANSPARENT: diff --git a/source/src/entity.h b/source/src/entity.h index 3a16b994..2cf71c2a 100644 --- a/source/src/entity.h +++ b/source/src/entity.h @@ -429,7 +429,7 @@ public: int eardamagemillis; float maxroll, maxrolleffect, movroll, effroll; // roll added by movement and damage int ffov, scopefov; - bool allowmove() { return state!=CS_DEAD || spectatemode==SM_FLY; } + bool allowmove() { return (state!=CS_DEAD && state!=CS_SPECTATE) || spectatemode==SM_FLY; } weapon *weapons[NUMGUNS]; weapon *prevweaponsel, *weaponsel, *nextweaponsel, *primweap, *nextprimweap, *lastattackweapon; diff --git a/source/src/rendermodel.cpp b/source/src/rendermodel.cpp index aea3c3ee..2e3d44e9 100644 --- a/source/src/rendermodel.cpp +++ b/source/src/rendermodel.cpp @@ -1089,7 +1089,7 @@ void renderclients() { playerent *d; loopv(players) if((d = players[i]) && d->state!=CS_SPAWNING && d->state!=CS_SPECTATE && (!player1->isspectating() || player1->spectatemode != SM_FOLLOW1ST || player1->followplayercn != i)) renderclientp(d); - if(player1->state==CS_DEAD || (reflecting && !refracting)) renderclientp(player1); + if(player1->state==CS_DEAD || ((reflecting && !refracting) && (player1->state!=CS_SPECTATE || player1->spectatemode==SM_FLY))) renderclientp(player1); } void loadallmapmodels() // try to find all mapmodels in packages/models/mapmodels