diff options
-rw-r--r-- | src/game/g_spawn.c | 8 | ||||
-rw-r--r-- | src/ui/ui_gameinfo.c | 417 | ||||
-rw-r--r-- | src/ui/ui_main.c | 73 |
3 files changed, 266 insertions, 232 deletions
diff --git a/src/game/g_spawn.c b/src/game/g_spawn.c index 6962a44e..0ab52703 100644 --- a/src/game/g_spawn.c +++ b/src/game/g_spawn.c @@ -619,10 +619,10 @@ void SP_worldspawn( void ) { G_SpawnString( "humanMaxStage", "2", &s ); trap_Cvar_Set( "g_humanMaxStage", s ); - G_SpawnString( "humanStage2ThreshHold", "50", &s ); + G_SpawnString( "humanStage2Threshold", "50", &s ); trap_Cvar_Set( "g_humanStage2Threshold", s ); - G_SpawnString( "humanStage3ThreshHold", "100", &s ); + G_SpawnString( "humanStage3Threshold", "100", &s ); trap_Cvar_Set( "g_humanStage3Threshold", s ); G_SpawnString( "alienBuildPoints", "1000", &s ); @@ -631,10 +631,10 @@ void SP_worldspawn( void ) { G_SpawnString( "alienMaxStage", "2", &s ); trap_Cvar_Set( "g_alienMaxStage", s ); - G_SpawnString( "alienStage2ThreshHold", "50", &s ); + G_SpawnString( "alienStage2Threshold", "50", &s ); trap_Cvar_Set( "g_alienStage2Threshold", s ); - G_SpawnString( "alienStage3ThreshHold", "100", &s ); + G_SpawnString( "alienStage3Threshold", "100", &s ); trap_Cvar_Set( "g_alienStage3Threshold", s ); G_SpawnString( "enableDust", "0", &s ); diff --git a/src/ui/ui_gameinfo.c b/src/ui/ui_gameinfo.c index 8b29399b..89fd59ab 100644 --- a/src/ui/ui_gameinfo.c +++ b/src/ui/ui_gameinfo.c @@ -26,15 +26,15 @@ // -int ui_numBots; -static char *ui_botInfos[MAX_BOTS]; +int ui_numBots; +static char *ui_botInfos[MAX_BOTS]; -static int ui_numArenas; -static char *ui_arenaInfos[MAX_ARENAS]; +static int ui_numArenas; +static char *ui_arenaInfos[MAX_ARENAS]; #ifndef MISSIONPACK // bk001206 -static int ui_numSinglePlayerArenas; -static int ui_numSpecialSinglePlayerArenas; +static int ui_numSinglePlayerArenas; +static int ui_numSpecialSinglePlayerArenas; #endif /* @@ -43,54 +43,54 @@ UI_ParseInfos =============== */ 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 ) { - token = COM_Parse( &buf ); - if ( !token[0] ) { - break; - } - if ( strcmp( token, "{" ) ) { - Com_Printf( "Missing { in info file\n" ); - break; - } - - if ( count == max ) { - Com_Printf( "Max infos exceeded\n" ); - break; - } - - info[0] = '\0'; - while ( 1 ) { - token = COM_ParseExt( &buf, qtrue ); - if ( !token[0] ) { - Com_Printf( "Unexpected end of info file\n" ); - break; - } - if ( !strcmp( token, "}" ) ) { - break; - } - Q_strncpyz( key, token, sizeof( key ) ); - - token = COM_ParseExt( &buf, qfalse ); - 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); - count++; - } - } - return count; + char *token; + int count; + char key[MAX_TOKEN_CHARS]; + char info[MAX_INFO_STRING]; + + count = 0; + + while ( 1 ) { + token = COM_Parse( &buf ); + if ( !token[0] ) { + break; + } + if ( strcmp( token, "{" ) ) { + Com_Printf( "Missing { in info file\n" ); + break; + } + + if ( count == max ) { + Com_Printf( "Max infos exceeded\n" ); + break; + } + + info[0] = '\0'; + while ( 1 ) { + token = COM_ParseExt( &buf, qtrue ); + if ( !token[0] ) { + Com_Printf( "Unexpected end of info file\n" ); + break; + } + if ( !strcmp( token, "}" ) ) { + break; + } + Q_strncpyz( key, token, sizeof( key ) ); + + token = COM_ParseExt( &buf, qfalse ); + 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); + count++; + } + } + return count; } /* @@ -99,26 +99,26 @@ UI_LoadArenasFromFile =============== */ 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 ) { - trap_Print( va( S_COLOR_RED "file not found: %s\n", filename ) ); - return; - } - 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; - } - - trap_FS_Read( buf, len, f ); - buf[len] = 0; - trap_FS_FCloseFile( f ); - - ui_numArenas += UI_ParseInfos( buf, MAX_ARENAS - ui_numArenas, &ui_arenaInfos[ui_numArenas] ); + int len; + fileHandle_t f; + char buf[MAX_ARENAS_TEXT]; + + len = trap_FS_FOpenFile( filename, &f, FS_READ ); + if ( !f ) { + trap_Print( va( S_COLOR_RED "file not found: %s\n", filename ) ); + return; + } + 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; + } + + trap_FS_Read( buf, len, f ); + buf[len] = 0; + trap_FS_FCloseFile( f ); + + ui_numArenas += UI_ParseInfos( buf, MAX_ARENAS - ui_numArenas, &ui_arenaInfos[ui_numArenas] ); } /* @@ -127,80 +127,61 @@ UI_LoadArenas =============== */ void UI_LoadArenas( void ) { - int numdirs; - vmCvar_t arenasFile; - char filename[128]; - char dirlist[1024]; - char* dirptr; - int i, n; - int dirlen; - char *type; - - ui_numArenas = 0; - uiInfo.mapCount = 0; - - trap_Cvar_Register( &arenasFile, "g_arenasFile", "", CVAR_INIT|CVAR_ROM ); - if( *arenasFile.string ) { - UI_LoadArenasFromFile(arenasFile.string); - } - else { - UI_LoadArenasFromFile("scripts/arenas.txt"); - } - - // get all arenas from .arena files - 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); - } - trap_Print( va( "%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"); - } - - for( n = 0; n < ui_numArenas; n++ ) { - // determine type - - 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].levelShot = -1; - uiInfo.mapList[uiInfo.mapCount].imageName = String_Alloc(va("levelshots/%s", uiInfo.mapList[uiInfo.mapCount].mapLoadName)); - uiInfo.mapList[uiInfo.mapCount].typeBits = 0; - - type = Info_ValueForKey( ui_arenaInfos[n], "type" ); - // if no type specified, it will be treated as "ffa" - if( *type ) { - if( strstr( type, "ffa" ) ) { - uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_FFA); - } - if( strstr( type, "tourney" ) ) { - uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_TOURNAMENT); - } - if( strstr( type, "ctf" ) ) { - uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_CTF); - } - if( strstr( type, "oneflag" ) ) { - uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_1FCTF); - } - if( strstr( type, "overload" ) ) { - uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_OBELISK); - } - if( strstr( type, "harvester" ) ) { - uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_HARVESTER); - } - } else { - uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_FFA); - } - - uiInfo.mapCount++; - if (uiInfo.mapCount >= MAX_MAPS) { - break; - } - } + int numdirs; + vmCvar_t arenasFile; + char filename[128]; + char dirlist[1024]; + char* dirptr; + int i, n; + int dirlen; + char *type; + + ui_numArenas = 0; + uiInfo.mapCount = 0; + +/* trap_Cvar_Register( &arenasFile, "g_arenasFile", "", CVAR_INIT|CVAR_ROM ); + if( *arenasFile.string ) { + UI_LoadArenasFromFile(arenasFile.string); + } + else { + UI_LoadArenasFromFile("scripts/arenas.txt"); + }*/ + + // get all arenas from .arena files + 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); + } + trap_Print( va( "%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"); + } + + for( n = 0; n < ui_numArenas; n++ ) + { + // determine type + type = Info_ValueForKey( ui_arenaInfos[ n ], "type" ); + // if no type specified, it will be treated as "ffa" + + if( *type && strstr( type, "tremulous" ) ) + uiInfo.mapList[ uiInfo.mapCount ].typeBits |= ( 1 << GT_FFA ); + else + continue; //not a trem map + + 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].levelShot = -1; + uiInfo.mapList[uiInfo.mapCount].imageName = String_Alloc(va("levelshots/%s", uiInfo.mapList[uiInfo.mapCount].mapLoadName)); + + uiInfo.mapCount++; + if( uiInfo.mapCount >= MAX_MAPS ) + break; + } } @@ -210,28 +191,28 @@ UI_LoadBotsFromFile =============== */ 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 ) { - trap_Print( va( S_COLOR_RED "file not found: %s\n", filename ) ); - return; - } - 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; - } - - trap_FS_Read( buf, len, f ); - buf[len] = 0; - trap_FS_FCloseFile( f ); - - COM_Compress(buf); - - ui_numBots += UI_ParseInfos( buf, MAX_BOTS - ui_numBots, &ui_botInfos[ui_numBots] ); + int len; + fileHandle_t f; + char buf[MAX_BOTS_TEXT]; + + len = trap_FS_FOpenFile( filename, &f, FS_READ ); + if ( !f ) { + trap_Print( va( S_COLOR_RED "file not found: %s\n", filename ) ); + return; + } + 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; + } + + trap_FS_Read( buf, len, f ); + buf[len] = 0; + trap_FS_FCloseFile( f ); + + COM_Compress(buf); + + ui_numBots += UI_ParseInfos( buf, MAX_BOTS - ui_numBots, &ui_botInfos[ui_numBots] ); } /* @@ -240,34 +221,34 @@ UI_LoadBots =============== */ void UI_LoadBots( void ) { - vmCvar_t botsFile; - int numdirs; - char filename[128]; - char dirlist[1024]; - char* dirptr; - int i; - int dirlen; - - 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"); - } - - // get all bots from .bot files - 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); - } - trap_Print( va( "%i bots parsed\n", ui_numBots ) ); + vmCvar_t botsFile; + int numdirs; + char filename[128]; + char dirlist[1024]; + char* dirptr; + int i; + int dirlen; + + 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"); + } + + // get all bots from .bot files + 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); + } + trap_Print( va( "%i bots parsed\n", ui_numBots ) ); } @@ -277,11 +258,11 @@ UI_GetBotInfoByNumber =============== */ 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]; + if( num < 0 || num >= ui_numBots ) { + trap_Print( va( S_COLOR_RED "Invalid bot number: %i\n", num ) ); + return NULL; + } + return ui_botInfos[num]; } @@ -291,28 +272,28 @@ UI_GetBotInfoByName =============== */ char *UI_GetBotInfoByName( const char *name ) { - int n; - char *value; + int n; + char *value; - for ( n = 0; n < ui_numBots ; n++ ) { - value = Info_ValueForKey( ui_botInfos[n], "name" ); - if ( !Q_stricmp( value, name ) ) { - return ui_botInfos[n]; - } - } + for ( n = 0; n < ui_numBots ; n++ ) { + value = Info_ValueForKey( ui_botInfos[n], "name" ); + if ( !Q_stricmp( value, name ) ) { + return ui_botInfos[n]; + } + } - return NULL; + return NULL; } int UI_GetNumBots() { - return ui_numBots; + return ui_numBots; } char *UI_GetBotNameByNumber( int num ) { - char *info = UI_GetBotInfoByNumber(num); - if (info) { - return Info_ValueForKey( info, "name" ); - } - return "Sarge"; + char *info = UI_GetBotInfoByNumber(num); + if (info) { + return Info_ValueForKey( info, "name" ); + } + return "Sarge"; } diff --git a/src/ui/ui_main.c b/src/ui/ui_main.c index 3047a89b..d1c1dd50 100644 --- a/src/ui/ui_main.c +++ b/src/ui/ui_main.c @@ -1455,12 +1455,64 @@ static void UI_DrawPreviewCinematic(rectDef_t *rect, float scale, vec4_t color) } -static void UI_DrawDialogText( rectDef_t *rect, float scale, vec4_t color, - int textStyle ) +static void UI_DrawDialogText( rectDef_t *rect, float text_x, float text_y, + vec4_t color, float scale, int align, int textStyle ) { const char *text = UI_Cvar_VariableString( "ui_dialog" ); + float tw, th, tx; + int pos, i; + char buffer[ 1024 ]; + char *end; - Text_Paint( rect->x, rect->y, scale, color, text, 0, 0, textStyle ); + if( !text[ 0 ] ) + return; + + strcpy( buffer, text ); + tw = Text_Width( text, scale, 0 ); + th = scale * 40.0f; + + pos = i = 0; + + while( pos < strlen( text ) ) + { + strcpy( buffer, &text[ pos ] ); + tw = Text_Width( buffer, scale, 0 ); + + while( tw > rect->w ) + { + end = strrchr( buffer, ' ' ); + + if( end == NULL ) + break; + + *end = '\0'; + tw = Text_Width( buffer, scale, 0 ); + } + + switch( align ) + { + case ITEM_ALIGN_LEFT: + tx = rect->x; + break; + + case ITEM_ALIGN_RIGHT: + tx = rect->x + rect->w - tw; + break; + + case ITEM_ALIGN_CENTER: + tx = rect->x + ( rect->w / 2.0f ) - ( tw / 2.0f ); + break; + + default: + tx = 0.0f; + } + + Text_Paint( tx + text_x, rect->y + text_y + i * ( th + 3 ), scale, color, + buffer, 0, 0, textStyle ); + + pos += strlen( buffer ) + 1; + i++; + } } /* @@ -1607,7 +1659,7 @@ static void UI_DrawMapPreview(rectDef_t *rect, float scale, vec4_t color, qboole if (uiInfo.mapList[map].levelShot > 0) { UI_DrawHandlePic( rect->x, rect->y, rect->w, rect->h, uiInfo.mapList[map].levelShot); } else { - UI_DrawHandlePic( rect->x, rect->y, rect->w, rect->h, trap_R_RegisterShaderNoMip("menu/art/unknownmap")); + UI_DrawHandlePic( rect->x, rect->y, rect->w, rect->h, trap_R_RegisterShaderNoMip("gfx/2d/load_screen")); } } @@ -2391,7 +2443,7 @@ static void UI_OwnerDraw( float x, float y, float w, float h, switch( ownerDraw ) { case UI_DIALOG: - UI_DrawDialogText( &rect, scale, color, textStyle ); + UI_DrawDialogText( &rect, text_x, text_y, color, scale, align, textStyle ); break; case UI_TEAMINFOPANE: @@ -4687,12 +4739,13 @@ static void UI_BuildServerDisplayList(qboolean force) { } } - if (ui_serverFilterType.integer > 0) { - if (Q_stricmp(Info_ValueForKey(info, "game"), serverFilters[ui_serverFilterType.integer].basedir) != 0) { - trap_LAN_MarkServerVisible(ui_netSource.integer, i, qfalse); - continue; - } + //TA: only show tremulous servers + if( Q_stricmp( Info_ValueForKey( info, "game" ), "tremulous" ) != 0 ) + { + trap_LAN_MarkServerVisible( ui_netSource.integer, i, qfalse ); + continue; } + // make sure we never add a favorite server twice if (ui_netSource.integer == AS_FAVORITES) { UI_RemoveServerFromDisplayList(i); |