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

938 lines
29 KiB
C

#if defined (WIN32)
#include <direct.h>
#endif /* WIN32 */
#define D_Dynam_StructureDefine
#include "ToolsCPA.h"
#include "Main.h"
#include "Options/Options.h"
#include "macros.h"
#include "Main.h"
#include "Actions/AllActs.h"
#include "Structur/3DOSLkTb.h"
#include "Structur/GameScpt.h"
#include "Structur/ErrGame.h"
#include "Structur/MemGame.h"
#include "Structur/StdObjSt.h"
#include "Structur/EngMode.h"
#include "Structur/Objects.h"
#include "PlayAnim/PlayAnim.h"
#include "Engine.h"
#include "Always.h"
#include "Basic.h"
#include "DspFix.h"
#include "Family.h"
#include "GameEng.h"
#include "GamSave.h"
#include "ia_dnm.h"
#include "InitEng.h"
#include "LoadAni.h"
#include "LoadFml.h"
#include "LoadLvl.h"
#include "MainChar.h"
#include "micros.h"
#include "ObjInit.h"
#include "ObjType.h"
#include "Zemem.h"
#include "LoadBin.h"
#include "TBLLoad.h"
#include "CHLLoad.h"
#include "Structur/Anim_s.h"
#include "toolmatr.h"
#include "AlwAct.h"
#include "LoadGame.h"
#include "options\Specif\SubMapPs.h"
#ifndef U64
#include "sna.h"
/*
extern tdstEngineObject *g_a20_stSNAObjectsInFix[20];
extern unsigned long g_ulSNANbObjectsInFix;
*/
#endif
/* ANNECY AV DEMO {*/
#ifndef U64
#include "Specif/Demos.h"
#endif
/* END ANNECY AV }*/
#ifdef ACTIVE_EDITOR
extern ACP_tdxBool g_bUseSAIWithEditor;
#endif /* ACTIVE_EDITOR */
#include "ldt.h"
/* need for game installations with no sound on hard drive*/
extern int g_iSoundOnHD;
#define lTagNumberOfAlways 'bmuN'
#define lTagLoadSoundEvent 'daoL'
#define lTagBeginMapSoundEvent 'igeB'
#define lTagLinkCharacter 'tcar'
#define lTagMatrixTranslation 'snar'
#define lTagMatrixRotation 'tato'
#define lTagMatrixScale 'elac'
#define lTagInitialState 'tatS'
#define lTagCharacterIsAlwaysActive 'sIre'
#define lTagCharacterFlags 'lFre'
#define lTagTransparency 'cner'
#define lTagLinkCharacter2 'kniL'
#define lTagInitialState2 'tinI'
HREF g_hRefCharacters1;
HREF g_hRefCharacters2;
HREF g_hRefCharacters3;
HREF g_hRefCharacters4;
HREF g_hRefAlways;
/*****************************************************************
Function name : fn_iCreateLevelDescription
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int fn_iCreateLevelDescription( LDT_tdst_Link *pLink )
{
g_bBeginMapSoundEventFlag = FALSE;
return 0;
}
/*****************************************************************
Function name : fn_iLoadLevelDescription
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int fn_iLoadLevelDescription( LDT_tdst_Link *pLink )
{
LDT_tdeParseResult result=ParseResult_BeginSection;
SND_tduRefEvt stSndThemeEvent;
if ( SNA_M_bTestSaveLevelDesc() )
SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ul_LevelDscTitle );
while( result!=ParseResult_EndSection )
{
result=LDT_GetNextEntry();
switch( result )
{
case ParseResult_Entry: /* an entry */
{
char *szEntry=LDT_szGetEntryName();
switch (*(long*)szEntry)
{
case lTagNumberOfAlways : /* */
{
g_stAlways.ulMaxNumberOfAlways = atoi(LDT_szGetParam(1));
if ( SNA_M_bTestSaveLevelDesc() )
SNA_fn_vWriteLongEntryToCurrentDscFile( SNA_C_ul_NumberOfAlways, atoi(LDT_szGetParam(1)) );
}
break;
case lTagLoadSoundEvent : /* */
{
/* OS NOTE : never get here*/
#ifndef U64
if (g_iSoundOnHD)
#endif
{
/* play theme while level loading only if the sound is on the Hard Drive*/
/* Load theme event for this level:*/
stSndThemeEvent.pstPtr=(SND_tdstBlockEvent *)LDT_LoadSection(LDT_szGetParam(1));
/* OS NOTE : this should be moved in postprocess ???*/
SND_fn_lSendRequestSound(/*C_SOUNDOBJECT_MUSIC*/SND_C_OBJET_FANTOME,g_lSoundObjectTypeMusic,stSndThemeEvent,0/*prio*/,NULL/*Proc=NULL*/);
}
}
break;
case lTagBeginMapSoundEvent : /* */
{
/* OS NOTE : never get here*/
g_stBeginMapSoundEvent.pstPtr=(SND_tdstBlockEvent *)LDT_LoadSection(LDT_szGetParam(1));
g_bBeginMapSoundEventFlag = TRUE;
}
break;
}
}
}
}
if ( SNA_M_bTestSaveLevelDesc() )
SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ulEndOfDescSection );
return 0;
}
/*****************************************************************
Function name : fn_iCreateCharacters
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int fn_iCreateCharacters( LDT_tdst_Link *pLink ) /* CB for 'InsertCharacter' section of '.lvl' files*/
{
pLink->pObject = NULL;
return 0;
}
/*****************************************************************
Function name : fn_iLoadCharacters
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int fn_iLoadCharacters( LDT_tdst_Link *pLink )
{
LDT_tdeParseResult result=ParseResult_BeginSection;
HIE_tdxHandleToSuperObject h_SupObject = (HIE_tdxHandleToSuperObject)pLink->pObject;
tdstEngineObject *p_stEngineObject = NULL;
int nNoP, i;
char *szParam;
char g_szCharacterSection[MAX_PATH];
ACP_tdxBool g_bMainCharacter,g_bMainCamera;
ACP_tdxBool g_bLaunchingSound;
nNoP = LDT_iGetNbParams();
g_bLaunchingSound = g_bMainCharacter = g_bMainCamera = FALSE;
for (i = 1; i < nNoP; i++)
{
szParam = LDT_szGetParam(i);
if( !g_bMainCharacter )
if( stricmp(szParam,C_LevelPrincipalCharacter) == 0 )
{ g_bMainCharacter = TRUE; continue; }
if( !g_bLaunchingSound )
if( stricmp(szParam,C_LevelCharacterLauchingSounds) == 0 ||
stricmp(szParam,C_LevelCharacterLaunchingSounds) == 0 )
{ g_bLaunchingSound = TRUE; continue; }
if( !g_bMainCamera )
if( stricmp(szParam,C_LevelStandardCamera) == 0 )
g_bMainCamera = TRUE;
}
while( result!=ParseResult_EndSection )
{
result=LDT_GetNextEntry();
switch( result )
{
case ParseResult_Entry: /* an entry */
{
char *szEntry=LDT_szGetEntryName();
switch (*(long*)(szEntry+7))
{
case lTagLinkCharacter : /* */
{
VIG_fn_vAddToProgressBar(1);
strcpy( g_szCharacterSection, LDT_szGetParam(1));
/* Chars in the fix are created here (actually only a part of the creation is done).*/
if( GAM_fn_bIsEngineInFixMode() )
{
/* Here is where FIX's chars are created*/
h_SupObject=HIE_fn_hCreateSuperObject();
pLink->pObject = (void*)h_SupObject;
/* ANNECY AV DEMO {*/
/* DEMO_fn_vPutCharacterInList (h_SupObject);*/
/* END ANNECY AV }*/
/* Rq : it's useless to set the SectionLong with this handle, */
/* because the current section is in Game.fix and we need to access */
/* the handle at level loading time...*/
/* Parse char scripts and create it's engine object.*/
p_stEngineObject=(tdstEngineObject *)LDT_LoadSection(LDT_szGetParam(1));
LDT_AddToRefsTable( g_hRefCharacters1, (void *)pLink, 0, 0 );
}
}
break;
case lTagMatrixTranslation : /* */
{
if (!GAM_fn_bIsEngineInFixMode())
{
char *szCharacterSection = (char*)LDT_M_malloc(MAX_PATH);
MTH3D_tdstVector* stTempMatrixTranslation = (MTH3D_tdstVector*)LDT_M_malloc(sizeof(MTH3D_tdstVector));
HIE_tdxHandleToSuperObject h_SOSector;
strcpy(szCharacterSection, g_szCharacterSection);
/* ANNECY MT - 08/09/98 {*/
if( (fn_lGetSubMapNumber()!=0) && g_stEngineStructure.bResurection && (g_bMainCamera || g_bMainCharacter))
{
if(g_bMainCamera)
POS_fn_vGetTranslationVector(&g_stEngineStructure.stMainCameraPosition, stTempMatrixTranslation);
else if(g_bMainCharacter)
POS_fn_vGetTranslationVector(&g_stEngineStructure.stMainCharacterPosition, stTempMatrixTranslation);
}
else
{
MTH3D_M_vSetVectorElements(stTempMatrixTranslation,
(float)atof (LDT_szGetParam(1)), (float)atof (LDT_szGetParam(2)), (float)atof (LDT_szGetParam(3)) );
}
/* END ANNECY MT }*/
/**/
h_SOSector=SECT_fn_hResearchInWhatSectorIAm(SECT_hFatherSector, stTempMatrixTranslation);
p_stEngineObject=(tdstEngineObject *)LDT_LoadSection(g_szCharacterSection);
LDT_AddToRefsTable( g_hRefCharacters2, (void *)pLink, 1, 5, stTempMatrixTranslation, g_bMainCharacter, g_bMainCamera, g_bLaunchingSound, szCharacterSection);
}
}
break;
case lTagMatrixRotation : /* */
{
MTH3D_tdstVector *stTempRotationVX, *stTempRotationVY, *stTempRotationVZ;
stTempRotationVX = (MTH3D_tdstVector*)LDT_M_malloc(sizeof(MTH3D_tdstVector));
stTempRotationVY = (MTH3D_tdstVector*)LDT_M_malloc(sizeof(MTH3D_tdstVector));
stTempRotationVZ = (MTH3D_tdstVector*)LDT_M_malloc(sizeof(MTH3D_tdstVector));
if( (fn_lGetSubMapNumber()!=0) && g_stEngineStructure.bResurection && (g_bMainCamera || g_bMainCharacter))
{
if(g_bMainCamera)
POS_fn_vGetRotationMatrix(&g_stEngineStructure.stMainCameraPosition,stTempRotationVX,stTempRotationVY,stTempRotationVZ);
else if(g_bMainCharacter)
POS_fn_vGetRotationMatrix(&g_stEngineStructure.stMainCharacterPosition,stTempRotationVX,stTempRotationVY,stTempRotationVZ);
}
else
{
MTH3D_M_vSetVectorElements(stTempRotationVX,
(float)atof (LDT_szGetParam(1)), (float)atof (LDT_szGetParam(2)), (float)atof (LDT_szGetParam(3)) );
MTH3D_M_vSetVectorElements(stTempRotationVY,
(float)atof (LDT_szGetParam(4)), (float)atof (LDT_szGetParam(5)), (float)atof (LDT_szGetParam(6)) );
MTH3D_M_vSetVectorElements(stTempRotationVZ,
(float)atof (LDT_szGetParam(7)), (float)atof (LDT_szGetParam(8)), (float)atof (LDT_szGetParam(9)) );
}
LDT_AddToRefsTable( g_hRefCharacters3, (void *)pLink, 2, 3, stTempRotationVX, stTempRotationVY, stTempRotationVZ);
}
break;
case lTagMatrixScale : /* */
{
MTH3D_tdstVector *stTempScaleVX, *stTempScaleVY, *stTempScaleVZ;
stTempScaleVX = (MTH3D_tdstVector*)LDT_M_malloc(sizeof(MTH3D_tdstVector));
stTempScaleVY = (MTH3D_tdstVector*)LDT_M_malloc(sizeof(MTH3D_tdstVector));
stTempScaleVZ = (MTH3D_tdstVector*)LDT_M_malloc(sizeof(MTH3D_tdstVector));
if( (fn_lGetSubMapNumber()!=0) && g_stEngineStructure.bResurection && (g_bMainCamera || g_bMainCharacter))
{
if(g_bMainCamera)
POS_fn_vGetScaleMatrix(&g_stEngineStructure.stMainCameraPosition,stTempScaleVX,stTempScaleVY,stTempScaleVZ);
else if(g_bMainCharacter)
POS_fn_vGetScaleMatrix(&g_stEngineStructure.stMainCharacterPosition,stTempScaleVX,stTempScaleVY,stTempScaleVZ);
}
else
{
MTH3D_M_vSetVectorElements(stTempScaleVX,
(float)atof (LDT_szGetParam(1)), (float)atof (LDT_szGetParam(2)), (float)atof (LDT_szGetParam(3)) );
MTH3D_M_vSetVectorElements(stTempScaleVY,
(float)atof (LDT_szGetParam(4)), (float)atof (LDT_szGetParam(5)), (float)atof (LDT_szGetParam(6)) );
MTH3D_M_vSetVectorElements(stTempScaleVZ,
(float)atof (LDT_szGetParam(7)), (float)atof (LDT_szGetParam(8)), (float)atof (LDT_szGetParam(9)) );
}
LDT_AddToRefsTable( g_hRefCharacters3, (void *)pLink, 3, 3, stTempScaleVX, stTempScaleVY, stTempScaleVZ);
}
break;
case lTagInitialState : /* */
{
if (!GAM_fn_bIsEngineInFixMode())
{
char *szP1 = (char*)LDT_M_malloc(_MAX_PATH);
strcpy(szP1, LDT_szGetParam(1));
LDT_AddToRefsTable( g_hRefCharacters3, (void *)pLink, 4, 1, szP1);
}
}
break;
case lTagCharacterIsAlwaysActive : /* */
{
if (!GAM_fn_bIsEngineInFixMode())
{
LDT_AddToRefsTable( g_hRefCharacters3, (void *)pLink, 5, 0);
}
}
break;
case lTagCharacterFlags : /* */
{
if (!GAM_fn_bIsEngineInFixMode())
{
unsigned long ulFlags;
ulFlags = atol( LDT_szGetParam(1) );
ulFlags &= ~HIE_C_Flag_ulSuperimposed;
LDT_AddToRefsTable( g_hRefCharacters3, (void *)pLink, 6, 1, ulFlags);
/*HIE_fn_SO_vSetFlags(h_SupObject, ulFlags);*/
}
}
break;
case lTagTransparency : /* */
{
float* fTransparenceLevel = (float*)LDT_M_malloc(sizeof(float));
*fTransparenceLevel = (float) atof( LDT_szGetParam(1) ) ;
LDT_AddToRefsTable( g_hRefCharacters3, (void *)pLink, 7, 1, fTransparenceLevel);
/*HIE_fn_vSetSuperObjectTransparenceLevel( h_SupObject, (float) atof( LDT_szGetParam(1) ) );*/
}
break;
}
}
}
}
if (!GAM_fn_bIsEngineInFixMode())
{
LDT_AddToRefsTable( g_hRefCharacters4, (void *)pLink, 6, 1, p_stEngineObject);
}
return 0;
}
/*****************************************************************
Function name : fn_vCharactersPostProcessLDT1
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : void
Argument : HREF hRef
*****************************************************************/
void fn_vCharactersPostProcessLDT1( 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 )
{
HIE_tdxHandleToSuperObject h_SupObject = (HIE_tdxHandleToSuperObject)pLink->pObject;
tdstEngineObject *p_stEngineObject = (tdstEngineObject *)pGetFrom->pObject;
HIE_fn_vSetSuperObjectObjectAndType(h_SupObject,(void *)p_stEngineObject,HIE_C_ulActor);
M_SetSuperObject(p_stEngineObject, h_SupObject);
/* Actors have zoom instead of scale*/
HIE_fn_SO_vSetFlags (h_SupObject, HIE_fn_SO_ulGetFlags (h_SupObject) | HIE_C_Flag_ulZoomInsteadOfScale);
HIE_fn_vSetSuperObjectMatrix(h_SupObject,fn_p_st3dDataGetMatrix(M_GetMSHandle(h_SupObject,3dData)));
SNA_g_stFixInfo.a20_stObjects[SNA_g_stFixInfo.ulNbObject]=p_stEngineObject;
SNA_g_stFixInfo.ulNbObject++;
}
}
/*****************************************************************
Function name : fn_vCharactersPostProcessLDT2
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : void
Argument : HREF hRef
*****************************************************************/
void fn_vCharactersPostProcessLDT2( 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 1:
{
tdstEngineObject *p_stEngineObject = (tdstEngineObject *)(pGetFrom->pObject);
MTH3D_tdstVector* stTempMatrixTranslation = (MTH3D_tdstVector*)(pVal[0]);
ACP_tdxBool bMainCharacter = (ACP_tdxBool)(pVal[1]);
ACP_tdxBool bMainCamera = (ACP_tdxBool)(pVal[2]);
ACP_tdxBool bLaunchingSound = (ACP_tdxBool)(pVal[3]);
char *szCharacterSection = (char*)(*(pVal+4));
HIE_tdxHandleToSuperObject h_SupObject;
/* Get the SuperObject of the EngineObject.*/
h_SupObject=M_GetSuperObject(p_stEngineObject);
/* Test if SuperObject has already been created*/
/* (if so, char is in the fix (good),or is loaded twice in a level(bad!)).*/
if( ! h_SupObject )
{
/* SuperObject does not exists, create it and do the init*/
/* Here is where LEVEL's chars are created*/
h_SupObject=HIE_fn_hCreateSuperObject();
/* ANNECY AV DEMO {*/
/* DEMO_fn_vPutCharacterInList (h_SupObject);*/
/* END ANNECY AV }*/
HIE_fn_vSetSuperObjectObjectAndType(h_SupObject,(void *)p_stEngineObject,HIE_C_ulActor);
M_SetSuperObject(p_stEngineObject,h_SupObject);
/* Actors have zoom instead of scale*/
HIE_fn_SO_vSetFlags (h_SupObject, HIE_fn_SO_ulGetFlags (h_SupObject) | HIE_C_Flag_ulZoomInsteadOfScale);
}
pLink->pObject = (void*)h_SupObject;
if ( fn_ucStandardGameGetPlatFormType(M_GetMSHandle(h_SupObject,StandardGame)) )
{
HIE_fn_vSuperObjectAddHead(gp_stDynamicWorld,h_SupObject);
}
else
{
HIE_fn_vSuperObjectAddTail(gp_stDynamicWorld,h_SupObject);
}
HIE_fn_vSetSuperObjectMatrix(h_SupObject,fn_p_st3dDataGetMatrix(M_GetMSHandle(h_SupObject,3dData)));
POS_fn_vSetTranslationVector(fn_p_st3dDataGetMatrix(M_GetMSHandle(h_SupObject,3dData)),stTempMatrixTranslation);
/* Now take care of its flags defined in the title :*/
if( bMainCharacter )
MC_fn_vAddCharacterInMainCharacterList(h_SupObject);
if( bLaunchingSound )
fn_vSectInfoSetCharacterLauchingEvents( h_SupObject );
if( bMainCamera )
g_stEngineStructure.h_StdCamCaracter = h_SupObject;
LDT_M_free(stTempMatrixTranslation);
LDT_M_free(szCharacterSection);
LDT_FreeRefValues( pVal );
}
break;
}
}
}
/*****************************************************************
Function name : fn_vCharactersPostProcessLDT3
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : void
Argument : HREF hRef
*****************************************************************/
void fn_vCharactersPostProcessLDT3( 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 )
{
HIE_tdxHandleToSuperObject h_SupObject = (HIE_tdxHandleToSuperObject)pLink->pObject;
switch (iType)
{
case 2:
{
MTH3D_tdstVector *stTempRotationVX, *stTempRotationVY, *stTempRotationVZ;
stTempRotationVX = (MTH3D_tdstVector*)(*pVal);
stTempRotationVY = (MTH3D_tdstVector*)(*(pVal+1));
stTempRotationVZ = (MTH3D_tdstVector*)(*(pVal+2));
POS_fn_vSetRotationMatrix(fn_p_st3dDataGetMatrix(M_GetMSHandle(h_SupObject,3dData)),
stTempRotationVX,stTempRotationVY,stTempRotationVZ ) ;
LDT_M_free(stTempRotationVX);
LDT_M_free(stTempRotationVY);
LDT_M_free(stTempRotationVZ);
LDT_FreeRefValues( pVal );
}
break;
case 3:
{
MTH3D_tdstVector *stTempScaleVX, *stTempScaleVY, *stTempScaleVZ;
stTempScaleVX = (MTH3D_tdstVector*)(*pVal);
stTempScaleVY = (MTH3D_tdstVector*)(*(pVal+1));
stTempScaleVZ = (MTH3D_tdstVector*)(*(pVal+2));
POS_fn_vSetScaleMatrix (fn_p_st3dDataGetMatrix(M_GetMSHandle(h_SupObject,3dData)),
stTempScaleVX,stTempScaleVY,stTempScaleVZ ) ;
LDT_M_free(stTempScaleVX);
LDT_M_free(stTempScaleVY);
LDT_M_free(stTempScaleVZ);
LDT_FreeRefValues( pVal );
}
break;
case 4:
{
char *szP1 = (char*)(*pVal);
char szCompletFileName[_MAX_PATH];
SCR_tdst_Link_Value *p_xIndex;
strcpy(szCompletFileName,fn_szGetFamiliesDataPath());
strcat(szCompletFileName,"\\");
strcat(szCompletFileName, szP1);
p_xIndex = SCR_fnp_st_Link_SearchKey(&g_st3DOSLinkTable.stState,szCompletFileName);
if (p_xIndex!=NULL&&p_xIndex->eState==SCR_ELS_Link_Initialized)
fn_v3dDataSetInitialState(M_GetMSHandle(h_SupObject,3dData),(tdxHandleToState)(p_xIndex->ulValue));
LDT_M_free(szP1);
LDT_FreeRefValues( pVal );
}
break;
case 5:
{
fn_vAddCharacterInAlwaysActiveCharacterList(h_SupObject);
}
break;
case 6:
{
HIE_fn_SO_vSetFlags(h_SupObject, (unsigned long)(*pVal));
LDT_FreeRefValues( pVal );
}
break;
case 7:
{
float *fTransparenceLevel = (float*)(*pVal);
HIE_fn_vSetSuperObjectTransparenceLevel( h_SupObject, *fTransparenceLevel);
LDT_M_free(fTransparenceLevel);
LDT_FreeRefValues( pVal );
}
}
}
}
/*****************************************************************
Function name : fn_vCharactersPostProcessLDT4
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : void
Argument : HREF hRef
*****************************************************************/
void fn_vCharactersPostProcessLDT4( 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 )
{
HIE_tdxHandleToSuperObject h_SupObject = (HIE_tdxHandleToSuperObject)pLink->pObject;
tdstEngineObject *p_stEngineObject = (tdstEngineObject *)(*pVal);
POS_fn_vUpdateMatrixType( fn_p_st3dDataGetMatrix(M_GetMSHandle(h_SupObject,3dData)) );
LDT_FreeRefValues(pVal);
}
}
/*****************************************************************
Function name : fn_iLoadLevelAlways
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int fn_iLoadLevelAlways( LDT_tdst_Link *pLink )
{
LDT_tdeParseResult result=ParseResult_BeginSection;
tdstEngineObject *p_stEngineObject = NULL;
while( result!=ParseResult_EndSection )
{
result=LDT_GetNextEntry();
switch( result )
{
case ParseResult_Entry: /* an entry */
{
char *szEntry=LDT_szGetEntryName();
switch (*(long*)szEntry)
{
case lTagLinkCharacter2 : /* */
{
VIG_fn_vAddToProgressBar(1);
p_stEngineObject=(tdstEngineObject *)LDT_LoadSection(LDT_szGetParam(1));
LDT_AddToRefsTable( g_hRefAlways, (void *)pLink, 0, 1, p_stEngineObject);
}
break;
case lTagInitialState2 : /* */
{
char* szP1 = (char*)LDT_M_malloc(_MAX_PATH);
strcpy(szP1, LDT_szGetParam(1));
LDT_AddToRefsTable( g_hRefAlways, (void *)pLink, 1, 2, szP1, p_stEngineObject);
}
break;
}
}
}
}
return 0;
}
/*****************************************************************
Function name : fn_vAlwaysPostProcessLDT
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 13-Oct-98
Modified :
Return type : void
Argument : HREF hRef
*****************************************************************/
void fn_vAlwaysPostProcessLDT( 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 0:
{
tdstEngineObject *p_stEngineObject=(tdstEngineObject *)(*pVal);
if( !fn_ucIsAnAlwaysModel( p_stEngineObject ) )
fn_vAddAnAlwaysModel(p_stEngineObject);
if( GAM_fn_bIsEngineInFixMode() )
{
SNA_g_stFixInfo.a20_stObjects[SNA_g_stFixInfo.ulNbObject]=p_stEngineObject;
SNA_g_stFixInfo.ulNbObject++;
SNA_g_stFixInfo.h_LastAlwaysInTheFix = LST2_M_DynamicGetLastElement(&(g_stAlways.ALW_h_LstAlwaysModel));
}
LDT_FreeRefValues(pVal);
}
break;
case 1:
{
char *szP1 = (char*)(*pVal);
char szCompletFileName[_MAX_PATH];
SCR_tdst_Link_Value *p_xIndex;
tdstEngineObject *p_stEngineObject=(tdstEngineObject *)(*(pVal+1));
strcpy(szCompletFileName,fn_szGetFamiliesDataPath());
strcat(szCompletFileName,"\\");
strcat(szCompletFileName, szP1);
p_xIndex = SCR_fnp_st_Link_SearchKey(&g_st3DOSLinkTable.stState,szCompletFileName);
if (p_xIndex!=NULL&&p_xIndex->eState==SCR_ELS_Link_Initialized)
fn_v3dDataSetInitialState(p_stEngineObject->h_3dData, (tdxHandleToState)(p_xIndex->ulValue));
LDT_M_free(szP1);
LDT_FreeRefValues( pVal );
}
break;
}
}
}
extern HREF hRefCSB;
/*BEGIN FS 9/11/98*/
/*----------------------------------------------------------------------
* Description: callback for LevelSoundBank from .FIX sript file
*----------------------------------------------------------------------
* Input:
* Output:
*----------------------------------------------------------------------
* Author: FS
* Creation date:9/11/98
* Modif date:
*----------------------------------------------------------------------*/
int LoadLevelSoundBank( LDT_tdst_Link *pLink )
{
LDT_tdeParseResult result=ParseResult_BeginSection;
char *szEntryName;
int iBankId;
/* int iLoadSoundBankBlocks;*/
/*Working for BeginSection*/
/* gs_ucLoadCondSoundBlocksFlag = TRUE;*/
if (SNA_M_bTestSaveGameDesc() || SNA_M_bTestSaveLevelDesc())
SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ul_LevelDscLevelSoundBanks );
SND_fn_bStartLoadBanks();
/* Working for Entries*/
result=LDT_GetNextEntry();
while( result!=ParseResult_EndSection )
{
if (result!=ParseResult_BeginSection)
{ /*Entries*/
szEntryName=LDT_szGetEntryName();
switch (*(long*)(szEntryName+4/*+"Load"*/))
{
case 'paM': /*"LoadMap"*/
if (SCR_fn_c_RdL0_IsSectionExists(LDT_szGetParam(1)))
{
LDT_LoadSection(LDT_szGetParam(1));
if ( SNA_M_bTestSaveGameDesc() || SNA_M_bTestSaveLevelDesc() )
{
SNA_fn_vWriteStringEntryToCurrentDscFile(SNA_C_ul_LevelLoadMap,LDT_szGetParam(1));
}
}
break;
case 'nuoS': /*"LoadSoundBank"*/
iBankId=atoi(LDT_szGetParam(1));
if ( SNA_M_bTestSaveGameDesc() || SNA_M_bTestSaveLevelDesc() )
{
SNA_fn_vWriteLongEntryToCurrentDscFile(SNA_C_ul_LevelLoadSoundBank,(long)iBankId);
}
SND_fn_bInitBank(iBankId);
break;
}/*end switch*/
}
else
{ /*SubSection*/
szEntryName=LDT_szGetEntryName();
switch (*(long*)(szEntryName))
{
case 'nuoS': /*"SoundBanksBlock" -- not used*/
LDT_LoadSection(NULL);
}/*end switch*/
}
result=LDT_GetNextEntry();
}/*end while*/
/*Working for EndSection*/
if ( SNA_M_bTestSaveGameDesc() || SNA_M_bTestSaveLevelDesc() )
SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ulEndOfDescSection );
LDT_AddToRefsTable( hRefCSB, pLink, 10, 0);
return 0;
}
/*END FS 9/11/98*/
/*BEGIN FS 9/11/98*/
/*----------------------------------------------------------------------
* Description: callback for LevelSoundBankBlock section from .FIX sript file
*----------------------------------------------------------------------
* Input:
* Output:
*----------------------------------------------------------------------
* Author: FS
* Creation date:9/11/98
* Modif date:
*----------------------------------------------------------------------*/
int LoadLevelSoundBankBlock( LDT_tdst_Link *pLink )
{
LDT_tdeParseResult result=ParseResult_BeginSection;
char *szEntryName;
int iBlockValue,iBankId;
/*Working for BeginSection*/
iBlockValue=atoi(LDT_szGetParam(1));
/* Working for Entries*/
result=LDT_GetNextEntry();
while( result!=ParseResult_EndSection )
{
szEntryName=LDT_szGetEntryName();
switch (*(long*)(szEntryName))
{
case 'daoL': /*"LoadSoundBank"*/
iBankId=atoi(LDT_szGetParam(1));
SND_fn_bInitBank(iBankId);
break;
}/*end switch*/
result=LDT_GetNextEntry();
}/*end while*/
return 0;
}
/*END FS 9/11/98*/