1200 lines
41 KiB
C
1200 lines
41 KiB
C
/*=========================================================================
|
|
* InitEng.c : Contain all engine initialized functions
|
|
* This is a part of the Game project.
|
|
*
|
|
* Version 1.0
|
|
* Creation date 20/08/96
|
|
* Revision date
|
|
*
|
|
* That file needs to be compatible for all platforms.
|
|
*
|
|
* (c) Ubi Studios 1996
|
|
*=======================================================================*/
|
|
/*
|
|
*=======================================================================
|
|
Modifications: New LST_M_??? Macros / Michaël / 070297
|
|
*=======================================================================*/
|
|
|
|
#include "Options/Options.h"
|
|
#define D_Micro_StructureDefine
|
|
#define D_StdGame_StructureDefine
|
|
|
|
#if defined (GAM_USE_SCRIPT)
|
|
#define AI_USE_SCRIPT
|
|
#endif /* GAM_USE_SCRIPT*/
|
|
|
|
#include "ToolsCPA.h"
|
|
|
|
#include "AI/AIBase/ReadRule.h"
|
|
|
|
#include "AI/AIBase/WPWayPt.h"
|
|
|
|
#include "Options/Opt_Info.h"
|
|
#include "Macros.h"
|
|
|
|
#include "actions\MS_micro.h"
|
|
|
|
#include "Actions/AllActs.h"
|
|
|
|
#include "Structur/3DOSLkTb.h"
|
|
#include "Structur/EngMode.h"
|
|
#include "Structur/ErrGame.h"
|
|
#include "Structur/MemGame.h"
|
|
#include "Structur/Input_S.h"
|
|
#include "structur/Objects.h"
|
|
#include "Structur/StdObjSt.h"
|
|
#include "Structur/GameScpt.h"
|
|
#include "Structur/State.h"
|
|
|
|
|
|
#include "Main.h"
|
|
|
|
#include "Always.h"
|
|
#include "Basic.h"
|
|
#include "Clock.h"
|
|
#include "DspFix.h"
|
|
#include "Family.h"
|
|
#include "GameEng.h"
|
|
#include "GamOpt.h"
|
|
#include "GamSave.h"
|
|
/*#include "GamExtra.h"*/
|
|
#include "InitEng.h"
|
|
#include "Input.h"
|
|
#include "LoadAni.h"
|
|
|
|
#define C_A3BOFF "CPA_A3BOFF"
|
|
|
|
/*#include "LoadBin.h"*/
|
|
|
|
#include "LoadGame.h"
|
|
#include "LoadLvl.h"
|
|
#include "MainChar.h"
|
|
#include "ObjInit.h"
|
|
#include "ObjType.h"
|
|
#include "ZdxStuff.h"
|
|
#include "ZeMem.h"
|
|
#include "Toolcam.h"
|
|
#include "Effect.h"
|
|
|
|
#include "Micros.h"
|
|
|
|
#include "PlayAnim/PlayAnim.h"
|
|
#include "TBLLoad.h"
|
|
#include "CHLLoad.h"
|
|
|
|
#include "Typecam.h"
|
|
|
|
#include "Structur/Anim_s.h"
|
|
/*#include "LoadA3b.h"*/
|
|
|
|
/*XB980824*/
|
|
#ifndef D_THROW_MGT
|
|
#include "MGT.h"
|
|
#endif /* D_THROW_MGT */
|
|
/*End XB*/
|
|
|
|
/* 007*/
|
|
#include "GLD.h"
|
|
#ifdef GAM_USE_SNA
|
|
#include "SNA.h"
|
|
|
|
#define D_IPT_Input_StructureDefine
|
|
#ifdef USE_IPT_DX5
|
|
#include "INO_DX5.h"
|
|
#include "IPT_DX5.h" /* InPuT (absolutely before GAM.h)*/
|
|
#include "ipt_dx5\ipt_kdef.h"
|
|
#include "ipt_dx5\ipt_str.h"
|
|
#else /* USE_IPT_WIN */
|
|
#include "INO.h"
|
|
#include "IPT.h" /* InPuT (absolutely before GAM.h)*/
|
|
#include "ipt\ipt_kdef.h"
|
|
#include "ipt\ipt_str.h"
|
|
#endif /* USE_IPT_WIN */
|
|
#undef D_IPT_Input_StructureDefine
|
|
#include "PlayAnim/Interpol/a3x_mem.h"
|
|
#include "PlayAnim/Interpol/a3x_glob.h"
|
|
|
|
#include "locale\fonfont.h"
|
|
|
|
#endif /* GAM_USE_SNA */
|
|
#if (!defined(U64))
|
|
#include "tex.h"
|
|
#endif /* !U64 */
|
|
#include "ia_dnm.h"
|
|
|
|
#include "Actions/AllActs.h"
|
|
#include "structur/Objects.h"
|
|
|
|
#include "textfrmt.h"
|
|
|
|
#include "LSMem.h"
|
|
#include "LipsSync.h"
|
|
#include "LoadLSyn.h"
|
|
#ifdef GAM_USE_SNA
|
|
#include "sna\SNAsyn.h"
|
|
#endif /* GAM_USE_SNA */
|
|
|
|
#ifdef ACTIVE_EDITOR
|
|
/* use SAI save with editors */
|
|
ACP_tdxBool g_bUseSAIWithEditor=FALSE;
|
|
#endif /* ACTIVE_EDITOR */
|
|
|
|
#include "AGO.h"
|
|
|
|
#include "PRF.h"
|
|
#if (defined(USE_PROFILER) && !defined(PRESS_DEMO) && !defined(U64))
|
|
extern void GAM_fn_vRasterDisplayInit ();
|
|
extern void GAM_fn_vRasterDumpInit ();
|
|
extern void GAM_fn_vRasterDumpReset ();
|
|
extern void GAM_fn_vRasterDumpDesInit ();
|
|
#endif /* USE_PROFILER && PRESS_DEMO && !U64 */
|
|
|
|
/* XB 23/06/99 */
|
|
#ifdef U64
|
|
#include "ldd.h"
|
|
#endif /* U64 */
|
|
/* XB 23/06/99 */
|
|
|
|
|
|
/* XB 05/05/99 */
|
|
extern void GAM_fn_vLoadInitialAnimations(void);
|
|
extern void CAM_fn_vForceBestPosition(HIE_tdxHandleToSuperObject _hCamera);
|
|
#ifdef U64
|
|
#include "..\..\TempGrp\INO\Specif\u_demo.h"
|
|
#endif /* U64 */
|
|
/* End XB */
|
|
|
|
#ifndef U64
|
|
#include "PTC.h"
|
|
#endif
|
|
|
|
extern struct tdstIndexMicrosList_ g_stIndexMicrosList;
|
|
|
|
extern HIE_tdxHandleToSuperObject g_hCharacterLauchingSoundEvents;
|
|
|
|
#ifdef RETAIL
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC 04/06/99 */
|
|
struct tdst_EntryActions_ st_Tmp_3DOS_EntryActions;
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC 04/06/99 */
|
|
|
|
#endif /* RETAIL */
|
|
|
|
|
|
#ifdef GAM_VIGNETTE
|
|
extern struct VIG_tdstVignetteStructure_ *VIG_g_aDEF_pstVignetteTable[VIG_C_lVignetteMaxNb];
|
|
extern ACP_tdxIndex VIG_g_xVignetteNb;
|
|
#endif /* GAM_VIGNETTE */
|
|
|
|
extern GEO_tdxHandleToMatrix HIE_g_a_hMatrixStack[HIE_C_lMaxMatrixInStack];
|
|
extern long HIE_g_lNbMatrixInStack ;
|
|
extern struct VIG_tdstVignetteStructure_ *p_stBackGround;
|
|
|
|
extern ACP_tdxHandleOfMaterial g_hShadowPolygonVisualMaterial;
|
|
extern GMT_tdxHandleToGameMaterial g_hShadowPolygonGameMaterialInit;
|
|
extern GMT_tdxHandleToGameMaterial g_hShadowPolygonGameMaterial;
|
|
extern GLI_tdstTexture *g_p_stTextureOfTextureShadow;
|
|
|
|
extern ACP_tdxHandleOfElement g_p_hHandleOfElementForShadow[SHW_C_xNbMaxOfShadows];
|
|
extern ACP_tdxHandleOfObject p_hHandleOfGeometricShadowObject[SHW_C_xNbMaxOfShadows];
|
|
|
|
/* ANNECY AV DEMO {*/
|
|
#ifndef U64
|
|
#include "Specif/Demos.h"
|
|
extern DEMO_tdxHandleToDemoSOList g_hDemoSOList;
|
|
extern DEMO_tdxHandleToDemoGMTList g_hDemoGMTFixList;
|
|
extern DEMO_tdxHandleToDemoGMTList g_hDemoGMTLevelList;
|
|
#endif
|
|
/* END ANNECY AV }*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_
|
|
ACP_tdxBool g_xA3bOff=FALSE;
|
|
#endif /* _FIRE_DEADCODE_U64_ */
|
|
|
|
/*extern ACP_tdxBool g_bUseBinaryData;*/
|
|
|
|
/*extern HIE_tdxHandleToSuperObject g_hLoadedSuperObjectRoot;*/
|
|
#ifndef U64
|
|
HIE_tdxHandleToSuperObject g_hLoadedSuperObjectRoot=NULL;
|
|
#endif
|
|
|
|
BOOL bFirst=TRUE;
|
|
|
|
ACP_tdxBool g_bBeginMapSoundEventFlag=FALSE; /* for sound*/
|
|
extern void MOR_fn_vRemoveAllMorphedObjects (void);
|
|
|
|
|
|
#if !defined(U64) && defined(_DEBUG)
|
|
extern unsigned char g_ucSlowDownEngine;
|
|
extern unsigned char g_ucSlowDownTime;
|
|
#endif /* !U64 && _DEBUG */
|
|
|
|
extern POS_tdstCompletePosition *POS_g_p_stIdentityMatrix;
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_
|
|
|
|
#if defined(GAM_USE_SNA)
|
|
|
|
/**
|
|
* GuS (14/09/98)
|
|
* Init all objects in the fix.
|
|
* This is normally done later by InitAllObjectWhenMapJustLoaded()
|
|
* but we need to do the init BEFORE saving those objets.
|
|
*/
|
|
void fn_vInitObjectsInTheFix()
|
|
{
|
|
unsigned long ulI;
|
|
|
|
for( ulI=0; ulI<SNA_g_stFixInfo.ulNbObject; ulI++ )
|
|
{
|
|
fn_vInitOneObject(SNA_g_stFixInfo.a20_stObjects[ulI],OTI_WhenGameStart);
|
|
fn_vAllSecondPassAreDone( SNA_g_stFixInfo.a20_stObjects[ulI]->h_StandardGame );
|
|
}
|
|
}
|
|
|
|
void fn_vSaveFix(BOOL bFixLevel)
|
|
{
|
|
|
|
int i;
|
|
|
|
char szFileName[255];
|
|
char szLevelSnapshotFilename[_MAX_PATH];
|
|
|
|
SNA_fn_vSetSaveLoadFix();
|
|
|
|
/* FIX.SNA : binary data for the fix*/
|
|
sprintf(szLevelSnapshotFilename,"%s\\Fix.sna",fn_szGetLevelsDataPath());
|
|
if (bFixLevel)
|
|
{
|
|
GLI_vEndofGeometricLoad();
|
|
/* Save the blocks defined in the array "ucModuleBlocToAvoidFixGlide" in SNA\Snammg.c*/
|
|
SNA_fn_vWriteAllMemoryBlocks(szLevelSnapshotFilename);
|
|
}
|
|
{
|
|
/* Fix.ptx: file of the global pointers used in GLI for the textures*/
|
|
sprintf(szLevelSnapshotFilename,"%s\\Fix.ptx",fn_szGetLevelsDataPath());
|
|
TEX_SetNameOfBinaryFile((unsigned char *)szLevelSnapshotFilename);
|
|
|
|
/* Fix.gpt: file of the global pointers */
|
|
sprintf(szFileName,"%s\\Fix.gpt",fn_szGetLevelsDataPath());
|
|
SNA_fn_xWriteOpenGlobalPointersFile(szFileName);
|
|
|
|
/* Save the address of the identity matrix in Fix.gpt*/
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long)POS_g_p_stIdentityMatrix);
|
|
|
|
/* Save the content of the matrix stack and the number of matrix in the stack*/
|
|
for (i=0;i<HIE_C_lMaxMatrixInStack;i++)
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) HIE_g_a_hMatrixStack[i]);
|
|
SNA_fn_vWriteStructureInGlobalPointersFile((unsigned long *)&HIE_g_lNbMatrixInStack,4);
|
|
|
|
/* Save two global pointers used in Collision */
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long)g_hCollisionGeoObj);
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long)g_hStaticCollisionGeoObj);
|
|
|
|
/* Gus 13/08/98 : Ecriture structure IPT (touches de cheat & de tests)*/
|
|
/* Sans doute a enlever dans la version finale.(touches de test & de cheats)*/
|
|
/* Save the IPT struct used for the cheat codes */
|
|
SNA_fn_vWriteStructureInGlobalPointersFile( &g_st_3DOS_EntryActions, sizeof(g_st_3DOS_EntryActions) );
|
|
|
|
/* Save the address of the structur sed for the defination of key and pad buttons */
|
|
SNA_fn_vWritePointerInGlobalPointersFile( (unsigned long)IPT_gd_hKeyAndPadDefine );
|
|
/* Save the IPT struct used for the defination of key and pad buttons */
|
|
SNA_fn_vWriteStructureInGlobalPointersFile( &IPT_g_hInputStructure, sizeof( struct IPT_tdstInput_ ) );
|
|
SNA_fn_vWritePointerInGlobalPointersFile( (unsigned long)IPT_g_hInputStructure.d_stEntryElementArray );
|
|
|
|
/* GuS 14/08/98 : Texts*/
|
|
/* Save the FON struct that contains all texts*/
|
|
SNA_fn_vWriteStructureInGlobalPointersFile( &FON_g_stGeneral, sizeof( struct FON_tdstGeneral_ ) );
|
|
|
|
/* Save stack infos for all stacks in anim player.*/
|
|
SNA_fn_vWriteArrayWithoutPointerInGlobalPointersFile( tdstStacks, eStackNbMax, sizeof(tdstStackInfos) );
|
|
/* Save stack pointers for anims.*/
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_stA3dGENERAL );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_a3_xVectors );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_a4_xQuaternions );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_stHierarchies );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_stNTTO );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_stOnlyFrames );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_stChannels );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_stFrames );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_stFramesKF );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_stKeyFrames );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_stEvents );
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) p_stMorphData );
|
|
|
|
/* Save the position of the last always in the fix in the always model list.*/
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) SNA_g_stFixInfo.h_LastAlwaysInTheFix );
|
|
|
|
/* Save DEMO GMT List */
|
|
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) g_hDemoGMTFixList);
|
|
|
|
/* Close Fix.snd*/
|
|
SNA_fn_vCloseSoundTableFile();
|
|
/* Close Fix.sna*/
|
|
SNA_fn_vCloseGlobalPointersFile();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
extern SNA_fn_vInitBigFile();
|
|
|
|
void fn_vLoadFix()
|
|
{
|
|
/* Load the binary data in the same order as they are saved in fn_vSaveFix*/
|
|
char szFileName[_MAX_PATH],szLevelSnapshotFilename[_MAX_PATH];
|
|
int i;
|
|
FIL_tdxHandleToFileNameList hLevelNameList;
|
|
#ifdef USE_IPT_DX5
|
|
void *p_vDummy , *p_vDummy2 , *p_vDummy3;
|
|
unsigned char ucDummy , ucDummy2 ;
|
|
#endif /* USE_IPT_DX5 */
|
|
|
|
hLevelNameList=g_stEngineStructure.hLevelNameList;
|
|
|
|
SNA_fn_vInitBigFile();
|
|
/* ANNECY OA - 12/07/99 { */
|
|
/* Load dummy datas : for protections */
|
|
SNA_M_LoadUnusedRelocationTable();
|
|
/* END ANNECY OA } */
|
|
|
|
sprintf(szLevelSnapshotFilename,"%s\\Fix.sna",fn_szGetLevelsDataPath());
|
|
|
|
SNA_M_vSetNextRelocationFileToLoad( 255, SNA_C_ucSNARelocationTable );
|
|
SNA_fn_bReadAllMemoryBlocks(szLevelSnapshotFilename);
|
|
|
|
/* ANNECY OA - 12/07/99 { */
|
|
/* Load dummy datas : for protections */
|
|
SNA_M_LoadUnusedRelocationTable();
|
|
/* END ANNECY OA } */
|
|
|
|
SNA_M_vSetNextRelocationFileToLoad( 255, SNA_C_ucGlobalPointersRelocationTable );
|
|
sprintf(szFileName,"%s\\Fix.gpt",fn_szGetLevelsDataPath());
|
|
SNA_fn_xReadOpenGlobalPointersFile(szFileName);
|
|
|
|
POS_g_p_stIdentityMatrix=(POS_tdstCompletePosition *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
POS_g_p_stIdentityMatrix->ulType = POS_C_ulIdentityMatrixFlag;
|
|
MTH3D_M_vNullVector(&(POS_g_p_stIdentityMatrix->stTranslationVector));
|
|
MTH3D_M_vSetIdentityMatrix(&(POS_g_p_stIdentityMatrix->stRotationMatrix));
|
|
MTH3D_M_vSetIdentityMatrix(&(POS_g_p_stIdentityMatrix->stTransformMatrix));
|
|
|
|
for (i=0;i<HIE_C_lMaxMatrixInStack;i++)
|
|
HIE_g_a_hMatrixStack[i]=(GEO_tdxHandleToMatrix)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
SNA_fn_vReadStructureFromGlobalPointersFile((unsigned long *)&HIE_g_lNbMatrixInStack,4);
|
|
|
|
g_hCollisionGeoObj=(ACP_tdxHandleOfObject)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
g_hStaticCollisionGeoObj=(ACP_tdxHandleOfObject)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
|
|
/* Sans doute a enlever dans la version finale.(touches de test & de cheats)*/
|
|
#ifdef RETAIL
|
|
/* tout à fait */
|
|
SNA_fn_vReadStructureFromGlobalPointersFile( (unsigned long *)&st_Tmp_3DOS_EntryActions, sizeof(g_st_3DOS_EntryActions) );
|
|
#else /* RETAIL */
|
|
SNA_fn_vReadStructureFromGlobalPointersFile( (unsigned long *)&g_st_3DOS_EntryActions, sizeof(g_st_3DOS_EntryActions) );
|
|
#endif /* RETAIL */
|
|
|
|
#ifdef USE_IPT_DX5
|
|
/* Gus 13/08/98 : Lecture structures IPT */
|
|
p_vDummy = IPT_g_hInputStructure.hEventHistoric ;
|
|
p_vDummy2 = alloca(sizeof(IPT_g_hInputStructure.hDeviceHandle));
|
|
p_vDummy3 = alloca(sizeof(IPT_g_hInputStructure.p_ucValideAndActiveDevice));
|
|
ucDummy = IPT_g_hInputStructure.ucKeyboardType ;
|
|
ucDummy2 = IPT_g_hInputStructure.ucOnePadActivate ;
|
|
memcpy(p_vDummy2,IPT_g_hInputStructure.hDeviceHandle,sizeof(IPT_g_hInputStructure.hDeviceHandle));
|
|
memcpy(p_vDummy3,IPT_g_hInputStructure.p_ucValideAndActiveDevice,sizeof(IPT_g_hInputStructure.p_ucValideAndActiveDevice));
|
|
IPT_gd_hKeyAndPadDefine = (struct IPT_tdstKeyAndPadDefine_ *)SNA_fn_vReadPointerFromGlobalPointersFile( );
|
|
SNA_fn_vReadStructureFromGlobalPointersFile( (unsigned long *)&IPT_g_hInputStructure, sizeof( struct IPT_tdstInput_ ) );
|
|
IPT_g_hInputStructure.d_stEntryElementArray = (struct IPT_tdstEntryElement_ *)SNA_fn_vReadPointerFromGlobalPointersFile( );
|
|
IPT_g_hInputStructure.hEventHistoric = p_vDummy ;
|
|
memcpy(IPT_g_hInputStructure.hDeviceHandle,p_vDummy2,sizeof(IPT_g_hInputStructure.hDeviceHandle));
|
|
memcpy(IPT_g_hInputStructure.p_ucValideAndActiveDevice,p_vDummy3,sizeof(IPT_g_hInputStructure.p_ucValideAndActiveDevice));
|
|
IPT_g_hInputStructure.ucKeyboardType = ucDummy ;
|
|
IPT_g_hInputStructure.ucOnePadActivate = ucDummy2 ;
|
|
#else /* USE_IPT_WIN */
|
|
/* Gus 13/08/98 : Lecture structures IPT */
|
|
IPT_gd_hKeyAndPadDefine = (struct IPT_tdstKeyAndPadDefine_ *)SNA_fn_vReadPointerFromGlobalPointersFile( );
|
|
SNA_fn_vReadStructureFromGlobalPointersFile( (unsigned long *)&IPT_g_hInputStructure, sizeof( struct IPT_tdstInput_ ) );
|
|
IPT_g_hInputStructure.d_stEntryElementArray = (struct IPT_tdstEntryElement_ *)SNA_fn_vReadPointerFromGlobalPointersFile( );
|
|
|
|
/* L'init est faite apres becoz elle met a jour les structures lues dans le fichier SNA*/
|
|
/* (ie: si elle etait faite avant, les valeurs seraient ecrasees...)*/
|
|
/* Special initialization of the Input when we load binary data*/
|
|
IPT_fn_vInitInputWhenLoadSnapshot( fn_hGetApplicationInstance(),fn_hGetApplicationWindow() );
|
|
|
|
#endif /* USE_IPT_WIN */
|
|
|
|
|
|
/* GuS 14/08/98 : lecture structure texts*/
|
|
SNA_fn_vReadStructureFromGlobalPointersFile( (unsigned long *)&FON_g_stGeneral, sizeof( struct FON_tdstGeneral_ ) );
|
|
|
|
/* Retrieve stack infos for all stacks in anim player.*/
|
|
SNA_fn_vReadArrayWithoutPointerFromGlobalPointersFile( tdstStacks, eStackNbMax, sizeof(tdstStackInfos) );
|
|
/* Load stack pointers for anims.*/
|
|
p_stA3dGENERAL = (tdstA3dGENERAL *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_a3_xVectors = (tdxVector3 *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_a4_xQuaternions = (tdxSShortQuater4 *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_stHierarchies = (tdstHierarchy *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_stNTTO = (tdstNTTO *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_stOnlyFrames = (tdstOnlyFrame *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_stChannels = (tdstChannel *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_stFrames = (tdstFrame *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_stFramesKF = (tdstFrameKF *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_stKeyFrames = (tdstKeyFrame *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_stEvents = (tdstEvent *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
p_stMorphData = (tdstMorphData *)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
|
|
/* Read the position of the last always in the fix in the always model list.*/
|
|
SNA_g_stFixInfo.h_LastAlwaysInTheFix = (ALW_tdxHandleToModelList)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
|
|
/* Read DEMO GMT List */
|
|
g_hDemoGMTFixList = (DEMO_tdxHandleToDemoGMTList)SNA_fn_vReadPointerFromGlobalPointersFile();
|
|
|
|
SNA_fn_vCloseGlobalPointersFile();
|
|
|
|
/* ANNECY OA - 12/07/99 { */
|
|
/* Load dummy datas : for protections */
|
|
SNA_M_LoadUnusedRelocationTable();
|
|
/* END ANNECY OA } */
|
|
|
|
sprintf(szLevelSnapshotFilename,"%s\\Fix.ptx",fn_szGetLevelsDataPath());
|
|
TEX_SetNameOfBinaryFile((unsigned char *)szLevelSnapshotFilename);
|
|
|
|
SNA_M_vSetNextRelocationFileToLoad( 255, SNA_C_ucTexturesRelocationTable );
|
|
GLI_vEndofGeometricLoad();
|
|
|
|
g_stEngineStructure.hLevelNameList=hLevelNameList;
|
|
|
|
SNA_M_vSetNextRelocationFileToLoad( 255, SNA_C_ucSoundRelocationTable );
|
|
sprintf(szFileName,"%s\\Fix.snd",fn_szGetLevelsDataPath());
|
|
SNA_fn_xReadOpenSoundTableFile(szFileName);
|
|
SNA_fn_vReadAndUpdateSoundPointers(szFileName);
|
|
|
|
/* ANNECY OA - 12/07/99 { */
|
|
/* Load dummy datas : for protections */
|
|
SNA_M_LoadUnusedRelocationTable();
|
|
/* END ANNECY OA } */
|
|
|
|
}
|
|
#endif /* GAM_USE_SNA */
|
|
|
|
#endif /* _FIRE_DEADCODE_U64_ */
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : It is the last desinitialization of the engine
|
|
*-----------------------------------------------------------------------------
|
|
* Input :
|
|
* Output :
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 20/08/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void fn_vLastDesinitEngine()
|
|
{
|
|
GAM_fn_vSetEngineInFixMode();
|
|
fn_bSaveCurrentGameOptions();
|
|
|
|
GAM_fn_vDestroyGameDeviceAndViewPorts();
|
|
|
|
GLI_vCloseGli();
|
|
|
|
/**** desinitialize input devices ****/
|
|
#if defined(GAM_USE_SNA)
|
|
if (SNA_fn_ucGetLoadType()==SNA_LOAD_SNAPSHOT)
|
|
IPT_fn_vDesinitInputWhenLoadSnapshot();
|
|
else
|
|
#endif /* GAM_USE_SNA */
|
|
IPT_fn_vDesinitInput();
|
|
/**** desinitialize random devices ****/
|
|
RND_fn_vDesinitRandom();
|
|
|
|
#if defined(GAM_USE_SNA)
|
|
if (SNA_fn_ucGetLoadType()==SNA_SAVE_SNAPSHOT)
|
|
GAM_fn_vSetEngineInFixMode();
|
|
#endif /* GAM_USE_SNA */
|
|
|
|
/**** Vignette desinit ****/
|
|
#if defined(GAM_VIGNETTE)
|
|
VIG_fn_vCloseBigFileVignette();
|
|
#endif /* GAM_VIGNETTE */
|
|
|
|
/***** Desinit SON*/
|
|
SND_fn_vDesInitSound();
|
|
SIF_fn_bDesInitSoundInfos();
|
|
|
|
/**** Desinit all object's type structure ****/
|
|
fn_vLastDesinitObjectTypeStructure();
|
|
/**** Desinit all Family's structures ****/
|
|
#if defined(GAM_USE_SNA)
|
|
if (SNA_fn_ucGetLoadType()!=SNA_LOAD_SNAPSHOT)
|
|
#endif /* GAM_USE_SNA */
|
|
fn_vLastDesinitFamilyStructure();
|
|
|
|
#ifndef U64
|
|
DEMO_fn_vDesInitGame ();
|
|
#endif /* U64 */
|
|
/**** desinitialize the memory ****/
|
|
fn_vLastDesinitGameMemory();
|
|
|
|
/* GuS : Moved in fn_vDesinitEngineWhenLeaveApplication
|
|
MMG_fn_vDesinitMemoryRasterDeclaration ();
|
|
*/
|
|
|
|
#ifndef U64
|
|
FON_fn_vDesInitFonts();
|
|
#endif
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
|
|
* Description : It is the initialization of the engine when the game started
|
|
*-----------------------------------------------------------------------------
|
|
* Input :
|
|
* Output :
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 27/08/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vInitGameLoop()
|
|
{
|
|
tdeEngineMode eCallingMode = g_stEngineStructure.eEngineMode;
|
|
|
|
/*XB move in fn_vLoadTheMap*/
|
|
/*fn_vFirstInitMorphTaskList();*/
|
|
/*End XB*/
|
|
|
|
/* XB 23/06/99 */
|
|
#ifdef U64
|
|
LDD_fn_vLoadLDDCode();
|
|
#endif /* U64 */
|
|
/* End XB 23/06/99 */
|
|
|
|
GAM_fn_vSetEngineInLevelMode();
|
|
|
|
fn_bSaveCurrentGameOptions();
|
|
/**** Initialize the game timer ****/
|
|
fn_vReinitEngineClock();
|
|
HIE_fn_vInitGlobalMatrixFrameCounter(0);
|
|
|
|
/**** Load all module that used in all the game, ****/
|
|
if (fn_bIsNextLevelNameValid())
|
|
{
|
|
fn_vSetLevelName(fn_p_szGetNextLevelName());
|
|
fn_vFreeNextLevelName();
|
|
}
|
|
else
|
|
fn_vSetLevelName(fn_p_szGetFirstLevelName());
|
|
|
|
fn_vInitAllObjectsWhenNewGameStart();
|
|
SAI_fn_bInitAllWhen(SAI_eInitWhenNewGameStart);
|
|
|
|
/*if ( !stricmp(fn_p_szGetLevelName(),g_stEngineStructure.szCreditsLevelName)
|
|
||!fn_bLoadPlayerSaveGameBeforeLoadLevel())
|
|
{
|
|
if (fn_bIsAValidCurrentExtraGame())
|
|
fn_vSetLevelName(fn_p_szGetLevelNameOfCurrentExtra());
|
|
}*/
|
|
|
|
/* to make sure that everything goes fine*/
|
|
fn_vChangeEngineMode(EM_ModeEnterLevel);
|
|
/**** Initialize the Level loop members ****/
|
|
fn_vInitLevelLoop();
|
|
|
|
fn_vChangeEngineMode(eCallingMode); /* restore the mode we were in*/
|
|
|
|
/* For AI_UnusedComport.log*/
|
|
fn_vTestUnusedComport();
|
|
|
|
/*
|
|
#if !defined(ACTIVE_EDITOR)
|
|
if ( g_stEngineStructure.eEngineMode == EM_ModeEnterGame
|
|
&&fn_bLoadPlayerSaveGameAfterLoadLevel())
|
|
{
|
|
SAI_fn_bInitAllWhen(SAI_eInitWhenPlayerGameSavedLoaded);
|
|
fn_vInitAllObjectsWhenSavedGameJustLoaded();
|
|
}
|
|
#endif // ACTIVE_EDITOR
|
|
*/
|
|
|
|
TFMT_vInitTextAfficheStructure();
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : It is the desinitialization of the engine when the game started
|
|
*-----------------------------------------------------------------------------
|
|
* Input :
|
|
* Output :
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 27/08/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC 04/06/99 */
|
|
void fn_vDesInitGameLoop()
|
|
{
|
|
/**** DesInitialize the Level loop members ****/
|
|
fn_vDesInitLevelLoop();
|
|
|
|
GAM_fn_vSetEngineInFixMode();
|
|
|
|
/**** Initialize the game timer ****/
|
|
fn_vRedesinitEngineClock();
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC 04/06/99 */
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : It is the initialization of the engine when map just loaded
|
|
*-----------------------------------------------------------------------------
|
|
* Input :
|
|
* Output :
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 27/08/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
/*-------------------------------------------*/
|
|
void fn_vStandardInitLevelLoop()
|
|
{
|
|
/**************************/
|
|
/**** Init before load ****/
|
|
/**************************/
|
|
fn_vSetDisplayFlag(edmDisplayModeAll,1);
|
|
|
|
COL_fn_vOctreeGlobalInit();
|
|
|
|
/* ANNECY AV DEMO {*/
|
|
#ifndef U64
|
|
DEMO_fn_vInitSOList ();
|
|
DEMO_fn_vInitGMTLevelList ();
|
|
#endif
|
|
/* END ANNECY AV }*/
|
|
|
|
/**** Load all module that used in all the game, ****/
|
|
fn_vLoadLevel(fn_p_szGetLevelName(),fn_lGetSubMapNumber());
|
|
|
|
#if (defined(USE_PROFILER) && !defined(PRESS_DEMO) && !defined(U64))
|
|
GAM_fn_vRasterDumpInit ();
|
|
#endif
|
|
|
|
fn_vFirstInitAlwaysStructure();
|
|
fn_vInitMindForAlways();
|
|
#if defined(GAM_USE_SCRIPT)
|
|
fn_vWaypointSecondPass();
|
|
#endif /* GAM_USE_SCRIPT */
|
|
/*XB980824*/
|
|
#ifndef D_THROW_MGT
|
|
MGT_fn_vFirstInitMagnet();
|
|
#endif /* D_THROW_MGT */
|
|
/*End XB*/
|
|
|
|
/**** Init all object when the player enter the map ****/
|
|
fn_vInitAllObjectsWhenMapJustLoaded();
|
|
|
|
/* camera's management */
|
|
CAM_fn_vInitCameras();
|
|
|
|
/* XB 16/06/99 */
|
|
#if !defined(ACTIVE_EDITOR) && !defined(U64)
|
|
fn_vDeleteAllLevelReUsableSections();
|
|
#endif /* !defined(ACTIVE_EDITOR) && !defined(U64) */
|
|
/* End XB 16/06/99 */
|
|
|
|
/* XB 23/06/99 */
|
|
#ifndef U64
|
|
/*bart990105 :*/
|
|
if (fn_bIsEngineInPause())
|
|
fn_vChangeWindowTitle("Rayman II - pause");
|
|
else
|
|
fn_vChangeWindowTitle("Rayman II");
|
|
|
|
fn_vSetEngineWorldForITF(gp_stActualWorld);
|
|
#endif /* U64 */
|
|
/* End XB 23/06/99 */
|
|
|
|
SAI_fn_bInitAllWhen(SAI_eInitWhenMapLoaded);
|
|
/**** Initialize the Dead loop members ****/
|
|
fn_vInitDeadLoop();
|
|
|
|
#ifdef ACTIVE_EDITOR
|
|
if (g_bUseSAIWithEditor) {
|
|
#endif /* ACTIVE_EDITOR */
|
|
|
|
if ( g_stEngineStructure.eEngineMode==EM_ModeEnterLevel )
|
|
{
|
|
char cDoInit = 0;
|
|
if( fn_bLoadLevelSaveGameAfterLoadLevel() )
|
|
{
|
|
SAI_fn_bInitAllWhen(SAI_eInitWhenLevelGameSavedLoaded);
|
|
cDoInit = 1;
|
|
}
|
|
if( fn_bLoadPlayerSaveGameAfterLoadLevel() )
|
|
{
|
|
SAI_fn_bInitAllWhen(SAI_eInitWhenPlayerGameSavedLoaded);
|
|
cDoInit = 1;
|
|
}
|
|
|
|
if( cDoInit )
|
|
fn_vInitAllObjectsWhenSavedGameJustLoaded();
|
|
}
|
|
|
|
#ifdef ACTIVE_EDITOR
|
|
}
|
|
#endif /* ACTIVE_EDITOR */
|
|
|
|
|
|
|
|
#ifdef U64
|
|
/*AR9806 Load the init animations of each perso */
|
|
GAM_fn_vLoadInitialAnimations();
|
|
#endif /*U64*/
|
|
|
|
/* ANNECY MT - 28/06/99 { */
|
|
/**** Start the timer ****/
|
|
/* fn_vStartEngineClock(); */
|
|
/* END ANNECY MT } */
|
|
|
|
#ifdef ACTIVE_EDITOR
|
|
{
|
|
unsigned long i, ulAllocatedSize = 1000;
|
|
ALW_tdxHandleToModelList h_AlwaysModelChild;
|
|
char *p_szTxt = (char *) malloc(ulAllocatedSize);
|
|
ACP_tdxBool bFoundSome = FALSE;
|
|
|
|
strcpy(p_szTxt, "Les always chargés suivants ne sont pas référencés dans le niveau courant:\n\n");
|
|
LST2_M_DynamicForEachElementOf(&(g_stAlways.ALW_h_LstAlwaysModel),h_AlwaysModelChild,i)
|
|
if ( h_AlwaysModelChild && !g_stAlways.d_bIsReferencedInLevel[i] )
|
|
{
|
|
SCR_tdst_Link_Value *p_stLinkValue = SCR_fnp_st_Link_SearchValue(&g_st3DOSLinkTable.stCharacter, (unsigned long) h_AlwaysModelChild->p_stAlwaysObject);
|
|
if ( p_stLinkValue )
|
|
{
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName],szAction[SCR_CV_ui_Cfg_MaxLenName],szId[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
// construct section name (hack: szSectionName is here as an anti-bug for ...Split...
|
|
SCR_fn_v_RdL0_SplitSectionName(SCR_M_p_sz_Link_GetKey(p_stLinkValue), szSectionName, szAction, szId);
|
|
bFoundSome = TRUE;
|
|
if ( strlen(p_szTxt) + strlen(szId) + 3 >= ulAllocatedSize ) /* both strings, the tab, the CR/LF, and the terminator */
|
|
{
|
|
ulAllocatedSize += strlen(szId) * 3;
|
|
p_szTxt = realloc(p_szTxt, ulAllocatedSize);
|
|
}
|
|
strcat(p_szTxt, "\t");
|
|
strcat(p_szTxt, szId);
|
|
strcat(p_szTxt, "\n");
|
|
}
|
|
}
|
|
if ( bFoundSome )
|
|
{
|
|
MessageBox(NULL, p_szTxt, "Pour info", MB_OK|MB_ICONWARNING);
|
|
}
|
|
free(p_szTxt);
|
|
}
|
|
#endif /* ACTIVE_EDITOR */
|
|
|
|
#ifdef U64
|
|
fn_vForceReinitAllObjects();
|
|
#endif
|
|
}
|
|
|
|
void SPO_ReinitSuperimposedArray (void) ;
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : It is the initialization of the engine when Game just dead
|
|
*-----------------------------------------------------------------------------
|
|
* Input :
|
|
* Output :
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 27/08/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vInitDeadLoop()
|
|
{
|
|
SND_tduRefEvt uSoundEvent;
|
|
/**** Trame counter ****/
|
|
g_stEngineStructure.stEngineTimer.ulTrameNumber = 0;
|
|
g_stEngineStructure.bEngineFrozen = 0; /* by default all characters are handled normally*/
|
|
/* Begin Shaitan ModeLook*/
|
|
g_stEngineStructure.cCameraMode = C_CamModeNormal; /* by default the mode is normal*/
|
|
/* End Shaitan ModeLook*/
|
|
|
|
#ifdef U64
|
|
/* FQ FADE*/
|
|
/*fn_vFadeIn();*/
|
|
/*////////////*/
|
|
#endif
|
|
|
|
fn_vStartEngineClock();
|
|
fn_vReinitTheStaticHierarchie(SECT_hFatherSector);
|
|
CAM_fn_vActualizeAViewport(CAM_e_MainViewport);
|
|
|
|
if
|
|
(
|
|
g_stEngineStructure.eEngineMode!=EM_ModeEnterLevel &&
|
|
g_stEngineStructure.eEngineMode!=EM_ModeEnterGame
|
|
)
|
|
{
|
|
/* ANNECY MT - 28/08/98 {*/
|
|
HIE_tdxHandleToSuperObject hMaincharacter = MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode() );
|
|
|
|
/**** DFM 12/02/98*/
|
|
/* if the main character has 0 hitpoints left, we reinit the map as if it was just loaded */
|
|
if ( fn_ucStandardGameGetHitPoints ( M_GetMSHandle(hMaincharacter, StandardGame) ) > 0 )
|
|
{
|
|
SAI_fn_bInitAllWhen(SAI_eInitWhenPlayerDead) ;
|
|
fn_vInitAllObjectsWhenPlayerDead();
|
|
/*
|
|
* reactivate all IPT entries that might have been deactivated by the AI of some characters
|
|
* since it is also called by fn_vReinitTheMap(), it is useless to do this when we call it, like just below
|
|
*/
|
|
IPT_fn_vActivateAllEntryElements ( ) ;
|
|
}
|
|
else
|
|
{
|
|
fn_vReinitTheMap() ;
|
|
/*SAI_fn_bInitAllWhen(SAI_eInitWhenMapLoaded) ;
|
|
fn_vInitAllObjectsWhenMapJustLoaded();*/
|
|
}
|
|
if(g_stEngineStructure.bResurection)
|
|
{
|
|
/* restore main character initial position*/
|
|
if(hMaincharacter)
|
|
{
|
|
POS_fn_vCopyMatrix
|
|
(
|
|
fn_p_st3dDataGetMatrixInit(M_GetMSHandle(hMaincharacter,3dData)),
|
|
&g_stEngineStructure.stMainCharacterPosition
|
|
);
|
|
}
|
|
/* restore main camera initial position*/
|
|
if(g_stEngineStructure.h_StdCamCaracter)
|
|
{
|
|
POS_fn_vCopyMatrix
|
|
(
|
|
fn_p_st3dDataGetMatrixInit(M_GetMSHandle(g_stEngineStructure.h_StdCamCaracter,3dData)),
|
|
&g_stEngineStructure.stMainCameraPosition
|
|
);
|
|
}
|
|
}
|
|
g_stEngineStructure.bResurection = FALSE;
|
|
/* END ANNECY MT }*/
|
|
g_hSOCurrentMainSector = NULL;
|
|
|
|
|
|
/*
|
|
* Reinit Fog and sinus effect
|
|
*/
|
|
GLI_cGlobalFogIsOn = 0;
|
|
GLI_vInitWaterplaneModule();
|
|
}
|
|
/* Oliv' - ??? - E3*/
|
|
fn_vReputCharacterSuperObjectAtTheWorld(MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode()));
|
|
|
|
/* Oliv' - 18/11/1998 - C'est trop tard ici car les objets dans le tableau n'existent plus*/
|
|
/* -> voir fn_vDesInitLevelLoop() dans Initeng.cxx*/
|
|
/* SPO_ReinitSuperimposedArray();*/
|
|
|
|
/*////////////////////////////////*/
|
|
/* FQ OVR :*/
|
|
#ifdef U64
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by XB */
|
|
// Desinit the Memory Holes List
|
|
MMG_fn_vReinit_FreeMemoryBlocks();
|
|
M_PrintfN64(( "MMG_fn_vReinit_FreeMemoryBlocks() called !\n" ));
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by XB */
|
|
//XB
|
|
//SHW_fn_vReInitShadowForMapChange is now called in LoadLevel not in InitDeadLoop
|
|
// Reinit for shadows
|
|
// SHW_fn_vReInitShadowForMapChange();
|
|
//End XB
|
|
#endif /* U64 */
|
|
/* END FQ OVR*/
|
|
/*////////////////////////////////*/
|
|
if( g_stEngineStructure.eEngineMode==EM_ModeDeadLoop && g_bBeginMapSoundEventFlag )
|
|
{
|
|
uSoundEvent.pstPtr = GAM_p_stGetBlockEventSlotMemory(0);
|
|
SND_fn_lSendRequestSound(SND_C_OBJET_FANTOME,g_lSoundObjectTypeMusic,uSoundEvent,0,NULL);
|
|
}
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : It is the desinitialization of the engine when Game just dead
|
|
*-----------------------------------------------------------------------------
|
|
* Input :
|
|
* Output :
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 27/08/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vDesInitDeadLoop()
|
|
{
|
|
|
|
/* fbolefeysot - 25/08/98*/
|
|
/* replace the link reinit . before, it was done only for Raymond, now, it is made for all actors*/
|
|
/* fn_vReputCharacterSuperObjectAtTheWorld(MC_fn_hGetCharacterInMainCharacterNode(MC_fn_hGetFirstMainCharNode()));*/
|
|
fn_vDestructAllFatherSonLinks();
|
|
/*END fbolefeysot}*/
|
|
|
|
fn_vKillAllAlways();
|
|
AGO_vInit();
|
|
|
|
#if (defined(USE_PROFILER) && !defined(PRESS_DEMO) && !defined(U64))
|
|
GAM_fn_vRasterDumpReset ();
|
|
#endif
|
|
}
|
|
/**************************************************************************/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC 04/06/99 */
|
|
void fn_vInitAllLinkTables(void)
|
|
{
|
|
#if defined(GAM_USE_SCRIPT)
|
|
/**** Those link-tables are for the editors and for the engine ****/
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stACZ);
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stAnimation);
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stCharacter);
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stState);
|
|
|
|
SCR_fn_v_Link_InitTable(&g_stComportLinkTable);
|
|
|
|
SCR_fn_v_Link_InitTable(CHL_fn_p_stGetLinkTable());
|
|
SCR_fn_v_Link_InitTable(TBL_fn_p_stGetLinkTable());
|
|
|
|
/**** Those link-tables are only used by the editors ****/
|
|
|
|
#if defined(ACTIVE_EDITOR)/*||defined(BIN_SaveBin)*/
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stACZList);
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stCharacterZone);
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stLipsSynchroList);
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stZDXList);
|
|
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stPrtGenLinkTable);
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stPrtSrcLinkTable);
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stPrtSysLinkTable);
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stPrtSysSpriteLinkTable);
|
|
SCR_fn_v_Link_InitTable(&g_st3DOSLinkTable.stPrtEnvLinkTable);
|
|
#endif /* ACTIVE_EDITOR */
|
|
|
|
/**** Those link-tables are not already defined (editors and/or engine) ****/
|
|
SCR_fn_v_Link_InitTable(CS_fn_p_stGetLinkTable());
|
|
SCR_fn_v_Link_InitTable(DNM_fn_p_stGetLinkTableOfMecMatCharacteristics());
|
|
SCR_fn_v_Link_InitTable(DNM_fn_p_stGetLinkTableOfIdCard());
|
|
/* SCR_fn_v_Link_InitTable(GLI_p_stGetLinkTableOfGeometric()); // already initialized*/
|
|
SCR_fn_v_Link_InitTable(GLI_p_stGetLinkTableOfVisualMaterial());
|
|
SCR_fn_v_Link_InitTable(GMT_fn_p_stGetLinkTable());
|
|
SCR_fn_v_Link_InitTable(GMT_fn_p_stGetZoneLinkTable());
|
|
SCR_fn_v_Link_InitTable(HIE_fn_p_stGetSuperObjectLinkTable());
|
|
SCR_fn_v_Link_InitTable(HIE_fn_p_stGetLinkedObjectLinkTable());
|
|
SCR_fn_v_Link_InitTable(IPO_fn_p_stGetLinkTable());
|
|
SCR_fn_v_Link_InitTable(ISI_fn_pGetLinkTable());
|
|
SCR_fn_v_Link_InitTable(LGT_fn_p_stGetLightLinkTable());
|
|
SCR_fn_v_Link_InitTable(PO_fn_p_stGetLinkTable());
|
|
/* Shaitan Clean Env {*/
|
|
/* SCR_fn_v_Link_InitTable(SRF_GetSurfaceLinkTable());*/
|
|
/* End Shaitan Clan Env }*/
|
|
SCR_fn_v_Link_InitTable(VS_fn_p_stGetLinkTable());
|
|
SCR_fn_v_Link_InitTable(WP_fnp_WayPoint_GetLinkTable());
|
|
/* ANNECY MT - 16/09/98 {*/
|
|
SCR_fn_v_Link_InitTable(WPG_fnp_Graph_GetLinkTable());
|
|
/* END ANNECY MT }*/
|
|
|
|
/**** Those link-tables are used in the level ****/
|
|
SCR_fn_v_Link_InitTable(SECT_fn_pGetLinkTable());
|
|
#endif /* GAM_USE_SCRIPT */
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC 04/06/99 */
|
|
|
|
|
|
/**************************************************************************/
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : This reinit all variables for a map (and characters)
|
|
*-----------------------------------------------------------------------------
|
|
* Input :
|
|
* Output :
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 27/08/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
extern int iNumLoop; /*declared in the AI module*/
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#ifdef U64
|
|
extern char GLI_cGlobalForceFogIsOn;
|
|
#endif
|
|
|
|
void fn_vReinitTheMap(void)
|
|
{
|
|
/* XB 23/06/99 */
|
|
#ifndef U64
|
|
GLD_bSetBackgroundColorForDevice(fn_hGetGLDDevice(0), RGB(0,0,0));
|
|
#else /* U64 */
|
|
GLD_bSetBackgroundColorForDevice(NULL, RGB(0,0,0));
|
|
#endif /* U64 */
|
|
/* End XB 23/06/99 */
|
|
|
|
fn_vStartEngineClock();
|
|
|
|
/* Just killing Anims and voices sounds*/
|
|
SND_fn_vKillAllObjectTypeSound( g_lSoundObjectTypeAnim );
|
|
#ifdef D_USE_LIPSYNC
|
|
SND_fn_vKillAllObjectTypeSound( g_lSoundObjectTypeLipsSynchro );
|
|
#endif
|
|
|
|
/* ANNECY MT - 28/08/98 {*/
|
|
POS_fn_vSetIdentityMatrix(&g_stEngineStructure.stMainCharacterPosition);
|
|
POS_fn_vSetIdentityMatrix(&g_stEngineStructure.stMainCameraPosition);
|
|
g_stEngineStructure.bResurection = FALSE;
|
|
/* END ANNECY MT }*/
|
|
fn_vKillAllAlways();
|
|
fn_vDestructAllFatherSonLinks();
|
|
SAI_fn_bInitAllWhen(SAI_eInitWhenReinitTheMap);
|
|
fn_vForceReinitAllObjects();
|
|
|
|
/*HP 031298 {*/
|
|
/* define main caracter position for demo mode */
|
|
#ifdef U64
|
|
|
|
/* FQ IA FOG ! */
|
|
GLI_cGlobalForceFogIsOn=0;
|
|
/* FQ */
|
|
|
|
if(g_stEngineStructure.xDemoMode==TRUE)
|
|
{
|
|
MTH3D_tdstVector *p_stMainCharTranslation;
|
|
HIE_tdxHandleToSuperObject hMaincharacter = MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode() );
|
|
|
|
p_stMainCharTranslation = POS_fn_p_stGetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix (hMaincharacter));
|
|
INO_fn_vU64PutMainCharForDemoPlay(p_stMainCharTranslation);
|
|
HIE_fn_vComputeNewRelativeMatrix (hMaincharacter);
|
|
/* update dynamics*/
|
|
MEC_fn_vImposeActorMatrix (hMaincharacter);
|
|
/* compute camera position*/
|
|
CAM_fn_vForceBestPosition(g_stEngineStructure.h_StdCamCaracter);
|
|
}
|
|
#endif
|
|
/* }HP*/
|
|
fn_vReinitTheStaticHierarchie(SECT_hFatherSector);
|
|
CAM_fn_vActualizeAViewport(CAM_e_MainViewport);
|
|
/*
|
|
* réinitialisation variable pour WaterPlane + sinus effect
|
|
*/
|
|
GLI_vInitWaterplaneModule();
|
|
|
|
|
|
if( g_bBeginMapSoundEventFlag )
|
|
/* SND_fn_lSendRequestSound(SND_C_OBJET_FANTOME,g_lSoundObjectTypeMusic,g_stBeginMapSoundEvent,0,NULL);*/
|
|
GAM_fn_lSaveBlockEventSlotMemory(g_stBeginMapSoundEvent.pstPtr,0);
|
|
|
|
|
|
MOR_fn_vRemoveAllMorphedObjects ();
|
|
/*XB980824*/
|
|
#ifndef D_THROW_MGT
|
|
MGT_fn_vLastDesInitMagnet();
|
|
#endif /* D_THROW_MGT */
|
|
/*End XB*/
|
|
GLI_cGlobalFogIsOn = 0;
|
|
|
|
SPO_ReinitSuperimposedArray () ;
|
|
|
|
PRF_fn_vReinitAllChrono ();
|
|
|
|
g_hSOCurrentMainSector = NULL;
|
|
iNumLoop = 0; /* clear the AI loop depth counter!*/
|
|
|
|
/* reactivate all IPT entries that may have been deactivated by the AI of some character */
|
|
IPT_fn_vActivateAllEntryElements ( ) ;
|
|
|
|
TFMT_vInitTextAfficheStructure();
|
|
|
|
#if (defined(USE_PROFILER) && !defined(PRESS_DEMO) && !defined(U64))
|
|
GAM_fn_vRasterDumpReset ();
|
|
#endif
|
|
|
|
/* ANNECY MT - 12/02/99 {*/
|
|
AGO_vInit() ;
|
|
/* END ANNECY MT }*/
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Reinit The static hierarchie
|
|
*-----------------------------------------------------------------------------
|
|
* Input : SO
|
|
* Output :
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 22/05/97 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vReinitTheStaticHierarchie(HIE_tdxHandleToSuperObject hSuperObject)
|
|
{
|
|
HIE_tdxHandleToSuperObject hChild;
|
|
unsigned long i;
|
|
|
|
HIE_fn_vSetSuperObjectDrawMask(hSuperObject,HIE_fn_lGetSuperObjectDrawMask(hSuperObject) | ~GLI_C_lHasNoMirror );
|
|
HIE_M_ForEachChildOf(hSuperObject,hChild,i)
|
|
{
|
|
fn_vReinitTheStaticHierarchie(hChild);
|
|
}
|
|
/* fbolefeysot - 01/10/98*/
|
|
/* remove init values in GMT{*/
|
|
/* if (HIE_fn_ulGetSuperObjectType(hSuperObject)==C_ucGeometric)
|
|
GLI_p_stRecursiveReinitGameMaterialOfVisualsets((struct GEO_tdstVisualSet_*)HIE_fn_hGetSuperObjectObject(hSuperObject));
|
|
*/
|
|
/*END fbolefeysot}*/
|
|
/* Shaitan Clean Env {*/
|
|
/*
|
|
if( HIE_fn_lGetSuperObjectType(hSuperObject)==C_ucSector )
|
|
fn_vSectInfoReInitAllSurfacesInSector(hSuperObject);
|
|
*/
|
|
/* End Shaitan Clan Env }*/
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Verify integrity of some variables
|
|
*-----------------------------------------------------------------------------
|
|
* Input : void
|
|
* Output : void
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 30/08/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vVerifySomeProgramVariables()
|
|
{
|
|
/**** Verify the size of Object's structure and Handle functions array ****/
|
|
if ( (g_a_stStructureHandleFunction[(long)(sizeof(tdstEngineObject)/sizeof(void*))].p_fn_vCopyCloneMSFunction!=(tdfn_vCopyCloneMSFunction *)0x00000001)
|
|
||(g_a_stStructureHandleFunction[(long)(sizeof(tdstEngineObject)/sizeof(void*))].p_fn_ulSizeOfFunction!=(tdfn_ulSizeofHandleFunction *)0x00000002)
|
|
||(g_a_stStructureHandleFunction[(long)(sizeof(tdstEngineObject)/sizeof(void*))].p_fn_vAllocFunction!=(tdfn_vAllocHandleFunction *)0x00000003)
|
|
||(g_a_stStructureHandleFunction[(long)(sizeof(tdstEngineObject)/sizeof(void*))].p_fn_vFreeFunction!=(tdfn_vAllocHandleFunction *)0x00000004)
|
|
||(g_a_stStructureHandleFunction[(long)(sizeof(tdstEngineObject)/sizeof(void*))].p_fn_vInitFunction!=(tdfn_vInitHandleFunction *)0x00000005)
|
|
||(g_a_stStructureHandleFunction[(long)(sizeof(tdstEngineObject)/sizeof(void*))].p_fn_vDesinitFunction!=(tdfn_vInitHandleFunction *)0x00000006)
|
|
)
|
|
{
|
|
M_GameFatalError(E_uwGameVerifySomeProgramVariableHandleFunction);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
#include "Specif\Initeng.cxx"
|