/*---------------------------------------------------------------------------*/ /* AI_Proto.c : */ /* author : Olivier Didelot.*/ /* date : 30/01/1997*/ /* modify : 04/02/1997 Lint 0 warnings excepted those specified at the end of AIMacros.h*/ /* modify : 25/03/1997 minor changes to avoid non NULL pointers (for editor)*/ /* modify : Olivier Couvreur 23/04/97 MMG + DIR*/ /* modify : Olivier Couvreur 15/05/97 Safe second pass for DsgVar + ReinitAI*/ /*---------------------------------------------------------------------------*/ /*#define AI_D_DebugMalloc*/ #include "AIUseCPA.h" #include "AI_Mmg.h" #include "specif/AIOption.h" #include "AIMacros.h" #include "AI_Erm.h" #include "StrIntel.h" #include "Intell.h" #include "Action.h" #include "Operator.h" #include "Cond.h" #include "KeyWord.h" #include "Procedur.h" #include "Function.h" #include "Fields.h" #include "Convert.h" #include "AI_Struc.h" #define __DeclareGlobalVariableAIProto_h__ #include "AI_Proto.h" #undef __DeclareGlobalVariableAIProto_h__ #include "ReadRule.h" #include "DsgMem.h" #define __DeclareGlobalVariableSafe_h__ #include "safe.h" /*BART*/ #undef __DeclareGlobalVariableSafe_h__ #ifdef ACTIVE_AIDEBUG /*** DR ***/ #include "AID_Erm.h" #include "AID_Main.h" #include "specif/AID_Trac.h" #endif #ifdef U64 /*AR980625*/ /* LOL*/ #include "GLD/Specif/DisplMsg.h" #else /* MT300399 */ #include "SNA.h" #include "GAM/Specif/Demos.h" #include "PTC.h" #endif /*ANNECY CHRISTOPHE MODIFICATIONS CF XAVIER*/ #if defined(ACTIVE_EDITOR) SCR_tdst_Link_Table *AI_fn_p_stGetDsgVarLinkTable(void) { return &(g_stDefinesLinkTable); } #endif /* ACTIVE_EDITOR */ /*ANNECY END CHRISTOPHE MODIFICATIONS CF XAVIER*/ #ifdef ACTIVE_EDITOR extern "C" ACP_tdxBool g_bUseSAIWithEditor; #endif /* ACTIVE_EDITOR */ #if defined(ACTIVE_EDITOR) /* To activate 2nd pass checking*/ #define ACTIVE_2NDPASS_CHECKING #if defined(ACTIVE_2NDPASS_CHECKING) /*#pragma message("ACTIVE_2NDPASS_CHECKING is defined ==> editor will run automaticaly if an error occured in AI while loading")*/ #endif #endif #if defined(AI_USE_SCRIPT) #define M_GetLinkValueWithKey(lKey) SCR_M_ul_Link_GetValue( ((SCR_tdst_Link_Value *) (lKey)) ) #define M_GetComportLinkValueWithKey(lKey) \ ((SCR_M_e_Link_GetState((SCR_tdst_Link_Value *) (lKey) ) != SCR_ELS_Link_NotInitialized) ? \ fn_ulGetComportLinkValueWithKey((SCR_tdst_Link_Value *)(lKey)) : 0) #endif /* AI_USE_SCRIPT */ #if defined(__DEBUG_AI__) || defined(ACTIVE_2NDPASS_CHECKING) char szForErrorStringAt2ndPass[256]; #endif #if defined(AI_USE_SCRIPT) #if defined(ACTIVE_2NDPASS_CHECKING) #define M_TestLinkTableValue(p_stMind,lKey,szStr) \ if (SCR_M_e_Link_GetState((SCR_tdst_Link_Value *) (lKey) ) == SCR_ELS_Link_NotInitialized) \ { \ sprintf(szForErrorStringAt2ndPass,"%s in %s",szStr,AI_M_szGetPersoName((p_stMind))); \ M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningReferenceNotLoaded,C_ucErmOpenInfoWindow, szForErrorStringAt2ndPass); \ AI_M_ucErrorFlag((p_stMind))=1; \ fn_vForceEditor(); \ } #elif defined(__DEBUG_AI__) #define M_TestLinkTableValue(p_stMind,lKey,szStr) \ if (SCR_M_e_Link_GetState((SCR_tdst_Link_Value *) (lKey) ) == SCR_ELS_Link_NotInitialized) \ { \ sprintf(szForErrorStringAt2ndPass,"%s in %s",szStr,AI_M_szGetPersoName((p_stMind))); \ M_AIFatalErrorMsg(E_uwAIFatalReferenceNotLoaded, szForErrorStringAt2ndPass); \ } #else #define M_TestLinkTableValue(p_stMind,lKey,szStr) #endif /* ACTIVE_2NDPASS_CHECKING */ #endif /* AI_USE_SCRIPT */ #define _WP_D_DEFINE_WAYPOINTS_ #include "WP_Func.h" #undef _WP_D_DEFINE_WAYPOINTS_ #if defined(__DEBUG_AI__) #define AI_LOGFILE #endif #if defined(AI_LOGFILE) #include FILE *fpAILogFile=NULL; #define AI_ANIM_LOGFILE "AI_ANIM.LOG" FILE *fpAIUnusedComportLogFile=NULL; #define AI_UNUSEDCOMPORT_LOGFILE "AI_UnusedComport.LOG" #endif #if defined(AI_USE_SCRIPT) unsigned long fn_ulGetComportLinkValueWithKey(SCR_tdst_Link_Value *p_stLinkValue) { /* Give the value 1 to long1.*/ SCR_M_v_Link_SetAdditionalLong(p_stLinkValue, 4, 1); return SCR_M_ul_Link_GetValue(p_stLinkValue); } #endif /* AI_USE_SCRIPT */ void fn_vTestUnusedComport() { #if defined(AI_LOGFILE) unsigned int uiPos = 0, i=0; SCR_tdst_Link_Value *p_stLinkValue = NULL; /* Get first element of array */ SCR_M_DyAr_GetNextElement(SCR_tdst_Link_Value, uiPos, p_stLinkValue, SCR_M_st_Link_GetDynamicArray(&g_stComportLinkTable)); while (p_stLinkValue != NULL) /* p_sValue is NULL at the end of the array */ { /* Test current retrieved value */ if (SCR_M_e_Link_GetState(p_stLinkValue) == SCR_ELS_Link_Initialized) { if (SCR_M_ul_Link_GetAdditionalLong(p_stLinkValue, 4) == 0) { if (fpAIUnusedComportLogFile) { fprintf(fpAIUnusedComportLogFile,"%s\n",SCR_M_p_sz_Link_GetKey(p_stLinkValue)); } } } /* Get next element */ uiPos++; SCR_M_DyAr_GetNextElement(SCR_tdst_Link_Value, uiPos, p_stLinkValue, SCR_M_st_Link_GetDynamicArray(&g_stComportLinkTable)); } if (fpAIUnusedComportLogFile) { fclose(fpAIUnusedComportLogFile); fpAIUnusedComportLogFile=NULL; } #endif /* AI_LOGFILE*/ } /* to delete later : not used*/ #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void fn_vReinitComportMind(AI_tdxHandleToMind p_stMind) { fn_vReinitComport(AI_M_p_stGetIntelligence(p_stMind)); fn_vReinitComport(AI_M_p_stGetReflex(p_stMind)); } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ unsigned long AI_ulSizeOfMind() { return(sizeof(AI_tdstMind)); } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ AI_tdstMind *fn_pstAllocMind(void) { AI_tdstMind *p_stMind=NULL; MMG_fn_vAddMemoryInfo (MMG_C_lTypeAI , MMG_C_lSubTypeMind , NULL); M_AIAlloc(p_stMind, AI_tdstMind *, sizeof(AI_tdstMind)); /* to be sure (for editor)*/ AI_M_SetAIModel(p_stMind,NULL); AI_M_SetIntelligence(p_stMind,NULL); AI_M_SetReflex(p_stMind,NULL); AI_M_SetDsgMem(p_stMind,NULL); #if defined(ACTIVE_EDITOR) AI_M_ucErrorFlag(p_stMind)=0; #endif AI_M_SetDoingIntel(p_stMind, 0); #if defined(ACTIVE_EXEC_CHECKING) && defined(ACTIVE_EDITOR) fn_vReSetStopAIEngineFlag(); #endif #ifdef ACTIVE_AIDEBUG /*** DR to initialize the trace ***/ /* Oliv' - use accessors instead of direct member - 25/11/1998*/ /* p_stMind->p_stTrace=NULL;*/ AI_M_SetTrace( p_stMind, NULL ); /* EndOfOliv'*/ AIDebug_M_InitTrace( p_stMind ); AIDebug_M_InitBuffer( p_stMind ); #endif //XB 05/08/99 #ifndef D_THROW_CFAST_AI //End XB p_stMind->CFast_lCmpMetaAction = 0; p_stMind->CFast_lRfxMetaAction = 0; p_stMind->CFast_lCmpMetaActionForMacro = 0; p_stMind->CFast_lRfxMetaActionForMacro = 0; //XB 05/08/99 #endif /* D_THROW_CFAST_AI */ //End XB return p_stMind; } void fn_vFirstInitAIMemory() { Erm_M_InitErrMsg(AI); Mmg_M_InitMmg(AI); #if defined(AI_LOGFILE) remove(AI_ANIM_LOGFILE); fpAILogFile=NULL; remove(AI_UNUSEDCOMPORT_LOGFILE); fpAIUnusedComportLogFile=NULL; #endif } void fn_vInitAIFixMemory(unsigned long ulSize) { #ifdef MODE_STATIC_MEM_FOR_AI #if !defined(U64) Mmg_M_InitSpecificBlock(AI, E_ucAIBlockFix, ulSize, C_ulDefaultMaxNbStaticMalloc, 4, C_BlockWithFreeFlag | C_Check_AlignementFlag | C_Check_OverflowFlag); #else /* !U64 */ #ifdef CHECK_MEMORY Mmg_M_InitSpecificBlock(AI, E_ucAIBlockFix, ulSize, C_ulDefaultMaxNbStaticMalloc, 4, C_BlockWithFreeFlag | C_Check_AlignementFlag | C_Check_OverflowFlag); #else /* CHECK_MEMORY */ Mmg_M_InitSpecificBlock(AI, E_ucAIBlockFix, ulSize, C_ulDefaultMaxNbStaticMalloc, 4, C_BlockWithoutFreeFlag | C_Check_AlignementFlag | C_Check_OverflowFlag); #endif /* CHECK_MEMORY */ #endif /* !U64 */ #endif /* MODE_STATIC_MEM_FOR_AI*/ } void fn_vInitAILevelMemory(unsigned long ulSize) { #ifdef MODE_STATIC_MEM_FOR_AI #if !defined(U64) Mmg_M_InitSpecificBlock(AI, E_ucAIBlockLevel, ulSize, C_ulDefaultMaxNbStaticMalloc, 4, C_BlockWithFreeFlag | C_Check_AlignementFlag | C_Check_OverflowFlag); #else /* !U64 */ #ifdef CHECK_MEMORY Mmg_M_InitSpecificBlock(AI, E_ucAIBlockLevel, ulSize, C_ulDefaultMaxNbStaticMalloc, 4, C_BlockWithFreeFlag | C_Check_AlignementFlag | C_Check_OverflowFlag); #else /* CHECK_MEMORY */ Mmg_M_InitSpecificBlock(AI, E_ucAIBlockLevel, ulSize, C_ulDefaultMaxNbStaticMalloc, 4, C_BlockWithoutFreeFlag | C_Check_AlignementFlag | C_Check_OverflowFlag); #endif /* CHECK_MEMORY */ #endif /* !U64 */ #endif /* MODE_STATIC_MEM_FOR_AI*/ } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void fn_vFreeAIFixMemory(void) { #ifdef MODE_STATIC_MEM_FOR_AI Mmg_M_FreeBlock(AI, E_ucAIBlockFix); #endif /* MODE_STATIC_MEM_FOR_AI*/ } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ void fn_vFreeAILevelMemory(void) { #ifdef MODE_STATIC_MEM_FOR_AI Mmg_M_FreeBlock(AI, E_ucAIBlockLevel); #endif /* MODE_STATIC_MEM_FOR_AI*/ } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void fn_vDeleteAIFixMemory(void) { #ifdef MODE_STATIC_MEM_FOR_AI Mmg_M_DeleteBlock(AI, E_ucAIBlockFix); #endif /* MODE_STATIC_MEM_FOR_AI*/ } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ void fn_vDeleteAILevelMemory(void) { #ifdef MODE_STATIC_MEM_FOR_AI Mmg_M_DeleteBlock(AI, E_ucAIBlockLevel); #endif /* MODE_STATIC_MEM_FOR_AI*/ } #if !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS) void AI_PrintUsedStaticMemory(void) { Mmg_M_PrintUsedStaticMemoryInModule(AI); } #endif /* !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS) */ /**************************************************************************/ /*XB*/ #ifdef CHECK_MEMORY void AI_CheckMemory(void) { Mmg_M_CheckMemory(AI); } #endif /* CHECK_MEMORY */ /*End XB*/ /**************************************************************************/ /* XB 02/06/99 */ #ifndef FINAL_VERSION unsigned long AI_fn_ulGetUsedStaticMemory(void) { return Mmg_M_GetUsedStaticMemory(AI); } #endif /* FINAL_VERSION */ /* End XB 02/06/99 */ /*************************************** * Set the memory block used by the AI * ***************************************/ void AI_fn_vAIUseFixMemory(void) { AI_g_ucMemoryBlockUsed = E_ucAIBlockFix; } void AI_fn_vAIUseLevelMemory(void) { AI_g_ucMemoryBlockUsed = E_ucAIBlockLevel; } unsigned char AI_g_ucDynamicAlloc = FALSE; void *AI_fn_p_vTrueAlloc(unsigned long ulSize) { void *p_vPointer = NULL; M_AIChooseMemoryBlock(); #if defined(U64) && !defined(FINAL_VERSION) g_ucModuleIdForDebug=1; #endif if (AI_g_ucDynamicAlloc||(p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel))==NULL) { #if defined(_DEBUG) if (!AI_g_ucDynamicAlloc) { Erm_M_ClearLastError(C_ucErmDefaultChannel); M_AIWarningError(E_uwAIDebugDynamicAllocation,C_ucErmOpenInfoWindow); Erm_M_ClearLastError(C_ucErmDefaultChannel); AI_g_ucDynamicAlloc = TRUE; } Mmg_M_SetModeAlloc4Ch(AI,E_ucDynamic,C_ucMmgDefaultChannel); p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel); #endif /* _DEBUG */ } memset(p_vPointer,0,ulSize); #if defined(U64) && !defined(FINAL_VERSION) g_ucModuleIdForDebug=0xff; #endif return (p_vPointer); } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void *AI_fn_p_vTrueRealloc(void *p_vOldPointer,unsigned long ulSize) { void *p_vPointer = NULL; M_AIChooseMemoryBlock(); if (AI_g_ucDynamicAlloc||(p_vPointer = Mmg_fn_p_vRealloc4Ch(p_vOldPointer,ulSize,C_ucMmgDefaultChannel))==NULL) { #if defined(_DEBUG) if (!AI_g_ucDynamicAlloc) { Erm_M_ClearLastError(C_ucErmDefaultChannel); M_AIWarningError(E_uwAIDebugDynamicAllocation,C_ucErmOpenInfoWindow); Erm_M_ClearLastError(C_ucErmDefaultChannel); AI_g_ucDynamicAlloc = TRUE; } Mmg_M_SetModeAlloc4Ch(AI,E_ucDynamic,C_ucMmgDefaultChannel); p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel); memcpy(p_vPointer,p_vOldPointer,ulSize); AI_fn_vTrueFree(p_vOldPointer); #endif /* _DEBUG */ } return (p_vPointer); } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void AI_fn_vTrueFree(void *p_vPointer) { #if defined(_DEBUG) unsigned short uwBlocId; void *p_vBeginBloc; #endif /* _DEBUG */ #if defined(_DEBUG) /* Mmg_fn_vTestMallocIntegrityAt(p_vPointer);*/ #endif /*_DEBUG*/ M_AIChooseMemoryBlock(); #if defined(_DEBUG) Mmg_fn_vWhereIs((void*)p_vPointer,&uwBlocId,&p_vBeginBloc); if (uwBlocId==0xffff) Mmg_M_SetModeAlloc4Ch(AI,E_ucDynamic,C_ucMmgDefaultChannel); else Mmg_M_SetModeAlloc4Ch(AI,uwBlocId&0x00ff,C_ucMmgDefaultChannel); #endif /* _DEBUG */ Mmg_fn_vFree4Ch(p_vPointer,C_ucMmgDefaultChannel); } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC - Oliv' */ void AI_fn_vMemoryLogFile(void *p_vPointer,unsigned char ucAction,char *szFile,unsigned long ulLine) { #if defined(_DEBUG)&& defined(AI_D_DebugMalloc) static unsigned long AI_s_ulNumberOfAllocation = 0; FILE *p_stFile; char szFileName[30]; unsigned short uwBlocId; void *p_vBeginBloc; Mmg_fn_vWhereIs((void*)p_vPointer,&uwBlocId,&p_vBeginBloc); sprintf(szFileName,"Mem%04x.log",uwBlocId); if ((p_stFile = fopen(szFileName,"rt"))!=NULL) fclose(p_stFile); else AI_s_ulNumberOfAllocation = 0; p_stFile = fopen(szFileName,"at"); if (p_stFile!=NULL) { if (ucAction==AI_C_ActionMalloc) { AI_s_ulNumberOfAllocation++; fprintf(p_stFile,"Malloc : Number=#%010d, Block=#%04x, Offset=%p (%20s,%10d)\n",AI_s_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine); } if (ucAction==AI_C_ActionRealloc) { fprintf(p_stFile,"Realloc : Number=#%010d, Block=#%04x, Offset=%p (%20s,%10d)\n",AI_s_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine); } else if (ucAction==AI_C_ActionFree) { AI_s_ulNumberOfAllocation--; fprintf(p_stFile,"Free : Number=#%010d, Block=#%04x, Offset=%p (%20s,%10d)\n",AI_s_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine); } fclose(p_stFile); } #endif /* _DEBUG && AI_D_DebugMalloc */ } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC - Oliv' */ void fn_vInitAI(ACP_tdxBool _bLoadSnapShot) { /* init function pointers tables*/ #if !defined(OPTIMIZED_COMMAND) fn_vInitFieldEntries(); fn_vInitOperatorEntries(); fn_vInitMetaActionEntries(); fn_vInitProcedureEntries(); fn_vInitConditionEntries(); fn_vInitFunctionEntries(); fn_vInitKeyWordEntries(); #endif #ifdef ACTIVE_AIDEBUG /*** DR ***/ AIDebug_fnv_InitMain(); #endif /*ACTIVE_AIDEBUG*/ /* Blocking action management*/ g_ucNewActionReturn = C_ACTION_ENGINE_NOTDEFINED; /* to set the action type using the script*/ g_ucUseDefaultActionReturn = TRUE;/* the g_ucNewActionReturn is not taking into account*/ #if defined(AI_USE_SCRIPT) SCR_fn_v_Link_InitTable(&g_stMacroLinkTable); SCR_fn_v_Link_InitTable(&g_stComportLinkTable); SCR_fn_v_Link_InitTable(&g_stModelLinkTable); SCR_fn_v_Link_InitTable(&g_stDsgVarLinkTable); SCR_fn_v_Link_InitTable(&g_stDefinesLinkTable); #endif /* AI_USE_SCRIPT */ if (!_bLoadSnapShot) fn_vReadAIDefines(C_DefineAIFiles); } /*---------------------------------------------------------------------------*/ /* Moteur d'intelligence du Perso.*/ /*---------------------------------------------------------------------------*/ ACP_tdxBool fn_bDoIntelligencePerso(HIE_tdxHandleToSuperObject p_SuperObjPerso) { AI_tdstMind *p_stPerso = AI_M_stGetMindOfSuperObj(p_SuperObjPerso); AI_M_SetDoingIntel(p_stPerso, 1); /* to avoid problems*/ if (AI_M_p_stGetIntelligence(p_stPerso)!=NULL) { #ifdef ACTIVE_AIDEBUG /*** DR ***/ if ( AI_M_p_stGetReflex(p_stPerso) == NULL ) /*for mind with intelligence but no reflex*/ { #ifndef U64_AIDEBUG AIDebug_M_EnterEngineLoop( p_stPerso ); #else AIDebug_M_EnterEngineLoop( p_SuperObjPerso ); #endif /* U64_AIDEBUG */ } AIDebug_M_SetReflexOrAI( p_stPerso, AI_M_bGetDoingIntel(p_stPerso) ); #endif /*ACTIVE_AIDEBUG*/ return fn_bIntelligenceEngine(p_SuperObjPerso, AI_M_p_stGetIntelligence(p_stPerso)); } else return FALSE; } /*---------------------------------------------------------------------------*/ /* Moteur de reflexe du Perso.*/ /*---------------------------------------------------------------------------*/ ACP_tdxBool fn_bDoReflexPerso(HIE_tdxHandleToSuperObject p_SuperObjPerso) { AI_tdstMind *p_stPerso = AI_M_stGetMindOfSuperObj(p_SuperObjPerso); AI_M_SetDoingIntel(p_stPerso, 0); /* to avoid problems*/ if (AI_M_p_stGetReflex(p_stPerso)!=NULL) { #ifdef ACTIVE_AIDEBUG /*** DR ***/ #ifndef U64_AIDEBUG AIDebug_M_EnterEngineLoop( p_stPerso ); #else AIDebug_M_EnterEngineLoop( p_SuperObjPerso ); #endif /* U64_AIDEBUG */ AIDebug_M_SetReflexOrAI( p_stPerso, AI_M_bGetDoingIntel(p_stPerso) ); #endif /*ACTIVE_AIDEBUG*/ return fn_bIntelligenceEngine(p_SuperObjPerso, AI_M_p_stGetReflex(p_stPerso)); } else return FALSE; } #if defined(AI_USE_SCRIPT) void fn_vSecondPassOfTree(AI_tdxHandleToMind p_stMind,tdstTreeInterpret *p_stTree) { unsigned short i; tdstNodeInterpret *p_stNode; long lKey; #if !defined(__DEBUG_AI__) p_stMind=p_stMind; #endif if (p_stTree != NULL) { for (i = 0; i < M_GetNbNodeInterpret(p_stTree); i++) { p_stNode = M_GetNodeInterpretN(p_stTree, i); lKey=M_lKeyLinkInterpret(p_stNode); switch (M_GetTypeInterpret(p_stNode)) { case E_ti_MacroRef: M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_p_stMacroInterpret(p_stNode) = (tdstMacro*) (M_GetLinkValueWithKey(lKey)); break; case E_ti_ModelRef: M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_p_stModelInterpret(p_stNode) = (AI_tdstAIModel*) (M_GetLinkValueWithKey(lKey)); break; case E_ti_DsgVar: M_SetTypeInterpret(p_stNode,E_ti_DsgVarRef); break; case E_ti_DsgVarRef: M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_lValueInterpret(p_stNode) = (long) (M_GetLinkValueWithKey(lKey)); break; case E_ti_SuperObjectRef: M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_SuperObjectInterpret(p_stNode) = (HIE_tdxHandleToSuperObject)(M_GetLinkValueWithKey(lKey)); break; case E_ti_PersoRef: { struct tdstEngineObject_ *p_stEngineObject; M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); p_stEngineObject = M_p_stPersoRefInterpret(p_stNode) = (tdstEngineObject *)(M_GetLinkValueWithKey(lKey)); #if defined (ACTIVE_EDITOR) /* if the reference is on an always */ if ( p_stEngineObject && (p_stEngineObject != (void *)0x12345678) && fn_ucIsAnAlwaysObject(p_stEngineObject) ) { /* look for the corresponding entry in the always table and mark it referenced */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ unsigned long i; ALW_tdxHandleToModelList h_AlwaysModelChild; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ LST2_M_DynamicForEachElementOf(&(g_stAlways.ALW_h_LstAlwaysModel),h_AlwaysModelChild,i) { if ( M_ObjectGetPersonalType(p_stEngineObject) == M_ObjectGetPersonalType(h_AlwaysModelChild->p_stAlwaysObject)) { g_stAlways.d_bIsReferencedInLevel[i] = TRUE; break; } } } #endif /* ACTIVE_EDITOR */ } break; case E_ti_ModuleRef: M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_lModuleInterpret(p_stNode) = (long)(M_GetLinkValueWithKey(lKey)); break; case E_ti_ActionRef: #if defined(AI_LOGFILE) if (fpAILogFile) { #ifdef _DEBUG_STRING_FOR_PLA_ if (SCR_M_e_Link_GetState((SCR_tdst_Link_Value *) (lKey) ) != SCR_ELS_Link_NotInitialized) { tdxHandleToState h_State =(tdxHandleToState) (M_GetLinkValueWithKey(lKey)); tdstAnim3d *p_stAnim=fn_p_stGetAnimInState(h_State); fprintf(fpAILogFile,"%s : %s\n",p_stAnim->szAnimName,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); } #endif } #endif M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_ActionInterpret(p_stNode) = (tdxHandleToState)(M_GetLinkValueWithKey(lKey)); break; case E_ti_ComportRef: M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_ComportInterpret(p_stNode) = (tdstComport *)(M_GetComportLinkValueWithKey(lKey)); break; case E_ti_WayPointRef: M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_lWayPointInterpret(p_stNode) = (WP_tdhWayPoint)(M_GetLinkValueWithKey(lKey)); break; case E_ti_ObjectTableRef: M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_lModuleInterpret(p_stNode) = (long)(M_GetLinkValueWithKey(lKey)); break; case E_ti_GameMaterialRef: M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_GameMaterialInterpret(p_stNode) = (GMT_tdxHandleToGameMaterial)(M_GetLinkValueWithKey(lKey)); #ifndef U64 DEMO_fn_vPutGMTInList ((GMT_tdxHandleToGameMaterial)(M_GetLinkValueWithKey(lKey))); #endif break; /* ANNECY MT - 25/09/98 {*/ case E_ti_Graph: M_TestLinkTableValue(p_stMind,lKey,SCR_M_p_sz_Link_GetKey((SCR_tdst_Link_Value *) (lKey))); M_p_stGraphInterpret(p_stNode) = (WP_tdHandleOfGraph)(M_GetLinkValueWithKey(lKey)); break; /* END ANNECY MT }*/ } } } } void CFast_vInitStaticTree ( struct tdstNodeInterpret_ *, long, struct tdstNodeInterpret_ * ) ; void fn_vSecondPassOfScriptAI(AI_tdxHandleToMind p_stMind,tdstScriptAI *p_stScriptAI) { unsigned long i; unsigned char j; tdstComport *p_stComport; /* Loop on comport.*/ for (i = 0; i < M_GetScriptAINbComport(p_stScriptAI); i++) { p_stComport = M_GetScriptAIComportN(p_stScriptAI, i); /* Second pass on Schedule.*/ fn_vSecondPassOfTree(p_stMind,M_GetComportSchedule(p_stComport)); /* Second pass on Rules.*/ for (j = 0; j < M_GetComportNbRules(p_stComport); j++) { fn_vSecondPassOfTree(p_stMind,M_GetComportRuleN(p_stComport, j)); } } /* CFAST : init reference */ CFast_vInitStaticTree ( p_stMind->p_stAIModel->CFast_dst_ParamArray, p_stMind->p_stAIModel->uwNbParamNode, p_stMind->p_stAIModel->CFast_dst_RefTreeArray) ; } #endif /* AI_USE_SCRIPT */ void fn_vReinitDesignerVariablesWithFlags(AI_tdxHandleToMind p_stMind,tdeObjectTreeInit eObjIniType) { if (p_stMind!=NULL) { /* if designer variable*/ if (M_GetDsgMem(p_stMind)!=NULL) { char *ptrSrc=NULL; char *ptrDst=M_GetDsgMemBuffer(p_stMind); unsigned char ucVarId; /* reinit current values*/ if (M_GetDsgMemBufferInit(p_stMind)==NULL) { /* from init values in model */ ptrSrc=M_GetDsgMemDefaultInit(p_stMind); } else { /* from init values in perso*/ ptrSrc=M_GetDsgMemBufferInit(p_stMind); } /* loop on each dsgvar*/ for (ucVarId=0;ucVarIdp_p_stScriptAI); unsigned long ulComportInit=0; long lKey; if (p_stScriptAI!=NULL) { /* so that init comport is initialized only once in model */ if (!AI_M_ucGetSecondPassDone(AI_M_p_stGetAIModel(p_stMind)) ) { ulComportInit=M_GetScriptAINoComportInitDefault(p_stScriptAI); if (ulComportInit!=0) { lKey=ulComportInit; M_TestLinkTableValue(p_stMind,lKey,"Error in ComportInit In Model (.RUL or .RFX)"); ulComportInit=(unsigned long) M_GetComportLinkValueWithKey(lKey); } else ulComportInit = (unsigned long)M_GetScriptAIComport(p_stScriptAI); M_GetScriptAINoComportInitDefault(p_stScriptAI)=ulComportInit; } } /* init comport for perso*/ ulComportInit=M_GetNoComportInit(p_stIntelligence); if (ulComportInit==0) { ulComportInit=M_GetScriptAINoComportInitDefault(p_stScriptAI); } else { lKey=ulComportInit; M_TestLinkTableValue(p_stMind,lKey,"Error in ComportInit In Perso (.CAR)"); ulComportInit=(unsigned long) M_GetComportLinkValueWithKey(lKey); if (ulComportInit==0) ulComportInit=M_GetScriptAINoComportInitDefault(p_stScriptAI); } M_GetNoComportInit(p_stIntelligence)=ulComportInit; fn_vReinitComport(p_stIntelligence); } } #endif /* AI_USE_SCRIPT */ #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void fn_vSecondPassOfMindLoading(AI_tdxHandleToMind p_stMind,ACP_tdxBool _bPersoInFix, enum tdeObjectTreeInit_ _eObjectInit) { #if defined(AI_USE_SCRIPT) if (p_stMind!=NULL) { tdstIntelligence *p_stReflexOrIntelligence; #if defined(AI_LOGFILE) fpAILogFile=NULL; fpAIUnusedComportLogFile=NULL; if (!AI_M_ucGetSecondPassDone(AI_M_p_stGetAIModel(p_stMind)) ) { fpAILogFile=fopen(AI_ANIM_LOGFILE,"a"); fpAIUnusedComportLogFile=fopen(AI_UNUSEDCOMPORT_LOGFILE,"a"); } #endif #if defined(ACTIVE_AIDEBUG) /*** DR ***/ fn_v_SetCurrentMind( p_stMind ); AI_M_SetDoingIntel(p_stMind, 1); #endif /*ACTIVE_AIDEBUG*/ /* Second pass for array of references */ if((p_stMind->p_stAIModel->CFast_dst_RefTreeArray) && (!AI_M_ucGetSecondPassDone(AI_M_p_stGetAIModel(p_stMind)))) { struct tdstTreeInterpret_ stTree; M_GetNodeInterpret(&stTree)=p_stMind->p_stAIModel->CFast_dst_RefTreeArray; M_SetNbNodeInterpret(&stTree,p_stMind->p_stAIModel->uwNbNode); fn_vSecondPassOfTree(p_stMind, &stTree); } if ((p_stReflexOrIntelligence=AI_M_p_stGetIntelligence(p_stMind)) != NULL) { /* for nodes*/ /* so that init Script is initialized only once in model */ if (!AI_M_ucGetSecondPassDone(AI_M_p_stGetAIModel(p_stMind)) ) { #if defined(AI_LOGFILE) if (fpAILogFile) { fprintf(fpAILogFile,"\n.RUL of %s :\n",AI_M_szGetPersoName(p_stMind)); } #endif fn_vSecondPassOfScriptAI(p_stMind,M_GetScriptAI(p_stReflexOrIntelligence)); } /* for ComportInit*/ fn_vSecondPassOfComport(p_stMind,p_stReflexOrIntelligence); } #if defined(ACTIVE_AIDEBUG) /*** DR ***/ AI_M_SetDoingIntel(p_stMind, 0); #endif /*ACTIVE_AIDEBUG*/ if ((p_stReflexOrIntelligence=AI_M_p_stGetReflex(p_stMind)) != NULL) { /* for nodes*/ /* so that init Script is initialized only once in model */ if (!AI_M_ucGetSecondPassDone(AI_M_p_stGetAIModel(p_stMind)) ) { #if defined(AI_LOGFILE) if (fpAILogFile) { fprintf(fpAILogFile,"\n.RFX of %s :\n",AI_M_szGetPersoName(p_stMind)); } #endif fn_vSecondPassOfScriptAI(p_stMind,M_GetScriptAI(p_stReflexOrIntelligence)); } /* for ComportInit*/ fn_vSecondPassOfComport(p_stMind,p_stReflexOrIntelligence); } /* so that init Script is initialized only once in model */ if (!AI_M_ucGetSecondPassDone(AI_M_p_stGetAIModel(p_stMind)) ) { /* for references in macros*/ fn_vSecondPassOfListMacro(p_stMind); } /* for DsgVar type perso*/ fn_vSecondPassOfDsgMem(p_stMind,_bPersoInFix, _eObjectInit); /* SAI*/ /* fn_vInsertDsgVarInSAI(p_stMind);*/ /* hyper important : must be the last line of this function*/ AI_M_SetSecondPassDone(AI_M_p_stGetAIModel(p_stMind),1); #if defined(AI_LOGFILE) if (fpAILogFile) { fclose(fpAILogFile); fpAILogFile=NULL; } #endif } #endif /* AI_USE_SCRIPT */ } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ void fn_vReinitAIComport(AI_tdxHandleToMind p_stMind) { #if defined(ACTIVE_AIDEBUG) fn_v_SetCurrentMind(p_stMind); #endif /* BEWARE : THIS IS THE ULTRA OPERATOR */ fn_vSetUltraOperatorPerso(NULL,NULL); if (p_stMind!=NULL) { tdstIntelligence *p_stReflexOrIntelligence; /* reinit comport intelligence*/ #if defined(ACTIVE_AIDEBUG) /*** DR ***/ AI_M_SetDoingIntel(p_stMind, 1); #endif /*ACTIVE_AIDEBUG*/ if ((p_stReflexOrIntelligence=AI_M_p_stGetIntelligence(p_stMind))!=NULL) { fn_vReinitComport(p_stReflexOrIntelligence); } /* reinit comport reflex*/ #if defined(ACTIVE_AIDEBUG) /*** DR ***/ AI_M_SetDoingIntel(p_stMind, 0); #endif /*ACTIVE_AIDEBUG */ if ((p_stReflexOrIntelligence=AI_M_p_stGetReflex(p_stMind))!=NULL) { fn_vReinitComport(p_stReflexOrIntelligence); } //XB 05/08/99 #ifndef D_THROW_CFAST_AI //End XB p_stMind->CFast_lCmpMetaAction = 0; p_stMind->CFast_lRfxMetaAction = 0; p_stMind->CFast_lCmpMetaActionForMacro = 0; p_stMind->CFast_lRfxMetaActionForMacro = 0; //XB 05/08/99 #endif /* D_THROW_CFAST_AI */ //End XB } } void fn_vReinitAI(AI_tdxHandleToMind p_stMind) { if (p_stMind!=NULL) { /* reinit AI comport*/ fn_vReinitAIComport(p_stMind); /* reinit AI variable designer*/ ReinitDesignerVariables(p_stMind); } } /* POTICHE*/ void fn_vFirstInitAI(AI_tdxHandleToMind p_stMind) { if (p_stMind!=NULL) { /* reinit AI comport*/ fn_vReinitAIComport(p_stMind); /* reinit AI variable designer*/ FirstInitDesignerVariables(p_stMind); } } void fn_vReinitAIComportWithFlags(AI_tdxHandleToMind p_stMind,tdeObjectTreeInit eObjIniType) { eObjIniType=eObjIniType; fn_vReinitAIComport(p_stMind); } /* for the moment */ void fn_vReinitAIWithFlags(AI_tdxHandleToMind p_stMind,tdeObjectTreeInit eObjIniType) { if (p_stMind!=NULL) { /* reinit AI comport*/ fn_vReinitAIComportWithFlags(p_stMind,eObjIniType); /* reinit AI variable designer*/ fn_vReinitDesignerVariablesWithFlags(p_stMind,eObjIniType); } } /****************************************************************************************/ /* for always */ /****************************************************************************************/ #include "specif/ActTable.h" char *fn_p_cSimulateAllocDsgMemBuffer(char **p_ptr,unsigned long ulSize) { char *p_cDsgMemBuffer=NULL; p_cDsgMemBuffer=(char*) (*p_ptr); (*p_ptr)+=ulSize*sizeof(char); memset(p_cDsgMemBuffer,0,ulSize); return(p_cDsgMemBuffer); } tdstDsgMem *fn_p_stSimulateAllocDsgMem(char **p_ptr,tdstDsgVar **p_p_stDsgVar,unsigned long ulSize) { tdstDsgMem *p_stDsgMem=NULL; p_stDsgMem=(tdstDsgMem*) (*p_ptr); memset(*p_ptr,0,sizeof(tdstDsgMem)); (*p_ptr)+=sizeof(tdstDsgMem); /* link DsgMem to its model : dont forget it*/ p_stDsgMem->p_p_stDsgVar=p_p_stDsgVar; /* no specific values by default */ p_stDsgMem->p_cDsgMemBufferInit=NULL; /* zone which stores current DsgVarValues : Set during 2nd pass*/ p_stDsgMem->p_cDsgMemBuffer=fn_p_cSimulateAllocDsgMemBuffer(p_ptr,ulSize); return(p_stDsgMem); } /* XB 20/05/1999 */ #ifndef D_THROW_COMPLEX_ACTION_TABLE tdstActionTableEntry *fn_p_stSimulateAllocActionTableEntry(char **p_ptr,unsigned char ucActionTableNbEntry) { tdstActionTableEntry *p_stActionTableEntry=NULL; p_stActionTableEntry=(tdstActionTableEntry*) (*p_ptr); memset(*p_ptr,0,ucActionTableNbEntry*sizeof(tdstActionTableEntry)); (*p_ptr)+=(ucActionTableNbEntry*sizeof(tdstActionTableEntry)); return(p_stActionTableEntry); } #endif /* D_THROW_COMPLEX_ACTION_TABLE */ /* End XB 20/05/1999 */ tdstActionTable *fn_p_stSimulateAllocActionTable(char **p_ptr,unsigned char ucActionTableNbEntry) { /* ANNECY MT - 18/09/98 { now, this function also initializes the ActionTable*/ tdstActionTable *p_stActionTable=NULL; tdstActionTableEntry *p_stEntry=NULL; /* XB 20/05/1999 */ #ifndef D_THROW_COMPLEX_ACTION_TABLE unsigned char ucNEntry; #endif /* D_THROW_COMPLEX_ACTION_TABLE */ /* End XB 20/05/1999 */ /* XB 21/05/1999 */ if(ucActionTableNbEntry!=0) { p_stActionTable=(tdstActionTable*) (*p_ptr); memset(*p_ptr,0,sizeof(tdstActionTable)); (*p_ptr)+=sizeof(tdstActionTable); } else { return NULL; } /* End XB 21/05/1999 */ /* XB 20/05/1999 */ #ifndef D_THROW_COMPLEX_ACTION_TABLE M_TableNbEntries(p_stActionTable)=ucActionTableNbEntry; M_TableEntry(p_stActionTable)=fn_p_stSimulateAllocActionTableEntry(p_ptr,ucActionTableNbEntry); p_stActionTable->ucNbEntriesUsed=0; p_stActionTable->ucCurrentEntry=0; /**/ for (ucNEntry=0,p_stEntry=M_TableEntry(p_stActionTable);ucNEntry bUseDefaultActionReturn = g_ucUseDefaultActionReturn; p_stEntry -> ucNewActionReturn = g_ucNewActionReturn; } #else /* D_THROW_COMPLEX_ACTION_TABLE */ p_stEntry = &(p_stActionTable->stEntry); p_stEntry->bUseDefaultActionReturn=g_ucUseDefaultActionReturn; p_stEntry->ucNewActionReturn=g_ucNewActionReturn; memset(&(p_stEntry->stActionParam),0,sizeof(p_stEntry->stActionParam)); #endif /* D_THROW_COMPLEX_ACTION_TABLE */ /* End XB 20/05/1999 */ return(p_stActionTable); /* END ANNECY MT }*/ } tdstIntelligence *fn_p_stSimulateAllocIntelligence(char **p_ptr,tdstScriptAI **p_p_stScriptAI,unsigned char ucActionTableNbEntry) { tdstIntelligence *p_stIntelligence=NULL; if (M_GetScriptAINbComport(*p_p_stScriptAI)!=0) { p_stIntelligence=(tdstIntelligence *) (*p_ptr); memset(*p_ptr,0,sizeof(tdstIntelligence)); (*p_ptr)+=sizeof(tdstIntelligence); /* link intelligence to its model*/ p_stIntelligence->p_p_stScriptAI=p_p_stScriptAI; /* faire macro*/ /* initialise with default comport*/ M_GetNoComportInit(p_stIntelligence)=M_GetScriptAINoComportInitDefault(*p_p_stScriptAI); M_ActionTable(p_stIntelligence)=fn_p_stSimulateAllocActionTable(p_ptr,ucActionTableNbEntry); /* ANNECY MT - 18/09/98 { fn_p_stSimulateAllocActionTable() also initializes the ActionTable*/ /*fn_vInitActionTable(p_stIntelligence);*/ /* END ANNECY MT }*/ } return(p_stIntelligence); } void fn_vSimulateMindAllocationFromAnotherMind(AI_tdxHandleToMind p_stMindSrc,AI_tdxHandleToMind p_stMindDst) { if ( (p_stMindSrc!=NULL) && (p_stMindDst!=NULL) ) { AI_tdstAIModel *p_stLoadedAIModel; AI_tdstMind *p_stLoadedMind=p_stMindDst; tdstScriptAI **p_p_stScriptAI=NULL; tdstIntelligence *p_stIntelligenceOrReflex=NULL; char *ptr=(char*) (p_stMindDst+1); /* AIModel*/ p_stLoadedAIModel=AI_M_p_stGetAIModel(p_stMindSrc); AI_M_SetAIModel(p_stLoadedMind,p_stLoadedAIModel); #if defined(ACTIVE_EDITOR) AI_M_ucErrorFlag(p_stLoadedMind)=0; #endif #if defined(ACTIVE_AIDEBUG) AIDebug_M_InitTrace( p_stLoadedMind ); AIDebug_M_InitBuffer( p_stLoadedMind ); #endif /*ACTIVE_AIDEBUG*/ /* fn_vSecondPassOfMindLoading(p_stMindSrc);*/ /* simul alloc intelligence and link it with its script*/ p_p_stScriptAI=&AI_M_p_stGetIntelligenceScriptAIModel(p_stLoadedAIModel); if (*p_p_stScriptAI!=NULL) { AI_M_SetIntelligence(p_stLoadedMind, fn_p_stSimulateAllocIntelligence(&ptr, p_p_stScriptAI, M_GetScriptAIActionTableNbEntry(*p_p_stScriptAI) ) ); p_stIntelligenceOrReflex=AI_M_p_stGetIntelligence(p_stMindSrc); if (p_stIntelligenceOrReflex!=NULL) { M_GetNoComportInit(AI_M_p_stGetIntelligence(p_stLoadedMind))=M_GetNoComportInit(p_stIntelligenceOrReflex); } } else { AI_M_SetIntelligence(p_stLoadedMind,NULL); } p_stIntelligenceOrReflex=AI_M_p_stGetIntelligence(p_stMindSrc); if (p_stIntelligenceOrReflex!=NULL) { M_GetNoComportInit(AI_M_p_stGetIntelligence(p_stLoadedMind))=M_GetNoComportInit(p_stIntelligenceOrReflex); } /* simul reflex (same structure as intelligence and link it with its script)*/ p_p_stScriptAI=&AI_M_p_stGetReflexScriptAIModel(p_stLoadedAIModel); if (*p_p_stScriptAI!=NULL) { AI_M_SetReflex(p_stLoadedMind, fn_p_stSimulateAllocIntelligence(&ptr, p_p_stScriptAI, M_GetScriptAIActionTableNbEntry(*p_p_stScriptAI) ) ); p_stIntelligenceOrReflex=AI_M_p_stGetReflex(p_stMindSrc); if (p_stIntelligenceOrReflex!=NULL) { M_GetNoComportInit(AI_M_p_stGetReflex(p_stLoadedMind))=M_GetNoComportInit(p_stIntelligenceOrReflex); } } else { AI_M_SetReflex(p_stLoadedMind,NULL); } /* simul alloc dsgvar*/ M_GetDsgMem(p_stLoadedMind)=NULL; if ( AI_M_p_stGetDsgVar(p_stLoadedMind)!=NULL) { if (M_GetDsgVarSize(p_stLoadedMind)!=0) { AI_M_p_stGetDsgMem(p_stLoadedMind)=fn_p_stSimulateAllocDsgMem(&ptr,&AI_M_p_stGetDsgVar(p_stLoadedMind),M_GetDsgVarSize(p_stLoadedMind) ); M_GetDsgVar(p_stLoadedMind)=M_GetDsgVar(p_stMindSrc); /* dsgvar init*/ if (M_GetDsgMemBufferInit(p_stMindSrc)!=NULL) { M_GetDsgMemBufferInit(p_stLoadedMind)=fn_p_cSimulateAllocDsgMemBuffer(&ptr,M_GetDsgVarSize(p_stLoadedMind)); /* copy it from the model */ memcpy(M_GetDsgMemBufferInit(p_stLoadedMind),M_GetDsgMemBufferInit(p_stMindSrc),M_GetDsgVarSize(p_stLoadedMind)); } } } /* reinit comport and dsgvar*/ /* ANNECY MT - 18/09/98 {*/ /*fn_vReinitAI(p_stLoadedMind);*/ /**/ p_stIntelligenceOrReflex=AI_M_p_stGetIntelligence(p_stLoadedMind); if(p_stIntelligenceOrReflex) { M_GetCurrentComport(p_stIntelligenceOrReflex) = (tdstComport *)M_GetNoComportInit(p_stIntelligenceOrReflex); M_GetPrevComport(p_stIntelligenceOrReflex) = M_GetCurrentComport(p_stIntelligenceOrReflex); } /**/ p_stIntelligenceOrReflex=AI_M_p_stGetReflex(p_stLoadedMind); if(p_stIntelligenceOrReflex) { M_GetCurrentComport(p_stIntelligenceOrReflex) = (tdstComport *)M_GetNoComportInit(p_stIntelligenceOrReflex); M_GetPrevComport(p_stIntelligenceOrReflex) = M_GetCurrentComport(p_stIntelligenceOrReflex); } /**/ if (M_GetDsgMem(p_stLoadedMind)!=NULL) { /* copy current values*/ if (M_GetDsgMemBufferInit(p_stLoadedMind)==NULL) { /* from init values in model */ memcpy(M_GetDsgMemBuffer(p_stLoadedMind),M_GetDsgMemDefaultInit(p_stLoadedMind),M_GetDsgVarSize(p_stLoadedMind)); } else { /* from init values in perso*/ memcpy(M_GetDsgMemBuffer(p_stLoadedMind),M_GetDsgMemBufferInit(p_stLoadedMind),M_GetDsgVarSize(p_stLoadedMind)); } } //XB 05/08/99 #ifndef D_THROW_CFAST_AI //End XB p_stLoadedMind->CFast_lCmpMetaAction = 0; p_stLoadedMind->CFast_lRfxMetaAction = 0; p_stLoadedMind->CFast_lCmpMetaActionForMacro = 0; p_stLoadedMind->CFast_lRfxMetaActionForMacro = 0; //XB 05/08/99 #endif /* D_THROW_CFAST_AI */ //End XB /* END ANNECY MT }*/ } } unsigned long fn_ulGetSizeOfMindWithoutAIModel(AI_tdxHandleToMind p_stMind) { unsigned long ulSize=0; if (p_stMind!=NULL) { tdstIntelligence *p_stIntelligenceOrReflex; /* Mind structure*/ ulSize+=sizeof(AI_tdstMind); /* Intelligence structure*/ p_stIntelligenceOrReflex=AI_M_p_stGetIntelligence(p_stMind); if (p_stIntelligenceOrReflex!=NULL) { ulSize+=sizeof(tdstIntelligence); ulSize+=sizeof(tdstActionTable); ulSize+=sizeof(tdstActionTableEntry)*M_ActionTableNbEntries(p_stIntelligenceOrReflex); } /* Reflex structure*/ p_stIntelligenceOrReflex=AI_M_p_stGetReflex(p_stMind); if (p_stIntelligenceOrReflex!=NULL) { ulSize+=sizeof(tdstIntelligence); ulSize+=sizeof(tdstActionTable); ulSize+=sizeof(tdstActionTableEntry)*M_ActionTableNbEntries(p_stIntelligenceOrReflex); } /* DsgMem*/ if ( AI_M_p_stGetDsgVar(p_stMind)!=NULL) { if (M_GetDsgVarSize(p_stMind)!=0) { ulSize+=sizeof(tdstDsgMem); ulSize+=M_GetDsgVarSize(p_stMind); if (M_GetDsgMemBufferInit(p_stMind)!=NULL) { ulSize+=M_GetDsgVarSize(p_stMind); } } } } return(ulSize); } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ unsigned long fn_ulGetSizeOfMindWithAIModel(AI_tdxHandleToMind p_stMind) { unsigned long ulSize=0; if (p_stMind!=NULL) { AI_tdstAIModel *p_stModel=AI_M_p_stGetAIModel(p_stMind); if (p_stModel!=NULL) { tdstScriptAI *p_stIntelligenceOrReflexScriptAI; long n=2; /* Model*/ ulSize+=sizeof(AI_tdstAIModel); /* Intelligence and reflex*/ while (n) { if (n==2) { p_stIntelligenceOrReflexScriptAI=AI_M_p_stGetIntelligenceScriptAIModel(p_stModel); } else if (n==1) { p_stIntelligenceOrReflexScriptAI=AI_M_p_stGetReflexScriptAIModel(p_stModel); } else { p_stIntelligenceOrReflexScriptAI=NULL; } if (p_stIntelligenceOrReflexScriptAI!=NULL) { unsigned long i,j,k; ulSize+=sizeof(tdstScriptAI); for (i=0;iSetErrorMode) = M_GET_FUNC_ADDR(PTC_C_SetErrorModeIndex); *((long *)&stLoader->CreateFile) = M_GET_FUNC_ADDR(PTC_C_CreateFileIndex); *((long *)&stLoader->GetFileInformationByHandle) = M_GET_FUNC_ADDR(PTC_C_GetFileInformationByHandleIndex); *((long *)&stLoader->CloseHandle) = M_GET_FUNC_ADDR(PTC_C_CloseHandleIndex); *((long *)&stLoader->GetDriveType) = M_GET_FUNC_ADDR(PTC_C_GetDriveTypeIndex); *((long *)&stLoader->GetVolumeInformation) = M_GET_FUNC_ADDR(PTC_C_GetVolumeInformationIndex); *((long *)&stLoader->GetDiskFreeSpace) = M_GET_FUNC_ADDR(PTC_C_GetDiskFreeSpaceIndex); *((long *)&stLoader->SetFileAttributes) = M_GET_FUNC_ADDR(PTC_C_SetFileAttributsIndex); *((long *)&stLoader->GetFileAttributes) = M_GET_FUNC_ADDR(PTC_C_GetFileAttributsIndex); *((long *)&stLoader->SetFileTime) = M_GET_FUNC_ADDR(PTC_C_SetFileTimeIndex); *((long *)&stLoader->GetFileTime) = M_GET_FUNC_ADDR(PTC_C_GetFileTimeIndex); *((long *)&stLoader->GetFileSize) = M_GET_FUNC_ADDR(PTC_C_GetFileSizeIndex); #ifdef PTC_SYSTEM_ACTIVED *((long *)&stLoader->SearchExportedFunctionInEveryDLL) = (long)PTC_fn_dwSearchExportedFunctionInEveryDLL; *((long *)&stLoader->SearchFunctionInImportedTableOfExe) = (long)PTC_fn_dwSearchFunctionInImportedTableOfExe; #else *((long *)&stLoader->SearchExportedFunctionInEveryDLL) = NULL; *((long *)&stLoader->SearchFunctionInImportedTableOfExe) = NULL; #endif #endif /* PRESS_DEMO */ } /* Pointeur de fonctions pour les fonctions dans les donnees */ typedef long (*ptrFunction)(char *_szFileName, tdstLoaderHandler *stHandler); /* END ANNECY OA } */ unsigned char fn_ucSetDsgVarArray(void *pMyVarAddr,unsigned char ucIndex,tdstGetSetParam *p_stGetSetParam); unsigned char fn_ucSetDsgVarInteger(void *pMyVarAddr,unsigned char ucIndex,tdstGetSetParam *p_stGetSetParam); unsigned char fn_ucGetDsgVarInteger(void *pMyVarAddr,unsigned char ucIndex,tdstGetSetParam *p_stGetSetParam); /* -----------------19/05/99 16:24------------------- * for every model * --------------------------------------------------*/ #define AI_C_DsgMemNumberForType 0 /* -----------------19/05/99 16:24------------------- * for Protect Key model * --------------------------------------------------*/ #define AI_C_DsgMemNumberForInitKey 1 #define AI_C_DsgMemNumberOfKey 2 #define AI_C_DsgMemNumberForProtectKey 3 /* * Copy protect keys in Model after binary loading */ #if !defined(PRESS_DEMO) void fn_vInitDesignerVariablesWithProtectKeyInModel(AI_tdxHandleToMind p_stMind) { char *ptrNumberForType = NULL; if (p_stMind) { unsigned char ucElement; tdstGetSetParam stGSParam; #ifdef _DEBUG assert(M_GetNbDsgVar(p_stMind) > AI_C_DsgMemNumberForType); //assert(fn_GetDsgVarType(M_GetDsgVarType(p_stMind,AI_C_DsgMemNumberForInitKey))==E_vt_Integer); #endif /* _DEBUG */ ptrNumberForType = M_GetDsgVarAddrDefault(p_stMind,AI_C_DsgMemNumberForType); if (fn_ucGetDsgVarInteger(ptrNumberForType,0,&stGSParam)==C_VALID_GET) { long lType = M_GetSetParam_lValue(&stGSParam); if (lType==0) { /* -----------------19/05/99 16:32------------------- * protect key model * --------------------------------------------------*/ char *ptrInitKeyArray = NULL; char *ptrProtectKeyArray = NULL; char *ptrNumberOfKey = NULL; #ifdef _DEBUG assert(M_GetNbDsgVar(p_stMind) > AI_C_DsgMemNumberOfKey); assert(fn_GetDsgVarType(M_GetDsgVarType(p_stMind,AI_C_DsgMemNumberOfKey))==E_vt_Integer); assert(M_GetNbDsgVar(p_stMind) > AI_C_DsgMemNumberForInitKey); assert(fn_GetDsgVarType(M_GetDsgVarType(p_stMind,AI_C_DsgMemNumberForInitKey))==E_vt_Array); assert(M_GetNbDsgVar(p_stMind) > AI_C_DsgMemNumberForProtectKey); assert(fn_GetDsgVarType(M_GetDsgVarType(p_stMind,AI_C_DsgMemNumberForProtectKey))==E_vt_Array); #endif ptrInitKeyArray = M_GetDsgVarAddrDefault(p_stMind,AI_C_DsgMemNumberForInitKey); ptrProtectKeyArray = M_GetDsgVarAddrDefault(p_stMind,AI_C_DsgMemNumberForProtectKey); for (ucElement = 0 ; ucElement < SNA_g_dwNumberOfRelocationTableLoaded ; ucElement++ ) { M_Full_GetSetParam_Integer(&stGSParam,SNA_g_a_dwInitKeyRelocationTableLoaded[ucElement]); fn_ucSetDsgVarArray (ptrInitKeyArray , ucElement ,&stGSParam); M_Full_GetSetParam_Integer(&stGSParam,SNA_g_a_dwProtectKeyRelocationTableLoaded[ucElement]); fn_ucSetDsgVarArray (ptrProtectKeyArray , ucElement ,&stGSParam); } ptrNumberOfKey = M_GetDsgVarAddrDefault(p_stMind,AI_C_DsgMemNumberOfKey); M_Full_GetSetParam_Integer(&stGSParam,SNA_g_dwNumberOfRelocationTableLoaded); fn_ucSetDsgVarInteger (ptrNumberOfKey , 0 , &stGSParam); } } } } /* ANNECY OA - 21/07/99 { */ /* -----------------19/05/99 16:24------------------- * for Computed Datas model * --------------------------------------------------*/ #define AI_C_DsgMemNumberForCode 1 #define AI_C_DsgMemNumberForConsigne 2 #define AI_C_DsgMemNumberForParameter 3 #define AI_C_DsgMemNumberForResult 4 #define AI_C_DsgMemNumberForCDROM 5 /* * execute code in Designer variable after binary loading */ void fn_vInitDesignerVariablesWithComputedDatas(AI_tdxHandleToMind p_stMind) { if (p_stMind) { tdstGetSetParam stGSParam; char *ptrNumberForType = M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForType); if (fn_ucGetDsgVarInteger(ptrNumberForType, 0, &stGSParam) == C_VALID_GET) { long lType = M_GetSetParam_lValue(&stGSParam); /* Modele a executer ? */ if (lType==2) { tdstLoaderHandler stLoader; char *pcComputeDataCode = (char *)((tdstArray *)(M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForCode)))->d_ArrayElement; char *pcParameter = (char *)((tdstArray *)(M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForParameter)))->d_ArrayElement; char *pcConsigne = M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForConsigne); char *pcResult = M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForResult); char *pcCDROM = M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForCDROM); long *plCryptage = (long *)pcComputeDataCode; long lResult; long lCryptKey; long lMask; #ifdef _DEBUG assert(M_GetNbDsgVar(p_stMind) > AI_C_DsgMemNumberForResult); assert(fn_GetDsgVarType(M_GetDsgVarType(p_stMind,AI_C_DsgMemNumberForResult))==E_vt_Integer); #endif /* _DEBUG */ #ifdef _DEBUG lMask = 0x81EC8B55; #else lMask = 0x4401; #endif /* Decryptage du code */ plCryptage = (long *)pcComputeDataCode; lCryptKey = ~*plCryptage & lMask; /* Nouveau systeme de cryptage lCryptKey = *plCryptage; ++plCryptage; */ while (plCryptage < (long *)pcConsigne) { long lNextCryptKey = *plCryptage; *plCryptage ^= lCryptKey; lCryptKey = lNextCryptKey; ++plCryptage; } fn_vInitLoaderHandler(&stLoader); /* Decryptage du parametre */ plCryptage = (long *)pcParameter; while (plCryptage < (long *)pcResult) { long lNextCryptKey = *plCryptage; *plCryptage ^= lCryptKey; lCryptKey = lNextCryptKey; ++plCryptage; } /* lecteur du CDROM en parametre ? */ fn_ucGetDsgVarInteger(pcCDROM,0,&stGSParam); if (M_GetSetParam_lValue(&stGSParam)) { *pcParameter = g_cCDROM; } /* Execution de la fonction */ lResult = ((ptrFunction)pcComputeDataCode)(pcParameter, &stLoader); /* Cryptage du code */ while (pcComputeDataCode < pcConsigne) { *pcComputeDataCode = PTC_fn_lGetRandom();; ++pcComputeDataCode; } /* Preparation du resultat */ M_Full_GetSetParam_Integer(&stGSParam, lResult); /* Cryptage du parametre */ while (pcParameter < pcResult) { *pcParameter = PTC_fn_lGetRandom(); ++pcParameter; } /* Stockage du resultat */ fn_ucSetDsgVarInteger (pcResult, 0, &stGSParam); } } } } #endif /* PRESS_DEMO */ /* END ANNECY OA } */ #ifndef RETAIL /* { */ #ifdef PTC_SYSTEM_ACTIVED /* { */ /* ANNECY OA - 04/08/99 { */ /*************************************************************************/ /* Fonctions pour l'inclusion des protections pendant de la binarisation */ /*************************************************************************/ /* Ligne de commande pour passer par ici : -level:learn_30 -bin:2 -mem:2 -dsc:2 */ /* Taille max du code en long... */ #define M_MAX_CODE_SIZE 200 /* Taille max du parametre en long */ #define M_MAX_PARAMETER_SIZE 100 typedef struct tdstProtectionsInit_ { ptrFunction function; long result; char parameter[M_MAX_PARAMETER_SIZE]; char CDROM; } tdstProtectionsInit; #include "Protections.cxx" long fn_lCodeSize(ptrFunction function) { long lIndex = 0; while (lIndex < 50 && g_ListOfProtectionFunctions[lIndex] != function) lIndex++; if (lIndex < 50) { return (long)g_ListOfProtectionFunctions[lIndex+1] - (long)g_ListOfProtectionFunctions[lIndex]; } return -1; } /* END ANNECY OA } */ /* ANNECY OA - 23/07/99 { */ /* * Copy code in Designer variable during binarisation */ void fn_vInitDesignerVariablesWithCode(struct tdstEngineObject_ *p_stObject, AI_tdxHandleToMind p_stMind) { MS_tdxHandleToStandardGame h_StdGame = p_stObject -> h_StandardGame; if (p_stMind) { tdstGetSetParam stGSParam; char *pcNumberForType = M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForType); if (fn_ucGetDsgVarInteger(pcNumberForType, 0, &stGSParam) == C_VALID_GET) { long lType = M_GetSetParam_lValue(&stGSParam); if (lType >= 100) { /* Recherche des variables utiles */ char *pcComputeDataCode = (char *)((tdstArray *)(M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForCode)))->d_ArrayElement; char *pcParameter = (char *)((tdstArray *)(M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForParameter)))->d_ArrayElement; char *pcResult = M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForResult); char *pcConsigne = M_GetDsgVarAddrInit(p_stMind, AI_C_DsgMemNumberForConsigne); long *plCryptage = (long *)pcComputeDataCode; //long lCodeSize = fn_lCodeSize(lType%100); long lCodeSize = fn_lCodeSize(g_ProtectionFunctions[lType%100].function); long lCryptKey; long lMask; /* Sous-couche du code :)) */ plCryptage = (long *)pcComputeDataCode; while (plCryptage < (long *)pcConsigne) { *plCryptage = PTC_fn_lGetRandom(); ++plCryptage; } /* Sous-couche du parametre :)) */ plCryptage = (long *)pcParameter; while (plCryptage < (long *)pcResult) { *plCryptage = PTC_fn_lGetRandom(); ++plCryptage; } /* Copie de code */ assert((lCodeSize>>2) < M_MAX_CODE_SIZE); memcpy(pcComputeDataCode, g_ProtectionFunctions[lType%100].function, lCodeSize); /* Test le point communs entre tous les premmiers entier des fonctions, utile pour le cryptage { int cmp = *((int *)(g_ProtectionFunctions[0].function)); int i; char buffer[200]; for (i=1; i < 15; ++i) { cmp &= *((int *)(g_ProtectionFunctions[i].function)); } sprintf(buffer, "cmp = %X", cmp); OutputDebugString(buffer); abort(); } */ /* Copie du parametre */ strcpy(pcParameter, g_ProtectionFunctions[lType%100].parameter); /* Test de la fonction de protection { tdstLoaderHandler stLoader; long lResult; *pcParameter = g_cCDROM; fn_vInitLoaderHandler(&stLoader); lResult = g_ProtectionFunctions[lType%100].function(pcParameter, &stLoader); } */ /* Copie de la consigne */ M_Full_GetSetParam_Integer(&stGSParam, g_ProtectionFunctions[lType%100].result); fn_ucSetDsgVarInteger (pcConsigne, 0, &stGSParam); /* Nettoyage */ if ((lType >= 100) && (lType <= 199)) { /* Modele Actif, le type est mis a 2 */ M_Full_GetSetParam_Integer(&stGSParam, 2); fn_ucSetDsgVarInteger (pcNumberForType, 0, &stGSParam); } else if ((lType >= 200) && (lType <= 299)) { /* Modele Passif, le type est mis a 0 */ M_Full_GetSetParam_Integer(&stGSParam, 0); fn_ucSetDsgVarInteger (pcNumberForType, 0, &stGSParam); /* et le bit de protection est desactive */ h_StdGame->ulCustomBits &= ~GAM_C_CustBitProtection; } #ifdef _DEBUG lMask = 0x81EC8B55; #else lMask = 0x4401; #endif /* Cryptage du code */ plCryptage = (long *)pcComputeDataCode; lCryptKey = PTC_fn_lGetRandom() & lMask; /* Nouveau systeme de cryptage lCryptKey = *plCryptage; ++plCryptage; */ while (plCryptage < (long *)pcConsigne) { *plCryptage ^= lCryptKey; lCryptKey = *plCryptage; ++plCryptage; } /* Cryptage du parametre */ plCryptage = (long *)pcParameter; while (plCryptage < (long *)pcResult) { *plCryptage ^= lCryptKey; lCryptKey = *plCryptage; ++plCryptage; } } } } } /* END ANNECY OA } */ /* -----------------19/05/99 16:24------------------- * for CheckSum model * --------------------------------------------------*/ #define AI_C_DsgMemNumberForBeginAddress 2 #define AI_C_DsgMemNumberForSize 1 #define AI_C_DsgMemNumberForEndAddress 3 #define AI_C_DsgMemNumberForChecksum 4 void fn_vInitDesignerVariablesWithChecksumInModel(struct tdstEngineObject_ *p_stObject, AI_tdxHandleToMind p_stMind) { /* ANNECY OA - 04/08/99 { */ MS_tdxHandleToStandardGame h_StdGame = p_stObject -> h_StandardGame; /* END ANNECY OA } */ char *ptrNumberForType = NULL; if (p_stMind) { unsigned char ucElement; tdstGetSetParam stGSParam; #ifdef _DEBUG assert(M_GetNbDsgVar(p_stMind) > AI_C_DsgMemNumberForType); //assert(fn_GetDsgVarType(M_GetDsgVarType(p_stMind,AI_C_DsgMemNumberForInitKey))==E_vt_Integer); #endif /* _DEBUG */ ptrNumberForType = M_GetDsgVarAddrDefault(p_stMind,AI_C_DsgMemNumberForType); if (fn_ucGetDsgVarInteger(ptrNumberForType,0,&stGSParam)==C_VALID_GET) { long lType = M_GetSetParam_lValue(&stGSParam); if (lType==1) { /* -----------------19/05/99 16:32------------------- * checksum model * --------------------------------------------------*/ char *ptrBeginArray = NULL; char *ptrEndArray = NULL; char *ptrChecksum = NULL; char *ptrNumberForSize = NULL; DWORD *p_dwBeginAddress = PTC_g_dwBeginLabelAddress; DWORD *p_dwEndAddress = PTC_g_dwEndLabelAddress; DWORD *p_dwCheckSum = PTC_g_dwChecksum; long lChecksumBegin = 0; long lChecksumEnd = 0; long lChecksumChecksum = 0; #ifdef _DEBUG assert(M_GetNbDsgVar(p_stMind) > AI_C_DsgMemNumberForSize); assert(fn_GetDsgVarType(M_GetDsgVarType(p_stMind,AI_C_DsgMemNumberForSize))==E_vt_Integer); assert(M_GetNbDsgVar(p_stMind) > AI_C_DsgMemNumberForBeginAddress); assert(fn_GetDsgVarType(M_GetDsgVarType(p_stMind,AI_C_DsgMemNumberForBeginAddress))==E_vt_Array); assert(M_GetNbDsgVar(p_stMind) > AI_C_DsgMemNumberForEndAddress); assert(fn_GetDsgVarType(M_GetDsgVarType(p_stMind,AI_C_DsgMemNumberForEndAddress))==E_vt_Array); assert(M_GetNbDsgVar(p_stMind) > AI_C_DsgMemNumberForChecksum); assert(fn_GetDsgVarType(M_GetDsgVarType(p_stMind,AI_C_DsgMemNumberForChecksum))==E_vt_Array); #endif /* _DEBUG */ ptrBeginArray = M_GetDsgVarAddrDefault(p_stMind,AI_C_DsgMemNumberForBeginAddress); ptrEndArray = M_GetDsgVarAddrDefault(p_stMind,AI_C_DsgMemNumberForEndAddress); ptrChecksum = M_GetDsgVarAddrDefault(p_stMind,AI_C_DsgMemNumberForChecksum); for (ucElement = 0 ; *p_dwBeginAddress && *p_dwEndAddress ; ucElement++,p_dwBeginAddress++,p_dwEndAddress++,p_dwCheckSum++) { M_Full_GetSetParam_Integer(&stGSParam,*p_dwBeginAddress); fn_ucSetDsgVarArray (ptrBeginArray , ucElement ,&stGSParam); M_Full_GetSetParam_Integer(&stGSParam,*p_dwEndAddress); fn_ucSetDsgVarArray (ptrEndArray , ucElement ,&stGSParam); M_Full_GetSetParam_Integer(&stGSParam,*p_dwCheckSum); fn_ucSetDsgVarArray (ptrChecksum , ucElement ,&stGSParam); lChecksumBegin += (*(long*)p_dwBeginAddress) * (*(long*)p_dwBeginAddress); lChecksumEnd += (*(long*)p_dwEndAddress) * (*(long*)p_dwEndAddress); lChecksumChecksum += (*(long*)p_dwCheckSum) * (*(long*)p_dwCheckSum); } // M_Full_GetSetParam_Integer(&stGSParam,lChecksumBegin); fn_ucSetDsgVarArray (ptrBeginArray , ucElement ,&stGSParam); M_Full_GetSetParam_Integer(&stGSParam,lChecksumEnd); fn_ucSetDsgVarArray (ptrEndArray , ucElement ,&stGSParam); M_Full_GetSetParam_Integer(&stGSParam,lChecksumChecksum); fn_ucSetDsgVarArray (ptrChecksum , ucElement ,&stGSParam); // ucElement++; ptrNumberForSize = M_GetDsgVarAddrDefault(p_stMind,AI_C_DsgMemNumberForSize); M_Full_GetSetParam_Integer(&stGSParam,ucElement); fn_ucSetDsgVarInteger (ptrNumberForSize , 0 , &stGSParam); /* ANNECY OA - 04/08/99 { */ /* Nettoyage : le type est mis a 0 */ M_Full_GetSetParam_Integer(&stGSParam, 0); fn_ucSetDsgVarInteger (ptrNumberForType, 0, &stGSParam); /* et le bit de protection est desactive */ h_StdGame->ulCustomBits &= ~GAM_C_CustBitProtection; /* END ANNECY OA } */ } } } } #endif /* PTC_SYSTEM_ACTIVED } */ #endif /* RETAIL } */ #endif /* } U64 */ /* END ANNECY MT } */