X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=cl_main.c;h=632e185056080ddda5e08182f312d8e9ae74216a;hb=11e05215e5f3cee630f54b9836dab1b36b5b4ffc;hp=adeeedb318ef89aaf91f1a71a3ccb87cf7bb51ad;hpb=9801521557cb3a917792fa9f94bd5d2a25e91315;p=xonotic%2Fdarkplaces.git diff --git a/cl_main.c b/cl_main.c index adeeedb3..632e1850 100644 --- a/cl_main.c +++ b/cl_main.c @@ -190,7 +190,7 @@ void CL_ExpandEntities(int num) if (num >= cl_max_entities) { if (!cl_entities) - Host_Error("CL_ExpandEntities: cl_entities not initialized\n"); + Sys_Error("CL_ExpandEntities: cl_entities not initialized\n"); if (num >= MAX_EDICTS) Host_Error("CL_ExpandEntities: num %i >= %i\n", num, MAX_EDICTS); oldmaxentities = cl_max_entities; @@ -331,9 +331,9 @@ static void CL_PrintEntities_f(void) strlcpy (name, ent->render.model->name, 25); else strcpy(name, "--no model--"); - for (j = strlen(name);j < 25;j++) + for (j = (int)strlen(name);j < 25;j++) name[j] = ' '; - Con_Printf("%3i: %s:%04i (%5i %5i %5i) [%3i %3i %3i] %4.2f %5.3f\n", i, name, ent->render.frame, (int) ent->render.origin[0], (int) ent->render.origin[1], (int) ent->render.origin[2], (int) ent->render.angles[0] % 360, (int) ent->render.angles[1] % 360, (int) ent->render.angles[2] % 360, ent->render.scale, ent->render.alpha); + Con_Printf("%3i: %s:%4i (%5i %5i %5i) [%3i %3i %3i] %4.2f %5.3f\n", i, name, ent->render.frame, (int) ent->render.origin[0], (int) ent->render.origin[1], (int) ent->render.origin[2], (int) ent->render.angles[0] % 360, (int) ent->render.angles[1] % 360, (int) ent->render.angles[2] % 360, ent->render.scale, ent->render.alpha); } } @@ -587,7 +587,7 @@ void CL_LinkNetworkEntity(entity_t *e) e->render.colormap = -1; // no special coloring e->render.skinnum = e->state_current.skin; VectorScale(e->state_current.colormod, (1.0f / 32.0f), e->render.colormod); - if (e->render.flags & RENDER_VIEWMODEL) + if (e->render.flags & RENDER_VIEWMODEL && !e->state_current.tagentity) { if (!r_drawviewmodel.integer || chase_active.integer || envmap) return; @@ -641,7 +641,7 @@ void CL_LinkNetworkEntity(entity_t *e) // if it's the player entity, update according to client movement if (e == cl_entities + cl.playerentity && cl.movement) { - lerp = (cl.time - cl.mtime[0]) / (cl.mtime[0] - cl.mtime[1]); + lerp = (cl.time - cl.mtime[1]) / (cl.mtime[0] - cl.mtime[1]); lerp = bound(0, lerp, 1); VectorLerp(cl.movement_oldorigin, lerp, cl.movement_origin, origin); VectorSet(angles, 0, cl.viewangles[1], 0); @@ -718,9 +718,19 @@ void CL_LinkNetworkEntity(entity_t *e) CL_BoundingBoxForEntity(&e->render); // handle effects now that we know where this entity is in the world... - origin[0] = e->render.matrix.m[0][3]; - origin[1] = e->render.matrix.m[1][3]; - origin[2] = e->render.matrix.m[2][3]; + if (e->render.model && e->render.model->soundfromcenter) + { + // bmodels are treated specially since their origin is usually '0 0 0' + vec3_t o; + VectorMAM(0.5f, e->render.model->normalmins, 0.5f, e->render.model->normalmaxs, o); + Matrix4x4_Transform(&e->render.matrix, o, origin); + } + else + { + origin[0] = e->render.matrix.m[0][3]; + origin[1] = e->render.matrix.m[1][3]; + origin[2] = e->render.matrix.m[2][3]; + } trailtype = -1; dlightradius = 0; dlightcolor[0] = 0; @@ -1237,6 +1247,7 @@ CL_ReadFromServer Read all incoming data from the server =============== */ +extern void CL_ClientMovement_Replay(); int CL_ReadFromServer(void) { CL_ReadDemoMessage(); @@ -1244,6 +1255,7 @@ int CL_ReadFromServer(void) r_refdef.time = cl.time; r_refdef.extraupdate = !r_speeds.integer; r_refdef.numentities = 0; + Matrix4x4_CreateIdentity(&r_refdef.viewentitymatrix); cl_num_brushmodel_entities = 0; if (cls.state == ca_connected && cls.signon == SIGNONS) @@ -1256,6 +1268,7 @@ int CL_ReadFromServer(void) V_FadeViewFlashs(); // relink network entities (note: this sets up the view!) + CL_ClientMovement_Replay(); CL_RelinkNetworkEntities(); // move particles @@ -1286,9 +1299,6 @@ CL_SendCmd void CL_UpdatePrydonCursor(void); void CL_SendCmd(void) { - if (cls.signon == SIGNONS) - CL_UpdatePrydonCursor(); - if (cls.demoplayback) { SZ_Clear(&cls.message);