MSG_WriteString (&client->message,message);
MSG_WriteByte (&client->message, svc_serverinfo);
- MSG_WriteLong (&client->message, DPPROTOCOL_VERSION2);
+ MSG_WriteLong (&client->message, DPPROTOCOL_VERSION3);
MSG_WriteByte (&client->message, svs.maxclients);
if (!coop.integer && deathmatch.integer)
client->spawn_parms[i] = (&pr_global_struct->parm1)[i];
}
+#if NOROUTINGFIX
+ SV_SendServerinfo (client);
+#else
// send serverinfo on first nop
client->waitingforconnect = true;
client->sendsignon = true;
client->spawned = false; // need prespawn, spawn, etc
+#endif
}
*/
int fatbytes;
-byte fatpvs[MAX_MAP_LEAFS/8];
+qbyte fatpvs[MAX_MAP_LEAFS/8];
void SV_AddToFatPVS (vec3_t org, mnode_t *node)
{
int i;
- byte *pvs;
+ qbyte *pvs;
mplane_t *plane;
float d;
given point.
=============
*/
-byte *SV_FatPVS (vec3_t org)
+qbyte *SV_FatPVS (vec3_t org)
{
fatbytes = (sv.worldmodel->numleafs+31)>>3;
memset (fatpvs, 0, fatbytes);
//=============================================================================
-int SV_BoxTouchingPVS (byte *pvs, vec3_t mins, vec3_t maxs, mnode_t *node)
+int SV_BoxTouchingPVS (qbyte *pvs, vec3_t mins, vec3_t maxs, mnode_t *node)
{
int leafnum;
loc0:
{
int e, clentnum, bits, alpha, glowcolor, glowsize, scale, effects;
int culled_pvs, culled_portal, culled_trace, visibleentities, totalentities;
- byte *pvs;
+ qbyte *pvs;
vec3_t org, origin, angles, entmins, entmaxs;
float nextfullupdate;
edict_t *ent;
client->visibletime[e] = realtime + 1;
else
{
- if (realtime > client->visibletime[e])
+ //test nearest point on bbox
+ testorigin[0] = bound(entmins[0], org[0], entmaxs[0]);
+ testorigin[1] = bound(entmins[1], org[1], entmaxs[1]);
+ testorigin[2] = bound(entmins[2], org[2], entmaxs[2]);
+
+ memset (&trace, 0, sizeof(trace_t));
+ trace.fraction = 1;
+ trace.allsolid = true;
+ VectorCopy(testorigin, trace.endpos);
+
+ VectorCopy(org, RecursiveHullCheckInfo.start);
+ VectorSubtract(testorigin, testeye, RecursiveHullCheckInfo.dist);
+ RecursiveHullCheckInfo.hull = sv.worldmodel->hulls;
+ RecursiveHullCheckInfo.trace = &trace;
+ SV_RecursiveHullCheck (sv.worldmodel->hulls->firstclipnode, 0, 1, testeye, testorigin);
+
+ if (trace.fraction == 1)
+ client->visibletime[e] = realtime + 1;
+ else if (realtime > client->visibletime[e])
{
culled_trace++;
continue;
if (((int)(angles[0]*(256.0/360.0)) & 255) != ((int)(baseline->angles[0]*(256.0/360.0)) & 255)) bits |= U_ANGLE1;
if (((int)(angles[1]*(256.0/360.0)) & 255) != ((int)(baseline->angles[1]*(256.0/360.0)) & 255)) bits |= U_ANGLE2;
if (((int)(angles[2]*(256.0/360.0)) & 255) != ((int)(baseline->angles[2]*(256.0/360.0)) & 255)) bits |= U_ANGLE3;
- if (baseline->colormap != (byte) ent->v.colormap) bits |= U_COLORMAP;
- if (baseline->skin != (byte) ent->v.skin) bits |= U_SKIN;
+ if (baseline->colormap != (qbyte) ent->v.colormap) bits |= U_COLORMAP;
+ if (baseline->skin != (qbyte) ent->v.skin) bits |= U_SKIN;
if ((baseline->frame & 0x00FF) != ((int) ent->v.frame & 0x00FF)) bits |= U_FRAME;
if ((baseline->effects & 0x00FF) != ((int) ent->v.effects & 0x00FF)) bits |= U_EFFECTS;
if ((baseline->modelindex & 0x00FF) != ((int) ent->v.modelindex & 0x00FF)) bits |= U_MODEL;
{
int e, clentnum, flags, alpha, glowcolor, glowsize, scale, effects;
int culled_pvs, culled_portal, culled_trace, visibleentities, totalentities;
- byte *pvs;
+ qbyte *pvs;
vec3_t org, origin, angles, entmins, entmaxs;
edict_t *ent;
eval_t *val;
if (ent->v.movetype == MOVETYPE_STEP)
flags |= RENDER_STEP;
+ // don't send an entity if it's coordinates would wrap around
+ if ((effects & EF_LOWPRECISION) && origin[0] >= -32768 && origin[1] >= -32768 && origin[2] >= -32768 && origin[0] <= 32767 && origin[1] <= 32767 && origin[2] <= 32767)
+ flags |= RENDER_LOWPRECISION;
s = EntityFrame_NewEntity(&entityframe, e);
// if we run out of space, abort
int items;
eval_t *val;
vec3_t punchvector;
- byte viewzoom;
+ qbyte viewzoom;
//
// send a damage message
*/
qboolean SV_SendClientDatagram (client_t *client)
{
- byte buf[MAX_DATAGRAM];
+ qbyte buf[MAX_DATAGRAM];
sizebuf_t msg;
msg.data = buf;
MSG_WriteByte (&msg, svc_time);
MSG_WriteFloat (&msg, sv.time);
- if (!client->waitingforconnect)
+ if (client->spawned)
{
// add the client specific data to the datagram
SV_WriteClientdataToMessage (client->edict, &msg);
void SV_SendNop (client_t *client)
{
sizebuf_t msg;
- byte buf[4];
+ qbyte buf[4];
msg.data = buf;
msg.maxsize = sizeof(buf);
if (!host_client->active)
continue;
+#ifndef NOROUTINGFIX
if (host_client->sendserverinfo)
{
host_client->sendserverinfo = false;
SV_SendServerinfo (host_client);
}
+#endif
if (host_client->spawned)
{
// run two frames to allow everything to settle
sv.frametime = pr_global_struct->frametime = host_frametime = 0.1;
SV_Physics ();
+ sv.frametime = pr_global_struct->frametime = host_frametime = 0.1;
SV_Physics ();
Mod_PurgeUnused();