19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCopyright (C) 1996-1997 Id Software, Inc. 39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is free software; you can redistribute it and/or 59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreammodify it under the terms of the GNU General Public License 69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamas published by the Free Software Foundation; either version 2 79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamof the License, or (at your option) any later version. 89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is distributed in the hope that it will be useful, 109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambut WITHOUT ANY WARRANTY; without even the implied warranty of 119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSee the GNU General Public License for more details. 149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamYou should have received a copy of the GNU General Public License 169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamalong with this program; if not, write to the Free Software 179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// client.h 219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char name[16]; 269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qboolean failedload; // the name isn't a valid skin 279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream cache_user_t cache; 289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} skin_t; 299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// player_state_t is the information needed by a player entity 319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// to do move prediction and to generate a drawable entity 329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int messagenum; // all player's won't be updated each frame 359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream double state_time; // not the same as the packet time, 379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // because player commands come asyncronously 389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream usercmd_t command; // last command for prediction 399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream vec3_t origin; 419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream vec3_t viewangles; // only for demos, not from server 429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream vec3_t velocity; 439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int weaponframe; 449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int modelindex; 469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int frame; 479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int skinnum; 489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int effects; 499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int flags; // dead, gib, etc 519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float waterjumptime; 539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int onground; // -1 = in air, else pmove entity number 549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int oldbuttons; 559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} player_state_t; 569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_SCOREBOARDNAME 16 599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct player_info_s 609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int userid; 629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char userinfo[MAX_INFO_STRING]; 639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // scoreboard information 659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char name[MAX_SCOREBOARDNAME]; 669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float entertime; 679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int frags; 689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int ping; 699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte pl; 709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // skin information 729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int topcolor; 739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int bottomcolor; 749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int _topcolor; 769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int _bottomcolor; 779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int spectator; 799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte translations[VID_GRADES*256]; 809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream skin_t *skin; 819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} player_info_t; 829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // generated on client side 879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream usercmd_t cmd; // cmd that generated the frame 889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream double senttime; // time cmd was sent off 899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int delta_sequence; // sequence number to delta from, -1 = full update 909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // received from server 929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream double receivedtime; // time message was received, or -1 939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream player_state_t playerstate[MAX_CLIENTS]; // message received that reflects performing 949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // the usercmd 959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream packet_entities_t packet_entities; 969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qboolean invalid; // true if the packet_entities delta was invalid 979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} frame_t; 989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int destcolor[3]; 1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int percent; // 0-256 1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} cshift_t; 1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define CSHIFT_CONTENTS 0 1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define CSHIFT_DAMAGE 1 1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define CSHIFT_BONUS 2 1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define CSHIFT_POWERUP 3 1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define NUM_CSHIFTS 4 1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// client_state_t should hold all pieces of the client state 1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_DLIGHTS 32 1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int key; // so entities can reuse same entry 1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream vec3_t origin; 1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float radius; 1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float die; // stop lighting after this time 1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float decay; // drop this each second 1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float minlight; // don't add when contributing less 1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float color[4]; 1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} dlight_t; 1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int length; 1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char map[MAX_STYLESTRING]; 1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} lightstyle_t; 1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_EFRAGS 512 1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_DEMOS 8 1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_DEMONAME 16 1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum { 1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamca_disconnected, // full screen console with no connection 1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamca_demostart, // starting up a demo 1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamca_connected, // netchan_t established, waiting for svc_serverdata 1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamca_onserver, // processing data lists, donwloading, etc 1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamca_active // everything is in, so frames can be rendered 1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} cactive_t; 1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum { 1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dl_none, 1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dl_model, 1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dl_sound, 1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dl_skin, 1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dl_single 1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} dltype_t; // download type 1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the client_static_t structure is persistant through an arbitrary number 1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// of server connections 1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// connection information 1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream cactive_t state; 1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// network stuff 1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream netchan_t netchan; 1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// private userinfo for sending to masterless servers 1709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char userinfo[MAX_INFO_STRING]; 1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char servername[MAX_OSPATH]; // name of server from original connect 1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int qport; 1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FILE *download; // file transfer from server 1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char downloadtempname[MAX_OSPATH]; 1789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char downloadname[MAX_OSPATH]; 1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int downloadnumber; 1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dltype_t downloadtype; 1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int downloadpercent; 1829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// demo loop control 1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int demonum; // -1 = don't play demos 1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char demos[MAX_DEMOS][MAX_DEMONAME]; // when not playing 1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// demo recording info must be here, because record is started before 1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// entering a map (and clearing client_state_t) 1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qboolean demorecording; 1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qboolean demoplayback; 1919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qboolean timedemo; 1929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FILE *demofile; 1939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float td_lastframe; // to meter out one message a frame 1949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int td_startframe; // host_framecount at start 1959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float td_starttime; // realtime at second frame of timedemo 1969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int challenge; 1989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float latency; // rolling average 2009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} client_static_t; 2019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern client_static_t cls; 2039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 2059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the client_state_t structure is wiped completely at every 2069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// server signon 2079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 2089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 2099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 2109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int servercount; // server identification for prespawns 2119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char serverinfo[MAX_SERVERINFO_STRING]; 2139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int parsecount; // server message counter 2159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int validsequence; // this is the sequence number of the last good 2169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // packetentity_t we got. If this is 0, we can't 2179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // render a frame yet 2189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int movemessages; // since connecting to this server 2199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // throw out the first couple, so the player 2209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // doesn't accidentally do something the 2219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // first frame 2229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int spectator; 2249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream double last_ping_request; // while showing scoreboard 2269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream double last_servermessage; 2279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// sentcmds[cl.netchan.outgoing_sequence & UPDATE_MASK] = cmd 2299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frame_t frames[UPDATE_BACKUP]; 2309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// information for local display 2329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int stats[MAX_CL_STATS]; // health, etc 2339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float item_gettime[32]; // cl.time of aquiring item, for blinking 2349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float faceanimtime; // use anim frame if cl.time < this 2359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream cshift_t cshifts[NUM_CSHIFTS]; // color shifts for damage, powerups 2379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream cshift_t prev_cshifts[NUM_CSHIFTS]; // and content types 2389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the client maintains its own idea of view angles, which are 2409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// sent to the server each frame. And only reset at level change 2419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// and teleport times 2429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream vec3_t viewangles; 2439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the client simulates or interpolates movement to get these values 2459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream double time; // this is the time value that the client 2469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // is rendering at. allways <= realtime 2479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream vec3_t simorg; 2489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream vec3_t simvel; 2499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream vec3_t simangles; 2509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// pitch drifting vars 2529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float pitchvel; 2539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qboolean nodrift; 2549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float driftmove; 2559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream double laststop; 2569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float crouch; // local amount for smoothing stepups 2599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qboolean paused; // send over by server 2619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float punchangle; // temporar yview kick from weapon firing 2639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int intermission; // don't change view angle, full screen, etc 2659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int completed_time; // latched ffrom time at intermission start 2669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 2689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// information that is static for the entire time connected to a server 2699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 2709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char model_name[MAX_MODELS][MAX_QPATH]; 2719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char sound_name[MAX_SOUNDS][MAX_QPATH]; 2729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct model_s *model_precache[MAX_MODELS]; 2749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct sfx_s *sound_precache[MAX_SOUNDS]; 2759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char levelname[40]; // for display on solo scoreboard 2779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int playernum; 2789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// refresh related state 2809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct model_s *worldmodel; // cl_entitites[0].model 2819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct efrag_s *free_efrags; 2829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int num_entities; // stored bottom up in cl_entities array 2839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int num_statics; // stored top down in cl_entitiers 2849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int cdtrack; // cd audio 2869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream entity_t viewent; // weapon model 2889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// all player information 2909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream player_info_t players[MAX_CLIENTS]; 2919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} client_state_t; 2929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 2959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cvars 2969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 2979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_warncmd; 2989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_upspeed; 2999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_forwardspeed; 3009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_backspeed; 3019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_sidespeed; 3029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_movespeedkey; 3049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_yawspeed; 3069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_pitchspeed; 3079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_anglespeedkey; 3099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_shownet; 3119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_sbar; 3129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_hudswap; 3139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t cl_pitchdriftspeed; 3159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t lookspring; 3169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t lookstrafe; 3179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t sensitivity; 3189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t m_pitch; 3209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t m_yaw; 3219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t m_forward; 3229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t m_side; 3239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t _windowed_mouse; 3259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t name; 3279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_STATIC_ENTITIES 128 // torches, etc 3309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern client_state_t cl; 3329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// FIXME, allocate dynamically 3349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern entity_state_t cl_baselines[MAX_EDICTS]; 3359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern efrag_t cl_efrags[MAX_EFRAGS]; 3369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern entity_t cl_static_entities[MAX_STATIC_ENTITIES]; 3379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern lightstyle_t cl_lightstyle[MAX_LIGHTSTYLES]; 3389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern dlight_t cl_dlights[MAX_DLIGHTS]; 3399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern qboolean nomaster; 3419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern float server_version; // version of server we connected to 3429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//============================================================================= 3449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 3479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_main 3489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 3499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamdlight_t *CL_AllocDlight (int key); 3509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_DecayLights (void); 3519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_Init (void); 3539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Host_WriteConfiguration (void); 3549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_EstablishConnection (char *host); 3569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_Disconnect (void); 3589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_Disconnect_f (void); 3599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_NextDemo (void); 3609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean CL_DemoBehind(void); 3619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_BeginServerConnect(void); 3639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_VISEDICTS 256 3659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int cl_numvisedicts, cl_oldnumvisedicts; 3669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern entity_t *cl_visedicts, *cl_oldvisedicts; 3679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern entity_t cl_visedicts_list[2][MAX_VISEDICTS]; 3689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern char emodel_name[], pmodel_name[], prespawn_name[], modellist_name[], soundlist_name[]; 3709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 3729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_input 3739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 3749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 3759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int down[2]; // key nums holding it down 3779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int state; // low bit is down state 3789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} kbutton_t; 3799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern kbutton_t in_mlook, in_klook; 3819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern kbutton_t in_strafe; 3829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern kbutton_t in_speed; 3839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_InitInput (void); 3859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_SendCmd (void); 3869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_SendMove (usercmd_t *cmd); 3879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ParseTEnt (void); 3899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_UpdateTEnts (void); 3909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ClearState (void); 3929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ReadPackets (void); 3949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint CL_ReadFromServer (void); 3969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_WriteToServer (usercmd_t *cmd); 3979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_BaseMove (usercmd_t *cmd); 3989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfloat CL_KeyState (kbutton_t *key); 4019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamchar *Key_KeynumToString (int keynum); 4029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_demo.c 4059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_StopPlayback (void); 4079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean CL_GetMessage (void); 4089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_WriteDemoCmd (usercmd_t *pcmd); 4099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_Stop_f (void); 4119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_Record_f (void); 4129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ReRecord_f (void); 4139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_PlayDemo_f (void); 4149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_TimeDemo_f (void); 4159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_parse.c 4189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define NET_TIMINGS 256 4209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define NET_TIMINGSMASK 255 4219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int packet_latency[NET_TIMINGS]; 4229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint CL_CalcNet (void); 4239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ParseServerMessage (void); 4249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_NewTranslation (int slot); 4259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean CL_CheckOrDownloadFile (char *filename); 4269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean CL_IsUploading(void); 4279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_NextUpload(void); 4289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_StartUpload (byte *data, int size); 4299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_StopUpload(void); 4309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// view.c 4339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_StartPitchDrift (void); 4359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_StopPitchDrift (void); 4369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_RenderView (void); 4389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_UpdatePalette (void); 4399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_Register (void); 4409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_ParseDamage (void); 4419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_SetContentsColor (int contents); 4429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_CalcBlend (void); 4439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_tent 4479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_InitTEnts (void); 4499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ClearTEnts (void); 4509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_ents.c 4539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_SetSolidPlayers (int playernum); 4559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_SetUpPlayerPrediction(qboolean dopred); 4569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_EmitEntities (void); 4579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ClearProjectiles (void); 4589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ParseProjectiles (void); 4599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ParsePacketEntities (qboolean delta); 4609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_SetSolidEntities (void); 4619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ParsePlayerinfo (void); 4629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_pred.c 4659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_InitPrediction (void); 4679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_PredictMove (void); 4689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_PredictUsercmd (player_state_t *from, player_state_t *to, usercmd_t *u, qboolean spectator); 4699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_cam.c 4729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define CAM_NONE 0 4749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define CAM_TRACK 1 4759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int autocam; 4779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int spec_track; // player# of who we are tracking 4789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean Cam_DrawViewModel(void); 4809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean Cam_DrawPlayer(int playernum); 4819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Cam_Track(usercmd_t *cmd); 4829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Cam_FinishMove(usercmd_t *cmd); 4839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Cam_Reset(void); 4849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_InitCam(void); 4859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// skin.c 4889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 4899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 4919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 4929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char manufacturer; 4939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char version; 4949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char encoding; 4959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char bits_per_pixel; 4969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned short xmin,ymin,xmax,ymax; 4979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned short hres,vres; 4989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned char palette[48]; 4999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char reserved; 5009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char color_planes; 5019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned short bytes_per_line; 5029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned short palette_type; 5039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char filler[58]; 5049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned char data; // unbounded 5059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} pcx_t; 5069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Skin_Find (player_info_t *sc); 5099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambyte *Skin_Cache (skin_t *skin); 5109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Skin_Skins_f (void); 5119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Skin_AllSkins_f (void); 5129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Skin_NextDownload (void); 5139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define RSSHOT_WIDTH 320 5159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define RSSHOT_HEIGHT 200 516