Ejemplo n.º 1
0
/*
====================
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 );
		}
	}
}
Ejemplo n.º 2
0
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;
		}
	}
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
/*
====================
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--;
}
Ejemplo n.º 5
0
/*
====================
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;
		}
	}
}
Ejemplo n.º 6
0
/*
====================
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;
	}
}
Ejemplo n.º 7
0
/*
====================
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;

	}
}