X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=client.h;h=e30360b74b31473a1c6f1b6d5518fb21f38b6f67;hp=01cb7ea3516c54df68fdca22345a5d2a730fe647;hb=9b45c4242e6f64c354ab7d55366a2cecbfd86a10;hpb=c45d0c43654b74c4233461ddcc9fb979b7d075ce diff --git a/client.h b/client.h index 01cb7ea3..e30360b7 100644 --- a/client.h +++ b/client.h @@ -243,8 +243,8 @@ typedef struct entity_render_s // NULL = no model model_t *model; - // current uninterpolated animation frame (for things which do not use interpolation) - int frame; + // number of the entity represents, or 0 for non-network entities + int entitynumber; // entity shirt and pants colors (-1 if not colormapped) int colormap; // literal colors for renderer @@ -252,6 +252,8 @@ typedef struct entity_render_s vec3_t colormap_shirtcolor; // light, particles, etc int effects; + // qw CTF flags and other internal-use-only effect bits + int internaleffects; // for Alias models int skinnum; // render flags @@ -296,6 +298,7 @@ typedef struct entity_persistent_s // particle trail float trail_time; + qboolean trail_allowed; // set to false by teleports, true by update code, prevents bad lerps // muzzleflash fading float muzzleflash; @@ -355,6 +358,7 @@ typedef struct usercmd_s int impulse; int sequence; qboolean applied; // if false we're still accumulating a move + qboolean predicted; // if true the sequence should be sent as 0 } usercmd_t; typedef struct lightstyle_s @@ -433,6 +437,7 @@ typedef struct capturevideostate_s double starttime; double framerate; // for AVI saving some values have to be written after capture ends + fs_offset_t videofile_firstchunkframes_offset; fs_offset_t videofile_totalframes_offset1; fs_offset_t videofile_totalframes_offset2; fs_offset_t videofile_totalsampleframes_offset; @@ -444,7 +449,8 @@ typedef struct capturevideostate_s int soundrate; int frame; int soundsampleframe; // for AVI saving - unsigned char *buffer; + unsigned char *screenbuffer; + unsigned char *outbuffer; sizebuf_t riffbuffer; unsigned char riffbufferdata[128]; // note: riffindex buffer has an allocated ->data member, not static like most! @@ -454,6 +460,7 @@ typedef struct capturevideostate_s short rgbtoyuvscaletable[3][3][256]; unsigned char yuvnormalizetable[3][256]; char basename[64]; + int width, height; } capturevideostate_t; @@ -578,6 +585,7 @@ typedef struct client_movementqueue_s float move[3]; qboolean jump; qboolean crouch; + qboolean canjump; } client_movementqueue_t; @@ -640,6 +648,9 @@ typedef struct particle_s model_t *ownermodel; // model the decal is stuck to (used to make sure the entity is still alive) vec3_t relativeorigin; // decal at this location in entity's coordinate space vec3_t relativedirection; // decal oriented this way relative to entity's coordinate space + float delayedcollisions; // time that p->bounce becomes active + float delayedspawn; // time that particle appears and begins moving + float die; // time when this particle should be removed, regardless of alpha } particle_t; @@ -681,6 +692,7 @@ typedef struct client_state_s // information for local display // health, etc int stats[MAX_CL_STATS]; + float *statsf; // points to stats[] array // last known inventory bit flags, for blinking int olditems; // cl.time of acquiring item, for blinking @@ -805,6 +817,11 @@ typedef struct client_state_s int viewentity; // the real player entity (normally same as viewentity, // different than viewentity if mod uses chasecam or other tricks) + int realplayerentity; + // this is updated to match cl.viewentity whenever it is in the clients + // range, basically this is used in preference to cl.realplayerentity for + // most purposes because when spectating another player it should show + // their information rather than yours int playerentity; // max players that can be in this game int maxclients; @@ -910,6 +927,7 @@ typedef struct client_state_s int downloadsound_current; int loadsound_total; qboolean downloadcsqc; + qboolean loadcsqc; qboolean loadbegun; qboolean loadfinished; @@ -928,20 +946,29 @@ typedef struct client_state_s int qw_teamplay; // unused: indicates whether the player is spectating - // use cl.scores[cl.playerentity].qw_spectator instead + // use cl.scores[cl.playerentity-1].qw_spectator instead //qboolean qw_spectator; // movement parameters for client prediction - float qw_movevars_gravity; - float qw_movevars_stopspeed; - float qw_movevars_maxspeed; // can change during play - float qw_movevars_spectatormaxspeed; - float qw_movevars_accelerate; - float qw_movevars_airaccelerate; - float qw_movevars_wateraccelerate; - float qw_movevars_friction; - float qw_movevars_waterfriction; - float qw_movevars_entgravity; // can change during play + float movevars_wallfriction; + float movevars_waterfriction; + float movevars_friction; + float movevars_ticrate; + float movevars_timescale; + float movevars_gravity; + float movevars_stopspeed; + float movevars_maxspeed; + float movevars_spectatormaxspeed; + float movevars_accelerate; + float movevars_airaccelerate; + float movevars_wateraccelerate; + float movevars_entgravity; + float movevars_jumpvelocity; + float movevars_edgefriction; + float movevars_maxairspeed; + float movevars_stepheight; + float movevars_airaccel_qw; + float movevars_airaccel_sideways_friction; // models used by qw protocol int qw_modelindex_spike; @@ -963,6 +990,14 @@ typedef struct client_state_s int qw_deltasequence[QW_UPDATE_BACKUP]; // csqc stuff: + // server entity number corresponding to a clientside entity + unsigned short csqc_server2csqcentitynumber[MAX_EDICTS]; + qboolean csqc_loaded; + vec3_t csqc_origin; + vec3_t csqc_angles; + qboolean csqc_usecsqclistener; + matrix4x4_t csqc_listenermatrix; + char csqc_printtextbuf[MAX_INPUTLINE]; // collision culling data world_t world; @@ -972,6 +1007,11 @@ typedef struct client_state_s // this is updated to cl.movement_origin whenever health is < 1 // used by %d print in say/say_team messages if cl_locs_enable is on vec3_t lastdeathorigin; + + // processing buffer used by R_BuildLightMap, reallocated as needed, + // freed on each level change + size_t buildlightmapmemorysize; + unsigned char *buildlightmapmemory; } client_state_t; @@ -1239,8 +1279,8 @@ extern qboolean sb_showscores; #define NUMCROSSHAIRS 32 extern cachepic_t *r_crosshairs[NUMCROSSHAIRS+1]; -#define FOGTABLEWIDTH 1024 -#define VERTEXFOGTABLE(dist) (r_refdef.fogtable[min((unsigned int)((dist) * r_refdef.fogtabledistmultiplier), FOGTABLEWIDTH - 1)]) +float FogPoint_World(const vec3_t p); +float FogPoint_Model(const vec3_t p); typedef struct r_refdef_stats_s { @@ -1311,8 +1351,9 @@ typedef struct r_refdef_s vec3_t fogcolor; vec_t fogrange; vec_t fograngerecip; - vec_t fogtabledistmultiplier; - float fogtable[FOGTABLEWIDTH]; + vec_t fogmasktabledistmultiplier; +#define FOGMASKTABLEWIDTH 1024 + float fogmasktable[FOGMASKTABLEWIDTH]; float fog_density; float fog_red; float fog_green; @@ -1365,6 +1406,9 @@ typedef struct r_view_s mplane_t frustum[5]; float frustum_x, frustum_y; vec3_t frustumcorner[4]; + // if turned off it renders an ortho view + int useperspective; + float ortho_x, ortho_y; // screen area to render in int x;