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