/*========================================================================= * Memory.h : Contain the memory's functions. * (based on CAP memory (see Pierrick)) * This is a part of the Game project. * * To use memory, use M_p_GameMalloc and M_GameFree macros * * Version 1.0 * Creation date 30/08/96 * Revision date * * That file needs to be compatible for all platforms. * * (c) Ubi Studios 1996 *=======================================================================*/ /*#define GAM_D_DebugMalloc*/ /*#define GAM_D_DebugStatistic*/ #include "ToolsCPA.h" #include "Structur/ErrGame.h" #include "Structur/MemGame.h" #include "Structur/GameScpt.h" #include "Structur/EngMode.h" #include "Options/ActBlMal.h" #include "LSMem.h" #include "Basic.h" #include "ZeMem.h" /* XB 05/05/99 */ #include "TEX.H" extern void INO_PrintUsedStaticMemory(void); /* End XB 05/05/99 */ #ifdef GAM_USE_SNA #include "sna.h" #endif /* GAM_USE_SNA */ /*XB980825*/ #ifdef U64 extern unsigned long g_ulTotalMemoryUsed; extern unsigned long g_ulTotalMemoryAllocated; #endif /* U64 */ /*End XB*/ /**************************************************************************/ void fn_vFirstInitGameMemory(void) { /**** Check the ACP memory module ****/ Mmg_M_InitMmg(Game); Mmg_fn_cCheckAlignmentValidity(); } /**************************************************************************/ #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC 04/06/99 */ void fn_vLastDesinitGameMemory(void) { } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC 04/06/99 */ /**************************************************************************/ void GAM_fn_vSetGameMemoryInFix(void) { GAM_g_ucHLMMemoryBlock = (unsigned char)E_ucGameFixMemory; } /**************************************************************************/ void GAM_fn_vSetGameMemoryInLevel(void) { GAM_g_ucHLMMemoryBlock = (unsigned char)E_ucGameLevelMemory; } /**************************************************************************/ #if defined (GAM_D_DebugMalloc) /*unsigned long g_ulNumberOfAllocation;*/ #endif /* GAM_D_DebugMalloc */ #define GAM_C_NumberOfSource 200 #if defined(_DEBUG)&&(defined(GAM_D_DebugStatistic)||defined(GAM_D_DebugMalloc)) unsigned long GAM_g_ulNumberOfAllocation = 0; #endif /* _DEBUG&&(GAM_D_DebugStatistic||GAM_D_DebugMalloc) */ #if defined(_DEBUG)&&defined(GAM_D_DebugStatistic) unsigned long GAM_g_ulMaxSources = 0; struct GAM_tdstAllocInformation_ { char szSourceName[_MAX_PATH]; unsigned long ulSourceLine; unsigned short usSourceBloc; unsigned long ulSourceSize; unsigned long ulSourceNumberOfAlloc; unsigned long ulSourceNumberOfRealloc; unsigned long ulSourceNumberOfFree; } GAM_g_a_stAllocInformation[GAM_C_NumberOfSource]; #endif /*_DEBUG&&GAM_D_DebugStatistic*/ void GAM_fn_vMemoryLogFile(void *p_vPointer,unsigned char ucAction,char *szFile,unsigned long ulLine,unsigned long ulSize) { #if defined(_DEBUG)&&(defined(GAM_D_DebugStatistic)||defined(GAM_D_DebugMalloc)) /* static unsigned long GAM_s_ulNumberOfAllocation = 0;*/ unsigned short uwBlocId; void *p_vBeginBloc; #endif /* _DEBUG&&(GAM_D_DebugStatistic||GAM_D_DebugMalloc) */ #if defined(_DEBUG)&&defined(GAM_D_DebugStatistic) unsigned long i; #endif /*_DEBUG&&GAM_D_DebugStatistic*/ #if defined(_DEBUG)&& defined(GAM_D_DebugMalloc) /* static unsigned long AI_s_ulNumberOfAllocation = 0;*/ FILE *p_stFile; char szFileName[30]; #endif /* _DEBUG && GAM_D_DebugMalloc */ #if defined(_DEBUG)&&(defined(GAM_D_DebugStatistic)||defined(GAM_D_DebugMalloc)) Mmg_fn_vWhereIs((void*)p_vPointer,&uwBlocId,&p_vBeginBloc); if (ucAction==GAM_C_ActionMalloc) GAM_g_ulNumberOfAllocation++; else if (ucAction==GAM_C_ActionFree) GAM_g_ulNumberOfAllocation--; #endif /* _DEBUG&&(GAM_D_DebugStatistic||GAM_D_DebugMalloc) */ #if defined(_DEBUG)&&defined(GAM_D_DebugStatistic) for (i=0;i=GAM_C_NumberOfSource) M_GameFatalError(E_uwGameIncreaseNumberOfSource); } if (ucAction==GAM_C_ActionMalloc) { GAM_g_a_stAllocInformation[i].ulSourceSize+=ulSize; GAM_g_a_stAllocInformation[i].ulSourceNumberOfAlloc++; } else if (ucAction==GAM_C_ActionRealloc) { GAM_g_a_stAllocInformation[i].ulSourceSize+=ulSize; GAM_g_a_stAllocInformation[i].ulSourceNumberOfRealloc++; } else if (ucAction==GAM_C_ActionFree) { GAM_g_a_stAllocInformation[i].ulSourceNumberOfFree++; } #endif /*_DEBUG&&GAM_D_DebugStatistic*/ #if defined(_DEBUG)&&defined(GAM_D_DebugMalloc) sprintf(szFileName,"Mem%04x.log",uwBlocId); if ((p_stFile = fopen(szFileName,"rt"))!=NULL) fclose(p_stFile); else GAM_g_ulNumberOfAllocation = 0; p_stFile = fopen(szFileName,"at"); if (p_stFile!=NULL) { if (ucAction==GAM_C_ActionMalloc) fprintf(p_stFile,"Malloc : Number=#%010d, Block=#%04x, Offset=%p (%20s,%10d)\n",GAM_g_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine); else if (ucAction==GAM_C_ActionRealloc) fprintf(p_stFile,"Realloc : Number=#%010d, Block=#%04x, Offset=%p (%20s,%10d)\n",GAM_g_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine); else if (ucAction==GAM_C_ActionFree) fprintf(p_stFile,"Free : Number=#%010d, Block=#%04x, Offset=%p (%20s,%10d)\n",GAM_g_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine); fclose(p_stFile); } #endif /* _DEBUG && GAM_D_DebugMalloc */ } /**************************************************************************/ #ifndef _FIRE_DEADCODE_U64_ int GAM_fn_vMemorySort(const void *elem1, const void *elem2) { #if defined(_DEBUG)&&defined(GAM_D_DebugStatistic) return(((struct GAM_tdstAllocInformation_*)elem2)->ulSourceSize-((struct GAM_tdstAllocInformation_*)elem1)->ulSourceSize); #else return(0); #endif /*_DEBUG&&GAM_D_DebugStatistic*/ } /**************************************************************************/ void GAM_fn_vPrintMemoryInformation(void) { #if defined(_DEBUG)&&defined(GAM_D_DebugStatistic) FILE *p_stFile; unsigned long i; qsort(GAM_g_a_stAllocInformation,GAM_g_ulMaxSources, sizeof(struct GAM_tdstAllocInformation_),GAM_fn_vMemorySort); if ((p_stFile = fopen("GamMemInfo.log","wt"))!=NULL) { for (i=0;iE_ucLastMemoryBlock) { M_GameFatalError(E_uwGameGameMallocBadBlock); } Mmg_M_SetModeAlloc4Ch(Game,(unsigned char)GAM_g_ucHLMMemoryBlock,C_ucMmgDefaultChannel); #if defined(U64) && !defined(FINAL_VERSION) g_ucModuleIdForDebug=2; #endif #if defined(_DEBUG) if (HLM_ucDynamicAlloc||(p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel))==NULL) { if (!HLM_ucDynamicAlloc) { Erm_M_ClearLastError(C_ucErmDefaultChannel); M_GameWarningError(E_uwGameDebugDynamicAllocation); Erm_M_ClearLastError(C_ucErmDefaultChannel); HLM_ucDynamicAlloc = TRUE; } Mmg_M_SetModeAlloc4Ch(Game,E_ucDynamic,C_ucMmgDefaultChannel); if ((p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel))==NULL) { M_GameFatalError(E_uwGameGameMallocAlloc); } } #else /* _DEBUG */ if( (p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel)) == NULL ) M_GameFatalError(E_uwGameGameMallocAlloc); #endif /* _DEBUG */ #if defined(U64) && !defined(FINAL_VERSION) g_ucModuleIdForDebug=0xff; #endif memset(p_vPointer,0,ulSize); return (p_vPointer); } /**************************************************************************/ void fn_vGameFreeInHLM(void *p_vPointer) { #if defined(_DEBUG) struct tdstBlockInfo_ stMyBlockInfo; #endif /* _DEBUG */ if (p_vPointer==NULL) { M_GameInformationError(E_uwGameGameFreeNullPointer); /*ANNECY CT 20/02/98{*/ return; /*ENDANNECY CT}*/ } #if defined(_DEBUG) /* Mmg_fn_vTestMallocIntegrityAt(p_vPointer);*/ #endif /*_DEBUG*/ Mmg_M_SetModeAlloc4Ch(Game,(unsigned char)GAM_g_ucHLMMemoryBlock,C_ucMmgDefaultChannel); #if defined(_DEBUG) Mmg_fn_vGiveInformationBlock(Erm_M_ucGiveModuleId(Game),(unsigned char)GAM_g_ucHLMMemoryBlock,&stMyBlockInfo); if (p_vPointer<(void*)stMyBlockInfo.p_cBeginBlock||p_vPointer>(void*)stMyBlockInfo.p_cEndBlock) Mmg_M_SetModeAlloc4Ch(Game,E_ucDynamic,C_ucMmgDefaultChannel); #endif /* _DEBUG */ Mmg_fn_vFree4Ch(p_vPointer,C_ucMmgDefaultChannel); } /**************************************************************************/ #ifndef _FIRE_DEADCODE_U64_ void fn_vFreeFixAllowedMemory(void) { unsigned char i; for (i=E_ucFirstFixMemoryBlock;i<=E_ucLastFixMemoryBlock;i++) { Mmg_M_FreeBlock(Game,i); Mmg_M_DeleteBlock(Game,i); } GEO_xDeleteMemoryChannel(ACP_FixMemoryChannel); fn_vFreeAIFixMemory(); fn_vDeleteAIFixMemory(); TMP_fn_vFreeFixMemory(); SAI_fn_vDeleteFixMemory(); } #endif /* _FIRE_DEADCODE_U64_ */ /**************************************************************************/ extern void SAI_fn_vFreeLevelMemory(); void fn_vFreeLevelAllowedMemory(void) { unsigned char i; /* XB 22/06/99 */ #ifndef U64 GLI_TEX_vKillMemoryChannel(ACP_LevelMemoryChannel); #endif /* U64 */ /* End XB 22/06/99 */ #if !defined(U64) if (SNA_fn_ucGetLoadType()==SNA_LOAD_SCRIPT) { #endif /* U64 */ for (i=E_ucFirstLevelMemoryBlock;i<=E_ucLastLevelMemoryBlock;i++) { Mmg_M_FreeBlock(Game,i); Mmg_M_DeleteBlock(Game,i); } GEO_xDeleteMemoryChannel(ACP_LevelMemoryChannel); #if defined(U64) GEO_xDeleteMemoryChannel(ACP_U64_LevelMemoryChannel); #endif /* U64 */ fn_vFreeAILevelMemory(); fn_vDeleteAILevelMemory(); /* Free level saved values list and delete SAI level memory block*/ SAI_fn_vDeleteLevelMemory(); #ifdef U64 //XB 21 April 1999 TMP_fn_vFreeLevelMemory(); #endif //End XB #if !defined(U64) } else if( SNA_fn_ucGetLoadType() == SNA_LOAD_SNAPSHOT ) { /* Here, we free the list of saved value for the level WITHOUT deleting SAI level memory block.*/ SAI_fn_vFreeLevelMemory(); } /* else if (SNA_fn_ucGetLoadType()==SNA_LOAD_SNAPSHOT) { for (i=E_ucFirstLevelMemoryBlock;i<=E_ucLastLevelMemoryBlock;i++) { Mmg_M_FreeBlock(Game,i); } Mmg_M_FreeBlock(GEO,2); fn_vFreeAILevelMemory(); } */ #endif /* U64 */ /* MR0310*/ /* else { for (i=E_ucFirstLevelMemoryBlock;i<=E_ucLastLevelMemoryBlock;i++) { if(i%2==1) Mmg_M_DeleteBlock(Game,i); } }*/ GEO_xSelectMemoryChannel(ACP_FixMemoryChannel); AI_fn_vAIUseFixMemory(); GAM_fn_vSetGameMemoryInFix(); } /**************************************************************************/ void fn_vGameTestMemory(void) { /**** Test the integrity of all memory already allocated ****/ Mmg_fn_vTestMalloc(); } /**************************************************************************/ #if !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS) void GAM_PrintUsedStaticMemory(void) { Mmg_M_PrintUsedStaticMemoryInModule(Game); } #endif /* !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS) */ /**************************************************************************/ /*XB*/ #ifdef CHECK_MEMORY void GAM_CheckMemory(void) { Mmg_M_CheckMemory(Game); } #endif /* CHECK_MEMORY */ /*End XB*/ /**************************************************************************/ /* XB 02/06/99 */ #ifndef FINAL_VERSION unsigned long GAM_fn_ulGetUsedStaticMemory(void) { return Mmg_M_GetUsedStaticMemory(Game); } #endif /* FINAL_VERSION */ /* End XB 02/06/99 */ /**************************************************************************/ #if !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS) void GAM_PrintAllUsedStaticMemory(void) { /* MR0310 (anti-bug...)*/ #if !defined(U64) /* if (SNA_fn_ucGetLoadType()!=SNA_LOAD_SNAPSHOT)*/ { AI_PrintUsedStaticMemory(); /*BIN_fn_vPrintUsedStaticMemory();*/ #ifndef U64 FON_PrintUsedStaticMemory(); #endif GAM_PrintUsedStaticMemory(); GEO_PrintUsedStaticMemory(); GLD_PrintUsedStaticMemory(); IPT_PrintUsedStaticMemory(); /* FBF {*/ /* MNU_PrintUsedStaticMemory();*/ /* FBF }*/ POS_fn_vPrintUsedStaticMemory(); RND_PrintUsedStaticMemory(); SAI_PrintUsedStaticMemory(); Scr_PrintUsedStaticMemory(); SND_PrintUsedStaticMemory(); TMP_PrintUsedStaticMemory(); } #else /* U64 */ g_ulTotalMemoryUsed=0; g_ulTotalMemoryAllocated=0; osSyncPrintf(("------------> GAM <------------\n")); GAM_PrintUsedStaticMemory(); osSyncPrintf(("------------> GEO <------------\n")); GEO_PrintUsedStaticMemory(); osSyncPrintf(("------------> AI <------------\n")); AI_PrintUsedStaticMemory(); osSyncPrintf(("------------> INO <------------\n")); INO_PrintUsedStaticMemory(); osSyncPrintf(("------------> IPT <------------\n")); IPT_PrintUsedStaticMemory(); osSyncPrintf(("------------> FON <------------\n")); FON_PrintUsedStaticMemory(); osSyncPrintf(("------------> SAI <------------\n")); SAI_PrintUsedStaticMemory(); osSyncPrintf(("------------> RND <------------\n")); RND_PrintUsedStaticMemory(); osSyncPrintf(("------------> TMP <------------\n")); TMP_PrintUsedStaticMemory(); osSyncPrintf(("------------> SND <------------\n")); SND_PrintUsedStaticMemory(); osSyncPrintf("--> Total = %ld bytes used / %ld bytes allocated (lost %ld bytes)\n", g_ulTotalMemoryUsed, g_ulTotalMemoryAllocated, g_ulTotalMemoryAllocated-g_ulTotalMemoryUsed); LDR_fn_vPrintMemoryMapping(); #endif /*U64 */ } #endif /* !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS) */ /**************************************************************************/ #if !defined(U64) && !defined(RETAIL) /* Modif GuS 08/08/98 : binarisation des scripts.*/ SCR_tde_Anl_ReturnValue fn_eScriptCallBackMemoryDescription(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 int iFirst=0; static void *vTab[50]; static short wNbMalloc=0; _p_stFile=_p_stFile; if ( M_IsTitle ) if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ul_MemoryDescTitle ); if (M_IsEntry) { if (M_ActionIs(C_Entry_GAM_FixMemory)) { Mmg_M_InitBlock(Game,E_ucGameFixMemory,(unsigned long)fn_lAToI(_ap_szParams[0])); GAM_fn_vSetGameMemoryInFix(); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_GAMFixMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_GAM_LevelMemory)) { if((iFirst<2)||(SNA_fn_ucGetLoadType()==SNA_LOAD_SCRIPT)) Mmg_M_InitBlock(Game,E_ucGameLevelMemory,(unsigned long)fn_lAToI(_ap_szParams[0])); if(iFirst>0) GAM_fn_vSetGameMemoryInLevel(); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_GAMLevelMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_FontMemory)) { M_CheckScriptParamNumber(1); FON_fn_vFirstInitFONMemory((unsigned long)fn_lAToI(_ap_szParams[0])); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_FontMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_SAIFixMemory)) { SAI_fn_vInitFixMemory((unsigned long)fn_lAToI(_ap_szParams[0])); SAI_fn_vSAIUseFixMemory(); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_SAIFixMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_SAILevelMemory)) { SAI_fn_vInitLevelMemory((unsigned long)fn_lAToI(_ap_szParams[0])); SAI_fn_vSAIUseLevelMemory(); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_SAILevelMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_TMPFixMemory)) { TMP_fn_vCreateFixMemory((unsigned long)fn_lAToI(_ap_szParams[0])); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_TMPFixMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_AIFixMemory)) { fn_vInitAIFixMemory((unsigned long)fn_lAToI(_ap_szParams[0])); AI_fn_vAIUseFixMemory(); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_AIFixMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_AIMemory)) { if((iFirst<2)||(SNA_fn_ucGetLoadType()==SNA_LOAD_SCRIPT)) fn_vInitAILevelMemory((unsigned long)fn_lAToI(_ap_szParams[0])); AI_fn_vAIUseLevelMemory(); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_AILevelMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_ACPTextMemory)) { GEO_xCreateMemoryChannel(0,(unsigned long)fn_lAToI(_ap_szParams[0])); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_ACPTextMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_ACPFixMemory)) { GEO_xCreateMemoryChannel(ACP_FixMemoryChannel,(unsigned long)fn_lAToI(_ap_szParams[0])); GEO_xSelectMemoryChannel(ACP_FixMemoryChannel); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_ACPFixMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_ACPLevelMemory)) { if((iFirst<2)||(SNA_fn_ucGetLoadType()==SNA_LOAD_SCRIPT)) GEO_xCreateMemoryChannel(ACP_LevelMemoryChannel,(unsigned long)fn_lAToI(_ap_szParams[0])); if(iFirst>0) GEO_xSelectMemoryChannel(ACP_LevelMemoryChannel); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_ACPLevelMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_POSMemory)) { POS_fn_vInitPosMemory((unsigned long)fn_lAToI(_ap_szParams[0])); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_PositionMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } else if (M_ActionIs(C_Entry_ScriptMemory)) { g_SCR_a9MemTable[fn_lAToI(_ap_szParams[0])] = fn_lAToI(_ap_szParams[1]); SCR_fn_v_Mem_InitWithMemLevel(g_SCR_a9MemTable); if ( SNA_M_bTestSaveGameMemDesc() ) { SNA_fn_vWrite2LongEntryToCurrentDscFile ( SNA_C_ul_ScriptMemory, (unsigned long)fn_lAToI(_ap_szParams[0]), (unsigned long)fn_lAToI(_ap_szParams[1]) ); } } #ifdef D_USE_LIPSYNC else if (M_ActionIs(C_Entry_LipsSynchMemory)) /* MR0912*/ { LSY_fn_vFirstInitLSYMemory((unsigned long)fn_lAToI(_ap_szParams[0])); } #endif /* D_USE_LIPSYNC*/ else if (M_ActionIs(C_Entry_IPTMemory)) { IPT_fn_vInitMemory((unsigned long)fn_lAToI(_ap_szParams[0])); if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_IPTMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) ); } /* For BIN*/ else if (M_ActionIs(C_Entry_UseMemorySnapshot)) /* MR0309*/ { /*g_bMemorySnapshot=TRUE;*/ /*SNA_fn_vSetLoadType(SNA_LOAD_SNAPSHOT);*/ SNA_fn_vSetLoadType((unsigned char)fn_lAToI(_ap_szParams[0])); } else if (M_ActionIs("Gap")) /* MR0309*/ { vTab[wNbMalloc]=malloc((unsigned long)atol(_ap_szParams[0])); wNbMalloc++; } /* For BIN End*/ else M_GameInformationError(E_uwGameScriptCallBackDescriptionUnknownAction); } else if ( M_IsEnd ) { int i; for(i=0;i1)&&(SNA_fn_ucGetLoadType()==SNA_LOAD_SNAPSHOT) ) { AI_fn_vAIUseLevelMemory(); GEO_xSelectMemoryChannel(ACP_LevelMemoryChannel); GAM_fn_vSetGameMemoryInLevel(); } if ( SNA_M_bTestSaveGameMemDesc() ) SNA_fn_vWriteNoParamEntryToCurrentDscFile ( SNA_C_ulEndOfDescSection ); } return(eReturnValue); } #endif /* U64 */ /**************************************************************************/