]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - protocol.h
fix typo in some powers of two
[xonotic/darkplaces.git] / protocol.h
index 04faf61ea390d727f81e868d589bea24366369af..c101e05f17e8d9467fcaeb4f3de8df17d72a8516 100644 (file)
@@ -49,7 +49,7 @@ void Protocol_Names(char *buffer, size_t buffersize);
 #define EF_ADDITIVE                            32
 #define EF_BLUE                                        64
 #define EF_RED                                 128
-#define EF_UNUSED8                             256
+#define EF_NOGUNBOB                            256                     // LordHavoc: when used with .viewmodelforclient this makes the entity attach to the view without gun bobbing and such effects, it also works on the player entity to disable gun bobbing of the engine-managed .viewmodel (without affecting any .viewmodelforclient entities attached to the player)
 #define EF_FULLBRIGHT                  512                     // LordHavoc: fullbright
 #define EF_FLAME                               1024            // LordHavoc: on fire
 #define EF_STARDUST                            2048            // LordHavoc: showering sparks
@@ -57,14 +57,14 @@ void Protocol_Names(char *buffer, size_t buffersize);
 #define EF_NODEPTHTEST                 8192            // LordHavoc: shows through walls
 #define EF_SELECTABLE                  16384           // LordHavoc: highlights when PRYDON_CLIENTCURSOR mouse is over it
 #define EF_DOUBLESIDED                 32768           //[515]: disable cull face for this entity
-#define EF_UNUSED16                            65536
+#define EF_NOSELFSHADOW                        65536           // LordHavoc: does not cast a shadow on itself (or any other EF_NOSELFSHADOW entities)
 #define EF_UNUSED17                            131072
 #define EF_UNUSED18                            262144
 #define EF_UNUSED19                            524288
 #define EF_UNUSED20                            1048576
-#define EF_UNUSED21                            2197152
+#define EF_TELEPORT_BIT                        2097152         // div0: teleport bit (toggled when teleporting, prevents lerping when the bit has changed)
 #define EF_LOWPRECISION                        4194304         // LordHavoc: entity is low precision (integer coordinates) to save network bandwidth  (serverside only)
-#define EF_UNUSED23                            8388608
+#define EF_NOMODELFLAGS                        8388608         // indicates the model's .effects should be ignored (allows overriding them)
 #define EF_ROCKET                              16777216        // leave a trail
 #define EF_GRENADE                             33554432        // leave a trail
 #define EF_GIB                                 67108864        // leave a trail
@@ -251,7 +251,8 @@ void Protocol_Names(char *buffer, size_t buffersize);
 #define svc_csqcentities       58              // [short] entnum [variable length] entitydata ... [short] 0x0000
 #define        svc_spawnstaticsound2   59      // [coord3] [short] samp [byte] vol [byte] aten
 #define svc_trailparticles     60              // [short] entnum [short] effectnum [vector] start [vector] end
-#define svc_pointparticles     61              // [short] effectnum [vector] start [vector] end [short] count
+#define svc_pointparticles     61              // [short] effectnum [vector] start [vector] velocity [short] count
+#define svc_pointparticles1    62              // [short] effectnum [vector] start, same as svc_pointparticles except velocity is zero and count is 1
 
 //
 // client to server
@@ -344,9 +345,9 @@ typedef struct entity_state_s
        float netcenter[3]; // ! for network prioritization, this is the center of the bounding box (which may differ from the origin)
        float origin[3];
        float angles[3];
-       int number; // entity number this state is for
        int effects;
        unsigned int customizeentityforclient; // !
+       unsigned short number; // entity number this state is for
        unsigned short modelindex;
        unsigned short frame;
        unsigned short tagentity;
@@ -366,11 +367,11 @@ typedef struct entity_state_s
        unsigned char glowsize;
        unsigned char glowcolor;
        unsigned char flags;
+       unsigned char internaleffects; // INTEF_FLAG1QW and so on
        unsigned char tagindex;
        unsigned char colormod[3];
-       unsigned char internaleffects; // INTEF_FLAG1QW and so on
        // padding to a multiple of 8 bytes (to align the double time)
-       unsigned char unused;
+       unsigned char unused[5];
 }
 entity_state_t;
 
@@ -387,7 +388,7 @@ void Protocol_UpdateClientStats(const int *stats);
 void Protocol_WriteStatsReliable(void);
 // writes a list of quake entities to the network stream
 // (or as many will fit)
-void EntityFrameQuake_WriteFrame(sizebuf_t *msg, int numstates, const entity_state_t *states);
+void EntityFrameQuake_WriteFrame(sizebuf_t *msg, int maxsize, int numstates, const entity_state_t *states);
 // cleans up dead entities each frame after ReadEntity (which doesn't clear unused entities)
 void EntityFrameQuake_ISeeDeadEntities(void);
 
@@ -448,6 +449,22 @@ the Write function performs these steps:
 server updates entities in looping ranges, a frame consists of a range of visible entities (not always all visible entities),
 */
 
+#define MAX_ENTITY_HISTORY 64
+#define MAX_ENTITY_DATABASE (MAX_EDICTS * 2)
+
+// build entity data in this, to pass to entity read/write functions
+typedef struct entity_frame_s
+{
+       double time;
+       int framenum;
+       int numentities;
+       int firstentitynum;
+       int lastentitynum;
+       vec3_t eye;
+       entity_state_t entitydata[MAX_ENTITY_DATABASE];
+}
+entity_frame_t;
+
 typedef struct entity_frameinfo_s
 {
        double time;
@@ -457,9 +474,6 @@ typedef struct entity_frameinfo_s
 }
 entity_frameinfo_t;
 
-#define MAX_ENTITY_HISTORY 64
-#define MAX_ENTITY_DATABASE (MAX_EDICTS * 2)
-
 typedef struct entityframe_database_s
 {
        // note: these can be far out of range, modulo with MAX_ENTITY_DATABASE to get a valid range (which may wrap)
@@ -481,21 +495,12 @@ typedef struct entityframe_database_s
        entity_frameinfo_t frames[MAX_ENTITY_HISTORY];
        // entities
        entity_state_t entitydata[MAX_ENTITY_DATABASE];
-}
-entityframe_database_t;
 
-// build entity data in this, to pass to entity read/write functions
-typedef struct entity_frame_s
-{
-       double time;
-       int framenum;
-       int numentities;
-       int firstentitynum;
-       int lastentitynum;
-       vec3_t eye;
-       entity_state_t entitydata[MAX_ENTITY_DATABASE];
+       // structs for building new frames and reading them
+       entity_frame_t deltaframe;
+       entity_frame_t framedata;
 }
-entity_frame_t;
+entityframe_database_t;
 
 // LordHavoc: these are in approximately sorted order, according to cost and
 // likelyhood of being used for numerous objects in a frame
@@ -572,7 +577,7 @@ void EntityFrame_FetchFrame(entityframe_database_t *d, int framenum, entity_fram
 // reference
 void EntityFrame_AddFrame(entityframe_database_t *d, vec3_t eye, int framenum, int numentities, const entity_state_t *entitydata);
 // (server) writes a frame to network stream
-void EntityFrame_WriteFrame(sizebuf_t *msg, entityframe_database_t *d, int numstates, const entity_state_t *states, int viewentnum);
+void EntityFrame_WriteFrame(sizebuf_t *msg, int maxsize, entityframe_database_t *d, int numstates, const entity_state_t *states, int viewentnum);
 // (client) reads a frame from network stream
 void EntityFrame_CL_ReadFrame(void);
 // (client) returns the frame number of the most recent frame recieved
@@ -626,7 +631,7 @@ void EntityFrame4_ResetDatabase(entityframe4_database_t *d);
 // updates database to account for a frame-received acknowledgment
 int EntityFrame4_AckFrame(entityframe4_database_t *d, int framenum, int servermode);
 // writes a frame to the network stream
-void EntityFrame4_WriteFrame(sizebuf_t *msg, entityframe4_database_t *d, int numstates, const entity_state_t *states);
+void EntityFrame4_WriteFrame(sizebuf_t *msg, int maxsize, entityframe4_database_t *d, int numstates, const entity_state_t *states);
 // reads a frame from the network stream
 void EntityFrame4_CL_ReadFrame(void);
 
@@ -711,6 +716,7 @@ void EntityFrame4_CL_ReadFrame(void);
 
 #define ENTITYFRAME5_MAXPACKETLOGS 64
 #define ENTITYFRAME5_MAXSTATES 1024
+#define ENTITYFRAME5_PRIORITYLEVELS 32
 
 typedef struct entityframe5_changestate_s
 {
@@ -768,6 +774,10 @@ typedef struct entityframe5_database_s
        // rather than a memmove to remove them from the start.
        //int numchangestates;
        //entityframe5_changestate_t changestates[MAX_EDICTS];
+
+       // buffers for building priority info
+       int prioritychaincounts[ENTITYFRAME5_PRIORITYLEVELS];
+       unsigned short prioritychains[ENTITYFRAME5_PRIORITYLEVELS][ENTITYFRAME5_MAXSTATES];
 }
 entityframe5_database_t;
 
@@ -778,7 +788,7 @@ int EntityState5_DeltaBitsForState(entity_state_t *o, entity_state_t *n);
 void EntityFrame5_CL_ReadFrame(void);
 void EntityFrame5_LostFrame(entityframe5_database_t *d, int framenum);
 void EntityFrame5_AckFrame(entityframe5_database_t *d, int framenum);
-void EntityFrame5_WriteFrame(sizebuf_t *msg, entityframe5_database_t *d, int numstates, const entity_state_t *states, int viewentnum, int movesequence);
+void EntityFrame5_WriteFrame(sizebuf_t *msg, int maxsize, entityframe5_database_t *d, int numstates, const entity_state_t *states, int viewentnum, int movesequence, qboolean need_empty);
 
 extern cvar_t developer_networkentities;
 
@@ -957,5 +967,9 @@ void EntityFrameQW_FreeDatabase(entityframeqw_database_t *d);
 void EntityStateQW_ReadPlayerUpdate(void);
 void EntityFrameQW_CL_ReadFrame(qboolean delta);
 
+struct client_s;
+void EntityFrameCSQC_LostFrame(struct client_s *client, int framenum);
+qboolean EntityFrameCSQC_WriteFrame (sizebuf_t *msg, int maxsize, int numstates, const entity_state_t *states, int framenum);
+
 #endif