#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
#define EF_UNUSED20 1048576
#define EF_UNUSED21 2197152
#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
#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 (PROTOCOL_DARKPLACES8)
//
// client to server
#define RENDER_NOSELFSHADOW 262144 // render lighting on this entity before its own shadow is added to the scene
// (note: all RENDER_NOSELFSHADOW entities are grouped together and rendered in a batch before their shadows are rendered, so they can not shadow eachother either)
-// this is 96 bytes
+// this is 80 bytes
typedef struct entity_state_s
{
// ! means this is not sent to client
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;
- unsigned short specialvisibilityradius; // ! larger if it has effects/light
- unsigned short viewmodelforclient; // !
- unsigned short exteriormodelforclient; // ! not shown if first person viewing from this entity, shown in all other cases
- unsigned short nodrawtoclient; // !
- unsigned short drawonlytoclient; // !
unsigned short light[4]; // color*256 (0.00 to 255.996), and radius*1
unsigned char active; // true if a valid state
unsigned char lightstyle;
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;
}
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;
}
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)
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
#define ENTITYFRAME5_MAXPACKETLOGS 64
#define ENTITYFRAME5_MAXSTATES 1024
+#define ENTITYFRAME5_PRIORITYLEVELS 32
typedef struct entityframe5_changestate_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;