From 0fea23de50bb8364a3bdd9d231eebcbbefebeb8a Mon Sep 17 00:00:00 2001 From: havoc Date: Thu, 14 Jun 2007 00:37:15 +0000 Subject: [PATCH] when spectating in nexuiz, use the current viewentity for scoreboard information rather than the real player entity (renamed cl.playerentity to cl.realplayerentity and made playerentity update whenever viewentity is set to a valid client entity) git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7412 d7cf8633-e32d-0410-b094-e92efae38249 --- cl_parse.c | 7 +++++-- client.h | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cl_parse.c b/cl_parse.c index 5f41466e..31afbd1f 100644 --- a/cl_parse.c +++ b/cl_parse.c @@ -1440,7 +1440,7 @@ void CL_ParseServerInfo (void) i = MSG_ReadByte(); // cl.qw_spectator is an unneeded flag, cl.scores[cl.playerentity].qw_spectator works better (it can be updated by the server during the game) //cl.qw_spectator = (i & 128) != 0; - cl.playerentity = cl.viewentity = (i & 127) + 1; + cl.realplayerentity = cl.playerentity = cl.viewentity = (i & 127) + 1; cl.scores = (scoreboard_t *)Mem_Alloc(cls.levelmempool, cl.maxclients*sizeof(*cl.scores)); // get the full level name @@ -3493,7 +3493,10 @@ void CL_ParseServerMessage(void) if (cl.viewentity >= cl.max_entities) CL_ExpandEntities(cl.viewentity); // LordHavoc: assume first setview recieved is the real player entity - if (!cl.playerentity) + if (!cl.realplayerentity) + cl.realplayerentity = cl.viewentity; + // update cl.playerentity to this one if it is a valid player + if (cl.viewentity >= 1 && cl.viewentity <= cl.maxclients) cl.playerentity = cl.viewentity; break; diff --git a/client.h b/client.h index d44d2d03..52a9ce06 100644 --- a/client.h +++ b/client.h @@ -819,6 +819,11 @@ typedef struct client_state_s int viewentity; // the real player entity (normally same as viewentity, // different than viewentity if mod uses chasecam or other tricks) + int realplayerentity; + // this is updated to match cl.viewentity whenever it is in the clients + // range, basically this is used in preference to cl.realplayerentity for + // most purposes because when spectating another player it should show + // their information rather than yours int playerentity; // max players that can be in this game int maxclients; @@ -943,7 +948,7 @@ typedef struct client_state_s int qw_teamplay; // unused: indicates whether the player is spectating - // use cl.scores[cl.playerentity].qw_spectator instead + // use cl.scores[cl.playerentity-1].qw_spectator instead //qboolean qw_spectator; // movement parameters for client prediction -- 2.39.2