engine: common: quickly assume that map is valid when generating maps.lst if mpfilter is set or game is multiplayer only

This commit is contained in:
Alibek Omarov 2024-04-03 06:13:43 +03:00
parent 156b2b2b10
commit 4107bd4e0f
1 changed files with 25 additions and 8 deletions

View File

@ -866,7 +866,7 @@ static qboolean Cmd_CheckMapsList_R( qboolean fRefresh, qboolean onlyingamedir )
return true; // exist return true; // exist
// setup mpfilter // setup mpfilter
size = Q_snprintf( mpfilter, sizeof( mpfilter ), "maps/%s", GI->mp_filter ); Q_snprintf( mpfilter, sizeof( mpfilter ), "maps/%s", GI->mp_filter );
t = FS_Search( "maps/*.bsp", false, onlyingamedir ); t = FS_Search( "maps/*.bsp", false, onlyingamedir );
if( !t ) if( !t )
@ -900,9 +900,9 @@ static qboolean Cmd_CheckMapsList_R( qboolean fRefresh, qboolean onlyingamedir )
if( f ) if( f )
{ {
int num_spawnpoints = 0; qboolean have_spawnpoints = false;
dheader_t *header; dheader_t *header;
dlump_t entities; dlump_t entities;
memset( buf, 0, MAX_SYSPATH ); memset( buf, 0, MAX_SYSPATH );
FS_Read( f, buf, MAX_SYSPATH ); FS_Read( f, buf, MAX_SYSPATH );
@ -943,7 +943,18 @@ static qboolean Cmd_CheckMapsList_R( qboolean fRefresh, qboolean onlyingamedir )
while(( pfile = COM_ParseFile( pfile, token, sizeof( token ))) != NULL ) while(( pfile = COM_ParseFile( pfile, token, sizeof( token ))) != NULL )
{ {
if( token[0] == '}' && worldspawn ) if( token[0] == '}' && worldspawn )
{
worldspawn = false; worldspawn = false;
// if mod has mp_filter set up, then it's a mod that
// might not have valid mp_entity set in GI
// if mod is multiplayer only, assume all maps are valid
if( use_filter || GI->gamemode == GAME_MULTIPLAYER_ONLY )
{
have_spawnpoints = true;
break;
}
}
else if( !Q_strcmp( token, "message" ) && worldspawn ) else if( !Q_strcmp( token, "message" ) && worldspawn )
{ {
// get the message contents // get the message contents
@ -952,17 +963,23 @@ static qboolean Cmd_CheckMapsList_R( qboolean fRefresh, qboolean onlyingamedir )
else if( !Q_strcmp( token, "classname" )) else if( !Q_strcmp( token, "classname" ))
{ {
pfile = COM_ParseFile( pfile, token, sizeof( token )); pfile = COM_ParseFile( pfile, token, sizeof( token ));
if( !Q_strcmp( token, GI->mp_entity ) || use_filter )
num_spawnpoints++; if( !Q_strcmp( token, GI->mp_entity ))
{
have_spawnpoints = true;
break;
}
} }
if( num_spawnpoints ) break; // valid map
if( have_spawnpoints )
break; // valid map
} }
Mem_Free( ents ); Mem_Free( ents );
} }
if( f ) FS_Close( f ); if( f ) FS_Close( f );
if( num_spawnpoints ) if( have_spawnpoints )
{ {
// format: mapname "maptitle"\n // format: mapname "maptitle"\n
Q_snprintf( result, sizeof( result ), "%s \"%s\"\n", mapname, message ); Q_snprintf( result, sizeof( result ), "%s \"%s\"\n", mapname, message );