-#define PROTOCOL_VERSION 15
-#define DPPROTOCOL_VERSION1 96
-#define DPPROTOCOL_VERSION2 97
+#define PROTOCOL_QUAKE 15
+#define PROTOCOL_NEHAHRAMOVIE 250
+#define PROTOCOL_DARKPLACES1 96
+#define PROTOCOL_DARKPLACES2 97
-#define DPPROTOCOL_VERSION3 3500
-#define DPPROTOCOL_VERSION4 3501
+#define PROTOCOL_DARKPLACES3 3500
+#define PROTOCOL_DARKPLACES4 3501
+#define PROTOCOL_DARKPLACES5 3502
// if the high bit of the servercmd is set, the low bits are fast update flags:
#define U_MOREBITS (1<<0)
#define U_ORIGIN1 (1<<1)
// if the high bit of the servercmd is set, the low bits are fast update flags:
#define U_MOREBITS (1<<0)
#define U_ORIGIN1 (1<<1)
#define U_ALPHA (1<<17) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 1, and the entity is not sent if <=0 unless it has effects (model effects are checked as well)
#define U_SCALE (1<<18) // 1 byte, scale / 16 positive, not sent if 1.0
#define U_EFFECTS2 (1<<19) // 1 byte, this is .effects & 0xFF00 (second byte)
#define U_ALPHA (1<<17) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 1, and the entity is not sent if <=0 unless it has effects (model effects are checked as well)
#define U_SCALE (1<<18) // 1 byte, scale / 16 positive, not sent if 1.0
#define U_EFFECTS2 (1<<19) // 1 byte, this is .effects & 0xFF00 (second byte)
-#define U_GLOWSIZE (1<<20) // 1 byte, encoding is float/8.0, signed (negative is darklight), not sent if 0
+#define U_GLOWSIZE (1<<20) // 1 byte, encoding is float/4.0, unsigned, not sent if 0
#define U_GLOWCOLOR (1<<21) // 1 byte, palette index, default is 254 (white), this IS used for darklight (allowing colored darklight), however the particles from a darklight are always black, not sent if default value (even if glowsize or glowtrail is set)
// LordHavoc: colormod feature has been removed, because no one used it
#define U_COLORMOD (1<<22) // 1 byte, 3 bit red, 3 bit green, 2 bit blue, this lets you tint an object artifically, so you could make a red rocket, or a blue fiend...
#define U_GLOWCOLOR (1<<21) // 1 byte, palette index, default is 254 (white), this IS used for darklight (allowing colored darklight), however the particles from a darklight are always black, not sent if default value (even if glowsize or glowtrail is set)
// LordHavoc: colormod feature has been removed, because no one used it
#define U_COLORMOD (1<<22) // 1 byte, 3 bit red, 3 bit green, 2 bit blue, this lets you tint an object artifically, so you could make a red rocket, or a blue fiend...
#define RENDER_LOWPRECISION 16 // send as low precision coordinates to save bandwidth
#define RENDER_COLORMAPPED 32
#define RENDER_SHADOW 64 // cast shadow
#define RENDER_LOWPRECISION 16 // send as low precision coordinates to save bandwidth
#define RENDER_COLORMAPPED 32
#define RENDER_SHADOW 64 // cast shadow
unsigned short viewmodelforclient;
unsigned short exteriormodelforclient;
unsigned short nodrawtoclient;
unsigned short drawonlytoclient;
unsigned short viewmodelforclient;
unsigned short exteriormodelforclient;
unsigned short nodrawtoclient;
unsigned short drawonlytoclient;
server updates entities according to some (unmentioned) scheme.
a frame consists of all visible entities, some of which are up to date,
server updates entities according to some (unmentioned) scheme.
a frame consists of all visible entities, some of which are up to date,
a frame consists of some visible entities in a range (this is stored as start and end, note that end may be less than start if it wrapped).
these entities are stored in a range (firstentity/endentity) of structs in the entitydata[] buffer.
a frame consists of some visible entities in a range (this is stored as start and end, note that end may be less than start if it wrapped).
these entities are stored in a range (firstentity/endentity) of structs in the entitydata[] buffer.
#define E_EFFECTS2 (1<<18)
#define E_GLOWSIZE (1<<19)
#define E_GLOWCOLOR (1<<20)
#define E_EFFECTS2 (1<<18)
#define E_GLOWSIZE (1<<19)
#define E_GLOWCOLOR (1<<20)
#define E_EXTEND3 (1<<23)
#define E_SOUND1 (1<<24)
#define E_SOUNDVOL (1<<25)
#define E_SOUNDATTEN (1<<26)
#define E_TAGATTACHMENT (1<<27)
#define E_EXTEND3 (1<<23)
#define E_SOUND1 (1<<24)
#define E_SOUNDVOL (1<<25)
#define E_SOUNDATTEN (1<<26)
#define E_TAGATTACHMENT (1<<27)
#define E_UNUSED6 (1<<29)
#define E_UNUSED7 (1<<30)
#define E_EXTEND4 (1<<31)
#define E_UNUSED6 (1<<29)
#define E_UNUSED7 (1<<30)
#define E_EXTEND4 (1<<31)
// (server) clears the database to contain no frames (thus delta compression
// compresses against nothing)
// (server) clears the database to contain no frames (thus delta compression
// compresses against nothing)
// commits waiting to be applied to the reference database when confirmed
// (commit[i]->numentities == 0 means it is empty)
entity_database4_commit_t commit[MAX_ENTITY_HISTORY];
// commits waiting to be applied to the reference database when confirmed
// (commit[i]->numentities == 0 means it is empty)
entity_database4_commit_t commit[MAX_ENTITY_HISTORY];
+// should-be-private functions that aren't
+entity_state_t *EntityFrame4_GetReferenceEntity(entity_database4_t *d, int number);
+void EntityFrame4_AddCommitEntity(entity_database4_t *d, entity_state_t *s);
+
// reset a database (resets compression but does not reallocate anything)
void EntityFrame4_ResetDatabase(entity_database4_t *d);
// updates database to account for a frame-received acknowledgment
// reset a database (resets compression but does not reallocate anything)
void EntityFrame4_ResetDatabase(entity_database4_t *d);
// updates database to account for a frame-received acknowledgment
// write an entity in the frame
// returns false if full
int EntityFrame4_SV_WriteFrame_Entity(entity_database4_t *d, sizebuf_t *msg, int maxbytes, entity_state_t *s);
// write an entity in the frame
// returns false if full
int EntityFrame4_SV_WriteFrame_Entity(entity_database4_t *d, sizebuf_t *msg, int maxbytes, entity_state_t *s);