- {
- // check for any newer updates to this entity and mask off any
- // overlapping bits (we don't need to send something again if
- // it has already been sent more recently)
- bits = s->bits & ~d->deltabits[s->number];
- for (k = 0, p2 = d->packetlog;k < ENTITYFRAME5_MAXPACKETLOGS && bits;k++, p2++)
- {
- if (p2->packetnumber > framenum)
- {
- for (l = 0, s2 = p2->states;l < p2->numstates;l++, s2++)
- {
- if (s2->number == s->number)
- {
- bits &= ~s2->bits;
- break;
- }
- }
- }
- }
- // if the bits haven't all been cleared, there were some bits
- // lost with this packet, so set them again now
- if (bits)
- {
- d->deltabits[s->number] |= bits;
- // if it was a very important update, set priority higher
- if (bits & (E5_FULLUPDATE | E5_ATTACHMENT | E5_MODEL | E5_COLORMAP))
- d->priorities[s->number] = max(d->priorities[s->number], 4);
- else
- d->priorities[s->number] = max(d->priorities[s->number], 1);
- }
- }
- // mark lost stats
- for (j = 0;j < MAX_CL_STATS;j++)
- {
- for (l = 0;l < (MAX_CL_STATS+7)/8;l++)
- statsdeltabits[l] = p->statsdeltabits[l] & ~host_client->statsdeltabits[l];
- for (k = 0, p2 = d->packetlog;k < ENTITYFRAME5_MAXPACKETLOGS;k++, p2++)
- if (p2->packetnumber > framenum)
- for (l = 0;l < (MAX_CL_STATS+7)/8;l++)
- statsdeltabits[l] = p->statsdeltabits[l] & ~p2->statsdeltabits[l];
- for (l = 0;l < (MAX_CL_STATS+7)/8;l++)
- host_client->statsdeltabits[l] |= statsdeltabits[l];
- }
- // delete this packet log as it is now obsolete