From fa471eb239141d259f483b0b29d2944d0697a4f7 Mon Sep 17 00:00:00 2001 From: Spoike Date: Sun, 9 Apr 2006 02:04:40 +0000 Subject: [PATCH] Makes Q2 with high visible entity counts more robust. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2184 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/server/svq2_ents.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/engine/server/svq2_ents.c b/engine/server/svq2_ents.c index 83318c5c..cafee1a6 100644 --- a/engine/server/svq2_ents.c +++ b/engine/server/svq2_ents.c @@ -292,7 +292,10 @@ void SVQ2_EmitPacketEntities (q2client_frame_t *from, q2client_frame_t *to, size // in any bytes being emited if the entity has not changed at all // note that players are always 'newentities', this updates their oldorigin always // and prevents warping - MSGQ2_WriteDeltaEntity (oldent, newent, msg, false, newent->number <= MAX_CLIENTS); + if (msg->cursize+128 > msg->maxsize) + memcpy(newent, oldent, sizeof(*newent)); //too much data, so set the ent up as the same as the old, so it's sent next frame + else + MSGQ2_WriteDeltaEntity (oldent, newent, msg, false, newent->number <= MAX_CLIENTS); oldindex++; newindex++; continue; @@ -300,8 +303,18 @@ void SVQ2_EmitPacketEntities (q2client_frame_t *from, q2client_frame_t *to, size if (newnum < oldnum) { // this is a new entity, send it from the baseline - MSGQ2_WriteDeltaEntity (&sv_baselines[newnum], newent, msg, true, true); - newindex++; + + if (msg->cursize+128 > msg->maxsize) + { //might cause the packet to overflow + //so strip out this ent, we can add it next frame if it's still relevent + to->num_entities--; + memmove(newent, newent+1, sizeof(*newent) * (to->num_entities-newindex)); + } + else + { + MSGQ2_WriteDeltaEntity (&sv_baselines[newnum], newent, msg, true, true); + newindex++; + } continue; }