/*=========================================================================
* LoadGls.cpp : This module contain all functions used to load
*               globals variables.
* This is a part of the Game project.
*
* Version              1.0
* Creation date        28/08/96
* Revision date
*
* That file needs to be compatible for all platforms.
*
* (c) Ubi Studios 1996
*=======================================================================*/
#include "ToolsCPA.h"
 
#include "Options/Options.h"
#include "macros.h"
 
#include "Main.h"
 
#include "Actions/AllActs.h"
 
#include "Structur/GameScpt.h"
#include "Structur/ErrGame.h"
#include "Structur/Objects.h"
#include "Structur/MemGame.h"
#include "Structur/EngMode.h"
#include "Structur/Input_s.h"
 
#include "Engine.h"
#include "ZeMem.h"
#include "LoadGame.h"
#include "Input.h"
#include "Basic.h"
#include "GamOpt.h"
#include "LoadBin.h"
 
#include "PlayAnim/Interpol/a3x_mem.h"
 
#include "sna.h"
 
#ifndef U64
extern char g_cCDROM;
extern int g_iComplete;
#endif
extern char g_sLanguage[255];
 
/*-----------------------------------------------------------------------------
*  Description :   Read the script describing all globals variables
*-----------------------------------------------------------------------------
*  Input :         void
*  Output :        void
*-----------------------------------------------------------------------------
*  Creation date : 30/08/96            Author : Francois
*-----------------------------------------------------------------------------
*  Modification date :                 Modification Author :
*  Modifications :
*---------------------------------------------------------------------------*/
/**************************************************************************/
void fn_vLoadGameMemoryScript(void)
{
#ifndef ACTIVE_EDITOR
	char a256_cGameMemoryFile[256];
#endif /* !ACTIVE_EDITOR	*/
	
	SCR_fn_v_Mem_SetCurrentLevel(GAM_C_FixDynamicScriptPriority);
	SCR_fn_v_Mem_SetCurrentLinkLevel(GAM_C_FixDynamicScriptPriority);
	
#ifdef ACTIVE_EDITOR
	SCR_fnp_st_RdL0_AnalyseSection(C_GameMemoryFile, SCR_CDF_uw_Anl_Normal);
#else
	strcpy(a256_cGameMemoryFile,g_a64_cGameDataDirectory);
	strcat(a256_cGameMemoryFile,"\\");
	strcat(a256_cGameMemoryFile, C_GameMemoryFileName);
	SCR_fnp_st_RdL0_AnalyseSection(a256_cGameMemoryFile, SCR_CDF_uw_Anl_Normal);
	   
#endif /* ACTIVE_EDITOR	*/
	
	SCR_fn_v_Mem_SetCurrentLevel(GAM_C_FixScriptPriority);
	SCR_fn_v_Mem_SetCurrentLinkLevel(GAM_C_FixScriptPriority);
}
/**************************************************************************/
void fn_vLoadGameScript(void)
{
#ifndef ACTIVE_EDITOR
	char a256_cFile[256];
#endif /* !ACTIVE_EDITOR	*/
	
	fn_vChangeWindowTitle("Chargement du jeu.");
	
#ifdef ACTIVE_EDITOR
	SCR_fnp_st_RdL0_AnalyseSection(C_GameScriptFile, SCR_CDF_uw_Anl_Normal);
#else
 
	strcpy(a256_cFile,g_a64_cGameDataDirectory);
	strcat(a256_cFile,"\\");
	strcat(a256_cFile, C_GameScriptFileName);
	SCR_fnp_st_RdL0_AnalyseSection(a256_cFile, SCR_CDF_uw_Anl_Normal);	   
 
#endif /* ACTIVE_EDITOR	*/
	
	GAM_fn_vSetEngineInFixMode();
#ifdef ACTIVE_EDITOR
	SCR_fnp_st_RdL0_AnalyseSection(C_GameVignetteFile, SCR_CDF_uw_Anl_Normal);
#else
	strcpy(a256_cFile,g_a64_cGameDataDirectory);
	strcat(a256_cFile,"\\");
	strcat(a256_cFile, C_GameVignetteFileName);
	SCR_fnp_st_RdL0_AnalyseSection(a256_cFile, SCR_CDF_uw_Anl_Normal);	   
#endif /* ACTIVE_EDITOR	*/
	
/*	fn_vGameTestMemory();*/
}
/**************************************************************************/
/* Added 98/08/11 GuS*/
/* Chargement du game.dsc reduit a tout ce qui n'est pas encore binarise.*/
/* Cette fonction est appelee a la place de LoadGameScript lors d'un chargement binaire.*/
/* Cette fonction devrait etre temporaire...*/
void fn_vLoadReducedGameScript(void)
{
	char a256_cFile[256];
    char a256_cSection[256];
 
	fn_vChangeWindowTitle("Chargement du jeu.");
	
	strcpy(a256_cFile,g_a64_cGameDataDirectory);
	strcat(a256_cFile,"\\");
	strcat(a256_cFile, C_GameScriptFileName);
 
	/* In case we load binary dsc without normal binary loading*/
	if ( SNA_fn_ucGetLoadType()!=SNA_LOAD_SNAPSHOT )
	{
		/* Those are handled by SNA binary snapshot method.*/
		sprintf( a256_cSection, "%s^InputDeviceManagerDescription", a256_cFile );
		SCR_fnp_st_RdL0_AnalyseSection(a256_cSection, SCR_CDF_uw_Anl_Normal);
		sprintf( a256_cSection, "%s^Texts", a256_cFile );
		SCR_fnp_st_RdL0_AnalyseSection(a256_cSection, SCR_CDF_uw_Anl_Normal);
	}
 
	/* In case we load binary snapshots without loading binary dsc*/
	if ( SNA_fn_ucGetLoadDscType()!=SNA_C_LoadBinaryDsc )
	{
		/* Those are handled by SNA binary dsc method*/
		sprintf( a256_cSection, "%s^DirectoriesDescription", a256_cFile );
		SCR_fnp_st_RdL0_AnalyseSection(a256_cSection, SCR_CDF_uw_Anl_Normal);
		sprintf( a256_cSection, "%s^RandomManagerDescription", a256_cFile );
		SCR_fnp_st_RdL0_AnalyseSection(a256_cSection, SCR_CDF_uw_Anl_Normal);
		sprintf( a256_cSection, "%s^FirstLevelDescription", a256_cFile );
		SCR_fnp_st_RdL0_AnalyseSection(a256_cSection, SCR_CDF_uw_Anl_Normal);
		sprintf( a256_cSection, "%s^Vignette", a256_cFile );
		SCR_fnp_st_RdL0_AnalyseSection(a256_cSection, SCR_CDF_uw_Anl_Normal);
		sprintf( a256_cSection, "%s^BigFiles", a256_cFile );
		SCR_fnp_st_RdL0_AnalyseSection(a256_cSection, SCR_CDF_uw_Anl_Normal);
		sprintf( a256_cSection, "%s^GameOptionsFile", a256_cFile );
		SCR_fnp_st_RdL0_AnalyseSection(a256_cSection, SCR_CDF_uw_Anl_Normal);
	}
	GAM_fn_vSetEngineInFixMode();
/*	fn_vGameTestMemory();*/
}
/**************************************************************************/
void fn_vLoadGameFixScript(void)
{
#ifndef ACTIVE_EDITOR
	char a256_cFile[256];
#endif /* !ACTIVE_EDITOR	*/
	
	fn_vChangeWindowTitle("Chargement du Fix.");
#ifdef ACTIVE_EDITOR
	VIG_fn_vSaveProgressBarStandardInfo(&VIG_g_stActualVignette,C_GameVignetteFile);
#else
	SCR_fnp_st_RdL0_AnalyseSection(C_GameFixScriptFile, SCR_CDF_uw_Anl_Normal);
	strcpy(a256_cFile,g_a64_cGameDataDirectory);
	strcat(a256_cFile,"\\");
	strcat(a256_cFile, C_GameVignetteFileName);
	VIG_fn_vSaveProgressBarStandardInfo(&VIG_g_stActualVignette,a256_cFile);
#endif /* ACTIVE_EDITOR	*/
	
	VIG_fn_vFreeVignette(&VIG_g_stActualVignette);
	
/*	fn_vGameTestMemory();*/
}
/**************************************************************************/
 
/*-----------------------------------------------------------------------------
*  Description :   Read the script file describing the directories scripts
*-----------------------------------------------------------------------------
*  Input :         ...
*  Output :        void
*-----------------------------------------------------------------------------
*  Creation date : 30/08/96            Author : Francois
*-----------------------------------------------------------------------------
*  Modification date :                 Modification Author :
*  Modifications :
*---------------------------------------------------------------------------*/
SCR_tde_Anl_ReturnValue fn_eScriptCallBackDirectoriesDescription(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action	_eAction)
{
	SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
	char szFileName[_MAX_PATH];
	char szPath[_MAX_PATH];
	static char szInventorDirectory[_MAX_PATH];
    char a256_cDataDirectory[_MAX_PATH];
	
	_p_stFile=_p_stFile;
	
    if ( M_IsTitle )
    {
#ifndef RETAIL
        if ( SNA_M_bTestSaveGameDesc() )
            SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ul_DirectoryDescTitle );
#endif
    }
    else
    {
	if (M_IsEntry)
	{
		if (M_ActionIs("DirectoryOfEngineDLL"))
		{
			fn_vSetEngineDLLPath(_ap_szParams[0]);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfEngineDLL,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfGameData"))
		{
			SCR_fn_v_RdL0_RegisterPath(_ap_szParams[0]);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfGameData,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfTexts"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetTextsDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
			
			sprintf(szPath,"%s\\%s",a256_cDataDirectory,g_sLanguage);
			/*SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);*/
            SCR_fn_v_RdL0_RegisterPath(szPath);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfTexts,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfWorld"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetWorldDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfWorld,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfLevels"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetLevelsDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfLevels,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfFamilies"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetFamiliesDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfFamilies,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfCharacters"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetCharactersDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfCharacters,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfAnimations"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetAnimDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfAnimations,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfGraphicsClasses"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetGraphicsClassesDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfGraphicsClasses,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfGraphicsBanks"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetGraphicsBanksDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfGraphicsBanks,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfMechanics"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetMechanicsDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfMechanics,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfSound"))
		{
// ANNECY MT - 15/02/99 {
			FILE *pFile;
			char szSoundDirectory[255];
			char *p_cSeparator;

			// register GameData Directory
			strcpy(szFileName, g_a64_cGameDataDirectory);
			strcat(szFileName,_ap_szParams[0]);
			fn_vSetSoundDataPath(szFileName);
			SCR_fn_v_RdL0_RegisterPath(szFileName);
			strcat(szFileName,"\\");
			SND_fn_vAddDataDirectory(szFileName);
			sprintf(szPath,"%s%s\\",szFileName,g_sLanguage);
			SND_fn_vAddDataDirectory(szPath);

			// register Specific Directory
			pFile = fopen("SoundVersion.ini","rt");
			if(pFile)
			{
				fgets(szSoundDirectory,255,pFile);
				if(szSoundDirectory[ strlen(szSoundDirectory) - 1] == 0x0a)
					szSoundDirectory[ strlen(szSoundDirectory) - 1] = 0;
				//
				strcpy(szFileName, szSoundDirectory);
				strcat(szFileName,_ap_szParams[0]);
				SCR_fn_v_RdL0_RegisterPath(szFileName);
				strcat(szFileName,"\\");
				SND_fn_vAddDataDirectory(szFileName);
				sprintf(szPath,"%s%s\\",szFileName,g_sLanguage);
				SND_fn_vAddDataDirectory(szPath);
				//
				fclose(pFile);
			}
			else
			{
				pFile = fopen("Version.ini","rt");
				if(pFile)
				{
					fgets(szSoundDirectory,255,pFile);
					p_cSeparator = strchr (szSoundDirectory,',');
					if (p_cSeparator)
					{
						*p_cSeparator = 0;
					}
					else if(szSoundDirectory[ strlen(szSoundDirectory) - 1] == 0x0a)
					{
						szSoundDirectory[ strlen(szSoundDirectory) - 1] = 0;
					}
					//
					strcpy(szFileName, szSoundDirectory);
					strcat(szFileName,_ap_szParams[0]);
					SCR_fn_v_RdL0_RegisterPath(szFileName);
					strcat(szFileName,"\\");
					SND_fn_vAddDataDirectory(szFileName);
					sprintf(szPath,"%s%s\\",szFileName,g_sLanguage);
					SND_fn_vAddDataDirectory(szPath);
					//
					fclose(pFile);
				}
			}
// END ANNECY MT }			
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfSound,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfVisuals"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetVisualMaterialDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
           if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfVisuals,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfEnvironment"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetEnvironmentDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfEnvironment,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfMaterials"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetCollideMaterialDataPath(a256_cDataDirectory);
			fn_vSetSoundMaterialDataPath(a256_cDataDirectory);
			fn_vSetMechanicsMaterialDataPath(a256_cDataDirectory);
			fn_vSetGameMaterialDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfMaterials,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfSaveGame"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetSaveGameDataPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfSaveGame,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfExtras"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetExtrasDataPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfExtras,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfTexture"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetTexturesDataPath(a256_cDataDirectory);
			GLI_vSetPathOfTexture(fn_szGetTexturesDataPath());
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfTexture,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfVignettes"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetVignettesDataPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfVignettes,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfOptions"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetOptionsDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfOptions,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfLipsSync"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
			sprintf(szPath,"%s\\%s",a256_cDataDirectory,g_sLanguage);
			fn_vSetSyncLipsDataPath(szPath);
			SCR_fn_v_RdL0_RegisterPath(szPath);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfLipsSync,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfZdx"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetZdxDataPath(a256_cDataDirectory);
			
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfZdx,
                  _ap_szParams[0]
                );
#endif
		}
		else if (M_ActionIs("DirectoryOfEffects"))
		{
			strcpy(a256_cDataDirectory, g_a64_cGameDataDirectory);
			strcat(a256_cDataDirectory,_ap_szParams[0]);
			fn_vSetEffectsDataPath(a256_cDataDirectory);
			SCR_fn_v_RdL0_RegisterPath(a256_cDataDirectory);
 
#ifndef RETAIL
            if ( SNA_M_bTestSaveGameDesc() )
                SNA_fn_vWriteStringEntryToCurrentDscFile
                ( 
                  SNA_C_ul_DirectoryOfEffects,
                  _ap_szParams[0]
                );
#endif
		}
 }
 else if (M_IsEnd)
 {
#ifndef RETAIL
    if ( SNA_M_bTestSaveGameDesc() )
        SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ulEndOfDescSection );
#endif
 
#ifndef U64
   if (!g_iComplete)
   {
     strcpy( szFileName, fn_szGetGameDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetWorldDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
 
     strcpy( szFileName, fn_szGetTextsDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     sprintf(szFileName,"%s\\%s",szPath,g_sLanguage);
     SCR_fn_v_RdL0_RegisterPath(szFileName);
 
     strcpy( szFileName, fn_szGetFamiliesDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetCharactersDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetLevelsDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetAnimDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetGameMaterialDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetVisualMaterialDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetSoundDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcat(szPath,"\\");
     SND_fn_vAddDataDirectory(szPath);
     sprintf(szFileName,"%s%s",szPath,g_sLanguage);
     SCR_fn_v_RdL0_RegisterPath(szFileName);
     strcat(szFileName,"\\");
     SND_fn_vAddDataDirectory(szFileName);
 
     strcpy( szFileName, fn_szGetGraphicsClassesDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetGraphicsBanksDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetMechanicsDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetEnvironmentDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetOptionsDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetSyncLipsDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     strcpy( szFileName, fn_szGetEffectsDataPath() );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
 
     strcpy( szFileName, szInventorDirectory );
     sprintf(szPath,"%c:\\%s",g_cCDROM,szFileName);
     SCR_fn_v_RdL0_RegisterPath(szPath);
     sprintf(szFileName,"%s\\%s",szPath,g_sLanguage);
     SCR_fn_v_RdL0_RegisterPath(szFileName);
   }
#endif
 }
 }
 return(eReturnValue);
}
 
/*-----------------------------------------------------------------------------
*  Description :   Read the script file describing the input devices manager
*-----------------------------------------------------------------------------
*  Input :         ...
*  Output :        void
*-----------------------------------------------------------------------------
*  Creation date : 10/04/97            Author : Francois
*-----------------------------------------------------------------------------
*  Modification date :                 Modification Author :
*  Modifications :
*---------------------------------------------------------------------------*/
SCR_tde_Anl_ReturnValue fn_eScriptCallBackInputDeviceManagerDescription(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action	_eAction)
{
	SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
	
	_p_stFile=_p_stFile;
	
	if (M_IsEntry)
	{
		if (M_ActionIs(C_Entry_InitInputDeviceManager))
		{
			short wHistSize = (short) fn_lAToI(_ap_szParams[0]) ;
#ifdef USE_IPT_DX5
			IPT_fn_vInitInput ( wHistSize , fn_hGetApplicationInstance ( ) , fn_hGetApplicationWindow ( ) , ( GLD_tdhDevice ) 0 ) ;
#ifndef RETAIL
			if ( SNA_M_bTestSaveGameDesc ( ) )
			{
				SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_InitInputDeviceManager , wHistSize ) ;
			}
#endif /* RETAIL */
#else /* USE_IPT_WIN */
			IPT_fn_vInitInput ( wHistSize , fn_hGetApplicationInstance ( ) , fn_hGetApplicationWindow ( ) ) ;
#endif /* USE_IPT_WIN */
		}
		if (M_ActionIs(C_Entry_AddInputDeviceFile))
			IPT_fn_vReadInputScript(_ap_szParams[0]);
		if (M_ActionIs(C_Entry_Computable))
			IPT_fn_vEndReadInputScript();
	}
	return(eReturnValue);
}
 
/*-----------------------------------------------------------------------------
*  Description :   Read the script file describing the random manager
*-----------------------------------------------------------------------------
*  Input :         ...
*  Output :        void
*-----------------------------------------------------------------------------
*  Creation date : 22/04/97            Author : Francois
*-----------------------------------------------------------------------------
*  Modification date :                 Modification Author :
*  Modifications :
*---------------------------------------------------------------------------*/
SCR_tde_Anl_ReturnValue fn_eScriptCallBackRandomManagerDescription(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action	_eAction)
{
	SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
	
	_p_stFile=_p_stFile;
	
	if (M_IsEntry)
	{
		if (M_ActionIs(C_Entry_InitRandomManager))
		{
			RND_fn_vInitRandom();
			RND_fn_vReadRandomScript(_ap_szParams[0]);
		}
	}
	
	return(eReturnValue);
}
 
/*-----------------------------------------------------------------------------
*  Description :   Read the script file describing the random manager
*-----------------------------------------------------------------------------
*  Input :         ...
*  Output :        void
*-----------------------------------------------------------------------------
*  Creation date : 22/04/97            Author : Francois
*-----------------------------------------------------------------------------
*  Modification date :                 Modification Author :
*  Modifications :
*---------------------------------------------------------------------------*/
SCR_tde_Anl_ReturnValue fn_eScriptCallBackGameOptionsFileDescription(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action	_eAction)
{
	SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
	
	_p_stFile=_p_stFile;
	
	if (M_IsTitle)
	{
/*		if((SNA_fn_ucGetLoadType()==SNA_SAVE_SNAPSHOT))
		{
			g_stEngineStructure.bSkipMainMenu = TRUE;
		}
		else
		{
			g_stEngineStructure.bSkipMainMenu = FALSE;
		}
*/
#ifndef RETAIL
        if ( SNA_M_bTestSaveGameDesc() )
            SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ul_GameOptionDescTitle );
#endif
 
	}
	else if (M_IsEntry)
	{
/*
        if ( SNA_M_bTestSaveGameDesc() )
            SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ul_GameOptionDescTitle );
*/
		/*if (M_ActionIs(C_Entry_CreditsLevel))
		{
			strcpy(g_stEngineStructure.szCreditsLevelName,_ap_szParams[0]);
		}
		else*/
    /*if (M_ActionIs("SkipMainMenu"))
		{
			g_stEngineStructure.bSkipMainMenu = TRUE;
		}*/
		if (M_ActionIs(C_Entry_GameOptionsDefault))
		{
			fn_vSetDefaultGameOptionsFileName(_ap_szParams[0]);
#ifndef RETAIL
	        if ( SNA_M_bTestSaveGameDesc() )
			    SNA_fn_vWriteStringEntryToCurrentDscFile
		        ( 
				  SNA_C_ul_DefaultFile,
				  _ap_szParams[0]
				);
#endif
		}
		else if (M_ActionIs(C_Entry_GameOptionsCurrent))
		{
			fn_vSetCurrentGameOptionsFileName(_ap_szParams[0]);
#ifndef RETAIL
	        if ( SNA_M_bTestSaveGameDesc() )
			    SNA_fn_vWriteStringEntryToCurrentDscFile
		        ( 
				  SNA_C_ul_CurrentFile,
				  _ap_szParams[0]
				);
#endif
		}
		else if (M_ActionIs(C_Entry_FrameSynchro)) 
		{
			/* ON/OFF, NbFrame (0 for hysteresis) and %limit for hysteresis*/
			GLD_vSetFrameSynchro(_ap_szParams[0],_ap_szParams[1],_ap_szParams[2]);
#ifndef RETAIL
	        if ( SNA_M_bTestSaveGameDesc() )
				SNA_fn_vWrite3StringsEntryToCurrentDscFile(SNA_C_ul_FrameSynchro, _ap_szParams[0],_ap_szParams[1],_ap_szParams[2]);
#endif
		}
	}
	else
		 if (M_IsEnd)
			 {
#ifndef RETAIL
					if ( SNA_M_bTestSaveGameDesc() )
						SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ulEndOfDescSection );
#endif
			 }
	return(eReturnValue);
}
 
/*-----------------------------------------------------------------------------
*  Description :   Read the script file describing the size of anim stacks
*-----------------------------------------------------------------------------
*  Creation date : 27/10/98            Author : Carlos Torres
*-----------------------------------------------------------------------------*/
SCR_tde_Anl_ReturnValue fn_eScriptCallBackAnimStacksDescription(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction) {
	SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
	unsigned long ulSize;
	
	if (M_IsEntry) {
		ulSize = atol(_ap_szParams[0]);
 
		if (M_ActionIs(C_Entry_A3dGeneral)) {
			fn_vSetStackSize(eStackA3dGENERAL,ulSize);
		}
		else if (M_ActionIs(C_Entry_Vertexes)) {
			fn_vSetStackSize(eStackVertexes,ulSize);
		}
		else if (M_ActionIs(C_Entry_Quaternions)) {
			fn_vSetStackSize(eStackQuaternions,ulSize);
		}
		else if (M_ActionIs(C_Entry_Hierarchies)) {
			fn_vSetStackSize(eStackHierarchies,ulSize);
		}
		else if (M_ActionIs(C_Entry_NTTO)) {
			fn_vSetStackSize(eStackNTTO,ulSize);
		}
		else if (M_ActionIs(C_Entry_OnlyFrames)) {
			fn_vSetStackSize(eStackOnlyFrames,ulSize);
		}
		else if (M_ActionIs(C_Entry_Channels)) {
			fn_vSetStackSize(eStackChannels,ulSize);
		}
		else if (M_ActionIs(C_Entry_Frames)) {
			fn_vSetStackSize(eStackFrames,ulSize);
		}
		else if (M_ActionIs(C_Entry_FramesKF)) {
			fn_vSetStackSize(eStackFramesKF,ulSize);
		}
		else if (M_ActionIs(C_Entry_KeyFrames)) {
			fn_vSetStackSize(eStackKeyFrames,ulSize);
		}
		else if (M_ActionIs(C_Entry_Events)) {
			fn_vSetStackSize(eStackEvents,ulSize);
		}
		else if (M_ActionIs(C_Entry_MorphData)) {
			fn_vSetStackSize(eStackMorphData,ulSize);
		}
	}
 
	return(eReturnValue);
}
 
/**************************************************************************/
/*
SCR_tde_Anl_ReturnValue fn_eScriptCallBackPreloadSectionInFix(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action	_eAction)
{
	SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
	
	_p_stFile=_p_stFile;
	
	if (M_IsEntry)
	{
		if ((M_ActionIs(C_Entry_PreloadSection))&&(SNA_fn_ucGetLoadType()!=SNA_LOAD_SNAPSHOT))
		{
			SCR_fnp_st_RdL0_AnalyseSection(_ap_szParams[0], SCR_CDF_uw_Anl_Normal);
			SNA_g_stFixInfo.ulNbObject=0;
		}
		else if (M_ActionIs(C_Entry_SecondPassForCharacter)&&(SNA_fn_ucGetLoadType()!=SNA_LOAD_SNAPSHOT))
		{
			static tdstEngineObject *p_stEngineObject = NULL;
			SCR_tdst_Cxt_Values *p_stValues ;
			
			p_stValues = SCR_fnp_st_RdL0_AnalyseSection(_ap_szParams[0], SCR_CDF_uw_Anl_Normal);
			if(p_stValues)
				p_stEngineObject=(tdstEngineObject *)(p_stValues->a_ulValues[0]);
			
			SNA_g_stFixInfo.a20_stObjects[SNA_g_stFixInfo.ulNbObject]=p_stEngineObject;
			SNA_g_stFixInfo.ulNbObject++;
		}
	}
	return(eReturnValue);
}
*/
/**************************************************************************/
/*
 * GuS 98/08/07:  *Attention* si vous modifiez cette fonction et que cela change
 * les traitements lors du chargement du jeu, il faut egalement modifier 
 * le module SNA (SnaNoScr).
 */
SCR_tde_Anl_ReturnValue fn_eScriptCallBackFirstLevel(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action	_eAction)
{
	SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
 
	_p_stFile=_p_stFile;
 
 if (M_IsTitle)
 {
#ifndef RETAIL
	 g_cChooseLevel = -1;
#endif /* !RETAIL */
	 g_stEngineStructure.ucNumberOfLevels = 0;
	 g_stEngineStructure.ucCurrentLevel =(unsigned char) ((_ap_szParams[0] != NULL ) ? atoi( _ap_szParams[0] ) : 0);
 
#ifndef RETAIL
	if ( SNA_M_bTestSaveGameDesc() )
		SNA_fn_vWriteLongEntryToCurrentDscFile 
		 ( 
		  SNA_C_ul_LevelNameTitle,
		  (unsigned char) ((_ap_szParams[0] != NULL ) ? atoi( _ap_szParams[0] ) : 0)
		 );
#endif
 }
 if (M_IsEntry)
 {
  if (M_ActionIs("LevelName"))
  {
   M_CheckScriptParamNumber(1);
   /* CGHT Bin*/
   /*ANNECY TQ 09/04/98{*/
	/*if(SNA_fn_ucGetLoadType()!=SNA_SAVE_SNAPSHOT)*/
  /*ENDANNECY TQ}*/
		if ( !g_cIsLevelOk )
		{
			if ( (g_stEngineStructure.ucNumberOfLevels == g_stEngineStructure.ucCurrentLevel) || (g_stEngineStructure.ucNumberOfLevels == 0) )
				fn_vSetFirstLevelName(_ap_szParams[0]);
		}
		strcpy( g_stEngineStructure.a_szLevelName[ g_stEngineStructure.ucNumberOfLevels++], _ap_szParams[0] );
 
#ifndef RETAIL
		if ( SNA_M_bTestSaveGameDesc() )
			SNA_fn_vWriteStringEntryToCurrentDscFile ( SNA_C_ul_LevelName, _ap_szParams[0] );
 
#endif
  }
 }
	else if ( M_IsEnd )
	{
#ifndef RETAIL
		if ( SNA_M_bTestSaveGameDesc() )
			SNA_fn_vWriteNoParamEntryToCurrentDscFile ( SNA_C_ulEndOfDescSection );
#endif
	}
 
 
 return(eReturnValue);
}
 
/**************************************************************************/
extern void GAM_fn_vReadStringInUbiIniFile( char *_szKey, char *_szID, long _lBufferLength, char *_szBuffer ) ;

SCR_tde_Anl_ReturnValue fn_eScriptCallBackLanguage(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action	_eAction)
{
	SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
	static unsigned char s_ucLanguage ;
	
	_p_stFile = _p_stFile ;
	
	if  ( M_IsTitle )
	{
		if ( g_stEngineStructure . ucNbLanguages )
		{
			M_GameFatalError ( E_uwGameLanguageDefinition ) ;
			return ( eReturnValue ) ;
		}
		g_stEngineStructure . ucNbLanguages = ( unsigned char ) ( ( _ap_szParams [ 0 ] != NULL ) ? atoi ( _ap_szParams [ 0 ] ) : 0 ) ;
		g_stEngineStructure . p_stLanguageTable = M_p_GameMallocInHLM ( g_stEngineStructure . ucNbLanguages * sizeof ( tdstLanguageStructure ) ) ;
		s_ucLanguage = 0 ;
	}
	if ( M_IsEntry )
	{
		if ( M_ActionIs ( C_AddLanguage ) )
		{
			M_CheckScriptParamNumber ( 2 ) ;
			/* ignore the "Common" language definition, useless for PC, but necessary for N64 */
			if ( stricmp ( _ap_szParams[0] , "Common" ) )
			{
				if ( s_ucLanguage < g_stEngineStructure.ucNbLanguages )
				{
					strcpy ( g_stEngineStructure . p_stLanguageTable [ s_ucLanguage ] . szLanguageCode , _ap_szParams [ 0 ] ) ;
					strcpy ( g_stEngineStructure . p_stLanguageTable [ s_ucLanguage ] . szLanguageText , _ap_szParams [ 1 ] ) ;
					s_ucLanguage ++ ;
				}
				else
				{
					M_GameFatalError ( E_uwGameLanguage ) ;
				}
			}
		} 
	}
	if ( M_IsEnd )
	{
		char szBuffer [ _MAX_PATH ] ;
		int j ;
		szBuffer [ 0 ] = 0 ;
		GAM_fn_vReadStringInUbiIniFile ( "RAYMAN2" , "Language" , _MAX_PATH, szBuffer ) ;
		j = 0 ;
		g_stEngineStructure . ucCurrentLanguage = 0 ;
		while ( j < g_stEngineStructure . ucNbLanguages ) 
		{
			if ( stricmp ( szBuffer , g_stEngineStructure . p_stLanguageTable [ j ] . szLanguageCode ) == 0 )
			{
				g_stEngineStructure . ucCurrentLanguage = ( unsigned char ) j ;
				break ;
			}
			j ++ ;
		}
	}
	return eReturnValue ;
}
 
/**************************************************************************/
SCR_tde_Anl_ReturnValue fn_eScriptCallBackAddStringsFiles(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action	_eAction)
{
	SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
	/*unsigned char ucOldACPModeMalloc;*/
	
	_p_stFile=_p_stFile;
	
	if (M_IsEntry)
	{
		if (M_ActionIs(C_EntryAddStringsFile))
		{
			M_CheckScriptParamNumber(1);
			
			/*ucOldACPModeMalloc = GEO_M_ucGetMemMallocMode();*/
			/*GEO_xSelectMemoryChannel(ACP_TextMemoryChannel);*/
			
			SCR_fnp_st_RdL0_AnalyseSection(_ap_szParams[0], SCR_CDF_uw_Anl_Normal);
			/*GEO_xSelectMemoryChannel(ucOldACPModeMalloc);*/
			
/*			fn_vGameTestMemory();*/
		}
		/*		else if (M_ActionIs(C_EntryAddFontFile))
		{
		M_CheckScriptParamNumber(1);
		if(SNA_fn_ucGetLoadType()!=SNA_LOAD_SNAPSHOT)
		SCR_fnp_st_RdL0_AnalyseSection(_ap_szParams[0], SCR_CDF_uw_Anl_Normal);
		fn_vGameTestMemory();
	}*/
	}
	
	return(eReturnValue);
}
/**************************************************************************/
SCR_tde_Anl_ReturnValue fn_eScriptCallBackBigFile(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action	_eAction)
{
	char					a256_cGameMemoryFile[256];
	SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
	
	_p_stFile=_p_stFile;
	
    if ( M_IsTitle )
    {
#ifndef RETAIL
        if ( SNA_M_bTestSaveGameDesc() )
            SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ul_BigFileDescTitle );
#endif
    }
    else
	{
		if (M_IsEntry)
		{
			if (M_ActionIs(C_Entry_BigFileVignettes))
			{
				M_CheckScriptParamNumber(1);
				VIG_fn_vCloseBigFileVignette();
				strcpy(a256_cGameMemoryFile,g_a64_cGameDataDirectory);
				strcat(a256_cGameMemoryFile, _ap_szParams[0]);
				VIG_fn_vOpenBigFileVignette(a256_cGameMemoryFile);
#ifndef RETAIL
	            if ( SNA_M_bTestSaveGameDesc() )
			        SNA_fn_vWriteStringEntryToCurrentDscFile
		            ( 
				      SNA_C_ul_BigFileVignettes,
					  _ap_szParams[0]
					);
#endif
			}
			else if (M_ActionIs(C_Entry_BigFileTextures))
			{
				M_CheckScriptParamNumber(1);
				GLI_fn_vCloseBigFileTextures();
				strcpy(a256_cGameMemoryFile,g_a64_cGameDataDirectory);
				strcat(a256_cGameMemoryFile, _ap_szParams[0]);
				GLI_fn_vOpenBigFileTextures(a256_cGameMemoryFile);
#ifndef RETAIL
	            if ( SNA_M_bTestSaveGameDesc() )
			        SNA_fn_vWriteStringEntryToCurrentDscFile
		            ( 
				      SNA_C_ul_BigFileTextures,
					  _ap_szParams[0]
					);
#endif
			}
		}
		 else 
			 if (M_IsEnd)
			 {
#ifndef RETAIL
					if ( SNA_M_bTestSaveGameDesc() )
						SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ulEndOfDescSection );
#endif
			 }
	}
	
	return(eReturnValue);
}
/**************************************************************************/
void fn_vDeleteAllFixReUsableSections(void)
{
	SCR_fn_v_RdL0_DeleteOpenFile(".dsc",SCR_CDR_c_RdL0_Contains);
	SCR_fn_v_RdL0_DeleteOpenSection(".dsc",SCR_CDR_c_RdL0_Contains);
	SCR_fn_v_RdL0_DeleteOpenFile(".ipt",SCR_CDR_c_RdL0_Contains);
	SCR_fn_v_RdL0_DeleteOpenSection(".ipt",SCR_CDR_c_RdL0_Contains);
	SCR_fn_v_RdL0_DeleteOpenFile(".mnu",SCR_CDR_c_RdL0_Contains);
	SCR_fn_v_RdL0_DeleteOpenSection(".mnu",SCR_CDR_c_RdL0_Contains);
	SCR_fn_v_RdL0_DeleteOpenFile(".rnd",SCR_CDR_c_RdL0_Contains);
	SCR_fn_v_RdL0_DeleteOpenSection(".rnd",SCR_CDR_c_RdL0_Contains);
	SCR_fn_v_RdL0_DeleteOpenFile(".fix",SCR_CDR_c_RdL0_Contains);
	SCR_fn_v_RdL0_DeleteOpenSection(".fix",SCR_CDR_c_RdL0_Contains);
}
/**************************************************************************/
