96 for (i = 0, client =
svs.clients;i <
svs.maxclients;i++, client++)
121 va_start(argptr,fmt);
143 va_start(argptr,fmt);
168 for (i=0 ; i<3 ; i++)
232 int sound_num, field_mask, i, ent, speed4000;
234 dest = (reliable ? &
sv.reliable_datagram : &
sv.datagram);
236 if (nvolume < 0 || nvolume > 255)
238 Con_Printf (
"SV_StartSound: volume = %i\n", nvolume);
242 if (attenuation < 0 || attenuation > 4)
244 Con_Printf (
"SV_StartSound: attenuation = %f\n", attenuation);
250 Con_Printf (
"SV_StartSound: channel = %i\n", channel);
266 speed4000 = (
int)
floor(speed * 4000.0f + 0.5f);
272 if (speed4000 && speed4000 != 4000)
274 if (ent >= 8192 || channel < 0 || channel > 7)
276 if (sound_num >= 256)
299 for (i = 0;i < 3;i++)
322 int sound_num, field_mask, i, speed4000;
324 if (nvolume < 0 || nvolume > 255)
326 Con_Printf (
"SV_StartPointSound: volume = %i\n", nvolume);
330 if (attenuation < 0 || attenuation > 4)
332 Con_Printf (
"SV_StartPointSound: attenuation = %f\n", attenuation);
344 speed4000 = (
int)(speed * 40.0f);
350 if (sound_num >= 256)
352 if (speed4000 && speed4000 != 4000)
370 for (i = 0;i < 3;i++)
398 unsigned int sendflags;
400 unsigned int modelindex,
effects,
flags, glowsize, lightstyle, lightpflags, light[4], specialvisibilityradius;
401 unsigned int customizeentityforclient;
402 unsigned int sendentity;
405 vec3_t cullmins, cullmaxs;
431 glowsize = (
unsigned char)
bound(0, i, 255);
439 light[0] = (
unsigned short)
bound(0,
f, 65535);
441 light[1] = (
unsigned short)
bound(0,
f, 65535);
443 light[2] = (
unsigned short)
bound(0,
f, 65535);
445 light[3] = (
unsigned short)
bound(0,
f, 65535);
461 light[0] = (
int)(0.2*256);
462 light[1] = (
int)(1.0*256);
463 light[2] = (
int)(0.2*256);
469 specialvisibilityradius = 0;
471 specialvisibilityradius =
max(specialvisibilityradius, light[3]);
473 specialvisibilityradius =
max(specialvisibilityradius, glowsize * 4);
475 specialvisibilityradius =
max(specialvisibilityradius, 100);
479 specialvisibilityradius =
max(specialvisibilityradius, 80);
481 specialvisibilityradius =
max(specialvisibilityradius, 100);
483 specialvisibilityradius =
max(specialvisibilityradius, 400);
485 specialvisibilityradius =
max(specialvisibilityradius, 200);
487 specialvisibilityradius =
max(specialvisibilityradius, 200);
489 specialvisibilityradius =
max(specialvisibilityradius, 200);
491 specialvisibilityradius =
max(specialvisibilityradius, 250);
493 specialvisibilityradius =
max(specialvisibilityradius, 100);
499 if (!customizeentityforclient && enumber >
svs.maxclients && (!
modelindex && !specialvisibilityradius))
609 cs->
light[0] = light[0];
610 cs->
light[1] = light[1];
611 cs->
light[2] = light[2];
612 cs->
light[3] = light[3];
646 if (specialvisibilityradius)
648 cullmins[0] =
min(cullmins[0], cs->
origin[0] - specialvisibilityradius);
649 cullmins[1] =
min(cullmins[1], cs->
origin[1] - specialvisibilityradius);
650 cullmins[2] =
min(cullmins[2], cs->
origin[2] - specialvisibilityradius);
651 cullmaxs[0] =
max(cullmaxs[0], cs->
origin[0] + specialvisibilityradius);
652 cullmaxs[1] =
max(cullmaxs[1], cs->
origin[1] + specialvisibilityradius);
653 cullmaxs[2] =
max(cullmaxs[2], cs->
origin[2] + specialvisibilityradius);
669 if (
sv.worldmodel &&
sv.worldmodel->brush.FindBoxClusters)
687 if (
sv.csqcentityversion[enumber] !=
version)
688 sendflags = 0xFFFFFF;
693 for (i = 0;i <
svs.maxclients;i++)
694 svs.clients[i].csqcentitysendflags[enumber] |= sendflags;
708 sv.numsendentities = 0;
709 sv.sendentitiesindex[0] =
NULL;
710 memset(
sv.sendentitiesindex, 0, prog->
num_edicts *
sizeof(*
sv.sendentitiesindex));
715 sv.sendentitiesindex[e] =
sv.sendentities +
sv.numsendentities;
716 sv.numsendentities++;
721#define MAX_LINEOFSIGHTTRACES 64
728 float starttransformed[3], endtransformed[3];
729 float boxminstransformed[3], boxmaxstransformed[3];
730 float localboxcenter[3], localboxextents[3], localboxmins[3], localboxmaxs[3];
733 int originalnumtouchedicts;
734 int numtouchedicts = 0;
740 vec3_t eyemins, eyemaxs, start;
742 vec3_t clipboxmins, clipboxmaxs;
748 eyemins[0] = eye[0] - eyejitter;
749 eyemaxs[0] = eye[0] + eyejitter;
750 eyemins[1] = eye[1] - eyejitter;
751 eyemaxs[1] = eye[1] + eyejitter;
752 eyemins[2] = eye[2] - eyejitter;
753 eyemaxs[2] = eye[2] + eyejitter;
755 boxmins[0] = (enlarge+1) * entboxmins[0] - enlarge * entboxmaxs[0] - entboxexpand;
756 boxmaxs[0] = (enlarge+1) * entboxmaxs[0] - enlarge * entboxmins[0] + entboxexpand;
757 boxmins[1] = (enlarge+1) * entboxmins[1] - enlarge * entboxmaxs[1] - entboxexpand;
758 boxmaxs[1] = (enlarge+1) * entboxmaxs[1] - enlarge * entboxmins[1] + entboxexpand;
759 boxmins[2] = (enlarge+1) * entboxmins[2] - enlarge * entboxmaxs[2] - entboxexpand;
760 boxmaxs[2] = (enlarge+1) * entboxmaxs[2] - enlarge * entboxmins[2] + entboxexpand;
762 VectorMAM(0.5f, boxmins, 0.5f, boxmaxs, endpoints[0]);
763 for (traceindex = 1;traceindex < numtraces;traceindex++)
769 for (traceindex = 0;traceindex < numtraces;traceindex++)
771 clipboxmins[0] =
min(clipboxmins[0], endpoints[traceindex][0]);
772 clipboxmins[1] =
min(clipboxmins[1], endpoints[traceindex][1]);
773 clipboxmins[2] =
min(clipboxmins[2], endpoints[traceindex][2]);
774 clipboxmaxs[0] =
max(clipboxmaxs[0], endpoints[traceindex][0]);
775 clipboxmaxs[1] =
max(clipboxmaxs[1], endpoints[traceindex][1]);
776 clipboxmaxs[2] =
max(clipboxmaxs[2], endpoints[traceindex][2]);
789 originalnumtouchedicts = numtouchedicts;
791 for (touchindex = 0;touchindex < originalnumtouchedicts;touchindex++)
793 touch = touchedicts[touchindex];
805 touchedicts[numtouchedicts++] = touch;
812 for (traceindex = 0;traceindex < numtraces;traceindex++)
816 if (
sv.worldmodel &&
sv.worldmodel->brush.TraceLineOfSight)
817 if (!
sv.worldmodel->brush.TraceLineOfSight(
sv.worldmodel, start, endpoints[traceindex], boxmins, boxmaxs))
819 for (touchindex = 0;touchindex < numtouchedicts;touchindex++)
821 touch = touchedicts[touchindex];
827 Matrix4x4_CreateFromQuakeEntity(&matrix,
PRVM_serveredictvector(touch,
origin)[0],
PRVM_serveredictvector(touch,
origin)[1],
PRVM_serveredictvector(touch,
origin)[2], pitchsign *
PRVM_serveredictvector(touch,
angles)[0],
PRVM_serveredictvector(touch,
angles)[1],
PRVM_serveredictvector(touch,
angles)[2], 1);
835 VectorMAM(0.5f, boxminstransformed, 0.5f, boxmaxstransformed, localboxcenter);
836 localboxextents[0] =
fabs(boxmaxstransformed[0] - localboxcenter[0]);
837 localboxextents[1] =
fabs(boxmaxstransformed[1] - localboxcenter[1]);
838 localboxextents[2] =
fabs(boxmaxstransformed[2] - localboxcenter[2]);
839 localboxmins[0] = localboxcenter[0] - localboxextents[0];
840 localboxmins[1] = localboxcenter[1] - localboxextents[1];
841 localboxmins[2] = localboxcenter[2] - localboxextents[2];
842 localboxmaxs[0] = localboxcenter[0] + localboxextents[0];
843 localboxmaxs[1] = localboxcenter[1] + localboxextents[1];
844 localboxmaxs[2] = localboxcenter[2] + localboxextents[2];
845 if (!
model->brush.TraceLineOfSight(
model, starttransformed, endtransformed, localboxmins, localboxmaxs))
853 if (touchindex < numtouchedicts)
869 if (
sv.sententitiesconsideration[s->
number] ==
sv.sententitiesmark)
871 sv.sententitiesconsideration[s->
number] =
sv.sententitiesmark;
872 sv.writeentitiestoclient_stats_totalentities++;
885 if (s->
number !=
sv.writeentitiestoclient_cliententitynumber)
928 if (
sv.worldmodel &&
sv.worldmodel->brush.BoxTouchingPVS && !
sv.worldmodel->brush.BoxTouchingPVS(
sv.worldmodel,
sv.writeentitiestoclient_pvs, ed->
priv.
server->cullmins, ed->
priv.
server->cullmaxs))
930 sv.writeentitiestoclient_stats_culled_pvs++;
938 for (i = 0;i < ed->
priv.
server->pvs_numclusters;i++)
943 sv.writeentitiestoclient_stats_culled_pvs++;
963 for (eyeindex = 0;eyeindex <
sv.writeentitiestoclient_numeyes;eyeindex++)
966 if(eyeindex <
sv.writeentitiestoclient_numeyes)
967 svs.clients[
sv.writeentitiestoclient_clientnumber].visibletime[s->
number] =
973 else if ((
float)
host.realtime >
svs.clients[
sv.writeentitiestoclient_clientnumber].visibletime[s->
number])
975 sv.writeentitiestoclient_stats_culled_trace++;
986 sv.writeentitiestoclient_stats_visibleentities++;
987 sv.sententities[s->
number] =
sv.sententitiesmark;
990#if MAX_LEVELNETWORKEYES > 0
991#define MAX_EYE_RECURSION 1
1020 cameras[n_cameras] = e;
1034 for(i = 0, j = 0;
sv.writeentitiestoclient_numeyes <
MAX_CLIENTNETWORKEYES && i < n_cameras; ++i, ++j, j %= n_cameras)
1041 for(k = 0; k <
sv.writeentitiestoclient_numeyes; ++k)
1042 if(eye_levels[k] <= MAX_EYE_RECURSION)
1049 if ((
float)
host.realtime <=
svs.clients[
sv.writeentitiestoclient_clientnumber].visibletime[cameras[j]])
1051 eye_levels[
sv.writeentitiestoclient_numeyes] = eye_levels[k] + 1;
1052 VectorCopy(camera_origins[j],
sv.writeentitiestoclient_eyes[
sv.writeentitiestoclient_numeyes]);
1054 sv.writeentitiestoclient_numeyes++;
1101 float *statsf = (
float *)stats;
1113 for (i=0 ; i<3 ; i++)
1140 for (i=0 ; i < 3 ; i++)
1176 for (i=0 ; i<3 ; i++)
1270 if (bits >= 16777216)
1287 for (i=0 ; i<3 ; i++)
1354 for (i = 0;i < 32;i++)
1375 if (
sv.datagram.cursize <= 0)
1377 for (i = 0, client =
svs.clients;i <
svs.maxclients;i++, client++)
1390 int numsegments, j, split;
1401 if (numsegments == 1)
1408 if (msg->
cursize + split <= maxsize)
1427 int clientrate, maxrate, maxsize, maxsize2, downloadsize;
1448 switch (
sv.protocol)
1470 maxsize =
sizeof(sv_sendclientdatagram_buf);
1471 maxsize2 =
sizeof(sv_sendclientdatagram_buf);
1493 maxsize = (
int)(clientrate * timedelta) - 28;
1496 maxsize =
bound(128, maxsize, 1400);
1510 maxsize =
sizeof(sv_sendclientdatagram_buf);
1511 maxsize2 =
sizeof(sv_sendclientdatagram_buf);
1513 clientrate = 1000000000;
1521 msg.
data = sv_sendclientdatagram_buf;
1522 msg.
maxsize =
sizeof(sv_sendclientdatagram_buf);
1558 downloadsize =
min(maxsize*2,maxsize2) - msg.
cursize - 7;
1562 unsigned char data[1400];
1564 downloadsize =
min(downloadsize, (
int)
sizeof(
data));
1575 if (downloadsize > 0)
1684 for (j = 0, client =
svs.clients;j <
svs.maxclients;j++, client++)
1699 int i, prepared =
false;
1702 Sys_Error(
"SV_SendClientMessages: no quakeworld support\n");
1717 if (
host_client->netconnection->message.overflowed)
#define IS_OLDNEXUIZ_DERIVED(g)
@ GAME_TENEBRAE
full of evil hackery
void MSG_WriteCoord32f(sizebuf_t *sb, float f)
void MSG_WriteShort(sizebuf_t *sb, int c)
void MSG_WriteString(sizebuf_t *sb, const char *s)
void MSG_WriteAngle16i(sizebuf_t *sb, float f)
void MSG_WriteLong(sizebuf_t *sb, int c)
void MSG_WriteCoord(sizebuf_t *sb, float f, protocolversion_t protocol)
void MSG_WriteByte(sizebuf_t *sb, int c)
void MSG_WriteFloat(sizebuf_t *sb, float f)
void MSG_WriteAngle(sizebuf_t *sb, float f, protocolversion_t protocol)
void MSG_WriteChar(sizebuf_t *sb, int c)
void MSG_WriteCoord16i(sizebuf_t *sb, float f)
void SZ_Clear(sizebuf_t *buf)
int dpvsnprintf(char *buffer, size_t buffersize, const char *format, va_list args)
Returns the number of printed characters, excluding the final '\0' or returns -1 if the buffer isn't ...
void SZ_Write(sizebuf_t *buf, const unsigned char *data, int length)
@ PROTOCOL_DARKPLACES2
various changes
@ PROTOCOL_DARKPLACES4
various changes
@ PROTOCOL_NEHAHRABJP2
same as NEHAHRABJP but with 16bit soundindex
@ PROTOCOL_DARKPLACES3
uses EntityFrame4 entity snapshot encoder/decoder which is broken, this attempted to do partial snaps...
@ PROTOCOL_NEHAHRABJP
same as QUAKEDP but with 16bit modelindex
@ PROTOCOL_DARKPLACES5
uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at ht...
@ PROTOCOL_QUAKEDP
darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as n...
@ PROTOCOL_QUAKE
quake (aka netquake/normalquake/nq) protocol
@ PROTOCOL_NEHAHRABJP3
same as NEHAHRABJP2 but with some changes
@ PROTOCOL_NEHAHRAMOVIE
Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but ...
@ PROTOCOL_QUAKEWORLD
quakeworld protocol
@ PROTOCOL_DARKPLACES1
uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta com...
#define dp_strlcpy(dst, src, dsize)
void Con_Print(const char *msg)
Prints to all appropriate console targets, and adds timestamps.
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
void Cvar_SetValueQuick(cvar_t *var, float value)
entity viewmodelforclient
entity exteriormodeltoclient
fs_offset_t FS_Read(qfile_t *file, void *buffer, size_t buffersize)
fs_offset_t FS_Tell(qfile_t *file)
static int(ZEXPORT *qz_inflate)(z_stream *strm
static int const char * version
GLenum GLenum GLsizei count
GLsizeiptr const GLvoid * data
static lhnetaddresstype_t LHNETADDRESS_GetAddressType(const lhnetaddress_t *address)
#define bound(min, num, max)
#define lhrandom(MIN, MAX)
LadyHavoc: this function never returns exactly MIN or exactly MAX, because of a QuakeC bug in id1 whe...
#define VectorSet(vec, x, y, z)
#define VectorCompare(a, b)
#define VectorCopy(in, out)
#define VectorMAM(scale1, b1, scale2, b2, out)
#define VectorAdd(a, b, out)
#define VectorMA(a, scale, b, out)
void Matrix4x4_Transform(const matrix4x4_t *in, const float v[3], float out[3])
void Matrix4x4_CreateFromQuakeEntity(matrix4x4_t *out, double x, double y, double z, double pitch, double yaw, double roll, double scale)
void Matrix4x4_Invert_Simple(matrix4x4_t *out, const matrix4x4_t *in1)
#define CHECKPVSBIT(pvs, b)
qbool NetConn_CanSend(netconn_t *conn)
int NetConn_SendUnreliableMessage(netconn_t *conn, sizebuf_t *data, protocolversion_t protocol, int rate, int burstsize, qbool quakesignon_suppressreliables)
#define MAX_ENTITYCLUSTERS
#define PRVM_serveredictvector(ed, fieldname)
#define PRVM_serverglobaledict(fieldname)
#define PRVM_serveredictedict(ed, fieldname)
int PRVM_SetEngineString(prvm_prog_t *prog, const char *s)
#define PRVM_EDICT_NUM(n)
#define PRVM_NEXT_EDICT(e)
const char * PRVM_GetString(prvm_prog_t *prog, int num)
#define PRVM_NUM_FOR_EDICT(e)
#define PRVM_PROG_TO_EDICT(n)
#define PRVM_serverglobalfloat(fieldname)
#define PRVM_serveredictfloat(ed, fieldname)
#define PRVM_serveredictstring(ed, fieldname)
#define PRVM_serveredictfunction(ed, fieldname)
#define PRVM_serverglobalvector(fieldname)
void Protocol_UpdateClientStats(const int *stats)
entity_state_t defaultstate
#define DEFAULT_VIEWHEIGHT
#define RENDER_COMPLEXANIMATION
#define SU_INWATER
no data follows, the bit is it
#define PFLAGS_FULLDYNAMIC
#define SND_SPEEDUSHORT4000
#define SU_EXTEND2
another byte to follow, future expansion
#define RENDER_COLORMAPPED
#define SU_VIEWZOOM
byte factor (0 = 0.0 (not valid), 255 = 1.0)
#define SU_ONGROUND
no data follows, the bit is it
#define RENDER_LOWPRECISION
#define MAX_INPUTLINE
maximum size of console commandline, QuakeC strings, and many other text processing buffers
#define MAX_EDICTS
max number of objects in game world at once (32768 protocol limit)
#define NET_MAXMESSAGE
max reliable packet size (sent as multiple fragments of MAX_PACKETFRAGMENT)
#define NET_MINRATE
limits "rate" and "sv_maxrate" cvars
#define MAX_PACKETFRAGMENT
max length of packet fragment
#define MAX_LEVELNETWORKEYES
max number of locations that can be added to pvs when culling network entities (must be at least 2 fo...
#define MAX_CLIENTNETWORKEYES
max number of locations that can be added to pvs when culling network entities (must be at least 2 fo...
#define MAX_MODELS
max number of models loaded at once (including during level transitions)
#define STAT_MOVEVARS_WARSOWBUNNY_ACCEL
DP.
#define STAT_MOVEFLAGS
DP.
#define STAT_MOVEVARS_MAXAIRSPEED
DP.
#define STAT_MOVEVARS_AIRACCELERATE
DP.
#define STAT_MOVEVARS_WATERACCELERATE
DP.
#define STAT_TOTALMONSTERS
#define STAT_MOVEVARS_AIRACCEL_QW
DP.
#define STAT_MOVEVARS_AIRSTOPACCELERATE
DP.
#define STAT_MOVEVARS_TIMESCALE
DP.
#define STAT_MOVEVARS_AIRSTRAFEACCEL_QW
DP.
#define STAT_MOVEVARS_AIRCONTROL
DP.
#define STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO
DP.
#define STAT_MOVEVARS_GRAVITY
DP.
#define STAT_MOVEVARS_AIRSTRAFEACCELERATE
DP.
#define STAT_MOVEVARS_AIRACCEL_QW_STRETCHFACTOR
DP.
#define STAT_MOVEVARS_TICRATE
DP.
#define STAT_TOTALSECRETS
#define STAT_FRAGLIMIT
DP.
#define STAT_ACTIVEWEAPON
#define STAT_MOVEVARS_SPECTATORMAXSPEED
DP.
#define STAT_MOVEVARS_MAXSPEED
DP.
#define STAT_MOVEVARS_STEPHEIGHT
DP.
#define STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW
DP.
#define STAT_MOVEVARS_AIRCONTROL_PENALTY
DP.
#define STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION
DP.
#define STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL
DP.
#define STAT_MOVEVARS_MAXAIRSTRAFESPEED
DP.
#define STAT_MOVEVARS_STOPSPEED
DP.
#define STAT_MOVEVARS_ACCELERATE
DP.
#define STAT_MOVEVARS_ENTGRAVITY
DP.
#define STAT_MOVEVARS_WATERFRICTION
DP.
#define STAT_MOVEVARS_EDGEFRICTION
DP.
#define STAT_TIMELIMIT
DP.
#define STAT_MOVEVARS_AIRCONTROL_POWER
DP.
#define STAT_ITEMS
FTE, DP.
#define STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL
DP.
#define STAT_MOVEVARS_JUMPVELOCITY
DP.
#define STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED
DP.
#define STAT_MOVEVARS_FRICTION
DP.
#define STAT_VIEWHEIGHT
FTE, DP.
#define MOVEFLAG_Q2AIRACCELERATE
#define MOVEFLAG_NOGRAVITYONGROUND
#define MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE
#define FL_MONSTER
movement is smoothed on the client side by step based interpolation
int SV_SoundIndex(const char *s, int precachemode)
cvar_t sv_maxairstrafespeed
cvar_t sv_airstopaccelerate
cvar_t sv_cullentities_trace_enlarge
cvar_t sv_cullentities_pvs
void SV_SetIdealPitch(void)
void VM_SV_UpdateCustomStats(client_t *client, prvm_edict_t *ent, sizebuf_t *msg, int *stats)
cvar_t sv_airspeedlimit_nonqw
void SV_Name(int clientnum)
int SV_ModelIndex(const char *s, int precachemode)
cvar_t sv_gameplayfix_nogravityonground
cvar_t sv_wateraccelerate
model_t * SV_GetModelByIndex(int modelindex)
cvar_t sv_aircontrol_penalty
cvar_t sv_cullentities_nevercullbmodels
int SV_EntitiesInBox(const vec3_t mins, const vec3_t maxs, int maxedicts, prvm_edict_t **resultedicts)
cvar_t sv_airstrafeaccelerate
void SV_WriteEntitiesToClient(client_t *client, prvm_edict_t *clent, sizebuf_t *msg, int maxsize)
cvar_t sv_gameplayfix_gravityunaffectedbyticrate
cvar_t sv_gameplayfix_q2airaccelerate
cvar_t sv_aircontrol_power
int SV_GetPitchSign(prvm_prog_t *prog, prvm_edict_t *ent)
void SV_DropClient(qbool leaving, const char *reason,...)
cvar_t sv_airstrafeaccel_qw
model_t * SV_GetModelFromEdict(prvm_edict_t *ed)
server_static_t svs
persistant server info
cvar_t sv_cullentities_trace_samples
cvar_t sv_cullentities_trace
cvar_t sv_cullentities_trace_samples_extra
#define MOVETYPE_STEP
gravity, special edge handling, special step based client side interpolation
cvar_t sv_airaccel_sideways_friction
cvar_t sv_cullentities_trace_delay
#define SOLID_BSP
bsp clip, touch on edge, block
#define DEFAULT_SOUND_PACKET_ATTENUATION
#define CHAN_ENGINE2NET(c)
#define DEFAULT_SOUND_PACKET_VOLUME
qbool active
false = empty client slot
qbool begun
false = don't send datagrams
char weaponmodel[MAX_QPATH]
cache weaponmodel name lookups
double keepalivetime
keepalive messages must be sent periodically during signon
int unreliablemsg_splitpoint[NET_MAXMESSAGE/16]
qbool clientconnectcalled
false = don't do ClientDisconnect on drop
int unreliablemsg_splitpoints
int rate
requested rate in bytes per second
int sendsignon
1 = send svc_serverinfo and advance to 2, 2 doesn't send, then advances to 0 (allowing unlimited send...
netconn_t * netconnection
communications handle
int rate_burstsize
temporarily exceed rate by this amount of bytes
prvm_edict_t * edict
PRVM_EDICT_NUM(clientnum+1)
framegroupblend_t framegroupblend[4]
unsigned short specialvisibilityradius
unsigned short viewmodelforclient
unsigned short modelindex
unsigned short drawonlytoclient
unsigned char colormod[3]
unsigned short traileffectnum
skeleton_t skeletonobject
unsigned short nodrawtoclient
unsigned short exteriormodelforclient
unsigned int customizeentityforclient
unsigned char lightpflags
int sendMessageLength
reliable message that is currently sending (for building fragments)
sizebuf_t message
writing buffer to send to peer as the next reliable message can be added to at any time,...
qbool free
true if this edict is unused
union prvm_edict_t::@123106147040330276163271355201011305114267000315 priv
struct edict_engineprivate_s * server
FIXME: this server pointer really means world, not server (it is used by both server qc and client qc...
int num_edicts
copies of some vars that were former read from sv
int max_edicts
number of edicts for which space has been (should be) allocated
void(* ExecuteProgram)(struct prvm_prog_s *prog, func_t fnum, const char *errormessage)
pointer to one of the *VM_ExecuteProgram functions
qbool allowoverflow
if false, do a Sys_Error
void SV_WriteDemoMessage(client_t *client, sizebuf_t *sendbuffer, qbool clienttoserver)
cvar_t sv_airaccel_qw_stretchfactor
cvar_t sv_warsowbunny_turnaccel
cvar_t sv_cullentities_trace_expand
cvar_t sv_cullentities_trace_eyejitter
cvar_t sv_warsowbunny_airforwardaccel
cvar_t sv_warsowbunny_accel
cvar_t sv_cullentities_trace_entityocclusion
cvar_t sv_warsowbunny_backtosideratio
cvar_t sv_cullentities_trace_delay_players
cvar_t sv_cullentities_trace_samples_players
cvar_t sv_cullentities_trace_spectators
cvar_t sv_onlycsqcnetworking
cvar_t sv_warsowbunny_topspeed
static void SV_UpdateToReliableMessages(void)
#define MAX_LINEOFSIGHTTRACES
static void SV_CleanupEnts(void)
void SV_ClientPrintf(const char *fmt,...)
void SV_StartParticle(vec3_t org, vec3_t dir, int color, int count)
void SV_FlushBroadcastMessages(void)
void SV_StartEffect(vec3_t org, int modelindex, int startframe, int framecount, int framerate)
qbool SV_CanSeeBox(int numtraces, vec_t eyejitter, vec_t enlarge, vec_t entboxexpand, vec3_t eye, vec3_t entboxmins, vec3_t entboxmaxs)
void SV_AddCameraEyes(void)
static void SV_SendClientDatagram(client_t *client)
void SV_WriteClientdataToMessage(client_t *client, prvm_edict_t *ent, sizebuf_t *msg, int *stats)
void SV_BroadcastPrintf(const char *fmt,...)
void SV_ClientPrint(const char *msg)
void SV_StartSound(prvm_edict_t *entity, int channel, const char *sample, int nvolume, float attenuation, qbool reliable, float speed)
void SV_SendClientMessages(void)
void SV_MarkWriteEntityStateToClient(entity_state_t *s, client_t *client)
void SV_ClientCommands(const char *fmt,...)
static qbool SV_PrepareEntityForSending(prvm_edict_t *ent, entity_state_t *cs, int enumber)
static void SV_PrepareEntitiesForSending(void)
void SV_BroadcastPrint(const char *msg)
void SV_StartPointSound(vec3_t origin, const char *sample, int nvolume, float attenuation, float speed)
static void SV_WriteUnreliableMessages(client_t *client, sizebuf_t *msg, int maxsize, int maxsize2)
void Sys_Error(const char *error,...) DP_FUNC_PRINTF(1) DP_FUNC_NORETURN
Causes the entire program to exit ASAP.