mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-17 01:11:45 +00:00
[qw] Use entity_state_t as a base for player_state_t
This will, in the long run, help clean up a lot of the differences in the handling of entities in the clients.
This commit is contained in:
parent
c9bbc2971a
commit
ca38f9b616
11 changed files with 225 additions and 238 deletions
|
@ -40,9 +40,11 @@ typedef struct entity_state_s {
|
||||||
unsigned flags; // nolerp, etc
|
unsigned flags; // nolerp, etc
|
||||||
|
|
||||||
vec3_t origin;
|
vec3_t origin;
|
||||||
|
vec3_t velocity;
|
||||||
vec3_t angles;
|
vec3_t angles;
|
||||||
unsigned short modelindex;
|
uint16_t modelindex;
|
||||||
unsigned short frame;
|
uint16_t frame;
|
||||||
|
int weaponframe;
|
||||||
int effects;
|
int effects;
|
||||||
byte colormap;
|
byte colormap;
|
||||||
byte skinnum;
|
byte skinnum;
|
||||||
|
|
|
@ -320,26 +320,9 @@ typedef struct usercmd_s {
|
||||||
} usercmd_t;
|
} usercmd_t;
|
||||||
|
|
||||||
typedef struct plent_state_s {
|
typedef struct plent_state_s {
|
||||||
int number;
|
entity_state_t es;
|
||||||
|
|
||||||
unsigned int flags;
|
|
||||||
vec3_t origin;
|
|
||||||
usercmd_t cmd;
|
usercmd_t cmd;
|
||||||
vec3_t velocity;
|
|
||||||
int modelindex;
|
|
||||||
int frame;
|
|
||||||
int skinnum;
|
|
||||||
int effects;
|
|
||||||
int weaponframe;
|
|
||||||
|
|
||||||
byte msec;
|
byte msec;
|
||||||
|
|
||||||
// QSG 2
|
|
||||||
byte alpha;
|
|
||||||
byte scale;
|
|
||||||
byte glow_size;
|
|
||||||
byte glow_color;
|
|
||||||
byte colormod;
|
|
||||||
} plent_state_t;
|
} plent_state_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -446,9 +446,9 @@ spectator_move (client_t *cl, usercmd_t *ucmd)
|
||||||
|
|
||||||
AngleVectors (cl->state.cmd.angles, forward, right, up);
|
AngleVectors (cl->state.cmd.angles, forward, right, up);
|
||||||
|
|
||||||
speed = DotProduct (cl->state.velocity, cl->state.velocity);
|
speed = DotProduct (cl->state.es.velocity, cl->state.es.velocity);
|
||||||
if (speed < 1) {
|
if (speed < 1) {
|
||||||
VectorZero (cl->state.velocity);
|
VectorZero (cl->state.es.velocity);
|
||||||
} else {
|
} else {
|
||||||
speed = sqrt (speed);
|
speed = sqrt (speed);
|
||||||
drop = 0;
|
drop = 0;
|
||||||
|
@ -462,7 +462,7 @@ spectator_move (client_t *cl, usercmd_t *ucmd)
|
||||||
newspeed = 0;
|
newspeed = 0;
|
||||||
newspeed /= speed;
|
newspeed /= speed;
|
||||||
|
|
||||||
VectorScale (cl->state.velocity, newspeed, cl->state.velocity);
|
VectorScale (cl->state.es.velocity, newspeed, cl->state.es.velocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
fmove = ucmd->forwardmove;
|
fmove = ucmd->forwardmove;
|
||||||
|
@ -484,7 +484,7 @@ spectator_move (client_t *cl, usercmd_t *ucmd)
|
||||||
wishspeed = sv->movevars.spectatormaxspeed;
|
wishspeed = sv->movevars.spectatormaxspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
currentspeed = DotProduct (cl->state.velocity, wishdir);
|
currentspeed = DotProduct (cl->state.es.velocity, wishdir);
|
||||||
addspeed = wishspeed - currentspeed;
|
addspeed = wishspeed - currentspeed;
|
||||||
if (addspeed <= 0)
|
if (addspeed <= 0)
|
||||||
return;
|
return;
|
||||||
|
@ -492,10 +492,10 @@ spectator_move (client_t *cl, usercmd_t *ucmd)
|
||||||
if (accelspeed > addspeed)
|
if (accelspeed > addspeed)
|
||||||
accelspeed = addspeed;
|
accelspeed = addspeed;
|
||||||
|
|
||||||
VectorMultAdd (cl->state.velocity, accelspeed, wishdir,
|
VectorMultAdd (cl->state.es.velocity, accelspeed, wishdir,
|
||||||
cl->state.velocity);
|
cl->state.es.velocity);
|
||||||
VectorMultAdd (cl->state.origin, frametime, cl->state.velocity,
|
VectorMultAdd (cl->state.es.origin, frametime, cl->state.es.velocity,
|
||||||
cl->state.origin);
|
cl->state.es.origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -612,7 +612,7 @@ client_parse_message (client_t *cl)
|
||||||
break;
|
break;
|
||||||
case clc_tmove:
|
case clc_tmove:
|
||||||
MSG_ReadCoordV (net_message, o);
|
MSG_ReadCoordV (net_message, o);
|
||||||
VectorCopy (o, cl->state.origin);
|
VectorCopy (o, cl->state.es.origin);
|
||||||
break;
|
break;
|
||||||
case clc_upload:
|
case clc_upload:
|
||||||
size = MSG_ReadShort (net_message);
|
size = MSG_ReadShort (net_message);
|
||||||
|
@ -627,18 +627,18 @@ static void
|
||||||
write_player (int num, plent_state_t *pl, server_t *sv, sizebuf_t *msg)
|
write_player (int num, plent_state_t *pl, server_t *sv, sizebuf_t *msg)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int pflags = (pl->flags & (PF_GIB | PF_DEAD))
|
int pflags = (pl->es.flags & (PF_GIB | PF_DEAD))
|
||||||
| PF_MSEC | PF_COMMAND;
|
| PF_MSEC | PF_COMMAND;
|
||||||
int qf_bits = 0;
|
int qf_bits = 0;
|
||||||
|
|
||||||
if (pl->modelindex != sv->playermodel)
|
if (pl->es.modelindex != sv->playermodel)
|
||||||
pflags |= PF_MODEL;
|
pflags |= PF_MODEL;
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < 3; i++)
|
||||||
if (pl->velocity[i])
|
if (pl->es.velocity[i])
|
||||||
pflags |= PF_VELOCITY1 << i;
|
pflags |= PF_VELOCITY1 << i;
|
||||||
if (pl->effects & 0xff)
|
if (pl->es.effects & 0xff)
|
||||||
pflags |= PF_EFFECTS;
|
pflags |= PF_EFFECTS;
|
||||||
if (pl->skinnum)
|
if (pl->es.skinnum)
|
||||||
pflags |= PF_SKINNUM;
|
pflags |= PF_SKINNUM;
|
||||||
|
|
||||||
qf_bits = 0;
|
qf_bits = 0;
|
||||||
|
@ -670,21 +670,21 @@ write_player (int num, plent_state_t *pl, server_t *sv, sizebuf_t *msg)
|
||||||
// } else if (ent == clent) {
|
// } else if (ent == clent) {
|
||||||
// // don't send a lot of data on personal entity
|
// // don't send a lot of data on personal entity
|
||||||
// pflags &= ~(PF_MSEC | PF_COMMAND);
|
// pflags &= ~(PF_MSEC | PF_COMMAND);
|
||||||
// if (pl->weaponframe)
|
// if (pl->es.weaponframe)
|
||||||
// pflags |= PF_WEAPONFRAME;
|
// pflags |= PF_WEAPONFRAME;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// if (client->spec_track && client->spec_track - 1 == j
|
// if (client->spec_track && client->spec_track - 1 == j
|
||||||
// && pl->weaponframe)
|
// && pl->es.weaponframe)
|
||||||
// pflags |= PF_WEAPONFRAME;
|
// pflags |= PF_WEAPONFRAME;
|
||||||
|
|
||||||
MSG_WriteByte (msg, svc_playerinfo);
|
MSG_WriteByte (msg, svc_playerinfo);
|
||||||
MSG_WriteByte (msg, num);
|
MSG_WriteByte (msg, num);
|
||||||
MSG_WriteShort (msg, pflags);
|
MSG_WriteShort (msg, pflags);
|
||||||
|
|
||||||
MSG_WriteCoordV (msg, pl->origin);
|
MSG_WriteCoordV (msg, pl->es.origin);
|
||||||
|
|
||||||
MSG_WriteByte (msg, pl->frame);
|
MSG_WriteByte (msg, pl->es.frame);
|
||||||
|
|
||||||
if (pflags & PF_MSEC) {
|
if (pflags & PF_MSEC) {
|
||||||
//msec = 1000 * (sv.time - cl->localtime);
|
//msec = 1000 * (sv.time - cl->localtime);
|
||||||
|
@ -699,36 +699,36 @@ write_player (int num, plent_state_t *pl, server_t *sv, sizebuf_t *msg)
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < 3; i++)
|
||||||
if (pflags & (PF_VELOCITY1 << i))
|
if (pflags & (PF_VELOCITY1 << i))
|
||||||
MSG_WriteShort (msg, pl->velocity[i]);
|
MSG_WriteShort (msg, pl->es.velocity[i]);
|
||||||
|
|
||||||
if (pflags & PF_MODEL)
|
if (pflags & PF_MODEL)
|
||||||
MSG_WriteByte (msg, pl->modelindex);
|
MSG_WriteByte (msg, pl->es.modelindex);
|
||||||
|
|
||||||
if (pflags & PF_SKINNUM)
|
if (pflags & PF_SKINNUM)
|
||||||
MSG_WriteByte (msg, pl->skinnum);
|
MSG_WriteByte (msg, pl->es.skinnum);
|
||||||
|
|
||||||
if (pflags & PF_EFFECTS)
|
if (pflags & PF_EFFECTS)
|
||||||
MSG_WriteByte (msg, pl->effects);
|
MSG_WriteByte (msg, pl->es.effects);
|
||||||
|
|
||||||
if (pflags & PF_WEAPONFRAME)
|
if (pflags & PF_WEAPONFRAME)
|
||||||
MSG_WriteByte (msg, pl->weaponframe);
|
MSG_WriteByte (msg, pl->es.weaponframe);
|
||||||
|
|
||||||
if (pflags & PF_QF) {
|
if (pflags & PF_QF) {
|
||||||
MSG_WriteByte (msg, qf_bits);
|
MSG_WriteByte (msg, qf_bits);
|
||||||
if (qf_bits & PF_ALPHA)
|
if (qf_bits & PF_ALPHA)
|
||||||
MSG_WriteByte (msg, pl->alpha);
|
MSG_WriteByte (msg, pl->es.alpha);
|
||||||
if (qf_bits & PF_SCALE)
|
if (qf_bits & PF_SCALE)
|
||||||
MSG_WriteByte (msg, pl->scale);
|
MSG_WriteByte (msg, pl->es.scale);
|
||||||
if (qf_bits & PF_EFFECTS2)
|
if (qf_bits & PF_EFFECTS2)
|
||||||
MSG_WriteByte (msg, pl->effects >> 8);
|
MSG_WriteByte (msg, pl->es.effects >> 8);
|
||||||
if (qf_bits & PF_GLOWSIZE)
|
if (qf_bits & PF_GLOWSIZE)
|
||||||
MSG_WriteByte (msg, pl->scale);
|
MSG_WriteByte (msg, pl->es.glow_size);
|
||||||
if (qf_bits & PF_GLOWCOLOR)
|
if (qf_bits & PF_GLOWCOLOR)
|
||||||
MSG_WriteByte (msg, pl->glow_color);
|
MSG_WriteByte (msg, pl->es.glow_color);
|
||||||
if (qf_bits & PF_COLORMOD)
|
if (qf_bits & PF_COLORMOD)
|
||||||
MSG_WriteByte (msg, pl->colormod);
|
MSG_WriteByte (msg, pl->es.colormod);
|
||||||
if (qf_bits & PF_FRAME2)
|
if (qf_bits & PF_FRAME2)
|
||||||
MSG_WriteByte (msg, pl->frame >> 8);
|
MSG_WriteByte (msg, pl->es.frame >> 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
@ -514,9 +514,9 @@ parse_player_delta (qmsg_t *msg, plent_state_t *from, plent_state_t *to)
|
||||||
int i;
|
int i;
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
flags = to->flags = MSG_ReadShort (msg);
|
flags = to->es.flags = MSG_ReadShort (msg);
|
||||||
MSG_ReadCoordV (msg, to->origin);
|
MSG_ReadCoordV (msg, to->es.origin);
|
||||||
to->frame = (to->frame & 0xff00) | MSG_ReadByte (msg);
|
to->es.frame = (to->es.frame & 0xff00) | MSG_ReadByte (msg);
|
||||||
if (flags & PF_MSEC)
|
if (flags & PF_MSEC)
|
||||||
to->msec = MSG_ReadByte (msg);
|
to->msec = MSG_ReadByte (msg);
|
||||||
// qtv_printf ("%02x\n", msg->message->data[msg->readcount]);
|
// qtv_printf ("%02x\n", msg->message->data[msg->readcount]);
|
||||||
|
@ -524,36 +524,36 @@ parse_player_delta (qmsg_t *msg, plent_state_t *from, plent_state_t *to)
|
||||||
MSG_ReadDeltaUsercmd (msg, &from->cmd, &to->cmd);
|
MSG_ReadDeltaUsercmd (msg, &from->cmd, &to->cmd);
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
if (flags & (PF_VELOCITY1 << i))
|
if (flags & (PF_VELOCITY1 << i))
|
||||||
to->velocity[i] = (short) MSG_ReadShort (msg);
|
to->es.velocity[i] = (short) MSG_ReadShort (msg);
|
||||||
}
|
}
|
||||||
if (flags & PF_MODEL)
|
if (flags & PF_MODEL)
|
||||||
to->modelindex = MSG_ReadByte (msg);
|
to->es.modelindex = MSG_ReadByte (msg);
|
||||||
if (flags & PF_SKINNUM)
|
if (flags & PF_SKINNUM)
|
||||||
to->skinnum = MSG_ReadByte (msg);
|
to->es.skinnum = MSG_ReadByte (msg);
|
||||||
if (flags & PF_EFFECTS)
|
if (flags & PF_EFFECTS)
|
||||||
to->effects = (to->effects & 0xff00) | MSG_ReadByte (msg);
|
to->es.effects = (to->es.effects & 0xff00) | MSG_ReadByte (msg);
|
||||||
if (flags & PF_WEAPONFRAME)
|
if (flags & PF_WEAPONFRAME)
|
||||||
to->weaponframe = MSG_ReadByte (msg);
|
to->es.weaponframe = MSG_ReadByte (msg);
|
||||||
if (flags & PF_QF) {
|
if (flags & PF_QF) {
|
||||||
int bits;
|
int bits;
|
||||||
|
|
||||||
bits = MSG_ReadByte (msg);
|
bits = MSG_ReadByte (msg);
|
||||||
if (bits & PF_ALPHA)
|
if (bits & PF_ALPHA)
|
||||||
to->alpha = MSG_ReadByte (msg);
|
to->es.alpha = MSG_ReadByte (msg);
|
||||||
if (bits & PF_SCALE)
|
if (bits & PF_SCALE)
|
||||||
to->scale = MSG_ReadByte (msg);
|
to->es.scale = MSG_ReadByte (msg);
|
||||||
if (bits & PF_EFFECTS2)
|
if (bits & PF_EFFECTS2)
|
||||||
to->effects = (to->effects & 0x00ff)
|
to->es.effects = (to->es.effects & 0x00ff)
|
||||||
| (MSG_ReadByte (msg) << 8);
|
| (MSG_ReadByte (msg) << 8);
|
||||||
if (bits & PF_GLOWSIZE)
|
if (bits & PF_GLOWSIZE)
|
||||||
to->glow_size = MSG_ReadByte (msg);
|
to->es.glow_size = MSG_ReadByte (msg);
|
||||||
if (bits & PF_GLOWCOLOR)
|
if (bits & PF_GLOWCOLOR)
|
||||||
to->glow_color = MSG_ReadByte (msg);
|
to->es.glow_color = MSG_ReadByte (msg);
|
||||||
if (bits & PF_COLORMOD)
|
if (bits & PF_COLORMOD)
|
||||||
to->colormod = MSG_ReadByte (msg);
|
to->es.colormod = MSG_ReadByte (msg);
|
||||||
if (bits & PF_FRAME2)
|
if (bits & PF_FRAME2)
|
||||||
to->frame = (to->frame & 0xff)
|
to->es.frame = (to->es.frame & 0xff)
|
||||||
| (MSG_ReadByte (msg) << 8);
|
| (MSG_ReadByte (msg) << 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -567,12 +567,12 @@ sv_playerinfo (server_t *sv, qmsg_t *msg)
|
||||||
int fromind, toind;
|
int fromind, toind;
|
||||||
static plent_state_t null_player_state;
|
static plent_state_t null_player_state;
|
||||||
|
|
||||||
if (!null_player_state.alpha) {
|
if (!null_player_state.es.alpha) {
|
||||||
null_player_state.alpha = 255;
|
null_player_state.es.alpha = 255;
|
||||||
null_player_state.scale = 16;
|
null_player_state.es.scale = 16;
|
||||||
null_player_state.glow_size = 0;
|
null_player_state.es.glow_size = 0;
|
||||||
null_player_state.glow_color = 254;
|
null_player_state.es.glow_color = 254;
|
||||||
null_player_state.colormod = 255;
|
null_player_state.es.colormod = 255;
|
||||||
}
|
}
|
||||||
fromind = MSG_ReadByte (msg);
|
fromind = MSG_ReadByte (msg);
|
||||||
toind = sv->netchan.incoming_sequence & UPDATE_MASK;
|
toind = sv->netchan.incoming_sequence & UPDATE_MASK;
|
||||||
|
|
|
@ -218,23 +218,23 @@ Cam_TryFlyby (player_state_t * self, player_state_t * player, vec3_t vec,
|
||||||
vectoangles (vec, v);
|
vectoangles (vec, v);
|
||||||
VectorCopy (v, pmove.angles);
|
VectorCopy (v, pmove.angles);
|
||||||
VectorNormalize (vec);
|
VectorNormalize (vec);
|
||||||
VectorMultAdd (player->pls.origin, 800, vec, v);
|
VectorMultAdd (player->pls.es.origin, 800, vec, v);
|
||||||
// v is endpos
|
// v is endpos
|
||||||
// fake a player move
|
// fake a player move
|
||||||
trace = Cam_DoTrace (player->pls.origin, v);
|
trace = Cam_DoTrace (player->pls.es.origin, v);
|
||||||
if ( /* trace.inopen || */ trace.inwater)
|
if ( /* trace.inopen || */ trace.inwater)
|
||||||
return 9999;
|
return 9999;
|
||||||
VectorCopy (trace.endpos, vec);
|
VectorCopy (trace.endpos, vec);
|
||||||
len = VectorDistance (trace.endpos, player->pls.origin);
|
len = VectorDistance (trace.endpos, player->pls.es.origin);
|
||||||
|
|
||||||
if (len < 32 || len > 800)
|
if (len < 32 || len > 800)
|
||||||
return 9999;
|
return 9999;
|
||||||
if (checkvis) {
|
if (checkvis) {
|
||||||
trace = Cam_DoTrace (self->pls.origin, vec);
|
trace = Cam_DoTrace (self->pls.es.origin, vec);
|
||||||
if (trace.fraction != 1 || trace.inwater)
|
if (trace.fraction != 1 || trace.inwater)
|
||||||
return 9999;
|
return 9999;
|
||||||
|
|
||||||
len = VectorDistance (trace.endpos, self->pls.origin);
|
len = VectorDistance (trace.endpos, self->pls.es.origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
|
@ -248,11 +248,11 @@ Cam_IsVisible (player_state_t * player, vec3_t vec)
|
||||||
trace_t trace;
|
trace_t trace;
|
||||||
vec3_t v;
|
vec3_t v;
|
||||||
|
|
||||||
trace = Cam_DoTrace (player->pls.origin, vec);
|
trace = Cam_DoTrace (player->pls.es.origin, vec);
|
||||||
if (trace.fraction != 1 || /* trace.inopen || */ trace.inwater)
|
if (trace.fraction != 1 || /* trace.inopen || */ trace.inwater)
|
||||||
return false;
|
return false;
|
||||||
// check distance, don't let the player get too far away or too close
|
// check distance, don't let the player get too far away or too close
|
||||||
VectorSubtract (player->pls.origin, vec, v);
|
VectorSubtract (player->pls.es.origin, vec, v);
|
||||||
d = VectorLength (v);
|
d = VectorLength (v);
|
||||||
|
|
||||||
return (d > 16.0);
|
return (d > 16.0);
|
||||||
|
@ -440,22 +440,22 @@ Cam_Track (usercmd_t *cmd)
|
||||||
cmd->forwardmove = cmd->sidemove = cmd->upmove = 0;
|
cmd->forwardmove = cmd->sidemove = cmd->upmove = 0;
|
||||||
|
|
||||||
VectorCopy (player->viewangles, cl.viewangles);
|
VectorCopy (player->viewangles, cl.viewangles);
|
||||||
VectorCopy (player->pls.origin, desired_position);
|
VectorCopy (player->pls.es.origin, desired_position);
|
||||||
if (memcmp (&desired_position, &self->pls.origin,
|
if (memcmp (&desired_position, &self->pls.es.origin,
|
||||||
sizeof (desired_position)) != 0) {
|
sizeof (desired_position)) != 0) {
|
||||||
if (!cls.demoplayback) {
|
if (!cls.demoplayback) {
|
||||||
MSG_WriteByte (&cls.netchan.message, clc_tmove);
|
MSG_WriteByte (&cls.netchan.message, clc_tmove);
|
||||||
MSG_WriteCoordV (&cls.netchan.message, desired_position);
|
MSG_WriteCoordV (&cls.netchan.message, desired_position);
|
||||||
}
|
}
|
||||||
// move there locally immediately
|
// move there locally immediately
|
||||||
VectorCopy (desired_position, self->pls.origin);
|
VectorCopy (desired_position, self->pls.es.origin);
|
||||||
}
|
}
|
||||||
self->pls.weaponframe = player->pls.weaponframe;
|
self->pls.es.weaponframe = player->pls.es.weaponframe;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Ok, move to our desired position and set our angles to view
|
// Ok, move to our desired position and set our angles to view
|
||||||
// the player
|
// the player
|
||||||
VectorSubtract (desired_position, self->pls.origin, vec);
|
VectorSubtract (desired_position, self->pls.es.origin, vec);
|
||||||
len = VectorLength (vec);
|
len = VectorLength (vec);
|
||||||
cmd->forwardmove = cmd->sidemove = cmd->upmove = 0;
|
cmd->forwardmove = cmd->sidemove = cmd->upmove = 0;
|
||||||
if (len > 16) { // close enough?
|
if (len > 16) { // close enough?
|
||||||
|
@ -465,9 +465,9 @@ Cam_Track (usercmd_t *cmd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// move there locally immediately
|
// move there locally immediately
|
||||||
VectorCopy (desired_position, self->pls.origin);
|
VectorCopy (desired_position, self->pls.es.origin);
|
||||||
|
|
||||||
VectorSubtract (player->pls.origin, desired_position, vec);
|
VectorSubtract (player->pls.es.origin, desired_position, vec);
|
||||||
vectoangles (vec, cl.viewangles);
|
vectoangles (vec, cl.viewangles);
|
||||||
cl.viewangles[0] = -cl.viewangles[0];
|
cl.viewangles[0] = -cl.viewangles[0];
|
||||||
}
|
}
|
||||||
|
@ -520,7 +520,7 @@ Cam_SetView (void)
|
||||||
player = frame->playerstate + spec_track;
|
player = frame->playerstate + spec_track;
|
||||||
self = frame->playerstate + cl.playernum;
|
self = frame->playerstate + cl.playernum;
|
||||||
|
|
||||||
VectorSubtract (player->pls.origin, cl.simorg, vec);
|
VectorSubtract (player->pls.es.origin, cl.simorg, vec);
|
||||||
if (cam_forceview) {
|
if (cam_forceview) {
|
||||||
cam_forceview = false;
|
cam_forceview = false;
|
||||||
vectoangles (vec, cam_viewangles);
|
vectoangles (vec, cam_viewangles);
|
||||||
|
@ -560,7 +560,7 @@ Cam_FinishMove (usercmd_t *cmd)
|
||||||
player = frame->playerstate + spec_track;
|
player = frame->playerstate + spec_track;
|
||||||
self = frame->playerstate + cl.playernum;
|
self = frame->playerstate + cl.playernum;
|
||||||
|
|
||||||
VectorSubtract (player->pls.origin, self->pls.origin, vec);
|
VectorSubtract (player->pls.es.origin, self->pls.es.origin, vec);
|
||||||
if (cam_forceview) {
|
if (cam_forceview) {
|
||||||
cam_forceview = false;
|
cam_forceview = false;
|
||||||
vectoangles (vec, cam_viewangles);
|
vectoangles (vec, cam_viewangles);
|
||||||
|
|
|
@ -360,7 +360,7 @@ CL_ParseDemoPlayerinfo (int num)
|
||||||
info = &cl.players[num];
|
info = &cl.players[num];
|
||||||
state = &cl.frames[parsecountmod].playerstate[num];
|
state = &cl.frames[parsecountmod].playerstate[num];
|
||||||
|
|
||||||
state->pls.number = num;
|
state->pls.es.number = num;
|
||||||
|
|
||||||
if (info->prevcount > cl.parsecount || !cl.parsecount) {
|
if (info->prevcount > cl.parsecount || !cl.parsecount) {
|
||||||
prevstate = &dummy;
|
prevstate = &dummy;
|
||||||
|
@ -383,25 +383,25 @@ CL_ParseDemoPlayerinfo (int num)
|
||||||
memcpy (state, prevstate, sizeof (player_state_t));
|
memcpy (state, prevstate, sizeof (player_state_t));
|
||||||
|
|
||||||
flags = MSG_ReadShort (net_message);
|
flags = MSG_ReadShort (net_message);
|
||||||
state->pls.flags = TranslateFlags (flags);
|
state->pls.es.flags = TranslateFlags (flags);
|
||||||
state->messagenum = cl.parsecount;
|
state->messagenum = cl.parsecount;
|
||||||
state->pls.cmd.msec = 0;
|
state->pls.cmd.msec = 0;
|
||||||
state->pls.frame = MSG_ReadByte (net_message);
|
state->pls.es.frame = MSG_ReadByte (net_message);
|
||||||
state->state_time = parsecounttime;
|
state->state_time = parsecounttime;
|
||||||
for (i=0; i <3; i++)
|
for (i=0; i <3; i++)
|
||||||
if (flags & (DF_ORIGIN << i))
|
if (flags & (DF_ORIGIN << i))
|
||||||
state->pls.origin[i] = MSG_ReadCoord (net_message);
|
state->pls.es.origin[i] = MSG_ReadCoord (net_message);
|
||||||
for (i=0; i <3; i++)
|
for (i=0; i <3; i++)
|
||||||
if (flags & (DF_ANGLES << i))
|
if (flags & (DF_ANGLES << i))
|
||||||
state->pls.cmd.angles[i] = MSG_ReadAngle16 (net_message);
|
state->pls.cmd.angles[i] = MSG_ReadAngle16 (net_message);
|
||||||
if (flags & DF_MODEL)
|
if (flags & DF_MODEL)
|
||||||
state->pls.modelindex = MSG_ReadByte (net_message);
|
state->pls.es.modelindex = MSG_ReadByte (net_message);
|
||||||
if (flags & DF_SKINNUM)
|
if (flags & DF_SKINNUM)
|
||||||
state->pls.skinnum = MSG_ReadByte (net_message);
|
state->pls.es.skinnum = MSG_ReadByte (net_message);
|
||||||
if (flags & DF_EFFECTS)
|
if (flags & DF_EFFECTS)
|
||||||
state->pls.effects = MSG_ReadByte (net_message);
|
state->pls.es.effects = MSG_ReadByte (net_message);
|
||||||
if (flags & DF_WEAPONFRAME)
|
if (flags & DF_WEAPONFRAME)
|
||||||
state->pls.weaponframe = MSG_ReadByte (net_message);
|
state->pls.es.weaponframe = MSG_ReadByte (net_message);
|
||||||
VectorCopy (state->pls.cmd.angles, state->viewangles);
|
VectorCopy (state->pls.cmd.angles, state->viewangles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -422,14 +422,14 @@ CL_ParsePlayerinfo (void)
|
||||||
|
|
||||||
state = &cl.frames[parsecountmod].playerstate[num];
|
state = &cl.frames[parsecountmod].playerstate[num];
|
||||||
|
|
||||||
state->pls.number = num;
|
state->pls.es.number = num;
|
||||||
|
|
||||||
flags = state->pls.flags = MSG_ReadShort (net_message);
|
flags = state->pls.es.flags = MSG_ReadShort (net_message);
|
||||||
|
|
||||||
state->messagenum = cl.parsecount;
|
state->messagenum = cl.parsecount;
|
||||||
MSG_ReadCoordV (net_message, state->pls.origin);
|
MSG_ReadCoordV (net_message, state->pls.es.origin);
|
||||||
|
|
||||||
state->pls.frame = MSG_ReadByte (net_message);
|
state->pls.es.frame = MSG_ReadByte (net_message);
|
||||||
|
|
||||||
// the other player's last move was likely some time
|
// the other player's last move was likely some time
|
||||||
// before the packet was sent out, so accurately track
|
// before the packet was sent out, so accurately track
|
||||||
|
@ -445,30 +445,30 @@ CL_ParsePlayerinfo (void)
|
||||||
|
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
if (flags & (PF_VELOCITY1 << i))
|
if (flags & (PF_VELOCITY1 << i))
|
||||||
state->pls.velocity[i] = (short) MSG_ReadShort (net_message);
|
state->pls.es.velocity[i] = (short) MSG_ReadShort (net_message);
|
||||||
else
|
else
|
||||||
state->pls.velocity[i] = 0;
|
state->pls.es.velocity[i] = 0;
|
||||||
}
|
}
|
||||||
if (flags & PF_MODEL)
|
if (flags & PF_MODEL)
|
||||||
i = MSG_ReadByte (net_message);
|
i = MSG_ReadByte (net_message);
|
||||||
else
|
else
|
||||||
i = cl_playerindex;
|
i = cl_playerindex;
|
||||||
state->pls.modelindex = i;
|
state->pls.es.modelindex = i;
|
||||||
|
|
||||||
if (flags & PF_SKINNUM)
|
if (flags & PF_SKINNUM)
|
||||||
state->pls.skinnum = MSG_ReadByte (net_message);
|
state->pls.es.skinnum = MSG_ReadByte (net_message);
|
||||||
else
|
else
|
||||||
state->pls.skinnum = 0;
|
state->pls.es.skinnum = 0;
|
||||||
|
|
||||||
if (flags & PF_EFFECTS)
|
if (flags & PF_EFFECTS)
|
||||||
state->pls.effects = MSG_ReadByte (net_message);
|
state->pls.es.effects = MSG_ReadByte (net_message);
|
||||||
else
|
else
|
||||||
state->pls.effects = 0;
|
state->pls.es.effects = 0;
|
||||||
|
|
||||||
if (flags & PF_WEAPONFRAME)
|
if (flags & PF_WEAPONFRAME)
|
||||||
state->pls.weaponframe = MSG_ReadByte (net_message);
|
state->pls.es.weaponframe = MSG_ReadByte (net_message);
|
||||||
else
|
else
|
||||||
state->pls.weaponframe = 0;
|
state->pls.es.weaponframe = 0;
|
||||||
|
|
||||||
VectorCopy (state->pls.cmd.angles, state->viewangles);
|
VectorCopy (state->pls.cmd.angles, state->viewangles);
|
||||||
|
|
||||||
|
@ -489,13 +489,13 @@ CL_ParsePlayerinfo (void)
|
||||||
ent->scale = val / 16.0;
|
ent->scale = val / 16.0;
|
||||||
}
|
}
|
||||||
if (bits & PF_EFFECTS2) {
|
if (bits & PF_EFFECTS2) {
|
||||||
state->pls.effects |= MSG_ReadByte (net_message) << 8;
|
state->pls.es.effects |= MSG_ReadByte (net_message) << 8;
|
||||||
}
|
}
|
||||||
if (bits & PF_GLOWSIZE) {
|
if (bits & PF_GLOWSIZE) {
|
||||||
state->pls.glow_size = MSG_ReadByte (net_message);
|
state->pls.es.glow_size = MSG_ReadByte (net_message);
|
||||||
}
|
}
|
||||||
if (bits & PF_GLOWCOLOR) {
|
if (bits & PF_GLOWCOLOR) {
|
||||||
state->pls.glow_color = MSG_ReadByte (net_message);
|
state->pls.es.glow_color = MSG_ReadByte (net_message);
|
||||||
}
|
}
|
||||||
if (bits & PF_COLORMOD) {
|
if (bits & PF_COLORMOD) {
|
||||||
float r = 1.0, g = 1.0, b = 1.0;
|
float r = 1.0, g = 1.0, b = 1.0;
|
||||||
|
@ -508,7 +508,7 @@ CL_ParsePlayerinfo (void)
|
||||||
VectorSet (r, g, b, ent->renderer.colormod);
|
VectorSet (r, g, b, ent->renderer.colormod);
|
||||||
}
|
}
|
||||||
if (bits & PF_FRAME2) {
|
if (bits & PF_FRAME2) {
|
||||||
state->pls.frame |= MSG_ReadByte (net_message) << 8;
|
state->pls.es.frame |= MSG_ReadByte (net_message) << 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -599,22 +599,23 @@ CL_SetUpPlayerPrediction (qboolean dopred)
|
||||||
if (state->messagenum != cl.parsecount)
|
if (state->messagenum != cl.parsecount)
|
||||||
continue; // not present this frame
|
continue; // not present this frame
|
||||||
|
|
||||||
if (!state->pls.modelindex)
|
if (!state->pls.es.modelindex)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
pplayer->active = true;
|
pplayer->active = true;
|
||||||
pplayer->flags = state->pls.flags;
|
pplayer->flags = state->pls.es.flags;
|
||||||
|
|
||||||
// note that the local player is special, since he moves locally
|
// note that the local player is special, since he moves locally
|
||||||
// we use his last predicted postition
|
// we use his last predicted postition
|
||||||
if (j == cl.playernum) {
|
if (j == cl.playernum) {
|
||||||
VectorCopy (cl.frames[cls.netchan.outgoing_sequence & UPDATE_MASK].
|
VectorCopy (cl.frames[cls.netchan.outgoing_sequence & UPDATE_MASK].
|
||||||
playerstate[cl.playernum].pls.origin, pplayer->origin);
|
playerstate[cl.playernum].pls.es.origin,
|
||||||
|
pplayer->origin);
|
||||||
} else {
|
} else {
|
||||||
// predict only half the move to minimize overruns
|
// predict only half the move to minimize overruns
|
||||||
msec = 500 * (playertime - state->state_time);
|
msec = 500 * (playertime - state->state_time);
|
||||||
if (msec <= 0 || !dopred) {
|
if (msec <= 0 || !dopred) {
|
||||||
VectorCopy (state->pls.origin, pplayer->origin);
|
VectorCopy (state->pls.es.origin, pplayer->origin);
|
||||||
// Sys_MaskPrintf (SYS_DEV, "nopredict\n");
|
// Sys_MaskPrintf (SYS_DEV, "nopredict\n");
|
||||||
} else {
|
} else {
|
||||||
// predict players movement
|
// predict players movement
|
||||||
|
@ -622,7 +623,7 @@ CL_SetUpPlayerPrediction (qboolean dopred)
|
||||||
// Sys_MaskPrintf (SYS_DEV, "predict: %i\n", msec);
|
// Sys_MaskPrintf (SYS_DEV, "predict: %i\n", msec);
|
||||||
|
|
||||||
CL_PredictUsercmd (state, &exact, &state->pls.cmd, false);
|
CL_PredictUsercmd (state, &exact, &state->pls.cmd, false);
|
||||||
VectorCopy (exact.pls.origin, pplayer->origin);
|
VectorCopy (exact.pls.es.origin, pplayer->origin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -349,7 +349,7 @@ static void
|
||||||
CL_LinkPlayers (void)
|
CL_LinkPlayers (void)
|
||||||
{
|
{
|
||||||
double playertime;
|
double playertime;
|
||||||
int msec, oldphysent, i, j;
|
int msec, oldphysent, j;
|
||||||
entity_t *ent;
|
entity_t *ent;
|
||||||
frame_t *frame;
|
frame_t *frame;
|
||||||
player_info_t *info;
|
player_info_t *info;
|
||||||
|
@ -381,7 +381,7 @@ CL_LinkPlayers (void)
|
||||||
r_data->player_entity = &cl_player_ents[j];
|
r_data->player_entity = &cl_player_ents[j];
|
||||||
clientplayer = true;
|
clientplayer = true;
|
||||||
} else {
|
} else {
|
||||||
VectorCopy (state->pls.origin, org);
|
VectorCopy (state->pls.es.origin, org);
|
||||||
clientplayer = false;
|
clientplayer = false;
|
||||||
}
|
}
|
||||||
if (info->chat && info->chat->value[0] != '0') {
|
if (info->chat && info->chat->value[0] != '0') {
|
||||||
|
@ -391,28 +391,28 @@ CL_LinkPlayers (void)
|
||||||
dl->die = cl.time + 0.1;
|
dl->die = cl.time + 0.1;
|
||||||
QuatSet (0.0, 1.0, 0.0, 1.0, dl->color);
|
QuatSet (0.0, 1.0, 0.0, 1.0, dl->color);
|
||||||
} else {
|
} else {
|
||||||
CL_NewDlight (j + 1, org, state->pls.effects, state->pls.glow_size,
|
CL_NewDlight (j + 1, org, state->pls.es.effects,
|
||||||
state->pls.glow_color, cl.time);
|
state->pls.es.glow_size, state->pls.es.glow_color,
|
||||||
|
cl.time);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw player?
|
// Draw player?
|
||||||
if (!Cam_DrawPlayer (j))
|
if (!Cam_DrawPlayer (j))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!state->pls.modelindex)
|
if (!state->pls.es.modelindex)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Hack hack hack
|
// Hack hack hack
|
||||||
if (cl_deadbodyfilter->int_val
|
if (cl_deadbodyfilter->int_val
|
||||||
&& state->pls.modelindex == cl_playerindex
|
&& state->pls.es.modelindex == cl_playerindex
|
||||||
&& ((i = state->pls.frame) == 49 || i == 60 || i == 69 || i == 84
|
&& is_dead_body (&state->pls.es))
|
||||||
|| i == 93 || i == 102))
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// predict only half the move to minimize overruns
|
// predict only half the move to minimize overruns
|
||||||
msec = 500 * (playertime - state->state_time);
|
msec = 500 * (playertime - state->state_time);
|
||||||
if (msec <= 0 || (!cl_predict_players->int_val) || cls.demoplayback2) {
|
if (msec <= 0 || (!cl_predict_players->int_val) || cls.demoplayback2) {
|
||||||
VectorCopy (state->pls.origin, ent->origin);
|
VectorCopy (state->pls.es.origin, ent->origin);
|
||||||
} else { // predict players movement
|
} else { // predict players movement
|
||||||
state->pls.cmd.msec = msec = min (msec, 255);
|
state->pls.cmd.msec = msec = min (msec, 255);
|
||||||
|
|
||||||
|
@ -420,7 +420,7 @@ CL_LinkPlayers (void)
|
||||||
CL_SetSolidPlayers (j);
|
CL_SetSolidPlayers (j);
|
||||||
CL_PredictUsercmd (state, &exact, &state->pls.cmd, clientplayer);
|
CL_PredictUsercmd (state, &exact, &state->pls.cmd, clientplayer);
|
||||||
pmove.numphysent = oldphysent;
|
pmove.numphysent = oldphysent;
|
||||||
VectorCopy (exact.pls.origin, ent->origin);
|
VectorCopy (exact.pls.es.origin, ent->origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
// angles
|
// angles
|
||||||
|
@ -432,18 +432,18 @@ CL_LinkPlayers (void)
|
||||||
ang[PITCH] = -state->viewangles[PITCH] / 3.0;
|
ang[PITCH] = -state->viewangles[PITCH] / 3.0;
|
||||||
ang[YAW] = state->viewangles[YAW];
|
ang[YAW] = state->viewangles[YAW];
|
||||||
}
|
}
|
||||||
ang[ROLL] = V_CalcRoll (ang, state->pls.velocity) * 4.0;
|
ang[ROLL] = V_CalcRoll (ang, state->pls.es.velocity) * 4.0;
|
||||||
|
|
||||||
ent->renderer.model = cl.model_precache[state->pls.modelindex];
|
ent->renderer.model = cl.model_precache[state->pls.es.modelindex];
|
||||||
ent->animation.frame = state->pls.frame;
|
ent->animation.frame = state->pls.es.frame;
|
||||||
ent->renderer.skinnum = state->pls.skinnum;
|
ent->renderer.skinnum = state->pls.es.skinnum;
|
||||||
|
|
||||||
CL_TransformEntity (ent, ang);
|
CL_TransformEntity (ent, ang);
|
||||||
|
|
||||||
ent->renderer.min_light = 0;
|
ent->renderer.min_light = 0;
|
||||||
ent->renderer.fullbright = 0;
|
ent->renderer.fullbright = 0;
|
||||||
|
|
||||||
if (state->pls.modelindex == cl_playerindex) { //XXX
|
if (state->pls.es.modelindex == cl_playerindex) { //XXX
|
||||||
// use custom skin
|
// use custom skin
|
||||||
ent->renderer.skin = info->skin;
|
ent->renderer.skin = info->skin;
|
||||||
|
|
||||||
|
@ -460,9 +460,9 @@ CL_LinkPlayers (void)
|
||||||
// stuff entity in map
|
// stuff entity in map
|
||||||
r_funcs->R_AddEfrags (&cl.worldmodel->brush, ent);
|
r_funcs->R_AddEfrags (&cl.worldmodel->brush, ent);
|
||||||
|
|
||||||
if (state->pls.effects & EF_FLAG1)
|
if (state->pls.es.effects & EF_FLAG1)
|
||||||
CL_AddFlagModels (ent, 0, j);
|
CL_AddFlagModels (ent, 0, j);
|
||||||
else if (state->pls.effects & EF_FLAG2)
|
else if (state->pls.es.effects & EF_FLAG2)
|
||||||
CL_AddFlagModels (ent, 1, j);
|
CL_AddFlagModels (ent, 1, j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1631,8 +1631,8 @@ Host_Frame (float time)
|
||||||
oldself = &cl.frames[(cls.netchan.outgoing_sequence - 1)
|
oldself = &cl.frames[(cls.netchan.outgoing_sequence - 1)
|
||||||
& UPDATE_MASK].playerstate[cl.playernum];
|
& UPDATE_MASK].playerstate[cl.playernum];
|
||||||
self->messagenum = cl.parsecount;
|
self->messagenum = cl.parsecount;
|
||||||
VectorCopy (oldself->pls.origin, self->pls.origin);
|
VectorCopy (oldself->pls.es.origin, self->pls.es.origin);
|
||||||
VectorCopy (oldself->pls.velocity, self->pls.velocity);
|
VectorCopy (oldself->pls.es.velocity, self->pls.es.velocity);
|
||||||
VectorCopy (oldself->viewangles, self->viewangles);
|
VectorCopy (oldself->viewangles, self->viewangles);
|
||||||
|
|
||||||
CL_ParseClientdata ();
|
CL_ParseClientdata ();
|
||||||
|
|
|
@ -51,10 +51,10 @@ CL_PredictUsercmd (player_state_t * from, player_state_t * to, usercmd_t *u,
|
||||||
qboolean clientplayer)
|
qboolean clientplayer)
|
||||||
{
|
{
|
||||||
if (!clientplayer) {
|
if (!clientplayer) {
|
||||||
if (VectorIsZero (from->pls.velocity)) {
|
if (VectorIsZero (from->pls.es.velocity)) {
|
||||||
VectorCopy (from->pls.origin, to->pls.origin);
|
VectorCopy (from->pls.es.origin, to->pls.es.origin);
|
||||||
VectorCopy (u->angles, to->viewangles);
|
VectorCopy (u->angles, to->viewangles);
|
||||||
VectorCopy (from->pls.velocity, to->pls.velocity);
|
VectorCopy (from->pls.es.velocity, to->pls.es.velocity);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,9 +72,9 @@ CL_PredictUsercmd (player_state_t * from, player_state_t * to, usercmd_t *u,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
VectorCopy (from->pls.origin, pmove.origin);
|
VectorCopy (from->pls.es.origin, pmove.origin);
|
||||||
VectorCopy (u->angles, pmove.angles);
|
VectorCopy (u->angles, pmove.angles);
|
||||||
VectorCopy (from->pls.velocity, pmove.velocity);
|
VectorCopy (from->pls.es.velocity, pmove.velocity);
|
||||||
|
|
||||||
pmove.oldbuttons = from->oldbuttons;
|
pmove.oldbuttons = from->oldbuttons;
|
||||||
pmove.oldonground = from->oldonground;
|
pmove.oldonground = from->oldonground;
|
||||||
|
@ -92,11 +92,11 @@ CL_PredictUsercmd (player_state_t * from, player_state_t * to, usercmd_t *u,
|
||||||
to->waterjumptime = pmove.waterjumptime;
|
to->waterjumptime = pmove.waterjumptime;
|
||||||
to->oldbuttons = pmove.oldbuttons; // Tonik
|
to->oldbuttons = pmove.oldbuttons; // Tonik
|
||||||
to->oldonground = pmove.oldonground;
|
to->oldonground = pmove.oldonground;
|
||||||
VectorCopy (pmove.origin, to->pls.origin);
|
VectorCopy (pmove.origin, to->pls.es.origin);
|
||||||
VectorCopy (pmove.angles, to->viewangles);
|
VectorCopy (pmove.angles, to->viewangles);
|
||||||
VectorCopy (pmove.velocity, to->pls.velocity);
|
VectorCopy (pmove.velocity, to->pls.es.velocity);
|
||||||
to->onground = onground;
|
to->onground = onground;
|
||||||
to->pls.weaponframe = from->pls.weaponframe;
|
to->pls.es.weaponframe = from->pls.es.weaponframe;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -137,8 +137,8 @@ CL_PredictMove (void)
|
||||||
from = &cl.frames[cls.netchan.incoming_sequence & UPDATE_MASK];
|
from = &cl.frames[cls.netchan.incoming_sequence & UPDATE_MASK];
|
||||||
|
|
||||||
if (!cl_predict->int_val) {
|
if (!cl_predict->int_val) {
|
||||||
VectorCopy (from->playerstate[cl.playernum].pls.velocity, cl.simvel);
|
VectorCopy (from->playerstate[cl.playernum].pls.es.velocity, cl.simvel);
|
||||||
VectorCopy (from->playerstate[cl.playernum].pls.origin, cl.simorg);
|
VectorCopy (from->playerstate[cl.playernum].pls.es.origin, cl.simorg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,21 +175,22 @@ CL_PredictMove (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < 3; i++)
|
||||||
if (fabs (from->playerstate[cl.playernum].pls.origin[i] -
|
if (fabs (from->playerstate[cl.playernum].pls.es.origin[i] -
|
||||||
to->playerstate[cl.playernum].pls.origin[i]) > 128) {
|
to->playerstate[cl.playernum].pls.es.origin[i]) > 128) {
|
||||||
// teleported, so don't lerp
|
// teleported, so don't lerp
|
||||||
VectorCopy (to->playerstate[cl.playernum].pls.velocity, cl.simvel);
|
VectorCopy (to->playerstate[cl.playernum].pls.es.velocity,
|
||||||
VectorCopy (to->playerstate[cl.playernum].pls.origin, cl.simorg);
|
cl.simvel);
|
||||||
|
VectorCopy (to->playerstate[cl.playernum].pls.es.origin, cl.simorg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
cl.simorg[i] = from->playerstate[cl.playernum].pls.origin[i] +
|
cl.simorg[i] = from->playerstate[cl.playernum].pls.es.origin[i] +
|
||||||
f * (to->playerstate[cl.playernum].pls.origin[i] -
|
f * (to->playerstate[cl.playernum].pls.es.origin[i] -
|
||||||
from->playerstate[cl.playernum].pls.origin[i]);
|
from->playerstate[cl.playernum].pls.es.origin[i]);
|
||||||
cl.simvel[i] = from->playerstate[cl.playernum].pls.velocity[i] +
|
cl.simvel[i] = from->playerstate[cl.playernum].pls.es.velocity[i] +
|
||||||
f * (to->playerstate[cl.playernum].pls.velocity[i] -
|
f * (to->playerstate[cl.playernum].pls.es.velocity[i] -
|
||||||
from->playerstate[cl.playernum].pls.velocity[i]);
|
from->playerstate[cl.playernum].pls.es.velocity[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -600,7 +600,7 @@ V_CalcViewRoll (void)
|
||||||
v_dmg_time -= host_frametime;
|
v_dmg_time -= host_frametime;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (view_state->pls.flags & PF_DEAD) // PF_GIB will also set PF_DEAD
|
if (view_state->pls.es.flags & PF_DEAD) // PF_GIB will also set PF_DEAD
|
||||||
r_data->refdef->viewangles[ROLL] = 80; // dead view angle
|
r_data->refdef->viewangles[ROLL] = 80; // dead view angle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -700,12 +700,12 @@ V_CalcRefdef (void)
|
||||||
else if (r_data->scr_viewsize->int_val == 80)
|
else if (r_data->scr_viewsize->int_val == 80)
|
||||||
view->origin[2] += 0.5;
|
view->origin[2] += 0.5;
|
||||||
|
|
||||||
if (view_state->pls.flags & (PF_GIB | PF_DEAD)) {
|
if (view_state->pls.es.flags & (PF_GIB | PF_DEAD)) {
|
||||||
view->renderer.model = NULL;
|
view->renderer.model = NULL;
|
||||||
} else {
|
} else {
|
||||||
view->renderer.model = cl.model_precache[cl.stats[STAT_WEAPON]];
|
view->renderer.model = cl.model_precache[cl.stats[STAT_WEAPON]];
|
||||||
}
|
}
|
||||||
view->animation.frame = view_state->pls.weaponframe;
|
view->animation.frame = view_state->pls.es.weaponframe;
|
||||||
view->renderer.skin = 0;
|
view->renderer.skin = 0;
|
||||||
|
|
||||||
// set up the refresh position
|
// set up the refresh position
|
||||||
|
@ -757,9 +757,9 @@ V_RenderView (void)
|
||||||
view_frame = &cl.frames[cls.netchan.incoming_sequence & UPDATE_MASK];
|
view_frame = &cl.frames[cls.netchan.incoming_sequence & UPDATE_MASK];
|
||||||
view_state = &view_frame->playerstate[cl.playernum];
|
view_state = &view_frame->playerstate[cl.playernum];
|
||||||
|
|
||||||
if (view_state->pls.flags & PF_GIB)
|
if (view_state->pls.es.flags & PF_GIB)
|
||||||
cl.viewheight = 8; // gib view height
|
cl.viewheight = 8; // gib view height
|
||||||
else if (view_state->pls.flags & PF_DEAD)
|
else if (view_state->pls.es.flags & PF_DEAD)
|
||||||
cl.viewheight = -16; // corpse view height
|
cl.viewheight = -16; // corpse view height
|
||||||
else {
|
else {
|
||||||
cl.viewheight = DEFAULT_VIEWHEIGHT; // view height
|
cl.viewheight = DEFAULT_VIEWHEIGHT; // view height
|
||||||
|
|
|
@ -400,7 +400,7 @@ write_demoplayer (delta_t *delta, plent_state_t *from, plent_state_t *to,
|
||||||
int flags;
|
int flags;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
flags = to->flags >> 1; // convert PF_(GIB|DEAD) to DF_(GIB|DEAD)
|
flags = to->es.flags >> 1; // convert PF_(GIB|DEAD) to DF_(GIB|DEAD)
|
||||||
flags &= DF_GIB | DF_DEAD; // PF_MSEC and PF_COMMAND aren't wanted
|
flags &= DF_GIB | DF_DEAD; // PF_MSEC and PF_COMMAND aren't wanted
|
||||||
if (full) {
|
if (full) {
|
||||||
flags |= DF_ORIGIN | (DF_ORIGIN << 1) | (DF_ORIGIN << 2)
|
flags |= DF_ORIGIN | (DF_ORIGIN << 1) | (DF_ORIGIN << 2)
|
||||||
|
@ -408,55 +408,55 @@ write_demoplayer (delta_t *delta, plent_state_t *from, plent_state_t *to,
|
||||||
| DF_EFFECTS | DF_SKINNUM | DF_WEAPONFRAME | DF_MODEL;
|
| DF_EFFECTS | DF_SKINNUM | DF_WEAPONFRAME | DF_MODEL;
|
||||||
} else {
|
} else {
|
||||||
for (j = 0; j < 3; j++)
|
for (j = 0; j < 3; j++)
|
||||||
if (from->origin[j] != to->origin[j])
|
if (from->es.origin[j] != to->es.origin[j])
|
||||||
flags |= DF_ORIGIN << j;
|
flags |= DF_ORIGIN << j;
|
||||||
|
|
||||||
for (j = 0; j < 3; j++)
|
for (j = 0; j < 3; j++)
|
||||||
if (from->cmd.angles[j] != to->cmd.angles[j])
|
if (from->cmd.angles[j] != to->cmd.angles[j])
|
||||||
flags |= DF_ANGLES << j;
|
flags |= DF_ANGLES << j;
|
||||||
|
|
||||||
if (from->modelindex != to->modelindex)
|
if (from->es.modelindex != to->es.modelindex)
|
||||||
flags |= DF_MODEL;
|
flags |= DF_MODEL;
|
||||||
if ((from->effects & 0xff) != (to->effects & 0xff))
|
if ((from->es.effects & 0xff) != (to->es.effects & 0xff))
|
||||||
flags |= DF_EFFECTS;
|
flags |= DF_EFFECTS;
|
||||||
if (from->skinnum != to->skinnum)
|
if (from->es.skinnum != to->es.skinnum)
|
||||||
flags |= DF_SKINNUM;
|
flags |= DF_SKINNUM;
|
||||||
if (from->weaponframe != to->weaponframe)
|
if (from->es.weaponframe != to->es.weaponframe)
|
||||||
flags |= DF_WEAPONFRAME;
|
flags |= DF_WEAPONFRAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
MSG_WriteByte (msg, svc_playerinfo);
|
MSG_WriteByte (msg, svc_playerinfo);
|
||||||
MSG_WriteByte (msg, to->number);
|
MSG_WriteByte (msg, to->es.number);
|
||||||
MSG_WriteShort (msg, flags);
|
MSG_WriteShort (msg, flags);
|
||||||
|
|
||||||
MSG_WriteByte (msg, to->frame);
|
MSG_WriteByte (msg, to->es.frame);
|
||||||
|
|
||||||
for (j = 0; j < 3; j++)
|
for (j = 0; j < 3; j++)
|
||||||
if (flags & (DF_ORIGIN << j))
|
if (flags & (DF_ORIGIN << j))
|
||||||
MSG_WriteCoord (msg, to->origin[j]);
|
MSG_WriteCoord (msg, to->es.origin[j]);
|
||||||
|
|
||||||
for (j = 0; j < 3; j++)
|
for (j = 0; j < 3; j++)
|
||||||
if (flags & (DF_ANGLES << j))
|
if (flags & (DF_ANGLES << j))
|
||||||
MSG_WriteAngle16 (msg, to->cmd.angles[j]);
|
MSG_WriteAngle16 (msg, to->cmd.angles[j]);
|
||||||
|
|
||||||
if (flags & DF_MODEL)
|
if (flags & DF_MODEL)
|
||||||
MSG_WriteByte (msg, to->modelindex);
|
MSG_WriteByte (msg, to->es.modelindex);
|
||||||
|
|
||||||
if (flags & DF_SKINNUM)
|
if (flags & DF_SKINNUM)
|
||||||
MSG_WriteByte (msg, to->skinnum);
|
MSG_WriteByte (msg, to->es.skinnum);
|
||||||
|
|
||||||
if (flags & DF_EFFECTS)
|
if (flags & DF_EFFECTS)
|
||||||
MSG_WriteByte (msg, to->effects);
|
MSG_WriteByte (msg, to->es.effects);
|
||||||
|
|
||||||
if (flags & DF_WEAPONFRAME)
|
if (flags & DF_WEAPONFRAME)
|
||||||
MSG_WriteByte (msg, to->weaponframe);
|
MSG_WriteByte (msg, to->es.weaponframe);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
write_player (delta_t *delta, plent_state_t *from, plent_state_t *to,
|
write_player (delta_t *delta, plent_state_t *from, plent_state_t *to,
|
||||||
sizebuf_t *msg, int mask, int full)
|
sizebuf_t *msg, int mask, int full)
|
||||||
{
|
{
|
||||||
int flags = to->flags;
|
int flags = to->es.flags;
|
||||||
int qf_bits = 0;
|
int qf_bits = 0;
|
||||||
int i;
|
int i;
|
||||||
int ds = delta->delta_sequence & 0x7f;
|
int ds = delta->delta_sequence & 0x7f;
|
||||||
|
@ -472,30 +472,30 @@ write_player (delta_t *delta, plent_state_t *from, plent_state_t *to,
|
||||||
ds = -1;
|
ds = -1;
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < 3; i++)
|
||||||
if (from->velocity[i] != to->velocity[i])
|
if (from->es.velocity[i] != to->es.velocity[i])
|
||||||
flags |= PF_VELOCITY1 << i;
|
flags |= PF_VELOCITY1 << i;
|
||||||
if (from->modelindex != to->modelindex)
|
if (from->es.modelindex != to->es.modelindex)
|
||||||
flags |= PF_MODEL;
|
flags |= PF_MODEL;
|
||||||
if (from->skinnum != to->skinnum)
|
if (from->es.skinnum != to->es.skinnum)
|
||||||
flags |= PF_SKINNUM;
|
flags |= PF_SKINNUM;
|
||||||
if ((from->effects & 0xff) != (to->effects &0xff))
|
if ((from->es.effects & 0xff) != (to->es.effects &0xff))
|
||||||
flags |= PF_EFFECTS;
|
flags |= PF_EFFECTS;
|
||||||
if (from->weaponframe != to->weaponframe)
|
if (from->es.weaponframe != to->es.weaponframe)
|
||||||
flags |= PF_WEAPONFRAME;
|
flags |= PF_WEAPONFRAME;
|
||||||
|
|
||||||
if (from->alpha != to->alpha)
|
if (from->es.alpha != to->es.alpha)
|
||||||
qf_bits |= PF_ALPHA;
|
qf_bits |= PF_ALPHA;
|
||||||
if (from->scale != to->scale)
|
if (from->es.scale != to->es.scale)
|
||||||
qf_bits |= PF_SCALE;
|
qf_bits |= PF_SCALE;
|
||||||
if ((from->effects & 0xff00) != (to->effects & 0xff00))
|
if ((from->es.effects & 0xff00) != (to->es.effects & 0xff00))
|
||||||
qf_bits |= PF_EFFECTS2;
|
qf_bits |= PF_EFFECTS2;
|
||||||
if (from->glow_size != to->glow_size)
|
if (from->es.glow_size != to->es.glow_size)
|
||||||
qf_bits |= PF_GLOWSIZE;
|
qf_bits |= PF_GLOWSIZE;
|
||||||
if (from->glow_color != to->glow_color)
|
if (from->es.glow_color != to->es.glow_color)
|
||||||
qf_bits |= PF_GLOWCOLOR;
|
qf_bits |= PF_GLOWCOLOR;
|
||||||
if (from->colormod != to->colormod)
|
if (from->es.colormod != to->es.colormod)
|
||||||
qf_bits |= PF_COLORMOD;
|
qf_bits |= PF_COLORMOD;
|
||||||
if ((from->frame & 0xff00) != (to->frame & 0xff00))
|
if ((from->es.frame & 0xff00) != (to->es.frame & 0xff00))
|
||||||
qf_bits |= PF_FRAME2;
|
qf_bits |= PF_FRAME2;
|
||||||
if (qf_bits)
|
if (qf_bits)
|
||||||
flags |= PF_QF;
|
flags |= PF_QF;
|
||||||
|
@ -506,12 +506,12 @@ write_player (delta_t *delta, plent_state_t *from, plent_state_t *to,
|
||||||
MSG_WriteByte (msg, svc_playerinfo);
|
MSG_WriteByte (msg, svc_playerinfo);
|
||||||
if (delta->type == dt_tp_qtv)
|
if (delta->type == dt_tp_qtv)
|
||||||
MSG_WriteByte (msg, ds);
|
MSG_WriteByte (msg, ds);
|
||||||
MSG_WriteByte (msg, to->number);
|
MSG_WriteByte (msg, to->es.number);
|
||||||
MSG_WriteShort (msg, flags);
|
MSG_WriteShort (msg, flags);
|
||||||
|
|
||||||
MSG_WriteCoordV (msg, to->origin);
|
MSG_WriteCoordV (msg, to->es.origin);
|
||||||
|
|
||||||
MSG_WriteByte (msg, to->frame);
|
MSG_WriteByte (msg, to->es.frame);
|
||||||
|
|
||||||
if (flags & PF_MSEC)
|
if (flags & PF_MSEC)
|
||||||
MSG_WriteByte (msg, to->msec);
|
MSG_WriteByte (msg, to->msec);
|
||||||
|
@ -519,32 +519,32 @@ write_player (delta_t *delta, plent_state_t *from, plent_state_t *to,
|
||||||
MSG_WriteDeltaUsercmd (msg, &from->cmd, &to->cmd);
|
MSG_WriteDeltaUsercmd (msg, &from->cmd, &to->cmd);
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < 3; i++)
|
||||||
if (flags & (PF_VELOCITY1 << i))
|
if (flags & (PF_VELOCITY1 << i))
|
||||||
MSG_WriteShort (msg, to->velocity[i]);
|
MSG_WriteShort (msg, to->es.velocity[i]);
|
||||||
if (flags & PF_MODEL)
|
if (flags & PF_MODEL)
|
||||||
MSG_WriteByte (msg, to->modelindex);
|
MSG_WriteByte (msg, to->es.modelindex);
|
||||||
if (flags & PF_SKINNUM)
|
if (flags & PF_SKINNUM)
|
||||||
MSG_WriteByte (msg, to->skinnum);
|
MSG_WriteByte (msg, to->es.skinnum);
|
||||||
if (flags & PF_EFFECTS)
|
if (flags & PF_EFFECTS)
|
||||||
MSG_WriteByte (msg, to->effects);
|
MSG_WriteByte (msg, to->es.effects);
|
||||||
if (flags & PF_WEAPONFRAME)
|
if (flags & PF_WEAPONFRAME)
|
||||||
MSG_WriteByte (msg, to->weaponframe);
|
MSG_WriteByte (msg, to->es.weaponframe);
|
||||||
|
|
||||||
if (flags & PF_QF) {
|
if (flags & PF_QF) {
|
||||||
MSG_WriteByte (msg, qf_bits);
|
MSG_WriteByte (msg, qf_bits);
|
||||||
if (qf_bits & PF_ALPHA)
|
if (qf_bits & PF_ALPHA)
|
||||||
MSG_WriteByte (msg, to->alpha);
|
MSG_WriteByte (msg, to->es.alpha);
|
||||||
if (qf_bits & PF_SCALE)
|
if (qf_bits & PF_SCALE)
|
||||||
MSG_WriteByte (msg, to->scale);
|
MSG_WriteByte (msg, to->es.scale);
|
||||||
if (qf_bits & PF_EFFECTS2)
|
if (qf_bits & PF_EFFECTS2)
|
||||||
MSG_WriteByte (msg, to->effects >> 8);
|
MSG_WriteByte (msg, to->es.effects >> 8);
|
||||||
if (qf_bits & PF_GLOWSIZE)
|
if (qf_bits & PF_GLOWSIZE)
|
||||||
MSG_WriteByte (msg, to->glow_size);
|
MSG_WriteByte (msg, to->es.glow_size);
|
||||||
if (qf_bits & PF_GLOWCOLOR)
|
if (qf_bits & PF_GLOWCOLOR)
|
||||||
MSG_WriteByte (msg, to->glow_color);
|
MSG_WriteByte (msg, to->es.glow_color);
|
||||||
if (qf_bits & PF_COLORMOD)
|
if (qf_bits & PF_COLORMOD)
|
||||||
MSG_WriteByte (msg, to->colormod);
|
MSG_WriteByte (msg, to->es.colormod);
|
||||||
if (qf_bits & PF_FRAME2)
|
if (qf_bits & PF_FRAME2)
|
||||||
MSG_WriteByte (msg, to->frame);
|
MSG_WriteByte (msg, to->es.frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -566,19 +566,19 @@ SV_WritePlayersToClient (delta_t *delta, byte *pvs, sizebuf_t *msg)
|
||||||
void (*write) (delta_t *, plent_state_t *, plent_state_t *, sizebuf_t *,
|
void (*write) (delta_t *, plent_state_t *, plent_state_t *, sizebuf_t *,
|
||||||
int, int);
|
int, int);
|
||||||
|
|
||||||
if (!null_player_state.alpha) {
|
if (!null_player_state.es.alpha) {
|
||||||
null_player_state.alpha = 255;
|
null_player_state.es.alpha = 255;
|
||||||
null_player_state.scale = 16;
|
null_player_state.es.scale = 16;
|
||||||
null_player_state.glow_size = 0;
|
null_player_state.es.glow_size = 0;
|
||||||
null_player_state.glow_color = 254;
|
null_player_state.es.glow_color = 254;
|
||||||
null_player_state.colormod = 255;
|
null_player_state.es.colormod = 255;
|
||||||
}
|
}
|
||||||
null_player_state.modelindex = 0;
|
null_player_state.es.modelindex = 0;
|
||||||
|
|
||||||
if (delta->client) {
|
if (delta->client) {
|
||||||
clent = delta->client->edict;
|
clent = delta->client->edict;
|
||||||
spec_track = delta->client->spec_track;
|
spec_track = delta->client->spec_track;
|
||||||
null_player_state.modelindex = sv_playermodel;
|
null_player_state.es.modelindex = sv_playermodel;
|
||||||
full = 0; // normal qw clients don't get real deltas on players
|
full = 0; // normal qw clients don't get real deltas on players
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -625,9 +625,9 @@ SV_WritePlayersToClient (delta_t *delta, byte *pvs, sizebuf_t *msg)
|
||||||
state = &pack->players[pack->num_players];
|
state = &pack->players[pack->num_players];
|
||||||
pack->num_players++;
|
pack->num_players++;
|
||||||
|
|
||||||
state->number = j;
|
state->es.number = j;
|
||||||
state->flags = 0;
|
state->es.flags = 0;
|
||||||
VectorCopy (SVvector (ent, origin), state->origin);
|
VectorCopy (SVvector (ent, origin), state->es.origin);
|
||||||
|
|
||||||
state->msec = min (255, 1000 * (sv.time - cl->localtime));
|
state->msec = min (255, 1000 * (sv.time - cl->localtime));
|
||||||
|
|
||||||
|
@ -639,44 +639,44 @@ SV_WritePlayersToClient (delta_t *delta, byte *pvs, sizebuf_t *msg)
|
||||||
state->cmd.angles[0] = 0;
|
state->cmd.angles[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
VectorCopy (SVvector (ent, velocity), state->velocity);
|
VectorCopy (SVvector (ent, velocity), state->es.velocity);
|
||||||
state->modelindex = SVfloat (ent, modelindex);
|
state->es.modelindex = SVfloat (ent, modelindex);
|
||||||
state->frame = SVfloat (ent, frame);
|
state->es.frame = SVfloat (ent, frame);
|
||||||
state->skinnum = SVfloat (ent, skin);
|
state->es.skinnum = SVfloat (ent, skin);
|
||||||
state->effects = SVfloat (ent, effects);
|
state->es.effects = SVfloat (ent, effects);
|
||||||
state->weaponframe = SVfloat (ent, weaponframe);
|
state->es.weaponframe = SVfloat (ent, weaponframe);
|
||||||
|
|
||||||
if (SVfloat (ent, health) <= 0)
|
if (SVfloat (ent, health) <= 0)
|
||||||
state->flags |= PF_DEAD;
|
state->es.flags |= PF_DEAD;
|
||||||
if (SVvector (ent, mins)[2] != -24)
|
if (SVvector (ent, mins)[2] != -24)
|
||||||
state->flags |= PF_GIB;
|
state->es.flags |= PF_GIB;
|
||||||
state->flags |= PF_MSEC | PF_COMMAND;
|
state->es.flags |= PF_MSEC | PF_COMMAND;
|
||||||
|
|
||||||
state->alpha = 255;
|
state->es.alpha = 255;
|
||||||
state->scale = 16;
|
state->es.scale = 16;
|
||||||
state->glow_size = 0;
|
state->es.glow_size = 0;
|
||||||
state->glow_color = 254;
|
state->es.glow_color = 254;
|
||||||
state->colormod = 255;
|
state->es.colormod = 255;
|
||||||
if (sv_fields.alpha != -1 && SVfloat (ent, alpha)) {
|
if (sv_fields.alpha != -1 && SVfloat (ent, alpha)) {
|
||||||
float alpha = SVfloat (ent, alpha);
|
float alpha = SVfloat (ent, alpha);
|
||||||
state->alpha = bound (0, alpha, 1) * 255.0;
|
state->es.alpha = bound (0, alpha, 1) * 255.0;
|
||||||
}
|
}
|
||||||
if (sv_fields.scale != -1 && SVfloat (ent, scale)) {
|
if (sv_fields.scale != -1 && SVfloat (ent, scale)) {
|
||||||
float scale = SVfloat (ent, scale);
|
float scale = SVfloat (ent, scale);
|
||||||
state->scale = bound (0, scale, 15.9375) * 16;
|
state->es.scale = bound (0, scale, 15.9375) * 16;
|
||||||
}
|
}
|
||||||
if (sv_fields.glow_size != -1 && SVfloat (ent, glow_size)) {
|
if (sv_fields.glow_size != -1 && SVfloat (ent, glow_size)) {
|
||||||
int glow_size = SVfloat (ent, glow_size);
|
int glow_size = SVfloat (ent, glow_size);
|
||||||
state->glow_size = bound (-1024, glow_size, 1016) >> 3;
|
state->es.glow_size = bound (-1024, glow_size, 1016) >> 3;
|
||||||
}
|
}
|
||||||
if (sv_fields.glow_color != -1 && SVfloat (ent, glow_color))
|
if (sv_fields.glow_color != -1 && SVfloat (ent, glow_color))
|
||||||
state->glow_color = SVfloat (ent, glow_color);
|
state->es.glow_color = SVfloat (ent, glow_color);
|
||||||
if (sv_fields.colormod != -1
|
if (sv_fields.colormod != -1
|
||||||
&& !VectorIsZero (SVvector (ent, colormod))) {
|
&& !VectorIsZero (SVvector (ent, colormod))) {
|
||||||
float *colormod= SVvector (ent, colormod);
|
float *colormod= SVvector (ent, colormod);
|
||||||
state->colormod = ((int) (bound (0, colormod[0], 1) * 7) << 5) |
|
state->es.colormod = ((int) (bound (0, colormod[0], 1) * 7) << 5) |
|
||||||
((int) (bound (0, colormod[1], 1) * 7) << 2) |
|
((int) (bound (0, colormod[1], 1) * 7) << 2) |
|
||||||
(int) (bound (0, colormod[2], 1) * 3);
|
(int) (bound (0, colormod[2], 1) * 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cl->spectator) {
|
if (cl->spectator) {
|
||||||
|
@ -693,10 +693,10 @@ SV_WritePlayersToClient (delta_t *delta, byte *pvs, sizebuf_t *msg)
|
||||||
|
|
||||||
if (from_pack && from_pack->players) {
|
if (from_pack && from_pack->players) {
|
||||||
while (k < from_pack->num_players
|
while (k < from_pack->num_players
|
||||||
&& from_pack->players[k].number < state->number)
|
&& from_pack->players[k].es.number < state->es.number)
|
||||||
k++;
|
k++;
|
||||||
if (k < from_pack->num_players
|
if (k < from_pack->num_players
|
||||||
&& from_pack->players[k].number == state->number) {
|
&& from_pack->players[k].es.number == state->es.number) {
|
||||||
write (delta, &from_pack->players[k], state, msg, mask, full);
|
write (delta, &from_pack->players[k], state, msg, mask, full);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue