/* * SV_AddPureShader * * FIXME: For now we don't parse shaders, but simply assume that it uses the same name .tga or .jpg */ static void SV_AddPureShader( const char *name ) { const char *extension; char tempname[MAX_CONFIGSTRING_CHARS]; if( !name || !name[0] ) return; assert( name && name[0] && strlen( name ) < MAX_CONFIGSTRING_CHARS ); if( !Q_strnicmp( name, "textures/common/", strlen( "textures/common/" ) ) ) return; Q_strncpyz( tempname, name, sizeof( tempname ) ); if( !COM_FileExtension( tempname ) ) { extension = FS_FirstExtension( tempname, IMAGE_EXTENSIONS, NUM_IMAGE_EXTENSIONS ); if( !extension ) return; COM_ReplaceExtension( tempname, extension, sizeof( tempname ) ); } SV_AddPureFile( tempname ); }
/* * SV_AddPureBSP */ static void SV_AddPureBSP( void ) { int i; const char *shader; SV_AddPureFile( sv.configstrings[CS_WORLDMODEL] ); for( i = 0; ( shader = CM_ShaderrefName( svs.cms, i ) ); i++ ) SV_AddPureShader( shader ); }
/* * SV_ReloadPureList */ static void SV_ReloadPureList( void ) { char **paks; int i, numpaks; Com_FreePureList( &svs.purelist ); // game modules if( sv_pure_forcemodulepk3->string[0] ) { if( Q_strnicmp( COM_FileBase( sv_pure_forcemodulepk3->string ), "modules", strlen( "modules" ) ) || !FS_IsPakValid( sv_pure_forcemodulepk3->string, NULL ) ) { Com_Printf( "Warning: Invalid value for sv_pure_forcemodulepk3, disabling\n" ); Cvar_ForceSet( "sv_pure_forcemodulepk3", "" ); } else { SV_AddPurePak( sv_pure_forcemodulepk3->string ); } } if( !sv_pure_forcemodulepk3->string[0] ) { char *libname; int libname_size; libname_size = strlen( LIB_PREFIX ) + 5 + strlen( ARCH ) + strlen( LIB_SUFFIX ) + 1; libname = Mem_TempMalloc( libname_size ); Q_snprintfz( libname, libname_size, LIB_PREFIX "game_" ARCH LIB_SUFFIX ); if( !FS_PakNameForFile( libname ) ) { if( sv_pure->integer ) { Com_Printf( "Warning: Game module not in pk3, disabling pure mode\n" ); Com_Printf( "sv_pure_forcemodulepk3 can be used to force the pure system to use a different module\n" ); Cvar_ForceSet( "sv_pure", "0" ); } } else { SV_AddPureFile( libname ); } Mem_TempFree( libname ); libname = NULL; } // *pure.(pk3|pak) paks = NULL; numpaks = FS_GetExplicitPurePakList( &paks ); if( numpaks ) { for( i = 0; i < numpaks; i++ ) { SV_AddPurePak( paks[i] ); Mem_ZoneFree( paks[i] ); } Mem_ZoneFree( paks ); } }
/* * PF_PureModel */ static void PF_PureModel( const char *name ) { if( sv.state != ss_loading ) return; if( !name || !name[0] || strlen( name ) >= MAX_CONFIGSTRING_CHARS ) return; if( name[0] == '*' ) { // inline model if( !strcmp( name, "*0" ) ) SV_AddPureBSP(); // world } else { SV_AddPureFile( name ); } }
/* * PF_PureSound */ static void PF_PureSound( const char *name ) { const char *extension; char tempname[MAX_CONFIGSTRING_CHARS]; if( sv.state != ss_loading ) return; if( !name || !name[0] || strlen( name ) >= MAX_CONFIGSTRING_CHARS ) return; Q_strncpyz( tempname, name, sizeof( tempname ) ); if( !COM_FileExtension( tempname ) ) { extension = FS_FirstExtension( tempname, SOUND_EXTENSIONS, NUM_SOUND_EXTENSIONS ); if( !extension ) return; COM_ReplaceExtension( tempname, extension, sizeof( tempname ) ); } SV_AddPureFile( tempname ); }