X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=cl_parse.c;h=d7661dd4860ccc5e9991662898048cf39be729aa;hb=69a21479a3466471cecff1eae841893028cb1da7;hp=ec3d3d597f712a80c4c521b3797f1cb155575044;hpb=45982a9894c5bff60ff494a0f82865ec267d52f7;p=xonotic%2Fdarkplaces.git diff --git a/cl_parse.c b/cl_parse.c index ec3d3d59..d7661dd4 100644 --- a/cl_parse.c +++ b/cl_parse.c @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -239,55 +239,12 @@ void CL_KeepaliveMessage (void) SZ_Clear (&cls.message); } -//FIXME finish this code! -#define MAX_STATICLIGHTS 2048 -// tyrlite types -#define LIGHTFADE_LMINUSX 0 // light, arghlite, others? -#define LIGHTFADE_LDIVX 1 -#define LIGHTFADE_LDIVX2 2 // hlight -#define LIGHTFADE_L 3 -#define LIGHTFADE_DEFAULT 999999 // light util not yet identified, switched later - -typedef struct -{ - int fadetype; // one of the LIGHTFADE_ values - int style; - vec3_t origin; - vec_t radius; // the point at which lighting stops - vec3_t direction; - vec_t cone; // if non-zero, it is a spot light - vec3_t color; - vec_t distancescale; // attenuation - vec_t lightsubtract; // biasing lighting toward black (hlight feature) -} -staticlight_t; - -staticlight_t staticlight[MAX_STATICLIGHTS]; -int staticlights; - -int r_sunlightenabled; -vec3_t r_sunlightdirection, r_sunlightcolor; -vec3_t r_light_ambientcolor; - void CL_ParseEntityLump(char *entdata) { char *data; char key[128], value[4096]; - char wadname[128]; - char targetnamebuffer[65536]; - char *targetname[8192], *target[MAX_STATICLIGHTS], light_target[256]; - vec3_t targetnameorigin[8192], targetnametemporigin, v; - int targets, targetnames, targetnamebufferpos, targetnameorigintofillin; - int i, j, k, n; - float f1, f2, f3, f4; - float ambientlight, ambientcolor[3], sunlight, sunlightdirection[3], sunlightcolor[3]; - int light_fadetype, light_style, hlight, tyrlite, light_enable; - float light_origin[3], light_light, light_distancescale, light_lightcolor[3], light_color[3], light_direction[3], light_cone, light_lightradius; FOG_clear(); // LordHavoc: no fog until set R_SetSkyBox(""); // LordHavoc: no environment mapped sky until set - r_farclip.value = 6144; // LordHavoc: default farclip distance - r_sunlightenabled = false; - staticlights = 0; data = entdata; if (!data) return; @@ -296,22 +253,6 @@ void CL_ParseEntityLump(char *entdata) return; // error if (com_token[0] != '{') return; // error - hlight = false; - tyrlite = false; - ambientlight = 0; - ambientcolor[0] = ambientcolor[1] = ambientcolor[2] = 1; - sunlight = 0; - sunlightcolor[0] = sunlightcolor[1] = sunlightcolor[2] = 1; - sunlightdirection[0] = 0; - sunlightdirection[1] = 0; - sunlightdirection[2] = -1; - targets = 0; - targetnames = 0; - targetnamebufferpos = 0; - targetnameorigintofillin = -1; - targetnametemporigin[0] = 0; - targetnametemporigin[1] = 0; - targetnametemporigin[2] = 0; while (1) { data = COM_Parse(data); @@ -335,14 +276,8 @@ void CL_ParseEntityLump(char *entdata) R_SetSkyBox(value); else if (!strcmp("qlsky", key)) // non-standard, introduced by QuakeLives (EEK) R_SetSkyBox(value); - else if (!strcmp("farclip", key)) - { - r_farclip.value = atof(value); - if (r_farclip.value < 64) - r_farclip.value = 64; - } else if (!strcmp("fog", key)) - scanf(value, "%f %f %f %f", &fog_density, &fog_red, &fog_green, &fog_blue); + sscanf(value, "%f %f %f %f", &fog_density, &fog_red, &fog_green, &fog_blue); else if (!strcmp("fog_density", key)) fog_density = atof(value); else if (!strcmp("fog_red", key)) @@ -351,272 +286,56 @@ void CL_ParseEntityLump(char *entdata) fog_green = atof(value); else if (!strcmp("fog_blue", key)) fog_blue = atof(value); - else if (!strcmp("wad", key)) // for HalfLife maps - { - if (hlbsp) - { - j = 0; - for (i = 0;i < 4096;i++) - if (value[i] != ';' && value[i] != '\\' && value[i] != '/' && value[i] != ':') - break; - if (value[i]) - { - for (;i < 4096;i++) - { - // ignore path - the \\ check is for HalfLife... stupid windoze 'programmers'... - if (value[i] == '\\' || value[i] == '/' || value[i] == ':') - j = i+1; - else if (value[i] == ';' || value[i] == 0) - { - k = value[i]; - value[i] = 0; - strcpy(wadname, "textures/"); - strcat(wadname, &value[j]); - W_LoadTextureWadFile (wadname, false); - j = i+1; - if (!k) - break; - } - } - } - } - } - else if (!strcmp("light", key)) - ambientlight = atof(value); - else if (!strcmp("sunlight", key)) - { - sunlight = atof(value); - tyrlite = true; - } - else if (!strcmp("sun_color", key)) - { - if (scanf(value, "%f %f %f", &v[0], &v[1], &v[2]) == 3) - VectorCopy(v, sunlightcolor); - tyrlite = true; - } - else if (!strcmp("sun_mangle", key)) - { - if (scanf(value, "%f %f %f", &v[0], &v[1], &v[2]) == 3) - AngleVectors(v, sunlightdirection, NULL, NULL); - tyrlite = true; - } - else if (!strcmp("origin", key)) - { - if (scanf(value, "%f %f %f", &v[0], &v[1], &v[2]) == 3) - { - VectorCopy(v, targetnametemporigin); - VectorCopy(v, light_origin); - } - } - else if (!strcmp("targetname", key)) - { - if ((targetnames < 8192) && (strlen(value) + 1 + targetnamebufferpos <= 65536)) - { - targetname[targetnames] = targetnamebuffer + targetnamebufferpos; - strcpy(targetnamebuffer + targetnamebufferpos, value); - targetnamebufferpos += strlen(value) + 1; - targetnameorigintofillin = targetnames++; - } - } } - if (targetnameorigintofillin >= 0) - VectorCopy(targetnametemporigin, targetnameorigin[targetnameorigintofillin]); +} - if (sunlight) - { - r_sunlightenabled = true; - VectorScale(sunlightcolor, sunlight, r_sunlightcolor); - VectorCopy(sunlightdirection, r_sunlightdirection); - } - VectorScale(ambientcolor, ambientlight, r_light_ambientcolor); +/* +===================== +CL_SignonReply - while(1) - { - data = COM_Parse(data); - if (!data) - break; // done - if (com_token[0] != '{') - break; // error - light_light = 0; - light_lightcolor[0] = light_lightcolor[1] = light_lightcolor[2] = 1.0f; - light_color[0] = light_color[1] = light_color[2] = 1.0f; - light_direction[0] = light_direction[1] = light_direction[2] = 0.0f; - light_cone = -cos(20*M_PI/180); - light_distancescale = 1.0f; - light_fadetype = LIGHTFADE_DEFAULT; // replaced later when light util is identified - light_style = 0; - light_lightradius = 0; - light_enable = false; - targetnameorigintofillin = -1; - targetnametemporigin[0] = 0; - targetnametemporigin[1] = 0; - targetnametemporigin[2] = 0; - while (1) - { - data = COM_Parse(data); - if (!data) - return; // error - if (com_token[0] == '}') - break; - if (com_token[0] == '_') - strcpy(key, com_token + 1); - else - strcpy(key, com_token); - while (key[strlen(key)-1] == ' ') // remove trailing spaces - key[strlen(key)-1] = 0; - data = COM_Parse(data); - if (!data) - return; // error - strcpy(value, com_token); - if (!strcmp("light", key)) - { - n = scanf(value, "%f %f %f %f", &f1, &f2, &f3, &f4); - switch(n) - { - case 1: - // id light, arghlite, tyrlite, others - light_light = f1; - light_lightcolor[0] = light_lightcolor[1] = light_lightcolor[2] = 1.0f; - break; - case 3: - // hlight specific (supports all 3 light formats, but this one is unique to it) - hlight = true; - light_light = max(f1, max(f2, f3)); - light_lightcolor[0] = f1 / light_light; - light_lightcolor[1] = f2 / light_light; - light_lightcolor[2] = f3 / light_light; - break; - case 4: - // halflife - hlight = true; // unless this is a halflife map, probably hlight - light_light = f4; - light_lightcolor[0] = f1 * (1.0f / 255.0f); - light_lightcolor[1] = f1 * (1.0f / 255.0f); - light_lightcolor[2] = f1 * (1.0f / 255.0f); - break; - default: - // error - break; - } - } - else if (!strcmp("color", key)) - { - n = scanf(value, "%f %f %f", &f1, &f2, &f3); - if (n == 3) - { - light_color[0] = f1; - light_color[1] = f2; - light_color[2] = f3; - } - // n != 3 is an error - } - else if (!strcmp("wait", key)) - light_distancescale = atof(value); - else if (!strcmp("delay", key)) - { - light_fadetype = atoi(value); - tyrlite = true; - } - else if (!strcmp("angle", key)) - light_cone = -cos(atof(value) * M_PI / 360); - else if (!strcmp("mangle", key)) - { - n = scanf(value, "%f %f %f", &v[0], &v[1], &v[2]); - if (n == 3) - AngleVectors(v, light_direction, NULL, NULL); - // n != 3 is an error - tyrlite = true; - } - else if (!strcmp("style", key)) - { - n = atoi(value); - if (n >= 0 && n < MAX_LIGHTSTYLES) - light_style = n; - } - else if (!strcmp("lightradius", key)) - { - hlight = true; - light_lightradius = atof(value); - } - else if (!strcmp("classname", key)) - if (!strncmp(value, "light", 5)) - light_enable = true; - else if (!strcmp("origin", key)) - { - if (scanf(value, "%f %f %f", &v[0], &v[1], &v[2]) == 3) - VectorCopy(v, targetnametemporigin); - } - else if (!strcmp("targetname", key)) - { - if ((targetnames < 8192) && (strlen(value) + 1 + targetnamebufferpos <= 65536)) - { - targetname[targetnames] = targetnamebuffer + targetnamebufferpos; - strcpy(targetnamebuffer + targetnamebufferpos, value); - targetnamebufferpos += strlen(value) + 1; - targetnameorigintofillin = targetnames++; - } - } - else if (!strcmp("target", key)) - if (strlen(value) < sizeof(light_target)) - strcpy(light_target, value); - } - if (targetnameorigintofillin >= 0) - VectorCopy(targetnametemporigin, targetnameorigin[targetnameorigintofillin]); - if (light_enable && staticlights < MAX_STATICLIGHTS && light_light != 0) - { - VectorCopy(light_origin, staticlight[staticlights].origin); - staticlight[staticlights].color[0] = light_light * light_lightcolor[0] * light_color[0]; - staticlight[staticlights].color[1] = light_light * light_lightcolor[1] * light_color[1]; - staticlight[staticlights].color[2] = light_light * light_lightcolor[2] * light_color[2]; - VectorCopy(light_direction, staticlight[staticlights].direction); - staticlight[staticlights].cone = light_cone; - staticlight[staticlights].distancescale = light_distancescale; - staticlight[staticlights].fadetype = light_fadetype; - staticlight[staticlights].style = light_style; - if (light_target && (targets < 8192) && (strlen(value) + 1 + targetnamebufferpos <= 65536)) - { - target[staticlights] = targetnamebuffer + targetnamebufferpos; - strcpy(targetnamebuffer + targetnamebufferpos, value); - targetnamebufferpos += strlen(value) + 1; - } - else - target[staticlights] = NULL; - staticlight[staticlights].lightsubtract = 0; - if (light_lightradius) - { - staticlight[staticlights].fadetype = LIGHTFADE_LDIVX2; - staticlight[staticlights].lightsubtract = max(staticlight[staticlights].color[0], max(staticlight[staticlights].color[1], staticlight[staticlights].color[2])) * 0.5f / (light_lightradius * light_distancescale * light_lightradius * light_distancescale * (1.0f / 65536.0f) + 1.0f); - } - staticlights++; - } - } - if (hlbsp) - n = LIGHTFADE_LDIVX2; - else if (tyrlite) - n = LIGHTFADE_LMINUSX; - else if (hlight) - n = LIGHTFADE_LDIVX2; - else - n = LIGHTFADE_LMINUSX; - for (i = 0;i < staticlights;i++) +An svc_signonnum has been received, perform a client side setup +===================== +*/ +static void CL_SignonReply (void) +{ + char str[8192]; + +Con_DPrintf ("CL_SignonReply: %i\n", cls.signon); + + switch (cls.signon) { - if (staticlight[i].fadetype == LIGHTFADE_DEFAULT) - staticlight[i].fadetype = n; - if (target[i]) + case 1: + MSG_WriteByte (&cls.message, clc_stringcmd); + MSG_WriteString (&cls.message, "prespawn"); + break; + + case 2: + MSG_WriteByte (&cls.message, clc_stringcmd); + MSG_WriteString (&cls.message, va("name \"%s\"\n", cl_name.string)); + + MSG_WriteByte (&cls.message, clc_stringcmd); + MSG_WriteString (&cls.message, va("color %i %i\n", cl_color.integer >> 4, cl_color.integer & 15)); + + if (cl_pmodel.integer) { - for (j = 0;j < targetnames;j++) - { - if (!strcmp(target[i], targetname[j])) - { - VectorSubtract(targetnameorigin[j], staticlight[i].origin, v); - VectorNormalize(v); - VectorCopy(v, staticlight[i].direction); - break; - } - } + MSG_WriteByte (&cls.message, clc_stringcmd); + MSG_WriteString (&cls.message, va("pmodel %i\n", cl_pmodel.integer)); } - if (staticlight[i].direction[0] == 0 && staticlight[i].direction[1] == 0 && staticlight[i].direction[2] == 0) - staticlight[i].cone = 0; + + MSG_WriteByte (&cls.message, clc_stringcmd); + sprintf (str, "spawn %s", cls.spawnparms); + MSG_WriteString (&cls.message, str); + break; + + case 3: + MSG_WriteByte (&cls.message, clc_stringcmd); + MSG_WriteString (&cls.message, "begin"); + break; + + case 4: +// SCR_EndLoadingPlaque (); // allow normal screen updates + Con_ClearNotify(); + break; } } @@ -649,7 +368,7 @@ void CL_ParseServerInfo (void) Nehahrademcompatibility = false; if (i == 250) Nehahrademcompatibility = true; - if (cls.demoplayback && demo_nehahra.value) + if (cls.demoplayback && demo_nehahra.integer) Nehahrademcompatibility = true; dpprotocol = i == DPPROTOCOL_VERSION; @@ -660,7 +379,7 @@ void CL_ParseServerInfo (void) Con_Printf("Bad maxclients (%u) from server\n", cl.maxclients); return; } - cl.scores = Hunk_AllocName (cl.maxclients*sizeof(*cl.scores), "scores"); + cl.scores = Mem_Alloc(cl_scores_mempool, cl.maxclients*sizeof(*cl.scores)); // parse gametype cl.gametype = MSG_ReadByte (); @@ -682,7 +401,11 @@ void CL_ParseServerInfo (void) // needlessly purge it // - Hunk_Check (); + Mem_CheckSentinelsGlobal(); + + Mod_ClearUsed(); + + Mem_CheckSentinelsGlobal(); // precache models memset (cl.model_precache, 0, sizeof(cl.model_precache)); @@ -700,9 +423,6 @@ void CL_ParseServerInfo (void) Host_Error ("Server sent a precache name of %i characters (max %i)", strlen(str), MAX_QPATH - 1); strcpy (model_precache[nummodels], str); Mod_TouchModel (str); - -// Hunk_Check (); - } // precache sounds @@ -723,18 +443,20 @@ void CL_ParseServerInfo (void) S_TouchSound (str); } + Mem_CheckSentinelsGlobal(); + + Mod_PurgeUnused(); + // // now we try to load everything else until a cache allocation fails // - Hunk_Check (); + Mem_CheckSentinelsGlobal(); for (i=1 ; i cl.maxclients (%i)", s->colormap, cl.maxclients); model = cl.model_precache[s->modelindex]; + Mod_CheckLoaded(model); if (model && s->frame >= model->numframes) { - Con_DPrintf("CL_ValidateState: no such frame %i in \"%s\"\n", s->frame, model->name); + Con_Printf("CL_ValidateState: no such frame %i in \"%s\"\n", s->frame, model->name); s->frame = 0; } - if (model && s->skin >= model->numskins) + if (model && s->skin > 0 && s->skin >= model->numskins) { - Con_DPrintf("CL_ValidateState: no such skin %i in \"%s\"\n", s->skin, model->name); + Con_Printf("CL_ValidateState: no such skin %i in \"%s\"\n", s->skin, model->name); s->skin = 0; } } @@ -809,6 +531,7 @@ void CL_ParseUpdate (int bits) { int i, num, deltadie; entity_t *ent; + entity_state_t new; if (cls.signon == SIGNONS - 1) { // first update is the final signon stage @@ -825,7 +548,7 @@ void CL_ParseUpdate (int bits) bits |= MSG_ReadByte() << 24; } - if (bits & U_LONGENTITY) + if (bits & U_LONGENTITY) num = (unsigned) MSG_ReadShort (); else num = (unsigned) MSG_ReadByte (); @@ -845,43 +568,48 @@ void CL_ParseUpdate (int bits) bitprofile[i]++; bitprofilecount++; - ent->state_previous = ent->state_current; deltadie = false; if (bits & U_DELTA) { - if (!ent->state_current.active) + new = ent->state_current; + if (!new.active) deltadie = true; // was not present in previous frame, leave hidden until next full update } else - ent->state_current = ent->state_baseline; - - ent->state_current.time = cl.mtime[0]; - - ent->state_current.flags = 0; - ent->state_current.active = true; - if (bits & U_MODEL) ent->state_current.modelindex = (ent->state_current.modelindex & 0xFF00) | MSG_ReadByte(); - if (bits & U_FRAME) ent->state_current.frame = (ent->state_current.frame & 0xFF00) | MSG_ReadByte(); - if (bits & U_COLORMAP) ent->state_current.colormap = MSG_ReadByte(); - if (bits & U_SKIN) ent->state_current.skin = MSG_ReadByte(); - if (bits & U_EFFECTS) ent->state_current.effects = (ent->state_current.effects & 0xFF00) | MSG_ReadByte(); - if (bits & U_ORIGIN1) ent->state_current.origin[0] = MSG_ReadCoord(); - if (bits & U_ANGLE1) ent->state_current.angles[0] = MSG_ReadAngle(); - if (bits & U_ORIGIN2) ent->state_current.origin[1] = MSG_ReadCoord(); - if (bits & U_ANGLE2) ent->state_current.angles[1] = MSG_ReadAngle(); - if (bits & U_ORIGIN3) ent->state_current.origin[2] = MSG_ReadCoord(); - if (bits & U_ANGLE3) ent->state_current.angles[2] = MSG_ReadAngle(); - if (bits & U_STEP) ent->state_current.flags |= RENDER_STEP; - if (bits & U_ALPHA) ent->state_current.alpha = MSG_ReadByte(); - if (bits & U_SCALE) ent->state_current.scale = MSG_ReadByte(); - if (bits & U_EFFECTS2) ent->state_current.effects = (ent->state_current.effects & 0x00FF) | (MSG_ReadByte() << 8); - if (bits & U_GLOWSIZE) ent->state_current.glowsize = MSG_ReadByte(); - if (bits & U_GLOWCOLOR) ent->state_current.glowcolor = MSG_ReadByte(); - if (bits & U_GLOWTRAIL) ent->state_current.flags |= RENDER_GLOWTRAIL; - if (bits & U_COLORMOD) ent->state_current.colormod = MSG_ReadByte(); - if (bits & U_FRAME2) ent->state_current.frame = (ent->state_current.frame & 0x00FF) | (MSG_ReadByte() << 8); - if (bits & U_MODEL2) ent->state_current.modelindex = (ent->state_current.modelindex & 0x00FF) | (MSG_ReadByte() << 8); - if (bits & U_VIEWMODEL) ent->state_current.flags |= RENDER_VIEWMODEL; - if (bits & U_EXTERIORMODEL) ent->state_current.flags |= RENDER_EXTERIORMODEL; + new = ent->state_baseline; + + new.time = cl.mtime[0]; + + new.flags = 0; + new.active = true; + if (bits & U_MODEL) new.modelindex = (new.modelindex & 0xFF00) | MSG_ReadByte(); + if (bits & U_FRAME) new.frame = (new.frame & 0xFF00) | MSG_ReadByte(); + if (bits & U_COLORMAP) new.colormap = MSG_ReadByte(); + if (bits & U_SKIN) new.skin = MSG_ReadByte(); + if (bits & U_EFFECTS) new.effects = (new.effects & 0xFF00) | MSG_ReadByte(); + if (bits & U_ORIGIN1) new.origin[0] = MSG_ReadCoord(); + if (bits & U_ANGLE1) new.angles[0] = MSG_ReadAngle(); + if (bits & U_ORIGIN2) new.origin[1] = MSG_ReadCoord(); + if (bits & U_ANGLE2) new.angles[1] = MSG_ReadAngle(); + if (bits & U_ORIGIN3) new.origin[2] = MSG_ReadCoord(); + if (bits & U_ANGLE3) new.angles[2] = MSG_ReadAngle(); + if (bits & U_STEP) new.flags |= RENDER_STEP; + if (bits & U_ALPHA) new.alpha = MSG_ReadByte(); + if (bits & U_SCALE) new.scale = MSG_ReadByte(); + if (bits & U_EFFECTS2) new.effects = (new.effects & 0x00FF) | (MSG_ReadByte() << 8); + if (bits & U_GLOWSIZE) new.glowsize = MSG_ReadByte(); + if (bits & U_GLOWCOLOR) new.glowcolor = MSG_ReadByte(); +#if 0 + if (bits & U_COLORMOD) {int i = MSG_ReadByte();float r = (((int) i >> 5) & 7) * 1.0 / 7, g = (((int) i >> 2) & 7) * 1.0 / 7, b = ((int) i & 3) * 1.0 / 3;Con_Printf("warning: U_COLORMOD %i (%1.2f %1.2f %1.2f) ignored\n", i, r, g, b);} +#else + // apparently the dpcrush demo uses this (unintended, and it uses white anyway) + if (bits & U_COLORMOD) MSG_ReadByte(); +#endif + if (bits & U_GLOWTRAIL) new.flags |= RENDER_GLOWTRAIL; + if (bits & U_FRAME2) new.frame = (new.frame & 0x00FF) | (MSG_ReadByte() << 8); + if (bits & U_MODEL2) new.modelindex = (new.modelindex & 0x00FF) | (MSG_ReadByte() << 8); + if (bits & U_VIEWMODEL) new.flags |= RENDER_VIEWMODEL; + if (bits & U_EXTERIORMODEL) new.flags |= RENDER_EXTERIORMODEL; // LordHavoc: to allow playback of the Nehahra movie if (Nehahrademcompatibility && (bits & U_EXTEND1)) @@ -892,44 +620,42 @@ void CL_ParseUpdate (int bits) if (i == 2) { if (MSG_ReadFloat()) - ent->state_current.effects |= EF_FULLBRIGHT; + new.effects |= EF_FULLBRIGHT; } if (j < 0) - ent->state_current.alpha = 0; + new.alpha = 0; else if (j == 0 || j >= 255) - ent->state_current.alpha = 255; + new.alpha = 255; else - ent->state_current.alpha = j; + new.alpha = j; } if (deltadie) { // hide the entity - ent->state_current.active = false; + new.active = false; } else - { - CL_ValidateState(&ent->state_current); + CL_ValidateState(&new); - /* - if (!ent->state_current.active) + if (new.flags & RENDER_STEP) // FIXME: rename this flag? + { + // make time identical for memcmp + new.time = ent->state_current.time; + if (memcmp(&new, &ent->state_current, sizeof(entity_state_t))) { - if (bits & U_DELTA) - { - if (bits & U_MODEL) - Con_Printf("CL_ParseUpdate: delta NULL model on %i: %i %i\n", num, ent->state_previous.modelindex, ent->state_current.modelindex); - else - Con_Printf("CL_ParseUpdate: delta NULL model on %i: %i\n", num, ent->state_previous.modelindex); - } - else - { - if (bits & U_MODEL) - Con_Printf("CL_ParseUpdate: NULL model on %i: %i %i\n", num, ent->state_baseline.modelindex, ent->state_current.modelindex); - else - Con_Printf("CL_ParseUpdate: NULL model on %i: %i\n", num, ent->state_baseline.modelindex); - } + // state has changed + ent->state_previous = ent->state_current; + ent->state_current = new; + // assume 10fps animation + ent->state_previous.time = cl.mtime[0]; + ent->state_current.time = cl.mtime[0] + 0.1; //ent->state_previous.time + 0.1; } - */ + } + else + { + ent->state_previous = ent->state_current; + ent->state_current = new; } } @@ -957,7 +683,7 @@ char *bitprofilenames[32] = "U_EFFECTS2", "U_GLOWSIZE", "U_GLOWCOLOR", - "U_COLORMOD", + "obsolete U_COLORMOD", "U_EXTEND2", "U_GLOWTRAIL", "U_VIEWMODEL", @@ -1028,7 +754,6 @@ void CL_ParseBaseline (entity_t *ent, int large) ent->state_baseline.scale = 16; ent->state_baseline.glowsize = 0; ent->state_baseline.glowcolor = 254; - ent->state_baseline.colormod = 255; ent->state_previous = ent->state_current = ent->state_baseline; CL_ValidateState(&ent->state_baseline); @@ -1141,7 +866,6 @@ void CL_ParseStatic (int large) ent->render.alpha = 1; ent->render.scale = 1; ent->render.alpha = 1; - ent->render.colormod[0] = ent->render.colormod[1] = ent->render.colormod[2] = 1; VectorCopy (ent->state_baseline.origin, ent->render.origin); VectorCopy (ent->state_baseline.angles, ent->render.angles); @@ -1197,7 +921,7 @@ void CL_ParseEffect2 (void) } -#define SHOWNET(x) if(cl_shownet.value==2)Con_Printf ("%3i:%s\n", msg_readcount-1, x); +#define SHOWNET(x) if(cl_shownet.integer==2)Con_Printf ("%3i:%s\n", msg_readcount-1, x); /* ===================== @@ -1215,9 +939,9 @@ void CL_ParseServerMessage (void) // // if recording demos, copy the message out // - if (cl_shownet.value == 1) + if (cl_shownet.integer == 1) Con_Printf ("%i ",net_message.cursize); - else if (cl_shownet.value == 2) + else if (cl_shownet.integer == 2) Con_Printf ("------------------\n"); cl.onground = false; // unless the server says otherwise @@ -1303,7 +1027,7 @@ void CL_ParseServerMessage (void) cl.mtime[1] = cl.mtime[0]; cl.mtime[0] = MSG_ReadFloat (); break; - + case svc_clientdata: i = MSG_ReadShort (); CL_ParseClientdata (i); @@ -1316,7 +1040,7 @@ void CL_ParseServerMessage (void) Nehahrademcompatibility = false; if (i == 250) Nehahrademcompatibility = true; - if (cls.demoplayback && demo_nehahra.value) + if (cls.demoplayback && demo_nehahra.integer) Nehahrademcompatibility = true; dpprotocol = i == DPPROTOCOL_VERSION; break; @@ -1335,11 +1059,11 @@ void CL_ParseServerMessage (void) case svc_stufftext: Cbuf_AddText (MSG_ReadString ()); break; - + case svc_damage: V_ParseDamage (); break; - + case svc_serverinfo: CL_ParseServerInfo (); // vid.recalc_refdef = true; // leave intermission full screen @@ -1375,7 +1099,7 @@ void CL_ParseServerMessage (void) i = MSG_ReadShort(); S_StopSound(i>>3, i&7); break; - + case svc_updatename: i = MSG_ReadByte (); if (i >= cl.maxclients) @@ -1398,7 +1122,7 @@ void CL_ParseServerMessage (void) break; case svc_particle: - R_ParseParticleEffect (); + CL_ParseParticleEffect (); break; case svc_effect: @@ -1487,7 +1211,7 @@ void CL_ParseServerMessage (void) cl.intermission = 2; cl.completed_time = cl.time; // vid.recalc_refdef = true; // go to full screen - SCR_CenterPrint (MSG_ReadString ()); + SCR_CenterPrint (MSG_ReadString ()); break; case svc_cutscene: