#include "ldt.h" extern "C" HREF g_hRefBrain; enum{ iEndCreateVariables, iEndIntellModel, iEndReflexModel, iEndAIModel, iEndInitVariables, iEndComportIntell, iEndComportReflex }; /******************************************************** Init Node Functions ********************************************************/ #ifdef CPA_USES_LDT static void fn_vInitNodeMacroRef(tdstNodeInterpret *p_stNode, char *szParams[]) { unsigned char ucDepth=0; SCR_tdst_Link_Value *p_stLinkValue; char szFileName[_MAX_PATH]; /* fill the string szForScript.*/ fn_v_File_ComputeFileSectionName(LDT_szGetParam(1),szFileName,szForScript); ucDepth =(unsigned char)atol(LDT_szGetParam(2)); p_stLinkValue = fn_vLinkWithLinkTable(&g_stMacroLinkTable, fn_szGetFamiliesDataPath(), szForScript,p_stNode,E_ti_MacroRef,ucDepth); } static void fn_vInitNodeCondition(tdstNodeInterpret *p_stNode, char *szParams[]) { M_eCondIdInterpret(p_stNode)=fn_eFindConditionIdFromScriptName(LDT_szGetParam(1)); M_TestNodeInterpret(p_stLoadedMind,M_IsConditionIdValid(M_eCondIdInterpret(p_stNode)),"Condition name",LDT_szGetParam(1),UnknownCond); } static void fn_vInitNodeField(tdstNodeInterpret *p_stNode, char *szParams[]) { M_eFieldIdInterpret(p_stNode)=fn_eFindFieldIdFromScriptName(LDT_szGetParam(1)); M_TestNodeInterpret(p_stLoadedMind,M_IsFieldIdValid(M_eFieldIdInterpret(p_stNode)),"Field name",LDT_szGetParam(1),UnknownFieldName); } static void fn_vInitNodeConstant(tdstNodeInterpret *p_stNode, char *szParams[]) { M_lValueInterpret(p_stNode)=atol(LDT_szGetParam(1)); } static void fn_vInitNodeString(tdstNodeInterpret *p_stNode, char *szParams[]) { fn_vCreateNodeString(p_stNode, LDT_szGetParam(1)); } static void fn_vInitNodeButton(tdstNodeInterpret *p_stNode, char *szParams[]) { M_hInputHandleIdInterpret(p_stNode)=IPT_fn_hGetEntryActionHandle(LDT_szGetParam(1)); #if defined(__DEBUG_AI__) if(!IPT_fn_bIsAValidEntryActionHandle(M_hInputHandleIdInterpret(p_stNode))) { M_StandardMessage(p_stLoadedMind,"Button name",LDT_szGetParam(1),UnknownButton); } #endif } static void fn_vInitNodeObjectTableRef(tdstNodeInterpret *p_stNode, char *szParams[]) { /*to make sure the table is loaded*/ LDT_LoadSection(LDT_szGetParam(1)); /*now we can set the node value with the handle*/ fn_vLinkWithLinkTable(&TBL_g_stLinkTable, fn_szGetFamiliesDataPath(),LDT_szGetParam(1),p_stNode,E_ti_ObjectTableRef,(unsigned char) atol(LDT_szGetParam(2))); } static void fn_vInitNodeLipSynchroRef(tdstNodeInterpret *p_stNode, char *szParams[]) { SCR_tdst_Cxt_Values *p_stValues; /* MR0912*/ if (SNA_fn_ucGetLoadType()==SNA_LOAD_SCRIPT) { SCR_M_RdL0_SetContextLong(C_GrandChildContext,1,(long)fn_h3dDataGetFamily(p_stLoadedEngineObject->h_3dData)); p_stValues = SCR_fnp_st_RdL0_AnalyseSection(LDT_szGetParam(1), SCR_CDF_uw_Anl_Normal); /* p_stValues = (*SCR_tdst_Cxt_Values)LDT_LoadSection(LDT_szGetParam(1));*/ M_hLipSynchroHandleIdInterpret(p_stNode) = (tdxHandleOfLipsSynchroTable)(p_stValues->a_ulValues[0]); } else if (SNA_fn_ucGetLoadType()==SNA_SAVE_SNAPSHOT) { /* Version Hybride*/ SCR_M_RdL0_SetContextLong(C_GrandChildContext,1,(long)fn_h3dDataGetFamily(p_stLoadedEngineObject->h_3dData)); p_stValues = SCR_fnp_st_RdL0_AnalyseSection(LDT_szGetParam(1), SCR_CDF_uw_Anl_Normal); /* p_stValues = (*SCR_tdst_Cxt_Values)LDT_LoadSection(LDT_szGetParam(1));*/ /* A voir...*/ M_hLipSynchroHandleIdInterpret(p_stNode) = (tdxHandleOfLipsSynchroTable)(p_stValues->a_ulValues[0]); fn_vWriteLipsSynchroBloc((tdxHandleOfLipsSynchroTable)(p_stValues->a_ulValues[0]),LDT_szGetParam(1)); /* End VH*/ SNA_fn_vWriteLipsSynchEntryInLipsSynchTableFile(LDT_szGetParam(1),(unsigned long)p_stNode); } } static void fn_vInitNodeSoundEventRef(tdstNodeInterpret *p_stNode, char *szParams[]) { /* SCR_tdst_Cxt_Values *p_stValues;*/ /* p_stValues = SCR_fnp_st_RdL0_AnalyseSection(LDT_szGetParam(1), SCR_CDF_uw_Anl_Normal);*/ /* M_SoundEventInterpret(p_stNode) = (SND_tdxHandleToSoundEvent) (p_stValues->a_ulValues[0]);*/ SND_tdxHandleToSoundEvent handle = M_SoundEventInterpret(p_stNode) = (SND_tdxHandleToSoundEvent) LDT_LoadSection(LDT_szGetParam(1)); if (SNA_fn_ucGetLoadType()==SNA_SAVE_SNAPSHOT) SNA_fn_vWriteSoundEntryInSoundTableFile(SND_fn_ulGetEventBinIdFromPointer(handle) ,(unsigned long)&(M_SoundEventInterpret(p_stNode))); } static void fn_vInitNodeBeginMacro(tdstNodeInterpret *p_stNode, char *szParams[]) { M_lValueInterpret(p_stNode) = 0; } static void fn_vInitNodeEndMacro(tdstNodeInterpret *p_stNode, char *szParams[]) { M_lValueInterpret(p_stNode) = 0; } static void fn_vInitNodeDsgVar(tdstNodeInterpret *p_stNode, char *szParams[]) { M_lValueInterpret(p_stNode)=atol(LDT_szGetParam(1)); } static void fn_vInitNodeDsgVarRef(tdstNodeInterpret *p_stNode, char *szParams[]) { char sz[MAX_PATH]; strcpy( sz, LDT_szGetParam(1) ); fn_vLinkWithLinkTable(&g_stDsgVarLinkTable, fn_szGetFamiliesDataPath(), sz,p_stNode,E_ti_DsgVarRef,(unsigned char) atol(LDT_szGetParam(2))); sz[0]=sz[0]; } static void fn_vInitNodeOperator(tdstNodeInterpret *p_stNode, char *szParams[]) { M_eOperatorIdInterpret(p_stNode)=fn_eFindOperatorIdFromScriptName(LDT_szGetParam(1)); M_TestNodeInterpret(p_stLoadedMind,M_IsOperatorIdValid(M_eOperatorIdInterpret(p_stNode)),"Operator name",LDT_szGetParam(1),UnknownOperator); } static void fn_vInitNodeFunction(tdstNodeInterpret *p_stNode, char *szParams[]) { M_eFuncIdInterpret(p_stNode)=fn_eFindFunctionIdFromScriptName(LDT_szGetParam(1)); M_TestNodeInterpret(p_stLoadedMind,M_IsFuncIdValid(M_eFuncIdInterpret(p_stNode)),"Function name",LDT_szGetParam(1),UnknownFunc); } static void fn_vInitNodeProcedure(tdstNodeInterpret *p_stNode, char *szParams[]) { M_eProcedureIdInterpret(p_stNode) = fn_eFindProcedureIdFromScriptName(LDT_szGetParam(1)); M_TestNodeInterpret(p_stLoadedMind,M_IsProcedureIdValid(M_eProcedureIdInterpret(p_stNode)),"Procedure name",LDT_szGetParam(1),UnknownFunc); } static void fn_vInitNodeKeyWord(tdstNodeInterpret *p_stNode, char *szParams[]) { M_eKeyWordIdInterpret(p_stNode)=fn_eFindKeyWordIdFromScriptName(LDT_szGetParam(1)); M_TestNodeInterpret(p_stLoadedMind,M_IsKeyWordIdValid(M_eKeyWordIdInterpret(p_stNode)),"Keyword name",LDT_szGetParam(1),UnknownKeyWord); } static void fn_vInitNodeMetaAction(tdstNodeInterpret *p_stNode, char *szParams[]) { M_eMetaActionIdInterpret(p_stNode) = fn_eFindMetaActionIdFromScriptName(LDT_szGetParam(1)); /* bidouille temporaire */ if (!M_IsMetaActionIdValid(M_eMetaActionIdInterpret(p_stNode))) { char str[256]="Proc"; char *ptr; if ((ptr=strchr(LDT_szGetParam(1),'_'))!=NULL) { tdeProcedureId eProcId; strcat(str,ptr); eProcId=fn_eFindProcedureIdFromScriptName(str); if (M_IsProcedureIdValid(eProcId)) { M_SetTypeInterpret(p_stNode,E_ti_Procedure); M_eProcedureIdInterpret(p_stNode)=eProcId; return; } } } M_TestNodeInterpret(p_stLoadedMind,M_IsMetaActionIdValid(M_eMetaActionIdInterpret(p_stNode)),"Metaaction name",LDT_szGetParam(1),InvalidAction); } static void fn_vInitNodeReal(tdstNodeInterpret *p_stNode, char *szParams[]) { M_xValueInterpret(p_stNode) = MTH_M_xFloatToReal((float) atof(LDT_szGetParam(1))); } static void fn_vInitNodeSuperObjectRef(tdstNodeInterpret *p_stNode, char *szParams[]) { fn_vLinkWithLinkTable(HIE_fn_p_stGetSuperObjectLinkTable(), fn_szGetLevelsDataPath(), LDT_szGetParam(1),p_stNode,E_ti_SuperObjectRef,(unsigned char) atol(LDT_szGetParam(2))); } static void fn_vInitNodeFamilyRef(tdstNodeInterpret *p_stNode, char *szParams[]) { M_hFamilyHandleIdInterpret(p_stNode) = fn_hFindOrAddFAmily(fn_otFindOrAddFamilyTypeOfFamilyTypeName(LDT_szGetParam(1))); } static void fn_vInitNodeTextRef(tdstNodeInterpret *p_stNode,char *szParams[]) { /*M_TextInterpret(p_stNode) = FON_fn_hGetTextHandle(szParams[0]);*/ FON_tdxHandleOfText hText = FON_fn_hGetTextHandle(LDT_szGetParam(1)); M_TestNodeInterpret(p_stLoadedMind,(long)hText,"Text Key",LDT_szGetParam(1),ScriptError); M_TextInterpret(p_stNode) = hText; } static void fn_vInitNodeParticleGenerator(tdstNodeInterpret *p_stNode, char *szParams[]) { M_ParticleGeneratorInterpret(p_stNode) = (tdxHandleToParticleGenerator)LDT_LoadSection(LDT_szGetParam(1));/*(p_stValues->a_ulValues[0]);*/ } static void fn_vInitNodeGameMaterialRef(tdstNodeInterpret *p_stNode, char *szParams[]) { char szFile[SCR_CV_ui_Cfg_MaxLenName], szParent[SCR_CV_ui_Cfg_MaxLenName], szAction[SCR_CV_ui_Cfg_MaxLenName], szId[SCR_CV_ui_Cfg_MaxLenName]; char Buffer[SCR_CV_ui_Cfg_MaxLenName]; LDT_SplitSectionName( LDT_szGetParam(1), szFile, szParent, szAction, szId ); if( !LDT_SearchFile( szFile, Buffer ) ) { strcpy( szFile, Buffer ); strcat( szFile, "^" ); if( szParent[0] ) { strcat( szFile, szParent ); strcat( szFile, "^" ); } strcat( szFile, szAction ); if( szId[0] ) { strcat( szFile, ":" ); strcat( szFile, szId ); } } else strcat( szFile, " (not loaded!!)" ); fn_vLinkWithLinkTable(GMT_fn_p_stGetLinkTable(), NULL, szFile, p_stNode, E_ti_GameMaterialRef, (unsigned char) atol(LDT_szGetParam(2))); } static void fn_vInitNodeColor(tdstNodeInterpret *p_stNode,char *szParams[]) { M_ColorValueInterpret(p_stNode)=atol(LDT_szGetParam(1)); } static void fn_vInitNodePersoRef(tdstNodeInterpret *p_stNode, char *szParams[]) { unsigned char ucDepth=0; /* Reference compatibility : 0,1,2 <-> 0^1:2*/ if (LDT_iGetNbParams()-1>2) { strcpy(szForScript,LDT_szGetParam(1)); strcat(szForScript,SCR_CC_sz_Cfg_NameSeparator); strcat(szForScript,LDT_szGetParam(2)); strcat(szForScript,SCR_CC_sz_Cfg_SectionIdMark); strcat(szForScript,LDT_szGetParam(3)); /* szForScript contains now the complete section name*/ ucDepth=(unsigned char) atol(LDT_szGetParam(4)); } else { strcpy(szForScript,LDT_szGetParam(1)); ucDepth=(unsigned char) atol(LDT_szGetParam(2)); } fn_vLinkWithLinkTable(&g_st3DOSLinkTable.stCharacter, fn_szGetCharactersDataPath(), szForScript,p_stNode,E_ti_PersoRef,ucDepth); } static void fn_vInitNodeComportRef(tdstNodeInterpret *p_stNode, char *szParams[]) { unsigned char ucDepth=0; SCR_tdst_Link_Value *p_stLinkValue; if (LDT_iGetNbParams()-1>2) { SCR_fn_v_RdL0_ComputeSectionName(szForScript, LDT_szGetParam(1), LDT_szGetParam(2), LDT_szGetParam(3)); ucDepth=(unsigned char)atol(LDT_szGetParam(4)); } else { char szFileName[_MAX_PATH]; fn_v_File_ComputeFileSectionName(LDT_szGetParam(1),szFileName,szForScript); ucDepth =(unsigned char)atol(LDT_szGetParam(2)); } p_stLinkValue = fn_vLinkWithLinkTable(&g_stComportLinkTable, fn_szGetFamiliesDataPath(), szForScript,p_stNode,E_ti_ComportRef,ucDepth); SCR_M_v_Link_SetAdditionalLong(p_stLinkValue, 4, 0); } static void fn_vInitNodeModuleRef(tdstNodeInterpret *p_stNode, char *szParams[]) { fn_vLinkWithLinkTable(&CHL_g_stLinkTable, NULL, LDT_szGetParam(1), p_stNode, E_ti_ModuleRef, (unsigned char) atol(LDT_szGetParam(2))); } static void fn_vInitNodeActionRef(tdstNodeInterpret *p_stNode, char *szParams[]) { fn_vLinkWithLinkTable(&g_st3DOSLinkTable.stState, fn_szGetFamiliesDataPath(), LDT_szGetParam(1),p_stNode,E_ti_ActionRef,(unsigned char) atol(LDT_szGetParam(2))); } static void fn_vInitNodeVector(tdstNodeInterpret *p_stNode, char *szParams[]) { /* nothing to do : normal*/ } static void fn_vInitNodeConstantVector(tdstNodeInterpret *p_stNode, char *szParams[]) { MTH3D_tdstVector *p_stVector; MTH_tdxReal xX,xY,xZ; fn_vCreateNodeVector(p_stNode); p_stVector=M_p_stVectorInterpret(p_stNode); xX=MTH_M_xFloatToReal((float) atof(LDT_szGetParam(1))); xY=MTH_M_xFloatToReal((float) atof(LDT_szGetParam(2))); xZ=MTH_M_xFloatToReal((float) atof(LDT_szGetParam(3))); MTH3D_M_vSetVectorElements(p_stVector,xX,xY,xZ); M_DepthInterpret(p_stNode)= (unsigned char)atol(LDT_szGetParam(4)); } static void fn_vInitNodeWayPoint(tdstNodeInterpret *p_stNode, char *szParams[]) { char szForScript[256]; strcpy(szForScript,fn_szGetLevelsDataPath()); strcat(szForScript,"\\"); strcat(szForScript,LDT_szGetParam(1)); M_lKeyLinkInterpret(p_stNode) = (long)SCR_fnp_st_Link_CreateOrGetLinkFromKey(WP_fnp_WayPoint_GetLinkTable(),szForScript); } static void fn_vInitNodeModule(tdstNodeInterpret *p_stNode, char *szParams[]) { M_lModuleInterpret(p_stNode)=atol(LDT_szGetParam(1)); } static void fn_vInitNodeDsgVarId(tdstNodeInterpret *p_stNode, char *szParams[]) { M_lDsgVarIdInterpret(p_stNode)=atol(LDT_szGetParam(1)); } static void fn_vInitNodeMask(tdstNodeInterpret *p_stNode, char *szParams[]) { M_xMaskInterpret(p_stNode)=(GMT_tdxMask) atol(LDT_szGetParam(1)); } static void fn_vInitNodeModelRef(tdstNodeInterpret *p_stNode, char *szParams[]) { fn_vLinkWithLinkTable(&g_stModelLinkTable, fn_szGetFamiliesDataPath(), LDT_szGetParam(1),p_stNode,E_ti_ModelRef,(unsigned char) atol(LDT_szGetParam(2))); } static void fn_vInitNodeLight(tdstNodeInterpret *p_stNode, char *szParams[]) { char a255_csCompleteSectionName [255]; strcpy(a255_csCompleteSectionName,fn_szGetLevelsDataPath()); strcat(a255_csCompleteSectionName,"\\"); strcat(a255_csCompleteSectionName,LDT_szGetParam(1)); M_lKeyLinkInterpret(p_stNode) = SCR_fnp_st_Link_CreateOrGetLinkFromKey(&gs_stLightLinkTable,a255_csCompleteSectionName)->ulValue; } static void fn_vInitNodeCaps(tdstNodeInterpret *p_stNode, char *szParams[]) { char* dummy; M_ulCapsInterpret(p_stNode) = (unsigned long) strtoul(LDT_szGetParam(1), &dummy, 2); } static void fn_vInitNodeGraph(tdstNodeInterpret *p_stNode, char *szParams[]) { char szForScript[256]; sprintf(szForScript, "%s\\%s\\%s.%s^%s:%s", fn_szGetLevelsDataPath(), fn_p_szGetLevelName(), fn_p_szGetLevelName(), C_ScriptWayPointSuffixe, C_SectionWPGraphDescription, LDT_szGetParam(1)); M_lKeyLinkInterpret(p_stNode) = (long)SCR_fnp_st_Link_CreateOrGetLinkFromKey(WPG_fnp_Graph_GetLinkTable(),szForScript); } #define M_GET_AI_DEFINES_DATA_PATH fn_szGetFamiliesDataPath() static void fn_vInitNodeConstantRef(tdstNodeInterpret *p_stNode, char *szParams[]) { SCR_tdst_Link_Value *p_stLinkValue; sprintf(szForScript,"%s\\%s",M_GET_AI_DEFINES_DATA_PATH,LDT_szGetParam(1)); p_stLinkValue= SCR_fnp_st_Link_SearchKey(&g_stDefinesLinkTable,szForScript); M_TestNodeInterpret(p_stLoadedMind,p_stLinkValue,"Constant Ref",LDT_szGetParam(1),UnknownNode); if (p_stLinkValue!=NULL) M_lValueInterpret(p_stNode)=SCR_M_ul_Link_GetValue(p_stLinkValue); } static void fn_vInitNodeRealRef(tdstNodeInterpret *p_stNode, char *szParams[]) { SCR_tdst_Link_Value *p_stLinkValue; sprintf(szForScript,"%s\\%s",M_GET_AI_DEFINES_DATA_PATH,LDT_szGetParam(1)); p_stLinkValue = SCR_fnp_st_Link_SearchKey(&g_stDefinesLinkTable,szForScript); M_TestNodeInterpret(p_stLoadedMind,p_stLinkValue,"Real Ref",LDT_szGetParam(1),UnknownNode); if (p_stLinkValue!=NULL) M_lValueInterpret(p_stNode)=SCR_M_ul_Link_GetValue(p_stLinkValue); } #endif /* CPA_USES_LDT*/ /*################################################################ End of init node functions ################################################################*/ /***************************************************************** Name: Description: Create callback for LDT Author: Mircea Petrescu Date: 10/2/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int fn_iCreateRule( LDT_tdst_Link *pLink ) { LDT_SetVolatileSubsection(pLink); return 0; } /*---------------------------------------------------------------------- * Description: callback for CreateRule section from .RUL sript file *---------------------------------------------------------------------- * Input: * Output: *---------------------------------------------------------------------- * Author: FS * Creation date:6/18/98 * Modif date: *----------------------------------------------------------------------*/ int fn_iLoadRule( LDT_tdst_Link *pLink ) { LDT_tdeParseResult result=ParseResult_BeginSection; static char cIsCRR = 0; char *psz_Temp; char szErrorString[100]; /* Determin if it's a CRR */ psz_Temp = strrchr(pLink->szFile, '.'); if(psz_Temp && !strcmpi(psz_Temp, ".crr")) cIsCRR = 1; else cIsCRR = 0; if (cIsCRR || (ucInComportSection==TRUE)) { /* Begin section*/ ucInRuleSection=TRUE; /* plus 1 for adding a dummy node at the end of the tree*/ ScriptCounter.uwNbNode=(unsigned short) (atoi(LDT_szGetParam(2))+1); StructCounter.uwNbNode=0; if (cIsCRR || (StructCounter.ucNbRules < ScriptCounter.ucNbRules)) { /* allocate nodes*/ p_stLoadedNode=fn_p_stAllocNodeInterpret(ScriptCounter.uwNbNode); if (cIsCRR) { p_stLoadedMind->p_stAIModel->CFast_dst_RefTreeArray = p_stLoadedNode; p_stLoadedMind->p_stAIModel->uwNbNode = ScriptCounter.uwNbNode; } else { M_GetNodeInterpret(p_stLoadedRule)=p_stLoadedNode; M_SetNbNodeInterpret(p_stLoadedRule,ScriptCounter.uwNbNode); } } else { /* error : bad number of rule*/ sprintf(szErrorString,"Number of rules in this comport (comport n. %d) should be (%d)\n", StructCounter.ulNbComport, ScriptCounter.ucNbRules); M_AIFatalErrorMsg(E_uwAIFatalBadRuleNumber,szErrorString); } /* work for entries*/ result=LDT_GetNextEntry(); while( result!=ParseResult_EndSection ) { unsigned char ucDepth=0; if (LDT_iGetNbParams()-1>=2) { ucDepth=(unsigned char) atol(LDT_szGetParam(2)); } else { sprintf(szErrorString,"Depth undefined (node %d comport n. %d)\n",StructCounter.uwNbNode, StructCounter.ulNbComport); M_AIFatalErrorMsg(E_uwAIFatalUnknownNode,szErrorString); } if (StructCounter.uwNbNode < ScriptCounter.uwNbNode) { if (cIsCRR) fn_vConvertAndInitNode( LDT_szGetEntryName(), NULL, p_stLoadedMind->p_stAIModel->CFast_dst_RefTreeArray + StructCounter.uwNbNode, ucDepth); else fn_vConvertAndInitNode( LDT_szGetEntryName(), NULL, M_GetNodeInterpretN(p_stLoadedRule,StructCounter.uwNbNode), ucDepth); StructCounter.uwNbNode++; } else { M_AIFatalError(E_uwAIFatalBadNodeNumber); } result=LDT_GetNextEntry(); } /*end while for entries*/ /* work for EndSection*/ if(!cIsCRR) { /* add a dummy node at the end of the tree*/ fn_vInitNodeInterpret( M_GetNodeInterpretN(p_stLoadedRule,StructCounter.uwNbNode), 0, E_ti_EndTree, 0); StructCounter.uwNbNode++; if (ScriptCounter.uwNbNode!=StructCounter.uwNbNode) { sprintf(szErrorString,"Number of nodes in this rule (rule %d comport n. %d) should be (%d)\n",StructCounter.ucNbRules, StructCounter.ulNbComport,ScriptCounter.uwNbNode); M_AIFatalErrorMsg(E_uwAIFatalBadNodeNumber,szErrorString); } /* hyper important*/ StructCounter.ucNbRules++; p_stLoadedRule= M_GetComportRuleN(p_stLoadedComport,StructCounter.ucNbRules); } else { fn_vInitNodeInterpret( p_stLoadedMind->p_stAIModel->CFast_dst_RefTreeArray+StructCounter.uwNbNode, 0, E_ti_EndTree, 0); } ucInRuleSection=FALSE; } else { /*error : CreateRule not in CreateComport*/ M_AIFatalError(E_uwAIFatalRuleNotInComport); } return 0; } /***************************************************************** Name: Description: Create callback for LDT Author: Mircea Petrescu Date: 10/2/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int fn_iCreateSchedule( LDT_tdst_Link *pLink ) { LDT_SetVolatileSubsection( pLink ); return 0; } /*---------------------------------------------------------------------- * Description: callback for CreateSchedule section from .RUL and ,RFX * script files *---------------------------------------------------------------------- * Input: * Output: *---------------------------------------------------------------------- * Author: FS * Creation date:6/28/98 * Modif date: *----------------------------------------------------------------------*/ int fn_iLoadSchedule( LDT_tdst_Link *pLink ) { LDT_tdeParseResult result=ParseResult_BeginSection; char szErrorString[100]; if (ucInComportSection==TRUE) { /* BeginSection*/ ucInRuleSection=TRUE; /* plus 1 for adding a dummy node at the end of the tree*/ ScriptCounter.uwNbNode=(unsigned short) (atoi(LDT_szGetParam(2))+1); StructCounter.uwNbNode=0; /* allocate schedule*/ p_stLoadedSchedule=fn_p_stAllocSchedule(ScriptCounter.uwNbNode); /* connect schedule to comport*/ M_GetComportSchedule(p_stLoadedComport)=p_stLoadedSchedule; /* Working for Entries*/ result=LDT_GetNextEntry(); while( result!=ParseResult_EndSection ) { unsigned char ucDepth=0; if (LDT_iGetNbParams()-1>=2) { ucDepth=(unsigned char) atol(LDT_szGetParam(2)); } else { sprintf(szErrorString,"Depth undefined (node %d schedule comport n. %d)\n",StructCounter.uwNbNode, StructCounter.ulNbComport); M_AIFatalErrorMsg(E_uwAIFatalUnknownNode,szErrorString); } if (StructCounter.uwNbNode < ScriptCounter.uwNbNode) { fn_vConvertAndInitNode( LDT_szGetEntryName(), NULL, M_GetNodeInterpretN(p_stLoadedSchedule,StructCounter.uwNbNode), ucDepth); StructCounter.uwNbNode++; } else { sprintf(szErrorString,"Number of nodes in this schedule (schedule comport n. %d) should be (%d)\n", StructCounter.ulNbComport,ScriptCounter.uwNbNode); M_AIFatalErrorMsg(E_uwAIFatalBadNodeNumber,szErrorString); } result=LDT_GetNextEntry(); } /*end while for entries*/ /* Work for EndSection*/ /* add a dummy node at the end of the tree*/ fn_vInitNodeInterpret( M_GetNodeInterpretN(p_stLoadedSchedule,StructCounter.uwNbNode), 0, E_ti_EndTree, 0); StructCounter.uwNbNode++; if (ScriptCounter.uwNbNode!=StructCounter.uwNbNode) { sprintf(szErrorString,"Number of nodes in this schedule (comport n. %d) should be (%d)\n", StructCounter.ulNbComport,ScriptCounter.uwNbNode); M_AIFatalErrorMsg(E_uwAIFatalBadNodeNumber,szErrorString); } ucInRuleSection=FALSE; } else { /*error : CreateSchedule not in CreateComport*/ sprintf(szErrorString,"Problem (schedule comport n. %d)\n", StructCounter.ulNbComport); M_AIFatalErrorMsg(E_uwAIFatalRuleNotInComport,szErrorString); } return 0; } /*---------------------------------------------------------------------- * Description: callback for CreateComport section from .RUL & .RFX sript files *---------------------------------------------------------------------- * Input: * Output: *---------------------------------------------------------------------- * Author: FS * Creation date:6/28/98 * Modif date: *----------------------------------------------------------------------*/ int fn_iLoadComport( LDT_tdst_Link *pLink ) { LDT_tdeParseResult result; char szForScript[MAX_PATH], szSectionName[100]; char szErrorString[100]; int iLengthFile=0; if (ucInIntelligenceSection==TRUE) { /* this parameter (section name) is many times used*/ strcpy(szSectionName,LDT_szGetSectionName()); /* BeginSection*/ VIG_fn_vAddToProgressBar(1); ucInComportSection=TRUE; /* Nb Rules in this comport*/ if (LDT_iGetNbParams()-1==2) ScriptCounter.ucNbRules=(unsigned char) atoi(LDT_szGetParam(2)); else ScriptCounter.ucNbRules=(unsigned char) atoi(LDT_szGetParam(1)); StructCounter.ucNbRules=0; if (StructCounter.ulNbComport < ScriptCounter.ulNbComport) { p_stLoadedComport=M_GetScriptAIComportN(p_stLoadedScriptAI, StructCounter.ulNbComport); /* iLengthFile wills contain the length of string file name*/ /* szForScript wills contain the complete section name*/ iLengthFile=LDT_ComputeSectionName(pLink, szForScript); /* determin iLengthFile manual*/ /* iLengthFile=strlen(fn_szGetFamiliesDataPath())+1;*/ /* pana aici scot*/ SCR_M_v_Link_SetAdditionalLong(SCR_fnp_st_Link_SetValue(&g_stComportLinkTable, szForScript, (unsigned long)p_stLoadedComport), 1,iLengthFile); if (M_GetComportRules(p_stLoadedComport) == NULL) { #ifndef ACTIVE_EDITOR if(p_stLoadedMind->p_stAIModel->CFast_bIsC == 2) { p_stLoadedRule = NULL; ScriptCounter.ucNbRules = 0; } else #endif p_stLoadedRule = fn_p_stAllocRule(ScriptCounter.ucNbRules); M_GetComportRules(p_stLoadedComport) = p_stLoadedRule; M_GetComportNbRules(p_stLoadedComport) = ScriptCounter.ucNbRules; #if defined(__DEBUG_AI__) /* szFamiliesDataPath=fn_szGetFamiliesDataPath();*/ strcpy(M_GetNameComport(p_stLoadedComport), szForScript+iLengthFile); #endif } else { /*error : CreateComport(n) n is bad : already initialized*/ sprintf(szErrorString,"Problem (comport n. %d : %s)\n", StructCounter.ulNbComport, szSectionName); M_AIFatalErrorMsg(E_uwAIFatalBadComportNumber,szErrorString); } } else { /*error : CreateIntelligence(n) n is bad : too much comport*/ sprintf(szErrorString,"Problem (comport n. %d : %s)\n", StructCounter.ulNbComport, szSectionName); M_AIFatalErrorMsg(E_uwAIFatalBadComportNumber,szErrorString); } result=LDT_GetNextEntry(); while( result!=ParseResult_EndSection ) { /* Load SubSection (CreateRule or CreateSchedule)*/ LDT_LoadSection(NULL); result=LDT_GetNextEntry(); } /* Working for EndSection*/ if (ScriptCounter.ucNbRules!=StructCounter.ucNbRules) { sprintf(szErrorString,"Number of rules in this comport (comport n. %d : %s) should be (%d)\n", StructCounter.ulNbComport, szSectionName, ScriptCounter.ucNbRules); M_AIFatalErrorMsg(E_uwAIFatalBadRuleNumber,szErrorString); } StructCounter.ulNbComport++; ucInComportSection=FALSE; } else { /*error : CreateComport not in CreateIntelligence*/ M_AIFatalError(E_uwAIFatalComportNotInIntelligence); } #ifndef ACTIVE_EDITOR if(p_stLoadedMind->p_stAIModel->CFast_bIsC == 2) { StructCounter.ulNbComport++; ucInComportSection=FALSE; return SCR_ERV_Anl_TerminateCurrentSection; } #endif return 0; } /***************************************************************** Name: Description: Create callback for LDT Author: Mircea Petrescu Date: 10/2/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int fn_iCreateIntelligence( LDT_tdst_Link *pLink ) { return 0; } /*---------------------------------------------------------------------- * Description: callback for CreateIntelligence section from .RUL or * .RFX sript files *---------------------------------------------------------------------- * Input: * Output: *---------------------------------------------------------------------- * Author: FS * Creation date:6/28/98 * Modif date: *----------------------------------------------------------------------*/ int fn_iLoadIntelligence( LDT_tdst_Link *pLink ) { char szForScript[MAX_PATH]; LDT_tdeParseResult result=ParseResult_BeginSection; unsigned char ucActionTableNbEntry=DEFAULT_ACTION_TABLE_NB_ENTRIES; unsigned long ulNoComportInitDefault=0; int i=LDT_iGetNbParams(); p_stLoadedAIModel=(AI_tdstAIModel *)pLink->pParent->pObject; p_stLoadedEngineObject=(tdstEngineObject *)LDT_GetLinkValue( pLink->pParent ); p_stLoadedMind=M_pstGetMindOfBrain((MS_tdxHandleToBrain)p_stLoadedEngineObject->h_Brain); ucInIntelligenceSection=TRUE; if (LDT_iGetNbParams()-1>1) { ucActionTableNbEntry=(unsigned char) atoi(LDT_szGetParam(2)); if (ucActionTableNbEntrypObject=(void *)p_stLoadedScriptAI; else pLink->pObject=NULL; return 0; } int fn_iCreateAIModel( LDT_tdst_Link *pLink ) { p_stLoadedAIModel=fn_p_stAllocAIModel(); pLink->pObject=(void *)p_stLoadedAIModel; LDT_SetLinkValue( pLink, (long)p_stLoadedEngineObject ); return 0; } /*---------------------------------------------------------------------- * Description: callback for CreateAIModel section from .AI script file *---------------------------------------------------------------------- * Input: * Output: *---------------------------------------------------------------------- * Author: FS * Creation date:9/10/98 * Modif date: *----------------------------------------------------------------------*/ #define lCreateIntellAIModel 0x65746E49 /*"CreateIntellAIModel" - the 4 letters after "Create"*/ #define lCreateReflexAIModel 0x6C666552 /*"CreateReflexAIModel" - the 4 letters after "Create"*/ #define lCreateVariableDeclarationAIModel 0x69726156 /*"CreateVariableDeclarationAIModel" - the 4 letters after "Create"*/ #define lCreateMacroAIModel 0x7263614D /*"CreateMacroAIModel" - the 4 letters after "Create"*/ #define lCreateRefAIModel 0x41666552 /*"CreateRefAIModel" - the 4 letters after "Create"*/ #define lCFast_IsC 0x00437349 /*"CFast_IsC" - the 4 letters after "CFast_"*/ #define lCFast_FunctionIndex 0x636E7546 /*"CFast_FunctionIndex" the 4 letters after "CFast_"*/ int fn_iLoadAIModel( LDT_tdst_Link *pLink ) { LDT_tdeParseResult result=ParseResult_BeginSection; char *szEntryName; char szForScript[_MAX_PATH]=""; static int CFast=0; int iLen; p_stLoadedAIModel=(AI_tdstAIModel *)pLink->pObject; p_stLoadedEngineObject=(tdstEngineObject *)LDT_GetLinkValue( pLink ); p_stLoadedMind=M_pstGetMindOfBrain((MS_tdxHandleToBrain)p_stLoadedEngineObject->h_Brain); /*Working for BeginSection*/ /* hyper important*/ AI_M_SetAIModel(p_stLoadedMind,p_stLoadedAIModel); iLen=LDT_ComputeSectionName( pLink, szForScript ); SCR_M_v_Link_SetAdditionalLong( SCR_fnp_st_Link_SetValue(&g_stModelLinkTable, szForScript, (unsigned long)p_stLoadedAIModel),1, /* the next is the length of path*/ iLen); /* Some inits */ p_stLoadedMind->p_stAIModel->CFast_bIsC = 0; p_stLoadedMind->p_stAIModel->CFast_lFunction = 0; /* read the next line in script file*/ result=LDT_GetNextEntry(); /*Working for entries*/ while( result!=ParseResult_EndSection ) { szEntryName=LDT_szGetEntryName(); switch (*(long*)(szEntryName+strlen("Create"))) { case lCreateIntellAIModel: /* read .rul*/ fn_p_stReadScriptAI(LDT_szGetParam(1)); LDT_AddToRefsTable( g_hRefBrain, pLink, iEndIntellModel, 0 ); break; case 'TfeR' : /* CreateRefTree */ { /* read .nod*/ LDT_LoadSection(LDT_szGetParam(1)); } break; case lCreateReflexAIModel: /* read .rfx*/ fn_p_stReadScriptAI(LDT_szGetParam(1)); LDT_AddToRefsTable( g_hRefBrain, pLink, iEndReflexModel, 0 ); break; case lCreateVariableDeclarationAIModel: /*(void) SCR_fnp_st_RdL0_AnalyseSection(LDT_szGetParam(1), SCR_CDF_uw_Anl_Normal); // (void) for lint.*/ LDT_LoadSection(LDT_szGetParam(1)); break; case lCreateMacroAIModel: LDT_LoadSection(LDT_szGetParam(1)); break; case lCreateRefAIModel: /* read .crr*/ /*(void) SCR_fnp_st_RdL0_AnalyseSection(LDT_szGetParam(1), SCR_CDF_uw_Anl_Normal); // (void) for lint.*/ LDT_LoadSection( LDT_szGetParam(1) ); break; case lCFast_IsC: p_stLoadedMind->p_stAIModel->CFast_bIsC = (ACP_tdxBool) fn_lAToI(LDT_szGetParam(1)); break; case lCFast_FunctionIndex: p_stLoadedMind->p_stAIModel->CFast_lFunction = fn_lAToI(LDT_szGetParam(1)); break; }/* end switch*/ result=LDT_GetNextEntry(); }/*end while*/ /*Working for EndSection*/ /* * Search CFast function in array. */ /* int i; char a_szTemp[255]; char *szModelName; strcpy(a_szTemp, "CFast_"); szModelName = fn_szFindModelTypeNameOfModelType(M_ObjectGetModelType(p_stLoadedEngineObject)); strcat(a_szTemp, szModelName); strcat(a_szTemp, "_Main"); i = 1; while(CFast_gast_ArrayFunctions[i].mpsz_Name != NULL) { if(!strcmpi(CFast_gast_ArrayFunctions[i].mpsz_Name, a_szTemp)) { p_stLoadedMind->p_stAIModel->CFast_lFunction = i; break; } i++; } */ if ( !CFast ) p_stLoadedMind->p_stAIModel->CFast_lFunction = 0; return 0; } /***************************************************************** Name: Description: Create callback for LDT Author: Mircea Petrescu Date: 10/2/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int fn_iCreateAIDefines( LDT_tdst_Link *pLink ) { /* pLink->pObject=(void *)p_stElement;*/ return 0; } /*---------------------------------------------------------------------- * Description: callback for CreateAIDefines section from .AI sript file *---------------------------------------------------------------------- * Input: * Output: *---------------------------------------------------------------------- * Author: FS * Creation date:9/10/98 * Modif date: *----------------------------------------------------------------------*/ int fn_iLoadAIDefines( LDT_tdst_Link *pLink ) { #define lConstantRef 0x736E6F43 /*"ConstantRef" - the first 4 letters*/ #define lRealRef 0x6C616552 /*"RealRef" - the first 4 letters*/ char szDefineSection[MAX_PATH]; LDT_tdeParseResult result=ParseResult_BeginSection; char *szEntryName; static lLen=0; unsigned long ulValue=0, ulType = 0; long lValue; /*Working for BeginSection*/ lLen=LDT_ComputeSectionName(pLink,szDefineSection); /* read the next line in script file*/ result=LDT_GetNextEntry(); /*Working for entries*/ while( result!=ParseResult_EndSection ) { ulValue=0; /*ANNECY CHRISTOPHE MOFICATION CF XAVIER*/ ulType = 0; /*ANNECY END CHRISTOPHE MODIFICATIONS CF XAVIER*/ szForScript[0]=0; szEntryName=LDT_szGetEntryName(); switch (*(long*)(szEntryName)) { case lConstantRef: lValue=(long) atoi(LDT_szGetParam(2)); ulValue=*((unsigned long*) &lValue); sprintf(szForScript,"%s:%s",szDefineSection,LDT_szGetParam(1)); /*ANNECY CHRISTOPHE MOFICATION CF XAVIER*/ ulType=E_vt_Integer; /*ANNECY END CHRISTOPHE MOFICATION CF XAVIER*/ break; case lRealRef: MTH_tdxReal xReal=MTH_M_xFloatToReal((float) atof(LDT_szGetParam(2))); ulValue=*((long*) &xReal); sprintf(szForScript,"%s:%s",szDefineSection,LDT_szGetParam(1)); /*ANNECY CHRISTOPHE MOFICATION CF XAVIER*/ ulType=E_vt_Float; /*ANNECY END CHRISTOPHE MOFICATION CF XAVIER*/ break; }/* end switch*/ if (strlen(szForScript)!=0) { SCR_tdst_Link_Value *p_stLinkValue = SCR_fnp_st_Link_SearchKey(&g_stDefinesLinkTable,szForScript); if (p_stLinkValue==NULL) { p_stLinkValue=SCR_fnp_st_Link_SetValue(&g_stDefinesLinkTable, szForScript, ulValue); SCR_M_v_Link_SetAdditionalLong(p_stLinkValue,1,lLen); SCR_M_v_Link_SetAdditionalLong(p_stLinkValue,2,ulType); } else /* bizarre*/ { if (ulValue!=SCR_M_ul_Link_GetValue(p_stLinkValue)) { sprintf(szForScript,"%s redefinition in %s",LDT_szGetParam(1),szDefineSection); M_AIFatalErrorMsg(E_uwAIFatalScriptError,szForScript); } } } result=LDT_GetNextEntry(); }/*end while*/ return 0; } /***************************************************************** Name: Description: Create callback for LDT Author: Mircea Petrescu Date: 9/17/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int CreateDEC( LDT_tdst_Link *pLink ) { LDT_SetLinkValue( pLink, (long)p_stLoadedEngineObject ); pLink->pObject=(void *)p_stLoadedMind; return 0; } /***************************************************************** Name: fn_iCreateMacros Description: Create callback for LDT Author: Florin Scantee Date: 8/7/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int fn_iCreateMacros( LDT_tdst_Link *pLink ) { LDT_SetLinkValue(pLink,(long)p_stLoadedMind); return 0; } /***************************************************************** Name: Description: Load callback for LDT Author: Florin Scantee Date: 8/12/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int fn_iLoadMacros( LDT_tdst_Link *pLink ) { char szForScript[256]; char szErrorString[100]; tdstMacro *p_stMacro; int iLen; LDT_tdeParseResult result=ParseResult_BeginSection; AI_tdstMind *p_stLoadedMind=(AI_tdstMind *)LDT_GetLinkValue(pLink); ucInRuleSection=TRUE; /* plus 1 for adding a dummy node at the end of the tree*/ ScriptCounter.uwNbNode=(unsigned short) (atoi(LDT_szGetParam(2))+1); StructCounter.uwNbNode=0; /* allocate Macro*/ p_stMacro = M_GetMacroN(AI_M_p_stGetListOfMacroAIModel(AI_M_p_stGetAIModel(p_stLoadedMind)), atoi(LDT_szGetParam(1))); fn_vAllocNodeMacro(p_stMacro, ScriptCounter.uwNbNode); p_stLoadedNode = M_GetNodeInterpret(M_GetMacroInitTree(p_stMacro)); iLen=LDT_ComputeSectionName(pLink,szForScript); SCR_M_v_Link_SetAdditionalLong(SCR_fnp_st_Link_SetValue(&g_stMacroLinkTable, szForScript, (unsigned long)p_stMacro), 1, iLen ); while( result!=ParseResult_EndSection ) { result=LDT_GetNextEntry(); switch( result ) { case ParseResult_Entry: /* an entry */ { char szAction[MAX_PATH]; unsigned char ucDepth=0; strcpy( szAction, LDT_szGetEntryName() ); if(LDT_iGetNbParams()>=2) ucDepth=(unsigned char) atol(LDT_szGetParam(2)); else { sprintf(szErrorString,"Depth undefined (node %d schedule comport n. %d)\n",StructCounter.uwNbNode, StructCounter.ulNbComport); M_AIFatalErrorMsg(E_uwAIFatalUnknownNode,szErrorString); } if (StructCounter.uwNbNode < ScriptCounter.uwNbNode) { fn_vConvertAndInitNode(szAction, NULL, p_stLoadedNode+StructCounter.uwNbNode, ucDepth); StructCounter.uwNbNode++; } else { sprintf(szErrorString,"Number of nodes in this macro should be (%d)\n", ScriptCounter.uwNbNode); M_AIFatalErrorMsg(E_uwAIFatalBadNodeNumber,szErrorString); } } break; case ParseResult_EndSection: #ifdef __DEBUG_AI__ strcpy ( M_GetNameMacro(p_stMacro), szForScript + iLen ) ; #endif /* add a dummy node at the end of the tree*/ fn_vInitNodeInterpret(p_stLoadedNode+StructCounter.uwNbNode, 0, E_ti_EndTree, 0); StructCounter.uwNbNode++; if (ScriptCounter.uwNbNode!=StructCounter.uwNbNode) { sprintf(szErrorString,"Number of nodes in this macro should be (%d)\n", ScriptCounter.uwNbNode); M_AIFatalErrorMsg(E_uwAIFatalBadNodeNumber,szErrorString); } ucInRuleSection=FALSE; } } return 0; } /***************************************************************** Name: Description: Load callback for LDT Author: Florin Scantee Date: 8/12/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int fn_iLoadListMacros( LDT_tdst_Link *pLink ) { VIG_fn_vAddToProgressBar(1); fn_vAllocListOfMacro(p_stLoadedMind, (unsigned char)atoi( LDT_szGetParam( 1 ) )); return 0; } /***************************************************************** Name: Description: Create callback for LDT Author: Mircea Petrescu Date: 9/14/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int fn_iCreateInitVariables( LDT_tdst_Link *pLink ) { LDT_SetLinkValue( pLink, (unsigned long)(LDT_GetLinkValue( pLink->pParent)) ); return 0; } /***************************************************************** Name: Description: Load callback for LDT Author: Mircea Petrescu Date: 9/14/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int fn_iLoadDelayed( LDT_tdst_Link *pLink ) { char temp[18888], *values; LDT_tdeParseResult result=ParseResult_BeginSection; int iLen=0, iCnt=0, i; short sNbP, sNbE=0; char *pNbE, *szTemp; *(void **)temp=(void *)LDT_GetLinkValue( pLink ); iLen+=sizeof(void *); pNbE=temp+iLen; /* put here the number of entries (including begin section)*/ iLen+=sizeof(short); sNbP=LDT_iGetNbParams(); /* place number of parameters*/ *(short *)(temp+iLen)=sNbP; iLen+=sizeof(short); for( i=1; ipParent->pObject ); return 0; } /***************************************************************** Name: AI_iLoadVariables Description: Load callback for LDT Author: Florin Scantee Date: 8/7/98 Modified: Mircea Petrescu 98/10/02 - fixed values transfer *****************************************************************/ int fn_iLoadVariables( LDT_tdst_Link *pLink ) { int retVal=fn_iLoadDelayed( pLink ); char *szForScript=(char *)LDT_M_malloc( 256 ); int lLen=LDT_ComputeSectionName( pLink, szForScript ); LDT_AddToRefsTable( g_hRefBrain, pLink, iEndCreateVariables, 2, (long)lLen, (long)szForScript ); return retVal; } int fn_iLoadInitVariables( LDT_tdst_Link *pLink ) { int retVal=fn_iLoadDelayed( pLink ); LDT_AddToRefsTable( g_hRefBrain, pLink, iEndInitVariables, 0 ); return retVal; } void PostProcessCreateVariables( LDT_tdst_Link *pLink, long *pVal ) { #if defined(__DEBUG_AI__) char szErrorString[200]; #endif char *szParams[100], *values, *pCrt, *szAction, *szForScriptAll=(char *)pVal[1]; short sNbE, sNbP, i; int lLen=(int)pVal[0]; pCrt=values=(char *)LDT_GetLinkValue( pLink );\ AI_tdstMind *p_stLoadedMind=*(AI_tdstMind **)pCrt; tdstEngineObject *p_stLoadedEngineObject=(tdstEngineObject *)LDT_GetLinkValue(pLink->pParent); pCrt+=sizeof( void * ); sNbE=*(short *)pCrt; pCrt+=sizeof( short ); sNbP=*(short *)pCrt; pCrt+=sizeof( short ); for( i=1; i=M_GetNbDsgVar(p_stLoadedMind)) { sprintf(szErrorString,"Too many variables defined in %s .DEC (cf variable number %d,%s)\n",AI_M_szGetPersoName(p_stLoadedMind),ucVarId,szParams[1]); M_AIFatalErrorMsg(E_uwAIFatalScriptError,szErrorString); } #endif M_GetDsgVarSaveType(p_stLoadedMind,ucVarId) = fn_eFindSaveTypeFromScriptName(szParams[1], AI_M_szGetPersoName(p_stLoadedMind), ucVarId ); } else if (M_IsTypeInitVariable(szAction)) { #if defined(__DEBUG_AI__) if (ucVarId>=M_GetNbDsgVar(p_stLoadedMind)) { sprintf(szErrorString,"Too many variables defined in %s .DEC (cf variable number %d,%s)\n",AI_M_szGetPersoName(p_stLoadedMind),ucVarId,szParams[1]); M_AIFatalErrorMsg(E_uwAIFatalScriptError,szErrorString); } #endif M_GetDsgVarInitType(p_stLoadedMind,ucVarId)=fn_eFindInitTypeFromScriptName(szParams[1]); } else { tdeDsgVarTypeId eDsgVarTypeId=fn_eFindDsgVarTypeIdFromScriptName(szAction); if (!M_IsDsgVarTypeIdValid(eDsgVarTypeId)) { M_AIFatalError(E_uwAIFatalWrongTypeVar); } /* element of an array*/ if (szParams[1][0]=='@') { unsigned char ucIndex=(unsigned char) atoi(szParams[0]); char szDecFilenameSection[300]; tdstEngineObject *p_stEngineObject=p_stLoadedEngineObject; SCR_tdst_Link_Value *p_stLinkValue=NULL; char *szName=&szParams[1][1]; /* to delete @*/ tdeDsgVarTypeId eDsgVarTypeId=fn_eFindDsgVarTypeIdFromScriptName(szAction); if (!M_IsDsgVarTypeIdValid(eDsgVarTypeId)) { M_AIFatalError(E_uwAIFatalWrongTypeVar); } /* build .dec section*/ sprintf(szDecFilenameSection,"%s\\%s\\%s\\%s.dec^%s:%s", fn_szGetFamiliesDataPath(), fn_szFindFamilyTypeNameOfFamilyType(M_ObjectGetFamilyType(p_stLoadedEngineObject)), fn_szFindModelTypeNameOfModelType(M_ObjectGetModelType(p_stLoadedEngineObject)), fn_szFindModelTypeNameOfModelType(M_ObjectGetModelType(p_stLoadedEngineObject)), C_CreateVariables_String, szName ); /* is name known*/ p_stLinkValue = SCR_fnp_st_Link_SearchKey(&g_stDsgVarLinkTable,szDecFilenameSection); if (p_stLinkValue!=NULL) { /* VarId in bounds*/ ucVarId=(unsigned char) SCR_M_ul_Link_GetValue(p_stLinkValue); if (ucVarId=M_GetNbDsgVar(p_stLoadedMind)) { sprintf(szErrorString,"Too many variables defined in %s .DEC (cf variable number %d,%s)\n",AI_M_szGetPersoName(p_stLoadedMind),ucVarId,szParams[1]); M_AIFatalErrorMsg(E_uwAIFatalScriptError,szErrorString); } #endif /* Gamedata\World\Level\_Common\Families\NewEd\NewEd1\NewEd1.dec^CreateVariables*/ /* SCR_M_RdL0_ComputeOpenSectionNameR(0,szForScript);*/ /* NewEd\NewEd1\NewEd1.dec^CreateVariables*/ /* lLen=strlen(szForScript)-strlen(SCR_M_RdL0_GetCompleteSectionNameR(0));*/ strcpy( szForScript, szForScriptAll ); /* add :DsgVarName*/ strcat(szForScript,SCR_CC_sz_Cfg_SectionIdMark); strcat(szForScript,szParams[1]); SCR_M_v_Link_SetAdditionalLong( SCR_fnp_st_Link_SetValue(&g_stDsgVarLinkTable, szForScript, (unsigned long)ucVarId), 1, lLen ); M_SetDsgVarName(p_stLoadedMind,ucVarId,szParams[1]) switch (eDsgVarTypeId) { case eDsgVarType_WayPoint : case eDsgVarType_Perso : case eDsgVarType_Action : case eDsgVarType_Comport : case eDsgVarType_Float : case eDsgVarType_Vector : case eDsgVarType_List : case eDsgVarType_GameMaterial : case eDsgVarType_PersoArray: case eDsgVarType_VectorArray: case eDsgVarType_FloatArray: case eDsgVarType_IntegerArray: case eDsgVarType_WayPointArray: case eDsgVarType_Graph: case eDsgVarType_Caps: case eDsgVarType_Text: case eDsgVarType_TextArray: { M_GetDsgVarOffset(p_stLoadedMind,ucVarId)=ulBeginOffset; /* CAUTION : fn_vInitDsgVarDefault and not fn_vInitDsgVarInit nor fn_vInitDsgVar*/ fn_vInitDsgVarDefault(p_stLoadedMind,ucVarId,eDsgVarTypeId,szParams); if (szParams[2] == NULL) ulBeginOffset+=fn_ulSizeOfDsgVar(eDsgVarTypeId, 0); else ulBeginOffset+=fn_ulSizeOfDsgVar(eDsgVarTypeId,(unsigned char) atoi(szParams[2])); /* check buffer overflow*/ #if defined(__DEBUG_AI__) if (ulBeginOffset>M_GetDsgVarSize(p_stLoadedMind)) { sprintf(szErrorString,"Allocated buffer for DsgMem is too small in %s .DEC (cf variable number %d,%s)\n",AI_M_szGetPersoName(p_stLoadedMind),ucVarId,szParams[1]); M_AIFatalErrorMsg(E_uwAIFatalScriptError,szErrorString); } #endif } break; default : { if (szParams[2] == NULL) ulEndOffset-=fn_ulSizeOfDsgVar(eDsgVarTypeId, 0); else ulEndOffset-=fn_ulSizeOfDsgVar(eDsgVarTypeId,(unsigned char) atoi(szParams[2])); /* check buffer overflow*/ #if defined(__DEBUG_AI__) if (ulEndOffset<0) { sprintf(szErrorString,"Allocated buffer for DsgMem is too small in %s .DEC (cf variable number %d,%s)\n",AI_M_szGetPersoName(p_stLoadedMind),ucVarId,szParams[1]); M_AIFatalErrorMsg(E_uwAIFatalScriptError,szErrorString); } #endif M_GetDsgVarOffset(p_stLoadedMind,ucVarId)=ulEndOffset; /* CAUTION : fn_vInitDsgVarDefault and not fn_vInitDsgVarInit nor fn_vInitDsgVar*/ fn_vInitDsgVarDefault(p_stLoadedMind,ucVarId,eDsgVarTypeId,szParams); } break; } /* Switch*/ } } } #if defined(__DEBUG_AI__) if /*(ulEndOffset != ulBeginOffset)*/ (ulBeginOffset>ulEndOffset) { sprintf(szErrorString,"Allocated buffer for DsgMem corrupted in %s .DEC\n",AI_M_szGetPersoName(p_stLoadedMind)); M_AIFatalErrorMsg(E_uwAIFatalScriptError,szErrorString); } #endif LDT_M_free( values ); } void PostProcessInitVariables( LDT_tdst_Link* pLink ) { char *szParams[100], *values, *pCrt, *szAction; short sNbE, sNbP, i; pCrt=values=(char *)LDT_GetLinkValue( pLink ); /*p_stLoadedMind=*(AI_tdstMind **)pCrt;*/ pCrt+=sizeof( void * ); sNbE=*(short *)pCrt; pCrt+=sizeof( short ); sNbP=*(short *)pCrt; pCrt+=sizeof( short ); for( i=1; ipObject; p_stLoadedEngineObject=(tdstEngineObject *)LDT_GetLinkValue( pLink ); p_stLoadedMind=M_pstGetMindOfBrain((MS_tdxHandleToBrain)p_stLoadedEngineObject->h_Brain); p_stLoadedScriptAI=(tdstScriptAI *)pGetFrom->pObject; AI_M_p_stGetIntelligenceScriptAIModel(p_stLoadedAIModel)=p_stLoadedScriptAI; #if defined(__DEBUG_AI__) || defined(ACTIVE_1STPASS_CHECKING) fn_vCheckScriptAI(p_stLoadedMind,p_stLoadedScriptAI); #endif } break; case iEndReflexModel: { p_stLoadedAIModel=(AI_tdstAIModel *)pLink->pObject; p_stLoadedEngineObject=(tdstEngineObject *)LDT_GetLinkValue( pLink ); p_stLoadedMind=M_pstGetMindOfBrain((MS_tdxHandleToBrain)p_stLoadedEngineObject->h_Brain); p_stLoadedScriptAI=(tdstScriptAI *)pGetFrom->pObject; AI_M_p_stGetReflexScriptAIModel(p_stLoadedAIModel)=p_stLoadedScriptAI; #if defined(__DEBUG_AI__) || defined(ACTIVE_1STPASS_CHECKING) fn_vCheckScriptAI(p_stLoadedMind,p_stLoadedScriptAI); #endif } break; case iEndCreateVariables: PostProcessCreateVariables( pLink, pVal ); LDT_FreeRefValues( pVal ); break; case iEndAIModel: { AI_tdstAIModel *p_stLoadedAIModel=(AI_tdstAIModel *)pGetFrom->pObject; tdstEngineObject *p_stLoadedEngineObject=(tdstEngineObject *)pLink->pParent->pObject; AI_tdstMind *p_stLoadedMind=M_pstGetMindOfBrain((MS_tdxHandleToBrain)p_stLoadedEngineObject->h_Brain); p_p_stScriptAI=&AI_M_p_stGetIntelligenceScriptAIModel(p_stLoadedAIModel); if (*p_p_stScriptAI!=NULL) { AI_M_SetIntelligence(p_stLoadedMind, fn_p_stAllocIntelligence( p_p_stScriptAI, M_GetScriptAIActionTableNbEntry(*p_p_stScriptAI) ) ); } /* Alloc 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_stAllocIntelligence( p_p_stScriptAI, M_GetScriptAIActionTableNbEntry(*p_p_stScriptAI) ) ); } AI_M_SetAIModel(p_stLoadedMind,p_stLoadedAIModel); /* il faut allouer DsgMem si il y a des variables designer*/ if ( AI_M_p_stGetDsgVar(p_stLoadedMind)!=NULL) { if (M_GetDsgVarSize(p_stLoadedMind)!=0) { AI_M_p_stGetDsgMem(p_stLoadedMind)=fn_p_stAllocDsgMem(&AI_M_p_stGetDsgVar(p_stLoadedMind),M_GetDsgVarSize(p_stLoadedMind) ); } } } break; case iEndInitVariables: { p_stLoadedEngineObject = (struct tdstEngineObject_ *)pLink->pParent->pParent->pObject; p_stLoadedMind=M_pstGetMindOfBrain((MS_tdxHandleToBrain)p_stLoadedEngineObject->h_Brain); PostProcessInitVariables( pLink ); } break; case iEndComportIntell: { p_stLoadedMind=M_pstGetMindOfBrain((MS_tdxHandleToBrain)pLink->pParent->pObject); tdstIntelligence *p_stIntelligence; unsigned long ulNoComportInit = (unsigned long )(*pVal); p_stIntelligence=AI_M_p_stGetIntelligence(p_stLoadedMind); if(p_stIntelligence) M_GetNoComportInit(p_stIntelligence) = ulNoComportInit; #if defined(__DEBUG_AI__) else { #if defined(ACTIVE_1STPASS_CHECKING) if(cErrorInInitComportReflex == 0) { cErrorInInitComportReflex = 1; sprintf(szForErrorStringAt1stPass,"There is an initial Reflex in .CAR but no reflex in model in %s",AI_M_szGetPersoName(p_stLoadedMind)); M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningScriptError,C_ucErmOpenInfoWindow,szForErrorStringAt1stPass); } AI_M_ucErrorFlag(p_stLoadedMind)=1; fn_vForceEditor(); #else sprintf(szForErrorStringAt1stPass,"There is an initial Reflex in .CAR but no reflex in model in %s",AI_M_szGetPersoName(p_stLoadedMind)); M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError,C_ucErmOpenInfoWindow,szForErrorStringAt1stPass); #endif /* ACTIVE_1STPASS_CHECKING*/ } #endif LDT_FreeRefValues(pVal); } break; case iEndComportReflex: { p_stLoadedMind=M_pstGetMindOfBrain((MS_tdxHandleToBrain)pLink->pParent->pObject); tdstIntelligence *p_stIntelligence; unsigned long ulNoComportInit = (unsigned long )(*pVal); p_stIntelligence=AI_M_p_stGetReflex(p_stLoadedMind); if(p_stIntelligence) M_GetNoComportInit(p_stIntelligence) = ulNoComportInit; #if defined(__DEBUG_AI__) else { #if defined(ACTIVE_1STPASS_CHECKING) if(cErrorInInitComportReflex == 0) { cErrorInInitComportReflex = 1; sprintf(szForErrorStringAt1stPass,"There is an initial Reflex in .CAR but no reflex in model in %s",AI_M_szGetPersoName(p_stLoadedMind)); M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningScriptError,C_ucErmOpenInfoWindow,szForErrorStringAt1stPass); } AI_M_ucErrorFlag(p_stLoadedMind)=1; fn_vForceEditor(); #else sprintf(szForErrorStringAt1stPass,"There is an initial Reflex in .CAR but no reflex in model in %s",AI_M_szGetPersoName(p_stLoadedMind)); M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError,C_ucErmOpenInfoWindow,szForErrorStringAt1stPass); #endif /* ACTIVE_1STPASS_CHECKING*/ } #endif LDT_FreeRefValues(pVal); } break; } } } /***************************************************************** Name: Description: Load callback for LDT Author: Mircea Petrescu Date: 9/14/98 Modified: Ovidiu Scripa *****************************************************************/ int fn_iLoadComportReflex( LDT_tdst_Link *pLink ) { LDT_tdeParseResult result=ParseResult_BeginSection; char szForScript[_MAX_PATH], sz1[_MAX_PATH], sz2[_MAX_PATH], sz3[_MAX_PATH]; unsigned long ulNoComportInit; /*p_stLoadedMind=M_pstGetMindOfBrain((MS_tdxHandleToBrain)pLink->pParent->pObject);*/ strcpy(szForScript,fn_szGetFamiliesDataPath()); strcat(szForScript,"\\"); if( LDT_iGetNbParams()==4 ) { SCR_tdst_Link_Value *p_stLinkValue; strcpy( sz1, LDT_szGetParam(1) ); strcpy( sz2, LDT_szGetParam(2) ); strcpy( sz3, LDT_szGetParam(3) ); SCR_fn_v_RdL0_ComputeSectionName( szForScript+strlen(szForScript), sz1, sz2, sz3); p_stLinkValue = SCR_fnp_st_Link_CreateOrGetLinkFromKey(&g_stComportLinkTable, szForScript); SCR_M_v_Link_SetAdditionalLong(p_stLinkValue, 4, 0); ulNoComportInit = (unsigned long)p_stLinkValue; } else { char szFileName[_MAX_PATH]; SCR_tdst_Link_Value *p_stLinkValue; fn_v_File_ComputeFileSectionName(LDT_szGetParam(1),szFileName,szForScript+strlen(szForScript)); p_stLinkValue = SCR_fnp_st_Link_CreateOrGetLinkFromKey(&g_stComportLinkTable, szForScript); SCR_M_v_Link_SetAdditionalLong(p_stLinkValue, 4, 0); ulNoComportInit = (unsigned long) p_stLinkValue; } LDT_AddToRefsTable( g_hRefBrain, pLink, iEndComportReflex, 1, ulNoComportInit ); while( result!=ParseResult_EndSection ) { result=LDT_GetNextEntry(); } return 0; } /***************************************************************** Name: Description: Load callback for LDT Author: Mircea Petrescu Date: 9/14/98 Modified: Ovidiu Scripa *****************************************************************/ int fn_iLoadComportIntell( LDT_tdst_Link *pLink ) { LDT_tdeParseResult result=ParseResult_BeginSection; char szForScript[_MAX_PATH], sz1[_MAX_PATH], sz2[_MAX_PATH], sz3[_MAX_PATH]; unsigned long ulNoComportInit; /*p_stLoadedMind=M_pstGetMindOfBrain((MS_tdxHandleToBrain)pLink->pParent->pObject);*/ strcpy(szForScript,fn_szGetFamiliesDataPath()); strcat(szForScript,"\\"); if( LDT_iGetNbParams()==4 ) { SCR_tdst_Link_Value *p_stLinkValue; strcpy( sz1, LDT_szGetParam(1) ); strcpy( sz2, LDT_szGetParam(2) ); strcpy( sz3, LDT_szGetParam(3) ); SCR_fn_v_RdL0_ComputeSectionName( szForScript+strlen(szForScript), sz1, sz2, sz3); p_stLinkValue = SCR_fnp_st_Link_CreateOrGetLinkFromKey(&g_stComportLinkTable, szForScript); SCR_M_v_Link_SetAdditionalLong(p_stLinkValue, 4, 0); ulNoComportInit = (unsigned long)p_stLinkValue; } else { char szFileName[_MAX_PATH]; SCR_tdst_Link_Value *p_stLinkValue; fn_v_File_ComputeFileSectionName(LDT_szGetParam(1),szFileName,szForScript+strlen(szForScript)); p_stLinkValue = SCR_fnp_st_Link_CreateOrGetLinkFromKey(&g_stComportLinkTable, szForScript); SCR_M_v_Link_SetAdditionalLong(p_stLinkValue, 4, 0); ulNoComportInit = (unsigned long) p_stLinkValue; } LDT_AddToRefsTable( g_hRefBrain, pLink, iEndComportIntell, 1, ulNoComportInit ); while( result!=ParseResult_EndSection ) { result=LDT_GetNextEntry(); } return 0; }