]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - protocol.c
Several changes to the SFX lock code in the sound engine, mainly to make sure SFXs...
[xonotic/darkplaces.git] / protocol.c
index 0c966f8e07635814f2e914c94e92b5f27210a970..b537147a06dc0ec5a8f296d195cf0289f7aaa956 100644 (file)
@@ -146,25 +146,21 @@ void EntityFrameQuake_ISeeDeadEntities(void)
                return;
        lastentity = cl_lastquakeentity;
        cl_lastquakeentity = 0;
-       for (num = 0;num < lastentity;num++)
+       for (num = 0;num <= lastentity;num++)
        {
                if (cl_isquakeentity[num])
                {
-                       cl_isquakeentity[num] = false;
-                       if (cl_entities_active[num])
+                       if (cl_entities_active[num] && cl_entities[num].state_current.time == cl.mtime[0])
                        {
-                               if (cl_entities[num].state_current.time == cl.mtime[0])
-                               {
-                                       cl_isquakeentity[num] = true;
-                                       cl_lastquakeentity = num;
-                               }
-                               else
-                               {
-                                       cl_isquakeentity[num] = false;
-                                       cl_entities_active[num] = false;
-                                       cl_entities[num].state_current = defaultstate;
-                                       cl_entities[num].state_current.number = num;
-                               }
+                               cl_isquakeentity[num] = true;
+                               cl_lastquakeentity = num;
+                       }
+                       else
+                       {
+                               cl_isquakeentity[num] = false;
+                               cl_entities_active[num] = false;
+                               cl_entities[num].state_current = defaultstate;
+                               cl_entities[num].state_current.number = num;
                        }
                }
        }
@@ -552,6 +548,8 @@ void EntityState_ReadFields(entity_state_t *e, unsigned int bits)
                                e->origin[2] = MSG_ReadCoord32f();
                }
        }
+       else
+               Host_Error("EntityState_ReadFields: unknown cl.protocol %i\n", cl.protocol);
        if (cl.protocol == PROTOCOL_DARKPLACES5 && !(e->flags & RENDER_LOWPRECISION))
        {
                if (bits & E_ANGLE1)
@@ -686,8 +684,7 @@ void EntityFrame_ClearDatabase(entityframe_database_t *d)
 void EntityFrame_AckFrame(entityframe_database_t *d, int frame)
 {
        int i;
-       if (d->ackframenum < frame)
-               d->ackframenum = frame;
+       d->ackframenum = frame;
        for (i = 0;i < d->numframes && d->frames[i].framenum < frame;i++);
        // ignore outdated frame acks (out of order packets)
        if (i == 0)
@@ -805,7 +802,7 @@ void EntityFrame_WriteFrame(sizebuf_t *msg, entityframe_database_t *d, int numst
 
        EntityFrame_AddFrame(d, eye, d->latestframenum, numstates, states);
 
-       EntityFrame_FetchFrame(d, d->ackframenum > 0 ? d->ackframenum : -1, o);
+       EntityFrame_FetchFrame(d, d->ackframenum, o);
 
        MSG_WriteByte (msg, svc_entities);
        MSG_WriteLong (msg, o->framenum);
@@ -1024,7 +1021,6 @@ entityframe4_database_t *EntityFrame4_AllocDatabase(mempool_t *pool)
        d = Mem_Alloc(pool, sizeof(*d));
        d->mempool = pool;
        EntityFrame4_ResetDatabase(d);
-       d->ackframenum = -1;
        return d;
 }
 
@@ -1042,7 +1038,6 @@ void EntityFrame4_FreeDatabase(entityframe4_database_t *d)
 void EntityFrame4_ResetDatabase(entityframe4_database_t *d)
 {
        int i;
-       d->ackframenum = -1;
        d->referenceframenum = -1;
        for (i = 0;i < MAX_ENTITY_HISTORY;i++)
                d->commit[i].numentities = 0;
@@ -1145,7 +1140,7 @@ void EntityFrame4_CL_ReadFrame(void)
                if (!d->commit[i].numentities)
                {
                        d->currentcommit = d->commit + i;
-                       d->currentcommit->framenum = d->ackframenum = framenum;
+                       d->currentcommit->framenum = framenum;
                        d->currentcommit->numentities = 0;
                }
        }
@@ -1360,7 +1355,6 @@ void EntityFrame5_ResetDatabase(entityframe5_database_t *d)
        int i;
        memset(d, 0, sizeof(*d));
        d->latestframenum = 0;
-       d->ackframenum = -1;
        for (i = 0;i < MAX_EDICTS;i++)
                d->states[i] = defaultstate;
 }
@@ -1777,9 +1771,6 @@ void EntityFrame5_AckFrame(entityframe5_database_t *d, int framenum, int viewent
        int i, j, k, l, bits;
        entityframe5_changestate_t *s, *s2;
        entityframe5_packetlog_t *p, *p2;
-       if (framenum <= d->ackframenum)
-               return;
-       d->ackframenum = framenum;
        // scan for packets made obsolete by this ack
        for (i = 0, p = d->packetlog;i < ENTITYFRAME5_MAXPACKETLOGS;i++, p++)
        {