Add rayman2 source files

This commit is contained in:
2024-09-18 02:33:44 +08:00
parent bcc093f8ed
commit fb036c54fd
14339 changed files with 2596224 additions and 0 deletions

View File

@@ -0,0 +1,209 @@
#include "stdio.h"
#include "stdlib.h"
#include "CRB_Main.h"
#include "windows.h"
#define __CRB_Includes_SNA__
#include "SNA/snafile.h"
#include "sna/snammg.h"
#undef __CRB_Includes_SNA__
/*
unsigned long fn_ulGetFileSize( FILE *_p_xFile )
{
long lFilePosition;
long lFileSize;
lFilePosition = ftell( _p_xFile );
fseek( _p_xFile, 0, SEEK_END );
if( (lFileSize = ftell( _p_xFile )) == -1 )
lFileSize = 0;
fseek( _p_xFile, lFilePosition, SEEK_SET );
return (unsigned long)lFileSize;
}
*/
unsigned long fn_ulGetFileSize( HANDLE hFile )
{
DWORD dwResult;
dwResult = GetFileSize (hFile,NULL);
return ( (dwResult == 0xFFFFFFFF) ? 0 : dwResult);
}
// Read a pointer file.
unsigned long CRB_fn_bReadPtrBlocks(char *szFilename ,struct tdstBloc_** p_stMemory, char *szFileTypeName )
{
HANDLE hFile;
unsigned long ulSizeOfBloc;
DWORD dwBytesRead;
hFile = CreateFile(szFilename , GENERIC_READ, 0 , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
printf("Warning - %s Pointer File not found : %s !\n", szFileTypeName, szFilename);
// getchar();
// exit(0);
return 0;
}
ulSizeOfBloc = fn_ulGetFileSize( hFile );
ulSizeOfBloc &= 0xfffffffc;
p_stMemory[0]=(struct tdstBloc_ *)malloc(sizeof(struct tdstBloc_));
p_stMemory[0]->cMemory=(unsigned long *)malloc(ulSizeOfBloc);
p_stMemory[0]->ulSize = ulSizeOfBloc;
if (ReadFile (hFile , p_stMemory[0]->cMemory , ulSizeOfBloc , &dwBytesRead , NULL) && (dwBytesRead != ulSizeOfBloc))
{
printf("Error reading %s Pointer File (%s) !\n", szFileTypeName, szFilename);
getchar();
exit(1);
}
CloseHandle (hFile);
return 1;
}
// Search a block in the memory table.
// Returns a pointer to the block entry
struct tdstBloc_ * CRB_fn_p_stSearchBlock(
struct tdstBloc_ *_p_stMemory[], unsigned long _ulNbBlocks,
unsigned char _ucModule, unsigned char _ucBlock )
{
struct tdstBloc_ *p_stCurMemory;
unsigned long i;
for( i=0; i<_ulNbBlocks; i++ )
{
p_stCurMemory = _p_stMemory[i];
if( p_stCurMemory->ulModuleNumber == _ucModule
&& p_stCurMemory->ulBlocNumber == _ucBlock )
{
return p_stCurMemory;
}
}
return NULL;
}
// Read SNA file
unsigned long CRB_fn_bReadAllMemoryBlocks(char *szFilename,struct tdstBloc_** p_stMemory,unsigned char ucMode)
{
struct SNA_tdstFile_ stFile;
// FILE *p_xFile;
unsigned char ucModule,ucBlock;
unsigned long ulNbOfBloc;
struct tdstBloc_ *p_stCurrentBlock;
struct tdstBloc_ stTmpBlock;
unsigned char ucUpdateBlock;
DWORD dwBytesRead;
if(ucMode==C_CRB_NEW)
{
ulNbOfBloc=0;
}
else
{
ulNbOfBloc=g_ulNbBloc;
}
SNA_fn_bFOpen( szFilename, SNA_C_ucRead, SNA_C_ucUseEncryption, &stFile );
//if (! stFile.p_xFile )
if (stFile.hFile == INVALID_HANDLE_VALUE)
{
printf("\nError - SNA File not found : %s !",szFilename);
getchar();
exit(2);
}
stFile.bReadSuccess = ReadFile(stFile.hFile,&stFile.ulCryptKey,sizeof(stFile.ulCryptKey),&dwBytesRead,NULL);
if( stFile.ulCryptKey == 0 )
{
stFile.ucOptions &= ~SNA_C_ucUseEncryption;
}
while(stFile.bReadSuccess)
{
memset( &stTmpBlock, 0, sizeof(struct tdstBloc_) );
// Read module ID and block ID.
if(SNA_fn_ulFRead(&ucModule,1,1,&stFile)==0)
break;
SNA_fn_ulFRead(&ucBlock,1,1,&stFile);
// Tells if block has already been loaded
p_stCurrentBlock = CRB_fn_p_stSearchBlock( p_stMemory, ulNbOfBloc, ucModule, ucBlock );
if( p_stCurrentBlock == NULL )
{
// If block not loaded, add it.
ucUpdateBlock = 1;
p_stCurrentBlock = p_stMemory[ulNbOfBloc++] = (struct tdstBloc_ *)malloc(sizeof(struct tdstBloc_));
}
else if( p_stCurrentBlock->cMemory == NULL )
// If only blocks infos have been loaded, update them
ucUpdateBlock = 1;
else
// Block info AND content have been loaded, do not update them.
ucUpdateBlock = 0;
stTmpBlock.ulModuleNumber=ucModule;
stTmpBlock.ulBlocNumber=ucBlock;
// Read location of the block (fix or level)
// SNA_fn_ulFRead( &ucModuleBlocLocation[ucModule][ucBlock], 1, 1, &stFile);
SNA_fn_ulFRead( &stTmpBlock.ucLocation, 1, 1, &stFile);
SNA_fn_ulFRead( &stTmpBlock.ulBeginBloc, 4, 1, &stFile );
if( stTmpBlock.ulBeginBloc == 0XFFFFFFFF )
{
if( ucUpdateBlock )
memcpy( p_stCurrentBlock, &stTmpBlock, sizeof(struct tdstBloc_) );
continue;
}
SNA_fn_ulFRead(&(stTmpBlock.ulEndBloc),4,1,&stFile);
SNA_fn_ulFRead(&(stTmpBlock.ulFreeSpace),4,1,&stFile);
SNA_fn_ulFRead(&(stTmpBlock.ulMaxSpace),4,1,&stFile);
SNA_fn_ulFRead(&stTmpBlock.ulSize,4,1,&stFile);
// Size of block is not null, the block's content follows.
if(stTmpBlock.ulSize !=0 )
{
if( ucUpdateBlock )
{
// Allocate the memory for the block's content and read it.
stTmpBlock.cMemory = (unsigned long *)malloc( stTmpBlock.ulSize );
SNA_fn_ulFRead( stTmpBlock.cMemory, 1, stTmpBlock.ulSize, &stFile );
}
else
{
// We already have loaded this block, print a warning and continue.
printf( "Warning - Module %i block %i is loaded more than once.\n\tKeeping only first version...\n",
ucModule, ucBlock );
SNA_fn_bFseek( &stFile, stTmpBlock.ulSize, SEEK_CUR );
}
}
else
{
// This was only a block header, no content to load.
stTmpBlock.cMemory = NULL;
}
// Update block infos if necessary.
if( ucUpdateBlock )
{
memcpy( p_stCurrentBlock, &stTmpBlock, sizeof(struct tdstBloc_) );
}
}
SNA_fn_bFClose(&stFile);
return ulNbOfBloc;
}

View File

@@ -0,0 +1,706 @@
#include <windows.h>
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "CRB_Main.h"
//#include "CRB_Log.h"
#define __CRB_Includes_SNA__
#include "sna/snammg.h"
#undef __CRB_Includes_SNA__
tdstBloc *g_p_stMemory0[C_CRB_NBMAXBLOC];
tdstBloc *g_p_stMemory1[C_CRB_NBMAXBLOC];
tdstBloc *g_p_stPtrMemory0[C_CRB_NBMAXBLOC];
tdstBloc *g_p_stPtrMemory1[C_CRB_NBMAXBLOC];
unsigned long g_ulNbBloc;
unsigned long g_ulBlocPtrTable[1000000];
unsigned char g_ucBlocPtrDestTable[1000000];
unsigned long g_ulNbPtr,g_ulNbBadPtr;
unsigned char g_ucAvoidAllEntries;
// For debug purpose
long g_ulBadBlocDiff[100];
unsigned long g_ulBadBlocDiffOccur[100];
unsigned long g_ulNbBadBlocDiff;
// End for debug purpose
char g_bGlideMode;
void CRB_InitArray()
{
}
char SNA_fn_bSaveThisModuleBlocInFix( tdstBloc *_p_stBlock )
{
return(_p_stBlock->ucLocation == SNA_C_ucBlockOfFix);
}
char SNA_fn_bSaveThisModuleBlocInLevel( tdstBloc *_p_stBlock )
{
return(_p_stBlock->ucLocation == SNA_C_ucBlockOfLevel);
}
unsigned long CRB_fn_ulNbOfFixBlockIn( tdstBloc **_p_a_stBlocks, unsigned long _ulArraySize )
{
unsigned long i, ulNb = 0;
for( i=0; i<_ulArraySize; i++ )
{
if( SNA_fn_bSaveThisModuleBlocInFix( *_p_a_stBlocks ) )
ulNb++;
_p_a_stBlocks++;
}
return ulNb;
}
unsigned long CRB_fn_ulNbOfLevelBlockIn( tdstBloc **_p_a_stBlocks, unsigned long _ulArraySize )
{
unsigned long i, ulNb = 0;
for( i=0; i<_ulArraySize; i++ )
{
if( SNA_fn_bSaveThisModuleBlocInLevel( *_p_a_stBlocks ) )
ulNb++;
_p_a_stBlocks++;
}
return ulNb;
}
unsigned char CRB_fn_bDestinationBloc( unsigned long _ulPtrValue )
{
unsigned char i;
for(i=0;i<g_ulNbBloc;i++)
{
if( (_ulPtrValue>=g_p_stMemory0[i]->ulBeginBloc) && (_ulPtrValue<g_p_stMemory0[i]->ulEndBloc) )
{
return i;
}
}
return -1;
}
// Add a bad bloc displacement to the array of bad bloc disp.
void CRB_fn_bAddBadBlocDiff(long ucI)
{
unsigned char i;
for(i=0;i<g_ulNbBadBlocDiff;i++)
{
if(ucI==g_ulBadBlocDiff[i])
{
g_ulBadBlocDiffOccur[i]++;
return;
}
}
g_ulBadBlocDiff[g_ulNbBadBlocDiff]=ucI;
g_ulNbBadBlocDiff++;
return;
}
// Open file for writing PtrTable.
HANDLE CRB_fn_vOpenPtrTable(char *szFilename,unsigned long ulNbBloc)
{
HANDLE hFile;
unsigned char ucNb;
DWORD dwWrite;
ucNb=(unsigned char)ulNbBloc;
hFile = CreateFile (szFilename , GENERIC_WRITE, 0 , NULL , CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL , NULL);
WriteFile (hFile , &ucNb , 1 , &dwWrite , NULL);
return(hFile);
}
// Close file for PtrTable.
void CRB_fn_vClosePtrTable(HANDLE hFile)
{
CloseHandle (hFile);
}
// Save PtrTable for a bloc to disc.
//void CRB_fn_vSavePtrTable(unsigned long ulBlocNb,FILE *fFile)
void CRB_fn_vSavePtrTable(unsigned long ulBlocNb,HANDLE hFile)
{
unsigned long i;
unsigned char ucNb;
DWORD dwWrite;
tdstPtr *p_stPtr;
tdstPtr *p_stPointer;
// N<> Module
ucNb=(unsigned char)g_p_stMemory0[ulBlocNb]->ulModuleNumber;
WriteFile (hFile , &ucNb , 1 , &dwWrite , NULL);
// N<> Bloc
ucNb=(unsigned char)g_p_stMemory0[ulBlocNb]->ulBlocNumber;
WriteFile (hFile , &ucNb , 1 , &dwWrite , NULL);
// Nb of Ptr
WriteFile (hFile , &(g_ulNbPtr) , 4 , &dwWrite , NULL);
/*
for(i=0;i<g_ulNbPtr;i++)
{
WriteFile (hFile , &(g_ulBlocPtrTable[i]) , 4 , &dwWrite , NULL);
if(g_ucBlocPtrDestTable[i]<0xf0)
{
ucNb=(unsigned char)g_p_stMemory0[g_ucBlocPtrDestTable[i]]->ulModuleNumber;
}
else
{
ucNb=g_ucBlocPtrDestTable[i];
}
WriteFile (hFile , &ucNb , 1 , &dwWrite , NULL);
if(g_ucBlocPtrDestTable[i]<0xf0)
{
ucNb=(unsigned char)g_p_stMemory0[g_ucBlocPtrDestTable[i]]->ulBlocNumber;
}
else
{
ucNb=g_ucBlocPtrDestTable[i];
}
WriteFile (hFile , &ucNb , 1 , &dwWrite , NULL);
}
*/
p_stPointer = (tdstPtr*) malloc (sizeof(tdstPtr) * g_ulNbPtr);
p_stPtr = p_stPointer;
for(i=0;i<g_ulNbPtr;i++,p_stPtr++)
{
//
p_stPtr -> p_vPtr = g_ulBlocPtrTable[i];
//
if(g_ucBlocPtrDestTable[i]<0xf0)
{
p_stPtr -> ucTargetModule = (unsigned char)g_p_stMemory0[g_ucBlocPtrDestTable[i]]->ulModuleNumber;
}
else
{
p_stPtr -> ucTargetModule = g_ucBlocPtrDestTable[i];
}
//
if(g_ucBlocPtrDestTable[i]<0xf0)
{
p_stPtr -> ucTargetBlock = (unsigned char)g_p_stMemory0[g_ucBlocPtrDestTable[i]]->ulBlocNumber;
}
else
{
p_stPtr -> ucTargetBlock = g_ucBlocPtrDestTable[i];
}
}
WriteFile (hFile , p_stPointer , sizeof(tdstPtr) * g_ulNbPtr , &dwWrite , NULL);
free (p_stPointer);
}
void CRB_fn_vBuildPointerTableForFix(unsigned long ulNbBloc,char *szFilename)
{
unsigned long i,j;
unsigned long *p_b0,*p_b1,ulLastBadPtr;
unsigned char ucDestBloc;
//FILE *fFile;
HANDLE hFile;
hFile = CRB_fn_vOpenPtrTable (szFilename , CRB_fn_ulNbOfFixBlockIn (g_p_stMemory0 , ulNbBloc));
// For stats
// fn_vBeginLogPointersInfos( "Fix" );
g_ulNbBadPtr=0;
ulLastBadPtr=0;
for(i=0;i<ulNbBloc;i++)
{
g_ulNbPtr=0;
// GuS: Don't compute relocation for empty blocs.
if( g_p_stMemory0[i]->ulSize == 0 ) continue;
p_b0=(unsigned long *)g_p_stMemory0[i]->cMemory;
p_b1=(unsigned long *)g_p_stMemory1[i]->cMemory;
for(j=0;j<((g_p_stMemory0[i]->ulSize)>>2);j++)
{
if(p_b0[j]!=p_b1[j])
{
ucDestBloc=CRB_fn_bDestinationBloc(p_b0[j]);
// fn_vLogAddPointer( i, ucDestBloc );
if(ucDestBloc!=(unsigned char)-1)
{
// Add store of the address of this ptr and the aim bloc.
g_ulBlocPtrTable[g_ulNbPtr]=g_p_stMemory0[i]->ulBeginBloc+(j<<2);
g_ucBlocPtrDestTable[g_ulNbPtr]=ucDestBloc;
g_ulNbPtr++;
/*
if( g_p_stMemory0[ucDestBloc]->ulModuleNumber == C_ucIdOfModuleTmp )
{
// Pointers to block TMP will be set to NULL.
g_ucBlocPtrDestTable[g_ulNbPtr-1]=0xfe;
}
*/
}
else
{
/* Gus: Uncomment this to take care of pointers to unknown blocs.
if(ulLastBadPtr==(j+1))
{
printf("\nptr Possible");
}
// for debug only
// Pointers to unknow blocks will remain unchanged.
g_ulBlocPtrTable[g_ulNbPtr]=g_p_stMemory0[i]->ulBeginBloc+(j<<2);
g_ucBlocPtrDestTable[g_ulNbPtr]=0xff;
g_ulNbPtr++;
// end debug
g_ulNbBadPtr++;
ulLastBadPtr=j;
// printf("\nWarning - A Pointer (Offset=%lx) in Module %ld Bloc %ld point out of Blocs !",j,g_p_stMemory0[i]->ulModuleNumber,g_p_stMemory0[i]->ulBlocNumber);
*/
}
}
}
// fn_vLogPointersInfosForOneBlock( i );
CRB_fn_vSavePtrTable (i , hFile);
}
// fn_vEndLogPointersInfos();
CRB_fn_vClosePtrTable (hFile);
}
void CRB_fn_vBuildPointerTableForLevel(unsigned long ulNbBloc,char *szFilename)
{
unsigned long i,j;
unsigned long *p_b0,*p_b1,ulLastBadPtr;
unsigned char ucDestBloc;
HANDLE hFile;
hFile = CRB_fn_vOpenPtrTable (szFilename , CRB_fn_ulNbOfLevelBlockIn (g_p_stMemory0 , ulNbBloc));
// For stats
// fn_vBeginLogPointersInfos( "Level" );
g_ulNbBadPtr=0;
ulLastBadPtr=0;
for(i=0;i<ulNbBloc;i++)
{
g_ulNbPtr=0;
// g_ulNbPtrFix=0;
// GuS: Don't compute relocation for empty blocs.
if( g_p_stMemory0[i]->ulSize == 0 ) continue;
p_b0=(unsigned long *)g_p_stMemory0[i]->cMemory;
p_b1=(unsigned long *)g_p_stMemory1[i]->cMemory;
for(j=0;j<((g_p_stMemory0[i]->ulSize)>>2);j++)
{
if(p_b0[j]!=p_b1[j])
{
ucDestBloc=CRB_fn_bDestinationBloc(p_b0[j]);
// fn_vLogAddPointer( i, ucDestBloc );
if(ucDestBloc==(unsigned char)-1)
{
/* Gus: Uncomment this to take care of pointers to unknown blocs.
if(ulLastBadPtr==(j+1))
{
printf("\nptr Possible");
}
// for debug only
g_ulBlocPtrTable[g_ulNbPtr]=g_p_stMemory0[i]->ulBeginBloc+(j<<2);
g_ucBlocPtrDestTable[g_ulNbPtr]=0xff;
g_ulNbPtr++;
// end debug
g_ulNbBadPtr++;
ulLastBadPtr=j;
// printf("\nWarning - A Pointer (Offset=%lx) in Module %ld Bloc %ld point out of Blocs !",j,g_p_stMemory0[i]->ulModuleNumber,g_p_stMemory0[i]->ulBlocNumber);
*/
}
else
{
if( SNA_fn_bSaveThisModuleBlocInFix( g_p_stMemory0[i] ) )
{
if( SNA_fn_bSaveThisModuleBlocInFix( g_p_stMemory0[ucDestBloc] ) )
{
// Pointer from fix to fix: case is already handled by CRB_fn_vBuildPointerTableForFix
j=j;
}
else if( SNA_fn_bSaveThisModuleBlocInLevel( g_p_stMemory0[ucDestBloc] ) )
{
// Pointeur from fix to level
g_ulBlocPtrTable[g_ulNbPtr]=g_p_stMemory0[i]->ulBeginBloc+(j<<2);
g_ucBlocPtrDestTable[g_ulNbPtr]=ucDestBloc;
g_ulNbPtr++;
}
}
else // Pointeur from level to anywhere
{
// Add store of the address of this ptr and the aim bloc.
g_ulBlocPtrTable[g_ulNbPtr]=g_p_stMemory0[i]->ulBeginBloc+(j<<2);
g_ucBlocPtrDestTable[g_ulNbPtr]=ucDestBloc;
g_ulNbPtr++;
/*
if( g_p_stMemory0[ucDestBloc]->ulModuleNumber == C_ucIdOfModuleTmp )
{
// Pointers to block TMP will be set to NULL.
g_ucBlocPtrDestTable[g_ulNbPtr-1]=0xfe;
}
*/
}
}
}
}
if( SNA_fn_bSaveThisModuleBlocInFix( g_p_stMemory0[i] ) )
{
}
else
{
// fn_vLogPointersInfosForOneBlock( i );
CRB_fn_vSavePtrTable (i , hFile);
}
}
// fn_vEndLogPointersInfos();
CRB_fn_vClosePtrTable (hFile);
}
void CRB_fn_vBuildPointerTableForPtr(unsigned long ulNbBloc,char *szFilename, char *szType )
{
unsigned long i,j;
unsigned long *p_b0,*p_b1;
unsigned char ucDestBloc,br=0;
HANDLE hFile;
hFile = CRB_fn_vOpenPtrTable (szFilename , ulNbBloc);
// For stats
// fn_vBeginLogPointersInfosForGlobalPointers( szType );
g_ulNbBadPtr=0;
for(i=0;i<ulNbBloc;i++)
{
g_ulNbPtr=0;
// GuS: Don't compute relocation for empty blocs.
if( g_p_stPtrMemory0[i]->ulSize == 0 ) continue;
p_b0=(unsigned long *)g_p_stPtrMemory0[i]->cMemory;
p_b1=(unsigned long *)g_p_stPtrMemory1[i]->cMemory;
for(j=0;j<((g_p_stPtrMemory0[i]->ulSize)>>2);j++)
{
if(p_b0[j]!=p_b1[j])
{
ucDestBloc=CRB_fn_bDestinationBloc(p_b0[j]);
// fn_vLogAddPointer( i, ucDestBloc );
if(ucDestBloc!=(unsigned char)-1)
{
// Add store of the address of this ptr and the aim bloc.
g_ulBlocPtrTable[g_ulNbPtr]=p_b0[j];
g_ucBlocPtrDestTable[g_ulNbPtr]=ucDestBloc;
g_ulNbPtr++;
}
else
{
// for debug only
// g_ulBlocPtrTable[g_ulNbPtr]=g_p_stMemory0[i]->ulBeginBloc+(j<<2);
// g_ucBlocPtrDestTable[g_ulNbPtr]=0;
// g_ulNbPtr++;
// end debug
g_ulNbBadPtr++;
if(g_ucAvoidAllEntries==0)
{
if(br!=2)
printf("\nWarning - A GlobalPointer (%8ld:%8lx/%8lx) point out of Blocs !",j,p_b0[j],p_b1[j]);
if((j%24==0)&&(br==0))
{
char c;
printf("\nStop On Next Bad Pointer (Y/N/Skip all) :");
c=getch();
c=toupper(c);
if(c=='N')
br=1;
if(c=='S')
br=2;
}
}
}
}
}
// fn_vLogPointersInfosForOneBlock( i );
CRB_fn_vSavePtrTable (i , hFile);
}
// fn_vEndLogPointersInfos();
CRB_fn_vClosePtrTable (hFile);
}
// Build and save relocation table for sound pointers.
// Sound datas require a special function because they contain
// some data that are not pointers but change at each load.
void CRB_fn_vBuildPointerTableForSndPtr(unsigned long ulNbBloc,char *szFilename, char *szType)
{
unsigned long i,j;
char *p_b0,*p_b1;
unsigned char ucDestBloc,ucNotPossible;
HANDLE hFile;
hFile = CRB_fn_vOpenPtrTable (szFilename , ulNbBloc);
// For stats
// fn_vBeginLogPointersInfosForGlobalPointers( szType );
ucNotPossible=1;
g_ulNbBadPtr=0;
for(i=0;i<ulNbBloc;i++)
{
// GuS: Don't compute relocation for empty blocs.
if( g_p_stPtrMemory0[i]->ulSize == 0 ) continue;
g_ulNbPtr=0;
p_b0=(unsigned char *)g_p_stPtrMemory0[i]->cMemory;
p_b1=(unsigned char *)g_p_stPtrMemory1[i]->cMemory;
for(j=4;j<g_p_stPtrMemory0[i]->ulSize;j=j+8)
{
//lDiff=(*(unsigned long *)(p_b1+j))-(*(unsigned long*)(p_b0+j));
ucDestBloc=CRB_fn_bDestinationBloc(*((unsigned long *)(p_b0+j)));
// fn_vLogAddPointer( i, ucDestBloc );
if(ucDestBloc!=(unsigned char)-1)
{
// Add store of the address of this ptr and the aim bloc.
g_ulBlocPtrTable[g_ulNbPtr]=*(unsigned long *)(p_b0+j);
g_ucBlocPtrDestTable[g_ulNbPtr]=ucDestBloc;
g_ulNbPtr++;
}
else
{
g_ulNbBadPtr++;
printf("\nWarning - A SoundPointer (%ld) point out of Blocs !",(j-4)>>3);
}
}
// fn_vLogPointersInfosForOneBlock( i );
CRB_fn_vSavePtrTable (i , hFile);
}
/// fn_vEndLogPointersInfos();
CRB_fn_vClosePtrTable (hFile);
}
// Build correspondance table for bloc number in the 2 SNA files.
void CRB_fn_vTestBlocTable(unsigned long ulNbBloc)
{
unsigned long i,OK;
OK=1;
for(i=0;i<ulNbBloc;i++)
{
if( (g_p_stMemory1[i]->ulBeginBloc - g_p_stMemory0[i]->ulBeginBloc) == 0 )
{
printf("\nFATAL ERROR - Module %d Bloc %d has not moved ! \n Relocation files may be incorrect",g_p_stMemory0[i]->ulModuleNumber,g_p_stMemory0[i]->ulBlocNumber);
OK=0;
}
}
if(OK==0)
{
getchar();
exit(3);
}
}
int main(int argc, char *argv[])
{
char szFilename0[255],szFilename1[255];
char *p_cl;
unsigned char ucFix;
unsigned long ulNbBloc;
// getch();
g_ucAvoidAllEntries=0;
g_bGlideMode=1;
if(argv[2])
{
strcpy(szFilename0,argv[2]);
p_cl=strstr(szFilename0,"-");
if( toupper(*(p_cl+1))=='S' )
g_ucAvoidAllEntries=1;
if (toupper(*(p_cl+1))=='D' )
g_bGlideMode=0;
}
if(argv[3])
{
strcpy(szFilename0,argv[3]);
p_cl=strstr(szFilename0,"-");
if( toupper(*(p_cl+1))=='S' )
g_ucAvoidAllEntries=1;
if (toupper(*(p_cl+1))=='D' )
g_bGlideMode=0;
}
CRB_InitArray();
if( strcmp(_strupr(argv[1]),"FIX") == 0 )
{
// Read blocks from the fix
ulNbBloc=CRB_fn_bReadAllMemoryBlocks( "Fix0.sna", g_p_stMemory0, C_CRB_NEW );
g_ulNbBloc=CRB_fn_bReadAllMemoryBlocks( "Fix1.sna", g_p_stMemory1, C_CRB_NEW );
ucFix = 1;
}
else
{
// Read blocs of the level if we compute relocation for level.
// Those block also contains reloc infos about blocks in the fix.
strcpy(szFilename0,argv[1]);
strcat(szFilename0,"0.sna");
ulNbBloc=CRB_fn_bReadAllMemoryBlocks(szFilename0,g_p_stMemory0,C_CRB_ADD);
strcpy(szFilename1,argv[1]);
strcat(szFilename1,"1.sna");
g_ulNbBloc=CRB_fn_bReadAllMemoryBlocks(szFilename1,g_p_stMemory1,C_CRB_ADD);
ucFix = 0;
}
if(g_ulNbBloc!=ulNbBloc)
{
printf("\nERROR - Incompatible SNA Files, Number of Bloc is Different !");
getchar();
exit(4);
}
// Build correspondance table and write pointer table to disc.
CRB_fn_vTestBlocTable(ulNbBloc);
strcpy(szFilename0,argv[1]);
strcat(szFilename0,".rtb");
if(ucFix==1)
CRB_fn_vBuildPointerTableForFix(ulNbBloc,szFilename0);
else
CRB_fn_vBuildPointerTableForLevel(ulNbBloc,szFilename0);
// Relocation table for global pointers
strcpy(szFilename0,argv[1]);
strcat(szFilename0,"0.gpt");
ulNbBloc=CRB_fn_bReadPtrBlocks(szFilename0,g_p_stPtrMemory0, "Global");
strcpy(szFilename1,argv[1]);
strcat(szFilename1,"1.gpt");
ulNbBloc=CRB_fn_bReadPtrBlocks(szFilename1,g_p_stPtrMemory1, "Global");
strcpy(szFilename0,argv[1]);
strcat(szFilename0,".rtp");
CRB_fn_vBuildPointerTableForPtr(ulNbBloc,szFilename0, "Global");
// Relocation table for Texture pointers
strcpy(szFilename0,argv[1]);
strcat(szFilename0,"0.ptx");
ulNbBloc=CRB_fn_bReadPtrBlocks(szFilename0 ,g_p_stPtrMemory0, "Texture");
strcpy(szFilename0,argv[1]);
strcat(szFilename0,"1.ptx");
ulNbBloc=CRB_fn_bReadPtrBlocks(szFilename0 ,g_p_stPtrMemory1, "Texture");
strcpy(szFilename0,argv[1]);
strcat(szFilename0,".rtt");
CRB_fn_vBuildPointerTableForPtr(ulNbBloc,szFilename0, "Texture");
// Relocation table for sound pointers
strcpy(szFilename0,argv[1]);
strcat(szFilename0,"0.snd");
ulNbBloc=CRB_fn_bReadPtrBlocks(szFilename0,g_p_stPtrMemory0, "Sound" );
strcpy(szFilename1,argv[1]);
strcat(szFilename1,"1.snd");
ulNbBloc=CRB_fn_bReadPtrBlocks(szFilename1,g_p_stPtrMemory1, "Sound" );
strcpy(szFilename0,argv[1]);
strcat(szFilename0,".rts");
CRB_fn_vBuildPointerTableForSndPtr(ulNbBloc,szFilename0, "Sound" );
// Relocation table for vignette pointers
if( ucFix==0 )
{
strcpy(szFilename0,argv[1]);
strcat(szFilename0,"0.vgm");
ulNbBloc=CRB_fn_bReadPtrBlocks(szFilename0,g_p_stPtrMemory0, "Vignette" );
strcpy(szFilename1,argv[1]);
strcat(szFilename1,"1.vgm");
ulNbBloc=CRB_fn_bReadPtrBlocks(szFilename1,g_p_stPtrMemory1, "Vignette" );
if( ulNbBloc > 0 )
{
strcpy(szFilename0,argv[1]);
strcat(szFilename0,".rtv");
CRB_fn_vBuildPointerTableForPtr(ulNbBloc,szFilename0, "Vignette" );
}
}
// MR0912
if(ucFix!=0)
{
strcpy(szFilename0,argv[1]);
strcat(szFilename0,"0.lsy");
ulNbBloc=CRB_fn_bReadPtrBlocks(szFilename0,g_p_stPtrMemory0, "LipsSync" );
strcpy(szFilename1,argv[1]);
strcat(szFilename1,"1.lsy");
ulNbBloc=CRB_fn_bReadPtrBlocks(szFilename1,g_p_stPtrMemory1, "LipsSync" );
if( ulNbBloc > 0 )
{
strcpy(szFilename0,argv[1]);
strcat(szFilename0,".rtl");
CRB_fn_vBuildPointerTableForPtr(ulNbBloc,szFilename0, "LipsSync" );
}
}
printf("\n\nConversion Completed OK !!! \n");
// getch();
/*
if(g_ucAvoidAllEntries==0)
getch();
*/
return 0;
}

View File

@@ -0,0 +1,26 @@
#define C_CRB_NBMAXMODULE 50
#define C_CRB_NBMAXBLOC 100
#define C_CRB_NEW 0
#define C_CRB_ADD 1
typedef struct tdstBloc_
{
unsigned long ulModuleNumber;
unsigned long ulBlocNumber;
unsigned long ulBeginBloc;
unsigned long ulEndBloc;
unsigned long ulFreeSpace;
unsigned long ulMaxSpace;
unsigned long ulSize;
unsigned long * cMemory;
unsigned char ucLocation; // Block in fix, in level, or elsewhere...
} tdstBloc;
extern unsigned long g_ulNbBloc;
extern tdstBloc *g_p_stMemory0[C_CRB_NBMAXBLOC];
extern unsigned long g_ulNbPtr;
unsigned long CRB_fn_bReadAllMemoryBlocks(char *szFilename,struct tdstBloc_** p_stMemory,unsigned char ucMode);
unsigned long CRB_fn_bReadPtrBlocks(char *szFilename ,struct tdstBloc_** p_stMemory, char *szFileTypeName );

View File

@@ -0,0 +1,105 @@
# Microsoft Developer Studio Project File - Name="crb" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=crb - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "crb.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "crb.mak" CFG="crb - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "crb - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "crb - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP Scc_ProjName ""$/cpa/tempgrp/CRB", YRMAAAAA"
# PROP Scc_LocalPath "."
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "crb - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "crb - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "x:\Cpa\Public" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"MSVCRT" /out:"\cpa\exe\main\crb.exe" /pdbtype:sept
# SUBTRACT LINK32 /nodefaultlib
!ENDIF
# Begin Target
# Name "crb - Win32 Release"
# Name "crb - Win32 Debug"
# Begin Group "lib debug"
# PROP Default_Filter "lib"
# Begin Source File
SOURCE=..\..\lib\SNAP5_vd.lib
# End Source File
# End Group
# Begin Source File
SOURCE=.\CRB_Load.c
# End Source File
# Begin Source File
SOURCE=.\CRB_Main.c
# End Source File
# Begin Source File
SOURCE=.\CRB_main.h
# End Source File
# End Target
# End Project

View File

@@ -0,0 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 5.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "crb"=.\crb.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -0,0 +1,5 @@
SCC = This is a Source Code Control file
[crb.dsp]
SCC_Aux_Path = "\\srvprojets-ma\Rayman4_DS\Versions\Rayman4DS\Tools"
SCC_Project_Name = "$/CPA/tempgrp/CRB", GXKAAAAA