Annotation of quakeworld/client/client.h, revision 1.1

1.1     ! root        1: /*
        !             2: Copyright (C) 1996-1997 Id Software, Inc.
        !             3: 
        !             4: This program is free software; you can redistribute it and/or
        !             5: modify it under the terms of the GNU General Public License
        !             6: as published by the Free Software Foundation; either version 2
        !             7: of the License, or (at your option) any later version.
        !             8: 
        !             9: This program is distributed in the hope that it will be useful,
        !            10: but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
        !            12: 
        !            13: See the GNU General Public License for more details.
        !            14: 
        !            15: You should have received a copy of the GNU General Public License
        !            16: along with this program; if not, write to the Free Software
        !            17: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
        !            18: 
        !            19: */
        !            20: // client.h
        !            21: 
        !            22: 
        !            23: typedef struct
        !            24: {
        !            25:        char            name[16];
        !            26:        qboolean        failedload;             // the name isn't a valid skin
        !            27:        cache_user_t    cache;
        !            28: } skin_t;
        !            29: 
        !            30: // player_state_t is the information needed by a player entity
        !            31: // to do move prediction and to generate a drawable entity
        !            32: typedef struct
        !            33: {
        !            34:        int                     messagenum;             // all player's won't be updated each frame
        !            35: 
        !            36:        double          state_time;             // not the same as the packet time,
        !            37:                                                                // because player commands come asyncronously
        !            38:        usercmd_t       command;                // last command for prediction
        !            39: 
        !            40:        vec3_t          origin;
        !            41:        vec3_t          viewangles;             // only for demos, not from server
        !            42:        vec3_t          velocity;
        !            43:        int                     weaponframe;
        !            44: 
        !            45:        int                     modelindex;
        !            46:        int                     frame;
        !            47:        int                     skinnum;
        !            48:        int                     effects;
        !            49: 
        !            50:        int                     flags;                  // dead, gib, etc
        !            51: 
        !            52:        float           waterjumptime;
        !            53:        int                     onground;               // -1 = in air, else pmove entity number
        !            54:        int                     oldbuttons;
        !            55: } player_state_t;
        !            56: 
        !            57: 
        !            58: #define        MAX_SCOREBOARDNAME      16
        !            59: typedef struct player_info_s
        !            60: {
        !            61:        int             userid;
        !            62:        char    userinfo[MAX_INFO_STRING];
        !            63: 
        !            64:        // scoreboard information
        !            65:        char    name[MAX_SCOREBOARDNAME];
        !            66:        float   entertime;
        !            67:        int             frags;
        !            68:        int             ping;
        !            69:        byte    pl;
        !            70: 
        !            71:        // skin information
        !            72:        int             topcolor;
        !            73:        int             bottomcolor;
        !            74: 
        !            75:        int             _topcolor;
        !            76:        int             _bottomcolor;
        !            77: 
        !            78:        int             spectator;
        !            79:        byte    translations[VID_GRADES*256];
        !            80:        skin_t  *skin;
        !            81: } player_info_t;
        !            82: 
        !            83: 
        !            84: typedef struct
        !            85: {
        !            86:        // generated on client side
        !            87:        usercmd_t       cmd;            // cmd that generated the frame
        !            88:        double          senttime;       // time cmd was sent off
        !            89:        int                     delta_sequence;         // sequence number to delta from, -1 = full update
        !            90: 
        !            91:        // received from server
        !            92:        double          receivedtime;   // time message was received, or -1
        !            93:        player_state_t  playerstate[MAX_CLIENTS];       // message received that reflects performing
        !            94:                                                        // the usercmd
        !            95:        packet_entities_t       packet_entities;
        !            96:        qboolean        invalid;                // true if the packet_entities delta was invalid
        !            97: } frame_t;
        !            98: 
        !            99: 
        !           100: typedef struct
        !           101: {
        !           102:        int             destcolor[3];
        !           103:        int             percent;                // 0-256
        !           104: } cshift_t;
        !           105: 
        !           106: #define        CSHIFT_CONTENTS 0
        !           107: #define        CSHIFT_DAMAGE   1
        !           108: #define        CSHIFT_BONUS    2
        !           109: #define        CSHIFT_POWERUP  3
        !           110: #define        NUM_CSHIFTS             4
        !           111: 
        !           112: 
        !           113: //
        !           114: // client_state_t should hold all pieces of the client state
        !           115: //
        !           116: #define        MAX_DLIGHTS             32
        !           117: typedef struct
        !           118: {
        !           119:        int             key;                            // so entities can reuse same entry
        !           120:        vec3_t  origin;
        !           121:        float   radius;
        !           122:        float   die;                            // stop lighting after this time
        !           123:        float   decay;                          // drop this each second
        !           124:        float   minlight;                       // don't add when contributing less
        !           125:        float   color[4];
        !           126: } dlight_t;
        !           127: 
        !           128: typedef struct
        !           129: {
        !           130:        int             length;
        !           131:        char    map[MAX_STYLESTRING];
        !           132: } lightstyle_t;
        !           133: 
        !           134: 
        !           135: 
        !           136: #define        MAX_EFRAGS              512
        !           137: 
        !           138: #define        MAX_DEMOS               8
        !           139: #define        MAX_DEMONAME    16
        !           140: 
        !           141: typedef enum {
        !           142: ca_disconnected,       // full screen console with no connection
        !           143: ca_demostart,          // starting up a demo
        !           144: ca_connected,          // netchan_t established, waiting for svc_serverdata
        !           145: ca_onserver,           // processing data lists, donwloading, etc
        !           146: ca_active                      // everything is in, so frames can be rendered
        !           147: } cactive_t;
        !           148: 
        !           149: typedef enum {
        !           150:        dl_none,
        !           151:        dl_model,
        !           152:        dl_sound,
        !           153:        dl_skin,
        !           154:        dl_single
        !           155: } dltype_t;            // download type
        !           156: 
        !           157: //
        !           158: // the client_static_t structure is persistant through an arbitrary number
        !           159: // of server connections
        !           160: //
        !           161: typedef struct
        !           162: {
        !           163: // connection information
        !           164:        cactive_t       state;
        !           165:        
        !           166: // network stuff
        !           167:        netchan_t       netchan;
        !           168: 
        !           169: // private userinfo for sending to masterless servers
        !           170:        char            userinfo[MAX_INFO_STRING];
        !           171: 
        !           172:        char            servername[MAX_OSPATH]; // name of server from original connect
        !           173: 
        !           174:        int                     qport;
        !           175: 
        !           176:        FILE            *download;              // file transfer from server
        !           177:        char            downloadtempname[MAX_OSPATH];
        !           178:        char            downloadname[MAX_OSPATH];
        !           179:        int                     downloadnumber;
        !           180:        dltype_t        downloadtype;
        !           181:        int                     downloadpercent;
        !           182: 
        !           183: // demo loop control
        !           184:        int                     demonum;                // -1 = don't play demos
        !           185:        char            demos[MAX_DEMOS][MAX_DEMONAME];         // when not playing
        !           186: 
        !           187: // demo recording info must be here, because record is started before
        !           188: // entering a map (and clearing client_state_t)
        !           189:        qboolean        demorecording;
        !           190:        qboolean        demoplayback;
        !           191:        qboolean        timedemo;
        !           192:        FILE            *demofile;
        !           193:        float           td_lastframe;           // to meter out one message a frame
        !           194:        int                     td_startframe;          // host_framecount at start
        !           195:        float           td_starttime;           // realtime at second frame of timedemo
        !           196: 
        !           197:        int                     challenge;
        !           198: 
        !           199:        float           latency;                // rolling average
        !           200: } client_static_t;
        !           201: 
        !           202: extern client_static_t cls;
        !           203: 
        !           204: //
        !           205: // the client_state_t structure is wiped completely at every
        !           206: // server signon
        !           207: //
        !           208: typedef struct
        !           209: {
        !           210:        int                     servercount;    // server identification for prespawns
        !           211: 
        !           212:        char            serverinfo[MAX_SERVERINFO_STRING];
        !           213: 
        !           214:        int                     parsecount;             // server message counter
        !           215:        int                     validsequence;  // this is the sequence number of the last good
        !           216:                                                                // packetentity_t we got.  If this is 0, we can't
        !           217:                                                                // render a frame yet
        !           218:        int                     movemessages;   // since connecting to this server
        !           219:                                                                // throw out the first couple, so the player
        !           220:                                                                // doesn't accidentally do something the 
        !           221:                                                                // first frame
        !           222: 
        !           223:        int                     spectator;
        !           224: 
        !           225:        double          last_ping_request;      // while showing scoreboard
        !           226:        double          last_servermessage;
        !           227: 
        !           228: // sentcmds[cl.netchan.outgoing_sequence & UPDATE_MASK] = cmd
        !           229:        frame_t         frames[UPDATE_BACKUP];
        !           230: 
        !           231: // information for local display
        !           232:        int                     stats[MAX_CL_STATS];    // health, etc
        !           233:        float           item_gettime[32];       // cl.time of aquiring item, for blinking
        !           234:        float           faceanimtime;           // use anim frame if cl.time < this
        !           235: 
        !           236:        cshift_t        cshifts[NUM_CSHIFTS];   // color shifts for damage, powerups
        !           237:        cshift_t        prev_cshifts[NUM_CSHIFTS];      // and content types
        !           238: 
        !           239: // the client maintains its own idea of view angles, which are
        !           240: // sent to the server each frame.  And only reset at level change
        !           241: // and teleport times
        !           242:        vec3_t          viewangles;
        !           243: 
        !           244: // the client simulates or interpolates movement to get these values
        !           245:        double          time;                   // this is the time value that the client
        !           246:                                                                // is rendering at.  allways <= realtime
        !           247:        vec3_t          simorg;
        !           248:        vec3_t          simvel;
        !           249:        vec3_t          simangles;
        !           250: 
        !           251: // pitch drifting vars
        !           252:        float           pitchvel;
        !           253:        qboolean        nodrift;
        !           254:        float           driftmove;
        !           255:        double          laststop;
        !           256: 
        !           257: 
        !           258:        float           crouch;                 // local amount for smoothing stepups
        !           259: 
        !           260:        qboolean        paused;                 // send over by server
        !           261: 
        !           262:        float           punchangle;             // temporar yview kick from weapon firing
        !           263:        
        !           264:        int                     intermission;   // don't change view angle, full screen, etc
        !           265:        int                     completed_time; // latched ffrom time at intermission start
        !           266:        
        !           267: //
        !           268: // information that is static for the entire time connected to a server
        !           269: //
        !           270:        char            model_name[MAX_MODELS][MAX_QPATH];
        !           271:        char            sound_name[MAX_SOUNDS][MAX_QPATH];
        !           272: 
        !           273:        struct model_s          *model_precache[MAX_MODELS];
        !           274:        struct sfx_s            *sound_precache[MAX_SOUNDS];
        !           275: 
        !           276:        char            levelname[40];  // for display on solo scoreboard
        !           277:        int                     playernum;
        !           278: 
        !           279: // refresh related state
        !           280:        struct model_s  *worldmodel;    // cl_entitites[0].model
        !           281:        struct efrag_s  *free_efrags;
        !           282:        int                     num_entities;   // stored bottom up in cl_entities array
        !           283:        int                     num_statics;    // stored top down in cl_entitiers
        !           284: 
        !           285:        int                     cdtrack;                // cd audio
        !           286: 
        !           287:        entity_t        viewent;                // weapon model
        !           288: 
        !           289: // all player information
        !           290:        player_info_t   players[MAX_CLIENTS];
        !           291: } client_state_t;
        !           292: 
        !           293: 
        !           294: //
        !           295: // cvars
        !           296: //
        !           297: extern  cvar_t cl_warncmd;
        !           298: extern cvar_t  cl_upspeed;
        !           299: extern cvar_t  cl_forwardspeed;
        !           300: extern cvar_t  cl_backspeed;
        !           301: extern cvar_t  cl_sidespeed;
        !           302: 
        !           303: extern cvar_t  cl_movespeedkey;
        !           304: 
        !           305: extern cvar_t  cl_yawspeed;
        !           306: extern cvar_t  cl_pitchspeed;
        !           307: 
        !           308: extern cvar_t  cl_anglespeedkey;
        !           309: 
        !           310: extern cvar_t  cl_shownet;
        !           311: extern cvar_t  cl_sbar;
        !           312: extern cvar_t  cl_hudswap;
        !           313: 
        !           314: extern cvar_t  cl_pitchdriftspeed;
        !           315: extern cvar_t  lookspring;
        !           316: extern cvar_t  lookstrafe;
        !           317: extern cvar_t  sensitivity;
        !           318: 
        !           319: extern cvar_t  m_pitch;
        !           320: extern cvar_t  m_yaw;
        !           321: extern cvar_t  m_forward;
        !           322: extern cvar_t  m_side;
        !           323: 
        !           324: extern cvar_t          _windowed_mouse;
        !           325: 
        !           326: extern cvar_t  name;
        !           327: 
        !           328: 
        !           329: #define        MAX_STATIC_ENTITIES     128                     // torches, etc
        !           330: 
        !           331: extern client_state_t  cl;
        !           332: 
        !           333: // FIXME, allocate dynamically
        !           334: extern entity_state_t  cl_baselines[MAX_EDICTS];
        !           335: extern efrag_t                 cl_efrags[MAX_EFRAGS];
        !           336: extern entity_t                cl_static_entities[MAX_STATIC_ENTITIES];
        !           337: extern lightstyle_t    cl_lightstyle[MAX_LIGHTSTYLES];
        !           338: extern dlight_t                cl_dlights[MAX_DLIGHTS];
        !           339: 
        !           340: extern qboolean        nomaster;
        !           341: extern float   server_version; // version of server we connected to
        !           342: 
        !           343: //=============================================================================
        !           344: 
        !           345: 
        !           346: //
        !           347: // cl_main
        !           348: //
        !           349: dlight_t *CL_AllocDlight (int key);
        !           350: void   CL_DecayLights (void);
        !           351: 
        !           352: void CL_Init (void);
        !           353: void Host_WriteConfiguration (void);
        !           354: 
        !           355: void CL_EstablishConnection (char *host);
        !           356: 
        !           357: void CL_Disconnect (void);
        !           358: void CL_Disconnect_f (void);
        !           359: void CL_NextDemo (void);
        !           360: qboolean CL_DemoBehind(void);
        !           361: 
        !           362: void CL_BeginServerConnect(void);
        !           363: 
        !           364: #define                        MAX_VISEDICTS   256
        !           365: extern int                             cl_numvisedicts, cl_oldnumvisedicts;
        !           366: extern entity_t                *cl_visedicts, *cl_oldvisedicts;
        !           367: extern entity_t                cl_visedicts_list[2][MAX_VISEDICTS];
        !           368: 
        !           369: extern char emodel_name[], pmodel_name[], prespawn_name[], modellist_name[], soundlist_name[];
        !           370: 
        !           371: //
        !           372: // cl_input
        !           373: //
        !           374: typedef struct
        !           375: {
        !           376:        int             down[2];                // key nums holding it down
        !           377:        int             state;                  // low bit is down state
        !           378: } kbutton_t;
        !           379: 
        !           380: extern kbutton_t       in_mlook, in_klook;
        !           381: extern         kbutton_t       in_strafe;
        !           382: extern         kbutton_t       in_speed;
        !           383: 
        !           384: void CL_InitInput (void);
        !           385: void CL_SendCmd (void);
        !           386: void CL_SendMove (usercmd_t *cmd);
        !           387: 
        !           388: void CL_ParseTEnt (void);
        !           389: void CL_UpdateTEnts (void);
        !           390: 
        !           391: void CL_ClearState (void);
        !           392: 
        !           393: void CL_ReadPackets (void);
        !           394: 
        !           395: int  CL_ReadFromServer (void);
        !           396: void CL_WriteToServer (usercmd_t *cmd);
        !           397: void CL_BaseMove (usercmd_t *cmd);
        !           398: 
        !           399: 
        !           400: float CL_KeyState (kbutton_t *key);
        !           401: char *Key_KeynumToString (int keynum);
        !           402: 
        !           403: //
        !           404: // cl_demo.c
        !           405: //
        !           406: void CL_StopPlayback (void);
        !           407: qboolean CL_GetMessage (void);
        !           408: void CL_WriteDemoCmd (usercmd_t *pcmd);
        !           409: 
        !           410: void CL_Stop_f (void);
        !           411: void CL_Record_f (void);
        !           412: void CL_ReRecord_f (void);
        !           413: void CL_PlayDemo_f (void);
        !           414: void CL_TimeDemo_f (void);
        !           415: 
        !           416: //
        !           417: // cl_parse.c
        !           418: //
        !           419: #define NET_TIMINGS 256
        !           420: #define NET_TIMINGSMASK 255
        !           421: extern int     packet_latency[NET_TIMINGS];
        !           422: int CL_CalcNet (void);
        !           423: void CL_ParseServerMessage (void);
        !           424: void CL_NewTranslation (int slot);
        !           425: qboolean       CL_CheckOrDownloadFile (char *filename);
        !           426: qboolean CL_IsUploading(void);
        !           427: void CL_NextUpload(void);
        !           428: void CL_StartUpload (byte *data, int size);
        !           429: void CL_StopUpload(void);
        !           430: 
        !           431: //
        !           432: // view.c
        !           433: //
        !           434: void V_StartPitchDrift (void);
        !           435: void V_StopPitchDrift (void);
        !           436: 
        !           437: void V_RenderView (void);
        !           438: void V_UpdatePalette (void);
        !           439: void V_Register (void);
        !           440: void V_ParseDamage (void);
        !           441: void V_SetContentsColor (int contents);
        !           442: void V_CalcBlend (void);
        !           443: 
        !           444: 
        !           445: //
        !           446: // cl_tent
        !           447: //
        !           448: void CL_InitTEnts (void);
        !           449: void CL_ClearTEnts (void);
        !           450: 
        !           451: //
        !           452: // cl_ents.c
        !           453: //
        !           454: void CL_SetSolidPlayers (int playernum);
        !           455: void CL_SetUpPlayerPrediction(qboolean dopred);
        !           456: void CL_EmitEntities (void);
        !           457: void CL_ClearProjectiles (void);
        !           458: void CL_ParseProjectiles (void);
        !           459: void CL_ParsePacketEntities (qboolean delta);
        !           460: void CL_SetSolidEntities (void);
        !           461: void CL_ParsePlayerinfo (void);
        !           462: 
        !           463: //
        !           464: // cl_pred.c
        !           465: //
        !           466: void CL_InitPrediction (void);
        !           467: void CL_PredictMove (void);
        !           468: void CL_PredictUsercmd (player_state_t *from, player_state_t *to, usercmd_t *u, qboolean spectator);
        !           469: 
        !           470: //
        !           471: // cl_cam.c
        !           472: //
        !           473: #define CAM_NONE       0
        !           474: #define CAM_TRACK      1
        !           475: 
        !           476: extern int             autocam;
        !           477: extern int spec_track; // player# of who we are tracking
        !           478: 
        !           479: qboolean Cam_DrawViewModel(void);
        !           480: qboolean Cam_DrawPlayer(int playernum);
        !           481: void Cam_Track(usercmd_t *cmd);
        !           482: void Cam_FinishMove(usercmd_t *cmd);
        !           483: void Cam_Reset(void);
        !           484: void CL_InitCam(void);
        !           485: 
        !           486: //
        !           487: // skin.c
        !           488: //
        !           489: 
        !           490: typedef struct
        !           491: {
        !           492:     char       manufacturer;
        !           493:     char       version;
        !           494:     char       encoding;
        !           495:     char       bits_per_pixel;
        !           496:     unsigned short     xmin,ymin,xmax,ymax;
        !           497:     unsigned short     hres,vres;
        !           498:     unsigned char      palette[48];
        !           499:     char       reserved;
        !           500:     char       color_planes;
        !           501:     unsigned short     bytes_per_line;
        !           502:     unsigned short     palette_type;
        !           503:     char       filler[58];
        !           504:     unsigned char      data;                   // unbounded
        !           505: } pcx_t;
        !           506: 
        !           507: 
        !           508: void   Skin_Find (player_info_t *sc);
        !           509: byte   *Skin_Cache (skin_t *skin);
        !           510: void   Skin_Skins_f (void);
        !           511: void   Skin_AllSkins_f (void);
        !           512: void   Skin_NextDownload (void);
        !           513: 
        !           514: #define RSSHOT_WIDTH 320
        !           515: #define RSSHOT_HEIGHT 200

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.