From 79796c1b16cff885707adce14eef78b7091484c8 Mon Sep 17 00:00:00 2001 From: Bill Currie <bill@taniwha.org> Date: Thu, 2 Dec 2010 17:11:33 +0900 Subject: [PATCH] Split out the MVD Playerinfo parsing into its own function. --- qw/source/cl_ents.c | 119 +++++++++++++++++++++++++------------------- 1 file changed, 67 insertions(+), 52 deletions(-) diff --git a/qw/source/cl_ents.c b/qw/source/cl_ents.c index e5cc348c9..9c3b5b082 100644 --- a/qw/source/cl_ents.c +++ b/qw/source/cl_ents.c @@ -577,68 +577,83 @@ TranslateFlags (int src) return dst; } -void -CL_ParsePlayerinfo (void) +static void +CL_ParseDemoPlayerinfo (int num) { - int flags, msec, num, i; + int flags, i; player_info_t *info; player_state_t *state, *prevstate; static player_state_t dummy; - num = MSG_ReadByte (net_message); - if (num > MAX_CLIENTS) - Host_Error ("CL_ParsePlayerinfo: bad num"); - info = &cl.players[num]; state = &cl.frames[parsecountmod].playerstate[num]; state->pls.number = num; - if (cls.demoplayback2) { - if (info->prevcount > cl.parsecount || !cl.parsecount) { + if (info->prevcount > cl.parsecount || !cl.parsecount) { + prevstate = &dummy; + } else { + if (cl.parsecount - info->prevcount >= UPDATE_BACKUP-1) prevstate = &dummy; - } else { - if (cl.parsecount - info->prevcount >= UPDATE_BACKUP-1) - prevstate = &dummy; - else - prevstate = &cl.frames[info->prevcount - & UPDATE_MASK].playerstate[num]; - } - info->prevcount = cl.parsecount; + else + prevstate = &cl.frames[info->prevcount + & UPDATE_MASK].playerstate[num]; + } + info->prevcount = cl.parsecount; - if (cls.findtrack && info->stats[STAT_HEALTH] != 0) { - autocam = CAM_TRACK; - Cam_Lock (num); - ideal_track = num; - cls.findtrack = false; - } + if (cls.findtrack && info->stats[STAT_HEALTH] != 0) { + autocam = CAM_TRACK; + Cam_Lock (num); + ideal_track = num; + cls.findtrack = false; + } - memcpy (state, prevstate, sizeof (player_state_t)); + memcpy (state, prevstate, sizeof (player_state_t)); - flags = MSG_ReadShort (net_message); - state->pls.flags = TranslateFlags (flags); - state->messagenum = cl.parsecount; - state->pls.cmd.msec = 0; - state->pls.frame = MSG_ReadByte (net_message); - state->state_time = parsecounttime; - for (i=0; i <3; i++) - if (flags & (DF_ORIGIN << i)) - state->pls.origin[i] = MSG_ReadCoord (net_message); - for (i=0; i <3; i++) - if (flags & (DF_ANGLES << i)) - state->pls.cmd.angles[i] = MSG_ReadAngle16 (net_message); - if (flags & DF_MODEL) - state->pls.modelindex = MSG_ReadByte (net_message); - if (flags & DF_SKINNUM) - state->pls.skinnum = MSG_ReadByte (net_message); - if (flags & DF_EFFECTS) - state->pls.effects = MSG_ReadByte (net_message); - if (flags & DF_WEAPONFRAME) - state->pls.weaponframe = MSG_ReadByte (net_message); - VectorCopy (state->pls.cmd.angles, state->viewangles); + flags = MSG_ReadShort (net_message); + state->pls.flags = TranslateFlags (flags); + state->messagenum = cl.parsecount; + state->pls.cmd.msec = 0; + state->pls.frame = MSG_ReadByte (net_message); + state->state_time = parsecounttime; + for (i=0; i <3; i++) + if (flags & (DF_ORIGIN << i)) + state->pls.origin[i] = MSG_ReadCoord (net_message); + for (i=0; i <3; i++) + if (flags & (DF_ANGLES << i)) + state->pls.cmd.angles[i] = MSG_ReadAngle16 (net_message); + if (flags & DF_MODEL) + state->pls.modelindex = MSG_ReadByte (net_message); + if (flags & DF_SKINNUM) + state->pls.skinnum = MSG_ReadByte (net_message); + if (flags & DF_EFFECTS) + state->pls.effects = MSG_ReadByte (net_message); + if (flags & DF_WEAPONFRAME) + state->pls.weaponframe = MSG_ReadByte (net_message); + VectorCopy (state->pls.cmd.angles, state->viewangles); +} + +void +CL_ParsePlayerinfo (void) +{ + int flags, msec, num, i; + player_info_t *info; + player_state_t *state; + + num = MSG_ReadByte (net_message); + if (num > MAX_CLIENTS) + Host_Error ("CL_ParsePlayerinfo: bad num"); + + if (cls.demoplayback2) { + CL_ParseDemoPlayerinfo (num); return; } + info = &cl.players[num]; + state = &cl.frames[parsecountmod].playerstate[num]; + + state->pls.number = num; + flags = state->pls.flags = MSG_ReadShort (net_message); state->messagenum = cl.parsecount; @@ -713,14 +728,14 @@ CL_ParsePlayerinfo (void) state->pls.glow_color = MSG_ReadByte (net_message); } if (bits & PF_COLORMOD) { + float r = 1.0, g = 1.0, b = 1.0; val = MSG_ReadByte (net_message); - if (val == 255) { - ent->colormod[0] = ent->colormod[1] = ent->colormod[2] = 1.0; - } else { - ent->colormod[0] = (float) ((val >> 5) & 7) * (1.0 / 7.0); - ent->colormod[1] = (float) ((val >> 2) & 7) * (1.0 / 7.0); - ent->colormod[2] = (float) (val & 3) * (1.0 / 3.0); + if (val != 255) { + r = (float) ((val >> 5) & 7) * (1.0 / 7.0); + g = (float) ((val >> 2) & 7) * (1.0 / 7.0); + b = (float) (val & 3) * (1.0 / 3.0); } + VectorSet (r, g, b, ent->colormod); } if (bits & PF_FRAME2) { state->pls.frame |= MSG_ReadByte (net_message) << 8; @@ -731,7 +746,7 @@ CL_ParsePlayerinfo (void) /* CL_AddFlagModels - Called when the CTF flags are set + Called when the CTF flags are set. Flags are effectively temp entities. */ static void CL_AddFlagModels (entity_t *ent, int team, int key)