00001
00002
00003
00004
00005 #include "cg_local.h"
00006
00007 #define MAX_LOADING_PLAYER_ICONS 16
00008 #define MAX_LOADING_ITEM_ICONS 26
00009
00010
00011
00012
00013 void CG_LoadBar(void);
00014
00015
00016
00017
00018
00019
00020
00021 void CG_LoadingString( const char *s ) {
00022 Q_strncpyz( cg.infoScreenText, s, sizeof( cg.infoScreenText ) );
00023
00024 trap_UpdateScreen();
00025 }
00026
00027
00028
00029
00030
00031
00032 void CG_LoadingItem( int itemNum ) {
00033 gitem_t *item;
00034 char upperKey[1024];
00035
00036 item = &bg_itemlist[itemNum];
00037
00038 if (!item->classname || !item->classname[0])
00039 {
00040
00041 return;
00042 }
00043
00044 strcpy(upperKey, item->classname);
00045 CG_LoadingString( CG_GetStringEdString("SP_INGAME",Q_strupr(upperKey)) );
00046 }
00047
00048
00049
00050
00051
00052
00053 void CG_LoadingClient( int clientNum ) {
00054 const char *info;
00055 char personality[MAX_QPATH];
00056
00057 info = CG_ConfigString( CS_PLAYERS + clientNum );
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 Q_strncpyz( personality, Info_ValueForKey( info, "n" ), sizeof(personality) );
00089 Q_CleanStr( personality );
00090
00091
00092
00093
00094
00095
00096
00097 CG_LoadingString( personality );
00098 }
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109 #define UI_INFOFONT (UI_BIGFONT)
00110 void CG_DrawInformation( void ) {
00111 const char *s;
00112 const char *info;
00113 const char *sysInfo;
00114 int y;
00115 int value, valueNOFP;
00116 qhandle_t levelshot;
00117 char buf[1024];
00118 int iPropHeight = 18;
00119
00120 info = CG_ConfigString( CS_SERVERINFO );
00121 sysInfo = CG_ConfigString( CS_SYSTEMINFO );
00122
00123 s = Info_ValueForKey( info, "mapname" );
00124 levelshot = trap_R_RegisterShaderNoMip( va( "levelshots/%s", s ) );
00125 if ( !levelshot ) {
00126 levelshot = trap_R_RegisterShaderNoMip( "menu/art/unknownmap_mp" );
00127 }
00128 trap_R_SetColor( NULL );
00129 CG_DrawPic( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, levelshot );
00130
00131 CG_LoadBar();
00132
00133
00134
00135
00136
00137
00138 if ( cg.infoScreenText[0] ) {
00139 const char *psLoading = CG_GetStringEdString("MENUS", "LOADING_MAPNAME");
00140 UI_DrawProportionalString( 320, 128-32, va( psLoading, cg.infoScreenText),
00141 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00142 } else {
00143 const char *psAwaitingSnapshot = CG_GetStringEdString("MENUS", "AWAITING_SNAPSHOT");
00144 UI_DrawProportionalString( 320, 128-32, psAwaitingSnapshot,
00145 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00146 }
00147
00148
00149
00150 y = 180-32;
00151
00152
00153 trap_Cvar_VariableStringBuffer( "sv_running", buf, sizeof( buf ) );
00154 if ( !atoi( buf ) ) {
00155
00156 Q_strncpyz(buf, Info_ValueForKey( info, "sv_hostname" ), 1024);
00157 Q_CleanStr(buf);
00158 UI_DrawProportionalString( 320, y, buf,
00159 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00160 y += iPropHeight;
00161
00162
00163 s = Info_ValueForKey( sysInfo, "sv_pure" );
00164 if ( s[0] == '1' ) {
00165 const char *psPure = CG_GetStringEdString("MP_INGAME", "PURE_SERVER");
00166 UI_DrawProportionalString( 320, y, psPure,
00167 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00168 y += iPropHeight;
00169 }
00170
00171
00172 s = CG_ConfigString( CS_MOTD );
00173 if ( s[0] ) {
00174 UI_DrawProportionalString( 320, y, s,
00175 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00176 y += iPropHeight;
00177 }
00178
00179 {
00180 char motdString[1024];
00181 trap_Cvar_VariableStringBuffer( "cl_motdString", motdString, sizeof( motdString ) );
00182
00183 if (motdString[0])
00184 {
00185 UI_DrawProportionalString( 320, 425, motdString,
00186 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00187 }
00188 }
00189
00190
00191 y += 10;
00192 }
00193
00194
00195 s = CG_ConfigString( CS_MESSAGE );
00196 if ( s[0] ) {
00197 UI_DrawProportionalString( 320, y, s,
00198 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00199 y += iPropHeight;
00200 }
00201
00202
00203 s = Info_ValueForKey( sysInfo, "sv_cheats" );
00204 if ( s[0] == '1' ) {
00205 UI_DrawProportionalString( 320, y, CG_GetStringEdString("MP_INGAME", "CHEATSAREENABLED"),
00206 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00207 y += iPropHeight;
00208 }
00209
00210
00211 switch ( cgs.gametype ) {
00212 case GT_FFA:
00213 s = CG_GetStringEdString("MENUS", "FREE_FOR_ALL");
00214
00215 break;
00216 case GT_HOLOCRON:
00217 s = CG_GetStringEdString("MENUS", "HOLOCRON_FFA");
00218
00219 break;
00220 case GT_JEDIMASTER:
00221 s = CG_GetStringEdString("MENUS", "SAGA");
00222
00223
00224 break;
00225 case GT_SINGLE_PLAYER:
00226 s = CG_GetStringEdString("MENUS", "SAGA");
00227
00228
00229 break;
00230 case GT_DUEL:
00231 s = CG_GetStringEdString("MENUS", "DUEL");
00232
00233 break;
00234 case GT_POWERDUEL:
00235 s = CG_GetStringEdString("MENUS", "POWERDUEL");
00236
00237 break;
00238 case GT_TEAM:
00239 s = CG_GetStringEdString("MENUS", "TEAM_FFA");
00240
00241
00242 break;
00243 case GT_SIEGE:
00244 s = CG_GetStringEdString("MENUS", "SIEGE");
00245
00246
00247 break;
00248 case GT_CTF:
00249 s = CG_GetStringEdString("MENUS", "CAPTURE_THE_FLAG");
00250
00251
00252 break;
00253 case GT_CTY:
00254 s = CG_GetStringEdString("MENUS", "CAPTURE_THE_YSALIMARI");
00255
00256
00257 break;
00258 default:
00259 s = CG_GetStringEdString("MENUS", "SAGA");
00260
00261
00262 break;
00263 }
00264 UI_DrawProportionalString( 320, y, s,
00265 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00266 y += iPropHeight;
00267
00268 if (cgs.gametype != GT_SIEGE)
00269 {
00270 value = atoi( Info_ValueForKey( info, "timelimit" ) );
00271 if ( value ) {
00272 UI_DrawProportionalString( 320, y, va( "%s %i", CG_GetStringEdString("MP_INGAME", "TIMELIMIT"), value ),
00273 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00274 y += iPropHeight;
00275 }
00276
00277 if (cgs.gametype < GT_CTF ) {
00278 value = atoi( Info_ValueForKey( info, "fraglimit" ) );
00279 if ( value ) {
00280 UI_DrawProportionalString( 320, y, va( "%s %i", CG_GetStringEdString("MP_INGAME", "FRAGLIMIT"), value ),
00281 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00282 y += iPropHeight;
00283 }
00284
00285 if (cgs.gametype == GT_DUEL || cgs.gametype == GT_POWERDUEL)
00286 {
00287 value = atoi( Info_ValueForKey( info, "duel_fraglimit" ) );
00288 if ( value ) {
00289 UI_DrawProportionalString( 320, y, va( "%s %i", CG_GetStringEdString("MP_INGAME", "WINLIMIT"), value ),
00290 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00291 y += iPropHeight;
00292 }
00293 }
00294 }
00295 }
00296
00297 if (cgs.gametype >= GT_CTF) {
00298 value = atoi( Info_ValueForKey( info, "capturelimit" ) );
00299 if ( value ) {
00300 UI_DrawProportionalString( 320, y, va( "%s %i", CG_GetStringEdString("MP_INGAME", "CAPTURELIMIT"), value ),
00301 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00302 y += iPropHeight;
00303 }
00304 }
00305
00306 if (cgs.gametype >= GT_TEAM)
00307 {
00308 value = atoi( Info_ValueForKey( info, "g_forceBasedTeams" ) );
00309 if ( value ) {
00310 UI_DrawProportionalString( 320, y, CG_GetStringEdString("MP_INGAME", "FORCEBASEDTEAMS"),
00311 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00312 y += iPropHeight;
00313 }
00314 }
00315
00316 if (cgs.gametype != GT_SIEGE)
00317 {
00318 valueNOFP = atoi( Info_ValueForKey( info, "g_forcePowerDisable" ) );
00319
00320 value = atoi( Info_ValueForKey( info, "g_maxForceRank" ) );
00321 if ( value && !valueNOFP && (value < NUM_FORCE_MASTERY_LEVELS) ) {
00322 char fmStr[1024];
00323
00324 trap_SP_GetStringTextString("MP_INGAME_MAXFORCERANK",fmStr, sizeof(fmStr));
00325
00326 UI_DrawProportionalString( 320, y, va( "%s %s", fmStr, CG_GetStringEdString("MP_INGAME", forceMasteryLevels[value]) ),
00327 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00328 y += iPropHeight;
00329 }
00330 else if (!valueNOFP)
00331 {
00332 char fmStr[1024];
00333 trap_SP_GetStringTextString("MP_INGAME_MAXFORCERANK",fmStr, sizeof(fmStr));
00334
00335 UI_DrawProportionalString( 320, y, va( "%s %s", fmStr, (char *)CG_GetStringEdString("MP_INGAME", forceMasteryLevels[7]) ),
00336 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00337 y += iPropHeight;
00338 }
00339
00340 if (cgs.gametype == GT_DUEL || cgs.gametype == GT_POWERDUEL)
00341 {
00342 value = atoi( Info_ValueForKey( info, "g_duelWeaponDisable" ) );
00343 }
00344 else
00345 {
00346 value = atoi( Info_ValueForKey( info, "g_weaponDisable" ) );
00347 }
00348 if ( cgs.gametype != GT_JEDIMASTER && value ) {
00349 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "SABERONLYSET") ),
00350 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00351 y += iPropHeight;
00352 }
00353
00354 if ( valueNOFP ) {
00355 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "NOFPSET") ),
00356 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00357 y += iPropHeight;
00358 }
00359 }
00360
00361
00362 y += iPropHeight;
00363 switch ( cgs.gametype ) {
00364 case GT_FFA:
00365 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_FFA_1")),
00366 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00367 y += iPropHeight;
00368 break;
00369 case GT_HOLOCRON:
00370 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_HOLO_1")),
00371 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00372 y += iPropHeight;
00373 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_HOLO_2")),
00374 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00375 y += iPropHeight;
00376 break;
00377 case GT_JEDIMASTER:
00378 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_JEDI_1")),
00379 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00380 y += iPropHeight;
00381 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_JEDI_2")),
00382 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00383 y += iPropHeight;
00384 break;
00385 case GT_SINGLE_PLAYER:
00386 break;
00387 case GT_DUEL:
00388 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_DUEL_1")),
00389 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00390 y += iPropHeight;
00391 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_DUEL_2")),
00392 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00393 y += iPropHeight;
00394 break;
00395 case GT_POWERDUEL:
00396 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_POWERDUEL_1")),
00397 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00398 y += iPropHeight;
00399 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_POWERDUEL_2")),
00400 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00401 y += iPropHeight;
00402 break;
00403 case GT_TEAM:
00404 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_TEAM_1")),
00405 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00406 y += iPropHeight;
00407 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_TEAM_2")),
00408 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00409 y += iPropHeight;
00410 break;
00411 case GT_SIEGE:
00412 break;
00413 case GT_CTF:
00414 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_CTF_1")),
00415 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00416 y += iPropHeight;
00417 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_CTF_2")),
00418 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00419 y += iPropHeight;
00420 break;
00421 case GT_CTY:
00422 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_CTY_1")),
00423 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00424 y += iPropHeight;
00425 UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStringEdString("MP_INGAME", "RULES_CTY_2")),
00426 UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
00427 y += iPropHeight;
00428 break;
00429 default:
00430 break;
00431 }
00432 }
00433
00434
00435
00436
00437
00438
00439 void CG_LoadBar(void)
00440 {
00441 const int numticks = 9, tickwidth = 40, tickheight = 8;
00442 const int tickpadx = 20, tickpady = 12;
00443 const int capwidth = 8;
00444 const int barwidth = numticks*tickwidth+tickpadx*2+capwidth*2, barleft = ((640-barwidth)/2);
00445 const int barheight = tickheight + tickpady*2, bartop = 480-barheight;
00446 const int capleft = barleft+tickpadx, tickleft = capleft+capwidth, ticktop = bartop+tickpady;
00447
00448 trap_R_SetColor( colorWhite );
00449
00450 CG_DrawPic(barleft, bartop, barwidth, barheight, cgs.media.loadBarLEDSurround);
00451
00452
00453 CG_DrawPic(tickleft, ticktop, -capwidth, tickheight, cgs.media.loadBarLEDCap);
00454
00455
00456 CG_DrawPic(tickleft, ticktop, tickwidth*cg.loadLCARSStage, tickheight, cgs.media.loadBarLED);
00457
00458
00459 CG_DrawPic(tickleft+tickwidth*cg.loadLCARSStage, ticktop, capwidth, tickheight, cgs.media.loadBarLEDCap);
00460 }
00461