// so here I jump to 3500
#define PROTOCOL_DARKPLACES3 3500
#define PROTOCOL_DARKPLACES4 3501
+#define PROTOCOL_DARKPLACES5 3502
// model effects
#define EF_ROCKET 1 // leave a trail
#define EF_STEP 0x80000000 // internal client use only - present on MOVETYPE_STEP entities, not QC accessible (too many bits)
+// flags for the pflags field of entities
+#define PFLAGS_NOSHADOW 1
+#define PFLAGS_CORONA 2
+#define PFLAGS_FULLDYNAMIC 128 // must be set or the light fields are ignored
+
// 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_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 RENDER_LOWPRECISION 16 // send as low precision coordinates to save bandwidth
#define RENDER_COLORMAPPED 32
#define RENDER_SHADOW 64 // cast shadow
+#define RENDER_LIGHT 128 // receive light
typedef struct
{
unsigned short frame;
unsigned short effects;
unsigned short tagentity;
- unsigned short specialvisibilityradius;
+ unsigned short specialvisibilityradius; // larger if it has effects/light
unsigned short viewmodelforclient;
unsigned short exteriormodelforclient;
unsigned short nodrawtoclient;
unsigned short drawonlytoclient;
+ unsigned short light[4]; // color*256 (0.00 to almost 64.00), and radius*1
+ qbyte lightstyle;
+ qbyte lightpflags;
qbyte colormap;
- qbyte skin;
+ qbyte skin; // also chooses cubemap for rtlights if there is no model
qbyte alpha;
qbyte scale;
qbyte glowsize;
qbyte glowcolor;
qbyte flags;
qbyte tagindex;
+ // padding to a multiple of 8 bytes (to align the double time)
+ qbyte unused[6];
}
entity_state_t;
#define E_EFFECTS2 (1<<18)
#define E_GLOWSIZE (1<<19)
#define E_GLOWCOLOR (1<<20)
-#define E_UNUSED1 (1<<21)
-#define E_UNUSED2 (1<<22)
+#define E_LIGHT (1<<21)
+#define E_LIGHTPFLAGS (1<<22)
#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_UNUSED5 (1<<28)
+#define E_LIGHTSTYLE (1<<28)
#define E_UNUSED6 (1<<29)
#define E_UNUSED7 (1<<30)
#define E_EXTEND4 (1<<31)
entity_database4_t;
// should-be-private functions that aren't
-int EntityFrame4_SV_ChooseCommitToReplace(entity_database4_t *d);
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
-void EntityFrame4_AckFrame(entity_database4_t *d, int framenum);
+int EntityFrame4_AckFrame(entity_database4_t *d, int framenum);
-// begin writing a frame
-void EntityFrame4_SV_WriteFrame_Begin(entity_database4_t *d, sizebuf_t *msg, int framenum);
// 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);
-// end writing a frame
-void EntityFrame4_SV_WriteFrame_End(entity_database4_t *d, sizebuf_t *msg);
// reads a frame from the network stream
void EntityFrame4_CL_ReadFrame(entity_database4_t *d);
+extern cvar_t developer_networkentities;
+
#endif