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_media.c
22 //
23
24 #include "cg_local.h"
25
26 vec3_t cg_randVels[NUMVERTEXNORMALS];
27
28 static float cg_curLoadRange;
29
30 /*
31 =============================================================================
32
33 MEDIA INITIALIZATION
34
35 =============================================================================
36 */
37
38 /*
39 ================
40 CG_InitBaseMedia
41 ================
42 */
CG_InitBaseMedia(void)43 void CG_InitBaseMedia (void)
44 {
45 int i;
46
47 // CGame media
48 cgMedia.noTexture = cgi.R_RegisterPic ("***r_noTexture***");
49 cgMedia.whiteTexture = cgi.R_RegisterPic ("***r_whiteTexture***");
50 cgMedia.blackTexture = cgi.R_RegisterPic ("***r_blackTexture***");
51
52 cgMedia.tileBackShader = cgi.R_RegisterPic ("pics/backtile.tga");
53
54 cgMedia.alienInfraredVision = cgi.R_RegisterPic ("alienInfraredVision");
55 cgMedia.infraredGoggles = cgi.R_RegisterPic ("infraredGoggles");
56
57 cgMedia.consoleShader = cgi.R_RegisterPic ("pics/conback.tga");
58
59 cgMedia.loadSplash = cgi.R_RegisterPic ("egl/ui/loadscreen/loadsplash.tga");
60 cgMedia.loadBarPos = cgi.R_RegisterPic ("egl/ui/loadscreen/barpos.tga");
61 cgMedia.loadBarNeg = cgi.R_RegisterPic ("egl/ui/loadscreen/barneg.tga");
62 cgMedia.loadNoMapShot = cgi.R_RegisterPic ("egl/ui/loadscreen/unknownmap.tga");
63
64 cgMedia.defaultFont = cgi.R_RegisterFont ("default");
65
66 // Menu image media
67 uiMedia.bgBig = cgi.R_RegisterPic ("egl/ui/bg_big.tga");
68
69 uiMedia.cursorShader = cgi.R_RegisterPic ("egl/ui/cursor.tga");
70 uiMedia.cursorHoverShader = cgi.R_RegisterPic ("egl/ui/cursorhover.tga");
71
72 cgi.R_GetImageSize (uiMedia.cursorShader, &uiState.cursorW, &uiState.cursorH);
73
74 // Banners
75 uiMedia.banners.addressBook = cgi.R_RegisterPic ("pics/m_banner_addressbook.tga");
76 uiMedia.banners.multiplayer = cgi.R_RegisterPic ("pics/m_banner_multiplayer.tga");
77 uiMedia.banners.startServer = cgi.R_RegisterPic ("pics/m_banner_start_server.tga");
78 uiMedia.banners.joinServer = cgi.R_RegisterPic ("pics/m_banner_join_server.tga");
79 uiMedia.banners.options = cgi.R_RegisterPic ("pics/m_banner_options.tga");
80 uiMedia.banners.game = cgi.R_RegisterPic ("pics/m_banner_game.tga");
81 uiMedia.banners.loadGame = cgi.R_RegisterPic ("pics/m_banner_load_game.tga");
82 uiMedia.banners.saveGame = cgi.R_RegisterPic ("pics/m_banner_save_game.tga");
83 uiMedia.banners.video = cgi.R_RegisterPic ("pics/m_banner_video.tga");
84 uiMedia.banners.quit = cgi.R_RegisterPic ("pics/m_main_quit.tga");
85
86 // Main menu cursors
87 for (i=0 ; i<MAINMENU_CURSOR_NUMFRAMES ; i++)
88 uiMedia.menus.mainCursors[i] = cgi.R_RegisterPic (Q_VarArgs ("pics/m_cursor%d.tga", i));
89
90 // Main menu
91 uiMedia.menus.mainPlaque = cgi.R_RegisterPic ("pics/m_main_plaque.tga");
92 uiMedia.menus.mainLogo = cgi.R_RegisterPic ("pics/m_main_logo.tga");
93
94 uiMedia.menus.mainGame = cgi.R_RegisterPic ("pics/m_main_game.tga");
95 uiMedia.menus.mainMultiplayer = cgi.R_RegisterPic ("pics/m_main_multiplayer.tga");
96 uiMedia.menus.mainOptions = cgi.R_RegisterPic ("pics/m_main_options.tga");
97 uiMedia.menus.mainVideo = cgi.R_RegisterPic ("pics/m_main_video.tga");
98 uiMedia.menus.mainQuit = cgi.R_RegisterPic ("pics/m_main_quit.tga");
99
100 uiMedia.menus.mainGameSel = cgi.R_RegisterPic ("pics/m_main_game_sel.tga");
101 uiMedia.menus.mainMultiplayerSel = cgi.R_RegisterPic ("pics/m_main_multiplayer_sel.tga");
102 uiMedia.menus.mainOptionsSel = cgi.R_RegisterPic ("pics/m_main_options_sel.tga");
103 uiMedia.menus.mainVideoSel = cgi.R_RegisterPic ("pics/m_main_video_sel.tga");
104 uiMedia.menus.mainQuitSel = cgi.R_RegisterPic ("pics/m_main_quit_sel.tga");
105 }
106
107
108 /*
109 ================
110 CG_MapMediaInit
111 ================
112 */
CG_MapMediaInit(void)113 static void CG_MapMediaInit (void)
114 {
115 float rotate, pctInc;
116 vec3_t axis;
117 int i, j;
118
119 if (!cg.configStrings[CS_MODELS+1][0])
120 return;
121
122 // Register models, pics, and skins
123 CG_LoadingString ("Loading map and textures...");
124 cgi.R_RegisterMap (cg.configStrings[CS_MODELS+1]);
125
126 CG_IncLoadPercent (cg_curLoadRange * 0.125f);
127
128 // Register map effects
129 CG_LoadingString ("Loading map fx...");
130 CG_MapFXLoad (cg.configStrings[CS_MODELS+1]);
131
132 // Register locations
133 CG_LoadingString ("Locations...");
134 CG_LoadLocations (cg.configStrings[CS_MODELS+1]);
135
136 CG_IncLoadPercent (cg_curLoadRange * 0.025f);
137
138 // Load models
139 CG_LoadingString ("Loading models...");
140 cg_numWeaponModels = 1;
141 Q_strncpyz (cg_weaponModels[0], "weapon.md2", sizeof (cg_weaponModels[0]));
142 for (i=1 ; i<MAX_CS_MODELS && cg.configStrings[CS_MODELS+i][0] ; i++) ;
143 pctInc = 1.0f/(float)i;
144
145 for (i=1 ; i<MAX_CS_MODELS && cg.configStrings[CS_MODELS+i][0] ; i++) {
146 switch (cg.configStrings[CS_MODELS+i][0]) {
147 case '*':
148 CG_LoadingFilename (Q_VarArgs ("Inline: #%s", cg.configStrings[CS_MODELS+i]+1));
149 cg.modelCfgDraw[i] = cgi.R_RegisterModel (cg.configStrings[CS_MODELS+i]);
150 cg.modelCfgClip[i] = cgi.CM_InlineModel (cg.configStrings[CS_MODELS+i]);
151 break;
152
153 case '#':
154 if (cg_numWeaponModels < MAX_CLIENTWEAPONMODELS) {
155 Q_strncpyz (cg_weaponModels[cg_numWeaponModels], cg.configStrings[CS_MODELS+i]+1, sizeof (cg_weaponModels[0]));
156 cg_numWeaponModels++;
157 }
158 CG_LoadingFilename (Q_VarArgs ("Weapon: %s\n", cg.configStrings[CS_MODELS+i]+1));
159 cg.modelCfgDraw[i] = cgi.R_RegisterModel (cg.configStrings[CS_MODELS+i]);
160 cg.modelCfgClip[i] = NULL;
161 break;
162
163 default:
164 CG_LoadingFilename (cg.configStrings[CS_MODELS+i]);
165 cg.modelCfgDraw[i] = cgi.R_RegisterModel (cg.configStrings[CS_MODELS+i]);
166 cg.modelCfgClip[i] = NULL;
167 break;
168 }
169
170 CG_IncLoadPercent (pctInc*(cg_curLoadRange * 0.35f));
171 CG_LoadingFilename (0);
172 }
173
174 // Images
175 CG_LoadingString ("Loading images...");
176 for (i=1 ; i<MAX_CS_IMAGES && cg.configStrings[CS_IMAGES+i][0] ; i++) ;
177 pctInc = 1.0f/(float)i;
178
179 for (i=1 ; i<MAX_CS_IMAGES && cg.configStrings[CS_IMAGES+i][0] ; i++) {
180 CG_LoadingFilename (cg.configStrings[CS_IMAGES+i]);
181 cg.imageCfgStrings[i] = CG_RegisterPic (cg.configStrings[CS_IMAGES+i]);
182 CG_IncLoadPercent (pctInc*(cg_curLoadRange * 0.2f));
183 }
184 CG_LoadingFilename (0);
185
186 // Clients
187 CG_LoadingString ("Loading clientinfo...");
188 for (i=0, j=0 ; i<MAX_CS_CLIENTS ; i++) {
189 if (!cg.configStrings[CS_PLAYERSKINS+i][0])
190 continue;
191 j++;
192 }
193 pctInc = 1.0f/(float)j;
194
195 for (i=0 ; i<MAX_CS_CLIENTS ; i++) {
196 if (!cg.configStrings[CS_PLAYERSKINS+i][0])
197 continue;
198
199 CG_LoadingFilename (Q_VarArgs ("Client #%i", i));
200 CG_ParseClientinfo (i);
201 CG_IncLoadPercent (pctInc*(cg_curLoadRange * 0.15f));
202 }
203
204 CG_LoadingFilename ("Base client info");
205 CG_LoadClientinfo (&cg.baseClientInfo, "unnamed\\male/grunt");
206 CG_LoadingFilename (0);
207
208 CG_IncLoadPercent (cg_curLoadRange * 0.05f);
209
210 // Set sky textures and speed
211 CG_LoadingString ("Loading sky env...");
212 rotate = (float)atof (cg.configStrings[CS_SKYROTATE]);
213 sscanf (cg.configStrings[CS_SKYAXIS], "%f %f %f", &axis[0], &axis[1], &axis[2]);
214 cgi.R_SetSky (cg.configStrings[CS_SKY], rotate, axis);
215 }
216
217
218 /*
219 ================
220 CG_ModelMediaInit
221 ================
222 */
CG_ModelMediaInit(void)223 static void CG_ModelMediaInit (void)
224 {
225 CG_LoadingString ("Loading model media...");
226 CG_LoadingFilename ("Segment models");
227
228 cgMedia.parasiteSegmentModel = cgi.R_RegisterModel ("models/monsters/parasite/segment/tris.md2");
229 cgMedia.grappleCableModel = cgi.R_RegisterModel ("models/ctf/segment/tris.md2");
230 cgMedia.powerScreenModel = cgi.R_RegisterModel ("models/items/armor/effect/tris.md2");
231
232 CG_IncLoadPercent (cg_curLoadRange * 0.25f);
233 CG_LoadingFilename ("Local models");
234
235 cgMedia.brassMGModel = cgi.R_RegisterModel ("egl/models/brass/mg/tris.md3");
236 cgMedia.brassSGModel = cgi.R_RegisterModel ("egl/models/brass/sg/tris.md3");
237
238 CG_IncLoadPercent (cg_curLoadRange * 0.25f);
239 CG_LoadingFilename ("Beam models");
240
241 cgMedia.lightningModel = cgi.R_RegisterModel ("models/proj/lightning/tris.md2");
242 cgMedia.heatBeamModel = cgi.R_RegisterModel ("models/proj/beam/tris.md2");
243 cgMedia.monsterHeatBeamModel = cgi.R_RegisterModel ("models/proj/widowbeam/tris.md2");
244
245 CG_IncLoadPercent (cg_curLoadRange * 0.25f);
246 CG_LoadingFilename ("Disguise models");
247
248 cgMedia.maleDisguiseModel = cgi.R_RegisterModel ("players/male/tris.md2");
249 cgMedia.femaleDisguiseModel = cgi.R_RegisterModel ("players/female/tris.md2");
250 cgMedia.cyborgDisguiseModel = cgi.R_RegisterModel ("players/cyborg/tris.md2");
251
252 CG_LoadingFilename (0);
253 }
254
255
256 /*
257 ================
258 CG_CrosshairShaderInit
259 ================
260 */
CG_CrosshairShaderInit(void)261 void CG_CrosshairShaderInit (void)
262 {
263 crosshair->modified = qFalse;
264 if (crosshair->intVal) {
265 crosshair->intVal = (crosshair->intVal < 0) ? 0 : crosshair->intVal;
266
267 cgMedia.crosshairShader = cgi.R_RegisterPic (Q_VarArgs ("pics/ch%d.tga", crosshair->intVal));
268 }
269 }
270
271
272 /*
273 ================
274 CG_PicMediaInit
275 ================
276 */
CG_PicMediaInit(void)277 static void CG_PicMediaInit (void)
278 {
279 int i, j;
280 static char *sb_nums[2][11] = {
281 {"num_0", "num_1", "num_2", "num_3", "num_4", "num_5", "num_6", "num_7", "num_8", "num_9", "num_minus"},
282 {"anum_0", "anum_1", "anum_2", "anum_3", "anum_4", "anum_5", "anum_6", "anum_7", "anum_8", "anum_9", "anum_minus"}
283 };
284
285 CG_LoadingString ("Loading image media...");
286 CG_LoadingFilename ("Crosshair");
287
288 CG_CrosshairShaderInit ();
289
290 CG_IncLoadPercent (cg_curLoadRange * 0.25f);
291 CG_LoadingFilename ("Pics");
292
293 cgi.R_RegisterPic ("pics/w_machinegun.tga");
294 cgi.R_RegisterPic ("pics/a_bullets.tga");
295 cgi.R_RegisterPic ("pics/i_health.tga");
296 cgi.R_RegisterPic ("pics/a_grenades.tga");
297
298 CG_IncLoadPercent (cg_curLoadRange * 0.25f);
299 CG_LoadingFilename ("HUD");
300
301 cgMedia.hudFieldShader = cgi.R_RegisterPic ("pics/field_3.tga");
302 cgMedia.hudInventoryShader = cgi.R_RegisterPic ("pics/inventory.tga");
303 cgMedia.hudNetShader = cgi.R_RegisterPic ("pics/net.tga");
304 for (i=0 ; i<2 ; i++) {
305 for (j=0 ; j<11 ; j++)
306 cgMedia.hudNumShaders[i][j] = cgi.R_RegisterPic (Q_VarArgs ("pics/%s.tga", sb_nums[i][j]));
307 }
308 cgMedia.hudPausedShader = cgi.R_RegisterPic ("pics/pause.tga");
309
310 CG_IncLoadPercent (cg_curLoadRange * 0.25f);
311 CG_LoadingFilename ("Disguise skins");
312
313 cgMedia.maleDisguiseSkin = cgi.R_RegisterSkin ("players/male/disguise.tga");
314 cgMedia.femaleDisguiseSkin = cgi.R_RegisterSkin ("players/female/disguise.tga");
315 cgMedia.cyborgDisguiseSkin = cgi.R_RegisterSkin ("players/cyborg/disguise.tga");
316
317 CG_LoadingFilename ("Shell skins");
318 cgMedia.modelShellGod = cgi.R_RegisterSkin ("shell_god");
319 cgMedia.modelShellHalfDam = cgi.R_RegisterSkin ("shell_halfdam");
320 cgMedia.modelShellDouble = cgi.R_RegisterSkin ("shell_double");
321 cgMedia.modelShellRed = cgi.R_RegisterSkin ("shell_red");
322 cgMedia.modelShellGreen = cgi.R_RegisterSkin ("shell_green");
323 cgMedia.modelShellBlue = cgi.R_RegisterSkin ("shell_blue");
324
325 CG_LoadingFilename (0);
326 }
327
328
329 /*
330 ================
331 CG_FXMediaInit
332 ================
333 */
CG_FXMediaInit(void)334 static void CG_FXMediaInit (void)
335 {
336 int i;
337
338 // Particles / Decals
339 CG_LoadingString ("Loading effect media...");
340 CG_LoadingFilename ("Particles");
341
342 for (i=0 ; i<(NUMVERTEXNORMALS*3) ; i++)
343 cg_randVels[0][i] = (frand () * 255) * 0.01f;
344
345 cgMedia.particleTable[PT_BFG_DOT] = cgi.R_RegisterPoly ("egl/parts/bfg_dot.tga");
346
347 cgMedia.particleTable[PT_BLASTER_BLUE] = cgi.R_RegisterPoly ("egl/parts/blaster_blue.tga");
348 cgMedia.particleTable[PT_BLASTER_GREEN] = cgi.R_RegisterPoly ("egl/parts/blaster_green.tga");
349 cgMedia.particleTable[PT_BLASTER_RED] = cgi.R_RegisterPoly ("egl/parts/blaster_red.tga");
350
351 cgMedia.particleTable[PT_IONTAIL] = cgi.R_RegisterPoly ("egl/parts/iontail.tga");
352 cgMedia.particleTable[PT_IONTIP] = cgi.R_RegisterPoly ("egl/parts/iontip.tga");
353 cgMedia.particleTable[PT_ITEMRESPAWN] = cgi.R_RegisterPoly ("egl/parts/respawn_dots.tga");
354 cgMedia.particleTable[PT_ENGYREPAIR_DOT]= cgi.R_RegisterPoly ("egl/parts/engy_repair_dot.tga");
355 cgMedia.particleTable[PT_PHALANXTIP] = cgi.R_RegisterPoly ("egl/parts/phalanxtip.tga");
356
357 cgMedia.particleTable[PT_GENERIC] = cgi.R_RegisterPoly ("egl/parts/generic.tga");
358 cgMedia.particleTable[PT_GENERIC_GLOW] = cgi.R_RegisterPoly ("egl/parts/generic_glow.tga");
359
360 cgMedia.particleTable[PT_SMOKE] = cgi.R_RegisterPoly ("egl/parts/smoke1.tga");
361 cgMedia.particleTable[PT_SMOKE2] = cgi.R_RegisterPoly ("egl/parts/smoke2.tga");
362
363 cgMedia.particleTable[PT_SMOKEGLOW] = cgi.R_RegisterPoly ("egl/parts/smoke_glow.tga");
364 cgMedia.particleTable[PT_SMOKEGLOW2] = cgi.R_RegisterPoly ("egl/parts/smoke_glow2.tga");
365
366 cgMedia.particleTable[PT_BLUEFIRE] = cgi.R_RegisterPoly ("egl/parts/bluefire.tga");
367 cgMedia.particleTable[PT_FIRE1] = cgi.R_RegisterPoly ("egl/parts/fire1.tga");
368 cgMedia.particleTable[PT_FIRE2] = cgi.R_RegisterPoly ("egl/parts/fire2.tga");
369 cgMedia.particleTable[PT_FIRE3] = cgi.R_RegisterPoly ("egl/parts/fire3.tga");
370 cgMedia.particleTable[PT_FIRE4] = cgi.R_RegisterPoly ("egl/parts/fire4.tga");
371 cgMedia.particleTable[PT_EMBERS1] = cgi.R_RegisterPoly ("egl/parts/embers1.tga");
372 cgMedia.particleTable[PT_EMBERS2] = cgi.R_RegisterPoly ("egl/parts/embers2.tga");
373 cgMedia.particleTable[PT_EMBERS3] = cgi.R_RegisterPoly ("egl/parts/embers3.tga");
374
375 cgMedia.particleTable[PT_BLOOD] = cgi.R_RegisterPoly ("egl/parts/blood.tga");
376 cgMedia.particleTable[PT_BLOOD2] = cgi.R_RegisterPoly ("egl/parts/blood2.tga");
377 cgMedia.particleTable[PT_BLOOD3] = cgi.R_RegisterPoly ("egl/parts/blood3.tga");
378 cgMedia.particleTable[PT_BLOOD4] = cgi.R_RegisterPoly ("egl/parts/blood4.tga");
379 cgMedia.particleTable[PT_BLOOD5] = cgi.R_RegisterPoly ("egl/parts/blood5.tga");
380 cgMedia.particleTable[PT_BLOOD6] = cgi.R_RegisterPoly ("egl/parts/blood6.tga");
381
382 cgMedia.particleTable[PT_GRNBLOOD] = cgi.R_RegisterPoly ("egl/parts/blood_grn.tga");
383 cgMedia.particleTable[PT_GRNBLOOD2] = cgi.R_RegisterPoly ("egl/parts/blood_grn2.tga");
384 cgMedia.particleTable[PT_GRNBLOOD3] = cgi.R_RegisterPoly ("egl/parts/blood_grn3.tga");
385 cgMedia.particleTable[PT_GRNBLOOD4] = cgi.R_RegisterPoly ("egl/parts/blood_grn4.tga");
386 cgMedia.particleTable[PT_GRNBLOOD5] = cgi.R_RegisterPoly ("egl/parts/blood_grn5.tga");
387 cgMedia.particleTable[PT_GRNBLOOD6] = cgi.R_RegisterPoly ("egl/parts/blood_grn6.tga");
388
389 cgMedia.particleTable[PT_BLDDRIP01] = cgi.R_RegisterPoly ("egl/parts/blooddrip01.tga");
390 cgMedia.particleTable[PT_BLDDRIP02] = cgi.R_RegisterPoly ("egl/parts/blooddrip02.tga");
391 cgMedia.particleTable[PT_BLDDRIP01_GRN] = cgi.R_RegisterPoly ("egl/parts/blooddrip01_green.tga");
392 cgMedia.particleTable[PT_BLDDRIP02_GRN] = cgi.R_RegisterPoly ("egl/parts/blooddrip02_green.tga");
393 cgMedia.particleTable[PT_BLDSPURT] = cgi.R_RegisterPoly ("egl/parts/bloodspurt.tga");
394 cgMedia.particleTable[PT_BLDSPURT2] = cgi.R_RegisterPoly ("egl/parts/bloodspurt2.tga");
395
396 CG_IncLoadPercent (cg_curLoadRange * 0.25f);
397
398 cgMedia.particleTable[PT_BEAM] = cgi.R_RegisterPoly ("egl/parts/beam.tga");
399
400 cgMedia.particleTable[PT_EXPLOFLASH] = cgi.R_RegisterPoly ("egl/parts/exploflash.tga");
401 cgMedia.particleTable[PT_EXPLOWAVE] = cgi.R_RegisterPoly ("egl/parts/explowave.tga");
402
403 cgMedia.particleTable[PT_FLARE] = cgi.R_RegisterPoly ("egl/parts/flare.tga");
404 cgMedia.particleTable[PT_FLAREGLOW] = cgi.R_RegisterPoly ("egl/parts/flare_glow.tga");
405
406 cgMedia.particleTable[PT_FLY] = cgi.R_RegisterPoly ("egl/parts/fly.tga");
407
408 cgMedia.particleTable[PT_RAIL_CORE] = cgi.R_RegisterPoly ("egl/parts/rail_core.tga");
409 cgMedia.particleTable[PT_RAIL_WAVE] = cgi.R_RegisterPoly ("egl/parts/rail_wave.tga");
410 cgMedia.particleTable[PT_RAIL_SPIRAL] = cgi.R_RegisterPoly ("egl/parts/rail_spiral.tga");
411
412 cgMedia.particleTable[PT_SPARK] = cgi.R_RegisterPoly ("egl/parts/spark.tga");
413
414 cgMedia.particleTable[PT_WATERBUBBLE] = cgi.R_RegisterPoly ("egl/parts/water_bubble.tga");
415 cgMedia.particleTable[PT_WATERDROPLET] = cgi.R_RegisterPoly ("egl/parts/water_droplet.tga");
416 cgMedia.particleTable[PT_WATERIMPACT] = cgi.R_RegisterPoly ("egl/parts/water_impact.tga");
417 cgMedia.particleTable[PT_WATERMIST] = cgi.R_RegisterPoly ("egl/parts/water_mist.tga");
418 cgMedia.particleTable[PT_WATERMIST_GLOW] = cgi.R_RegisterPoly ("egl/parts/water_mist_glow.tga");
419 cgMedia.particleTable[PT_WATERPLUME] = cgi.R_RegisterPoly ("egl/parts/water_plume.tga");
420 cgMedia.particleTable[PT_WATERPLUME_GLOW] = cgi.R_RegisterPoly ("egl/parts/water_plume_glow.tga");
421 cgMedia.particleTable[PT_WATERRING] = cgi.R_RegisterPoly ("egl/parts/water_ring.tga");
422 cgMedia.particleTable[PT_WATERRIPPLE] = cgi.R_RegisterPoly ("egl/parts/water_ripple.tga");
423
424 // Animated explosions
425 CG_IncLoadPercent (cg_curLoadRange * 0.25f);
426 CG_LoadingFilename ("Explosions");
427
428 cgMedia.particleTable[PT_EXPLO1] = cgi.R_RegisterPoly ("egl/parts/explo1.tga");
429 cgMedia.particleTable[PT_EXPLO2] = cgi.R_RegisterPoly ("egl/parts/explo2.tga");
430 cgMedia.particleTable[PT_EXPLO3] = cgi.R_RegisterPoly ("egl/parts/explo3.tga");
431 cgMedia.particleTable[PT_EXPLO4] = cgi.R_RegisterPoly ("egl/parts/explo4.tga");
432 cgMedia.particleTable[PT_EXPLO5] = cgi.R_RegisterPoly ("egl/parts/explo5.tga");
433 cgMedia.particleTable[PT_EXPLO6] = cgi.R_RegisterPoly ("egl/parts/explo6.tga");
434 cgMedia.particleTable[PT_EXPLO7] = cgi.R_RegisterPoly ("egl/parts/explo7.tga");
435
436 cgMedia.particleTable[PT_EXPLOEMBERS1] = cgi.R_RegisterPoly ("egl/parts/exploembers.tga");
437 cgMedia.particleTable[PT_EXPLOEMBERS2] = cgi.R_RegisterPoly ("egl/parts/exploembers2.tga");
438
439 // mapfx media
440 CG_LoadingFilename ("MapFX Media");
441
442 cgMedia.particleTable[MFX_CORONA] = cgi.R_RegisterPoly ("egl/mfx/corona.tga");
443 cgMedia.particleTable[MFX_WHITE] = cgi.R_RegisterPoly ("egl/mfx/white.tga");
444
445 // Decal specific
446 CG_IncLoadPercent (cg_curLoadRange * 0.25f);
447 CG_LoadingFilename ("Decals");
448
449 cgMedia.decalTable[DT_BFG_BURNMARK] = cgi.R_RegisterPoly ("egl/decals/bfg_burnmark.tga");
450 cgMedia.decalTable[DT_BFG_GLOWMARK] = cgi.R_RegisterPoly ("egl/decals/bfg_glowmark.tga");
451
452 cgMedia.decalTable[DT_BLASTER_BLUEMARK] = cgi.R_RegisterPoly ("egl/decals/blaster_bluemark.tga");
453 cgMedia.decalTable[DT_BLASTER_BURNMARK] = cgi.R_RegisterPoly ("egl/decals/blaster_burnmark.tga");
454 cgMedia.decalTable[DT_BLASTER_GREENMARK] = cgi.R_RegisterPoly ("egl/decals/blaster_greenmark.tga");
455 cgMedia.decalTable[DT_BLASTER_REDMARK] = cgi.R_RegisterPoly ("egl/decals/blaster_redmark.tga");
456
457 cgMedia.decalTable[DT_DRONE_SPIT_GLOW] = cgi.R_RegisterPoly ("egl/decals/drone_spit_glow.tga");
458
459 cgMedia.decalTable[DT_ENGYREPAIR_BURNMARK] = cgi.R_RegisterPoly ("egl/decals/engy_repair_burnmark.tga");
460 cgMedia.decalTable[DT_ENGYREPAIR_GLOWMARK] = cgi.R_RegisterPoly ("egl/decals/engy_repair_glowmark.tga");
461
462 cgMedia.decalTable[DT_BLOOD01] = cgi.R_RegisterPoly ("egl/decals/blood01.tga");
463 cgMedia.decalTable[DT_BLOOD02] = cgi.R_RegisterPoly ("egl/decals/blood02.tga");
464 cgMedia.decalTable[DT_BLOOD03] = cgi.R_RegisterPoly ("egl/decals/blood03.tga");
465 cgMedia.decalTable[DT_BLOOD04] = cgi.R_RegisterPoly ("egl/decals/blood04.tga");
466 cgMedia.decalTable[DT_BLOOD05] = cgi.R_RegisterPoly ("egl/decals/blood05.tga");
467 cgMedia.decalTable[DT_BLOOD06] = cgi.R_RegisterPoly ("egl/decals/blood06.tga");
468 cgMedia.decalTable[DT_BLOOD07] = cgi.R_RegisterPoly ("egl/decals/blood07.tga");
469 cgMedia.decalTable[DT_BLOOD08] = cgi.R_RegisterPoly ("egl/decals/blood08.tga");
470 cgMedia.decalTable[DT_BLOOD09] = cgi.R_RegisterPoly ("egl/decals/blood09.tga");
471 cgMedia.decalTable[DT_BLOOD10] = cgi.R_RegisterPoly ("egl/decals/blood10.tga");
472 cgMedia.decalTable[DT_BLOOD11] = cgi.R_RegisterPoly ("egl/decals/blood11.tga");
473 cgMedia.decalTable[DT_BLOOD12] = cgi.R_RegisterPoly ("egl/decals/blood12.tga");
474 cgMedia.decalTable[DT_BLOOD13] = cgi.R_RegisterPoly ("egl/decals/blood13.tga");
475 cgMedia.decalTable[DT_BLOOD14] = cgi.R_RegisterPoly ("egl/decals/blood14.tga");
476 cgMedia.decalTable[DT_BLOOD15] = cgi.R_RegisterPoly ("egl/decals/blood15.tga");
477 cgMedia.decalTable[DT_BLOOD16] = cgi.R_RegisterPoly ("egl/decals/blood16.tga");
478
479 cgMedia.decalTable[DT_BLOOD01_GRN] = cgi.R_RegisterPoly ("egl/decals/blood01_green.tga");
480 cgMedia.decalTable[DT_BLOOD02_GRN] = cgi.R_RegisterPoly ("egl/decals/blood02_green.tga");
481 cgMedia.decalTable[DT_BLOOD03_GRN] = cgi.R_RegisterPoly ("egl/decals/blood03_green.tga");
482 cgMedia.decalTable[DT_BLOOD04_GRN] = cgi.R_RegisterPoly ("egl/decals/blood04_green.tga");
483 cgMedia.decalTable[DT_BLOOD05_GRN] = cgi.R_RegisterPoly ("egl/decals/blood05_green.tga");
484 cgMedia.decalTable[DT_BLOOD06_GRN] = cgi.R_RegisterPoly ("egl/decals/blood06_green.tga");
485 cgMedia.decalTable[DT_BLOOD07_GRN] = cgi.R_RegisterPoly ("egl/decals/blood07_green.tga");
486 cgMedia.decalTable[DT_BLOOD08_GRN] = cgi.R_RegisterPoly ("egl/decals/blood08_green.tga");
487 cgMedia.decalTable[DT_BLOOD09_GRN] = cgi.R_RegisterPoly ("egl/decals/blood09_green.tga");
488 cgMedia.decalTable[DT_BLOOD10_GRN] = cgi.R_RegisterPoly ("egl/decals/blood10_green.tga");
489 cgMedia.decalTable[DT_BLOOD11_GRN] = cgi.R_RegisterPoly ("egl/decals/blood11_green.tga");
490 cgMedia.decalTable[DT_BLOOD12_GRN] = cgi.R_RegisterPoly ("egl/decals/blood12_green.tga");
491 cgMedia.decalTable[DT_BLOOD13_GRN] = cgi.R_RegisterPoly ("egl/decals/blood13_green.tga");
492 cgMedia.decalTable[DT_BLOOD14_GRN] = cgi.R_RegisterPoly ("egl/decals/blood14_green.tga");
493 cgMedia.decalTable[DT_BLOOD15_GRN] = cgi.R_RegisterPoly ("egl/decals/blood15_green.tga");
494 cgMedia.decalTable[DT_BLOOD16_GRN] = cgi.R_RegisterPoly ("egl/decals/blood16_green.tga");
495
496 cgMedia.decalTable[DT_BULLET] = cgi.R_RegisterPoly ("egl/decals/bullet.tga");
497
498 cgMedia.decalTable[DT_EXPLOMARK] = cgi.R_RegisterPoly ("egl/decals/explomark.tga");
499 cgMedia.decalTable[DT_EXPLOMARK2] = cgi.R_RegisterPoly ("egl/decals/explomark2.tga");
500 cgMedia.decalTable[DT_EXPLOMARK3] = cgi.R_RegisterPoly ("egl/decals/explomark3.tga");
501
502 cgMedia.decalTable[DT_RAIL_BURNMARK] = cgi.R_RegisterPoly ("egl/decals/rail_burnmark.tga");
503 cgMedia.decalTable[DT_RAIL_GLOWMARK] = cgi.R_RegisterPoly ("egl/decals/rail_glowmark.tga");
504 cgMedia.decalTable[DT_RAIL_WHITE] = cgi.R_RegisterPoly ("egl/decals/rail_white.tga");
505
506 cgMedia.decalTable[DT_SLASH] = cgi.R_RegisterPoly ("egl/decals/slash.tga");
507 cgMedia.decalTable[DT_SLASH2] = cgi.R_RegisterPoly ("egl/decals/slash2.tga");
508 cgMedia.decalTable[DT_SLASH3] = cgi.R_RegisterPoly ("egl/decals/slash3.tga");
509
510 // clear filename
511 CG_LoadingFilename (0);
512 }
513
514
515 /*
516 ================
517 CG_SoundMediaInit
518
519 Called on CGame init and on snd_restart
520 ================
521 */
CG_SoundMediaInit(void)522 void CG_SoundMediaInit (void)
523 {
524 char name[MAX_QPATH];
525 int i;
526
527 CG_LoadingString ("Loading sound media...");
528
529 // UI sounds
530 uiMedia.sounds.menuIn = cgi.Snd_RegisterSound ("misc/menu1.wav");
531 uiMedia.sounds.menuMove = cgi.Snd_RegisterSound ("misc/menu2.wav");
532 uiMedia.sounds.menuOut = cgi.Snd_RegisterSound ("misc/menu3.wav");
533
534 // Generic sounds
535 cgMedia.sfx.disruptExplo = cgi.Snd_RegisterSound ("weapons/disrupthit.wav");
536 cgMedia.sfx.grenadeExplo = cgi.Snd_RegisterSound ("weapons/grenlx1a.wav");
537 cgMedia.sfx.rocketExplo = cgi.Snd_RegisterSound ("weapons/rocklx1a.wav");
538 cgMedia.sfx.waterExplo = cgi.Snd_RegisterSound ("weapons/xpld_wat.wav");
539
540 cgMedia.sfx.gib = cgi.Snd_RegisterSound ("misc/udeath.wav");
541 cgMedia.sfx.gibSplat[0] = cgi.Snd_RegisterSound ("egl/gibimp1.wav");
542 cgMedia.sfx.gibSplat[1] = cgi.Snd_RegisterSound ("egl/gibimp2.wav");
543 cgMedia.sfx.gibSplat[2] = cgi.Snd_RegisterSound ("egl/gibimp3.wav");
544
545 CG_IncLoadPercent (cg_curLoadRange * 0.2f);
546
547 cgMedia.sfx.itemRespawn = cgi.Snd_RegisterSound ("items/respawn1.wav");
548 cgMedia.sfx.laserHit = cgi.Snd_RegisterSound ("weapons/lashit.wav");
549 cgMedia.sfx.lightning = cgi.Snd_RegisterSound ("weapons/tesla.wav");
550
551 cgMedia.sfx.playerFall = cgi.Snd_RegisterSound ("*fall2.wav");
552 cgMedia.sfx.playerFallShort = cgi.Snd_RegisterSound ("player/land1.wav");
553 cgMedia.sfx.playerFallFar = cgi.Snd_RegisterSound ("*fall1.wav");
554
555 cgMedia.sfx.playerTeleport = cgi.Snd_RegisterSound ("misc/tele1.wav");
556 cgMedia.sfx.bigTeleport = cgi.Snd_RegisterSound ("misc/bigtele.wav");
557
558 for (i=0 ; i<7 ; i++) {
559 CG_IncLoadPercent (cg_curLoadRange * 0.02f);
560
561 Q_snprintfz (name, sizeof (name), "world/spark%i.wav", i+1);
562 cgMedia.sfx.spark[i] = cgi.Snd_RegisterSound (name);
563
564 if (i > 5)
565 continue;
566
567 Q_snprintfz (name, sizeof (name), "egl/steps/snow%i.wav", i+1);
568 cgMedia.sfx.steps.snow[i] = cgi.Snd_RegisterSound (name);
569
570 if (i > 3)
571 continue;
572
573 Q_snprintfz (name, sizeof (name), "player/step%i.wav", i+1);
574 cgMedia.sfx.steps.standard[i] = cgi.Snd_RegisterSound (name);
575
576
577 Q_snprintfz (name, sizeof (name), "egl/steps/concrete%i.wav", i+1);
578 cgMedia.sfx.steps.concrete[i] = cgi.Snd_RegisterSound (name);
579
580 Q_snprintfz (name, sizeof (name), "egl/steps/dirt%i.wav", i+1);
581 cgMedia.sfx.steps.dirt[i] = cgi.Snd_RegisterSound (name);
582
583 Q_snprintfz (name, sizeof (name), "egl/steps/duct%i.wav", i+1);
584 cgMedia.sfx.steps.duct[i] = cgi.Snd_RegisterSound (name);
585
586 Q_snprintfz (name, sizeof (name), "egl/steps/grass%i.wav", i+1);
587 cgMedia.sfx.steps.grass[i] = cgi.Snd_RegisterSound (name);
588
589 Q_snprintfz (name, sizeof (name), "egl/steps/gravel%i.wav", i+1);
590 cgMedia.sfx.steps.gravel[i] = cgi.Snd_RegisterSound (name);
591
592 Q_snprintfz (name, sizeof (name), "egl/steps/metal%i.wav", i+1);
593 cgMedia.sfx.steps.metal[i] = cgi.Snd_RegisterSound (name);
594
595 Q_snprintfz (name, sizeof (name), "egl/steps/metalgrate%i.wav", i+1);
596 cgMedia.sfx.steps.metalGrate[i] = cgi.Snd_RegisterSound (name);
597
598 Q_snprintfz (name, sizeof (name), "egl/steps/metalladder%i.wav", i+1);
599 cgMedia.sfx.steps.metalLadder[i] = cgi.Snd_RegisterSound (name);
600
601 Q_snprintfz (name, sizeof (name), "egl/steps/mud%i.wav", i+1);
602 cgMedia.sfx.steps.mud[i] = cgi.Snd_RegisterSound (name);
603
604 Q_snprintfz (name, sizeof (name), "egl/steps/sand%i.wav", i+1);
605 cgMedia.sfx.steps.sand[i] = cgi.Snd_RegisterSound (name);
606
607 Q_snprintfz (name, sizeof (name), "egl/steps/slosh%i.wav", i+1);
608 cgMedia.sfx.steps.slosh[i] = cgi.Snd_RegisterSound (name);
609
610 Q_snprintfz (name, sizeof (name), "egl/steps/tile%i.wav", i+1);
611 cgMedia.sfx.steps.tile[i] = cgi.Snd_RegisterSound (name);
612
613 Q_snprintfz (name, sizeof (name), "egl/steps/wade%i.wav", i+1);
614 cgMedia.sfx.steps.wade[i] = cgi.Snd_RegisterSound (name);
615
616 Q_snprintfz (name, sizeof (name), "egl/steps/wood%i.wav", i+1);
617 cgMedia.sfx.steps.wood[i] = cgi.Snd_RegisterSound (name);
618
619 Q_snprintfz (name, sizeof (name), "egl/steps/woodpanel%i.wav", i+1);
620 cgMedia.sfx.steps.woodPanel[i] = cgi.Snd_RegisterSound (name);
621
622 if (i > 2)
623 continue;
624
625 Q_snprintfz (name, sizeof (name), "world/ric%i.wav", i+1);
626 cgMedia.sfx.ricochet[i] = cgi.Snd_RegisterSound (name);
627 }
628
629 CG_IncLoadPercent (cg_curLoadRange * 0.2f);
630 CG_LoadingFilename ("Muzzle flashes");
631
632 // Muzzleflash sounds
633 cgMedia.sfx.mz.bfgFireSfx = cgi.Snd_RegisterSound ("weapons/bfg__f1y.wav");
634 cgMedia.sfx.mz.blasterFireSfx = cgi.Snd_RegisterSound ("weapons/blastf1a.wav");
635 cgMedia.sfx.mz.etfRifleFireSfx = cgi.Snd_RegisterSound ("weapons/nail1.wav");
636 cgMedia.sfx.mz.grenadeFireSfx = cgi.Snd_RegisterSound ("weapons/grenlf1a.wav");
637 cgMedia.sfx.mz.grenadeReloadSfx = cgi.Snd_RegisterSound ("weapons/grenlr1b.wav");
638 cgMedia.sfx.mz.hyperBlasterFireSfx = cgi.Snd_RegisterSound ("weapons/hyprbf1a.wav");
639 cgMedia.sfx.mz.ionRipperFireSfx = cgi.Snd_RegisterSound ("weapons/rippfire.wav");
640
641 for (i=0 ; i<5 ; i++) {
642 Q_snprintfz (name, sizeof (name), "weapons/machgf%ib.wav", i+1);
643 cgMedia.sfx.mz.machineGunSfx[i] = cgi.Snd_RegisterSound (name);
644 }
645
646 cgMedia.sfx.mz.phalanxFireSfx = cgi.Snd_RegisterSound ("weapons/plasshot.wav");
647 cgMedia.sfx.mz.railgunFireSfx = cgi.Snd_RegisterSound ("weapons/railgf1a.wav");
648 cgMedia.sfx.mz.railgunReloadSfx = cgi.Snd_RegisterSound ("weapons/railgr1a.wav");
649 cgMedia.sfx.mz.rocketFireSfx = cgi.Snd_RegisterSound ("weapons/rocklf1a.wav");
650 cgMedia.sfx.mz.rocketReloadSfx = cgi.Snd_RegisterSound ("weapons/rocklr1b.wav");
651 cgMedia.sfx.mz.shotgunFireSfx = cgi.Snd_RegisterSound ("weapons/shotgf1b.wav");
652 cgMedia.sfx.mz.shotgun2FireSfx = cgi.Snd_RegisterSound ("weapons/shotg2.wav");
653 cgMedia.sfx.mz.shotgunReloadSfx = cgi.Snd_RegisterSound ("weapons/shotgr1b.wav");
654 cgMedia.sfx.mz.superShotgunFireSfx = cgi.Snd_RegisterSound ("weapons/sshotf1b.wav");
655 cgMedia.sfx.mz.trackerFireSfx = cgi.Snd_RegisterSound ("weapons/disint2.wav");
656
657 CG_IncLoadPercent (cg_curLoadRange * 0.2f);
658
659 // Monster muzzleflash sounds
660 cgMedia.sfx.mz2.chicRocketSfx = cgi.Snd_RegisterSound ("chick/chkatck2.wav");
661 cgMedia.sfx.mz2.floatBlasterSfx = cgi.Snd_RegisterSound ("floater/fltatck1.wav");
662 cgMedia.sfx.mz2.flyerBlasterSfx = cgi.Snd_RegisterSound ("flyer/flyatck3.wav");
663 cgMedia.sfx.mz2.gunnerGrenadeSfx = cgi.Snd_RegisterSound ("gunner/gunatck3.wav");
664 cgMedia.sfx.mz2.gunnerMachGunSfx = cgi.Snd_RegisterSound ("gunner/gunatck2.wav");
665 cgMedia.sfx.mz2.hoverBlasterSfx = cgi.Snd_RegisterSound ("hover/hovatck1.wav");
666 cgMedia.sfx.mz2.jorgMachGunSfx = cgi.Snd_RegisterSound ("boss3/xfire.wav");
667 cgMedia.sfx.mz2.machGunSfx = cgi.Snd_RegisterSound ("infantry/infatck1.wav");
668 cgMedia.sfx.mz2.makronBlasterSfx = cgi.Snd_RegisterSound ("makron/blaster.wav");
669 cgMedia.sfx.mz2.medicBlasterSfx = cgi.Snd_RegisterSound ("medic/medatck1.wav");
670 cgMedia.sfx.mz2.soldierBlasterSfx = cgi.Snd_RegisterSound ("soldier/solatck2.wav");
671 cgMedia.sfx.mz2.soldierMachGunSfx = cgi.Snd_RegisterSound ("soldier/solatck3.wav");
672 cgMedia.sfx.mz2.soldierShotgunSfx = cgi.Snd_RegisterSound ("soldier/solatck1.wav");
673 cgMedia.sfx.mz2.superTankRocketSfx = cgi.Snd_RegisterSound ("tank/rocket.wav");
674 cgMedia.sfx.mz2.tankBlasterSfx = cgi.Snd_RegisterSound ("tank/tnkatck3.wav");
675
676 for (i=0 ; i<5 ; i++) {
677 Q_snprintfz (name, sizeof (name), "tank/tnkatk2%c.wav", 'a' + i);
678 cgMedia.sfx.mz2.tankMachGunSfx[i] = cgi.Snd_RegisterSound (name);
679 }
680
681 cgMedia.sfx.mz2.tankRocketSfx = cgi.Snd_RegisterSound ("tank/tnkatck1.wav");
682
683 // Brass sounds
684 cgMedia.sfx.mgShell[0] = cgi.Snd_RegisterSound ("#egl/sounds/brass/mg_shell1.wav");
685 cgMedia.sfx.mgShell[1] = cgi.Snd_RegisterSound ("#egl/sounds/brass/mg_shell2.wav");
686 cgMedia.sfx.sgShell[0] = cgi.Snd_RegisterSound ("#egl/sounds/brass/sg_shell1.wav");
687 cgMedia.sfx.sgShell[1] = cgi.Snd_RegisterSound ("#egl/sounds/brass/sg_shell2.wav");
688
689 // Configstring-based sounds
690 for (i=1 ; i<MAX_CS_SOUNDS ; i++) {
691 if (!cg.configStrings[CS_SOUNDS+i][0]) {
692 cg.soundCfgStrings[i] = NULL;
693 break;
694 }
695
696 cg.soundCfgStrings[i] = cgi.Snd_RegisterSound (cg.configStrings[CS_SOUNDS+i]);
697 cgi.Sys_SendKeyEvents (); // pump message loop
698 }
699
700 // Clear filename
701 CG_LoadingFilename (0);
702 }
703
704
705 /*
706 =================
707 CG_CacheGloomMedia
708 =================
709 */
CG_CacheGloomMedia(void)710 void CG_CacheGloomMedia (void)
711 {
712 CG_LoadingString ("Loading Gloom media...");
713
714 //
715 // Human classes
716 //
717 CG_LoadingFilename ("Human classes");
718 cgi.R_RegisterModel ("players/engineer/tris.md2");
719 cgi.R_RegisterModel ("players/male/tris.md2");
720 cgi.R_RegisterModel ("players/female/tris.md2");
721
722 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
723
724 cgi.R_RegisterModel ("players/hsold/tris.md2");
725 cgi.R_RegisterModel ("players/exterm/tris.md2");
726 cgi.R_RegisterModel ("players/mech/tris.md2");
727
728 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
729
730 // Human structures
731 CG_LoadingFilename ("Human structures");
732 cgi.R_RegisterModel ("models/objects/dmspot/tris.md2");
733 cgi.R_RegisterModel ("models/turret/base.md2");
734 cgi.R_RegisterModel ("models/turret/gun.md2");
735 cgi.R_RegisterModel ("models/turret/mgun.md2");
736
737 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
738
739 cgi.R_RegisterModel ("models/objects/detector/tris.md2");
740 cgi.R_RegisterModel ("models/objects/tripwire/tris.md2");
741 cgi.R_RegisterModel ("models/objects/depot/tris.md2");
742
743 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
744
745 // Human weapons
746 CG_LoadingFilename ("Human weapons");
747 cgi.R_RegisterModel ("players/engineer/weapon.md2");
748 cgi.R_RegisterModel ("players/male/autogun.md2");
749 cgi.R_RegisterModel ("players/male/shotgun.md2");
750 cgi.R_RegisterModel ("players/male/smg.md2");
751 cgi.R_RegisterModel ("players/male/weapon.md2");
752
753 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
754
755 cgi.R_RegisterModel ("players/female/weapon.md2");
756 cgi.R_RegisterModel ("players/hsold/weapon.md2");
757 cgi.R_RegisterModel ("players/exterm/weapon.md2");
758 cgi.R_RegisterModel ("players/mech/weapon.md2");
759
760 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
761
762 // Human view weapons
763 CG_LoadingFilename ("Human view weapons");
764 cgi.R_RegisterModel ("models/weapons/v_auto/tris.md2");
765 cgi.R_RegisterModel ("models/weapons/v_shot/tris.md2");
766 cgi.R_RegisterModel ("models/weapons/v_spas/tris.md2");
767 cgi.R_RegisterModel ("models/weapons/v_launch/tris.md2");
768
769 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
770
771 cgi.R_RegisterModel ("models/weapons/v_pist/tris.md2");
772 cgi.R_RegisterModel ("models/weapons/v_sub/tris.md2");
773 cgi.R_RegisterModel ("models/weapons/v_mag/tris.md2");
774 cgi.R_RegisterModel ("models/weapons/v_plas/tris.md2");
775 cgi.R_RegisterModel ("models/weapons/v_mech/tris.md2");
776
777 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
778
779 // Human items
780 CG_LoadingFilename ("Human Items");
781 cgi.R_RegisterModel ("models/objects/c4/tris.md2");
782 cgi.R_RegisterModel ("models/objects/r_explode/tris.md2");
783 cgi.R_RegisterModel ("models/objects/explode/tris.md2");
784 cgi.R_RegisterModel ("models/objects/ggrenade/tris.md2");
785 cgi.R_RegisterModel ("models/objects/laser/tris.md2");
786 cgi.R_RegisterModel ("models/objects/tlaser/tris.md2");
787
788 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
789
790 cgi.R_RegisterModel ("models/objects/c4/tris.md2");
791 cgi.R_RegisterModel ("models/objects/grenade/tris.md2");
792 cgi.R_RegisterModel ("models/objects/debris1/tris.md2");
793 cgi.R_RegisterModel ("models/objects/debris2/tris.md2");
794
795 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
796
797 //
798 // Alien classes
799 //
800 CG_LoadingFilename ("Alien classes");
801 cgi.R_RegisterModel ("players/breeder/tris.md2");
802 cgi.R_RegisterModel ("players/breeder/weapon.md2");
803 cgi.R_RegisterModel ("players/hatch/tris.md2");
804 cgi.R_RegisterModel ("players/hatch/weapon.md2");
805 cgi.R_RegisterModel ("players/drone/tris.md2");
806 cgi.R_RegisterModel ("players/drone/weapon.md2");
807 cgi.R_RegisterModel ("players/wraith/tris.md2");
808
809 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
810
811 cgi.R_RegisterModel ("players/wraith/weapon.md2");
812 cgi.R_RegisterModel ("players/stinger/tris.md2");
813 cgi.R_RegisterModel ("players/stinger/weapon.md2");
814 cgi.R_RegisterModel ("players/guardian/tris.md2");
815 cgi.R_RegisterModel ("players/guardian/weapon.md2");
816 cgi.R_RegisterModel ("players/stalker/tris.md2");
817 cgi.R_RegisterModel ("players/stalker/weapon.md2");
818
819 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
820
821 // Alien structures
822 CG_LoadingFilename ("Alien structures");
823 cgi.R_RegisterModel ("models/objects/cocoon/tris.md2");
824 cgi.R_RegisterModel ("models/objects/organ/spiker/tris.md2");
825 cgi.R_RegisterModel ("models/objects/organ/healer/tris.md2");
826 cgi.R_RegisterModel ("models/objects/organ/obstacle/tris.md2");
827 cgi.R_RegisterModel ("models/objects/organ/gas/tris.md2");
828
829 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
830
831 cgi.R_RegisterModel ("models/objects/spike/tris.md2");
832 cgi.R_RegisterModel ("models/objects/spore/tris.md2");
833 cgi.R_RegisterModel ("models/objects/smokexp/tris.md2");
834 cgi.R_RegisterModel ("models/objects/web/ball.md2");
835
836 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
837
838 // Alien objects
839 CG_LoadingFilename ("Alien objects");
840 cgi.R_RegisterModel ("models/gibs/hatchling/leg/tris.md2");
841 cgi.R_RegisterModel ("models/gibs/guardian/gib2.md2");
842 cgi.R_RegisterModel ("models/gibs/guardian/gib1.md2");
843 cgi.R_RegisterModel ("models/gibs/stalker/gib1.md2");
844
845 CG_IncLoadPercent (cg_curLoadRange * 0.0625f);
846
847 cgi.R_RegisterModel ("models/gibs/stalker/gib2.md2");
848 cgi.R_RegisterModel ("models/gibs/stalker/gib3.md2");
849 cgi.R_RegisterModel ("models/objects/sspore/tris.md2");
850
851 CG_LoadingFilename (0);
852 }
853
854 /*
855 =============================================================================
856
857 MEDIA INITIALIZATION
858
859 =============================================================================
860 */
861
862 /*
863 ================
864 CG_MapInit
865
866 Called before all the cgame is initialized
867 ================
868 */
CG_MapInit(void)869 void CG_MapInit (void)
870 {
871 float percent;
872
873 if (cgMedia.initialized)
874 return;
875
876 CG_LoadingPercent (0);
877 CG_LoadingString (0);
878 CG_LoadingFilename (0);
879
880 cgi.R_UpdateScreen ();
881
882 percent = 0;
883 if (cg.currGameMod == GAME_MOD_GLOOM && glm_forcecache->intVal) {
884 // Map media
885 cg_curLoadRange = 30;
886 CG_MapMediaInit ();
887 CG_LoadingPercent (percent += cg_curLoadRange);
888
889 // Model media
890 cg_curLoadRange = 10;
891 CG_ModelMediaInit ();
892 CG_LoadingPercent (percent += cg_curLoadRange);
893
894 // Pic media
895 cg_curLoadRange = 10;
896 CG_PicMediaInit ();
897 CG_LoadingPercent (percent += cg_curLoadRange);
898
899 // Effect media
900 cg_curLoadRange = 15;
901 CG_FXMediaInit ();
902 CG_LoadingPercent (percent += cg_curLoadRange);
903
904 // Sound media
905 cg_curLoadRange = 15;
906 CG_SoundMediaInit ();
907 CG_LoadingPercent (percent += cg_curLoadRange);
908
909 // Gloom media
910 cg_curLoadRange = 20;
911 CG_CacheGloomMedia ();
912 CG_LoadingPercent (percent += cg_curLoadRange);
913 }
914 else {
915 // Map media
916 cg_curLoadRange = 35;
917 CG_MapMediaInit ();
918 CG_LoadingPercent (percent += cg_curLoadRange);
919
920 // Model media
921 cg_curLoadRange = 10;
922 CG_ModelMediaInit ();
923 CG_LoadingPercent (percent += cg_curLoadRange);
924
925 // Pic media
926 cg_curLoadRange = 15;
927 CG_PicMediaInit ();
928 CG_LoadingPercent (percent += cg_curLoadRange);
929
930 // Effect media
931 cg_curLoadRange = 20;
932 CG_FXMediaInit ();
933 CG_LoadingPercent (percent += cg_curLoadRange);
934
935 // Sound media
936 cg_curLoadRange = 20;
937 CG_SoundMediaInit ();
938 CG_LoadingPercent (percent += cg_curLoadRange);
939 }
940
941 CG_LoadingPercent (100);
942 CG_LoadingString (0);
943 CG_LoadingFilename (0);
944
945 cg.frame.valid = qFalse; // Probably out of date
946
947 cgMedia.initialized = qTrue;
948 }
949
950
951 /*
952 ================
953 CG_ShutdownMap
954 ================
955 */
CG_ShutdownMap(void)956 void CG_ShutdownMap (void)
957 {
958 if (!cgMedia.initialized)
959 return;
960
961 cgMedia.initialized = qFalse;
962 }
963