#include "cg_local.h" #include "cg_media.h" #include "..\game\objectives.h" #include "cg_text.h" static int missionYcnt; static int tacticalYcnt; static int missionYpos; static int tacticalYpos; static int missionInfoScreenY; int statusTextIndex = -1; extern ginfoitem_t bg_infoItemList[]; #define BASE_X 102 #define ADD_X 170 /* ==================== TourTacticalPrint_Line ==================== */ static void TourTacticalPrint_Line(int strIndex,int figureCount,int figureTotal) { char *str,*strBegin; int y,pixelLen,xPos; int charLen; char holdText[1024], holdText2[2]; assert(tactical_text[strIndex]); str = tactical_text[strIndex]; pixelLen = CG_ProportionalStringWidth(str,CG_TINYFONT); y = 0; xPos = 0; if (tacticalYcnt < 6) { y = tacticalYpos + ((PROP_TINY_HEIGHT + 4) * (tacticalYcnt)); xPos = BASE_X; } else if (tacticalYcnt < 12) { y = (missionInfoScreenY + 198) + ((PROP_TINY_HEIGHT + 4) * (tacticalYcnt - 6)); xPos = BASE_X + ADD_X; } else if (tacticalYcnt < 18) { y = (missionInfoScreenY + 198) + ((PROP_TINY_HEIGHT + 4) * (tacticalYcnt - 12)); xPos = BASE_X + ADD_X + ADD_X; } // The little dot marking the beginning of a block of tactical info cgi_R_SetColor( colorTable[CT_LTBLUE1]); CG_DrawPic( xPos - 8, y + 3, 4, 4,cgs.media.notpending); // Corner if (pixelLen < 502) // One shot - small enough to just print on screen { if (strIndex == TACT_HOWMANY_DOLLS) { CG_DrawProportionalString(xPos, y, va(tactical_text[strIndex],figureCount,figureTotal), CG_TINYFONT, colorTable[CT_LTBLUE2] ); } else { CG_DrawProportionalString(xPos, y, tactical_text[strIndex], CG_TINYFONT, colorTable[CT_LTBLUE2] ); } ++tacticalYcnt; } // Text is too long. else { pixelLen = 0; charLen = 0; holdText2[1] = NULL; strBegin = str; while( *str ) { holdText2[0] = *str; pixelLen += CG_ProportionalStringWidth(holdText2,CG_TINYFONT); pixelLen += 1; // For kerning ++charLen; if (pixelLen > 502 ) { //Reached max length of this line //step back until we find a space while ((charLen) && (*str != ' ' )) { --str; --charLen; } if (*str==' ') { ++str; // To get past space } Q_strncpyz( holdText, strBegin, charLen); holdText[charLen] = NULL; strBegin = str; pixelLen = 0; charLen = 1; y = tacticalYpos + (14 * tacticalYcnt); CG_DrawProportionalString(xPos, y, holdText, CG_TINYFONT, colorTable[CT_LTBLUE2] ); ++tacticalYcnt; } else if (*(str+1) == NULL) { Q_strncpyz( holdText, strBegin, charLen); y = tacticalYpos + (14 * tacticalYcnt); CG_DrawProportionalString(xPos, y, holdText, CG_TINYFONT, colorTable[CT_LTBLUE2] ); ++tacticalYcnt; break; } ++str; } } } /* ==================== TacticalPrint_Line ==================== */ static void TacticalPrint_Line(int strIndex) { char *str,*strBegin; int y,pixelLen,charLen,xPos; char holdText[1024], holdText2[2]; assert(tactical_text[strIndex]); str = tactical_text[strIndex]; pixelLen = CG_ProportionalStringWidth(str,CG_TINYFONT); xPos = 102; // The little dot marking the beginning of a block of tactical info cgi_R_SetColor( colorTable[CT_LTBLUE1]); y = tacticalYpos + ((PROP_TINY_HEIGHT + 4) * (tacticalYcnt)); CG_DrawPic( xPos - 8, y + 3, 4, 4,cgs.media.notpending); // Corner if (pixelLen < 502) // One shot - small enough to just print on screen { y = tacticalYpos + (14 * (tacticalYcnt)); CG_DrawProportionalString(xPos, y, tactical_text[strIndex], CG_TINYFONT, colorTable[CT_LTBLUE2] ); ++tacticalYcnt; } // Text is too long, break into lines. else { pixelLen = 0; charLen = 0; holdText2[1] = NULL; strBegin = str; while( *str ) { holdText2[0] = *str; pixelLen += CG_ProportionalStringWidth(holdText2,CG_TINYFONT); pixelLen += 1; // For kerning ++charLen; if (pixelLen > 502 ) { //Reached max length of this line //step back until we find a space while ((charLen) && (*str != ' ' )) { --str; --charLen; } if (*str==' ') { ++str; // To get past space } Q_strncpyz( holdText, strBegin, charLen); holdText[charLen] = NULL; strBegin = str; pixelLen = 0; charLen = 1; y = tacticalYpos + (14 * tacticalYcnt); CG_DrawProportionalString(xPos, y, holdText, CG_TINYFONT, colorTable[CT_LTBLUE2] ); ++tacticalYcnt; } else if (*(str+1) == NULL) { Q_strncpyz( holdText, strBegin, charLen); y = tacticalYpos + (14 * tacticalYcnt); CG_DrawProportionalString(xPos, y, holdText, CG_TINYFONT, colorTable[CT_LTBLUE2] ); ++tacticalYcnt; break; } ++str; } } } #define MAX_OBJECTIVETEXT 2048 /* ==================== MissionPrint_Line ==================== */ static void MissionPrint_Line(objectives_t objective,int color,centity_t *cent,char *missionText) { char *str,*strBegin; int y,pixelLen,charLen; char holdText[1024], holdText2[2]; char finalText[MAX_OBJECTIVETEXT]; int len,len_s; char *s; assert(missionText); str = missionText; if (objective.status == OBJECTIVE_STAT_PENDING) { s = "\0"; } else if (objective.status == OBJECTIVE_STAT_FAILED) { s = ingame_text[IGT_FAILED]; } else { s = ingame_text[IGT_SUCCEEDED]; } len = strlen(str); len++; Q_strncpyz(finalText,str,len); len_s = strlen(str); Q_strncpyz((finalText+(len-1)), s, len_s); pixelLen = CG_ProportionalStringWidth(finalText,CG_SMALLFONT); str = finalText; if (pixelLen < 500) // One shot - small enough to print entirely on one line { y =missionYpos + (18 * (missionYcnt)); CG_DrawProportionalString(108, y,str, CG_SMALLFONT, colorTable[color] ); ++missionYcnt; } // Text is too long, break into lines. else { pixelLen = 0; charLen = 0; holdText2[1] = NULL; strBegin = str; while( *str ) { holdText2[0] = *str; pixelLen += CG_ProportionalStringWidth(holdText2,CG_SMALLFONT); pixelLen += 2; // For kerning ++charLen; if (pixelLen > 500 ) { //Reached max length of this line //step back until we find a space while ((charLen) && (*str != ' ' )) { --str; --charLen; } if (*str==' ') { ++str; // To get past space } Q_strncpyz( holdText, strBegin, charLen); holdText[charLen] = NULL; strBegin = str; pixelLen = 0; charLen = 1; y = missionYpos + (18 * missionYcnt); CG_DrawProportionalString(108, y, holdText, CG_SMALLFONT, colorTable[color] ); ++missionYcnt; } else if (*(str+1) == NULL) { ++charLen; y = missionYpos + (18 * missionYcnt); Q_strncpyz( holdText, strBegin, charLen); CG_DrawProportionalString(108, y, holdText, CG_SMALLFONT, colorTable[color] ); ++missionYcnt; break; } ++str; } } } /* ==================== MissionInformation_Draw ==================== */ static void MissionInformation_Draw( centity_t *cent ) { int i,addLength,color; vec4_t newColor; int tacticalCnt,lines,pixelLen; missionInfoScreenY = 50; // Upper Background newColor[0] = colorTable[CT_BLACK][0]; newColor[1] = colorTable[CT_BLACK][1]; newColor[2] = colorTable[CT_BLACK][2]; newColor[3] = 0.5; cgi_R_SetColor(newColor); CG_DrawPic( 77, missionInfoScreenY, 535, 174, cgs.media.whiteShader); CG_DrawPic( 30, missionInfoScreenY + 168, 47, 9, cgs.media.whiteShader); // Count active tactical lines tacticalCnt=0; for (i=0;igent->client->sess.mission_objectives[i].display) { if (cent->gent->client->sess.mission_objectives[i].status == OBJECTIVE_STAT_SUCCEEDED) { cgi_R_SetColor( colorTable[CT_LTBLUE1]); CG_DrawPic( 88, missionYpos + (18 * (missionYcnt)), 16, 16, cgs.media.notpending); // Full Circle cgi_R_SetColor( colorTable[CT_DKBLUE1]); CG_DrawPic( 88, missionYpos + (18 * (missionYcnt)), 16, 16, cgs.media.pending); // Circle in front color = CT_LTBLUE1; } else if (cent->gent->client->sess.mission_objectives[i].status == OBJECTIVE_STAT_FAILED) { cgi_R_SetColor( colorTable[CT_LTRED1]); CG_DrawPic( 88, missionYpos + (18 * (missionYcnt)), 16, 16, cgs.media.notpending); // Full Circle cgi_R_SetColor( colorTable[CT_DKRED1]); CG_DrawPic( 88, missionYpos + (18 * (missionYcnt)), 16, 16, cgs.media.pending); // Circle in front color = CT_LTRED1; } else // OBJECTIVE_STAT_PENDING { cgi_R_SetColor( colorTable[CT_LTGOLD1]); CG_DrawPic( 88, missionYpos + (18 * (missionYcnt)), 16, 16, cgs.media.pending); // Circle in front color = CT_LTGOLD1; } MissionPrint_Line(cent->gent->client->sess.mission_objectives[i],color,cent,mission_objective_text[i]); } } if (!missionYcnt) { CG_DrawProportionalString(108, missionYpos, ingame_text[IGT_NONE1], CG_SMALLFONT, colorTable[CT_LTBLUE1] ); } tacticalYcnt = 0; // Print active tactical info for (i=0;igent->client->tourSess.tour_objectives[OBJ_DOLL_MUNRO].status == OBJECTIVE_STAT_SUCCEEDED) { figureCount++; } if (cent->gent->client->tourSess.tour_objectives[OBJ_DOLL_FOSTER].status == OBJECTIVE_STAT_SUCCEEDED) { figureCount++; } if (cent->gent->client->tourSess.tour_objectives[OBJ_DOLL_TELSIA].status == OBJECTIVE_STAT_SUCCEEDED) { figureCount++; } if (cent->gent->client->tourSess.tour_objectives[OBJ_DOLL_ALEXANDRIA].status == OBJECTIVE_STAT_SUCCEEDED) { figureCount++; } if (cent->gent->client->tourSess.tour_objectives[OBJ_DOLL_BIESSMAN].status == OBJECTIVE_STAT_SUCCEEDED) { figureCount++; } if (cent->gent->client->tourSess.tour_objectives[OBJ_DOLL_CHELL].status == OBJECTIVE_STAT_SUCCEEDED) { figureCount++; } if (cent->gent->client->tourSess.tour_objectives[OBJ_DOLL_CHANG].status == OBJECTIVE_STAT_SUCCEEDED) { figureCount++; } if (cent->gent->client->tourSess.tour_objectives[OBJ_DOLL_JUROT].status == OBJECTIVE_STAT_SUCCEEDED) { figureCount++; } if (cent->gent->client->tourSess.tour_objectives[OBJ_DOLL_BORG_FOSTER].status == OBJECTIVE_STAT_SUCCEEDED) { figureCount++; } // Count number of action figures collected if (cent->gent->client->tourSess.tour_objectives[OBJ_COLLECTEDACTIONFIGURES].status != OBJECTIVE_STAT_SUCCEEDED) { // Collected all action figures so don't print count if (figureCount==figureTotal) // Got all the action figures so show the tactical { if (cent->gent->client->tourSess.tour_objectives[OBJ_TOURSUCCESS].display != OBJECTIVE_SHOW) { tactical_info[TACT_EASTEREGG4] = qtrue; } else { tactical_info[TACT_EASTEREGG4] = qfalse; } tactical_info[TACT_HOWMANY_DOLLS] = qfalse; } else if (figureCount>0) // Got at least one of the action figures { tactical_info[TACT_EASTEREGG4] = qfalse; tactical_info[TACT_HOWMANY_DOLLS] = qtrue; } else // Got no action figures { tactical_info[TACT_EASTEREGG4] = qfalse; tactical_info[TACT_HOWMANY_DOLLS] = qfalse; } } else { tactical_info[TACT_EASTEREGG4] = qfalse; tactical_info[TACT_HOWMANY_DOLLS] = qfalse; } // Upper Background newColor[0] = colorTable[CT_BLACK][0]; newColor[1] = colorTable[CT_BLACK][1]; newColor[2] = colorTable[CT_BLACK][2]; newColor[3] = 0.5; cgi_R_SetColor(newColor); CG_DrawPic( 77, missionInfoScreenY, 535, 174, cgs.media.whiteShader); CG_DrawPic( 30, missionInfoScreenY + 168, 47, 9, cgs.media.whiteShader); // Count active tactical lines tacticalCnt=0; for (i=0;i 6) { tacticalCnt = 6; } // Lower background cgi_R_SetColor(newColor); CG_DrawPic( 77, missionInfoScreenY + 174, 535, ((PROP_TINY_HEIGHT + 4) * tacticalCnt) + 16 + 14, cgs.media.whiteShader); // Frame cgi_R_SetColor( colorTable[CT_RED]); CG_DrawPic( 30, missionInfoScreenY, 64, 32, cgs.media.objcorner1); // Top Corner CG_DrawPic( 50, missionInfoScreenY, 353, 22, cgs.media.whiteShader); // Top line CG_DrawPic( 30, missionInfoScreenY + 17, 47, 154, cgs.media.whiteShader); // Middle column CG_DrawProportionalString(611, missionInfoScreenY, ingame_text[IGT_SECURITY_STATUS], CG_RIGHT | CG_BIGFONT, colorTable[CT_LTBLUE1] ); // Tactical Info cgi_R_SetColor( colorTable[CT_RED]); CG_DrawPic( 81, missionInfoScreenY + 174, 521, 16, cgs.media.whiteShader); // Top CG_DrawPic( 602, missionInfoScreenY + 174, 16, 32, cgs.media.objcorner2); // Corner CG_DrawProportionalString( 96, missionInfoScreenY + 174, ingame_text[IGT_ITEMS],CG_SMALLFONT, colorTable[CT_BLACK] ); missionYcnt = 0; missionYpos = missionInfoScreenY + 29; tacticalYpos = missionInfoScreenY + 198; // Print active objectives for (i=0;igent->client->tourSess.tour_objectives[i].display) { if (cent->gent->client->tourSess.tour_objectives[i].status == OBJECTIVE_STAT_SUCCEEDED) { cgi_R_SetColor( colorTable[CT_LTBLUE1]); CG_DrawPic( 88, missionYpos + (18 * (missionYcnt)), 16, 16, cgs.media.notpending); // Full Circle cgi_R_SetColor( colorTable[CT_DKBLUE1]); CG_DrawPic( 88, missionYpos + (18 * (missionYcnt)), 16, 16, cgs.media.pending); // Circle in front color = CT_LTBLUE1; } else if (cent->gent->client->tourSess.tour_objectives[i].status == OBJECTIVE_STAT_FAILED) { cgi_R_SetColor( colorTable[CT_LTRED1]); CG_DrawPic( 88, missionYpos + (18 * (missionYcnt)), 16, 16, cgs.media.notpending); // Full Circle cgi_R_SetColor( colorTable[CT_DKRED1]); CG_DrawPic( 88, missionYpos + (18 * (missionYcnt)), 16, 16, cgs.media.pending); // Circle in front color = CT_LTRED1; } else // OBJECTIVE_STAT_PENDING { cgi_R_SetColor( colorTable[CT_LTGOLD1]); CG_DrawPic( 88, missionYpos + (18 * (missionYcnt)), 16, 16, cgs.media.pending); // Circle in front color = CT_LTGOLD1; } MissionPrint_Line(cent->gent->client->tourSess.tour_objectives[i],color,cent,tour_objective_text[i]); } } if (!missionYcnt) { CG_DrawProportionalString(108, missionYpos, ingame_text[IGT_NONE1], CG_SMALLFONT, colorTable[CT_LTBLUE1] ); } tacticalYcnt = 0; // Print active tactical info for (i=0;i 6) { tacticalYcnt = 6; } addLength = (tacticalYcnt * 14); cgi_R_SetColor( colorTable[CT_RED]); CG_DrawPic( 30, missionInfoScreenY + 174, 47, (8 + 16 + 14 + addLength), cgs.media.whiteShader); // Middle column CG_DrawPic( 604, missionInfoScreenY + 182, 8, ( 16 + 14 + addLength), cgs.media.whiteShader); // Right Side CG_DrawPic( 30, (missionInfoScreenY + 174 + 16 + 14 + addLength), 582, 8, cgs.media.whiteShader); // Bottom } /* ==================== CG_DrawMissionInformation ==================== */ void CG_DrawMissionInformation( void ) { centity_t *cent; // Don't show if dead if (cg.predicted_player_state.pm_type == PM_DEAD) { return; } cent = &cg_entities[cg.snap->ps.clientNum]; if (cg_virtualVoyager.value == 1) { TourModeObjectives(cent); } else { MissionInformation_Draw(cent); } missionInfo_Updated = qfalse; // Player saw it cg.missionInfoFlashTime = 0; } /* ================ CG_CenterLine ================ */ void CG_CenterLine( float y, const char *string ) { CG_DrawProportionalString( (SCREEN_WIDTH/2), y, string, UI_CENTER | UI_BIGFONT,colorTable[CT_LTBLUE1]); } void CG_LoadBar(void) { int x,y; // Round LCARS buttons y = 244; x = 10; if (cg.loadLCARSStage < 1) { cgi_R_SetColor( colorTable[CT_VDKPURPLE3]); } else { cgi_R_SetColor( colorTable[CT_VLTPURPLE3]); } CG_DrawPic( x + 18, y +102, 128, 64,cgs.media.loading1); if (cg.loadLCARSStage < 2) { cgi_R_SetColor( colorTable[CT_VDKBLUE1]); } else { cgi_R_SetColor( colorTable[CT_VLTBLUE1]); } CG_DrawPic( x, y + 37, 64, 64,cgs.media.loading2); if (cg.loadLCARSStage < 3) { cgi_R_SetColor( colorTable[CT_VDKPURPLE1]); } else { cgi_R_SetColor( colorTable[CT_LTPURPLE1]); } CG_DrawPic( x + 17, y, 128, 64,cgs.media.loading3); if (cg.loadLCARSStage < 4) { cgi_R_SetColor( colorTable[CT_VDKPURPLE2]); } else { cgi_R_SetColor( colorTable[CT_LTPURPLE2]); } CG_DrawPic( x + 99, y, 128, 128,cgs.media.loading4); if (cg.loadLCARSStage < 5) { cgi_R_SetColor( colorTable[CT_VDKBLUE2]); } else { cgi_R_SetColor( colorTable[CT_VLTBLUE2]); } CG_DrawPic( x +137, y + 81, 64, 64,cgs.media.loading5); if (cg.loadLCARSStage < 6) { cgi_R_SetColor( colorTable[CT_VDKORANGE]); } else { cgi_R_SetColor( colorTable[CT_LTORANGE]); } CG_DrawPic( x + 45, y + 99, 128, 64,cgs.media.loading6); if (cg.loadLCARSStage < 7) { cgi_R_SetColor( colorTable[CT_VDKBLUE2]); } else { cgi_R_SetColor( colorTable[CT_LTBLUE2]); } CG_DrawPic( x + 38, y + 24, 64, 128,cgs.media.loading7); if (cg.loadLCARSStage < 8) { cgi_R_SetColor( colorTable[CT_VDKPURPLE1]); } else { cgi_R_SetColor( colorTable[CT_LTPURPLE1]); } CG_DrawPic( x + 78, y + 20, 128, 64,cgs.media.loading8); if (cg.loadLCARSStage < 9) { cgi_R_SetColor( colorTable[CT_VDKBROWN1]); } else { cgi_R_SetColor( colorTable[CT_VLTBROWN1]); } CG_DrawPic( x +112, y + 66, 64, 128,cgs.media.loading9); if (cg.loadLCARSStage < 9) { cgi_R_SetColor( colorTable[CT_DKBLUE2]); } else { cgi_R_SetColor( colorTable[CT_LTBLUE2]); } CG_DrawPic( x + 62, y + 44, 128, 128,cgs.media.loadingcircle); // Center arrows cg.loadLCARScnt++; if (cg.loadLCARScnt > 3) { cg.loadLCARScnt = 0; } cgi_R_SetColor( colorTable[CT_DKPURPLE2]); CG_DrawPic( x + 61, y + 43, 32, 32,cgs.media.loadingquarter); // Quad UL CG_DrawPic( x + 135, y + 43, -32, 32,cgs.media.loadingquarter); // Quad UR CG_DrawPic( x + 135, y +117, -32, -32,cgs.media.loadingquarter); // Quad LR CG_DrawPic( x + 61, y +117, 32, -32,cgs.media.loadingquarter); // Quad LL cgi_R_SetColor( colorTable[CT_LTPURPLE2]); switch (cg.loadLCARScnt) { case 0 : CG_DrawPic( x + 61, y + 43, 32, 32,cgs.media.loadingquarter); // Quad UL break; case 1 : CG_DrawPic( x + 135, y + 43, -32, 32,cgs.media.loadingquarter); // Quad UR break; case 2 : CG_DrawPic( x + 135, y +117, -32, -32,cgs.media.loadingquarter); // Quad LR break; case 3 : CG_DrawPic( x + 61, y +117, 32, -32,cgs.media.loadingquarter); // Quad LL break; } // cgi_R_SetColor( colorTable[CT_DKBROWN1]); // CG_DrawPic( x + 130, y - 7 , 64, 16,cgs.media.loadingtrim); // CG_DrawPic( x + 130, y + 150, 64, -16,cgs.media.loadingtrim); // CG_DrawPic( x + 150, y - 7, 432, 8, cgs.media.whiteShader); // Top line // CG_DrawPic( x + 150, y + 142, 432, 8, cgs.media.whiteShader); // Bottom line // CG_DrawPic( x + 583, y - 3, 16, 148, cgs.media.whiteShader); // Side line // CG_DrawPic( x + 580, y + 4, 32, -16,cgs.media.loadingcorner); // CG_DrawPic( x + 580, y + 139, 32, 16,cgs.media.loadingcorner); CG_DrawProportionalString( x + 21, y + 150, "0987",UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 3, y + 90, "18",UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 24, y + 20, "7",UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 93, y + 5, "51",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 103, y + 5, "35",UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 165, y + 83, "21",UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 101, y + 149, "67",UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 123, y + 36, "8",UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 90, y + 65, "1",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 105, y + 65, "2",UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 105, y + 87, "3",UI_TINYFONT, colorTable[CT_BLACK]); CG_DrawProportionalString( x + 91, y + 87, "4",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]); } /* ==================== CG_DrawInformation Draw all the status / pacifier stuff during level loading overylays UI_DrawConnectText from ui_connect.cpp ==================== */ extern void CG_CenterGiantLine( float y, const char *string ); //cg_scoreboard void CG_DrawInformation( void ) { const char *s; const char *info; qhandle_t levelshot; qhandle_t detail; int y,index; info = CG_ConfigString( CS_SERVERINFO ); // draw the dialog background s = Info_ValueForKey( info, "mapname" ); levelshot = cgi_R_RegisterShaderNoMip( va( "levelshots/%s.tga", s ) ); extern SavedGameJustLoaded_e g_eSavedGameJustLoaded; // hack! (hey, it's the last week of coding, ok? if ( !levelshot || g_eSavedGameJustLoaded == eFULL ) { // keep whatever's in the screen buffer so far (either the last ingame rendered-image (eg for maptransition) // or the screenshot built-in to a loaded save game... // cgi_R_DrawScreenShot( 0, cgs.glconfig.vidHeight, cgs.glconfig.vidWidth, -cgs.glconfig.vidHeight); } else { // put up the pre-defined levelshot for this map... // cgi_R_SetColor( NULL ); CG_DrawPic( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, levelshot ); } // blend a detail texture over it detail = cgi_R_RegisterShader( "levelShotDetail" ); cgi_R_DrawStretchPic( 0, 0, cgs.glconfig.vidWidth, cgs.glconfig.vidHeight, 0, 0, 1, 1, detail ); CG_LoadBar(); // the first 150 rows are reserved for the client connection // screen to write into if ( cg.processedSnapshotNum == 0 ) { // still loading // print the current item being loaded #ifndef NDEBUG if (cg.infoScreenText[0] != '@') // Not a key for load bar { CG_DrawProportionalString( 28, 407, va("LOADING ... %s",cg.infoScreenText),CG_SMALLFONT,colorTable[CT_LTBLUE1] ); } #endif } // draw info string information y = 20; // map-specific message (long map name) s = CG_ConfigString( CS_MESSAGE ); index = atoi(s); if ( s[0] ) { if (index>0) { CG_DrawProportionalString( 15, y, va("\"%s\"",bg_infoItemList[index].infoString),CG_BIGFONT,colorTable[CT_WHITE] ); } else { CG_DrawProportionalString( 15, y, va("\"%s\"",s),CG_BIGFONT,colorTable[CT_WHITE] ); } // CG_CenterGiantLine( y, s ); y += 20; } }