CL_Screen_NewMap();
}
+void CL_SetInfo(const char *key, const char *value, qboolean send, qboolean allowstarkey, qboolean allowmodel, qboolean quiet)
+{
+ if (strchr(key, '\"') || strchr(value, '\"') || (!allowstarkey && key[0] == '*') || (!allowmodel && (!strcasecmp(Cmd_Argv(1), "pmodel") || !strcasecmp(Cmd_Argv(1), "emodel"))))
+ {
+ if (!quiet)
+ Con_Printf("Can't setinfo \"%s\" \"%s\"\n");
+ return;
+ }
+ InfoString_SetValue(cls.userinfo, sizeof(cls.userinfo), key, value);
+ if (cls.state == ca_connected)
+ {
+ if (cls.protocol == PROTOCOL_QUAKEWORLD)
+ {
+ MSG_WriteByte(&cls.netcon->message, qw_clc_stringcmd);
+ MSG_WriteString(&cls.netcon->message, va("setinfo \"%s\" \"%s\"", key, value));
+ }
+ else if (!strcasecmp(key, "name"))
+ {
+ MSG_WriteByte(&cls.netcon->message, clc_stringcmd);
+ MSG_WriteString(&cls.netcon->message, va("name \"%s\"", value));
+ }
+ else if (!strcasecmp(key, "playermodel"))
+ {
+ MSG_WriteByte(&cls.netcon->message, clc_stringcmd);
+ MSG_WriteString(&cls.netcon->message, va("playermodel \"%s\"", value));
+ }
+ else if (!strcasecmp(key, "playerskin"))
+ {
+ MSG_WriteByte(&cls.netcon->message, clc_stringcmd);
+ MSG_WriteString(&cls.netcon->message, va("playerskin \"%s\"", value));
+ }
+ else if (!strcasecmp(key, "topcolor"))
+ {
+ // don't send anything, the combined color code will be updated manually
+ }
+ else if (!strcasecmp(key, "bottomcolor"))
+ {
+ // don't send anything, the combined color code will be updated manually
+ }
+ else if (!strcasecmp(key, "rate"))
+ {
+ MSG_WriteByte(&cls.netcon->message, clc_stringcmd);
+ MSG_WriteString(&cls.netcon->message, va("rate \"%s\"", value));
+ }
+ }
+}
+
void CL_ExpandEntities(int num)
{
int i, oldmaxentities;
oldmaxentities = cl.max_csqcentities;
oldentities = cl.csqcentities;
cl.max_csqcentities = (num & ~255) + 256;
- cl.csqcentities = Mem_Alloc(cls.levelmempool, cl.max_csqcentities * sizeof(entity_t));
+ cl.csqcentities = (entity_t *)Mem_Alloc(cls.levelmempool, cl.max_csqcentities * sizeof(entity_t));
memcpy(cl.csqcentities, oldentities, oldmaxentities * sizeof(entity_t));
Mem_Free(oldentities);
for (i = oldmaxentities;i < cl.max_csqcentities;i++)
l = (i-1) % cl.lightstyle[j].length;
k = cl.lightstyle[j].map[k] - 'a';
l = cl.lightstyle[j].map[l] - 'a';
- r_refdef.lightstylevalue[j] = ((k*frac)+(l*(1-frac)))*22;
+ r_refdef.lightstylevalue[j] = (unsigned short)(((k*frac)+(l*(1-frac)))*22);
}
}
// if it's the player entity, update according to client movement
if (e == cl.entities + cl.playerentity && cl.movement)// && !e->csqc)
{
- lerp = (cl.time - cl.mtime[1]) / (cl.mtime[0] - cl.mtime[1]);
+ lerp = (cl.time - cl.movement_time[1]) / (cl.movement_time[0] - cl.movement_time[1]);
lerp = bound(0, lerp, 1);
VectorLerp(cl.movement_oldorigin, lerp, cl.movement_origin, origin);
VectorSet(angles, 0, cl.viewangles[1], 0);
tempmatrix.m[1][3] = trace.endpos[1];
tempmatrix.m[2][3] = trace.endpos[2];
CL_AllocDlight(NULL, &tempmatrix, 100, e->persistent.muzzleflash, e->persistent.muzzleflash, e->persistent.muzzleflash, 0, 0, 0, -1, true, 0, 0.25, 0.25, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
- e->persistent.muzzleflash -= cl.frametime * 10;
+ e->persistent.muzzleflash -= (cl.time - cl.oldtime) * 10;
}
// LordHavoc: if the model has no flags, don't check each
if (e->render.model && e->render.model->flags && (!e->state_current.tagentity && !(e->render.flags & RENDER_VIEWMODEL)))
if (len > 0)
len = 1.0f / len;
VectorScale(vel, len, vel);
- len = VectorDistance(origin, e->persistent.trail_origin);
- CL_ParticleEffect(trailtype, len, e->persistent.trail_origin, origin, vel, vel, e, e->state_current.glowcolor);
+ CL_ParticleEffect(trailtype, 1, e->persistent.trail_origin, origin, vel, vel, e, e->state_current.glowcolor);
}
VectorCopy(origin, e->persistent.trail_origin);
// tenebrae's sprites are all additive mode (weird)
if (e->active)
{
frame = (cl.time - e->starttime) * e->framerate + e->startframe;
- intframe = frame;
+ intframe = (int)frame;
if (intframe < 0 || intframe >= e->endframe)
{
memset(e, 0, sizeof(*e));
// if coming from the player, update the start position
//if (b->entity == cl.viewentity)
// Matrix4x4_OriginFromMatrix(&cl.entities[cl.viewentity].render.matrix, b->start);
- if (cl_beams_relative.integer && b->entity && cl.entities[b->entity].state_current.active && b->relativestartvalid)
+ if (cl_beams_relative.integer >= 1 && b->entity && (b->entity == cl.viewentity || cl_beams_relative.integer >= 2) && cl.entities[b->entity].state_current.active && b->relativestartvalid)
{
entity_render_t *r = &cl.entities[b->entity].render;
//Matrix4x4_OriginFromMatrix(&r->matrix, origin);
void CL_LerpPlayer(float frac)
{
int i;
- float d;
cl.viewzoom = cl.mviewzoom[1] + frac * (cl.mviewzoom[0] - cl.mviewzoom[1]);
for (i = 0;i < 3;i++)
cl.punchvector[i] = cl.mpunchvector[1][i] + frac * (cl.mpunchvector[0][i] - cl.mpunchvector[1][i]);
cl.velocity[i] = cl.mvelocity[1][i] + frac * (cl.mvelocity[0][i] - cl.mvelocity[1][i]);
}
-
- if (cls.demoplayback)
- {
- // interpolate the angles
- for (i = 0;i < 3;i++)
- {
- d = cl.mviewangles[0][i] - cl.mviewangles[1][i];
- if (d > 180)
- d -= 360;
- else if (d < -180)
- d += 360;
- cl.viewangles[i] = cl.mviewangles[1][i] + frac * d;
- }
- }
}
void CSQC_RelinkAllEntities (int drawmask)
{
+ cl.num_brushmodel_entities = 0;
CL_RelinkNetworkEntities(drawmask);
if(drawmask & ENTMASK_ENGINE)
{
r_refdef.extraupdate = !r_speeds.integer;
r_refdef.numentities = 0;
r_refdef.viewentitymatrix = identitymatrix;
- cl.num_brushmodel_entities = 0;
if (cls.state == ca_connected && cls.signon == SIGNONS)
{
CL_ClientMovement_Replay();
if(!csqc_loaded) //[515]: csqc
{
+ cl.num_brushmodel_entities = 0;
CL_RelinkNetworkEntities(65535);
// move particles
// update view blend
V_CalcViewBlend();
+
+ // update the r_refdef time again because cl.time may have changed
+ r_refdef.time = cl.time;
}
return 0;