1cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich/* 2cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichCopyright (C) 1996-1997 Id Software, Inc. 3cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 4cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichThis program is free software; you can redistribute it and/or 5cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichmodify it under the terms of the GNU General Public License 6cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichas published by the Free Software Foundation; either version 2 7cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichof the License, or (at your option) any later version. 8cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 9cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichThis program is distributed in the hope that it will be useful, 10cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichbut WITHOUT ANY WARRANTY; without even the implied warranty of 11cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 13cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichSee the GNU General Public License for more details. 14cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 15cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichYou should have received a copy of the GNU General Public License 16cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichalong with this program; if not, write to the Free Software 17cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 19cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich*/ 20cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// client.h 21cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 22cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct 23cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 24cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich vec3_t viewangles; 25cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 26cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// intended velocities 27cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float forwardmove; 28cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float sidemove; 29cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float upmove; 30cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2 31cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich byte lightlevel; 32cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 33cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} usercmd_t; 34cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 35cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct 36cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 37cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int length; 38cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich char map[MAX_STYLESTRING]; 39cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} lightstyle_t; 40cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 41cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct 42cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 43cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich char name[MAX_SCOREBOARDNAME]; 44cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float entertime; 45cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int frags; 46cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int colors; // two 4 bit fields 47cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich byte translations[VID_GRADES*256]; 48cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} scoreboard_t; 49cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 50cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct 51cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 52cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int destcolor[3]; 53cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int percent; // 0-256 54cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} cshift_t; 55cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 56cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define CSHIFT_CONTENTS 0 57cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define CSHIFT_DAMAGE 1 58cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define CSHIFT_BONUS 2 59cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define CSHIFT_POWERUP 3 60cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define NUM_CSHIFTS 4 61cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 62cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define NAME_LENGTH 64 63cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 64cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 65cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 66cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// client_state_t should hold all pieces of the client state 67cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 68cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 69cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define SIGNONS 4 // signon messages to receive before connected 70cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 71cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MAX_DLIGHTS 32 72cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct 73cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 74cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich vec3_t origin; 75cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float radius; 76cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float die; // stop lighting after this time 77cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float decay; // drop this each second 78cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float minlight; // don't add when contributing less 79cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int key; 80cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2 81cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich qboolean dark; // subtracts light instead of adding 82cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 83cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} dlight_t; 84cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 85cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 86cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MAX_BEAMS 24 87cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct 88cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 89cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int entity; 90cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich struct model_s *model; 91cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float endtime; 92cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich vec3_t start, end; 93cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} beam_t; 94cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 95cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MAX_EFRAGS 640 96cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 97cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MAX_MAPSTRING 2048 98cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MAX_DEMOS 8 99cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MAX_DEMONAME 16 100cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 101cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef enum { 102cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichca_dedicated, // a dedicated server with no ability to start a client 103cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichca_disconnected, // full screen console with no connection 104cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichca_connected, // valid netcon, talking to a server 105cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcactive_t_max = 1 << 30 106cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} cactive_t; 107cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 108cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 109cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// the client_static_t structure is persistant through an arbitrary number 110cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// of server connections 111cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 112cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct 113cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 114cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich cactive_t state; 115cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 116cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// personalization data sent to server 117cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich char mapstring[MAX_QPATH]; 118cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich char spawnparms[MAX_MAPSTRING]; // to restart a level 119cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 120cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// demo loop control 121cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int demonum; // -1 = don't play demos 122cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich char demos[MAX_DEMOS][MAX_DEMONAME]; // when not playing 123cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 124cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// demo recording info must be here, because record is started before 125cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// entering a map (and clearing client_state_t) 126cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich qboolean demorecording; 127cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich qboolean demoplayback; 128cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich qboolean timedemo; 129cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int forcetrack; // -1 = use normal cd track 130cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich FILE *demofile; 131cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int td_lastframe; // to meter out one message a frame 132cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int td_startframe; // host_framecount at start 133cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float td_starttime; // realtime at second frame of timedemo 134cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 135cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 136cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// connection information 137cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int signon; // 0 to SIGNONS 138cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich struct qsocket_s *netcon; 139cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich sizebuf_t message; // writing buffer to send to server 140cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 141cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} client_static_t; 142cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 143cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern client_static_t cls; 144cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 145cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 146cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// the client_state_t structure is wiped completely at every 147cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// server signon 148cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 149cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct 150cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 151cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int movemessages; // since connecting to this server 152cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // throw out the first couple, so the player 153cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // doesn't accidentally do something the 154cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // first frame 155cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich usercmd_t cmd; // last command sent to the server 156cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 157cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// information for local display 158cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int stats[MAX_CL_STATS]; // health, etc 159cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int items; // inventory bit flags 160cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float item_gettime[32]; // cl.time of aquiring item, for blinking 161cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float faceanimtime; // use anim frame if cl.time < this 162cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 163cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich cshift_t cshifts[NUM_CSHIFTS]; // color shifts for damage, powerups 164cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich cshift_t prev_cshifts[NUM_CSHIFTS]; // and content types 165cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 166cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// the client maintains its own idea of view angles, which are 167cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// sent to the server each frame. The server sets punchangle when 168cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// the view is temporarliy offset, and an angle reset commands at the start 169cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// of each level and after teleporting. 170cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich vec3_t mviewangles[2]; // during demo playback viewangles is lerped 171cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // between these 172cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich vec3_t viewangles; 173cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 174cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich vec3_t mvelocity[2]; // update by server, used for lean+bob 175cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // (0 is newest) 176cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich vec3_t velocity; // lerped between mvelocity[0] and [1] 177cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 178cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich vec3_t punchangle; // temporary offset 179cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 180cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// pitch drifting vars 181cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float idealpitch; 182cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float pitchvel; 183cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich qboolean nodrift; 184cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float driftmove; 185cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich double laststop; 186cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 187cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float viewheight; 188cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float crouch; // local amount for smoothing stepups 189cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 190cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich qboolean paused; // send over by server 191cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich qboolean onground; 192cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich qboolean inwater; 193cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 194cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int intermission; // don't change view angle, full screen, etc 195cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int completed_time; // latched at intermission start 196cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 197cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich double mtime[2]; // the timestamp of last two messages 198cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich double time; // clients view of time, should be between 199cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // servertime and oldservertime to generate 200cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // a lerp point for other data 201cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich double oldtime; // previous cl.time, time-oldtime is used 202cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // to decay light values and smooth step ups 203cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 204cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 205cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float last_received_message; // (realtime) for net trouble icon 206cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 207cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 208cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// information that is static for the entire time connected to a server 209cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 210cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich struct model_s *model_precache[MAX_MODELS]; 211cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich struct sfx_s *sound_precache[MAX_SOUNDS]; 212cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 213cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich char levelname[40]; // for display on solo scoreboard 214cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int viewentity; // cl_entitites[cl.viewentity] = player 215cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int maxclients; 216cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int gametype; 217cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 218cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// refresh related state 219cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich struct model_s *worldmodel; // cl_entitites[0].model 220cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich struct efrag_s *free_efrags; 221cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int num_entities; // held in cl_entities array 222cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int num_statics; // held in cl_staticentities array 223cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich entity_t viewent; // the gun model 224cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 225cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int cdtrack, looptrack; // cd audio 226cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 227cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// frag scoreboard 228cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich scoreboard_t *scores; // [cl.maxclients] 229cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 230cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2 231cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// light level at player's position including dlights 232cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// this is sent back to the server each frame 233cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// architectually ugly but it works 234cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int light_level; 235cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 236cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} client_state_t; 237cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 238cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 239cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 240cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cvars 241cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 242cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_name; 243cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_color; 244cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 245cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_upspeed; 246cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_forwardspeed; 247cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_backspeed; 248cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_sidespeed; 249cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 250cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_movespeedkey; 251cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 252cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_yawspeed; 253cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_pitchspeed; 254cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 255cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_anglespeedkey; 256cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 257cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_autofire; 258cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 259cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_shownet; 260cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_nolerp; 261cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 262cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t cl_pitchdriftspeed; 263cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t lookspring; 264cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t lookstrafe; 265cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t sensitivity; 266cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 267cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t m_pitch; 268cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t m_yaw; 269cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t m_forward; 270cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern cvar_t m_side; 271cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 272cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 273cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MAX_TEMP_ENTITIES 64 // lightning bolts, etc 274cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MAX_STATIC_ENTITIES 128 // torches, etc 275cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 276cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern client_state_t cl; 277cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 278cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// FIXME, allocate dynamically 279cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern efrag_t cl_efrags[MAX_EFRAGS]; 280cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern entity_t cl_entities[MAX_EDICTS]; 281cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern entity_t cl_static_entities[MAX_STATIC_ENTITIES]; 282cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern lightstyle_t cl_lightstyle[MAX_LIGHTSTYLES]; 283cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern dlight_t cl_dlights[MAX_DLIGHTS]; 284cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern entity_t cl_temp_entities[MAX_TEMP_ENTITIES]; 285cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern beam_t cl_beams[MAX_BEAMS]; 286cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 287cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//============================================================================= 288cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 289cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 290cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cl_main 291cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 292cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichdlight_t *CL_AllocDlight (int key); 293cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_DecayLights (void); 294cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 295cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Init (void); 296cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 297cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_EstablishConnection (const char *host); 298cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Signon1 (void); 299cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Signon2 (void); 300cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Signon3 (void); 301cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Signon4 (void); 302cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 303cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Disconnect (void); 304cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Disconnect_f (void); 305cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_NextDemo (void); 306cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 307cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MAX_VISEDICTS 256 308cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern int cl_numvisedicts; 309cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern entity_t *cl_visedicts[MAX_VISEDICTS]; 310cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 311cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 312cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cl_input 313cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 314cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct 315cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 316cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int down[2]; // key nums holding it down 317cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich int state; // low bit is down state 318cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} kbutton_t; 319cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 320cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern kbutton_t in_mlook, in_klook; 321cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern kbutton_t in_strafe; 322cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern kbutton_t in_speed; 323cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 324cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_InitInput (void); 325cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_SendCmd (void); 326cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_SendMove (usercmd_t *cmd); 327cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 328cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_ParseTEnt (void); 329cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_UpdateTEnts (void); 330cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 331cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_ClearState (void); 332cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 333cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 334cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichint CL_ReadFromServer (void); 335cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_WriteToServer (usercmd_t *cmd); 336cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_BaseMove (usercmd_t *cmd); 337cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 338cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 339cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichfloat CL_KeyState (kbutton_t *key); 340cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichconst char *Key_KeynumToString (int keynum); 341cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 342cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 343cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cl_demo.c 344cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 345cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_StopPlayback (void); 346cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichint CL_GetMessage (void); 347cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 348cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Stop_f (void); 349cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Record_f (void); 350cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_PlayDemo_f (void); 351cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_TimeDemo_f (void); 352cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 353cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 354cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cl_parse.c 355cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 356cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_ParseServerMessage (void); 357cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_NewTranslation (int slot); 358cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 359cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 360cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// view 361cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 362cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_StartPitchDrift (void); 363cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_StopPitchDrift (void); 364cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 365cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_RenderView (void); 366cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_UpdatePalette (void); 367cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_Register (void); 368cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_ParseDamage (void); 369cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_SetContentsColor (int contents); 370cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 371cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 372cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 373cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cl_tent 374cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// 375cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_InitTEnts (void); 376cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_SignonReply (void); 377