typedef struct cshift_s
{
- int destcolor[3];
- int percent; // 0-256
+ float destcolor[3];
+ float percent; // 0-256
} cshift_t;
#define CSHIFT_CONTENTS 0
vec3_t org;
vec3_t vel; // velocity of particle, or orientation of decal, or end point of beam
float size;
+ float sizeincrease; // rate of size change per second
float alpha; // 0-255
float alphafade; // how much alpha reduces per second
float time2; // used for snow fluttering and decal fade
float bounce; // how much bounce-back from a surface the particle hits (0 = no physics, 1 = stop and slide, 2 = keep bouncing forever, 1.5 is typical)
float gravity; // how much gravity affects this particle (1.0 = normal gravity, 0.0 = none)
- float friction; // how much air friction affects this object (objects with a low mass/size ratio tend to get more air friction)
+ float airfriction; // how much air friction affects this object (objects with a low mass/size ratio tend to get more air friction)
+ float liquidfriction; // how much liquid friction affects this object (objects with a low mass/size ratio tend to get more liquid friction)
unsigned char color[4];
unsigned short owner; // decal stuck to this entity
model_t *ownermodel; // model the decal is stuck to (used to make sure the entity is still alive)
vec3_t mvelocity[2], velocity;
// update by server, can be used by mods for zooming
vec_t mviewzoom[2], viewzoom;
+ // if true interpolation the mviewangles and other interpolation of the
+ // player is disabled until the next network packet
+ // this is used primarily by teleporters, and when spectating players
+ // special checking of the old fixangle[1] is used to differentiate
+ // between teleporting and spectating
+ qboolean fixangle[2];
// client movement simulation
// these fields are only updated by CL_ClientMovement (called by CL_SendMove after parsing each network packet)
qboolean movement_needupdate;
// indicates the queue has been updated and should be replayed
qboolean movement_replay;
+ // timestamps of latest two predicted moves for interpolation
+ double movement_time[2];
// simulated data (this is valid even if cl.movement is false)
vec3_t movement_origin;
vec3_t movement_oldorigin;
// don't change view angle, full screen, etc
int intermission;
// latched at intermission start
- int completed_time;
+ double completed_time;
// the timestamp of the last two messages
double mtime[2];
// clients view of time, time should be between mtime[0] and mtime[1] to
// generate a lerp point for other data, oldtime is the previous frame's
// value of time, frametime is the difference between time and oldtime
- double time, oldtime, frametime;
+ double time, oldtime;
+ // how long it has been since the previous client frame in real time
+ // (not game time, for that use cl.time - cl.oldtime)
+ double realframetime;
// copy of realtime from last recieved message, for net trouble icon
float last_received_message;
void CL_ClearState (void);
void CL_ExpandEntities(int num);
+void CL_SetInfo(const char *key, const char *value, qboolean send, qboolean allowstarkey, qboolean allowmodel, qboolean quiet);
int CL_ReadFromServer (void);
const char *CL_ParticleEffectNameForIndex(int i);
void CL_ParticleEffect(int effectindex, float pcount, const vec3_t originmins, const vec3_t originmaxs, const vec3_t velocitymins, const vec3_t velocitymaxs, entity_t *ent, int palettecolor);
void CL_ParseParticleEffect (void);
-void CL_ParticleCube (const vec3_t mins, const vec3_t maxs, const vec3_t dir, int count, int colorbase, int gravity, int randomvel);
+void CL_ParticleCube (const vec3_t mins, const vec3_t maxs, const vec3_t dir, int count, int colorbase, vec_t gravity, vec_t randomvel);
void CL_ParticleRain (const vec3_t mins, const vec3_t maxs, const vec3_t dir, int count, int colorbase, int type);
void CL_EntityParticles (const entity_t *ent);
void CL_ParticleExplosion (const vec3_t org);