Index: trunk/src/server/sv_snapshot.c =================================================================== --- trunk/src/server/sv_snapshot.c (revision 1100) +++ trunk/src/server/sv_snapshot.c (working copy) @@ -353,10 +353,13 @@ } // entities can be flagged to be sent to a given mask of clients if ( ent->r.svFlags & SVF_CLIENTMASK ) { - if (frame->ps.clientNum >= 32) - Com_Error( ERR_DROP, "SVF_CLIENTMASK: cientNum > 32\n" ); - if (~ent->r.singleClient & (1 << frame->ps.clientNum)) - continue; + if ( frame->ps.clientNum >= 32 ) { + if ( ~ent->r.hiMask & (1 << (frame->ps.clientNum - 32)) ) + continue; + } else { + if ( ~ent->r.singleClient & (1 << frame->ps.clientNum) ) + continue; + } } svEnt = SV_SvEntityForGentity( ent ); Index: trunk/src/game/g_public.h =================================================================== --- trunk/src/game/g_public.h (revision 1100) +++ trunk/src/game/g_public.h (working copy) @@ -31,7 +31,9 @@ // special server behaviors #define SVF_NOCLIENT 0x00000001 // don't send entity to clients, even if it has effects -#define SVF_CLIENTMASK 0x00000002 +#define SVF_CLIENTMASK 0x00000002 // send to clients specified by these bitmasks: + // entityShared_t->singleClient: low-order bits (0..31) + // entityShared_t->hiMask: high-order bits (32..63) #define SVF_BROADCAST 0x00000020 // send to all connected clients #define SVF_PORTAL 0x00000040 // merge a second pvs at origin2 into snapshots @@ -56,6 +58,7 @@ int svFlags; // SVF_NOCLIENT, SVF_BROADCAST, etc int singleClient; // only send to this client when SVF_SINGLECLIENT is set + int hiMask; // singleClient and hiMask are bitmasks if SVF_CLIENTMASK is set qboolean bmodel; // if false, assume an explicit mins / maxs bounding box // only set by trap_SetBrushModel