/* =============== UI_GetCurrentGame Returns the next level the player has not won =============== */ int UI_GetCurrentGame( void ) { int level; int rank; int skill; const char *info; info = UI_GetSpecialArenaInfo( "training" ); if( info ) { level = atoi( Info_ValueForKey( info, "num" ) ); UI_GetBestScore( level, &rank, &skill ); if ( !rank || rank > 1 ) { return level; } } for( level = 0; level < ui_numSinglePlayerArenas; level++ ) { UI_GetBestScore( level, &rank, &skill ); if ( !rank || rank > 1 ) { return level; } } info = UI_GetSpecialArenaInfo( "final" ); if( !info ) { return -1; } return atoi( Info_ValueForKey( info, "num" ) ); }
/* ================= UI_SPLevelMenu_SetMenuItems ================= */ static void UI_SPLevelMenu_SetMenuArena( int n, int level, const char *arenaInfo ) { char map[MAX_QPATH]; Q_strncpyz( map, Info_ValueForKey( arenaInfo, "map" ), sizeof(map) ); Q_strncpyz( levelMenuInfo.levelNames[n], map, sizeof(levelMenuInfo.levelNames[n]) ); Q_strupr( levelMenuInfo.levelNames[n] ); UI_GetBestScore( level, &levelMenuInfo.levelScores[n], &levelMenuInfo.levelScoresSkill[n] ); if( levelMenuInfo.levelScores[n] > 8 ) { levelMenuInfo.levelScores[n] = 8; } strcpy( levelMenuInfo.levelPicNames[n], va( "levelshots/%s.tga", map ) ); if( !trap_R_RegisterShaderNoMip( levelMenuInfo.levelPicNames[n] ) ) { strcpy( levelMenuInfo.levelPicNames[n], ART_MAP_UNKNOWN ); } levelMenuInfo.item_maps[n].shader = 0; if ( selectedArenaSet > currentSet ) { levelMenuInfo.item_maps[n].generic.flags |= QMF_GRAYED; } else { levelMenuInfo.item_maps[n].generic.flags &= ~QMF_GRAYED; } levelMenuInfo.item_maps[n].generic.flags &= ~QMF_INACTIVE; }
/* =============== UI_TierCompleted =============== */ int UI_TierCompleted( int levelWon ) { int level; int n; int tier; int score; int skill; const char *info; tier = levelWon / ARENAS_PER_TIER; level = tier * ARENAS_PER_TIER; if( tier == UI_GetNumSPTiers() ) { info = UI_GetSpecialArenaInfo( "training" ); if( levelWon == atoi( Info_ValueForKey( info, "num" ) ) ) { return 0; } info = UI_GetSpecialArenaInfo( "final" ); if( !info || levelWon == atoi( Info_ValueForKey( info, "num" ) ) ) { return tier + 1; } return -1; } for( n = 0; n < ARENAS_PER_TIER; n++, level++ ) { UI_GetBestScore( level, &score, &skill ); if ( score != 1 ) { return -1; } } return tier + 1; }
/* =============== UI_GetCurrentGame Returns the next level the player has not won =============== */ int UI_GetCurrentGame( int curLevel ) { int level; int rank; int skill; const char *info; info = UI_GetSpecialArenaInfo( "training" ); if( info ) { level = atoi( Info_ValueForKey( info, "num" ) ); UI_GetBestScore( level, &rank, &skill ); if ( !rank || rank > 1 ) { return level; } } // kef 7/31/00 -- we think we'd like to just send you to the next map, not the first map you haven't won if (curLevel == -1) { // -1 is a special value, the meaning of which is not currently clear to me for( level = 0; level < ui_numSinglePlayerArenas; level++ ) { UI_GetBestScore( level, &rank, &skill ); if ( !rank || rank > 1 ) { return level; } } info = UI_GetSpecialArenaInfo( "final" ); if( !info ) { return -1; } return atoi( Info_ValueForKey( info, "num" ) ); } else if ((curLevel >= 0) && (curLevel < (ui_numSinglePlayerArenas-1))) { // go to next map return curLevel+1; } else if (curLevel == (ui_numSinglePlayerArenas-1)) { // finished final map...back to the beginning return 0; } else { // bogus value for curLevel info = UI_GetSpecialArenaInfo( "final" ); if( !info ) { return -1; } return atoi( Info_ValueForKey( info, "num" ) ); } /* if ((curLevel != -1) && (curLevel == (ui_numSinglePlayerArenas-1))) { return 0; } for( level = 0; level < ui_numSinglePlayerArenas; level++ ) { UI_GetBestScore( level, &rank, &skill ); if ( !rank || rank > 1 ) { if (curLevel != -1) { if (level > curLevel) { return level; } continue; } return level; } } info = UI_GetSpecialArenaInfo( "final" ); if( !info ) { return -1; } return atoi( Info_ValueForKey( info, "num" ) ); */ }