diff options
Diffstat (limited to 'src/game/g_maprotation.c')
-rw-r--r-- | src/game/g_maprotation.c | 171 |
1 files changed, 46 insertions, 125 deletions
diff --git a/src/game/g_maprotation.c b/src/game/g_maprotation.c index 60fd696..eb76d70 100644 --- a/src/game/g_maprotation.c +++ b/src/game/g_maprotation.c @@ -334,68 +334,6 @@ static qboolean G_ParseMapRotation( mapRotation_t *mr, char **text_p ) continue; } - else if( !Q_stricmp( token, "*RANDOM*" ) ) - { - if( mr->numMaps == MAX_MAP_ROTATION_MAPS ) - { - G_Printf( S_COLOR_RED "ERROR: maximum number of maps in one rotation (%d) reached\n", - MAX_MAP_ROTATION_MAPS ); - return qfalse; - } - mre = &mr->maps[ mr->numMaps ]; - Q_strncpyz( mre->name, token, sizeof( mre->name ) ); - - token = COM_Parse( text_p ); - - if( !Q_stricmp( token, "{" ) ) - { - while( 1 ) - { - token = COM_Parse( text_p ); - - if( !token ) - break; - - if( !Q_stricmp( token, "}" ) ) - { - break; - } - else - { - if( mre->numConditions < MAX_MAP_ROTATION_CONDS ) - { - mrc = &mre->conditions[ mre->numConditions ]; - mrc->lhs = MCV_SELECTEDRANDOM; - mrc->unconditional = qfalse; - Q_strncpyz( mrc->dest, token, sizeof( mrc->dest ) ); - - mre->numConditions++; - } - else - { - G_Printf( S_COLOR_YELLOW "WARNING: maximum number of maps for one Random Slot (%d) reached\n", - MAX_MAP_ROTATION_CONDS ); - } - } - } - if( !mre->numConditions ) - { - G_Printf( S_COLOR_YELLOW "WARNING: no maps in *RANDOM* section\n" ); - } - else - { - mr->numMaps++; - mnSet = qtrue; - } - } - else - { - G_Printf( S_COLOR_RED "ERROR: *RANDOM* with no section\n" ); - return qfalse; - } - - continue; - } else if( !Q_stricmp( token, "}" ) ) return qtrue; //reached the end of this map rotation @@ -526,7 +464,6 @@ static qboolean G_ParseMapRotationFile( const char *fileName ) for( j = 0; j < mapRotations.rotations[ i ].numMaps; j++ ) { if( Q_stricmp( mapRotations.rotations[ i ].maps[ j ].name, "*VOTE*") != 0 && - Q_stricmp( mapRotations.rotations[ i ].maps[ j ].name, "*RANDOM*") != 0 && !G_MapExists( mapRotations.rotations[ i ].maps[ j ].name ) ) { G_Printf( S_COLOR_RED "ERROR: map \"%s\" doesn't exist\n", @@ -696,21 +633,6 @@ static void G_IssueMapChange( int rotation ) return; } } - else if(!Q_stricmp( newmap, "*RANDOM*") ) - { - fileHandle_t f; - - G_GetRandomMap( newmap, sizeof( newmap ), rotation, map ); - if( trap_FS_FOpenFile( va("maps/%s.bsp", newmap), &f, FS_READ ) > 0 ) - { - trap_FS_FCloseFile( f ); - } - else - { - G_AdvanceMapRotation(); - return; - } - } // allow a manually defined g_layouts setting to override the maprotation if( !g_layouts.string[ 0 ] && @@ -720,8 +642,7 @@ static void G_IssueMapChange( int rotation ) mapRotations.rotations[ rotation ].maps[ map ].layouts ); } - trap_SendConsoleCommand( EXEC_APPEND, va( "map %s\n", - newmap ) ); + trap_SendConsoleCommand( EXEC_APPEND, va( "map %s\n", newmap ) ); // load up map defaults if g_mapConfigs is set G_MapConfigs( newmap ); @@ -808,9 +729,6 @@ static qboolean G_EvaluateMapCondition( mapRotationCondition_t *mrc ) case MCV_VOTE: // ignore vote for conditions; break; - case MCV_SELECTEDRANDOM: - // ignore vote for conditions; - break; default: case MCV_ERR: @@ -940,6 +858,51 @@ qboolean G_MapRotationActive( void ) /* =============== +G_CurrentMapIsRotation + +Test if the current map is from the rotation +=============== +*/ + +qboolean G_CurrentMapIsRotation( void ) +{ + char mapname[ 64 ]; + int map, rotation; + int i; + + // Check for an active map rotation, + // only return false if rotation is running and current map is not from it + if ( !G_MapRotationActive() || g_currentMapRotation.integer == NOT_ROTATING ) + return qtrue; + + rotation = g_currentMapRotation.integer; + if( !( rotation >= 0 && rotation < mapRotations.numRotations ) ) + return qtrue; + + map = G_GetCurrentMap( rotation ); + if( !(map >= 0 && map < mapRotations.rotations[ rotation ].numMaps ) ) + return qtrue; + + trap_Cvar_VariableStringBuffer( "mapname", mapname, sizeof( mapname ) ); + + if( !Q_stricmp( mapRotations.rotations[ rotation ].maps[ map ].name, mapname ) ) + return qtrue; + + if( !Q_stricmp( mapRotations.rotations[ rotation ].maps[ map ].name, "*VOTE*" ) ) + { + for( i = 0; i < mapRotations.rotations[ rotation ].maps[ map ].numConditions; i++ ) + { + if( mapRotations.rotations[ rotation ].maps[ map ].conditions[ i ].lhs == MCV_VOTE && + !Q_stricmp( mapRotations.rotations[ rotation ].maps[ map ].conditions[ i ].dest, mapname ) ) + return qtrue; + } + } + + return qfalse; +} + +/* +=============== G_InitMapRotations Load and intialise the map rotations @@ -1173,9 +1136,6 @@ static void G_IntermissionMapVoteMessageReal( gentity_t *ent, int winner, int wi "^7+------------------+\n", sizeof( string ) ); for( i = 0; i < rotationVoteLen; i++ ) { - if( !G_MapExists( rotationVoteList[ i ] ) ) - continue; - if( i == selection ) color = "^5"; else if( i == index ) @@ -1275,42 +1235,3 @@ void G_IntermissionMapVoteCommand( gentity_t *ent, qboolean next, qboolean choos G_IntermissionMapVoteMessage( ent ); } -static qboolean G_GetRandomMap( char *name, int size, int rotation, int map ) -{ - mapRotation_t *mr; - mapRotationEntry_t *mre; - mapRotationCondition_t *mrc; - int i, nummaps; - int randompick = 0; - int maplist[ 32 ]; - - mr = &mapRotations.rotations[ rotation ]; - mre = &mr->maps[ map ]; - - nummaps = 0; - //count the number of map votes - for( i = 0; i < mre->numConditions; i++ ) - { - mrc = &mre->conditions[ i ]; - - if( mrc->lhs == MCV_SELECTEDRANDOM ) - { - //map doesnt exist - if( !G_MapExists( mrc->dest ) ) { - continue; - } - maplist[ nummaps ] = i; - nummaps++; - } - } - - if( nummaps == 0 ) { - return qfalse; - } - - randompick = (int)( random() * nummaps ); - - Q_strncpyz( name, mre->conditions[ maplist[ randompick ] ].dest, size ); - - return qtrue; -} |