]> de.git.xonotic.org Git - xonotic/netradiant.git/commitdiff
Merge commit '2b85b7c20c20df677e30541c93b80725dc2277c9' into garux-merge
authorThomas Debesse <dev@illwieckz.net>
Mon, 11 Feb 2019 09:06:26 +0000 (10:06 +0100)
committerThomas Debesse <dev@illwieckz.net>
Mon, 11 Feb 2019 09:07:03 +0000 (10:07 +0100)
1  2 
tools/quake3/common/scriplib.c
tools/quake3/common/scriplib.h
tools/quake3/common/vfs.c
tools/quake3/q3map2/main.c

Simple merge
Simple merge
Simple merge
index 67798e1cb0648c794d56e5e4ee29b75c4d01829c,b3fe1cda438b622d381942be44c4737069828dbb..40a6d20a49cb4a3c9de5afaade4f6751cf668598
@@@ -538,20 -1909,20 +533,20 @@@ int pk3BSPMain( int argc, char **argv )
                }
  
                /* blocks */
 -              if ( !stricmp( token, "textures" ) ){
 +              if ( !Q_stricmp( token, "textures" ) ){
-                       parseEXblock ( EXpk3Textures, &EXpk3TexturesN, exName );
+                       parseEXblock ( ExTextures, &ExTexturesN, exName );
                }
 -              else if ( !stricmp( token, "shaders" ) ){
 +              else if ( !Q_stricmp( token, "shaders" ) ){
-                       parseEXblock ( EXpk3Shaders, &EXpk3ShadersN, exName );
+                       parseEXblock ( ExShaders, &ExShadersN, exName );
                }
 -              else if ( !stricmp( token, "shaderfiles" ) ){
 +              else if ( !Q_stricmp( token, "shaderfiles" ) ){
-                       parseEXblock ( EXpk3Shaderfiles, &EXpk3ShaderfilesN, exName );
+                       parseEXblock ( ExShaderfiles, &ExShaderfilesN, exName );
                }
 -              else if ( !stricmp( token, "sounds" ) ){
 +              else if ( !Q_stricmp( token, "sounds" ) ){
-                       parseEXblock ( EXpk3Sounds, &EXpk3SoundsN, exName );
+                       parseEXblock ( ExSounds, &ExSoundsN, exName );
                }
 -              else if ( !stricmp( token, "videos" ) ){
 +              else if ( !Q_stricmp( token, "videos" ) ){
-                       parseEXblock ( EXpk3Videos, &EXpk3VideosN, exName );
+                       parseEXblock ( ExVideos, &ExVideosN, exName );
                }
                else{
                        Error( "ReadExclusionsFile: %s, line %d: unknown block name!\nValid ones are: textures, shaders, shaderfiles, sounds, videos.", exName, scriptline );
        /* free the buffer */
        free( buffer );
  
 -                      if ( !stricmp( ExTextures + i*65, ExShaders + j*65 ) ){
+       for ( i = 0; i < ExTexturesN; i++ ){
+               for ( j = 0; j < ExShadersN; j++ ){
++                      if ( !Q_stricmp( ExTextures + i*65, ExShaders + j*65 ) ){
+                               break;
+                       }
+               }
+               if ( j == ExShadersN ){
+                       strcpy ( ExPureTextures + ExPureTexturesN*65, ExTextures + i*65 );
+                       ExPureTexturesN++;
+               }
+       }
  skipEXfile:
  
        if( dbg ){
-               Sys_Printf( "\tEXpk3Textures....%i\n", EXpk3TexturesN );
-               for ( i = 0; i < EXpk3TexturesN; i++ ) Sys_Printf( "%s\n", EXpk3Textures + i*65 );
-               Sys_Printf( "\tEXpk3Shaders....%i\n", EXpk3ShadersN );
-               for ( i = 0; i < EXpk3ShadersN; i++ ) Sys_Printf( "%s\n", EXpk3Shaders + i*65 );
-               Sys_Printf( "\tEXpk3Shaderfiles....%i\n", EXpk3ShaderfilesN );
-               for ( i = 0; i < EXpk3ShaderfilesN; i++ ) Sys_Printf( "%s\n", EXpk3Shaderfiles + i*65 );
-               Sys_Printf( "\tEXpk3Sounds....%i\n", EXpk3SoundsN );
-               for ( i = 0; i < EXpk3SoundsN; i++ ) Sys_Printf( "%s\n", EXpk3Sounds + i*65 );
-               Sys_Printf( "\tEXpk3Videos....%i\n", EXpk3VideosN );
-               for ( i = 0; i < EXpk3VideosN; i++ ) Sys_Printf( "%s\n", EXpk3Videos + i*65 );
+               Sys_Printf( "\n\tExTextures....%i\n", ExTexturesN );
+               for ( i = 0; i < ExTexturesN; i++ ) Sys_Printf( "%s\n", ExTextures + i*65 );
+               Sys_Printf( "\n\tExPureTextures....%i\n", ExPureTexturesN );
+               for ( i = 0; i < ExPureTexturesN; i++ ) Sys_Printf( "%s\n", ExPureTextures + i*65 );
+               Sys_Printf( "\n\tExShaders....%i\n", ExShadersN );
+               for ( i = 0; i < ExShadersN; i++ ) Sys_Printf( "%s\n", ExShaders + i*65 );
+               Sys_Printf( "\n\tExShaderfiles....%i\n", ExShaderfilesN );
+               for ( i = 0; i < ExShaderfilesN; i++ ) Sys_Printf( "%s\n", ExShaderfiles + i*65 );
+               Sys_Printf( "\n\tExSounds....%i\n", ExSoundsN );
+               for ( i = 0; i < ExSoundsN; i++ ) Sys_Printf( "%s\n", ExSounds + i*65 );
+               Sys_Printf( "\n\tExVideos....%i\n", ExVideosN );
+               for ( i = 0; i < ExVideosN; i++ ) Sys_Printf( "%s\n", ExVideos + i*65 );
        }
  
 -                      if ( !stricmp( pk3Shaders + i*65, ExPureTextures + j*65 ) ){
+       /* can exclude pure textures right now, shouldn't create shaders for them anyway */
+       for ( i = 0; i < pk3ShadersN ; i++ ){
+               for ( j = 0; j < ExPureTexturesN ; j++ ){
++                      if ( !Q_stricmp( pk3Shaders + i*65, ExPureTextures + j*65 ) ){
+                               *( pk3Shaders + i*65 ) = '\0';
+                               break;
+                       }
+               }
+       }
  
        //Parse Shader Files
+        /* hack */
+       endofscript = qtrue;
        for ( i = 0; i < pk3ShaderfilesN; i++ ){
-               qboolean wantShader = qfalse, wantShaderFile = qfalse;
-               char shadername[ 1024 ], lastwantedShader[ 1024 ];
+               qboolean wantShader = qfalse, wantShaderFile = qfalse, ShaderFileExcluded = qfalse;
+               int shader;
+               char* reasonShader = NULL, reasonShaderFile = NULL;
  
                /* load the shader */
                sprintf( temp, "%s/%s", game->shaderPath, pk3Shaderfiles + i*65 );
-               LoadScriptFile( temp, 0 );
+               SilentLoadScriptFile( temp, 0 );
+               if( dbg ) Sys_Printf( "\n\tentering %s\n", pk3Shaderfiles + i*65 );
+               /* do wanna le shader file? */
+               for ( j = 0; j < ExShaderfilesN; j++ ){
 -                      if ( !stricmp( ExShaderfiles + j*65, pk3Shaderfiles + i*65 ) ){
++                      if ( !Q_stricmp( ExShaderfiles + j*65, pk3Shaderfiles + i*65 ) ){
+                               ShaderFileExcluded = qtrue;
+                               reasonShaderFile = ExShaderfiles + j*65;
+                               break;
+                       }
+               }
                /* tokenize it */
 -                              if ( !stricmp( ExShaders + j*65, token ) ){
+               /* check if shader file has to be excluded */
+               while ( !ShaderFileExcluded )
+               {
+                       /* test for end of file */
+                       if ( !GetToken( qtrue ) ) {
+                               break;
+                       }
+                       /* does it contain restricted shaders/textures? */
+                       for ( j = 0; j < ExShadersN; j++ ){
 -                              if ( !stricmp( ExPureTextures + j*65, token ) ){
++                              if ( !Q_stricmp( ExShaders + j*65, token ) ){
+                                       ShaderFileExcluded = qtrue;
+                                       reasonShader = ExShaders + j*65;
+                                       break;
+                               }
+                       }
+                       if ( ShaderFileExcluded )
+                               break;
+                       for ( j = 0; j < ExPureTexturesN; j++ ){
++                              if ( !Q_stricmp( ExPureTextures + j*65, token ) ){
+                                       ShaderFileExcluded = qtrue;
+                                       reasonShader = ExPureTextures + j*65;
+                                       break;
+                               }
+                       }
+                       if ( ShaderFileExcluded )
+                               break;
+                       /* handle { } section */
+                       if ( !GetToken( qtrue ) ) {
+                               break;
+                       }
+                       if ( strcmp( token, "{" ) ) {
+                                       Error( "ParseShaderFile: %s, line %d: { not found!\nFound instead: %s",
+                                               temp, scriptline, token );
+                       }
+                       while ( 1 )
+                       {
+                               /* get the next token */
+                               if ( !GetToken( qtrue ) ) {
+                                       break;
+                               }
+                               if ( !strcmp( token, "}" ) ) {
+                                       break;
+                               }
+                               /* parse stage directives */
+                               if ( !strcmp( token, "{" ) ) {
+                                       while ( 1 )
+                                       {
+                                               if ( !GetToken( qtrue ) ) {
+                                                       break;
+                                               }
+                                               if ( !strcmp( token, "}" ) ) {
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               }
+               /* tokenize it again */
+               SilentLoadScriptFile( temp, 0 );
                while ( 1 )
                {
                        /* test for end of file */
                        /* do wanna le shader? */
                        wantShader = qfalse;
                        for ( j = 0; j < pk3ShadersN; j++ ){
 -                              if ( !stricmp( pk3Shaders + j*65, token) ){
 +                              if ( !Q_stricmp( pk3Shaders + j*65, token) ){
-                                       strcpy ( shadername, pk3Shaders + j*65 );
-                                       *(pk3Shaders + j*65) = '\0';
+                                       shader = j;
                                        wantShader = qtrue;
                                        break;
                                }
                                                        /* get an image */
                                                        GetToken( qfalse );
                                                        if ( token[ 0 ] != '*' && token[ 0 ] != '$' ) {
-                                                               tex2list( pk3Textures, &pk3TexturesN, EXpk3Textures, &EXpk3TexturesN );
+                                                               tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
                                                        }
                                                }
 -                                              else if ( !stricmp( token, "animMap" ) ||
 -                                                      !stricmp( token, "clampAnimMap" ) ) {
 +                                              else if ( !Q_stricmp( token, "animMap" ) ||
 +                                                      !Q_stricmp( token, "clampAnimMap" ) ) {
                                                        GetToken( qfalse );// skip num
                                                        while ( TokenAvailable() ){
                                                                GetToken( qfalse );
-                                                               tex2list( pk3Textures, &pk3TexturesN, EXpk3Textures, &EXpk3TexturesN );
+                                                               tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
                                                        }
                                                }
 -                                              else if ( !stricmp( token, "videoMap" ) ){
 +                                              else if ( !Q_stricmp( token, "videoMap" ) ){
                                                        GetToken( qfalse );
                                                        FixDOSName( token );
                                                        if ( strchr( token, "/" ) == NULL ){
                                                                        goto away;
                                                                }
                                                        }
-                                                       for ( j = 0; j < EXpk3VideosN; j++ ){
-                                                               if ( !Q_stricmp( EXpk3Videos + j*65, token ) ){
+                                                       for ( j = 0; j < ExVideosN; j++ ){
 -                                                              if ( !stricmp( ExVideos + j*65, token ) ){
++                                                              if ( !Q_stricmp( ExVideos + j*65, token ) ){
                                                                        goto away;
                                                                }
                                                        }
                                ----------------------------------------------------------------- */
  
                                /* match surfaceparm */
 -                              else if ( !stricmp( token, "surfaceparm" ) ) {
 +                              else if ( !Q_stricmp( token, "surfaceparm" ) ) {
                                        GetToken( qfalse );
 -                                      if ( !stricmp( token, "nodraw" ) ) {
 +                                      if ( !Q_stricmp( token, "nodraw" ) ) {
                                                wantShader = qfalse;
+                                               *( pk3Shaders + shader*65 ) = '\0';
                                        }
                                }
  
                                        GetToken( qfalse );
  
                                        /* ignore bogus paths */
 -                                      if ( stricmp( token, "-" ) && stricmp( token, "full" ) ) {
 +                                      if ( Q_stricmp( token, "-" ) && Q_stricmp( token, "full" ) ) {
                                                strcpy ( temp, token );
                                                sprintf( token, "%s_up", temp );
-                                               tex2list( pk3Textures, &pk3TexturesN, EXpk3Textures, &EXpk3TexturesN );
+                                               tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
                                                sprintf( token, "%s_dn", temp );
-                                               tex2list( pk3Textures, &pk3TexturesN, EXpk3Textures, &EXpk3TexturesN );
+                                               tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
                                                sprintf( token, "%s_lf", temp );
-                                               tex2list( pk3Textures, &pk3TexturesN, EXpk3Textures, &EXpk3TexturesN );
+                                               tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
                                                sprintf( token, "%s_rt", temp );
-                                               tex2list( pk3Textures, &pk3TexturesN, EXpk3Textures, &EXpk3TexturesN );
+                                               tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
                                                sprintf( token, "%s_bk", temp );
-                                               tex2list( pk3Textures, &pk3TexturesN, EXpk3Textures, &EXpk3TexturesN );
+                                               tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
                                                sprintf( token, "%s_ft", temp );
-                                               tex2list( pk3Textures, &pk3TexturesN, EXpk3Textures, &EXpk3TexturesN );
+                                               tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
                                        }
                                        /* skip rest of line */
                                        GetToken( qfalse );
                                        GetToken( qfalse );
                                }
                        }
                        //exclude shader
                        if ( wantShader ){
-                               for ( j = 0; j < EXpk3ShadersN; j++ ){
-                                       if ( !Q_stricmp( EXpk3Shaders + j*65, shadername ) ){
+                               for ( j = 0; j < ExShadersN; j++ ){
 -                                      if ( !stricmp( ExShaders + j*65, pk3Shaders + shader*65 ) ){
++                                      if ( !Q_stricmp( ExShaders + j*65, pk3Shaders + shader*65 ) ){
                                                wantShader = qfalse;
+                                               *( pk3Shaders + shader*65 ) = '\0';
                                                break;
                                        }
                                }
                                }
                        }
                        if ( *( pk3Shaders + i*65 ) == '\0' ) continue;
-                       for ( j = 0; j < EXpk3TexturesN; j++ ){
-                               if ( !Q_stricmp( pk3Shaders + i*65, EXpk3Textures + j*65 ) ){
+                       for ( j = 0; j < ExTexturesN; j++ ){
 -                              if ( !stricmp( pk3Shaders + i*65, ExTextures + j*65 ) ){
++                              if ( !Q_stricmp( pk3Shaders + i*65, ExTextures + j*65 ) ){
                                        *( pk3Shaders + i*65 ) = '\0';
                                        break;
                                }
  
  //snds
        for ( i = 0; i < pk3SoundsN; i++ ){
-               for ( j = 0; j < EXpk3SoundsN; j++ ){
-                       if ( !Q_stricmp( pk3Sounds + i*65, EXpk3Sounds + j*65 ) ){
+               for ( j = 0; j < ExSoundsN; j++ ){
 -                      if ( !stricmp( pk3Sounds + i*65, ExSounds + j*65 ) ){
++                      if ( !Q_stricmp( pk3Sounds + i*65, ExSounds + j*65 ) ){
                                *( pk3Sounds + i*65 ) = '\0';
                                break;
                        }