1 /* 2 Copyright (C) 1997-2001 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 // 21 // cg_local.h 22 // CGame local header 23 // 24 25 #ifndef __CGAME_LOCAL_H__ 26 #define __CGAME_LOCAL_H__ 27 28 #include "../shared/shared.h" 29 #include "cg_shared.h" 30 #include "cg_api.h" 31 #include "cg_entities.h" 32 #include "cg_effects.h" 33 #include "cg_keys.h" 34 #include "cg_media.h" 35 #include "ui/ui_local.h" 36 #include "menu/menu.h" 37 38 extern cgImport_t cgi; 39 40 // Local tags 41 enum { 42 CGTAG_ANY, 43 CGTAG_LOCATION, 44 CGTAG_MAPFX, 45 CGTAG_MENU, 46 }; 47 48 // Generic memory allocation 49 #define CG_MemAlloc(size,zeroFill) cgi.Mem_Alloc((size),(zeroFill),CGTAG_ANY,__FILE__,__LINE__) 50 #define CG_MemFree(ptr) cgi.Mem_Free((ptr),__FILE__,__LINE__) 51 #define CG_StrDup(in) cgi.Mem_StrDup((in),CGTAG_ANY,__FILE__,__LINE__) 52 53 // Allocates to a tagged location 54 // Useful for releasing entire blocks of memory at a time 55 #define CG_AllocTag(size,zeroFill,tag) cgi.Mem_Alloc((size),(zeroFill),(tag),__FILE__,__LINE__) 56 #define CG_FreeTag(tag) cgi.Mem_FreeTag((tag),__FILE__,__LINE__) 57 #define CG_TagStrDup(in,tag) cgi.Mem_StrDup((in),(tag),__FILE__,__LINE__) 58 #define CG_MemTagSize(tag) cgi.Mem_TagSize((tag)) 59 #define CG_ChangeTag(tagFrom,tagTo) cgi.Mem_ChangeTag((tagFrom),(tagTo)) 60 61 // Filesystem 62 #define CG_FS_FreeFile(buffer) cgi.FS_FreeFile((buffer),__FILE__,__LINE__) 63 #define CG_FS_FreeFileList(list,num) cgi.FS_FreeFileList((list),(num),__FILE__,__LINE__) 64 65 /* 66 ============================================================================= 67 68 CGAME STATE 69 70 ============================================================================= 71 */ 72 73 enum { 74 GAME_MOD_DEFAULT, 75 GAME_MOD_DDAY, 76 GAME_MOD_GIEX, 77 GAME_MOD_GLOOM, 78 GAME_MOD_LOX, 79 GAME_MOD_ROGUE, 80 GAME_MOD_XATRIX 81 }; 82 83 typedef struct clientInfo_s { 84 char name[MAX_CFGSTRLEN]; 85 char cInfo[MAX_CFGSTRLEN]; 86 struct shader_s *skin; 87 struct shader_s *icon; 88 char iconName[MAX_QPATH]; 89 struct refModel_s *model; 90 struct refModel_s *weaponModels[MAX_CLIENTWEAPONMODELS]; 91 } clientInfo_t; 92 93 typedef struct cgPredictionState_s { 94 float step; // for stair up smoothing 95 uint32 stepTime; 96 int16 origins[CMD_BACKUP][3]; // for debug comparing against server 97 vec3_t origin; // generated by CG_PredictMovement 98 vec3_t angles; 99 vec3_t velocity; 100 vec3_t error; 101 } cgPredictionState_t; 102 103 typedef struct cgDownloadInfo_s { 104 qBool downloading; 105 106 char *fileName; 107 int percent; 108 float bytesDown; 109 } cgDownloadInfo_t; 110 111 // ========================================================================== 112 113 typedef struct cgState_s { 114 byte currGameMod; 115 116 // Time 117 int netTime; 118 float netFrameTime; 119 120 int refreshTime; 121 float refreshFrameTime; 122 123 int realTime; 124 125 // View settings 126 refDef_t refDef; 127 vec4_t viewBlend; 128 129 // the client maintains its own idea of view angles, which are 130 // sent to the server each frame. It is cleared to 0 upon entering each level. 131 // the server sends a delta each frame which is added to the locally 132 // tracked view angles to account for standing on rotating objects, 133 // and teleport direction changes 134 vec3_t viewAngles; 135 136 refConfig_t refConfig; 137 138 qBool forceRefDef; 139 uint32 frameCount; 140 141 // Gloom 142 qBool gloomCheckClass; 143 int gloomClassType; 144 145 // Third person camera 146 qBool thirdPerson; 147 byte cameraTrans; 148 149 // Prediction 150 cgPredictionState_t predicted; 151 152 frame_t frame; // received from server 153 frame_t oldFrame; 154 float lerpFrac; // between oldFrame and frame 155 156 qBool attractLoop; 157 158 // 159 // Network 160 // 161 int playerNum; 162 163 qBool localServer; 164 char *serverMessage; 165 char *serverName; 166 int serverProtocol; 167 int connectCount; 168 169 cgDownloadInfo_t download; 170 171 // 172 // Config strings 173 // 174 char configStrings[MAX_CFGSTRINGS][MAX_CFGSTRLEN]; 175 struct shader_s *imageCfgStrings[MAX_CS_IMAGES]; 176 struct refModel_s *modelCfgDraw[MAX_CS_MODELS]; 177 struct cBspModel_s *modelCfgClip[MAX_CS_MODELS]; 178 struct sfx_s *soundCfgStrings[MAX_CS_SOUNDS]; 179 180 // 181 // Loading screen 182 // 183 qBool mapLoaded; 184 qBool mapLoading; 185 float loadingPercent; 186 187 char loadingString[MAX_QPATH]; 188 char loadFileName[MAX_QPATH]; 189 190 // 191 // Menu 192 // 193 qBool menuOpen; 194 195 // 196 // HUD and inventory 197 // 198 vec2_t hudScale; 199 200 char layout[1024]; // general 2D overlay 201 int inventory[MAX_CS_ITEMS]; 202 203 // 204 // Client info 205 // 206 int maxClients; 207 clientInfo_t clientInfo[MAX_CS_CLIENTS]; 208 clientInfo_t baseClientInfo; 209 210 // 211 // Enhanced protocol support 212 // 213 qBool strafeHack; 214 } cgState_t; 215 216 extern cgState_t cg; 217 218 /* 219 ============================================================================= 220 221 PLAYER MOVEMENT 222 223 ============================================================================= 224 */ 225 226 enum { 227 GLM_DEFAULT, 228 229 GLM_OBSERVER, 230 231 GLM_BREEDER, 232 GLM_HATCHLING, 233 GLM_DRONE, 234 GLM_WRAITH, 235 GLM_KAMIKAZE, 236 GLM_STINGER, 237 GLM_GUARDIAN, 238 GLM_STALKER, 239 240 GLM_ENGINEER, 241 GLM_GRUNT, 242 GLM_ST, 243 GLM_BIOTECH, 244 GLM_HT, 245 GLM_COMMANDO, 246 GLM_EXTERM, 247 GLM_MECH 248 }; 249 250 // 251 // pmove.c 252 // common between the client and server for consistancy 253 // 254 void Pmove (pMoveNew_t *pMove, float airAcceleration); 255 256 // 257 // cg_predict.c 258 // 259 void CG_CheckPredictionError (void); 260 261 void CG_BuildSolidList (void); 262 263 void CG_PMTrace (trace_t *out, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, qBool entities); 264 265 void CG_PredictMovement (void); 266 267 /* 268 ============================================================================= 269 270 SCREEN 271 272 ============================================================================= 273 */ 274 275 // 276 // cg_screen.c 277 // 278 279 struct shader_s *CG_RegisterPic (char *name); 280 281 float palRed (int index); 282 float palGreen (int index); 283 float palBlue (int index); 284 285 float palRedf (int index); 286 float palGreenf (int index); 287 float palBluef (int index); 288 289 void CG_AddNetgraph (void); 290 void CG_DebugGraph (float value, int color); 291 void CG_DrawDebugGraph (void); 292 293 void SCR_UpdatePING (void); 294 295 void SCR_ParseCenterPrint (void); 296 297 void SCR_Draw (void); 298 299 // 300 // cg_view.c 301 // 302 303 void V_RenderView (int realTime, float netFrameTime, float refreshFrameTime, float stereoSeparation, qBool refreshPrepped); 304 305 void V_Register (void); 306 void V_Unregister (void); 307 308 /* 309 ============================================================================= 310 311 INVENTORY / HUD 312 313 ============================================================================= 314 */ 315 316 // 317 // cg_hud.c 318 // 319 320 void HUD_CopyLayout (void); 321 void HUD_DrawLayout (void); 322 void HUD_DrawStatusBar (void); 323 324 // 325 // cg_inventory.c 326 // 327 328 void Inv_ParseInventory (void); 329 void Inv_DrawInventory (void); 330 331 /* 332 ============================================================================= 333 334 NEAREST LOCATION SUPPORT 335 336 ============================================================================= 337 */ 338 339 void CG_LocationInit (void); 340 void CG_LocationShutdown (void); 341 342 void CG_LoadLocations (char *mapName); 343 344 void CG_Say_Preprocessor (void); 345 346 /* 347 ============================================================================= 348 349 CONSOLE VARIABLES 350 351 ============================================================================= 352 */ 353 354 extern cVar_t *cg_advInfrared; 355 extern cVar_t *cg_brassTime; 356 extern cVar_t *cg_decals; 357 extern cVar_t *cg_decalBurnLife; 358 extern cVar_t *cg_decalFadeTime; 359 extern cVar_t *cg_decalLife; 360 extern cVar_t *cg_decalLOD; 361 extern cVar_t *cg_decalMax; 362 extern cVar_t *cg_mapEffects; 363 extern cVar_t *cl_add_particles; 364 extern cVar_t *cg_particleCulling; 365 extern cVar_t *cg_particleGore; 366 extern cVar_t *cg_particleMax; 367 extern cVar_t *cg_particleShading; 368 extern cVar_t *cg_particleSmokeLinger; 369 extern cVar_t *cg_railCoreRed; 370 extern cVar_t *cg_railCoreGreen; 371 extern cVar_t *cg_railCoreBlue; 372 extern cVar_t *cg_railSpiral; 373 extern cVar_t *cg_railSpiralRed; 374 extern cVar_t *cg_railSpiralGreen; 375 extern cVar_t *cg_railSpiralBlue; 376 extern cVar_t *cg_thirdPerson; 377 extern cVar_t *cg_thirdPersonAngle; 378 extern cVar_t *cg_thirdPersonClip; 379 extern cVar_t *cg_thirdPersonDist; 380 381 extern cVar_t *cl_explorattle; 382 extern cVar_t *cl_explorattle_scale; 383 extern cVar_t *cl_footsteps; 384 extern cVar_t *cl_gun; 385 extern cVar_t *cl_noskins; 386 extern cVar_t *cl_predict; 387 extern cVar_t *cl_showmiss; 388 extern cVar_t *cl_vwep; 389 390 extern cVar_t *crosshair; 391 392 extern cVar_t *gender_auto; 393 extern cVar_t *gender; 394 extern cVar_t *hand; 395 extern cVar_t *skin; 396 397 extern cVar_t *glm_advgas; 398 extern cVar_t *glm_advstingfire; 399 extern cVar_t *glm_blobtype; 400 extern cVar_t *glm_bluestingfire; 401 extern cVar_t *glm_flashpred; 402 extern cVar_t *glm_flwhite; 403 extern cVar_t *glm_forcecache; 404 extern cVar_t *glm_jumppred; 405 extern cVar_t *glm_showclass; 406 407 408 extern cVar_t *cl_testblend; 409 extern cVar_t *cl_testentities; 410 extern cVar_t *cl_testlights; 411 extern cVar_t *cl_testparticles; 412 413 extern cVar_t *r_hudScale; 414 extern cVar_t *r_fontScale; 415 416 extern cVar_t *crosshair; 417 extern cVar_t *ch_alpha; 418 extern cVar_t *ch_pulse; 419 extern cVar_t *ch_scale; 420 extern cVar_t *ch_red; 421 extern cVar_t *ch_green; 422 extern cVar_t *ch_blue; 423 extern cVar_t *ch_xOffset; 424 extern cVar_t *ch_yOffset; 425 426 extern cVar_t *cl_showfps; 427 extern cVar_t *cl_showping; 428 extern cVar_t *cl_showtime; 429 430 extern cVar_t *con_chatHud; 431 extern cVar_t *con_chatHudLines; 432 extern cVar_t *con_chatHudPosX; 433 extern cVar_t *con_chatHudPosY; 434 extern cVar_t *con_chatHudShadow; 435 extern cVar_t *con_notifyfade; 436 extern cVar_t *con_notifylarge; 437 extern cVar_t *con_notifylines; 438 extern cVar_t *con_notifytime; 439 extern cVar_t *con_alpha; 440 extern cVar_t *con_clock; 441 extern cVar_t *con_drop; 442 extern cVar_t *con_scroll; 443 444 extern cVar_t *scr_conspeed; 445 extern cVar_t *scr_centertime; 446 extern cVar_t *scr_showpause; 447 extern cVar_t *scr_hudalpha; 448 449 extern cVar_t *scr_netgraph; 450 extern cVar_t *scr_timegraph; 451 extern cVar_t *scr_debuggraph; 452 extern cVar_t *scr_graphheight; 453 extern cVar_t *scr_graphscale; 454 extern cVar_t *scr_graphshift; 455 extern cVar_t *scr_graphalpha; 456 457 extern cVar_t *viewsize; 458 extern cVar_t *gl_polyblend; 459 460 /* 461 ============================================================================= 462 463 SUPPORTING FUNCTIONS 464 465 ============================================================================= 466 */ 467 468 // 469 // cg_draw.c 470 // 471 472 void CG_DrawFill (float x, float y, int w, int h, vec4_t color); 473 474 void CG_DrawModel (int x, int y, int w, int h, struct refModel_s *model, struct shader_s *shader, vec3_t origin, vec3_t angles); 475 476 // 477 // cg_main.c 478 // 479 480 void CG_SetRefConfig (refConfig_t *inConfig); 481 482 void CG_UpdateCvars (void); 483 484 void CG_LoadMap (int playerNum, int serverProtocol, qBool attractLoop, qBool strafeHack, refConfig_t *inConfig); 485 486 void CG_Init (void); 487 void CG_Shutdown (void); 488 489 // 490 // cg_muzzleflash.c 491 // 492 493 void CG_ParseMuzzleFlash (void); 494 void CG_ParseMuzzleFlash2 (void); 495 496 // 497 // cg_players.c 498 // 499 500 extern char cg_weaponModels[MAX_CLIENTWEAPONMODELS][MAX_CFGSTRLEN]; 501 extern int cg_numWeaponModels; 502 503 int CG_GloomClassForModel (char *model, char *skin); 504 void CG_LoadClientinfo (clientInfo_t *ci, char *skin); 505 506 void CG_StartSound (vec3_t origin, int entNum, entChannel_t entChannel, int soundNum, float volume, float attenuation, float timeOffset); 507 void CG_FixUpGender (void); 508 509 // 510 // cg_parse.c 511 // 512 513 void CG_ParseClientinfo (int player); 514 515 void CG_ParseConfigString (int num, char *str); 516 517 void CG_StartServerMessage (void); 518 void CG_EndServerMessage (int realTime); 519 qBool CG_ParseServerMessage (int command); 520 521 /* 522 ============================================================================= 523 524 INTERFACES 525 526 ============================================================================= 527 */ 528 529 // 530 // cg_loadscreen.c 531 // 532 533 void CG_IncLoadPercent (float increment); 534 void CG_LoadingPercent (float percent); 535 void CG_LoadingString (char *str); 536 void CG_LoadingFilename (char *str); 537 538 void CG_UpdateConnectInfo (char *serverName, char *serverMessage, int connectCount, char *dlFileName, int dlPercent, float bytesDownloaded); 539 void CG_DrawConnectScreen (void); 540 541 #endif // __CGAME_LOCAL_H__ 542