]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_main.c
use bigger prime numbers in calculating vertex hash indices to improve
[xonotic/darkplaces.git] / cl_main.c
index 048cb9957b8c38870f5b17b21ae395c006840575..5f809935cb3b72269cb4be570156eb315c6ea9f6 100644 (file)
--- a/cl_main.c
+++ b/cl_main.c
@@ -449,17 +449,23 @@ static void CL_PrintEntities_f(void)
 ===============
 CL_ModelIndexList_f
 
-List all models in the client modelindex
+List information on all models in the client modelindex
 ===============
 */
 static void CL_ModelIndexList_f(void)
 {
-       int nModelIndexCnt = 1;
+       int i = 1;
 
-       while(cl.model_precache[nModelIndexCnt] && nModelIndexCnt != MAX_MODELS)
+       // Print Header
+       Con_Printf("%3s: %-30s %-8s %-8s\n", "ID", "Name", "Type", "Triangles");
+
+       while(cl.model_precache[i] && i != MAX_MODELS)
        { // Valid Model
-               Con_Printf("%i : %s\n", nModelIndexCnt, cl.model_precache[nModelIndexCnt]->name);
-               nModelIndexCnt++;
+               if(cl.model_precache[i]->loaded || cl.model_precache[i]->isworldmodel)
+                       Con_Printf("%3i: %-30s %-8s %-10i\n", i, cl.model_precache[i]->name, cl.model_precache[i]->modeldatatypestring, cl.model_precache[i]->surfmesh.num_triangles);
+               else
+                       Con_Printf("%3i: %-30s %-30s\n", i, cl.model_precache[i]->name, "--no local model found--");
+               i++;
        }
 }
 
@@ -472,12 +478,12 @@ List all sounds in the client soundindex
 */
 static void CL_SoundIndexList_f(void)
 {
-       int nSoundIndexCnt = 1;
+       int i = 1;
 
-       while(cl.sound_precache[nSoundIndexCnt] && nSoundIndexCnt != MAX_SOUNDS)
+       while(cl.sound_precache[i] && i != MAX_SOUNDS)
        { // Valid Sound
-               Con_Printf("%i : %s\n", nSoundIndexCnt, cl.sound_precache[nSoundIndexCnt]->name);
-               nSoundIndexCnt++;
+               Con_Printf("%i : %s\n", i, cl.sound_precache[i]->name);
+               i++;
        }
 }
 
@@ -828,7 +834,7 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
 {
        const matrix4x4_t *matrix;
        matrix4x4_t blendmatrix, tempmatrix, matrix2;
-       int j, k, l;
+       int j, k, l, frame;
        float origin[3], angles[3], delta[3], lerp, d;
        entity_t *t;
        model_t *model;
@@ -847,32 +853,26 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
        e->render.entitynumber = e - cl.entities;
        if (e->state_current.flags & RENDER_COLORMAPPED)
        {
-               int cb;
                unsigned char *cbcolor;
                e->render.colormap = e->state_current.colormap;
-               cb = (e->render.colormap & 0xF) << 4;cb += (cb >= 128 && cb < 224) ? 4 : 12;
-               cbcolor = (unsigned char *) (&palette_complete[cb]);
+               cbcolor = (unsigned char *) (&palette_pantscolormap[e->render.colormap & 0xF]);
                e->render.colormap_pantscolor[0] = cbcolor[0] * (1.0f / 255.0f);
                e->render.colormap_pantscolor[1] = cbcolor[1] * (1.0f / 255.0f);
                e->render.colormap_pantscolor[2] = cbcolor[2] * (1.0f / 255.0f);
-               cb = (e->render.colormap & 0xF0);cb += (cb >= 128 && cb < 224) ? 4 : 12;
-               cbcolor = (unsigned char *) (&palette_complete[cb]);
+               cbcolor = (unsigned char *) (&palette_shirtcolormap[(e->render.colormap & 0xF0) >> 4]);
                e->render.colormap_shirtcolor[0] = cbcolor[0] * (1.0f / 255.0f);
                e->render.colormap_shirtcolor[1] = cbcolor[1] * (1.0f / 255.0f);
                e->render.colormap_shirtcolor[2] = cbcolor[2] * (1.0f / 255.0f);
        }
-       else if (e->state_current.colormap && cl.scores != NULL)
+       else if (e->state_current.colormap && cl.scores != NULL && e->state_current.colormap <= cl.maxclients)
        {
-               int cb;
                unsigned char *cbcolor;
                e->render.colormap = cl.scores[e->state_current.colormap - 1].colors; // color it
-               cb = (e->render.colormap & 0xF) << 4;cb += (cb >= 128 && cb < 224) ? 4 : 12;
-               cbcolor = (unsigned char *) (&palette_complete[cb]);
+               cbcolor = (unsigned char *) (&palette_pantscolormap[e->render.colormap & 0xF]);
                e->render.colormap_pantscolor[0] = cbcolor[0] * (1.0f / 255.0f);
                e->render.colormap_pantscolor[1] = cbcolor[1] * (1.0f / 255.0f);
                e->render.colormap_pantscolor[2] = cbcolor[2] * (1.0f / 255.0f);
-               cb = (e->render.colormap & 0xF0);cb += (cb >= 128 && cb < 224) ? 4 : 12;
-               cbcolor = (unsigned char *) (&palette_complete[cb]);
+               cbcolor = (unsigned char *) (&palette_shirtcolormap[(e->render.colormap & 0xF0) >> 4]);
                e->render.colormap_shirtcolor[0] = cbcolor[0] * (1.0f / 255.0f);
                e->render.colormap_shirtcolor[1] = cbcolor[1] * (1.0f / 255.0f);
                e->render.colormap_shirtcolor[2] = cbcolor[2] * (1.0f / 255.0f);
@@ -971,10 +971,17 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
        }
 
        // model setup and some modelflags
-       if(e->state_current.modelindex < MAX_MODELS)
+       frame = e->state_current.frame;
+       if (e->state_current.modelindex < MAX_MODELS)
                e->render.model = cl.model_precache[e->state_current.modelindex];
+       else
+               e->render.model = NULL;
        if (e->render.model)
        {
+               if (e->render.skinnum >= e->render.model->numskins)
+                       e->render.skinnum = 0;
+               if (frame >= e->render.model->numframes)
+                       frame = 0;
                // models can set flags such as EF_ROCKET
                // this 0xFF800000 mask is EF_NOMODELFLAGS plus all the higher EF_ flags such as EF_ROCKET
                if (!(e->render.effects & 0xFF800000))
@@ -997,7 +1004,7 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
        }
 
        // animation lerp
-       if (e->render.frame2 == e->state_current.frame)
+       if (e->render.frame2 == frame)
        {
                // update frame lerp fraction
                e->render.framelerp = 1;
@@ -1015,7 +1022,7 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
                // begin a new frame lerp
                e->render.frame1 = e->render.frame2;
                e->render.frame1time = e->render.frame2time;
-               e->render.frame2 = e->state_current.frame;
+               e->render.frame2 = frame;
                e->render.frame2time = cl.time;
                e->render.framelerp = 0;
        }
@@ -2233,7 +2240,7 @@ void CL_Init (void)
        Cmd_AddCommand ("timedemo", CL_TimeDemo_f, "play back a demo as fast as possible and save statistics to benchmark.log");
 
        // Support Client-side Model Index List
-       Cmd_AddCommand ("cl_modelindexlist", CL_ModelIndexList_f, "list all models in the client modelindex");
+       Cmd_AddCommand ("cl_modelindexlist", CL_ModelIndexList_f, "list information on all models in the client modelindex");
        // Support Client-side Sound Index List
        Cmd_AddCommand ("cl_soundindexlist", CL_SoundIndexList_f, "list all sounds in the client soundindex");