/* ==================== CG_DrawInformation Draw all the status / pacifier stuff during level loading ==================== */ void CG_DrawInformation( void ) { const char *s; const char *info; const char *sysInfo; int y; int value; qhandle_t levelshot; qhandle_t detail; char buf[1024]; info = CG_ConfigString( CS_SERVERINFO ); sysInfo = CG_ConfigString( CS_SYSTEMINFO ); s = Info_ValueForKey( info, "mapname" ); levelshot = trap_R_RegisterShaderNoMip( va( "levelshots/%s", s ) ); if ( !levelshot ) { levelshot = trap_R_RegisterShaderNoMip( "menu/art/unknownmap" ); } trap_R_SetColor( NULL ); trap_R_DrawStretchPic( 0, 0, cgs.glconfig.vidWidth, cgs.glconfig.vidHeight, 0, 0, 1, 1, levelshot ); // blend a detail texture over it detail = trap_R_RegisterShader( "levelShotDetail" ); trap_R_DrawStretchPic( 0, 0, cgs.glconfig.vidWidth, cgs.glconfig.vidHeight, 0, 0, 2.5, 2, detail ); // draw the icons of things as they are loaded CG_DrawLoadingIcons(); // the first 150 rows are reserved for the client connection // screen to write into if ( cg.infoScreenText[0] ) { UI_DrawProportionalString( 320, 128-32, va("Loading... %s", cg.infoScreenText), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); } else { UI_DrawProportionalString( 320, 128-32, "Awaiting snapshot...", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); } // draw info string information y = 180-32; // don't print server lines if playing a local game trap_Cvar_VariableStringBuffer( "sv_running", buf, sizeof( buf ) ); if ( !atoi( buf ) ) { // server hostname Q_strncpyz(buf, Info_ValueForKey( info, "sv_hostname" ), 1024); Q_CleanStr(buf); UI_DrawProportionalString( 320, y, buf, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; // pure server s = Info_ValueForKey( sysInfo, "sv_pure" ); if ( s[0] == '1' ) { UI_DrawProportionalString( 320, y, "Pure Server", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } // server-specific message of the day s = CG_ConfigString( CS_MOTD ); if ( s[0] ) { UI_DrawProportionalString( 320, y, s, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } // some extra space after hostname and motd y += 10; } // map-specific message (long map name) s = CG_ConfigString( CS_MESSAGE ); if ( s[0] ) { UI_DrawProportionalString( 320, y, s, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } // cheats warning s = Info_ValueForKey( sysInfo, "sv_cheats" ); if ( s[0] == '1' ) { UI_DrawProportionalString( 320, y, "CHEATS ARE ENABLED", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } // game type UI_DrawProportionalString( 320, y, cgs.gametypeName, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; value = atoi( Info_ValueForKey( info, "timelimit" ) ); if ( value ) { UI_DrawProportionalString( 320, y, va( "timelimit %i", value ), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } if (cgs.gametype < GT_CTF ) { value = atoi( Info_ValueForKey( info, "fraglimit" ) ); if ( value ) { UI_DrawProportionalString( 320, y, va( "fraglimit %i", value ), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } } if (cgs.gametype >= GT_CTF) { value = atoi( Info_ValueForKey( info, "capturelimit" ) ); if ( value ) { UI_DrawProportionalString( 320, y, va( "capturelimit %i", value ), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); } } }
void CG_DrawInformation(void) { const char *s, *info, *sysInfo; int y, value; Handle levelshot, detail; char buf[1024]; info = CG_ConfigString(CS_SERVERINFO); sysInfo = CG_ConfigString(CS_SYSTEMINFO); s = Info_ValueForKey(info, "mapname"); levelshot = trap_R_RegisterShaderNoMip(va("levelshots/%s", s)); if(!levelshot) levelshot = trap_R_RegisterShaderNoMip(Pmenuart "/sigil"); trap_R_SetColor(NULL); CG_DrawPic(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, levelshot); /* draw the icons of things as they are loaded */ CG_DrawLoadingIcons(); /* * the first 150 rows are reserved for the client connection * screen to write into */ if(cg.infoScreenText[0]) UI_DrawProportionalString(320, 128-32, va("Loading... %s", cg.infoScreenText), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); else UI_DrawProportionalString(320, 128-32, "Awaiting snapshot...", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); /* draw info string information */ y = 180-32; /* don't print server lines if playing a local game */ trap_cvargetstrbuf("sv_running", buf, sizeof(buf)); if(!atoi(buf)){ /* server hostname */ Q_strncpyz(buf, Info_ValueForKey(info, "sv_hostname"), 1024); Q_cleanstr(buf); UI_DrawProportionalString(320, y, buf, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; /* pure server */ s = Info_ValueForKey(sysInfo, "sv_pure"); if(s[0] == '1'){ UI_DrawProportionalString(320, y, "Pure Server", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } /* server-specific message of the day */ s = CG_ConfigString(CS_MOTD); if(s[0]){ UI_DrawProportionalString(320, y, s, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } /* some extra space after hostname and motd */ y += 10; } /* map-specific message (long map name) */ s = CG_ConfigString(CS_MESSAGE); if(s[0]){ UI_DrawProportionalString(320, y, s, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } /* cheats warning */ s = Info_ValueForKey(sysInfo, "sv_cheats"); if(s[0] == '1'){ UI_DrawProportionalString(320, y, "CHEATS ARE ENABLED", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } /* game type */ switch(cgs.gametype){ case GT_FFA: s = "Free For All"; break; case GT_SINGLE_PLAYER: s = "Single Player"; break; case GT_TOURNAMENT: s = "Tournament"; break; case GT_TEAM: s = "Team Deathmatch"; break; case GT_CTF: s = "Capture The Flag"; break; case GT_1FCTF: s = "One-Flag CTF"; break; default: s = "Unknown Gametype"; break; } UI_DrawProportionalString(320, y, s, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; value = atoi(Info_ValueForKey(info, "timelimit")); if(value){ UI_DrawProportionalString(320, y, va("timelimit %i", value), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } if(cgs.gametype < GT_CTF){ value = atoi(Info_ValueForKey(info, "fraglimit")); if(value){ UI_DrawProportionalString(320, y, va("fraglimit %i", value), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } } if(cgs.gametype >= GT_CTF){ value = atoi(Info_ValueForKey(info, "capturelimit")); if(value){ UI_DrawProportionalString(320, y, va("capturelimit %i", value), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } } }
void CG_DrawInformation( void ) { const char *s; const char *info; const char *sysInfo; int y,x; // int value; qhandle_t levelshot; // qhandle_t detail; char buf[1024]; int strlength,length; //trap_Cvar_Set ("rpg_playIntro", "1"); info = CG_ConfigString( CS_SERVERINFO ); sysInfo = CG_ConfigString( CS_SYSTEMINFO ); s = Info_ValueForKey( info, "mapname" ); levelshot = trap_R_RegisterShaderNoMip( va( "levelshots/%s.tga", s ) ); if ( !levelshot ) { levelshot = trap_R_RegisterShaderNoMip( "levelshots/unknownmap" ); } cgs.widescreen.state = WIDESCREEN_NONE; trap_R_SetColor( colorTable[CT_BLACK] ); CG_DrawPic( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, cgs.media.whiteShader ); cgs.widescreen.state = WIDESCREEN_CENTER; trap_R_SetColor( colorTable[CT_DKGREY] ); CG_DrawPic( 11, 60, 260, 196, cgs.media.whiteShader ); trap_R_SetColor( NULL ); CG_DrawPic( 13, 62, 256, 192, levelshot ); //correct aspect // trap_R_SetColor( colorTable[CT_LTGREY] ); // CG_DrawPic( 418, 82, 132, 132, cgs.media.whiteShader ); // trap_R_SetColor( NULL ); // CG_DrawPic( 420, 84, 128, 128, levelshot ); // blend a detail texture over it // detail = trap_R_RegisterShader( "levelShotDetail" ); // trap_R_DrawStretchPic( 0, 0, cgs.glconfig.vidWidth, cgs.glconfig.vidHeight, 0, 0, 1, 1, detail ); UI_DrawProportionalString( 10, 10, ingame_text[IGT_HOLODECKSIMULATION], UI_BIGFONT, colorTable[CT_LTORANGE] ); strlength = UI_ProportionalStringWidth(ingame_text[IGT_HOLODECKSIMULATION],UI_BIGFONT); length = 582 - (strlength + 6); trap_R_SetColor( colorTable[CT_DKORANGE]); CG_DrawPic( 10 + strlength + 6, 11, length, 22,cgs.media.whiteShader); // CG_DrawPic( 224, 11, 368, 22,cgs.media.whiteShader); CG_DrawPic( 595, 11, 32, 32,cgs.media.halfroundr_22); // Right End trap_R_SetColor( colorTable[CT_DKPURPLE1]); CG_DrawPic( 274+333, 232, -32, 32,cgs.media.corner_12_18); // LR CG_DrawPic( 274+333, 84, -32, -32,cgs.media.corner_12_18); // UR CG_DrawPic( 274, 60, 314, 18,cgs.media.whiteShader); // Top CG_DrawPic( 274, 238, 314, 18,cgs.media.whiteShader); //Bottom CG_DrawPic( 274, 75, 10, 170,cgs.media.whiteShader); // Left CG_DrawPic( 274+321, 78, 12, 162,cgs.media.whiteShader); // Right CG_LoadBar(); // draw the icons of thiings as they are loaded CG_DrawLoadingIcons(); // the first 150 rows are reserved for the client connection // screen to write into if ( cg.infoScreenText[0] ) { UI_DrawProportionalString( 320, 442, va("%s ... %s", ingame_text[IGT_LOADING], cg.infoScreenText), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorTable[CT_LTGOLD1]); } else { UI_DrawProportionalString( 320, 442, va("%s...", ingame_text[IGT_SNAPSHOT]), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorTable[CT_LTGOLD1] ); } // draw info string information y = 107; x = 288; // don't print server lines if playing a local game trap_Cvar_VariableStringBuffer( "sv_running", buf, sizeof( buf ) ); if ( !atoi( buf ) ) { // server hostname Q_strncpyz(buf, Info_ValueForKey( info, "sv_hostname" ), 1024); Q_CleanStr(buf); UI_DrawProportionalString( x, y, buf, UI_SMALLFONT|UI_DROPSHADOW, colorTable[CT_VLTGOLD1] ); y += PROP_HEIGHT; // pure server s = Info_ValueForKey( sysInfo, "sv_pure" ); if ( s[0] == '1' ) { UI_DrawProportionalString( x, y, ingame_text[IGT_PURESERVER], UI_SMALLFONT|UI_DROPSHADOW, colorTable[CT_VLTGOLD1] ); y += PROP_HEIGHT; } // server-specific message of the day s = CG_ConfigString( CS_MOTD ); if ( s[0] ) { UI_DrawProportionalString(320, y, s, UI_SMALLFONT|UI_DROPSHADOW, colorTable[CT_VLTGOLD1] ); y += PROP_HEIGHT; } // some extra space after hostname and motd y += 10; } // map-specific message (long map name) s = CG_ConfigString( CS_MESSAGE ); if ( s[0] ) { UI_DrawProportionalString( x, y, s, UI_SMALLFONT|UI_DROPSHADOW, colorTable[CT_VLTGOLD1] ); y += PROP_HEIGHT; } // cheats warning s = Info_ValueForKey( sysInfo, "sv_cheats" ); if ( s[0] == '1' ) { UI_DrawProportionalString( x, y, ingame_text[IGT_CHEATSAREENABLED], UI_SMALLFONT|UI_DROPSHADOW, colorTable[CT_VLTGOLD1] ); y += PROP_HEIGHT; } // RPG-X | Marcin | 24/12/2008 // privacy thing :p // translate later s = Info_ValueForKey( info, "rpg_respectPrivacy" ); if ( atoi( s ) != 0 ) { UI_DrawProportionalString( x, y, "PRIVACY MODE ^5ON", UI_SMALLFONT|UI_DROPSHADOW, colorTable[CT_VLTGOLD1] ); y += PROP_HEIGHT; } else { UI_DrawProportionalString( x, y, "PRIVACY MODE ^1OFF", UI_SMALLFONT|UI_DROPSHADOW, colorTable[CT_VLTGOLD1] ); y += PROP_HEIGHT; } s = ingame_text[IGT_GAME_FREEFORALL]; char gamename[1024]; Q_strncpyz( gamename, s, sizeof(gamename) ); CG_AddGameModNameToGameName( gamename ); UI_DrawProportionalString( x, y, gamename, UI_SMALLFONT|UI_DROPSHADOW, colorTable[CT_VLTGOLD1] ); y += PROP_HEIGHT; cgs.widescreen.state = WIDESCREEN_NONE; }
/* ==================== CG_DrawInformation Draw all the status / pacifier stuff during level loading ==================== */ void CG_DrawInformation( void ) { const char *s; const char *info; const char *sysInfo; int y; int value; qhandle_t levelshot = 0; // TTimo: init // qhandle_t detail; char buf[1024]; static int lastDraw = 0; // Ridah, so we don't draw the screen more often than we need to int ms; static int callCount = 0; float percentDone; int expectedHunk; char hunkBuf[MAX_QPATH]; vec4_t color; if ( cg.snap && ( strlen( cg_missionStats.string ) <= 1 ) ) { return; // we are in the world, no need to draw information } if ( callCount ) { // reject recursive calls return; } ms = trap_Milliseconds(); if ( ( lastDraw <= ms ) && ( lastDraw > ms - 100 ) ) { return; } lastDraw = ms; callCount++; info = CG_ConfigString( CS_SERVERINFO ); sysInfo = CG_ConfigString( CS_SYSTEMINFO ); trap_Cvar_VariableStringBuffer( "com_expectedhunkusage", hunkBuf, MAX_QPATH ); expectedHunk = atoi( hunkBuf ); s = Info_ValueForKey( info, "mapname" ); if ( s && s[0] != 0 ) { // there is often no 's' if ( strlen( cg_missionStats.string ) > 1 && cg_missionStats.string[0] == 's' ) { levelshot = trap_R_RegisterShaderNoMip( va( "levelshots/pre_%s_stats.tga", s ) ); } else { // show briefing screen if ( s && s[0] != 0 ) { // there is often no 's' levelshot = trap_R_RegisterShaderNoMip( va( "levelshots/%s.tga", s ) ); } } } if ( !levelshot ) { levelshot = trap_R_RegisterShaderNoMip( "menu/art/unknownmap" ); } trap_R_SetColor( NULL ); CG_DrawPic( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, levelshot ); // blend a detail texture over it //detail = trap_R_RegisterShader( "levelShotDetail" ); //trap_R_DrawStretchPic( 0, 0, cgs.glconfig.vidWidth, cgs.glconfig.vidHeight, 0, 0, 2.5, 2, detail ); // (SA) commented out for Drew // UI_DrawProportionalString( 320, 16, va( "Loading %s", Info_ValueForKey( info, "mapname" ) ), UI_SMALLFONT|UI_CENTER|UI_DROPSHADOW, colorWhite ); // show the loading progress VectorSet( color, 0.8, 0.8, 0.8 ); color[3] = 0.8; if ( strlen( cg_missionStats.string ) > 1 && cg_missionStats.string[0] == 's' ) { vec2_t xy = { 190, 470 }; vec2_t wh = { 260, 10 }; // draw the mission stats while loading if ( !Q_strncmp( cg_missionStats.string, "s=", 2 ) ) { CG_DrawStats( cg_missionStats.string + 2 ); } if ( cg_waitForFire.integer == 1 ) { // waiting for server to finish loading the map UI_DrawProportionalString( 320, xy[1] + wh[1] - 10, "press fire to continue", UI_CENTER | UI_EXSMALLFONT | UI_DROPSHADOW, color ); } else if ( expectedHunk > 0 ) { percentDone = (float)( cg_hunkUsed.integer + cg_soundAdjust.integer ) / (float)( expectedHunk ); if ( percentDone > 0.97 ) { // never actually show 100%, since we are not in the game yet percentDone = 0.97; } CG_HorizontalPercentBar( xy[0] + 10, xy[1] + wh[1] - 10, wh[0] - 20, 10, percentDone ); } else if ( expectedHunk == -2 ) { // we're ready, press a key to start playing if ( ( ms % 1000 ) < 700 ) { // flashing to get our attention UI_DrawProportionalString( 320, xy[1] + wh[1] - 10, "press fire to begin", UI_CENTER | UI_EXSMALLFONT | UI_DROPSHADOW, color ); } } else { UI_DrawProportionalString( 320, xy[1] + wh[1] - 10, "please wait", UI_CENTER | UI_EXSMALLFONT | UI_DROPSHADOW, color ); } trap_UpdateScreen(); callCount--; return; } // Ridah, in single player, cheats disabled, don't show unnecessary information // DHM - Nerve :: maybe temp, but we want to display the same as single player right now if ( cgs.gametype == GT_SINGLE_PLAYER || cgs.gametype >= GT_WOLF ) { vec2_t xy = { 200, 468 }; vec2_t wh = { 240, 10 }; // show the server motd CG_DrawMotd(); // show the percent complete bar if ( expectedHunk > 0 ) { percentDone = (float)( cg_hunkUsed.integer + cg_soundAdjust.integer ) / (float)( expectedHunk ); if ( percentDone > 0.97 ) { percentDone = 0.97; } CG_HorizontalPercentBar( xy[0], xy[1], wh[0], wh[1], percentDone ); } else if ( expectedHunk == -2 ) { // we're ready, press a key to start playing if ( ( ms % 1000 ) < 700 ) { // flashing to get our attention UI_DrawProportionalString( 320, xy[1] - 2, "press fire to begin", UI_CENTER | UI_EXSMALLFONT | UI_DROPSHADOW, color ); } } trap_UpdateScreen(); callCount--; return; } // done. // draw the icons of thiings as they are loaded CG_DrawLoadingIcons(); // the first 150 rows are reserved for the client connection // screen to write into if ( cg.infoScreenText[0] ) { UI_DrawProportionalString( 320, 128, va( "Loading... %s", cg.infoScreenText ), UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite ); } else { UI_DrawProportionalString( 320, 128, "Awaiting snapshot...", UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite ); } // draw info string information y = 180; // don't print server lines if playing a local game trap_Cvar_VariableStringBuffer( "sv_running", buf, sizeof( buf ) ); if ( !atoi( buf ) ) { // server hostname s = Info_ValueForKey( info, "sv_hostname" ); UI_DrawProportionalString( 320, y, s, UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; // server-specific message of the day s = CG_ConfigString( CS_MOTD ); if ( s[0] ) { UI_DrawProportionalString( 320, y, s, UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } // some extra space after hostname and motd y += 10; } // map-specific message (long map name) s = CG_ConfigString( CS_MESSAGE ); if ( s[0] ) { UI_DrawProportionalString( 320, y, s, UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } // cheats warning s = Info_ValueForKey( sysInfo, "sv_cheats" ); if ( s[0] == '1' ) { UI_DrawProportionalString( 320, y, "CHEATS ARE ENABLED", UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } // game type switch ( cgs.gametype ) { case GT_FFA: s = "Free For All"; break; case GT_SINGLE_PLAYER: s = "Single Player"; break; case GT_TOURNAMENT: s = "Tournament"; break; case GT_TEAM: s = "Team Deathmatch"; break; case GT_CTF: s = "Capture The Flag"; break; // JPW NERVE case GT_WOLF: s = "Wolfenstein Multiplayer"; break; // jpw // NERVE - SMF case GT_WOLF_STOPWATCH: s = "WolfMP Stopwatch"; break; case GT_WOLF_CP: s = "WolfMP Checkpoint"; break; // -NERVE - SMF // JPW NERVE case GT_WOLF_CPH: s = "WolfMP Capture & Hold"; break; // jpw default: s = "Unknown Gametype"; break; } UI_DrawProportionalString( 320, y, s, UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; value = atoi( Info_ValueForKey( info, "timelimit" ) ); if ( value ) { UI_DrawProportionalString( 320, y, va( "timelimit %i", value ), UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } if ( cgs.gametype != GT_CTF && cgs.gametype != GT_SINGLE_PLAYER ) { value = atoi( Info_ValueForKey( info, "fraglimit" ) ); if ( value ) { UI_DrawProportionalString( 320, y, va( "fraglimit %i", value ), UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } } if ( cgs.gametype == GT_CTF ) { value = atoi( Info_ValueForKey( info, "capturelimit" ) ); if ( value ) { UI_DrawProportionalString( 320, y, va( "capturelimit %i", value ), UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } } callCount--; }
/* ==================== CG_DrawInformation Draw all the status / pacifier stuff during level loading ==================== */ void CG_DrawInformation(void) { const char *s; const char *info; const char *sysInfo; int y; int value; qhandle_t levelshot; qhandle_t detail; char buf[1024]; info = CG_ConfigString(CS_SERVERINFO); sysInfo = CG_ConfigString(CS_SYSTEMINFO); s = Info_ValueForKey(info, "mapname"); levelshot = trap_R_RegisterShaderNoMip(va("levelshots/%s.tga", s)); if (!levelshot) { levelshot = trap_R_RegisterShaderNoMip("menu/art/unknownmap"); } trap_R_SetColor(NULL); CG_DrawPic(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, levelshot); // blend a detail texture over it detail = trap_R_RegisterShader("levelShotDetail"); trap_R_DrawStretchPic(0, 0, cgs.glconfig.vidWidth, cgs.glconfig.vidHeight, 0, 0, 2.5, 2, detail); // draw the icons of things as they are loaded CG_DrawLoadingIcons(); // the first 150 rows are reserved for the client connection // screen to write into if (cg.infoScreenText[0]) { UI_DrawProportionalString(320, 128-32, va("Loading... %s", cg.infoScreenText), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); } else { UI_DrawProportionalString(320, 128-32, "Awaiting snapshot...", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); } // draw info string information y = 180-32; // don't print server lines if playing a local game trap_Cvar_VariableStringBuffer("sv_running", buf, sizeof(buf)); if (!atoi(buf)) { // server hostname Q_strncpyz(buf, Info_ValueForKey(info, "sv_hostname"), 1024); Q_CleanStr(buf); UI_DrawProportionalString(320, y, buf, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; // pure server s = Info_ValueForKey(sysInfo, "sv_pure"); if (s[0] == '1') { UI_DrawProportionalString(320, y, "Pure Server", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } // server-specific message of the day s = CG_ConfigString(CS_MOTD); if (s[0]) { UI_DrawProportionalString(320, y, s, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } // some extra space after hostname and motd y += 10; } // map-specific message (long map name) s = CG_ConfigString(CS_MESSAGE); if (s[0]) { UI_DrawProportionalString(320, y, s, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } // cheats warning s = Info_ValueForKey(sysInfo, "sv_cheats"); if (s[0] == '1') { UI_DrawProportionalString(320, y, "CHEATS ARE ENABLED", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } // game type switch (cgs.gametype) { case GT_FFA: s = "Free For All"; break; case GT_SINGLE_PLAYER: s = "Single Player"; break; case GT_TOURNAMENT: s = "Tournament"; break; case GT_TEAM: s = "Team Deathmatch"; break; case GT_CTF: s = "Capture The Flag"; break; case GT_DESTROY: s = "Invasion b"INVASION_VERSION" - Destroy All Eggs"; break; case GT_INVASION: s = "Invasion b"INVASION_VERSION" - Teleport The Egg"; break; /*#ifdef MISSIONPACK case GT_1FCTF: s = "One Flag CTF"; break; case GT_OBELISK: s = "Overload"; break; case GT_HARVESTER: s = "Harvester"; break; #endif*/ default: s = "Unknown Gametype"; break; } UI_DrawProportionalString(320, y, s, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; value = atoi(Info_ValueForKey(info, "timelimit")); if (value) { UI_DrawProportionalString(320, y, va("timelimit %i", value), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } if (cgs.gametype < GT_CTF) { value = atoi(Info_ValueForKey(info, "fraglimit")); if (value) { UI_DrawProportionalString(320, y, va("fraglimit %i", value), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } } if (cgs.gametype >= GT_CTF) { char *StrType[] = { "capturelimit", "winlimit" }; value = atoi(Info_ValueForKey(info, StrType[0])); if (value) { char *s = NULL; if (cgs.gametype == GT_INVASION || cgs.gametype == GT_DESTROY) s = StrType[1]; else s = StrType[0]; UI_DrawProportionalString(320, y, va("%s %i", s, value), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT; } } }
/* ==================== CG_DrawInformation Draw all the status / pacifier stuff during level loading ==================== */ void CG_DrawInformation( void ) { const char *s; const char *info; const char *sysInfo; const char *mapname; int y; int value; qhandle_t background; qhandle_t levelshot; qhandle_t rahmen; char buf[1024]; qboolean local; info = CG_ConfigString( CS_SERVERINFO ); sysInfo = CG_ConfigString( CS_SYSTEMINFO ); trap_R_SetColor( NULL ); // draw background background = trap_R_RegisterShaderNoMip( "menubacklandscape" ); CG_DrawPic( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, background ); // draw level screenshot mapname = Info_ValueForKey( info, "mapname" ); levelshot = trap_R_RegisterShaderNoMip( va( "levelshots/%s.tga", mapname ) ); if ( !levelshot ) { levelshot = trap_R_RegisterShaderNoMip( "menu/art/unknownmap" ); } rahmen = trap_R_RegisterShaderNoMip( "gfx/2d/select" ); CG_DrawPic( 397, 54, 222, 166, rahmen ); CG_DrawPic( 400, 57, 216, 160, levelshot ); // blend a detail texture over it // detail = trap_R_RegisterShader( "levelShotDetail" ); // trap_R_DrawStretchPic( 0, 0, cgs.glconfig.vidWidth, cgs.glconfig.vidHeight, 0, 0, 2.5, 2, detail ); // draw the icons of things as they are loaded CG_DrawLoadingIcons(); // the first 150 rows are reserved for the client connection // screen to write into if ( cg.infoScreenText[0] ) { UI_DrawProportionalString( 20, 54, "Loading...", UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); UI_DrawProportionalString( 20, 80, cg.infoScreenText, UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); } else { UI_DrawProportionalString( 20, 54, "Awaiting snapshot...", UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); } // draw info string information y = 118; // map-specific message (long map name) s = CG_ConfigString( CS_MESSAGE ); if ( s[0] ) { UI_DrawProportionalString( 20, y, s, UI_TINYFONT, colorWhite ); y += 18; } // game type switch ( cgs.gametype ) { case GT_TACTICAL: s = "Tactical"; break; case GT_DM: s = "Deathmatch"; break; default: s = "Unknown Gametype"; break; } UI_DrawProportionalString( 20, y, s, UI_TINYFONT, colorWhite ); y += 18; // cheats warning s = Info_ValueForKey( sysInfo, "sv_cheats" ); if ( s[0] == '1' ) { UI_DrawProportionalString( 20, y, "CHEATS ARE ENABLED", UI_TINYFONT, colorWhite ); y += 18; } // friendly fire setting if ( cgs.gametype == GT_TACTICAL ) { s = Info_ValueForKey( info, "g_friendlyFire" ); if ( s[0] == '0' ) { UI_DrawProportionalString( 20, y, "Friendly Fire - OFF", UI_TINYFONT, colorWhite ); } else if ( s[0] == '1' ) { UI_DrawProportionalString( 20, y, "Friendly Fire - LIMITED", UI_TINYFONT, colorWhite ); } else { UI_DrawProportionalString( 20, y, "Friendly Fire - FULL", UI_TINYFONT, colorWhite ); } y += 18; } value = atoi( Info_ValueForKey( info, "timelimit" ) ); if ( value ) { UI_DrawProportionalString( 20, y, va( "timelimit %i", value ), UI_TINYFONT, colorWhite ); y += 18; } if ( cgs.gametype == GT_DM ) { value = atoi( Info_ValueForKey( info, "fraglimit" ) ); if ( value ) { UI_DrawProportionalString( 20, y, va( "fraglimit %i", value ), UI_TINYFONT, colorWhite ); y += 18; } } if ( cgs.gametype == GT_TACTICAL ) { value = atoi( Info_ValueForKey( info, "winlimit" ) ); if ( value ) { UI_DrawProportionalString( 20, y, va( "winlimit %i", value ), UI_TINYFONT, colorWhite ); y += 18; } } // extra space y += 10; // don't print server lines if playing a local game trap_Cvar_VariableStringBuffer( "sv_running", buf, sizeof( buf ) ); local = !atoi( buf ); if ( local ) { // pure server s = Info_ValueForKey( sysInfo, "sv_pure" ); if ( s[0] == '1' ) { UI_DrawProportionalString( 20, y, "Pure Server", UI_TINYFONT, colorWhite ); y += 18; } s = Info_ValueForKey( info, "g_delagWeapons" ); if ( s[0] == '1' ) { UI_DrawProportionalString( 20, y, "Lag Compensated", UI_TINYFONT, colorWhite ); y += 18; } // server hostname Q_strncpyz(buf, Info_ValueForKey( info, "sv_hostname" ), 1024); Q_CleanStr(buf); UI_DrawProportionalString( 20, y, buf, UI_TINYFONT, colorWhite ); y += 18; // server-specific message of the day s = CG_ConfigString( CS_MOTD ); if ( s[0] ) { UI_DrawProportionalString( 20, y, s, UI_TINYFONT, colorWhite ); y += 18; } // some extra space after hostname and motd //y += 10; } }
/* ==================== CG_DrawInformation Draw all the status / pacifier stuff during level loading and ingame ==================== **/ void CG_DrawInformation (qboolean loading) { const char *s; const char *info; const char *sysInfo; int y; int value; qhandle_t levelshot; qhandle_t detail; char buf[1024]; //vec4_t color; int n; int lines; info = CG_ConfigString( CS_SERVERINFO ); sysInfo = CG_ConfigString( CS_SYSTEMINFO ); if (loading) { QLWideScreen = 0; s = Info_ValueForKey( info, "mapname" ); if (CG_FileExists(va("levelshots/%s.tga", s)) || CG_FileExists(va("levelshots/%s.jpg", s))) { levelshot = trap_R_RegisterShaderNoMip( va( "levelshots/%s.tga", s ) ); } else { levelshot = trap_R_RegisterShaderNoMip( "menu/art/unknownmap" ); } if ( !levelshot ) { levelshot = trap_R_RegisterShaderNoMip( "menu/art/unknownmap" ); } trap_R_SetColor( NULL ); //trap_R_SetColor(colorBlue); //Vector4Set(color, 0, 0, 1, 1); //trap_R_SetColor(color); CG_DrawPic( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, levelshot ); //FIXME new ql 2014-09-07 not found and spams "RE_RegisterShader(levelShotDetail) failed" // blend a detail texture over it detail = trap_R_RegisterShader( "wc/levelShotDetail" ); if (detail) { trap_R_DrawStretchPic( 0, 0, cgs.glconfig.vidWidth, cgs.glconfig.vidHeight, 0, 0, 2.5, 2, detail ); } // draw the icons of things as they are loaded QLWideScreen = 2; CG_DrawLoadingIcons(); // the first 150 rows are reserved for the client connection // screen to write into if ( cg.infoScreenText[0] ) { UI_DrawProportionalString3( 320, 128-32, va("Loading... %s", cg.infoScreenText), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); } else { UI_DrawProportionalString3( 320, 128-32, "Awaiting snapshot...", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); } } // loading QLWideScreen = 1; //CG_DrawStringExt(2, 2, va("wolfcamql version %s Τη γλώσσα μου έδωσαν ελληνική test test", WOLFCAM_VERSION), colorYellow, qfalse, qtrue, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, 0, &cgs.media.smallchar); //CG_DrawStringExt(2, 2, va("wolfcamql version %s Τη γλώσσα μου έδωσαν ελληνική test test", WOLFCAM_VERSION), colorYellow, qfalse, qtrue, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, 0, &cgs.media.bigchar); CG_DrawStringExt(2, 2, va("wolfcamql version %s", WOLFCAM_VERSION), colorYellow, qfalse, qtrue, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, 0, &cgs.media.bigchar); QLWideScreen = 2; // draw info string information if (loading) { //y = 200 - 32; y = 160 - 32; } else { y = 20; } // don't print server lines if playing a local game trap_Cvar_VariableStringBuffer( "sv_running", buf, sizeof( buf ) ); if (1) { //( !atoi( buf ) ) { int timePlayed; if (cgs.cpma) { //Com_Printf("^11: %s\n", CG_GetLocalTimeString()); } timePlayed = atoi(Info_ValueForKey(CG_ConfigString(CS_SERVERINFO), "g_levelStartTime")); if (timePlayed) { lines = UI_DrawProportionalString3(320, y, CG_GetLocalTimeString(), UI_CENTER | UI_SMALLFONT|UI_DROPSHADOW, colorYellow); y += PROP_HEIGHT * lines; } // server hostname lines = UI_DrawProportionalString3( 320, y, Info_ValueForKey(info, "sv_hostname"), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT * lines; // ranked or mod if (cgs.protocol == PROTOCOL_QL && cgs.realProtocol < 91) { value = atoi(Info_ValueForKey(info, "sv_ranked")); Com_sprintf(buf, sizeof(buf), "(%s server)", value ? "ranked" : "unranked"); } else if (cgs.protocol == PROTOCOL_Q3) { // mod: baseq3, osp, cpma, etc.. if (cgs.ospEncrypt) { Com_sprintf(buf, sizeof(buf), "osp ^6encrypted"); } else if (cgs.osp) { Com_sprintf(buf, sizeof(buf), "osp"); } else if (cgs.cpma) { Com_sprintf(buf, sizeof(buf), "cpma: %s", Info_ValueForKey(CG_ConfigString(CS_SERVERINFO), "server_gameplay")); } else { Com_sprintf(buf, sizeof(buf), "%s", CG_ConfigString(CS_GAME_VERSION)); } } else { // current ql, skip //FIXME check for maybe minix or something else? buf[0] = '\0'; } if (buf[0] != '\0') { lines = UI_DrawProportionalString3( 320, y, buf, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorYellow); y += PROP_HEIGHT * lines; } // pure server s = Info_ValueForKey( sysInfo, "sv_pure" ); if ( s[0] == '1' ) { lines = UI_DrawProportionalString3( 320, y, va("Pure Server protocol %d", SC_Cvar_Get_Int("real_protocol")), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorCyan ); y += PROP_HEIGHT * lines; } else { lines = UI_DrawProportionalString3( 320, y, va("Impure Server protocol %d", SC_Cvar_Get_Int("real_protocol")), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorRed ); y += PROP_HEIGHT * lines; } // server-specific message of the day s = CG_ConfigString( CS_MOTD ); if ( s[0] ) { lines = UI_DrawProportionalString3( 320, y, s, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT * lines; } // some extra space after hostname and motd y += 10; } // map-specific message (long map name) //s = CG_ConfigString( CS_MESSAGE ); s = va("^1(%s.bsp) ^7%s", Info_ValueForKey(info, "mapname"), CG_ConfigString(CS_MESSAGE)); if ( s[0] ) { lines = UI_DrawProportionalString3( 320, y, s, UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT * lines; } // cheats warning s = Info_ValueForKey( sysInfo, "sv_cheats" ); if ( s[0] == '1' ) { lines = UI_DrawProportionalString3( 320, y, "CHEATS ARE ENABLED", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorRed ); y += PROP_HEIGHT * lines; } // game type if (cgs.gametype == GT_FFA) { s = "Free For All"; } else if (cgs.gametype == GT_SINGLE_PLAYER) { s = "Single Player"; } else if (cgs.gametype == GT_TOURNAMENT) { s = "Duel"; } else if (cgs.gametype == GT_TEAM) { s = "Team Deathmatch"; } else if (cgs.gametype == GT_CA) { s = "Clan Arena"; } else if (cgs.gametype == GT_CTF) { s = "Capture The Flag"; } else if (cgs.gametype == GT_1FCTF) { s = "One Flag CTF"; } else if (cgs.gametype == GT_CTFS) { if (cgs.cpma) { s = "Capture Strike"; } else { s = "Attack and Defend"; } } else if (cgs.gametype == GT_OBELISK) { s = "Overload"; } else if (cgs.gametype == GT_HARVESTER) { s = "Harvester"; } else if (cgs.gametype == GT_FREEZETAG) { s = "Freeze Tag"; } else if (cgs.gametype == GT_DOMINATION) { s = "Domination"; } else if (cgs.gametype == GT_RED_ROVER) { if (cgs.customServerSettings & SERVER_SETTING_INFECTED) { s = "Red Rover (Infected)"; } else { s = "Red Rover"; } } else if (cgs.gametype == GT_NTF) { s = "Not Team Fortress"; } else if (cgs.gametype == GT_2V2) { s = "Two vs Two"; } else if (cgs.gametype == GT_HM) { s = "Hoonymode"; } else if (cgs.gametype == GT_RACE) { s = "Race"; } else { s = "Unknown Gametype"; } if (cgs.protocol != PROTOCOL_QL) { lines = UI_DrawProportionalString3(320, y, s, UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorYellow); y += PROP_HEIGHT * lines; } else { n = atoi(Info_ValueForKey(info, "ruleset")); if (n == 2) { lines = UI_DrawProportionalString3(320, y, va("%s %s%s", s, " (pql)", atoi(Info_ValueForKey(info, "g_instagib")) ? " (instagib)" : ""), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorBlue); } else { if (CG_CheckQlVersion(0, 1, 0, 495)) { n = atoi(Info_ValueForKey(CG_ConfigString(CS_ARMOR_TIERED), "armor_tiered")); } else { n = 0; } lines = UI_DrawProportionalString3(320, y, va("%s%s%s", s, n == 1 ? " (tiered armor)" : "", atoi(Info_ValueForKey(info, "g_instagib")) ? " (instagib)" : ""), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, n == 1 ? colorGreen : atoi(Info_ValueForKey(info, "g_instagib")) ? colorMagenta : colorYellow); } y += PROP_HEIGHT * lines; if (atoi(Info_ValueForKey(info, "ruleset")) != 2) { if (*CG_ConfigString(CS_PMOVE_SETTINGS)) { if (atoi(Info_ValueForKey(CG_ConfigString(CS_PMOVE_SETTINGS), "pmove_WeaponRaiseTime")) == 0 && atoi(Info_ValueForKey(CG_ConfigString(CS_PMOVE_SETTINGS), "pmove_WeaponDropTime")) == 0) { lines = UI_DrawProportionalString3(320, y, "fast weapon switch", UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorCyan); y += PROP_HEIGHT * lines; } } } } value = atoi( Info_ValueForKey( info, "scorelimit" ) ); if ( value ) { lines = UI_DrawProportionalString3( 320, y, va( "scorelimit %i", value ), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT * lines; } value = atoi( Info_ValueForKey( info, "timelimit" ) ); if ( value ) { lines = UI_DrawProportionalString3( 320, y, va( "timelimit %i", value ), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT * lines; } if (cgs.gametype < GT_CA ) { value = atoi( Info_ValueForKey( info, "fraglimit" ) ); if ( value ) { lines = UI_DrawProportionalString3( 320, y, va( "fraglimit %i", value ), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT * lines; } } if (cgs.gametype == GT_CA || cgs.gametype == GT_FREEZETAG) { value = atoi( Info_ValueForKey( info, "roundlimit" ) ); if ( value ) { lines = UI_DrawProportionalString3( 320, y, va( "roundlimit %i", value ), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT * lines; } } if (cgs.gametype >= GT_CTF && cgs.gametype < GT_FREEZETAG) { value = atoi( Info_ValueForKey( info, "capturelimit" ) ); if ( value ) { lines = UI_DrawProportionalString3( 320, y, va( "capturelimit %i", value ), UI_CENTER|UI_SMALLFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT * lines; } } if (cgs.protocol == PROTOCOL_QL) { const char *p; if (cgs.realProtocol < 91) { value = atoi(Info_ValueForKey(info, "sv_skillrating")); lines = UI_DrawProportionalString3(320, y, va( "skill rating %i", value), UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT * lines; } if (*Info_ValueForKey(info, "sv_location")) { lines = UI_DrawProportionalString3(320, y, va("location %s", Info_ValueForKey(info, "sv_location")), UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorWhite); y += PROP_HEIGHT * lines; } if (*cgs.serverModelOverride || *cgs.serverHeadModelOverride) { lines = UI_DrawProportionalString3(320, y, "forced server models", UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorMdGrey); y += PROP_HEIGHT * lines; } p = SC_Cvar_Get_String("com_workshopids"); // strlen() check since it is sometimes a blank space ' ' if (p && *p && strlen(p) > 1) { lines = UI_DrawProportionalString3(320, y, va("workshops: %s", p), UI_CENTER | UI_SMALLFONT | UI_DROPSHADOW, colorMdGrey); y += PROP_HEIGHT * lines; } } // end protocol ql if (cg.demoPlayback && !loading && cg.snap) { int startTime, endTime, currentTime; startTime = trap_GetFirstServerTime(); endTime = trap_GetLastServerTime(); currentTime = cg.snap->serverTime; trap_Cvar_VariableStringBuffer("cl_demoFileBaseName", buf, sizeof(buf)); QLWideScreen = 1; CG_DrawStringExt(2, 480 - 64, va("^3demo: ^7%s", buf), colorWhite, qfalse, qtrue, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, 0, &cgs.media.bigchar); CG_DrawStringExt(2, 480 - 32, va(" ^5%s ^6%02.2f%%", clockString(endTime - startTime), (float)(currentTime - startTime) / (float)(endTime - startTime) * 100.0f), colorWhite, qfalse, qtrue, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, 0, &cgs.media.bigchar); QLWideScreen = 2; } }