2004-08-23 00:15:46 +00:00
/*
Copyright ( C ) 1996 - 1997 Id Software , Inc .
This program is free software ; you can redistribute it and / or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation ; either version 2
of the License , or ( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
2005-11-26 03:02:55 +00:00
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
2004-08-23 00:15:46 +00:00
See the GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
*/
// client.h
2005-03-10 03:55:18 +00:00
# include "particles.h"
2004-08-23 00:15:46 +00:00
typedef struct
{
2006-02-22 23:43:59 +00:00
char name [ 64 ] ;
2004-08-23 00:15:46 +00:00
int width ;
int height ;
2009-07-17 22:28:16 +00:00
//for hardware 32bit texture overrides
2009-11-04 21:16:50 +00:00
texid_t tex_base ;
texid_t tex_lower ;
texid_t tex_upper ;
2009-07-17 22:28:16 +00:00
2004-08-23 00:15:46 +00:00
qboolean failedload ; // the name isn't a valid skin
cache_user_t cache ;
} skin_t ;
// player_state_t is the information needed by a player entity
// to do move prediction and to generate a drawable entity
typedef struct
{
int messagenum ; // all player's won't be updated each frame
double state_time ; // not the same as the packet time,
// because player commands come asyncronously
usercmd_t command ; // last command for prediction
vec3_t origin ;
2011-12-05 15:23:40 +00:00
vec3_t predorigin ; // pre-predicted pos
2004-08-23 00:15:46 +00:00
vec3_t viewangles ; // only for demos, not from server
vec3_t velocity ;
int weaponframe ;
int modelindex ;
int frame ;
int skinnum ;
int effects ;
# ifdef PEXT_SCALE
float scale ;
# endif
2006-02-27 00:42:25 +00:00
qbyte colourmod [ 3 ] ;
qbyte alpha ;
2004-08-23 00:15:46 +00:00
# ifdef PEXT_FATNESS
float fatness ;
# endif
int flags ; // dead, gib, etc
int pm_type ;
float waterjumptime ;
qboolean onground ;
qboolean jump_held ;
int jump_msec ; // hack for fixing bunny-hop flickering on non-ZQuake servers
2012-02-12 05:18:31 +00:00
vec3_t szmins , szmaxs ;
2012-07-05 19:42:36 +00:00
vec3_t gravitydir ;
2004-08-23 00:15:46 +00:00
float lerpstarttime ;
int oldframe ;
} player_state_t ;
# if defined(Q2CLIENT) || defined(Q2SERVER)
2005-11-26 03:02:55 +00:00
typedef enum
2004-08-23 00:15:46 +00:00
{
// can accelerate and turn
Q2PM_NORMAL ,
Q2PM_SPECTATOR ,
// no acceleration or turning
Q2PM_DEAD ,
Q2PM_GIB , // different bounding box
Q2PM_FREEZE
} q2pmtype_t ;
typedef struct
{ //shared with q2 dll
q2pmtype_t pm_type ;
short origin [ 3 ] ; // 12.3
short velocity [ 3 ] ; // 12.3
qbyte pm_flags ; // ducked, jump_held, etc
qbyte pm_time ; // each unit = 8 ms
short gravity ;
short delta_angles [ 3 ] ; // add to command angles to get view direction
// changed by spawns, rotating objects, and teleporters
} q2pmove_state_t ;
typedef struct
{ //shared with q2 dll
q2pmove_state_t pmove ; // for prediction
// these fields do not need to be communicated bit-precise
vec3_t viewangles ; // for fixed views
vec3_t viewoffset ; // add to pmovestate->origin
vec3_t kick_angles ; // add to view direction to get render angles
// set by weapon kicks, pain effects, etc
vec3_t gunangles ;
vec3_t gunoffset ;
int gunindex ;
int gunframe ;
float blend [ 4 ] ; // rgba full screen effect
2005-11-26 03:02:55 +00:00
2004-08-23 00:15:46 +00:00
float fov ; // horizontal field of view
int rdflags ; // refdef flags
short stats [ Q2MAX_STATS ] ; // fast status bar updates
} q2player_state_t ;
# endif
2008-06-05 07:45:34 +00:00
typedef struct colourised_s {
char name [ 64 ] ;
unsigned int topcolour ;
unsigned int bottomcolour ;
char skin [ 64 ] ;
struct colourised_s * next ;
} colourised_t ;
2005-02-06 02:47:36 +00:00
# define MAX_SCOREBOARDNAME 64
# define MAX_DISPLAYEDNAME 16
2004-08-23 00:15:46 +00:00
typedef struct player_info_s
{
int userid ;
2006-01-21 00:06:49 +00:00
char userinfo [ EXTENDED_INFO_STRING ] ;
2008-11-09 22:29:28 +00:00
char teamstatus [ 128 ] ;
2011-06-16 02:03:57 +00:00
float teamstatustime ;
2004-08-23 00:15:46 +00:00
// scoreboard information
char name [ MAX_SCOREBOARDNAME ] ;
char team [ MAX_INFO_KEY ] ;
float entertime ;
int frags ;
int ping ;
qbyte pl ;
2005-11-30 01:20:53 +00:00
qboolean ignored ;
2010-12-05 02:46:07 +00:00
qboolean vignored ;
2005-11-30 01:20:53 +00:00
2008-06-05 07:45:34 +00:00
colourised_t * colourised ;
2004-08-23 00:15:46 +00:00
// skin information
2008-06-01 22:06:22 +00:00
unsigned int rtopcolor ; //real, according to their userinfo
unsigned int rbottomcolor ;
2004-08-23 00:15:46 +00:00
2008-06-01 22:06:22 +00:00
unsigned int ttopcolor ; //team, according to colour forcing
unsigned int tbottomcolor ;
2004-08-23 00:15:46 +00:00
int spectator ;
skin_t * skin ;
struct model_s * model ;
unsigned short vweapindex ;
2010-08-28 17:14:38 +00:00
unsigned char h2playerclass ;
2004-08-23 00:15:46 +00:00
int prevcount ;
2004-12-08 04:14:52 +00:00
int stats [ MAX_CL_STATS ] ;
2008-05-25 22:23:43 +00:00
int statsf [ MAX_CL_STATS ] ;
2004-08-23 00:15:46 +00:00
} player_info_t ;
typedef struct
{
// generated on client side
usercmd_t cmd [ MAX_SPLITS ] ; // cmd that generated the frame
double senttime ; // time cmd was sent off
int delta_sequence ; // sequence number to delta from, -1 = full update
2004-12-24 08:45:56 +00:00
int cmd_sequence ;
2004-08-23 00:15:46 +00:00
// received from server
double receivedtime ; // time message was received, or -1
2011-06-16 02:03:57 +00:00
player_state_t playerstate [ MAX_CLIENTS + MAX_SPLITS ] ; // message received that reflects performing
2004-08-23 00:15:46 +00:00
// the usercmd
packet_entities_t packet_entities ;
qboolean invalid ; // true if the packet_entities delta was invalid
2005-08-11 04:14:33 +00:00
int server_time ;
int client_time ;
int server_message_num ;
2004-08-23 00:15:46 +00:00
} frame_t ;
# ifdef Q2CLIENT
typedef struct
{
qboolean valid ; // cleared if delta parsing was invalid
int serverframe ;
int servertime ; // server time the message is valid for (in msec)
int deltaframe ;
qbyte areabits [ MAX_Q2MAP_AREAS / 8 ] ; // portalarea visibility bits
q2player_state_t playerstate ;
int num_entities ;
int parse_entities ; // non-masked index into cl_parse_entities array
} q2frame_t ;
# endif
typedef struct
{
int destcolor [ 3 ] ;
2012-01-17 07:57:46 +00:00
float percent ; // 0-256
2004-08-23 00:15:46 +00:00
} cshift_t ;
# define CSHIFT_CONTENTS 0
# define CSHIFT_DAMAGE 1
# define CSHIFT_BONUS 2
# define CSHIFT_POWERUP 3
# define CSHIFT_SERVER 4
# define NUM_CSHIFTS 5
//
// client_state_t should hold all pieces of the client state
//
2009-11-04 21:16:50 +00:00
//the light array works thusly:
//dlights are allocated DL_LAST downwards to 0, static wlights are allocated DL_LAST+1 to MAX_RTLIGHTS.
//thus to clear the dlights but not rtlights, set the first light to RTL_FIRST
# define DL_LAST (sizeof(unsigned int)*8-1)
# define RTL_FIRST (sizeof(unsigned int)*8)
2005-04-16 16:21:27 +00:00
2011-07-30 14:14:56 +00:00
# define LFLAG_NORMALMODE (1<<0) /*ppl with r_shadow_realtime_dlight*/
# define LFLAG_REALTIMEMODE (1<<1) /*ppl with r_shadow_realtime_world*/
# define LFLAG_LIGHTMAP (1<<2)
# define LFLAG_FLASHBLEND (1<<3)
2009-07-05 18:45:53 +00:00
2011-07-30 14:14:56 +00:00
# define LFLAG_NOSHADOWS (1<<8)
# define LFLAG_SHADOWMAP (1<<9)
2011-12-05 15:23:40 +00:00
# define LFLAG_CREPUSCULAR (1<<10)
2009-07-05 18:45:53 +00:00
2011-07-30 14:14:56 +00:00
# define LFLAG_DYNAMIC (LFLAG_LIGHTMAP | LFLAG_FLASHBLEND | LFLAG_NORMALMODE | LFLAG_REALTIMEMODE)
2005-04-16 16:21:27 +00:00
2004-08-23 00:15:46 +00:00
typedef struct dlight_s
{
int key ; // so entities can reuse same entry
vec3_t origin ;
2009-06-21 17:45:33 +00:00
vec3_t axis [ 3 ] ;
2004-08-23 00:15:46 +00:00
float radius ;
float die ; // stop lighting after this time
float decay ; // drop this each second
float minlight ; // don't add when contributing less
float color [ 3 ] ;
float channelfade [ 3 ] ;
2012-01-01 11:22:24 +00:00
vec3_t lightcolourscales ; //ambient, diffuse, specular
2011-10-27 15:46:36 +00:00
float corona ;
float coronascale ;
2004-11-27 08:16:25 +00:00
2009-07-05 18:45:53 +00:00
unsigned int flags ;
2011-12-26 15:19:13 +00:00
char cubemapname [ 64 ] ;
2009-07-05 18:45:53 +00:00
2009-06-21 17:45:33 +00:00
//the following are used for rendering (client code should clear on create)
Fixes, workarounds, and breakages. Hexen2 should work much better (-hexen2 says no mission pack, -portals says h2mp). Started working on splitting bigcoords per client, far too much work still to go on that. Removed gl_ztrick entirely. Enabled csprogs download by default. Added client support for fitzquake's 666 protocol, needs testing, some cleanup for dp protocols too, no server support, couldn't selectively enable it anyway. Now attempting to cache shadow meshes for explosions and stuff. Played with lightmaps a little, should potentially run a little faster on certain (intel?) cards. Tweeked npfte a little to try to avoid deadlocks and crashes. Fixed sky worldspawn parsing. Added h2mp's model format. Fixed baseline issue in q2 client, made servers generate q2 baselines. MOVETYPE_PUSH will not rotate extra if rotation is forced. Made status command show allowed client types. Changed lighting on weapons - should now be shaded.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3572 fc73d0e0-1445-4013-8a0c-d673dee63da5
2010-08-11 03:36:31 +00:00
qboolean rebuildcache ;
2004-11-27 08:16:25 +00:00
struct shadowmesh_s * worldshadowmesh ;
2011-12-26 15:19:13 +00:00
texid_t cubetexture ;
2009-06-21 17:45:33 +00:00
struct {
float updatetime ;
} face [ 6 ] ;
2004-12-11 03:39:01 +00:00
int style ; //multiply by style values if > 0
2009-11-04 21:16:50 +00:00
float fov ; //spotlight
2004-11-29 01:21:00 +00:00
float dist ;
struct dlight_s * next ;
2004-08-23 00:15:46 +00:00
} dlight_t ;
typedef struct
{
int length ;
char map [ MAX_STYLESTRING ] ;
int colour ;
} lightstyle_t ;
# define MAX_EFRAGS 512
# define MAX_DEMOS 8
# define MAX_DEMONAME 16
typedef enum {
ca_disconnected , // full screen console with no connection
ca_demostart , // starting up a demo
ca_connected , // netchan_t established, waiting for svc_serverdata
ca_onserver , // processing data lists, donwloading, etc
ca_active // everything is in, so frames can be rendered
} cactive_t ;
typedef enum {
dl_none ,
dl_model ,
dl_sound ,
dl_skin ,
dl_wad ,
dl_single ,
dl_singlestuffed
} dltype_t ; // download type
//
// the client_static_t structure is persistant through an arbitrary number
// of server connections
//
typedef struct
{
// connection information
cactive_t state ;
2005-05-26 12:55:34 +00:00
Fixes, workarounds, and breakages. Hexen2 should work much better (-hexen2 says no mission pack, -portals says h2mp). Started working on splitting bigcoords per client, far too much work still to go on that. Removed gl_ztrick entirely. Enabled csprogs download by default. Added client support for fitzquake's 666 protocol, needs testing, some cleanup for dp protocols too, no server support, couldn't selectively enable it anyway. Now attempting to cache shadow meshes for explosions and stuff. Played with lightmaps a little, should potentially run a little faster on certain (intel?) cards. Tweeked npfte a little to try to avoid deadlocks and crashes. Fixed sky worldspawn parsing. Added h2mp's model format. Fixed baseline issue in q2 client, made servers generate q2 baselines. MOVETYPE_PUSH will not rotate extra if rotation is forced. Made status command show allowed client types. Changed lighting on weapons - should now be shaded.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3572 fc73d0e0-1445-4013-8a0c-d673dee63da5
2010-08-11 03:36:31 +00:00
/*Specifies which protocol family we're speaking*/
2005-05-26 12:55:34 +00:00
enum {
CP_UNKNOWN ,
CP_QUAKEWORLD ,
CP_NETQUAKE ,
2005-06-04 04:20:20 +00:00
CP_QUAKE2 ,
2005-08-03 23:14:59 +00:00
CP_QUAKE3 ,
CP_PLUGIN
2005-05-26 12:55:34 +00:00
} protocol ;
2004-08-23 00:15:46 +00:00
Fixes, workarounds, and breakages. Hexen2 should work much better (-hexen2 says no mission pack, -portals says h2mp). Started working on splitting bigcoords per client, far too much work still to go on that. Removed gl_ztrick entirely. Enabled csprogs download by default. Added client support for fitzquake's 666 protocol, needs testing, some cleanup for dp protocols too, no server support, couldn't selectively enable it anyway. Now attempting to cache shadow meshes for explosions and stuff. Played with lightmaps a little, should potentially run a little faster on certain (intel?) cards. Tweeked npfte a little to try to avoid deadlocks and crashes. Fixed sky worldspawn parsing. Added h2mp's model format. Fixed baseline issue in q2 client, made servers generate q2 baselines. MOVETYPE_PUSH will not rotate extra if rotation is forced. Made status command show allowed client types. Changed lighting on weapons - should now be shaded.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3572 fc73d0e0-1445-4013-8a0c-d673dee63da5
2010-08-11 03:36:31 +00:00
/*QuakeWorld protocol flags*/
# ifdef PROTOCOLEXTENSIONS
unsigned long fteprotocolextensions ;
unsigned long fteprotocolextensions2 ;
# endif
unsigned long z_ext ;
/*NQ Protocol flags*/
enum
{
CPNQ_ID ,
2011-06-16 02:03:57 +00:00
CPNQ_PROQUAKE3_4 ,
2012-02-12 05:18:31 +00:00
CPNQ_FITZ666 , /*and rmqe999 protocol*/
Fixes, workarounds, and breakages. Hexen2 should work much better (-hexen2 says no mission pack, -portals says h2mp). Started working on splitting bigcoords per client, far too much work still to go on that. Removed gl_ztrick entirely. Enabled csprogs download by default. Added client support for fitzquake's 666 protocol, needs testing, some cleanup for dp protocols too, no server support, couldn't selectively enable it anyway. Now attempting to cache shadow meshes for explosions and stuff. Played with lightmaps a little, should potentially run a little faster on certain (intel?) cards. Tweeked npfte a little to try to avoid deadlocks and crashes. Fixed sky worldspawn parsing. Added h2mp's model format. Fixed baseline issue in q2 client, made servers generate q2 baselines. MOVETYPE_PUSH will not rotate extra if rotation is forced. Made status command show allowed client types. Changed lighting on weapons - should now be shaded.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3572 fc73d0e0-1445-4013-8a0c-d673dee63da5
2010-08-11 03:36:31 +00:00
CPNQ_DP5 ,
CPNQ_DP6 ,
CPNQ_DP7
} protocol_nq ;
# define CPNQ_IS_DP (cls.protocol_nq >= CPNQ_DP5)
2004-08-23 00:15:46 +00:00
qboolean resendinfo ;
2005-11-30 01:20:53 +00:00
qboolean findtrack ;
2004-08-23 00:15:46 +00:00
2004-12-29 03:24:21 +00:00
int framecount ;
2006-09-17 00:59:22 +00:00
int realip_ident ;
2008-06-01 22:06:22 +00:00
netadr_t realserverip ;
2006-09-17 00:59:22 +00:00
2004-08-23 00:15:46 +00:00
// network stuff
netchan_t netchan ;
2004-12-15 19:37:30 +00:00
float lastarbiatarypackettime ; //used to mark when packets were sent to prevent mvdsv servers from causing us to disconnect.
2004-08-23 00:15:46 +00:00
// private userinfo for sending to masterless servers
2010-08-14 03:17:33 +00:00
char userinfo [ MAX_SPLITS ] [ EXTENDED_INFO_STRING ] ;
2004-08-23 00:15:46 +00:00
char servername [ MAX_OSPATH ] ; // name of server from original connect
int qport ;
2008-11-09 22:29:28 +00:00
struct ftenet_connections_s * sockets ;
2005-11-30 01:20:53 +00:00
2007-06-20 00:02:54 +00:00
enum { DL_NONE , DL_QW , DL_QWCHUNKS , DL_Q3 , DL_DARKPLACES , DL_QWPENDING , DL_HTTP , DL_FTP } downloadmethod ;
2006-01-02 23:01:54 +00:00
vfsfile_t * downloadqw ; // file transfer from server
2012-11-27 03:23:19 +00:00
char downloadtempname [ MAX_OSPATH ] ; //file its currently writing to.
char downloadlocalname [ MAX_OSPATH ] ; //file its going to be renamed to.
char downloadremotename [ MAX_OSPATH ] ; //file its coming from.
float downloadpercent ; //for progress indicator.
int downloadchunknum ; //for QW downloads only.
float downloadstarttime ; //for speed info
unsigned int downloadedbytes ; //number of bytes downloaded, for progress/speed info
2005-08-26 22:56:51 +00:00
2004-08-23 00:15:46 +00:00
// demo loop control
int demonum ; // -1 = don't play demos
char demos [ MAX_DEMOS ] [ MAX_DEMONAME ] ; // when not playing
// demo recording info must be here, because record is started before
// entering a map (and clearing client_state_t)
qboolean demorecording ;
2010-03-14 14:35:56 +00:00
vfsfile_t * demooutfile ;
2008-01-09 00:52:31 +00:00
enum { DPB_NONE , DPB_QUAKEWORLD , DPB_MVD , DPB_EZTV ,
2004-08-23 00:15:46 +00:00
# ifdef NQPROT
DPB_NETQUAKE ,
# endif
# ifdef Q2CLIENT
DPB_QUAKE2
# endif
} demoplayback ;
qboolean timedemo ;
2010-03-14 14:35:56 +00:00
vfsfile_t * demoinfile ;
2004-08-23 00:15:46 +00:00
float td_lastframe ; // to meter out one message a frame
int td_startframe ; // host_framecount at start
float td_starttime ; // realtime at second frame of timedemo
int challenge ;
float latency ; // rolling average
qboolean allow_anyparticles ;
qboolean allow_lightmapgamma ;
qboolean allow_rearview ;
qboolean allow_skyboxes ;
qboolean allow_mirrors ;
qboolean allow_watervis ;
qboolean allow_luma ;
2005-01-05 07:58:50 +00:00
float allow_fbskins ; //fraction of allowance
2011-10-27 15:46:36 +00:00
qboolean allow_postproc ;
2004-08-23 00:15:46 +00:00
qboolean allow_cheats ;
qboolean allow_semicheats ; //defaults to true, but this allows a server to enforce a strict ruleset (smackdown type rules).
float maxfps ; //server capped
enum { GAME_DEATHMATCH , GAME_COOP } gamemode ;
# ifdef NQPROT
int signon ;
# endif
translation_t language ;
2008-06-05 07:45:34 +00:00
colourised_t * colourised ;
2004-08-23 00:15:46 +00:00
} client_static_t ;
extern client_static_t cls ;
typedef struct downloadlist_s {
2009-05-24 10:11:17 +00:00
char rname [ 128 ] ;
2005-08-11 04:14:33 +00:00
char localname [ 128 ] ;
2008-11-09 22:29:28 +00:00
unsigned int size ;
unsigned int flags ;
2011-10-27 15:46:36 +00:00
# define DLLF_VERBOSE 1 //tell the user that its downloading
# define DLLF_REQUIRED 2 //means that it won't load models etc until its downloaded (ie: requiredownloads 0 makes no difference)
# define DLLF_OVERWRITE 4 //overwrite it even if it already exists
# define DLLF_SIZEUNKNOWN 8 //download's size isn't known
# define DLLF_IGNOREFAILED 16 //
# define DLLF_NONGAME 32 //means the requested download filename+localname is gamedir explicit (so id1/foo.txt is distinct from qw/foo.txt)
2012-11-29 13:37:48 +00:00
# define DLLF_TEMPORARY 64 //download it, but don't actually save it (DLLF_OVERWRITE doesn't actually overwrite, but does ignore any local files)
2004-08-23 00:15:46 +00:00
struct downloadlist_s * next ;
} downloadlist_t ;
typedef struct {
2009-07-18 20:46:42 +00:00
//current persistant state
2005-05-30 04:34:47 +00:00
trailstate_t * trailstate ; //when to next throw out a trail
2005-08-06 22:39:28 +00:00
trailstate_t * emitstate ; //when to next emit
2009-07-18 20:46:42 +00:00
//current origin
vec3_t origin ; //current render position
vec3_t angles ;
2011-04-30 17:21:10 +00:00
//previous rendering frame (for trails)
vec3_t lastorigin ;
qboolean isnew ;
2012-02-12 05:18:31 +00:00
qboolean isplayer ;
2011-04-30 17:21:10 +00:00
2009-07-18 20:46:42 +00:00
//intermediate values for frame lerping
float framelerpdeltatime ;
float newframestarttime ;
int newframe ;
float oldframestarttime ;
int oldframe ;
//intermediate values for origin lerping of stepping things
float orglerpdeltatime ;
float orglerpstarttime ;
2011-04-30 17:21:10 +00:00
vec3_t neworigin ; /*origin that we're lerping towards*/
vec3_t oldorigin ; /*origin that we're lerping away from*/
2009-07-18 20:46:42 +00:00
vec3_t newangle ;
vec3_t oldangle ;
2012-02-17 01:12:37 +00:00
//for further info
int sequence ;
entity_state_t * entstate ;
2004-08-23 00:15:46 +00:00
} lerpents_t ;
//
// the client_state_t structure is wiped completely at every
// server signon
//
typedef struct
{
2004-09-26 00:30:42 +00:00
int fpd ;
2004-08-23 00:15:46 +00:00
int servercount ; // server identification for prespawns
2005-03-20 02:57:11 +00:00
float gamespeed ;
qboolean csqcdebug ;
2005-05-26 12:55:34 +00:00
qboolean allowsendpacket ;
2005-03-20 02:57:11 +00:00
2004-08-23 00:15:46 +00:00
char serverinfo [ MAX_SERVERINFO_STRING ] ;
2011-10-27 15:46:36 +00:00
char serverpaknames [ 1024 ] ;
char serverpakcrcs [ 1024 ] ;
qboolean serverpakschanged ;
2004-08-23 00:15:46 +00:00
int parsecount ; // server message counter
2004-08-27 00:46:32 +00:00
int oldparsecount ;
2004-08-23 00:15:46 +00:00
int oldvalidsequence ;
2007-06-20 00:02:54 +00:00
int ackedinputsequence ; //in quakeworld/q2 this is always equal to validsequence. dp can differ.
2004-08-23 00:15:46 +00:00
int validsequence ; // this is the sequence number of the last good
// packetentity_t we got. If this is 0, we can't
// render a frame yet
int movemessages ; // since connecting to this server
// throw out the first couple, so the player
2005-11-26 03:02:55 +00:00
// doesn't accidentally do something the
2004-08-23 00:15:46 +00:00
// first frame
int spectator ;
double last_ping_request ; // while showing scoreboard
double last_servermessage ;
# ifdef Q2CLIENT
q2frame_t q2frame ;
q2frame_t q2frames [ Q2UPDATE_BACKUP ] ;
# endif
// sentcmds[cl.netchan.outgoing_sequence & UPDATE_MASK] = cmd
frame_t frames [ UPDATE_BACKUP ] ;
2005-08-26 22:56:51 +00:00
lerpents_t * lerpents ;
int maxlerpents ; //number of slots allocated.
2012-02-17 01:35:22 +00:00
int lerpentssequence ;
2005-08-26 22:56:51 +00:00
lerpents_t lerpplayers [ MAX_CLIENTS ] ;
2004-08-23 00:15:46 +00:00
2010-03-25 22:56:11 +00:00
cshift_t cshifts [ NUM_CSHIFTS ] ; // color shifts for damage, powerups and content types
2004-08-23 00:15:46 +00:00
2012-07-05 19:42:36 +00:00
//when running splitscreen, we have multiple viewports all active at once
int splitclients ; //we are running this many clients split screen.
struct playerview_s
{
// information for local display
int stats [ MAX_CL_STATS ] ; // health, etc
float statsf [ MAX_CL_STATS ] ; // health, etc
char * statsstr [ MAX_CL_STATS ] ; // health, etc
float item_gettime [ 32 ] ; // cl.time of aquiring item, for blinking
float faceanimtime ; // use anim frame if cl.time < this
// the client maintains its own idea of view angles, which are
// sent to the server each frame. And only reset at level change
// and teleport times
vec3_t viewangles ;
vec3_t viewanglechange ;
vec3_t gravitydir ;
// pitch drifting vars
float pitchvel ;
qboolean nodrift ;
float driftmove ;
double laststop ;
vec3_t simorg ;
vec3_t simvel ;
vec3_t simangles ;
float rollangle ;
qboolean fixangle ; //received a fixangle - so disable prediction till the next packet.
qboolean oldfixangle ; //received a fixangle - so disable prediction till the next packet.
vec3_t fixangles ; //received a fixangle - so disable prediction till the next packet.
vec3_t oldfixangles ; //received a fixangle - so disable prediction till the next packet.
} playerview [ MAX_SPLITS ] ;
float crouch [ MAX_SPLITS ] ; // local amount for smoothing stepups
qboolean onground [ MAX_SPLITS ] ;
float viewheight [ MAX_SPLITS ] ;
entity_t viewent [ MAX_SPLITS ] ; // weapon model
float punchangle [ MAX_SPLITS ] ; // temporary view kick from weapon firing
int playernum [ MAX_SPLITS ] ;
qboolean nolocalplayer [ MAX_SPLITS ] ;
# ifdef PEXT_SETVIEW
int viewentity [ MAX_SPLITS ] ;
# endif
int waterlevel [ MAX_SPLITS ] ; //for smartjump
// localized movement vars
float entgravity [ MAX_SPLITS ] ;
float maxspeed [ MAX_SPLITS ] ;
float bunnyspeedcap ;
int pmovetype [ MAX_SPLITS ] ;
2004-08-23 00:15:46 +00:00
// the client simulates or interpolates movement to get these values
double time ; // this is the time value that the client
2005-07-28 15:33:27 +00:00
// is rendering at. always <= realtime
2005-10-01 03:09:17 +00:00
float servertime ; //current server time, bound between gametime and gametimemark
float mtime ; //server time as on the server when we last received a packet. not allowed to decrease.
float oldmtime ; //server time as on the server for the previously received packet.
2004-08-23 00:15:46 +00:00
float gametime ;
float gametimemark ;
2005-06-04 04:20:20 +00:00
float oldgametime ; //used as the old time to lerp cl.time from.
float oldgametimemark ; //if it's 0, cl.time will casually increase.
2004-08-23 00:15:46 +00:00
float minpitch ;
float maxpitch ;
qboolean paused ; // send over by server
int intermission ; // don't change view angle, full screen, etc
2006-04-11 20:09:39 +00:00
float completed_time ; // latched ffrom time at intermission start
# define Q2MAX_VISIBLE_WEAPONS 32 //q2 has about 20.
int numq2visibleweapons ; //q2 sends out visible-on-model weapons in a wierd gender-nutral way.
char * q2visibleweapons [ Q2MAX_VISIBLE_WEAPONS ] ; //model names beginning with a # are considered 'sexed', and are loaded on a per-client basis. yay. :(
2005-11-26 03:02:55 +00:00
2004-08-23 00:15:46 +00:00
//
// information that is static for the entire time connected to a server
//
2009-07-06 01:20:20 +00:00
char model_name_vwep [ MAX_VWEP_MODELS ] [ MAX_QPATH ] ;
2004-08-23 00:15:46 +00:00
char model_name [ MAX_MODELS ] [ MAX_QPATH ] ;
char sound_name [ MAX_SOUNDS ] [ MAX_QPATH ] ;
char image_name [ Q2MAX_IMAGES ] [ MAX_QPATH ] ;
2009-07-06 01:20:20 +00:00
struct model_s * model_precache_vwep [ MAX_VWEP_MODELS ] ;
2004-08-23 00:15:46 +00:00
struct model_s * model_precache [ MAX_MODELS ] ;
struct sfx_s * sound_precache [ MAX_SOUNDS ] ;
2005-02-12 18:56:04 +00:00
char model_csqcname [ MAX_CSQCMODELS ] [ MAX_QPATH ] ;
struct model_s * model_csqcprecache [ MAX_CSQCMODELS ] ;
2009-03-03 01:52:30 +00:00
qboolean model_precaches_added ;
2012-07-05 19:42:36 +00:00
struct
{
int num ;
char * name ;
} * particle_precache ;
unsigned int maxparticleprecaches ;
2005-10-16 03:51:40 +00:00
//used for q2 sky/configstrings
2004-08-23 00:15:46 +00:00
char skyname [ MAX_QPATH ] ;
2005-10-16 03:51:40 +00:00
float skyrotate ;
vec3_t skyaxis ;
2012-12-04 19:37:57 +00:00
qboolean fog_locked ;
2011-03-31 02:32:32 +00:00
float fog_density ;
vec3_t fog_colour ;
2004-08-23 00:15:46 +00:00
char levelname [ 40 ] ; // for display on solo scoreboard
// refresh related state
struct model_s * worldmodel ; // cl_entitites[0].model
int num_entities ; // stored bottom up in cl_entities array
int num_statics ; // stored top down in cl_entitiers
int cdtrack ; // cd audio
// all player information
2011-04-25 03:25:22 +00:00
unsigned int allocated_client_slots ;
2004-08-23 00:15:46 +00:00
player_info_t players [ MAX_CLIENTS ] ;
downloadlist_t * downloadlist ;
downloadlist_t * faileddownloads ;
qboolean gamedirchanged ;
char q2statusbar [ 1024 ] ;
char q2layout [ 1024 ] ;
int parse_entities ;
float lerpfrac ;
vec3_t predicted_origin ;
vec3_t predicted_angles ;
vec3_t prediction_error ;
float predicted_step_time ;
float predicted_step ;
2011-12-05 15:23:40 +00:00
packet_entities_t * currentpackentities ;
float currentpacktime ;
2004-08-23 00:15:46 +00:00
int teamplay ;
int deathmatch ;
2004-12-29 03:24:21 +00:00
2012-10-10 22:58:51 +00:00
qboolean teamfortress ; // *sigh*. This is used for teamplay stuff. This sucks.
2008-06-01 22:06:22 +00:00
qboolean hexen2pickups ;
2006-01-04 00:44:34 +00:00
qboolean sendprespawn ;
int contentstage ;
2006-03-06 01:41:09 +00:00
2010-11-21 03:39:12 +00:00
double matchgametime ;
2006-03-06 01:41:09 +00:00
enum {
2010-11-21 03:39:12 +00:00
MATCH_DONTKNOW ,
MATCH_COUNTDOWN ,
MATCH_STANDBY ,
MATCH_INPROGRESS
} matchstate ;
2004-08-23 00:15:46 +00:00
} client_state_t ;
2008-06-01 22:06:22 +00:00
extern unsigned int cl_teamtopcolor ;
extern unsigned int cl_teambottomcolor ;
extern unsigned int cl_enemytopcolor ;
extern unsigned int cl_enemybottomcolor ;
2004-09-26 00:30:42 +00:00
//FPD values
//(commented out ones are ones that we don't support)
2004-12-29 03:24:21 +00:00
# define FPD_NO_FORCE_SKIN 256
2004-09-26 00:30:42 +00:00
# define FPD_NO_FORCE_COLOR 512
2004-12-29 03:24:21 +00:00
# define FPD_LIMIT_PITCH (1 << 14) //limit scripted pitch changes
# define FPD_LIMIT_YAW (1 << 15) //limit scripted yaw changes
2004-08-23 00:15:46 +00:00
//
// cvars
//
extern cvar_t cl_warncmd ;
extern cvar_t cl_upspeed ;
extern cvar_t cl_forwardspeed ;
extern cvar_t cl_backspeed ;
extern cvar_t cl_sidespeed ;
extern cvar_t cl_movespeedkey ;
extern cvar_t cl_yawspeed ;
extern cvar_t cl_pitchspeed ;
extern cvar_t cl_anglespeedkey ;
extern cvar_t cl_shownet ;
extern cvar_t cl_sbar ;
extern cvar_t cl_hudswap ;
extern cvar_t cl_pitchdriftspeed ;
extern cvar_t lookspring ;
extern cvar_t lookstrafe ;
extern cvar_t sensitivity ;
extern cvar_t m_pitch ;
extern cvar_t m_yaw ;
extern cvar_t m_forward ;
extern cvar_t m_side ;
extern cvar_t _windowed_mouse ;
extern cvar_t name ;
2007-08-23 21:25:18 +00:00
extern cvar_t ruleset_allow_playercount ;
extern cvar_t ruleset_allow_frj ;
extern cvar_t ruleset_allow_semicheats ;
extern cvar_t ruleset_allow_packet ;
extern cvar_t ruleset_allow_particle_lightning ;
extern cvar_t ruleset_allow_overlongsounds ;
extern cvar_t ruleset_allow_larger_models ;
2008-02-01 15:21:14 +00:00
extern cvar_t ruleset_allow_modified_eyes ;
extern cvar_t ruleset_allow_sensative_texture_replacements ;
2008-06-08 14:37:57 +00:00
extern cvar_t ruleset_allow_localvolume ;
2009-11-04 21:16:50 +00:00
extern cvar_t ruleset_allow_shaders ;
2007-08-23 21:25:18 +00:00
2004-08-23 00:15:46 +00:00
extern client_state_t cl ;
2010-07-11 02:22:39 +00:00
typedef struct
{
entity_t ent ;
trailstate_t * emit ;
Fixes, workarounds, and breakages. Hexen2 should work much better (-hexen2 says no mission pack, -portals says h2mp). Started working on splitting bigcoords per client, far too much work still to go on that. Removed gl_ztrick entirely. Enabled csprogs download by default. Added client support for fitzquake's 666 protocol, needs testing, some cleanup for dp protocols too, no server support, couldn't selectively enable it anyway. Now attempting to cache shadow meshes for explosions and stuff. Played with lightmaps a little, should potentially run a little faster on certain (intel?) cards. Tweeked npfte a little to try to avoid deadlocks and crashes. Fixed sky worldspawn parsing. Added h2mp's model format. Fixed baseline issue in q2 client, made servers generate q2 baselines. MOVETYPE_PUSH will not rotate extra if rotation is forced. Made status command show allowed client types. Changed lighting on weapons - should now be shaded.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3572 fc73d0e0-1445-4013-8a0c-d673dee63da5
2010-08-11 03:36:31 +00:00
int mdlidx ; /*negative are csqc indexes*/
2010-07-11 02:22:39 +00:00
pvscache_t pvscache ;
} static_entity_t ;
2004-08-23 00:15:46 +00:00
// FIXME, allocate dynamically
2006-07-24 04:24:41 +00:00
extern entity_state_t * cl_baselines ;
Fixes, workarounds, and breakages. Hexen2 should work much better (-hexen2 says no mission pack, -portals says h2mp). Started working on splitting bigcoords per client, far too much work still to go on that. Removed gl_ztrick entirely. Enabled csprogs download by default. Added client support for fitzquake's 666 protocol, needs testing, some cleanup for dp protocols too, no server support, couldn't selectively enable it anyway. Now attempting to cache shadow meshes for explosions and stuff. Played with lightmaps a little, should potentially run a little faster on certain (intel?) cards. Tweeked npfte a little to try to avoid deadlocks and crashes. Fixed sky worldspawn parsing. Added h2mp's model format. Fixed baseline issue in q2 client, made servers generate q2 baselines. MOVETYPE_PUSH will not rotate extra if rotation is forced. Made status command show allowed client types. Changed lighting on weapons - should now be shaded.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3572 fc73d0e0-1445-4013-8a0c-d673dee63da5
2010-08-11 03:36:31 +00:00
extern static_entity_t * cl_static_entities ;
extern unsigned int cl_max_static_entities ;
2004-08-23 00:15:46 +00:00
extern lightstyle_t cl_lightstyle [ MAX_LIGHTSTYLES ] ;
2009-11-04 21:16:50 +00:00
extern dlight_t * cl_dlights ;
extern unsigned int cl_maxdlights ;
2004-08-23 00:15:46 +00:00
2009-11-04 21:16:50 +00:00
extern int rtlights_first , rtlights_max ;
2006-07-24 04:24:41 +00:00
extern int cl_baselines_count ;
2006-05-11 03:14:41 +00:00
2004-08-23 00:15:46 +00:00
extern qboolean nomaster ;
extern float server_version ; // version of server we connected to
//=============================================================================
//
// cl_main
//
2009-11-04 21:16:50 +00:00
void CL_InitDlights ( void ) ;
2010-07-13 09:49:38 +00:00
void CL_FreeDlights ( void ) ;
2004-08-23 00:15:46 +00:00
dlight_t * CL_AllocDlight ( int key ) ;
2009-11-04 21:16:50 +00:00
dlight_t * CL_AllocSlight ( void ) ; //allocates a static light
2011-12-27 08:35:19 +00:00
dlight_t * CL_NewDlight ( int key , const vec3_t origin , float radius , float time , float r , float g , float b ) ;
2009-11-04 21:16:50 +00:00
dlight_t * CL_NewDlightRGB ( int key , const vec3_t origin , float radius , float time , float r , float g , float b ) ;
dlight_t * CL_NewDlightCube ( int key , const vec3_t origin , vec3_t angles , float radius , float time , vec3_t colours ) ;
2004-08-23 00:15:46 +00:00
void CL_DecayLights ( void ) ;
2009-11-04 21:16:50 +00:00
2012-02-12 05:18:31 +00:00
void CLQW_ParseDelta ( struct entity_state_s * from , struct entity_state_s * to , int bits , qboolean ) ;
2004-08-23 00:15:46 +00:00
void CL_Init ( void ) ;
void Host_WriteConfiguration ( void ) ;
void CL_CheckServerInfo ( void ) ;
2011-12-05 15:23:40 +00:00
void CL_CheckServerPacks ( void ) ;
2004-08-23 00:15:46 +00:00
void CL_EstablishConnection ( char * host ) ;
void CL_Disconnect ( void ) ;
void CL_Disconnect_f ( void ) ;
2006-02-11 14:51:36 +00:00
void CL_Reconnect_f ( void ) ;
2004-08-23 00:15:46 +00:00
void CL_NextDemo ( void ) ;
2007-08-06 21:13:15 +00:00
void CL_Startdemos_f ( void ) ;
void CL_Demos_f ( void ) ;
void CL_Stopdemo_f ( void ) ;
void CL_Changing_f ( void ) ;
void CL_Reconnect_f ( void ) ;
void CL_ConnectionlessPacket ( void ) ;
2004-08-23 00:15:46 +00:00
qboolean CL_DemoBehind ( void ) ;
2006-02-11 14:51:36 +00:00
void CL_SaveInfo ( vfsfile_t * f ) ;
2010-08-14 03:17:33 +00:00
void CL_SetInfo ( int pnum , char * key , char * value ) ;
2004-08-23 00:15:46 +00:00
2011-06-16 02:03:57 +00:00
void CL_BeginServerConnect ( int port ) ;
2009-11-04 21:16:50 +00:00
char * CL_TryingToConnect ( void ) ;
2004-08-23 00:15:46 +00:00
2012-11-27 03:23:19 +00:00
void CL_ExecInitialConfigs ( void ) ;
qboolean CL_CheckBootDownloads ( void ) ;
2011-09-03 03:49:43 +00:00
# define MAX_VISEDICTS 2048
2011-04-30 17:21:10 +00:00
extern int cl_numvisedicts ;
2011-09-03 03:49:43 +00:00
extern entity_t cl_visedicts [ ] ;
2004-08-23 00:15:46 +00:00
2009-11-04 21:16:50 +00:00
/*these are for q3 really*/
typedef struct {
struct shader_s * shader ;
int firstvert ;
int firstidx ;
int numvert ;
int numidx ;
} scenetris_t ;
extern scenetris_t * cl_stris ;
extern vecV_t * cl_strisvertv ;
extern vec4_t * cl_strisvertc ;
extern vec2_t * cl_strisvertt ;
extern index_t * cl_strisidx ;
extern unsigned int cl_numstrisidx ;
extern unsigned int cl_maxstrisidx ;
extern unsigned int cl_numstrisvert ;
extern unsigned int cl_maxstrisvert ;
extern unsigned int cl_numstris ;
extern unsigned int cl_maxstris ;
2004-08-23 00:15:46 +00:00
extern char emodel_name [ ] , pmodel_name [ ] , prespawn_name [ ] , modellist_name [ ] , soundlist_name [ ] ;
2006-02-11 14:51:36 +00:00
qboolean TraceLineN ( vec3_t start , vec3_t end , vec3_t impact , vec3_t normal ) ;
2008-11-09 22:29:28 +00:00
qboolean Q2TraceLineN ( vec3_t start , vec3_t end , vec3_t impact , vec3_t normal ) ;
2006-02-11 14:51:36 +00:00
2004-08-23 00:15:46 +00:00
//
// cl_input
//
typedef struct
{
int down [ MAX_SPLITS ] [ 2 ] ; // key nums holding it down
int state [ MAX_SPLITS ] ; // low bit is down state
} kbutton_t ;
extern kbutton_t in_mlook , in_klook ;
extern kbutton_t in_strafe ;
extern kbutton_t in_speed ;
2005-02-28 07:16:19 +00:00
extern float in_sensitivityscale ;
2005-10-07 02:06:33 +00:00
void CL_MakeActive ( char * gamename ) ;
2012-09-30 05:52:03 +00:00
void CL_UpdateWindowTitle ( void ) ;
2005-10-07 02:06:33 +00:00
2004-08-23 00:15:46 +00:00
void CL_InitInput ( void ) ;
2009-05-24 10:11:17 +00:00
void CL_SendCmd ( double frametime , qboolean mainloop ) ;
2004-08-23 00:15:46 +00:00
void CL_SendMove ( usercmd_t * cmd ) ;
# ifdef NQPROT
void CL_ParseTEnt ( qboolean nqprot ) ;
# else
void CL_ParseTEnt ( void ) ;
# endif
void CL_UpdateTEnts ( void ) ;
2005-08-03 23:14:59 +00:00
void CL_AddBeam ( int tent , int ent , vec3_t start , vec3_t end ) ;
2004-08-23 00:15:46 +00:00
void CL_ClearState ( void ) ;
Fixes, workarounds, and breakages. Hexen2 should work much better (-hexen2 says no mission pack, -portals says h2mp). Started working on splitting bigcoords per client, far too much work still to go on that. Removed gl_ztrick entirely. Enabled csprogs download by default. Added client support for fitzquake's 666 protocol, needs testing, some cleanup for dp protocols too, no server support, couldn't selectively enable it anyway. Now attempting to cache shadow meshes for explosions and stuff. Played with lightmaps a little, should potentially run a little faster on certain (intel?) cards. Tweeked npfte a little to try to avoid deadlocks and crashes. Fixed sky worldspawn parsing. Added h2mp's model format. Fixed baseline issue in q2 client, made servers generate q2 baselines. MOVETYPE_PUSH will not rotate extra if rotation is forced. Made status command show allowed client types. Changed lighting on weapons - should now be shaded.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3572 fc73d0e0-1445-4013-8a0c-d673dee63da5
2010-08-11 03:36:31 +00:00
void CLQ2_ClearState ( void ) ;
2004-08-23 00:15:46 +00:00
void CL_ReadPackets ( void ) ;
void CL_ClampPitch ( int pnum ) ;
int CL_ReadFromServer ( void ) ;
void CL_WriteToServer ( usercmd_t * cmd ) ;
2005-05-26 12:55:34 +00:00
void CL_BaseMove ( usercmd_t * cmd , int pnum , float extra , float wantfps ) ;
2004-08-23 00:15:46 +00:00
float CL_KeyState ( kbutton_t * key , int pnum ) ;
char * Key_KeynumToString ( int keynum ) ;
2004-11-23 01:10:10 +00:00
int Key_StringToKeynum ( char * str , int * modifier ) ;
2005-07-08 00:37:52 +00:00
char * Key_GetBinding ( int keynum ) ;
2004-08-23 00:15:46 +00:00
2006-02-11 14:51:36 +00:00
void CL_UseIndepPhysics ( qboolean allow ) ;
void CL_FlushClientCommands ( void ) ;
2009-11-04 21:16:50 +00:00
void VARGS CL_SendClientCommand ( qboolean reliable , char * format , . . . ) LIKEPRINTF ( 2 ) ;
2010-12-05 02:46:07 +00:00
float CL_FilterTime ( double time , float wantfps , qboolean ignoreserver ) ;
2006-02-11 14:51:36 +00:00
int CL_RemoveClientCommands ( char * command ) ;
2005-02-28 07:16:19 +00:00
void CL_AllowIndependantSendCmd ( qboolean allow ) ;
2006-02-11 14:51:36 +00:00
void CL_DrawPrydonCursor ( void ) ;
2004-08-23 00:15:46 +00:00
//
// cl_demo.c
//
void CL_StopPlayback ( void ) ;
qboolean CL_GetMessage ( void ) ;
void CL_WriteDemoCmd ( usercmd_t * pcmd ) ;
2009-11-04 21:16:50 +00:00
void CL_Demo_ClientCommand ( char * commandtext ) ; //for QTV.
2004-08-23 00:15:46 +00:00
void CL_Stop_f ( void ) ;
void CL_Record_f ( void ) ;
void CL_ReRecord_f ( void ) ;
void CL_PlayDemo_f ( void ) ;
2006-03-14 01:25:46 +00:00
void CL_QTVPlay_f ( void ) ;
2007-08-06 21:13:15 +00:00
void CL_QTVPoll ( void ) ;
2006-09-17 00:59:22 +00:00
void CL_QTVList_f ( void ) ;
2007-05-25 22:16:29 +00:00
void CL_QTVDemos_f ( void ) ;
2005-12-21 03:07:33 +00:00
void CL_DemoJump_f ( void ) ;
2006-02-11 14:51:36 +00:00
void CL_ProgressDemoTime ( void ) ;
2004-08-23 00:15:46 +00:00
void CL_TimeDemo_f ( void ) ;
2009-04-01 22:03:56 +00:00
typedef struct
{
enum
{
QTVCT_NONE ,
QTVCT_STREAM ,
QTVCT_CONNECT ,
QTVCT_JOIN ,
QTVCT_OBSERVE ,
2009-04-07 01:26:47 +00:00
QTVCT_MAP
2009-04-01 22:03:56 +00:00
} connectiontype ;
enum
{
QTVCT_NETQUAKE ,
QTVCT_QUAKEWORLD ,
QTVCT_QUAKE2 ,
QTVCT_QUAKE3
} protocol ;
char server [ 256 ] ;
char splashscreen [ 256 ] ;
//char *datafiles;
} qtvfile_t ;
void CL_ParseQTVFile ( vfsfile_t * f , const char * fname , qtvfile_t * result ) ;
2004-08-23 00:15:46 +00:00
//
// cl_parse.c
//
# define NET_TIMINGS 256
# define NET_TIMINGSMASK 255
extern int packet_latency [ NET_TIMINGS ] ;
int CL_CalcNet ( void ) ;
2009-11-04 21:16:50 +00:00
void CL_ClearParseState ( void ) ;
2012-07-05 19:42:36 +00:00
void CL_Parse_Disconnected ( void ) ;
2006-02-28 00:46:04 +00:00
void CL_DumpPacket ( void ) ;
2008-12-03 02:42:05 +00:00
void CL_ParseEstablished ( void ) ;
2011-09-03 03:49:43 +00:00
void CLQW_ParseServerMessage ( void ) ;
2004-08-23 00:15:46 +00:00
void CLNQ_ParseServerMessage ( void ) ;
# ifdef Q2CLIENT
void CLQ2_ParseServerMessage ( void ) ;
# endif
void CL_NewTranslation ( int slot ) ;
2009-11-04 21:16:50 +00:00
2008-11-09 22:29:28 +00:00
qboolean CL_CheckOrEnqueDownloadFile ( char * filename , char * localname , unsigned int flags ) ;
qboolean CL_EnqueDownload ( char * filename , char * localname , unsigned int flags ) ;
2012-11-29 13:37:48 +00:00
downloadlist_t * CL_DownloadFailed ( char * name , qboolean cancel ) ;
2009-11-04 21:16:50 +00:00
int CL_DownloadRate ( void ) ;
void CL_GetDownloadSizes ( unsigned int * filecount , unsigned int * totalsize , qboolean * somesizesunknown ) ;
qboolean CL_ParseOOBDownload ( void ) ;
void CL_DownloadFinished ( void ) ;
void CL_RequestNextDownload ( void ) ;
void CL_SendDownloadReq ( sizebuf_t * msg ) ;
2011-04-20 21:32:43 +00:00
void Sound_CheckDownload ( char * s ) ; /*checkorenqueue a sound file*/
2009-11-04 21:16:50 +00:00
2004-08-23 00:15:46 +00:00
qboolean CL_IsUploading ( void ) ;
void CL_NextUpload ( void ) ;
void CL_StartUpload ( qbyte * data , int size ) ;
void CL_StopUpload ( void ) ;
2007-08-06 21:13:15 +00:00
qboolean CL_CheckBaselines ( int size ) ;
2004-08-23 00:15:46 +00:00
//
// view.c
//
void V_StartPitchDrift ( int pnum ) ;
void V_StopPitchDrift ( int pnum ) ;
void V_RenderView ( void ) ;
void V_Register ( void ) ;
void V_ParseDamage ( int pnum ) ;
void V_SetContentsColor ( int contents ) ;
2006-02-11 14:51:36 +00:00
//used directly by csqc
void V_CalcRefdef ( int pnum ) ;
2012-02-27 12:23:15 +00:00
void V_CalcGunPositionAngle ( int pnum , float bob ) ;
float V_CalcBob ( int pnum , qboolean queryold ) ;
2006-02-11 14:51:36 +00:00
void DropPunchAngle ( int pnum ) ;
2004-08-23 00:15:46 +00:00
//
// cl_tent
//
2008-11-09 22:29:28 +00:00
void CL_RegisterParticles ( void ) ;
2004-08-23 00:15:46 +00:00
void CL_InitTEnts ( void ) ;
2012-05-14 01:41:08 +00:00
void CL_InitTEntSounds ( void ) ;
2004-08-23 00:15:46 +00:00
void CL_ClearTEnts ( void ) ;
2011-06-18 12:25:36 +00:00
void CL_ClearTEntParticleState ( void ) ;
2004-08-23 00:15:46 +00:00
void CL_ClearCustomTEnts ( void ) ;
void CL_ParseCustomTEnt ( void ) ;
2004-11-23 01:10:10 +00:00
void CL_ParseEffect ( qboolean effect2 ) ;
2004-08-23 00:15:46 +00:00
2005-03-10 03:55:18 +00:00
void CLNQ_ParseParticleEffect ( void ) ;
void CL_ParseParticleEffect2 ( void ) ;
void CL_ParseParticleEffect3 ( void ) ;
void CL_ParseParticleEffect4 ( void ) ;
2012-07-05 19:42:36 +00:00
int CL_TranslateParticleFromServer ( int sveffect ) ;
void CL_ParseTrailParticles ( void ) ;
void CL_ParsePointParticles ( qboolean compact ) ;
2012-01-17 07:57:46 +00:00
void CL_SpawnSpriteEffect ( vec3_t org , vec3_t dir , struct model_s * model , int startframe , int framecount , float framerate , float alpha , float randspin , float gravity ) ; /*called from the particlesystem*/
2008-11-09 22:29:28 +00:00
2004-08-23 00:15:46 +00:00
//
// cl_ents.c
//
2012-02-12 05:18:31 +00:00
void CL_SetSolidPlayers ( void ) ;
2004-08-23 00:15:46 +00:00
void CL_SetUpPlayerPrediction ( qboolean dopred ) ;
2010-07-11 02:22:39 +00:00
void CL_LinkStaticEntities ( void * pvs ) ;
2011-12-05 15:23:40 +00:00
void CL_TransitionEntities ( void ) ; /*call at the start of the frame*/
2004-08-23 00:15:46 +00:00
void CL_EmitEntities ( void ) ;
void CL_ClearProjectiles ( void ) ;
2004-12-08 04:14:52 +00:00
void CL_ParseProjectiles ( int modelindex , qboolean nails2 ) ;
2004-08-23 00:15:46 +00:00
void CL_ParsePacketEntities ( qboolean delta ) ;
2012-02-12 05:18:31 +00:00
void CLFTE_ParseEntities ( void ) ;
2012-07-05 19:42:36 +00:00
void CLFTE_ParseBaseline ( entity_state_t * es , qboolean numberisimportant ) ;
2004-08-23 00:15:46 +00:00
void CL_SetSolidEntities ( void ) ;
void CL_ParsePlayerinfo ( void ) ;
void CL_ParseClientPersist ( void ) ;
2005-02-12 18:56:04 +00:00
//these last ones are needed for csqc handling of engine-bound ents.
void CL_SwapEntityLists ( void ) ;
void CL_LinkViewModel ( void ) ;
void CL_LinkPlayers ( void ) ;
void CL_LinkPacketEntities ( void ) ;
void CL_LinkProjectiles ( void ) ;
2011-06-18 12:25:36 +00:00
void CL_ClearLerpEntsParticleState ( void ) ;
2008-12-03 02:42:05 +00:00
qboolean CL_MayLerp ( void ) ;
2005-02-12 18:56:04 +00:00
//
//clq3_parse.c
//
# ifdef Q3CLIENT
2009-11-04 21:16:50 +00:00
void VARGS CLQ3_SendClientCommand ( const char * fmt , . . . ) LIKEPRINTF ( 1 ) ;
2006-02-11 14:51:36 +00:00
void CLQ3_SendAuthPacket ( netadr_t gameserver ) ;
2005-02-12 18:56:04 +00:00
void CLQ3_SendConnectPacket ( netadr_t to ) ;
void CLQ3_SendCmd ( usercmd_t * cmd ) ;
qboolean CLQ3_Netchan_Process ( void ) ;
void CLQ3_ParseServerMessage ( void ) ;
2005-11-26 03:02:55 +00:00
struct snapshot_s ;
2005-02-12 18:56:04 +00:00
qboolean CG_FillQ3Snapshot ( int snapnum , struct snapshot_s * snapshot ) ;
void CG_InsertIntoGameState ( int num , char * str ) ;
void CG_Restart_f ( void ) ;
2005-08-26 22:56:51 +00:00
char * CG_GetConfigString ( int num ) ;
2005-02-12 18:56:04 +00:00
# endif
//
//pr_csqc.c
//
# ifdef CSQC_DAT
2011-09-03 03:49:43 +00:00
qboolean CSQC_Inited ( void ) ;
2012-07-05 19:42:36 +00:00
void CSQC_RendererRestarted ( void ) ;
2012-10-13 00:56:31 +00:00
qboolean CSQC_Init ( qboolean anycsqc , qboolean csdatenabled , unsigned int checksum ) ;
qboolean CSQC_ConsoleLink ( char * text , char * info ) ;
2006-02-11 14:51:36 +00:00
void CSQC_RegisterCvarsAndThings ( void ) ;
2005-02-12 18:56:04 +00:00
qboolean CSQC_DrawView ( void ) ;
void CSQC_Shutdown ( void ) ;
2010-07-11 02:22:39 +00:00
qboolean CSQC_StuffCmd ( int lplayernum , char * cmd , char * cmdend ) ;
2008-11-09 22:29:28 +00:00
qboolean CSQC_LoadResource ( char * resname , char * restype ) ;
2009-11-04 21:16:50 +00:00
qboolean CSQC_ParsePrint ( char * message , int printlevel ) ;
qboolean CSQC_ParseGamePacket ( void ) ;
2008-11-28 20:34:51 +00:00
qboolean CSQC_CenterPrint ( int lplayernum , char * cmd ) ;
void CSQC_Input_Frame ( int lplayernum , usercmd_t * cmd ) ;
2008-11-09 22:29:28 +00:00
void CSQC_WorldLoaded ( void ) ;
qboolean CSQC_ParseTempEntity ( unsigned char firstbyte ) ;
2005-06-14 04:52:10 +00:00
qboolean CSQC_ConsoleCommand ( char * cmd ) ;
2012-02-12 05:18:31 +00:00
qboolean CSQC_KeyPress ( int key , int unicode , qboolean down , int devid ) ;
qboolean CSQC_MouseMove ( float xdelta , float ydelta , int devid ) ;
qboolean CSQC_MousePosition ( float xabs , float yabs , int devid ) ;
qboolean CSQC_Accelerometer ( float x , float y , float z ) ;
2005-08-03 23:14:59 +00:00
int CSQC_StartSound ( int entnum , int channel , char * soundname , vec3_t pos , float vol , float attenuation ) ;
void CSQC_ParseEntities ( void ) ;
2006-02-11 14:51:36 +00:00
qboolean CSQC_SettingListener ( void ) ;
2009-04-06 00:34:32 +00:00
qboolean CSQC_DeltaPlayer ( int playernum , player_state_t * state ) ;
void CSQC_DeltaStart ( float time ) ;
qboolean CSQC_DeltaUpdate ( entity_state_t * src ) ;
void CSQC_DeltaEnd ( void ) ;
2011-05-20 04:10:46 +00:00
void CSQC_CvarChanged ( cvar_t * var ) ;
2005-02-12 18:56:04 +00:00
# endif
2004-08-23 00:15:46 +00:00
//
// cl_pred.c
//
void CL_InitPrediction ( void ) ;
void CL_PredictMove ( void ) ;
2012-04-24 07:59:11 +00:00
void CL_PredictUsercmd ( int pnum , int entnum , player_state_t * from , player_state_t * to , usercmd_t * u ) ;
2004-08-23 00:15:46 +00:00
# ifdef Q2CLIENT
void CLQ2_CheckPredictionError ( void ) ;
# endif
2006-02-11 14:51:36 +00:00
void CL_CalcClientTime ( void ) ;
2004-08-23 00:15:46 +00:00
//
// cl_cam.c
//
# define CAM_NONE 0
# define CAM_TRACK 1
extern int autocam [ MAX_SPLITS ] ;
extern int spec_track [ MAX_SPLITS ] ; // player# of who we are tracking
qboolean Cam_DrawViewModel ( int pnum ) ;
qboolean Cam_DrawPlayer ( int pnum , int playernum ) ;
2005-01-05 07:58:50 +00:00
int Cam_TrackNum ( int pnum ) ;
2007-08-04 14:35:22 +00:00
void Cam_Unlock ( int pnum ) ;
void Cam_Lock ( int pnum , int playernum ) ;
void Cam_SelfTrack ( int pnum ) ;
void Cam_Track ( int pnum , usercmd_t * cmd ) ;
void Cam_TrackCrosshairedPlayer ( int pnum ) ;
2009-11-04 21:16:50 +00:00
void Cam_SetAutoTrack ( int userid ) ;
2004-08-23 00:15:46 +00:00
void Cam_FinishMove ( int pnum , usercmd_t * cmd ) ;
void Cam_Reset ( void ) ;
2007-08-04 14:35:22 +00:00
void Cam_TrackPlayer ( int pnum , char * cmdname , char * plrarg ) ;
2006-02-11 14:51:36 +00:00
void Cam_Lock ( int pnum , int playernum ) ;
2004-08-23 00:15:46 +00:00
void CL_InitCam ( void ) ;
2011-10-27 15:46:36 +00:00
void QDECL vectoangles ( vec3_t fwd , vec3_t ang ) ;
2006-02-11 14:51:36 +00:00
2004-10-13 06:32:14 +00:00
//
//zqtp.c
//
2005-09-08 08:10:06 +00:00
# define TPM_UNKNOWN 0
# define TPM_NORMAL 1
# define TPM_TEAM 2
# define TPM_SPECTATOR 4
# define TPM_FAKED 16
2008-11-09 22:29:28 +00:00
# define TPM_OBSERVEDTEAM 32
2005-09-08 08:10:06 +00:00
2007-10-05 19:10:43 +00:00
void CL_Say ( qboolean team , char * extra ) ;
int TP_CategorizeMessage ( char * s , int * offset , player_info_t * * plr ) ;
void TP_CheckPickupSound ( char * s , vec3_t org ) ;
qboolean TP_CheckSoundTrigger ( char * str ) ;
int TP_CountPlayers ( void ) ;
char * TP_EnemyName ( void ) ;
char * TP_EnemyTeam ( void ) ;
void TP_ExecTrigger ( char * s ) ;
qboolean TP_FilterMessage ( char * s ) ;
void TP_Init ( void ) ;
char * TP_LocationName ( vec3_t location ) ;
char * TP_MapName ( void ) ;
void TP_NewMap ( void ) ;
void TP_ParsePlayerInfo ( player_state_t * oldstate , player_state_t * state , player_info_t * info ) ;
2009-11-04 21:16:50 +00:00
qboolean TP_IsPlayerVisible ( vec3_t origin ) ;
2007-10-05 19:10:43 +00:00
char * TP_PlayerName ( void ) ;
char * TP_PlayerTeam ( void ) ;
void TP_SearchForMsgTriggers ( char * s , int level ) ;
qboolean TP_SoundTrigger ( char * message ) ;
void TP_StatChanged ( int stat , int value ) ;
qboolean TP_SuppressMessage ( char * buf ) ;
2008-11-09 22:29:28 +00:00
colourised_t * TP_FindColours ( char * name ) ;
2009-11-04 21:16:50 +00:00
void TP_UpdateAutoStatus ( void ) ;
2006-02-11 14:51:36 +00:00
2004-08-23 00:15:46 +00:00
//
// skin.c
//
typedef struct
{
char manufacturer ;
char version ;
char encoding ;
char bits_per_pixel ;
unsigned short xmin , ymin , xmax , ymax ;
unsigned short hres , vres ;
unsigned char palette [ 48 ] ;
char reserved ;
char color_planes ;
unsigned short bytes_per_line ;
unsigned short palette_type ;
char filler [ 58 ] ;
// unsigned char data; // unbounded
} pcx_t ;
2006-02-11 14:51:36 +00:00
qbyte * ReadPCXData ( qbyte * buf , int length , int width , int height , qbyte * result ) ;
2004-08-23 00:15:46 +00:00
2004-12-29 03:24:21 +00:00
char * Skin_FindName ( player_info_t * sc ) ;
2004-08-23 00:15:46 +00:00
void Skin_Find ( player_info_t * sc ) ;
qbyte * Skin_Cache8 ( skin_t * skin ) ;
qbyte * Skin_Cache32 ( skin_t * skin ) ;
void Skin_Skins_f ( void ) ;
void Skin_FlushSkin ( char * name ) ;
void Skin_AllSkins_f ( void ) ;
void Skin_NextDownload ( void ) ;
2005-01-24 23:47:32 +00:00
void Skin_FlushPlayers ( void ) ;
2004-08-23 00:15:46 +00:00
# define RSSHOT_WIDTH 320
# define RSSHOT_HEIGHT 200
//valid.c
2007-09-18 01:08:49 +00:00
void RulesetLatch ( cvar_t * cvar ) ;
void Validation_Apply_Ruleset ( void ) ;
2004-08-23 00:15:46 +00:00
void Validation_FlushFileList ( void ) ;
void Validation_CheckIfResponse ( char * text ) ;
2007-09-18 01:08:49 +00:00
void Validation_DelatchRulesets ( void ) ;
2004-08-23 00:15:46 +00:00
void InitValidation ( void ) ;
2005-07-09 15:47:20 +00:00
void Validation_IncludeFile ( char * filename , char * file , int filelen ) ;
2007-09-17 20:35:39 +00:00
void Validation_Auto_Response ( int playernum , char * s ) ;
2004-08-23 00:15:46 +00:00
extern qboolean f_modified_particles ;
extern qboolean care_f_modified ;
2004-10-13 06:32:14 +00:00
//random files (fixme: clean up)
2004-08-23 00:15:46 +00:00
# ifdef Q2CLIENT
void CLQ2_ParseTEnt ( void ) ;
void CLQ2_AddEntities ( void ) ;
void CLQ2_ParseBaseline ( void ) ;
void CLQ2_ParseFrame ( void ) ;
2005-03-18 06:14:07 +00:00
void CLQ2_RunMuzzleFlash2 ( int ent , int flash_number ) ;
2004-08-23 00:15:46 +00:00
int CLQ2_RegisterTEntModels ( void ) ;
# endif
2012-07-05 19:42:36 +00:00
# ifdef HLCLIENT
//networking
void CLHL_LoadClientGame ( void ) ;
int CLHL_ParseGamePacket ( void ) ;
int CLHL_AnimateViewEntity ( entity_t * ent ) ;
//screen
int CLHL_DrawHud ( void ) ;
//inputs
int CLHL_GamecodeDoesMouse ( void ) ;
int CLHL_MouseEvent ( unsigned int buttonmask ) ;
void CLHL_SetMouseActive ( int activate ) ;
int CLHL_BuildUserInput ( int msecs , usercmd_t * cmd ) ;
# endif
2009-11-04 21:16:50 +00:00
# ifdef NQPROT
void CLNQ_ParseEntity ( unsigned int bits ) ;
2005-03-10 03:55:18 +00:00
void NQ_P_ParseParticleEffect ( void ) ;
2004-08-23 00:15:46 +00:00
void CLNQ_SignonReply ( void ) ;
void NQ_BeginConnect ( char * to ) ;
void NQ_ContinueConnect ( char * to ) ;
int CLNQ_GetMessage ( void ) ;
2009-11-04 21:16:50 +00:00
# endif
2004-08-23 00:15:46 +00:00
void CL_BeginServerReconnect ( void ) ;
void SV_User_f ( void ) ; //called by client version of the function
void SV_Serverinfo_f ( void ) ;
# ifdef TEXTEDITOR
extern qboolean editoractive ;
extern qboolean editormodal ;
void Editor_Draw ( void ) ;
void Editor_Init ( void ) ;
2011-05-20 04:10:46 +00:00
struct progfuncs_s ;
void Editor_ProgsKilled ( struct progfuncs_s * dead ) ;
2004-08-23 00:15:46 +00:00
# endif
2006-03-11 00:35:56 +00:00
void SCR_StringToRGB ( char * rgbstring , float * rgb , float rgbinputscale ) ;
2004-10-13 06:32:14 +00:00
2009-07-06 01:20:20 +00:00
struct model_s ;
void CL_AddVWeapModel ( entity_t * player , struct model_s * model ) ;
2004-08-23 00:15:46 +00:00
2010-07-11 02:22:39 +00:00
/*q2 cinematics*/
struct cinematics_s ;
void CIN_StopCinematic ( struct cinematics_s * cin ) ;
struct cinematics_s * CIN_PlayCinematic ( char * arg ) ;
int CIN_RunCinematic ( struct cinematics_s * cin , qbyte * * outdata , int * outwidth , int * outheight , qbyte * * outpalette ) ;
2004-08-23 00:15:46 +00:00
2011-12-06 00:37:14 +00:00
typedef struct cin_s cin_t ;
2011-12-05 15:23:40 +00:00
# ifdef NOMEDIA
2011-12-23 03:12:29 +00:00
# define Media_Playing() false
# define Media_Init() 0
# define Media_PlayingFullScreen() false
# define Media_PlayFilm(n) false
2011-12-05 15:23:40 +00:00
# else
2010-07-11 02:22:39 +00:00
/*media playing system*/
2006-03-06 01:41:09 +00:00
qboolean Media_PlayingFullScreen ( void ) ;
2004-08-23 00:15:46 +00:00
void Media_Init ( void ) ;
qboolean Media_PlayFilm ( char * name ) ;
2011-12-05 15:23:40 +00:00
qboolean Media_Playing ( void ) ;
2006-03-06 01:41:09 +00:00
struct cin_s * Media_StartCin ( char * name ) ;
2011-10-27 15:46:36 +00:00
texid_tf Media_UpdateForShader ( cin_t * cin ) ;
2006-03-06 01:41:09 +00:00
void Media_ShutdownCin ( cin_t * cin ) ;
2010-09-05 10:42:23 +00:00
qboolean Media_FakeTrack ( int i , qboolean loop ) ;
2011-12-05 15:23:40 +00:00
# endif
2006-03-06 01:41:09 +00:00
2008-11-09 22:29:28 +00:00
//these accept NULL for cin to mean the current fullscreen video
void Media_Send_Command ( cin_t * cin , char * command ) ;
void Media_Send_MouseMove ( cin_t * cin , float x , float y ) ;
void Media_Send_Resize ( cin_t * cin , int x , int y ) ;
void Media_Send_GetSize ( cin_t * cin , int * x , int * y ) ;
2009-07-25 11:05:06 +00:00
void Media_Send_KeyEvent ( cin_t * cin , int button , int unicode , int event ) ;
2008-11-09 22:29:28 +00:00
2004-08-23 00:15:46 +00:00
void MVD_Interpolate ( void ) ;
2004-09-13 03:11:44 +00:00
2007-08-06 21:13:15 +00:00
int Stats_GetKills ( int playernum ) ;
int Stats_GetTKills ( int playernum ) ;
int Stats_GetDeaths ( int playernum ) ;
int Stats_GetTouches ( int playernum ) ;
int Stats_GetCaptures ( int playernum ) ;
qboolean Stats_HaveFlags ( void ) ;
qboolean Stats_HaveKills ( void ) ;
2009-11-04 21:16:50 +00:00
void VARGS Stats_Message ( char * msg , . . . ) LIKEPRINTF ( 1 ) ;
2007-08-06 21:13:15 +00:00
int qm_strcmp ( char * s1 , char * s2 ) ;
int qm_stricmp ( char * s1 , char * s2 ) ;
2004-09-13 03:11:44 +00:00
void Stats_ParsePrintLine ( char * line ) ;
2007-08-06 21:13:15 +00:00
void Stats_NewMap ( void ) ;
2006-02-11 14:51:36 +00:00
2012-04-24 07:59:11 +00:00
enum uploadfmt ;
typedef struct
{
void * ( VARGS * createdecoder ) ( char * name ) ;
void * ( VARGS * decodeframe ) ( void * ctx , qboolean nosound , enum uploadfmt * fmt , int * width , int * height ) ;
void ( VARGS * doneframe ) ( void * ctx , void * img ) ;
void ( VARGS * shutdown ) ( void * ctx ) ;
void ( VARGS * rewind ) ( void * ctx ) ;
//these are any interactivity functions you might want...
void ( VARGS * cursormove ) ( void * ctx , float posx , float posy ) ; //pos is 0-1
void ( VARGS * key ) ( void * ctx , int code , int unicode , int event ) ;
qboolean ( VARGS * setsize ) ( void * ctx , int width , int height ) ;
void ( VARGS * getsize ) ( void * ctx , int * width , int * height ) ;
void ( VARGS * changestream ) ( void * ctx , char * streamname ) ;
} media_decoder_funcs_t ;
2012-11-27 03:23:19 +00:00
typedef struct {
void * ( VARGS * capture_begin ) ( char * streamname , int videorate , int width , int height , int * sndkhz , int * sndchannels , int * sndbits ) ;
void ( VARGS * capture_video ) ( void * ctx , void * data , int frame , int width , int height ) ;
void ( VARGS * capture_audio ) ( void * ctx , void * data , int bytes ) ;
void ( VARGS * capture_end ) ( void * ctx ) ;
} media_encoder_funcs_t ;
2012-04-24 07:59:11 +00:00
extern struct plugin_s * currentplug ;
qboolean Media_RegisterDecoder ( struct plugin_s * plug , media_decoder_funcs_t * funcs ) ;
qboolean Media_UnregisterDecoder ( struct plugin_s * plug , media_decoder_funcs_t * funcs ) ;
2012-11-27 03:23:19 +00:00
qboolean Media_RegisterEncoder ( struct plugin_s * plug , media_encoder_funcs_t * funcs ) ;
qboolean Media_UnregisterEncoder ( struct plugin_s * plug , media_encoder_funcs_t * funcs ) ;