+ // this check disabled because it is never true
+ //if (numsendentities >= MAX_EDICTS)
+ // continue;
+
+ // EF_NODRAW prevents sending for any reason except for your own
+ // client, so we must keep all clients in this superset
+ effects = (unsigned)ent->fields.server->effects;
+ if (e > svs.maxclients && (effects & EF_NODRAW))
+ continue;
+
+ // we can omit invisible entities with no effects that are not clients
+ // LordHavoc: this could kill tags attached to an invisible entity, I
+ // just hope we never have to support that case
+ i = (int)ent->fields.server->modelindex;
+ modelindex = (i >= 1 && i < MAX_MODELS && *PRVM_GetString(ent->fields.server->model)) ? i : 0;
+
+ flags = 0;
+ i = (int)(PRVM_GETEDICTFIELDVALUE(ent, eval_glow_size)->_float * 0.25f);
+ glowsize = (unsigned char)bound(0, i, 255);
+ if (PRVM_GETEDICTFIELDVALUE(ent, eval_glow_trail)->_float)
+ flags |= RENDER_GLOWTRAIL;
+
+ f = PRVM_GETEDICTFIELDVALUE(ent, eval_color)->vector[0]*256;
+ light[0] = (unsigned short)bound(0, f, 65535);
+ f = PRVM_GETEDICTFIELDVALUE(ent, eval_color)->vector[1]*256;
+ light[1] = (unsigned short)bound(0, f, 65535);
+ f = PRVM_GETEDICTFIELDVALUE(ent, eval_color)->vector[2]*256;
+ light[2] = (unsigned short)bound(0, f, 65535);
+ f = PRVM_GETEDICTFIELDVALUE(ent, eval_light_lev)->_float;
+ light[3] = (unsigned short)bound(0, f, 65535);
+ lightstyle = (unsigned char)PRVM_GETEDICTFIELDVALUE(ent, eval_style)->_float;
+ lightpflags = (unsigned char)PRVM_GETEDICTFIELDVALUE(ent, eval_pflags)->_float;
+
+ if (gamemode == GAME_TENEBRAE)
+ {
+ // tenebrae's EF_FULLDYNAMIC conflicts with Q2's EF_NODRAW
+ if (effects & 16)
+ {
+ effects &= ~16;
+ lightpflags |= PFLAGS_FULLDYNAMIC;
+ }
+ // tenebrae's EF_GREEN conflicts with DP's EF_ADDITIVE
+ if (effects & 32)
+ {
+ effects &= ~32;
+ light[0] = 0.2;
+ light[1] = 1;
+ light[2] = 0.2;
+ light[3] = 200;
+ lightpflags |= PFLAGS_FULLDYNAMIC;
+ }
+ }
+
+ specialvisibilityradius = 0;
+ if (lightpflags & PFLAGS_FULLDYNAMIC)
+ specialvisibilityradius = max(specialvisibilityradius, light[3]);
+ if (glowsize)
+ specialvisibilityradius = max(specialvisibilityradius, glowsize * 4);
+ if (flags & RENDER_GLOWTRAIL)
+ specialvisibilityradius = max(specialvisibilityradius, 100);
+ if (effects & (EF_BRIGHTFIELD | EF_MUZZLEFLASH | EF_BRIGHTLIGHT | EF_DIMLIGHT | EF_RED | EF_BLUE | EF_FLAME | EF_STARDUST))
+ {
+ if (effects & EF_BRIGHTFIELD)
+ specialvisibilityradius = max(specialvisibilityradius, 80);
+ if (effects & EF_MUZZLEFLASH)
+ specialvisibilityradius = max(specialvisibilityradius, 100);
+ if (effects & EF_BRIGHTLIGHT)
+ specialvisibilityradius = max(specialvisibilityradius, 400);
+ if (effects & EF_DIMLIGHT)
+ specialvisibilityradius = max(specialvisibilityradius, 200);
+ if (effects & EF_RED)
+ specialvisibilityradius = max(specialvisibilityradius, 200);
+ if (effects & EF_BLUE)
+ specialvisibilityradius = max(specialvisibilityradius, 200);
+ if (effects & EF_FLAME)
+ specialvisibilityradius = max(specialvisibilityradius, 250);
+ if (effects & EF_STARDUST)
+ specialvisibilityradius = max(specialvisibilityradius, 100);
+ }
+ if (e > svs.maxclients && (!modelindex && !specialvisibilityradius))
+ continue;
+