10 if(frameduration == 0)
12 if(maxtime <= 2 * frameduration)
14 t -= frameduration *
ceil((t - maxtime) / frameduration);
22 if (!
model || !
model->animscenes || framenum < 0 || framenum >=
model->numframes)
24 if(
model->animscenes[framenum].framerate)
25 return model->animscenes[framenum].framecount /
model->animscenes[framenum].framerate;
58 memcpy(d->
deltabits, olddeltabits, oldmaxedicts *
sizeof(
int));
59 memcpy(d->
priorities, oldpriorities, oldmaxedicts *
sizeof(
unsigned char));
60 memcpy(d->
updateframenum, oldupdateframenum, oldmaxedicts *
sizeof(
int));
62 memcpy(d->
visiblebits, oldvisiblebits, (oldmaxedicts+7)/8 *
sizeof(
unsigned char));
91 for (limit = 0;limit < 256;limit++)
93 s = d->
states + stateindex;
104 Con_DPrintf(
"Protocol: Runaway loop recursing tagentity links on entity %i\n", stateindex);
114 unsigned int bits = 0;
127 if (o->
skin !=
n->skin)
181 unsigned int bits = 0;
218 else if (s->
effects & 0xFFFFFF00)
225 if (bits >= 16777216)
341 for (bonenum = 0;bonenum < numbones;bonenum++)
414 int i, num, l, framenum, packetlognumber, priority;
416 unsigned char data[128];
432 Con_DPrintf(
"EntityFrame5_WriteFrame: packetlog overflow for a client, resetting\n");
438 memset(&
buf, 0,
sizeof(
buf));
444 for (
i = 0;
i < numstates;
i++)
448 for (;num <
n->number;num++)
493 if (
buf.cursize + 11 >
buf.maxsize)
529 packetlog = d->
packetlog + packetlognumber;
554 if(!l && !need_empty)
560 packetlog = d->
packetlog + packetlognumber;
568 Con_Printf(
"send: svc_entities %i\n", framenum);
628 static unsigned char statsdeltabits[(
MAX_CL_STATS+7)/8];
636 memset(deltabits, 0,
sizeof(deltabits));
637 memset(statsdeltabits, 0,
sizeof(statsdeltabits));
647 for (j = 0, s = p->
states;j < p->numstates;j++, s++)
657 for (j = 0, s = p->
states;j < p->numstates;j++, s++)
658 deltabits[s->
number] &= ~s->bits;
666 bits = deltabits[
i] & ~d->deltabits[
i];
cvar_t developer_networkentities
void MSG_WriteCoord32f(sizebuf_t *sb, float f)
void MSG_WriteShort(sizebuf_t *sb, int c)
void MSG_WriteAngle16i(sizebuf_t *sb, float f)
void MSG_WriteLong(sizebuf_t *sb, int c)
void MSG_WriteByte(sizebuf_t *sb, int c)
void MSG_WriteCoord13i(sizebuf_t *sb, float f)
void MSG_WriteAngle8i(sizebuf_t *sb, float f)
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_DARKPLACES6
various changes
@ 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_DARKPLACES1
uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta com...
void Con_DPrintf(const char *fmt,...)
A Con_Printf that only shows up if the "developer" cvar is set.
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
static int(ZEXPORT *qz_inflate)(z_stream *strm
GLsizeiptr const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
#define bound(min, num, max)
#define VectorCompare(a, b)
#define VectorDistance(a, b)
void Matrix4x4_ToBonePose7s(const matrix4x4_t *m, float origininvscale, short *pose7s)
#define CLEARPVSBIT(pvs, b)
#define CHECKPVSBIT(pvs, b)
#define SETPVSBIT(pvs, b)
#define PRVM_serveredictfunction(ed, fieldname)
entity_state_t defaultstate
#define E5_EXTEND1
bits >= (1<<8)
#define E5_EFFECTS16
short = s->effects
#define E5_ATTACHMENT
short = s->tagentity byte = s->tagindex
#define E5_FLAGS
byte = s->renderflags
#define E5_MODEL
E5_MODEL16=0: byte = s->modelindex E5_MODEL16=1: short = s->modelindex.
#define ENTITYSIZEPROFILING_START(msg, num, flags)
#define E5_EFFECTS
E5_EFFECTS16=0 && E5_EFFECTS32=0: byte = s->effects E5_EFFECTS16=1 && E5_EFFECTS32=0: short = s->effe...
#define E5_ORIGIN
E5_ORIGIN32=0: short[3] = s->origin[0] * 8, s->origin[1] * 8, s->origin[2] * 8 E5_ORIGIN32=1: float[3...
#define E5_COLORMOD
byte[3] = s->colormod[0], s->colormod[1], s->colormod[2]
#define E5_COLORMAP
byte = s->colormap
#define E5_EFFECTS32
int = s->effects
#define RENDER_COMPLEXANIMATION
#define E5_ANGLES
E5_ANGLES16=0: byte[3] = s->angle[0] * 256 / 360, s->angle[1] * 256 / 360, s->angle[2] * 256 / 360 E5...
#define svc_updatestatubyte
#define E5_SCALE
byte = bound(0, s->scale * 16, 255)
#define ENTITYFRAME5_MAXSTATES
#define ENTITYSIZEPROFILING_END(msg, num, flags)
#define E5_FRAME
E5_FRAME16=0: byte = s->frame E5_FRAME16=1: short = s->frame.
#define E5_ALPHA
byte = bound(0, s->alpha * 255, 255)
#define E5_LIGHT
short[4] = s->light[0], s->light[1], s->light[2], s->light[3] byte = s->lightstyle byte = s->lightpfl...
#define E5_TRAILEFFECTNUM
ushort traileffectnum
#define E5_GLOWMOD
byte[3] = s->glowmod[0], s->glowmod[1], s->glowmod[2]
#define RENDER_LOWPRECISION
#define ENTITYFRAME5_MAXPACKETLOGS
#define E5_SKIN
byte = s->skin
#define E5_EXTEND2
bits >= (1<<16)
#define ENTITYFRAME5_PRIORITYLEVELS
#define E5_EXTEND3
bits >= (1<<24)
#define E5_COMPLEXANIMATION
byte type=0 short frames[1] short times[1] byte type=1 short frames[2] short times[2] byte lerps[2] b...
#define E5_FULLUPDATE
reset all entity fields (typically used if status changed)
#define E5_GLOW
byte = s->glowsize byte = s->glowcolor
#define MAX_EDICTS
max number of objects in game world at once (32768 protocol limit)
model_t * SV_GetModelByIndex(int modelindex)
server_static_t svs
persistant server info
unsigned char statsdeltabits[(MAX_CL_STATS+7)/8]
framegroupblend_t framegroupblend[4]
unsigned short viewmodelforclient
unsigned short modelindex
unsigned char colormod[3]
unsigned short traileffectnum
skeleton_t skeletonobject
unsigned short exteriormodelforclient
unsigned char lightpflags
int prioritychaincounts[ENTITYFRAME5_PRIORITYLEVELS]
unsigned char * visiblebits
entityframe5_packetlog_t packetlog[ENTITYFRAME5_MAXPACKETLOGS]
unsigned short prioritychains[ENTITYFRAME5_PRIORITYLEVELS][ENTITYFRAME5_MAXSTATES]
unsigned char * priorities
unsigned char statsdeltabits[(MAX_CL_STATS+7)/8]
entityframe5_changestate_t states[ENTITYFRAME5_MAXSTATES]
int max_edicts
number of edicts for which space has been (should be) allocated
int maxclients
number of svs.clients slots (updated by maxplayers command)
protocolversion_t protocol
one of the PROTOCOL_ values
const struct model_s * model
struct matrix4x4_s * relativetransforms
qbool EntityFrame5_WriteFrame(sizebuf_t *msg, int maxsize, entityframe5_database_t *d, int numstates, const entity_state_t **states, int viewentnum, unsigned int movesequence, qbool need_empty)
entityframe5_database_t * EntityFrame5_AllocDatabase(mempool_t *pool)
void EntityFrame5_FreeDatabase(entityframe5_database_t *d)
static int EntityState5_DeltaBits(const entity_state_t *o, const entity_state_t *n)
static int EntityState5_Priority(entityframe5_database_t *d, int stateindex)
static int packetlog5cmp(const void *a_, const void *b_)
static double anim_frameduration(model_t *model, int framenum)
static void EntityFrame5_ExpandEdicts(entityframe5_database_t *d, int newmax)
void EntityFrame5_AckFrame(entityframe5_database_t *d, int framenum)
void EntityState5_WriteUpdate(int number, const entity_state_t *s, int changedbits, sizebuf_t *msg)
void EntityFrame5_LostFrame(entityframe5_database_t *d, int framenum)
static double anim_reducetime(double t, double frameduration, double maxtime)
#define Mem_Alloc(pool, size)