Index: src/game/g_local.h =================================================================== --- src/game/g_local.h (revision 58) +++ src/game/g_local.h (working copy) @@ -1118,6 +1118,7 @@ extern vmCvar_t g_allowVote; extern vmCvar_t g_voteLimit; extern vmCvar_t g_suddenDeathVotePercent; extern vmCvar_t g_suddenDeathVoteDelay; +extern vmCvar_t g_readyPercent; extern vmCvar_t g_teamForceBalance; extern vmCvar_t g_smoothClients; extern vmCvar_t pmove_fixed; Index: src/game/g_main.c =================================================================== --- src/game/g_main.c (revision 58) +++ src/game/g_main.c (working copy) @@ -69,6 +69,7 @@ vmCvar_t g_allowVote; vmCvar_t g_voteLimit; vmCvar_t g_suddenDeathVotePercent; vmCvar_t g_suddenDeathVoteDelay; +vmCvar_t g_readyPercent; vmCvar_t g_teamForceBalance; vmCvar_t g_smoothClients; vmCvar_t pmove_fixed; @@ -198,6 +199,7 @@ static cvarTable_t gameCvarTable[ ] = { &g_voteLimit, "g_voteLimit", "5", CVAR_ARCHIVE, 0, qfalse }, { &g_suddenDeathVotePercent, "g_suddenDeathVotePercent", "74", CVAR_ARCHIVE, 0, qfalse }, { &g_suddenDeathVoteDelay, "g_suddenDeathVoteDelay", "180", CVAR_ARCHIVE, 0, qfalse }, + { &g_readyPercent, "g_readyPercent", "100", CVAR_ARCHIVE, 0, qfalse }, { &g_minNameChangePeriod, "g_minNameChangePeriod", "5", 0, 0, qfalse}, { &g_maxNameChanges, "g_maxNameChanges", "5", 0, 0, qfalse}, @@ -1891,6 +1893,7 @@ wait 10 seconds before going on. */ void CheckIntermissionExit( void ) { + int numScoreClients = 0; int ready, notReady; int i; gclient_t *cl; @@ -1917,6 +1920,8 @@ void CheckIntermissionExit( void ) if( cl->ps.stats[ STAT_TEAM ] == TEAM_NONE ) continue; + numScoreClients++; + if( cl->readyToExit ) { ready++; @@ -1940,6 +1945,14 @@ void CheckIntermissionExit( void ) return; } + // if the required percentage wants to go, go now + if( numScoreClients && + ready * 100 / numScoreClients >= g_readyPercent.integer ) + { + ExitLevel( ); + return; + } + // if nobody wants to go, clear timer if( ready == 0 && notReady > 0 ) {