diff options
Diffstat (limited to 'src/ui/ui_gameinfo.c')
-rw-r--r-- | src/ui/ui_gameinfo.c | 197 |
1 files changed, 120 insertions, 77 deletions
diff --git a/src/ui/ui_gameinfo.c b/src/ui/ui_gameinfo.c index f6d0d4d3..4315ddfb 100644 --- a/src/ui/ui_gameinfo.c +++ b/src/ui/ui_gameinfo.c @@ -2,19 +2,19 @@ =========================================================================== Copyright (C) 1999-2005 Id Software, Inc. Copyright (C) 2000-2006 Tim Angus - + This file is part of Tremulous. - + Tremulous is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Tremulous is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Tremulous; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -44,54 +44,69 @@ static char *ui_arenaInfos[MAX_ARENAS]; UI_ParseInfos =============== */ -int UI_ParseInfos( char *buf, int max, char *infos[] ) { - char *token; +int UI_ParseInfos( char *buf, int max, char *infos[] ) +{ + char * token; int count; char key[MAX_TOKEN_CHARS]; char info[MAX_INFO_STRING]; count = 0; - while ( 1 ) { + while( 1 ) + { token = COM_Parse( &buf ); - if ( !token[0] ) { + + if( !token[0] ) break; - } - if ( strcmp( token, "{" ) ) { + + if( strcmp( token, "{" ) ) + { Com_Printf( "Missing { in info file\n" ); break; } - if ( count == max ) { + if( count == max ) + { Com_Printf( "Max infos exceeded\n" ); break; } info[0] = '\0'; - while ( 1 ) { + + while( 1 ) + { token = COM_ParseExt( &buf, qtrue ); - if ( !token[0] ) { + + if( !token[0] ) + { Com_Printf( "Unexpected end of info file\n" ); break; } - if ( !strcmp( token, "}" ) ) { + + if( !strcmp( token, "}" ) ) break; - } + Q_strncpyz( key, token, sizeof( key ) ); token = COM_ParseExt( &buf, qfalse ); - if ( !token[0] ) { + + if( !token[0] ) strcpy( token, "<NULL>" ); - } + Info_SetValueForKey( info, key, token ); } + //NOTE: extra space for arena number - infos[count] = UI_Alloc(strlen(info) + strlen("\\num\\") + strlen(va("%d", MAX_ARENAS)) + 1); - if (infos[count]) { - strcpy(infos[count], info); + infos[count] = UI_Alloc( strlen( info ) + strlen( "\\num\\" ) + strlen( va( "%d", MAX_ARENAS ) ) + 1 ); + + if( infos[count] ) + { + strcpy( infos[count], info ); count++; } } + return count; } @@ -100,17 +115,22 @@ int UI_ParseInfos( char *buf, int max, char *infos[] ) { UI_LoadArenasFromFile =============== */ -static void UI_LoadArenasFromFile( char *filename ) { +static void UI_LoadArenasFromFile( char *filename ) +{ int len; fileHandle_t f; char buf[MAX_ARENAS_TEXT]; len = trap_FS_FOpenFile( filename, &f, FS_READ ); - if ( !f ) { + + if( !f ) + { trap_Print( va( S_COLOR_RED "file not found: %s\n", filename ) ); return; } - if ( len >= MAX_ARENAS_TEXT ) { + + if( len >= MAX_ARENAS_TEXT ) + { trap_Print( va( S_COLOR_RED "file too large: %s is %i, max allowed is %i", filename, len, MAX_ARENAS_TEXT ) ); trap_FS_FCloseFile( f ); return; @@ -130,8 +150,8 @@ UI_MapNameCompare */ static int UI_MapNameCompare( const void *a, const void *b ) { - mapInfo *A = (mapInfo *)a; - mapInfo *B = (mapInfo *)b; + mapInfo * A = ( mapInfo * )a; + mapInfo *B = ( mapInfo * )b; return Q_stricmp( A->mapName, B->mapName ); } @@ -141,7 +161,8 @@ static int UI_MapNameCompare( const void *a, const void *b ) UI_LoadArenas =============== */ -void UI_LoadArenas( void ) { +void UI_LoadArenas( void ) +{ int numdirs; char filename[128]; char dirlist[1024]; @@ -154,32 +175,36 @@ void UI_LoadArenas( void ) { uiInfo.mapCount = 0; // get all arenas from .arena files - numdirs = trap_FS_GetFileList("scripts", ".arena", dirlist, 1024 ); + numdirs = trap_FS_GetFileList( "scripts", ".arena", dirlist, 1024 ); dirptr = dirlist; - for (i = 0; i < numdirs; i++, dirptr += dirlen+1) { - dirlen = strlen(dirptr); - strcpy(filename, "scripts/"); - strcat(filename, dirptr); - UI_LoadArenasFromFile(filename); + + for( i = 0; i < numdirs; i++, dirptr += dirlen + 1 ) + { + dirlen = strlen( dirptr ); + strcpy( filename, "scripts/" ); + strcat( filename, dirptr ); + UI_LoadArenasFromFile( filename ); } + trap_Print( va( "[skipnotify]%i arenas parsed\n", ui_numArenas ) ); - if (UI_OutOfMemory()) { - trap_Print(S_COLOR_YELLOW"WARNING: not anough memory in pool to load all arenas\n"); - } + + if( UI_OutOfMemory() ) + trap_Print( S_COLOR_YELLOW"WARNING: not anough memory in pool to load all arenas\n" ); for( n = 0; n < ui_numArenas; n++ ) { - // determine type + // determine type type = Info_ValueForKey( ui_arenaInfos[ n ], "type" ); // if no type specified, it will be treated as "ffa" uiInfo.mapList[uiInfo.mapCount].cinematic = -1; - uiInfo.mapList[uiInfo.mapCount].mapLoadName = String_Alloc(Info_ValueForKey(ui_arenaInfos[n], "map")); - uiInfo.mapList[uiInfo.mapCount].mapName = String_Alloc(Info_ValueForKey(ui_arenaInfos[n], "longname")); + uiInfo.mapList[uiInfo.mapCount].mapLoadName = String_Alloc( Info_ValueForKey( ui_arenaInfos[n], "map" ) ); + uiInfo.mapList[uiInfo.mapCount].mapName = String_Alloc( Info_ValueForKey( ui_arenaInfos[n], "longname" ) ); uiInfo.mapList[uiInfo.mapCount].levelShot = -1; - uiInfo.mapList[uiInfo.mapCount].imageName = String_Alloc(va("levelshots/%s", uiInfo.mapList[uiInfo.mapCount].mapLoadName)); + uiInfo.mapList[uiInfo.mapCount].imageName = String_Alloc( va( "levelshots/%s", uiInfo.mapList[uiInfo.mapCount].mapLoadName ) ); uiInfo.mapCount++; + if( uiInfo.mapCount >= MAX_MAPS ) break; } @@ -193,17 +218,22 @@ void UI_LoadArenas( void ) { UI_LoadBotsFromFile =============== */ -static void UI_LoadBotsFromFile( char *filename ) { +static void UI_LoadBotsFromFile( char *filename ) +{ int len; fileHandle_t f; char buf[MAX_BOTS_TEXT]; len = trap_FS_FOpenFile( filename, &f, FS_READ ); - if ( !f ) { + + if( !f ) + { trap_Print( va( S_COLOR_RED "file not found: %s\n", filename ) ); return; } - if ( len >= MAX_BOTS_TEXT ) { + + if( len >= MAX_BOTS_TEXT ) + { trap_Print( va( S_COLOR_RED "file too large: %s is %i, max allowed is %i", filename, len, MAX_BOTS_TEXT ) ); trap_FS_FCloseFile( f ); return; @@ -213,7 +243,7 @@ static void UI_LoadBotsFromFile( char *filename ) { buf[len] = 0; trap_FS_FCloseFile( f ); - COM_Compress(buf); + COM_Compress( buf ); ui_numBots += UI_ParseInfos( buf, MAX_BOTS - ui_numBots, &ui_botInfos[ui_numBots] ); } @@ -223,7 +253,8 @@ static void UI_LoadBotsFromFile( char *filename ) { UI_LoadBots =============== */ -void UI_LoadBots( void ) { +void UI_LoadBots( void ) +{ vmCvar_t botsFile; int numdirs; char filename[128]; @@ -234,23 +265,26 @@ void UI_LoadBots( void ) { ui_numBots = 0; - trap_Cvar_Register( &botsFile, "g_botsFile", "", CVAR_INIT|CVAR_ROM ); - if( *botsFile.string ) { - UI_LoadBotsFromFile(botsFile.string); - } - else { - UI_LoadBotsFromFile("scripts/bots.txt"); - } + trap_Cvar_Register( &botsFile, "g_botsFile", "", CVAR_INIT | CVAR_ROM ); + + if( *botsFile.string ) + UI_LoadBotsFromFile( botsFile.string ); + else + UI_LoadBotsFromFile( "scripts/bots.txt" ); // get all bots from .bot files - numdirs = trap_FS_GetFileList("scripts", ".bot", dirlist, 1024 ); + numdirs = trap_FS_GetFileList( "scripts", ".bot", dirlist, 1024 ); + dirptr = dirlist; - for (i = 0; i < numdirs; i++, dirptr += dirlen+1) { - dirlen = strlen(dirptr); - strcpy(filename, "scripts/"); - strcat(filename, dirptr); - UI_LoadBotsFromFile(filename); + + for( i = 0; i < numdirs; i++, dirptr += dirlen + 1 ) + { + dirlen = strlen( dirptr ); + strcpy( filename, "scripts/" ); + strcat( filename, dirptr ); + UI_LoadBotsFromFile( filename ); } + trap_Print( va( "%i bots parsed\n", ui_numBots ) ); } @@ -260,11 +294,14 @@ void UI_LoadBots( void ) { UI_GetBotInfoByNumber =============== */ -char *UI_GetBotInfoByNumber( int num ) { - if( num < 0 || num >= ui_numBots ) { +char *UI_GetBotInfoByNumber( int num ) +{ + if( num < 0 || num >= ui_numBots ) + { trap_Print( va( S_COLOR_RED "Invalid bot number: %i\n", num ) ); return NULL; } + return ui_botInfos[num]; } @@ -274,30 +311,35 @@ char *UI_GetBotInfoByNumber( int num ) { UI_GetBotInfoByName =============== */ -char *UI_GetBotInfoByName( const char *name ) { +char *UI_GetBotInfoByName( const char *name ) +{ int n; char *value; - for ( n = 0; n < ui_numBots ; n++ ) { + for( n = 0; n < ui_numBots ; n++ ) + { value = Info_ValueForKey( ui_botInfos[n], "name" ); - if ( !Q_stricmp( value, name ) ) { + + if( !Q_stricmp( value, name ) ) return ui_botInfos[n]; - } } return NULL; } -int UI_GetNumBots( void ) { +int UI_GetNumBots( void ) +{ return ui_numBots; } -char *UI_GetBotNameByNumber( int num ) { - char *info = UI_GetBotInfoByNumber(num); - if (info) { +char *UI_GetBotNameByNumber( int num ) +{ + char * info = UI_GetBotInfoByNumber( num ); + + if( info ) return Info_ValueForKey( info, "name" ); - } + return ""; } @@ -306,23 +348,24 @@ void UI_ServerInfo( void ) char info[ MAX_INFO_VALUE ]; info[0] = '\0'; + if( trap_GetConfigString( CS_SERVERINFO, info, sizeof( info ) ) ) - { + { trap_Cvar_Set( "ui_serverinfo_mapname", - Info_ValueForKey( info, "mapname" ) ); + Info_ValueForKey( info, "mapname" ) ); trap_Cvar_Set( "ui_serverinfo_timelimit", - Info_ValueForKey( info, "timelimit" ) ); + Info_ValueForKey( info, "timelimit" ) ); trap_Cvar_Set( "ui_serverinfo_sd", - Info_ValueForKey( info, "g_suddenDeathTime" ) ); + Info_ValueForKey( info, "g_suddenDeathTime" ) ); trap_Cvar_Set( "ui_serverinfo_hostname", - Info_ValueForKey( info, "sv_hostname" ) ); + Info_ValueForKey( info, "sv_hostname" ) ); trap_Cvar_Set( "ui_serverinfo_maxclients", - Info_ValueForKey( info, "sv_maxclients" ) ); + Info_ValueForKey( info, "sv_maxclients" ) ); trap_Cvar_Set( "ui_serverinfo_version", - Info_ValueForKey( info, "version" ) ); + Info_ValueForKey( info, "version" ) ); trap_Cvar_Set( "ui_serverinfo_unlagged", - Info_ValueForKey( info, "g_unlagged" ) ); + Info_ValueForKey( info, "g_unlagged" ) ); trap_Cvar_Set( "ui_serverinfo_ff", - Info_ValueForKey( info, "ff" ) ); + Info_ValueForKey( info, "ff" ) ); } } |