reman3/Rayman_X/cpa/Appli/BinaryTool2/src/Tasks.cpp

231 lines
5.9 KiB
C++

#include "stdafx.h"
//#include <stdio.h>
#include "util.h"
#include "GlobalData.h"
#include "file.h"
#include "Process.h"
#include "Threads.h"
#include "scripts.h"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
tdeStatus fn_e_TASK_Binarize( CByteArray &a_cSelectedLevels )
{
if( ! fn_bCheckFileExistanceInStartupDir( "crb.exe" ) )
return STATUS_C_Error;
// Reset list of binarized levels
for( int i=g_stTheGlobalData.a_cBinarizedLevels.GetSize()-1; i>=0; i-- )
{
g_stTheGlobalData.a_cBinarizedLevels.SetAt( i, 0 );
}
// Before binarizing, we disable BigFile for reloc tables,
// because user must regenerate it after binarizing
fn_vDisableRelocTableBigFile();
// Start binarization !
tdeStatus eStatus = fn_eSpawnThreadAndWaitWithInputEvents( fn_uiThreadBinarize, &a_cSelectedLevels );
if( eStatus == STATUS_C_OK )
{
// If no error, update startprg.ini
// fn_vUpdateStartPrg();
fn_vUpdateStartPrg_old();
}
return eStatus;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
tdeStatus fn_e_TASK_TestBinarizedMaps( CByteArray &a_cBinarizedLevels )
{
CString csOutput, csSequence;
BOOL bAllMaps;
int iSequenceNumber, iSizeOfSequence;
int iNumberOfMap=0, iFirstMap=-1;
CString csFileName = g_stTheGlobalData.csMainDirectory + "\\Test.ini";
tdeStatus eStatus;
fn_vOutputLine( "Testing levels...\r\n" );
bAllMaps = TRUE;
iSequenceNumber = 1;
iSizeOfSequence = 0;
csSequence = "SEQUENCE1=";
for( int i=0; i<a_cBinarizedLevels.GetSize(); i++ )
{
if( a_cBinarizedLevels[i] != 0 )
{
iNumberOfMap++;
if( iFirstMap == -1 )
{
// Get first map number.
iFirstMap = i;
csOutput = "\t" + g_stTheGlobalData.a_csLevelNames[i] + "\r\n";
fn_vOutputLine( csOutput );
}
else
{
// Insert level into a sequence (except the first one)
if( iSizeOfSequence > 250 )
{
char szSeq[5];
iSequenceNumber ++;
iSizeOfSequence = 0;
sprintf( szSeq, "%i", iSequenceNumber );
csSequence += "\nSEQUENCE";
csSequence += szSeq;
csSequence += "=";
}
csSequence += g_stTheGlobalData.a_csLevelNames[i] + " ";
iSizeOfSequence += g_stTheGlobalData.a_csLevelNames[i].GetLength() + 1;
csOutput = "\t" + g_stTheGlobalData.a_csLevelNames[i] + "\r\n";
fn_vOutputLine( csOutput );
}
}
else
bAllMaps = FALSE;
}
csSequence += "\n";
// if nothing to do...
if( iNumberOfMap == 0 )
return STATUS_C_OK;
// if there is only one map, no test.ini
if( iNumberOfMap > 1 )
{
CStdioFile fTestIni;
// Generate Test.ini
if( ! fTestIni.Open( csFileName, CFile::modeWrite | CFile::modeCreate ) )
{
csOutput = "\tError: Can't create '" + csFileName + "'";
fn_vOutputLine( csOutput );
return STATUS_C_Error;
}
if( bAllMaps )
fTestIni.WriteString( "[TEST]\nMODE=ALLMAPSONLY\nWAITMIN=35\nWAITMAX=45\nWITHRESTART=0\nSTAT=1\n" );
else
{
fTestIni.WriteString( "[TEST]\nMODE=SEQUENCE\nWAITMIN=35\nWAITMAX=45\nWITHRESTART=0\nSTAT=1\n" );
fTestIni.WriteString( csSequence );
}
fTestIni.Close();
}
char szExe[512];
char szCommandLine[128];
sprintf( szExe, "%s\\%s", g_stTheGlobalData.csMainDirectory, g_stTheGlobalData.csExeName );
sprintf( szCommandLine, "%s -level:%s", szExe, g_stTheGlobalData.a_csLevelNames[iFirstMap] );
eStatus = fn_eSpawnAndWaitForProcessWithInputEvents( szExe, szCommandLine );
if( iNumberOfMap > 1 )
DeleteFile( csFileName );
if( eStatus == STATUS_C_OK )
{
fn_vOutputLine( "\tTest is sucessful !\r\n\r\n" );
}
else
{
fn_vOutputLine( "\r\n" );
}
return eStatus;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
tdeStatus fn_e_TASK_Version()
{
char szExeName[512];
char szCommandLine[1024];
int i;
tdeStatus eStatus = STATUS_C_OK;
fn_vOutputLine( "\r\n* * Making version * * * * * * * * * * * * * * * \r\n" );
if( ! fn_bCheckFileExistanceInStartupDir( "rm2sndparser.exe" )
|| ! fn_bCheckFileExistanceInStartupDir( "convimg.exe" )
|| ! fn_bCheckFileExistanceInStartupDir( "concat.exe" )
|| ! fn_bCheckFileExistanceInStartupDir( "crb.exe" ) )
return STATUS_C_Error;
if( ! fn_bValidateMainDirectorySetting() )
return STATUS_C_Error;
if( ! fn_bValidateBinDirectorySetting() )
return STATUS_C_Error;
if( ! fn_bValidateGameExeSetting() )
return STATUS_C_Error;
// Select all levels for binarization.
int iSize = g_stTheGlobalData.a_csLevelNames.GetSize();
for( i=0; i<iSize; i++ )
{
g_stTheGlobalData.a_cLevelsSelectedForBinarization.SetAt( i, 1 );
}
// Now it's time to make the sound banks.
fn_vOutputLine( "Making sound banks...\r\n" );
sprintf( szExeName, "%s\\rm2SndParser.exe", (LPCTSTR)g_stTheGlobalData.csStartupDirectory );
fn_vMakeSndParserCommandLine( szCommandLine );
strcat( szCommandLine, " -ParseAllMaps -ParseFix -GenerateBanks" );
eStatus = fn_eSpawnAndWaitForProcessWithInputEvents( szExeName, szCommandLine );
if( eStatus != STATUS_C_OK )
return eStatus;
// Then, we copy the sound directory
eStatus = fn_eSpawnThreadAndWaitWithInputEvents( fn_uiThreadCopySoundDirectory, NULL );
if( eStatus != STATUS_C_OK )
return eStatus;
// Texture time...
eStatus = fn_eSpawnThreadAndWaitWithInputEvents(
fn_uiThreadMakeBigFileTextures,
(void *)(LPCTSTR)g_stTheGlobalData.csTempTextureDirectory );
if( eStatus != STATUS_C_OK )
return eStatus;
// Now we binarize all levels.
eStatus = fn_e_TASK_Binarize( g_stTheGlobalData.a_cLevelsSelectedForBinarization );
if( eStatus != STATUS_C_OK )
return eStatus;
// Now we test the binarized maps.
if( g_stTheGlobalData.bAutoTestMaps )
{
fn_e_TASK_TestBinarizedMaps( g_stTheGlobalData.a_cBinarizedLevels );
}
return STATUS_C_OK;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -