]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sv_main.c
improved pr_fields command to list how many entities are using each entity field...
[xonotic/darkplaces.git] / sv_main.c
index 1dc26376f23bce324ecb5361977d4af9982cb962..0a5b5bdf8c500f8de57c1d204f52d538106b5d40 100644 (file)
--- a/sv_main.c
+++ b/sv_main.c
@@ -881,9 +881,19 @@ void SV_WriteEntitiesToClient (client_t *client, edict_t *clent, sizebuf_t *msg)
        Mod_CheckLoaded(sv.worldmodel);
 
 // find the client's PVS
+       // the real place being tested from
        VectorAdd (clent->v.origin, clent->v.view_ofs, testeye);
        pvs = SV_FatPVS (testeye);
-       EntityFrame_Clear(&entityframe, testeye);
+
+       // the place being reported (to consider the fact the client still
+       // applies the view_ofs[2], so we have to only send the fractional part
+       // of view_ofs[2], undoing what the client will redo)
+       VectorCopy (testeye, testorigin);
+       e = (int) clent->v.view_ofs[2] & 255;
+       if (e >= 128)
+               e -= 256;
+       testorigin[2] -= (float) e;
+       EntityFrame_Clear(&entityframe, testorigin);
 
        culled_pvs = 0;
        culled_portal = 0;
@@ -1087,6 +1097,8 @@ void SV_WriteEntitiesToClient (client_t *client, edict_t *clent, sizebuf_t *msg)
                        break;
                VectorCopy(origin, s->origin);
                VectorCopy(angles, s->angles);
+               if (ent->v.colormap >= 1024)
+                       flags |= RENDER_COLORMAPPED;
                s->colormap = ent->v.colormap;
                s->skin = ent->v.skin;
                s->frame = ent->v.frame;
@@ -1170,7 +1182,8 @@ void SV_WriteClientdataToMessage (edict_t *ent, sizebuf_t *msg)
 
        bits = 0;
 
-       bits |= SU_VIEWHEIGHT;
+       if (ent->v.view_ofs[2] != DEFAULT_VIEWHEIGHT)
+               bits |= SU_VIEWHEIGHT;
 
        if (ent->v.idealpitch)
                bits |= SU_IDEALPITCH;
@@ -1244,8 +1257,7 @@ void SV_WriteClientdataToMessage (edict_t *ent, sizebuf_t *msg)
                MSG_WriteByte(msg, bits >> 24);
 
        if (bits & SU_VIEWHEIGHT)
-               //MSG_WriteChar (msg, ent->v.view_ofs[2]);
-               MSG_WriteChar (msg, 0);
+               MSG_WriteChar (msg, ent->v.view_ofs[2]);
 
        if (bits & SU_IDEALPITCH)
                MSG_WriteChar (msg, ent->v.idealpitch);