reman3/Rayman_X/cpa/tempgrp/GAM/P5/tblLoadCB.c

473 lines
15 KiB
C

#if defined (WIN32)
#include <stdio.h>
#endif /* WIN32 */
/* to be Friend*/
#define D_ObjsTbls_Define
#define D_State_Define
#include "ToolsCPA.h"
#include "Sna.h"
#include "Options/Options.h"
#include "Macros.h"
#include "Actions/AllActs.h"
#include "Structur/3DOSLkTb.h"
#include "Structur/Objects.h"
#include "Structur/ErrGame.h"
#include "Structur/GameScpt.h"
#include "Structur/MemGame.h"
#include "Structur/StdObjSt.h"
#include "Structur/EngMode.h"
#include "ObjType.h"
#include "Basic.h"
#include "Family.h"
#include "ZeMem.h"
#include "Structur/ObjsTbls.h"
#include "TBLLoad.h"
#include "Structur/anim_s.h"
#include "ldt.h"
#define lTagVersionNumber 'sreV'
#define lTagMaximumIndex 'ixaM'
#define lTagDuplicate 'lpuD'
#define lTagPHY 'HP'
#define lTagMIRROR 'RRIM'
#define lTagLipsSynchro 'spiL'
#define lTagCustomZoom 'tsuC'
#define lTagObjectType 'ejbO'
#define lTagGenericEvent 'eneG'
#define lTagFirstCall 'sriF'
#define lTagPeriod 'ireP'
#define lTagPriority 'oirP'
#define lTagSoundEvent 'nuoS'
/* global for TBL Link Table*/
extern SCR_tdst_Link_Table TBL_g_stLinkTable;
HREF g_hRefTBL;
#define iTBLGeneral 1
/*****************************************************************
Function name : fn_iCreateTBLFile
Description : call-back for header section of TBL script file
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int fn_iCreateTBLFile( LDT_tdst_Link *pLink ) /* for .tbl files*/
{
MMG_fn_vAddMemoryInfo( MMG_C_lTypeFamily , MMG_C_lSubTypeTBLList , 0 );
pLink->pObject = (void*)fn_hObjectsTablesListAlloc();
return 0;
}
/*****************************************************************
Function name : fn_iLoadTBLHeader
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int fn_iLoadTBLHeader( LDT_tdst_Link *pLink )
{
LDT_tdeParseResult result=ParseResult_BeginSection;
char szSectionName[_MAX_PATH];
tdxHandleToObjectsTablesList h_ObjectsTablesListElement = (tdxHandleToObjectsTablesList)pLink->pParent->pObject;
LDT_SetFileLong(10, 0); /* flag Duplicate*/
while( result!=ParseResult_EndSection )
{
result=LDT_GetNextEntry();
switch( result )
{
case ParseResult_Entry: /* an entry */
{
char *szEntry=LDT_szGetEntryName();
switch (*(long*)szEntry)
{
case lTagVersionNumber : /* VersionNumber */
{
/* not used yet*/
/*gs_wTBLFileVersion = (short)atoi(LDT_szGetParam(1));*/
}
break;
case lTagMaximumIndex : /* MaximumIndex */
{
MMG_fn_vBeginMemoryInfo( MMG_C_lTypeFamily , MMG_C_lSubTypeTBLElement , h_ObjectsTablesListElement );
fn_vObjectsTablesAlloc(h_ObjectsTablesListElement, (unsigned short)atoi(LDT_szGetParam(1)) );
MMG_fn_vEndMemoryInfo();
strcpy (szSectionName, fn_szGetFamiliesDataPath());
strcat(szSectionName, "\\");
strcat(szSectionName, pLink->szFile);
SCR_fnp_st_Link_SetValue(&TBL_g_stLinkTable, szSectionName, (unsigned long)h_ObjectsTablesListElement);
h_ObjectsTablesListElement -> wZDxUsed = 0; /* For the moment, no Zdd and no Zde*/
}
break;
case lTagDuplicate : /* Duplicate */
{
LDT_SetFileLong(10, 1); /* flag Duplicate*/
}
break;
}
}
}
}
return 0;
}
/*****************************************************************
Function name : fn_iLoadTBLGeneral
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int fn_iLoadTBLGeneral( LDT_tdst_Link *pLink )
{
LDT_tdeParseResult result=ParseResult_BeginSection;
long l_NumberInTable;
tdxHandleToObjectsTablesList h_ObjectsTablesListElement = (tdxHandleToObjectsTablesList)pLink->pParent->pObject;
long l_FlagDuplicate;
/* static int i = 0;*/
/* char s[180], s1[300];*/
l_NumberInTable = atoi(LDT_szGetSectionName());
pLink->pObject = pLink->pParent->pObject;
l_FlagDuplicate = LDT_GetFileLong(10);
/* LDT_ComputeSectionName( pLink , s1 );*/
/* i++;*/
/* sprintf(s, "%d.%s\n", i, s1);*/
/* OutputDebugString(s);*/
while( result!=ParseResult_EndSection )
{
result=LDT_GetNextEntry();
switch( result )
{
case ParseResult_Entry: /* an entry */
{
char *szEntry=LDT_szGetEntryName();
if ( *(short *)szEntry == lTagPHY )
{
PO_tdxHandleToPhysicalObject hPO;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].wTypeOfTarget = C_wTdO_PhysicalObject;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].h_Target = hPO = CS_fn_xLoadPhysicalObject(LDT_szGetParam(1));
LDT_AddToRefsTable( g_hRefTBL, (void *)pLink, iTBLGeneral, 2, l_FlagDuplicate, hPO );
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].uwChannelNumber=255;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].ucPhoneme=255;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].ucIntensity=255;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].ucExpression=255;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].p_stCustomZoom=NULL;
#ifdef _DEBUG
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].wCounter=0;
#endif
}
else if ( *(long *)szEntry == lTagMIRROR)
{
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].wTypeOfTarget = C_wTdO_Mirror;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].h_Target = CS_fn_xLoadPhysicalObject(LDT_szGetParam(1));
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].uwChannelNumber=255;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].ucPhoneme=255;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].ucIntensity=255;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].ucExpression=255;
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].p_stCustomZoom=NULL;
#ifdef _DEBUG
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].wCounter=0;
#endif
}
else if ( *(long *)szEntry == lTagLipsSynchro)
{
char * szP2;
MMG_fn_vAddMemoryInfo( MMG_C_lTypeFamily , MMG_C_lSubTypeTBLElement , h_ObjectsTablesListElement );
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].uwChannelNumber=(unsigned long)TMP_M_p_Malloc(strlen(LDT_szGetParam(1))+1);
strcpy((char *)h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].uwChannelNumber, LDT_szGetParam(1));
szP2 = LDT_szGetParam(2);
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].ucPhoneme=(unsigned char)(szP2[0]-'A');
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].ucIntensity=(unsigned char)atoi(LDT_szGetParam(3));
if (!stricmp("Neutral", LDT_szGetParam(4)))
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].ucExpression=0;
#ifdef _DEBUG
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].wCounter=0;
#endif
}
else if ( *(long *)szEntry == lTagCustomZoom)
{
float f0,f4,f8;
f0 = (float)atof(LDT_szGetParam(1));
f4 = (float)atof(LDT_szGetParam(5));
f8 = (float)atof(LDT_szGetParam(9));
if( f0!=1.0f || f4!=1.0f || f8!=1.0f )
{
MMG_fn_vAddMemoryInfo( MMG_C_lTypeFamily , MMG_C_lSubTypeTBLElement , h_ObjectsTablesListElement );
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].p_stCustomZoom = (MTH3D_tdstVector *)M_p_GameMallocInHLM(sizeof(struct MTH3D_tdstVector_));
MTH3D_M_vSetVectorElements(h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].p_stCustomZoom, f0, f4, f8);
}
}
}
}
}
return 0;
}
/*****************************************************************
Function name : fn_vTBLPostProcessLDT
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : void
Argument : HREF hRef
*****************************************************************/
void fn_vTBLPostProcessLDT( HREF hRef )
{
LDT_tdst_Link *pLink;
LDT_tdst_Link *pGetFrom;
int iType;
short xCount;
long *pVal;
while( LDT_GetRefFromTable( hRef, &pLink, &pGetFrom, &iType, &xCount, &pVal )==0 )
{
switch( iType )
{
case iTBLGeneral:
{
tdxHandleToObjectsTablesList h_ObjectsTablesListElement = (tdxHandleToObjectsTablesList)pLink->pObject;
PO_tdxHandleToPhysicalObject hPO = (PO_tdxHandleToPhysicalObject)pVal[1];
if (PO_fn_hGetCollideSet (hPO))
{
if (PCS_fn_hGetGeoObjOfPhysicalCollSet (C_ucTypeZdd , PO_fn_hGetCollideSet (hPO)))
h_ObjectsTablesListElement->wZDxUsed |= C_wObjectTableHasZdd;
if (PCS_fn_hGetGeoObjOfPhysicalCollSet (C_ucTypeZde , PO_fn_hGetCollideSet (hPO)))
h_ObjectsTablesListElement->wZDxUsed |= C_wObjectTableHasZde;
}
if((long)(*pVal))
fn_vDuplicateObjectTable(h_ObjectsTablesListElement);
LDT_FreeRefValues(pVal);
}
break;
}
}
}
extern HREF hRefCSB;
void fn_PostProcess1CSB(HREF hRefCSB);
extern struct tdstEventInTable_* GAM_fn_p_stCreateEventInTBL();
/*****************************************************************
Function name : fn_iLoadTBLEvent
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int fn_iLoadTBLEvent( LDT_tdst_Link *pLink )
{
LDT_tdeParseResult result=ParseResult_BeginSection;
tdxHandleToObjectsTablesList h_ObjectsTablesListElement = (tdxHandleToObjectsTablesList)pLink->pParent->pObject;
long l_NumberInTable;
tdstEventInTable* p_stEvent;
l_NumberInTable = atoi(LDT_szGetSectionName());
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].wTypeOfTarget=C_wTdO_Event;
MMG_fn_vAddMemoryInfo( MMG_C_lTypeFamily , MMG_C_lSubTypeTBLElement , h_ObjectsTablesListElement );
p_stEvent = GAM_fn_p_stCreateEventInTBL();
h_ObjectsTablesListElement->d_stObjectsTable[l_NumberInTable-1].h_Target=(void*)p_stEvent;
while( result!=ParseResult_EndSection )
{
result=LDT_GetNextEntry();
switch( result )
{
case ParseResult_Entry: /* an entry */
{
char *szEntry=LDT_szGetEntryName();
switch (*(long*)szEntry)
{
case lTagObjectType : /* ObjectType */
{
if (!stricmp("GenericEvent",LDT_szGetParam(1)))
{
p_stEvent->ucTypeOfEvent=C_ucGENERIC_EVENT;
}
else if(!stricmp("MechanicEvent",LDT_szGetParam(1)))
{
p_stEvent->ucTypeOfEvent=C_ucMECHANIC_EVENT;
}
else if(!stricmp("SoundEvent",LDT_szGetParam(1)))
{
p_stEvent->ucTypeOfEvent=C_ucSOUND_EVENT;
}
else if(!stricmp("GenerateEvent",LDT_szGetParam(1)))
{
p_stEvent->ucTypeOfEvent=C_ucGENERATE_EVENT;
}
}
break;
case lTagGenericEvent : /* GenericEvent */
{
long lEvent;
char * szP1 = LDT_szGetParam(1);
lEvent=(long)p_stEvent->p_xEvent;
if (!strcmp(szP1,"TakeObjectEvent"))
{
lEvent|=C_ucTAKE_OBJECT_EVENT;
}
else
if (!strcmp(szP1,"TakeInObjectEvent"))
{
lEvent|=C_ucTAKE_IN_OBJECT_EVENT;
}
else
if (!strcmp(szP1,"TakeOutObjectEvent"))
{
lEvent|=C_ucTAKE_OUT_OBJECT_EVENT;
}
else
if (!strcmp(szP1,"DropObjectEvent"))
{
lEvent|=C_ucDROP_OBJECT_EVENT;
}
else
if (!strcmp(szP1,"ThrowObjectEvent"))
{
lEvent|=C_ucTHROW_OBJECT_EVENT;
}
else if ( (strncmp( szP1,"User", 4 ) == 0) && (szP1[5] == 0) )
{
unsigned char ucUserEvent;
ucUserEvent = (unsigned char) (szP1[4] - '0');
if (ucUserEvent < 8)
lEvent |= (unsigned char) (C_ucEvent_User0 + ucUserEvent);
}
p_stEvent->p_xEvent=(void*)lEvent;
}
break;
case lTagFirstCall : /* FirstCall */
{
p_stEvent->ucFirstCall = (unsigned char)atoi(LDT_szGetParam(1));
}
break;
case lTagPeriod : /* Period */
{
p_stEvent->ucPeriod = (unsigned char)atoi(LDT_szGetParam(1));
}
break;
case lTagPriority : /* Priority */
{
p_stEvent->ucPriority = (unsigned char)atoi(LDT_szGetParam(1));
}
break;
case lTagSoundEvent : /* SoundEvent */
{
LDT_LoadSection(LDT_szGetParam(1));
LDT_AddToRefsTable(hRefCSB,pLink,1,1,p_stEvent);
/* -> OS : THIS CODE SHOULD BE CHANGED 27-Aug-98 (is not used)*/
/* SCR_tdst_Cxt_Values* p_stValue;*/
/**/
/* p_stValue=SCR_fnp_st_RdL0_AnalyseSection(LDT_szGetParam(1), SCR_CDF_uw_Anl_Normal);*/
/* p_stEvent->p_xEvent=(void*)SCR_M_ul_RdL0_ExtractLongValue(p_stValue, 0);*/
/* p_stEvent->ulBinaryEventId=SCR_M_ul_RdL0_ExtractLongValue(p_stValue, 1); // used for the binarisation only*/
/* <- OS : THIS CODE SHOULD BE CHANGED 27-Aug-98*/
/* we save the id of the sound event and the pointer on the structure that contains the id and the pointer of the sound event */
/* SNA_fn_vWriteSoundEntryInSoundTableFile(SND_fn_ulGetEventBinIdFromPointer(p_stEvent->p_xEvent),(unsigned long)p_stEvent);*/
/* p_stEvent->ulBinaryEventId=SND_fn_ulGetEventBinIdFromPointer(p_stEvent->p_xEvent);*/
}
break;
}
}
}
}
return 0;
}
/*BEGIN FS 10/7/98*/
void fn_PostProcess1CSB(HREF hRefCSB)
{
tdstEventInTable* p_stEvent;
int iType=1;
short shCount=1;
long *pVal;
LDT_tdst_Link *pObj, *pGetFrom;
while (!(LDT_GetRefFromTable(hRefCSB, &pObj, &pGetFrom, &iType, &shCount, &pVal )))
{
switch(iType)
{
case 10:
SND_fn_bEndLoadBanks();
break;
case 1:
p_stEvent=(tdstEventInTable*)pVal[0];
LDT_FreeRefValues(pVal);
p_stEvent->p_xEvent=(void*)pGetFrom->pObject;
p_stEvent->ulBinaryEventId=(unsigned long)LDT_RemoveLinkValue(pGetFrom); /* used for the binarisation only*/
SNA_fn_vWriteSoundEntryInSoundTableFile(SND_fn_ulGetEventBinIdFromPointer(p_stEvent->p_xEvent),(unsigned long)p_stEvent);
p_stEvent->ulBinaryEventId=SND_fn_ulGetEventBinIdFromPointer(p_stEvent->p_xEvent);
}
}
}
/*END FS 10/7/98*/