#include "stdafx.h" #include #include "util.h" #include "file.h" #include "process.h" #include "globaldata.h" UINT fn_uiThreadMakeGFTextures( LPVOID _p_vParam ) { CStringArray a_csSourceDirectories; CStringArray a_csDestDirectories; CString csTmp, csTmp2; CString csOutput; BOOL bKeepDisplayResults = FALSE; tdeStatus eStatus; _p_vParam = _p_vParam; fn_vOutputLine( "Making gf textures...\r\n" ); if( ! fn_bCheckFileExistanceInStartupDir( "convimg.exe" ) ) AfxEndThread( STATUS_C_Error ); // Build array of dirs to execute convimg on. a_csSourceDirectories.SetSize( 0, 5 ); a_csDestDirectories.SetSize( 0, 5 ); // First, the vignettes. a_csSourceDirectories.Add( "\\Gamedata\\Vignette" ); a_csDestDirectories.Add( "\\Vignette" ); // Then, specific textures (starting from last dir to first dir in version.ini) for( int i=g_stTheGlobalData.a_csVersionDirectories.GetSize()-1; i>=0; i-- ) { csTmp = "\\" + g_stTheGlobalData.a_csVersionDirectories[i] + "\\World\\Graphics\\Textures"; a_csSourceDirectories.Add( csTmp ); a_csDestDirectories.Add( "\\World\\Graphics\\Textures" ); } // Then, common textures. // Common textures will be copied AFTER, so they will be chosen BEFORE specific textures. a_csSourceDirectories.Add( "\\Gamedata\\World\\Graphics\\Textures" ); a_csDestDirectories.Add( "\\World\\Graphics\\Textures" ); char szComvImgExeName[512]; char szComvImgCommandLine[512]; sprintf( szComvImgExeName, "%s\\ConvImg.exe", (const char *)g_stTheGlobalData.csStartupDirectory ); for( i=0; i 0 && csDestDirectory[iLength] == '\\' ) csDestDirectory.SetAt( iLength, 0 ); if( _access( csDestDirectory, 06 ) == -1 ) { csOutput = "Error: Temp directory is not valid !\n(The directory '" + csDestDirectory + "' is not accessible.)"; AfxMessageBox( csOutput, MB_OK | MB_ICONSTOP ); fn_vOutputLine( "\tInvalid temp directory\r\n" ); AfxEndThread( STATUS_C_Error ); } csDestDirectory += "\\textures"; fn_vOutputLine( "\tDeleting previous textures in temp directory\r\n" ); csTmp = csDestDirectory + "\\*.*"; if( (eStatus = fn_eDeleteFileOrDirectory( csTmp )) == STATUS_C_Error ) { fn_vOutputLine( "\tUnable to clean temp directory\r\n" ); AfxEndThread( STATUS_C_Error ); } if( eStatus == STATUS_C_UserBreak ) AfxEndThread( eStatus ); // First, convert and copy Gamedata\Vignette fn_vOutputLine( "\tConverting Vignettes\r\n" ); sprintf( szExeName, "%s\\ConvImg.exe", (LPCTSTR)g_stTheGlobalData.csStartupDirectory ); csTmp = g_stTheGlobalData.csMainDirectory + "\\Gamedata\\Vignette"; sprintf( szCommandLine, "ConvImg.exe -SrcPath:%s -DstPath:%s -BMP -TGA", (LPCTSTR)csTmp, (LPCTSTR)csTmp ); if( (eStatus = fn_eSpawnAndWaitForProcessWithInputEvents( szExeName, szCommandLine )) != STATUS_C_OK ) AfxEndThread( eStatus ); csTmp += "\\*.gf"; csTmp2 = g_stTheGlobalData.csBinDirectory + "\\Vignette"; if( (eStatus = fn_eRecursiveFileCopy( csTmp, csTmp2 )) != STATUS_C_OK ) AfxEndThread( eStatus ); // Then convert all textures directories for( int i=g_stTheGlobalData.a_csVersionDirectories.GetSize()-1; i>=0; i-- ) { csOutput = "\tConverting textures from '" + g_stTheGlobalData.a_csVersionDirectories[i] + "'\r\n"; fn_vOutputLine( csOutput ); csTmp = g_stTheGlobalData.csMainDirectory + "\\" + g_stTheGlobalData.a_csVersionDirectories[i] + "\\World\\Graphics\\Textures"; sprintf( szCommandLine, "ConvImg.exe -SrcPath:%s -DstPath:%s -BMP -TGA", (LPCTSTR)csTmp, (LPCTSTR)csDestDirectory ); if( (eStatus = fn_eSpawnAndWaitForProcessWithInputEvents( szExeName, szCommandLine )) != STATUS_C_OK ) AfxEndThread( eStatus ); } // Then, execute concat to make the bigfile. fn_vOutputLine( "\tMaking file Gamedata\\Textures.cnt\r\n" ); sprintf( szExeName, "%s\\Concat.exe", (const char *)g_stTheGlobalData.csStartupDirectory ); csTmp = g_stTheGlobalData.csMainDirectory + "\\GameData\\Textures.cnt"; sprintf( szCommandLine, "Concat.exe -SrcPath:%s -DstFile:%s -SrcFlt:*.gf -Check -Xor", (LPCTSTR)csDestDirectory, (LPCTSTR)csTmp ); if( (eStatus = fn_eSpawnAndWaitForProcessWithInputEvents( szExeName, szCommandLine )) != STATUS_C_OK ) AfxEndThread( eStatus ); // Then, copy the bigfile into bin directory fn_vOutputLine( "\tCopying Bigfile to bin directory\r\n" ); if( (eStatus = fn_eCopyFileOrDirectory( csTmp, g_stTheGlobalData.csBinDirectory )) != STATUS_C_OK ) AfxEndThread( eStatus ); // Clean the temporary directory. fn_vOutputLine( "\tCleaning temp directory\r\n" ); csTmp = csDestDirectory + "\\*.*"; if( (eStatus = fn_eDeleteFileOrDirectory( csTmp )) == STATUS_C_Error ) { fn_vOutputLine( "\tUnable to clean up temp directory\r\n" ); AfxEndThread( STATUS_C_Error ); } if( eStatus == STATUS_C_UserBreak ) AfxEndThread( eStatus ); // At least, edit game.dsc to allow engine to load textures from bigfile. if( (eStatus = fn_eEditGameDscForBigFile()) == STATUS_C_Error ) AfxEndThread( eStatus ); fn_vOutputLine( "\tBigfile making is successful !\r\n\r\n" ); AfxEndThread( STATUS_C_OK ); return STATUS_C_OK; }