1379 lines
45 KiB
C
1379 lines
45 KiB
C
/*=========================================================================
|
||
* LoadLvl.cpp : This module contain all functions used to load
|
||
* a level.
|
||
* This is a part of the Game project.
|
||
*
|
||
* Version 1.0
|
||
* Creation date 28/08/96
|
||
* Revision date
|
||
*
|
||
* That file needs to be compatible for all platforms.
|
||
*
|
||
* (c) Ubi Studios 1996
|
||
*=======================================================================*/
|
||
|
||
#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"
|
||
|
||
extern void SHW_fn_vReInitShadowForMapChange(void);
|
||
|
||
// FBF N64-format pour coords, et logfile dans x:\exe\geodump.log{
|
||
#ifdef U64CONVERTETLOG
|
||
extern BOOL g_bLoadMap;
|
||
|
||
#endif //U64CONVERTLOG
|
||
// } fin N64-format
|
||
|
||
|
||
#if defined (ACTIVE_EDITOR)
|
||
extern BOOL g_bSectionSoundFoundInLevelDSC;
|
||
#endif /*ACTIVE_EDITOR*/
|
||
|
||
#ifndef U64
|
||
#include "sna.h"
|
||
|
||
#endif
|
||
|
||
/* ANNECY AV DEMO {*/
|
||
#ifndef U64
|
||
#include "Specif/Demos.h"
|
||
#endif
|
||
/* END ANNECY AV }*/
|
||
|
||
extern HIE_tdxHandleToSuperObject g_hLoadedSuperObjectRoot;
|
||
|
||
/* need for game installations with no sound on hard drive*/
|
||
extern int g_iSoundOnHD;
|
||
|
||
#ifdef ACTIVE_EDITOR
|
||
extern ACP_tdxBool g_bUseSAIWithEditor;
|
||
#endif /* ACTIVE_EDITOR */
|
||
|
||
extern tdstEngineObject *g_AlphabetCharacterPointer;
|
||
|
||
/**************** FabPerez SectorAnalyse ************/
|
||
/*****************************************************/
|
||
#if defined(WIN32) && defined(_DEBUG)
|
||
StructInfoSectorTrame *pt_aStructInfoSectorTrame;
|
||
#endif /*WIN32 & _DEBUG*/
|
||
/************** Fin FabPerez SectorAnalyse ***********/
|
||
/******************************************************/
|
||
|
||
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : Init Geometric Object Normals
|
||
*-----------------------------------------------------------------------------
|
||
* Input :
|
||
* Output :
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 05/12/96 Author : CGHT
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
void fn_vInitCollSet(HIE_tdxHandleToSuperObject p_stSO)
|
||
{
|
||
|
||
HIE_tdxHandleToSuperObject p_stChild;
|
||
GEO_tdstGeometricObject *p_stObject;
|
||
unsigned long i;
|
||
|
||
i = HIE_fn_ulGetSuperObjectType(p_stSO);
|
||
p_stObject = (GEO_tdstGeometricObject *)HIE_fn_hGetSuperObjectObject(p_stSO);
|
||
|
||
if(i & (HIE_C_ulEDT_Geometric | HIE_C_ulPO ))
|
||
{
|
||
GEO_xComputeObjectNormals(p_stObject);
|
||
}
|
||
|
||
HIE_M_ForEachChildOf(p_stSO,p_stChild,i)
|
||
{
|
||
fn_vInitCollSet(p_stChild);
|
||
}
|
||
}
|
||
|
||
/* Jourdan 10/02/97*/
|
||
/* fonction recursive creation des octrees hierarchique a partir d un super objet */
|
||
void TGE_fn_vRecursiveInitOctreeSuperObject ( HIE_tdxHandleToSuperObject _hSprObj )
|
||
{
|
||
GEO_tdstGeometricObject *p_stGeomObj;
|
||
ACP_tdxIndex xChildIndex;
|
||
HIE_tdxHandleToSuperObject hChild;
|
||
MTH_tdxReal tdxTmpReal;
|
||
PO_tdxHandleToPhysicalObject _hPhysicalObject;
|
||
register unsigned long ulType;
|
||
|
||
ulType = HIE_fn_ulGetSuperObjectType(_hSprObj);
|
||
|
||
if(ulType == HIE_C_ulEDT_Geometric)
|
||
{
|
||
p_stGeomObj = (GEO_tdstGeometricObject *)HIE_fn_hGetSuperObjectObject ( _hSprObj );
|
||
COL_fn_bCreateOctree ( p_stGeomObj, 10, 5, 4 );
|
||
}
|
||
else if(ulType & (HIE_C_ulIPO | HIE_C_ulIPO_Mirror))
|
||
{
|
||
_hPhysicalObject = IPO_fn_hGetPhysicalObject((IPO_tdxHandleToInstanciatedPhysicalObject)HIE_fn_hGetSuperObjectObject(_hSprObj));
|
||
GLI_vGetVisualSetLOD(PO_fn_hGetVisualSet(_hPhysicalObject), 0, &tdxTmpReal, &p_stGeomObj);
|
||
|
||
COL_fn_bCreateOctree ( p_stGeomObj, 10, 5, 4 );
|
||
}
|
||
|
||
else if(ulType != HIE_C_ulActor)
|
||
{
|
||
HIE_M_ForEachChildOf ( _hSprObj, hChild, xChildIndex )
|
||
{
|
||
TGE_fn_vRecursiveInitOctreeSuperObject ( hChild );
|
||
}
|
||
}
|
||
}
|
||
|
||
/* creation des octrees hierarchique a partir d un super objet */
|
||
void TGE_fn_vInitOctreeSuperObject ( HIE_tdxHandleToSuperObject _hSprObj )
|
||
{
|
||
TGE_fn_vRecursiveInitOctreeSuperObject ( _hSprObj );
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : Load the level.
|
||
*-----------------------------------------------------------------------------
|
||
* Input : Number of level
|
||
* Output : void
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 29/08/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
extern void fn_v_InitInterpol();
|
||
|
||
/* ANNECY MT - 08/09/98 {*/
|
||
void fn_vLoadLevel(char *_szLevelName,long _lSubMapNumber)
|
||
/* END ANNECY MT }*/
|
||
{
|
||
char szLevelFileName[_MAX_PATH];
|
||
|
||
#ifdef ACTIVE_EDITOR
|
||
g_bUseSAIWithEditor=FALSE;
|
||
#endif /* ACTIVE_EDITOR */
|
||
|
||
/* ANNECY MT - 08/09/98 {*/
|
||
fn_vLoadTheMap(_szLevelName,_lSubMapNumber);
|
||
/* END ANNECY MT }*/
|
||
|
||
#ifdef ACTIVE_EDITOR
|
||
fn_vEditorSetCurrentMap("cave\\edmap.spo");
|
||
#endif
|
||
|
||
fn_vChangeWindowTitle("Chargement du level");
|
||
/* InitArrayOfDynamicalFunctions((tdstPairOfDynamicalFunctions *)g_a_stPairOfDynamicalFunctions);*/
|
||
|
||
/* BINARISATION YLG*/
|
||
/* fn_v_InitInterpol();*/
|
||
|
||
SECT_hFatherSector=HIE_fn_hGetSuperObjectLastChild(gp_stActualWorld);
|
||
HIE_fn_vSetSuperObjectObjectAndType(SECT_hFatherSector,NULL,HIE_C_ulSuperObject);
|
||
|
||
if ( strlen(_szLevelName) )
|
||
{
|
||
|
||
/* load always model object*/
|
||
fn_vChangeWindowTitle("Chargement des always");
|
||
sprintf(szLevelFileName,"%s\\%s.%s",_szLevelName,_szLevelName,C_ScriptAlwaysSuffixe);
|
||
if (SCR_fn_c_RdL0_IsSectionExists(szLevelFileName))
|
||
{
|
||
SCR_fnp_st_RdL0_AnalyseSection(szLevelFileName, SCR_CDF_uw_Anl_Normal);
|
||
}
|
||
|
||
/* ANNECY MT - 16/09/98 { load actors before waypoints because of submap loading (waypoints need to know position of actors)*/
|
||
fn_vChangeWindowTitle("Chargement des personnages");
|
||
sprintf(szLevelFileName,"%s\\%s.%s",_szLevelName,_szLevelName,C_ScriptLevelSuffixe);
|
||
if (!SCR_fn_c_RdL0_IsSectionExists(szLevelFileName))
|
||
sprintf(szLevelFileName,"default.%s",C_ScriptLevelSuffixe);
|
||
#ifdef ACTIVE_EDITOR
|
||
g_stEngineStructure.h_StdCamCaracter = NULL;
|
||
#endif
|
||
SCR_fnp_st_RdL0_AnalyseSection(szLevelFileName, SCR_CDF_uw_Anl_Normal);
|
||
#ifdef ACTIVE_EDITOR
|
||
if ( g_stEngineStructure.h_StdCamCaracter == NULL)
|
||
MessageBox(NULL,"Add (StandardCamera) after {InsertCharacter:StdCamer", "Missing information in *.lvl", MB_OK);
|
||
if (LST2_M_DynamicGetNumberOfElements(&g_stEngineStructure.hMainCharacterList) == 0)
|
||
MessageBox(NULL,"Add (PrincipalActor,ActorLauchingSounds) after {InsertCharacter:Rayman", "Error Missing information in *.lvl", MB_OK);
|
||
#endif
|
||
/*ANNECY Bart#01 17/02/98 {*/
|
||
fn_vChangeWindowTitle("Chargement des waypoints");
|
||
sprintf(szLevelFileName,"%s\\%s.%s",_szLevelName,_szLevelName,C_ScriptWayPointSuffixe);
|
||
if (SCR_fn_c_RdL0_IsSectionExists(szLevelFileName))
|
||
{
|
||
SCR_fnp_st_RdL0_AnalyseSection(szLevelFileName,SCR_CDF_uw_Anl_Normal);
|
||
}
|
||
/* END ANNECY MT }*/
|
||
/*ENDANNECY Bart#01 }*/
|
||
}
|
||
|
||
/* ANNECY AV DEMO {*/
|
||
{
|
||
HIE_tdxHandleToSuperObject hActor;
|
||
int i;
|
||
|
||
HIE_M_ForEachChildOf (gp_stDynamicWorld , hActor , i)
|
||
{
|
||
DEMO_fn_vPutCharacterInList (hActor);
|
||
}
|
||
}
|
||
/* END ANNECY AV }*/
|
||
|
||
fn_vChangeWindowTitle("Traitement de la Map");
|
||
/*SECT_hFatherSector=HIE_fn_hGetSuperObjectNextBrother(HIE_fn_hGetSuperObjectFirstChild(gp_stActualWorld));*/
|
||
/* ylg SECT_hFatherSector=HIE_fn_hGetSuperObjectLastChild(gp_stActualWorld);*/
|
||
|
||
#if !defined(ACTIVE_EDITOR)
|
||
/*fn_vDeleteAllLevelReUsableSections();*/
|
||
#endif /* ACTIVE_EDITOR */
|
||
|
||
fn_vGeneralCoherenceOfSmoothing(SECT_hFatherSector);
|
||
TGE_fn_vInitOctreeSuperObject(SECT_hFatherSector);
|
||
|
||
COL_fn_vOctreeGlobalsCompute();
|
||
|
||
/* For BIN*/
|
||
/* GLI_vEndofGeometricLoad();*/
|
||
|
||
HIE_fn_vInitMatrixStack();
|
||
HIE_fn_vComputePoAndIpoBoundingVolumes(SECT_hFatherSector);
|
||
HIE_fn_vComputeBoundingVolumeOfSuperObjectBranch(SECT_hFatherSector);
|
||
|
||
#if !defined(ACTIVE_EDITOR) /* {*/
|
||
fn_vRecurUpdateWithMatrixIdentityConst( SECT_hFatherSector );
|
||
#endif /* ACTIVE_EDITOR }*/
|
||
|
||
if ( strlen(_szLevelName) )
|
||
{
|
||
sprintf(szLevelFileName,"%s\\%s.RLI",_szLevelName,_szLevelName);
|
||
if (!SCR_fn_c_RdL0_IsSectionExists(szLevelFileName))
|
||
{
|
||
fn_vSetDisplayFlag(edmDisplayModeUseRLI,0);
|
||
fn_vSetDisplayFlag(edmDisplayModeUseStaticLight,1);
|
||
}
|
||
}
|
||
|
||
/* fn_vGameTestMemory();*/
|
||
|
||
fn_vTestAllSectorsListForIncoherences();
|
||
SHW_fn_vReInitShadowForMapChange();
|
||
#if defined(ACTIVE_EDITOR)
|
||
fn_vEnableEditorsMainWnd(TRUE);
|
||
#endif /* ACTIVE_EDITOR */
|
||
}
|
||
|
||
#if !defined(ACTIVE_EDITOR) /* {*/
|
||
|
||
/* fbolefeysot - 31/07/98{*/
|
||
extern GEO_tdstGeometricObject *HIE_fn_p_stGetGeometricObjectFromSuperObject( HIE_tdxHandleToSuperObject h_SuperObject );
|
||
/*END fbolefeysot}*/
|
||
void fn_vUpdateWithMatrixIdentityConst(HIE_tdxHandleToSuperObject h_SuperObject)
|
||
{
|
||
POS_tdxHandleToPosition hMatrix;
|
||
|
||
if( HIE_fn_bIsSuperObjectValid( h_SuperObject ) )
|
||
{
|
||
/* fbolefeysot - 31/07/98{*/
|
||
GEO_tdstGeometricObject *p_stObject;
|
||
|
||
p_stObject = HIE_fn_p_stGetGeometricObjectFromSuperObject(h_SuperObject);
|
||
if (!p_stObject || !GEO_bIsLookAt(p_stObject))
|
||
{
|
||
/*END fbolefeysot}*/
|
||
/* local matrix*/
|
||
hMatrix = HIE_fn_hGetSuperObjectMatrix( h_SuperObject );
|
||
if( POS_M_xIsIdentity( hMatrix ) )
|
||
{
|
||
/*ANNECY TQ 23/07/98{*/
|
||
/* The matrices are allocated in a bloc of the module GEO and not in POS*/
|
||
/* POS_fn_vDestroyMatrix( hMatrix );*/
|
||
GEO_fn_vDestroyMatrix( hMatrix );
|
||
/*ENDANNECY TQ}*/
|
||
|
||
HIE_fn_vSetSuperObjectMatrix( h_SuperObject , POS_fn_hGetMatrixIdentityConst() );
|
||
}
|
||
/* global matrix*/
|
||
hMatrix = HIE_fn_hGetSuperObjectGlobalMatrix( h_SuperObject );
|
||
if( POS_M_xIsIdentity( hMatrix ) )
|
||
{
|
||
/*ANNECY TQ 23/07/98{*/
|
||
/* POS_fn_vDestroyMatrix( hMatrix );*/
|
||
GEO_fn_vDestroyMatrix( hMatrix );
|
||
/*ENDANNECY TQ}*/
|
||
HIE_M_vSetSuperObjectMember( h_SuperObject , hGlobalMatrix , POS_fn_hGetMatrixIdentityConst() );
|
||
HIE_M_vSetSuperObjectMember( h_SuperObject , lLastComputeFrame, HIE_C_lCounterNotValid);
|
||
}
|
||
/* fbolefeysot - 31/07/98{*/
|
||
}
|
||
/*END fbolefeysot}*/
|
||
|
||
}
|
||
}
|
||
|
||
void fn_vRecurUpdateWithMatrixIdentityConst(HIE_tdxHandleToSuperObject h_SuperObject)
|
||
{
|
||
HIE_tdxHandleToSuperObject hChild;
|
||
long xI;
|
||
|
||
/* current*/
|
||
fn_vUpdateWithMatrixIdentityConst( h_SuperObject );
|
||
/* children*/
|
||
HIE_M_ForEachChildOf( h_SuperObject , hChild , xI )
|
||
{
|
||
fn_vRecurUpdateWithMatrixIdentityConst( hChild );
|
||
}
|
||
}
|
||
|
||
#endif /* ACTIVE_EDITOR }*/
|
||
|
||
/* ANNECY MT - 08/09/98 {*/
|
||
void fn_vInitCompleteWorld3DEngine(LPCTSTR szName,long _lSubMapNumber)
|
||
/* END ANNECY MT }*/
|
||
{
|
||
HIE_tdxHandleToSuperObject h_SuperObject;
|
||
|
||
// FBF N64-format pour coords, et logfile dans x:\exe\geodump.log{
|
||
#ifdef U64CONVERTETLOG
|
||
g_bLoadMap = TRUE;
|
||
|
||
#endif //U64CONVERTLOG
|
||
// } fin N64-format
|
||
|
||
/* ANNECY MT - 08/09/98 {*/
|
||
if (_lSubMapNumber == 0)
|
||
{
|
||
h_SuperObject = HIE_fn_hLoadSPOFile(".",(char *) szName);
|
||
}
|
||
else
|
||
{
|
||
h_SuperObject = HIE_fn_hLoadSUBFile(".",(char *) szName,GAM_M_GetSubMap(_lSubMapNumber),GAM_M_GetEntry(_lSubMapNumber));
|
||
}
|
||
/* END ANNECY MT }*/
|
||
HIE_fn_vLoadLinkedObject(h_SuperObject);
|
||
|
||
g_hLoadedSuperObjectRoot = h_SuperObject;
|
||
HIE_fn_vSetSuperObjectObjectAndType(h_SuperObject,HIE_fn_hGetSuperObjectObject(h_SuperObject),HIE_C_ulSuperObject);
|
||
HIE_fn_vSuperObjectAddTail(gp_stActualWorld,h_SuperObject);
|
||
HIE_fn_vSetSuperObjectObjectAndType(gp_stActualWorld,NULL,HIE_C_ulSuperObject);
|
||
// FBF N64-format pour coords, et logfile dans x:\exe\geodump.log{
|
||
#ifdef U64CONVERTETLOG
|
||
g_bLoadMap = FALSE;
|
||
|
||
#endif //U64CONVERTLOG
|
||
// } fin N64-format
|
||
|
||
}
|
||
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : verify the coherence of submap
|
||
*-----------------------------------------------------------------------------
|
||
* Input : void
|
||
* Output : void
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 08/09/98 Author : Marc
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
/* ANNECY MT - 08/09/98 {*/
|
||
void fn_vVerifySubMapCoherence(char *_szLevelName,long _lSubMapNumber)
|
||
{
|
||
SCR_tdst_Link_Table *p_stLK;
|
||
SCR_tdst_Link_Value *p_xLVa = NULL;
|
||
unsigned int uiPos;
|
||
HIE_tdxHandleToSuperObject h_SO;
|
||
long lType;
|
||
long lNbError;
|
||
FILE *pFile;
|
||
char *p_cDelimiter,*p_cText;
|
||
|
||
pFile = fopen("SubMap.log","at");
|
||
lNbError = 0;
|
||
|
||
if( pFile )
|
||
{
|
||
fprintf( pFile ,"==============================================================================\n");
|
||
fprintf( pFile ,"Map : %s Submap : %02d\n" , _szLevelName , GAM_M_GetSubMap(_lSubMapNumber) );
|
||
fprintf( pFile ,"==============================================================================\n");
|
||
}
|
||
/**/
|
||
p_stLK = HIE_fn_p_stGetSuperObjectLinkTable();
|
||
uiPos = 0;
|
||
SCR_M_DyAr_GetNextElement(SCR_tdst_Link_Value, uiPos, p_xLVa, SCR_M_st_Link_GetDynamicArray(p_stLK));
|
||
while(p_xLVa)
|
||
{
|
||
if( SCR_M_e_Link_GetState( p_xLVa ) == SCR_ELS_Link_Initialized )
|
||
{
|
||
h_SO = (HIE_tdxHandleToSuperObject)SCR_M_ul_Link_GetValue( p_xLVa );
|
||
lType = HIE_fn_ulGetSuperObjectType( h_SO );
|
||
|
||
if( (lType == -3) && (HIE_fn_hGetSuperObjectFather( h_SO ) == NULL) )
|
||
{
|
||
/* error*/
|
||
lNbError++;
|
||
if( pFile )
|
||
{
|
||
p_cText = SCR_M_p_sz_Link_GetKey( p_xLVa );
|
||
p_cDelimiter = strchr( p_cText , ':' );
|
||
fprintf( pFile , "Sector %s loaded but isn't child of root\n" , ++p_cDelimiter);
|
||
}
|
||
}
|
||
}
|
||
/* next*/
|
||
uiPos++;
|
||
SCR_M_DyAr_GetNextElement(SCR_tdst_Link_Value, uiPos, p_xLVa, SCR_M_st_Link_GetDynamicArray(p_stLK));
|
||
}
|
||
/**/
|
||
if( lNbError )
|
||
{
|
||
if( pFile )
|
||
{
|
||
fprintf( pFile ,"==============================================================================\n\n");
|
||
fclose( pFile );
|
||
}
|
||
/* message*/
|
||
M_GameInformationErrorWithString(E_uwGameUnCoherentSubMap,"Uncoherent SubMap");
|
||
}
|
||
}
|
||
|
||
/* END ANNECY MT }*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : Load the map
|
||
*-----------------------------------------------------------------------------
|
||
* Input : Level number
|
||
* Output : void
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 05/11/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
/* ANNECY MT - 08/09/98 {*/
|
||
void fn_vLoadTheMap(char *_szLevelName,long _lSubMapNumber)
|
||
/* END ANNECY MT }*/
|
||
{
|
||
char szLevelFileName[_MAX_PATH];
|
||
POS_tdstCompletePosition * p_stMatrix,stMatrix;
|
||
MTH3D_tdstVector stVector;
|
||
|
||
GLI_xCreateLight(&gp_stLight , GLI_C_lParallelLight);
|
||
MTH3D_M_vSetVectorElements(&stVector,0,0,1);
|
||
POS_fn_vSetIdentityMatrix(&stMatrix);
|
||
POS_fn_vSetTranslationVector(&stMatrix,&stVector);
|
||
fn_vTurnMatrixX ( &stMatrix,MTH_C_Pi);
|
||
GLI_xSetLightMatrix(gp_stLight ,&stMatrix);
|
||
|
||
#if defined(ACTIVE_EDITOR) /* {*/
|
||
p_stMatrix = GEO_fn_hCreateMatrix();
|
||
#else
|
||
p_stMatrix = POS_fn_hGetMatrixIdentityConst();
|
||
#endif
|
||
/* The static complet world */
|
||
gp_stActualWorld = HIE_fn_hCreateSuperObject();
|
||
HIE_fn_vSetSuperObjectObjectAndType(gp_stActualWorld,NULL,HIE_C_ulSuperObject);
|
||
HIE_fn_vSetSuperObjectMatrix(gp_stActualWorld,p_stMatrix);
|
||
|
||
/* The Active dynamic world */
|
||
gp_stDynamicWorld = HIE_fn_hCreateSuperObject();
|
||
HIE_fn_vSetSuperObjectObjectAndType(gp_stDynamicWorld,NULL,HIE_C_ulSuperObject);
|
||
HIE_fn_vSetSuperObjectMatrix(gp_stDynamicWorld,p_stMatrix);
|
||
HIE_fn_vSuperObjectAddTail(gp_stActualWorld,gp_stDynamicWorld);
|
||
|
||
/* The Inactive dynamic world */
|
||
gp_stInactiveDynamicWorld = HIE_fn_hCreateSuperObject();
|
||
HIE_fn_SO_vSetFlags(gp_stInactiveDynamicWorld , HIE_fn_SO_ulGetFlags(gp_stInactiveDynamicWorld) | HIE_C_Flag_ulNotPickable);
|
||
HIE_fn_vSetSuperObjectObjectAndType(gp_stInactiveDynamicWorld,NULL,HIE_C_ulSuperObject);
|
||
HIE_fn_vSetSuperObjectMatrix(gp_stInactiveDynamicWorld,p_stMatrix);
|
||
HIE_fn_vSuperObjectAddTail(gp_stActualWorld,gp_stInactiveDynamicWorld);
|
||
|
||
g_hSOCurrentMainSector = NULL;
|
||
g_hSOPreviousMainSector = NULL;
|
||
|
||
if ( strlen(_szLevelName) )
|
||
{
|
||
/* Loading and linking the map world */
|
||
sprintf(szLevelFileName,"Chargement de la map (%s)",_szLevelName);
|
||
fn_vChangeWindowTitle(szLevelFileName);
|
||
/* ANNECY MT - 08/09/98 {*/
|
||
if(_lSubMapNumber == 0)
|
||
sprintf(szLevelFileName,"%s\\%s.%s",_szLevelName,_szLevelName,"spo");
|
||
else
|
||
sprintf(szLevelFileName,"%s\\%s.%s",_szLevelName,_szLevelName,"sub");
|
||
/* END ANNECY MT }*/
|
||
/*
|
||
if(g_bUseBinaryData==1)
|
||
{
|
||
fn_vBinLoadLevelFromOneFile(szLevelName);
|
||
|
||
HIE_fn_vSuperObjectAddTail(gp_stActualWorld,g_hLoadedSuperObjectRoot);
|
||
HIE_fn_vSetSuperObjectObjectAndType(gp_stActualWorld,NULL,C_ucSuperObject);
|
||
}
|
||
else
|
||
*/
|
||
/* ANNECY MT - 08/09/98 {*/
|
||
fn_vInitCompleteWorld3DEngine(szLevelFileName,_lSubMapNumber);
|
||
/* END ANNECY MT }*/
|
||
|
||
/* init the border box of all sectors*/
|
||
SECT_fn_vInitAllBorders(g_hLoadedSuperObjectRoot);
|
||
}
|
||
|
||
/* ANNECY MT - 08/09/98 {*/
|
||
GAM_fn_vInitSubMapPositionList();
|
||
if(_lSubMapNumber != 0)
|
||
{
|
||
fn_vVerifySubMapCoherence(_szLevelName,_lSubMapNumber);
|
||
}
|
||
else
|
||
{
|
||
sprintf(szLevelFileName,"%s\\%s.%s",_szLevelName,_szLevelName,"sub");
|
||
GAM_fn_vLoadSubMapPositions(szLevelFileName);
|
||
}
|
||
/* END ANNECY MT }*/
|
||
}
|
||
|
||
|
||
|
||
/**************** FabPerez SectorAnalyse ************/
|
||
/*****************************************************/
|
||
#if defined(WIN32) && defined(_DEBUG)
|
||
void fn_InitMapSectorStruct(void)
|
||
{
|
||
HIE_tdxHandleToSuperObject hSuperObjectSector;
|
||
SECT_tdxHandleOfSectorObject hSectorObject;
|
||
int iNbSector = 0, i;
|
||
|
||
HIE_M_ForEachChildOf(g_hLoadedSuperObjectRoot,hSuperObjectSector,iNbSector)
|
||
{
|
||
};
|
||
pt_aStructInfoSectorTrame = malloc(sizeof(StructInfoSectorTrame)*iNbSector);
|
||
|
||
HIE_M_ForEachChildOf(g_hLoadedSuperObjectRoot,hSuperObjectSector,i)
|
||
{
|
||
hSectorObject = HIE_fn_hGetSuperObjectObject(hSuperObjectSector);
|
||
(pt_aStructInfoSectorTrame+i)->i_NbSectorMap = iNbSector;
|
||
(pt_aStructInfoSectorTrame+i)->p_a256_SectorName = hSectorObject->szSectorName;
|
||
(pt_aStructInfoSectorTrame+i)->ul_UneTrame = 0;
|
||
(pt_aStructInfoSectorTrame+i)->ul_DeuxTrames = 0;
|
||
(pt_aStructInfoSectorTrame+i)->ul_TroisTrames = 0;
|
||
}
|
||
}
|
||
#endif /*WIN32 & _DEBUG*/
|
||
/************** Fin FabPerez SectorAnalyse ***********/
|
||
/******************************************************/
|
||
|
||
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : Callback script function
|
||
*-----------------------------------------------------------------------------
|
||
* Input : ...
|
||
* Output : void
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 29/08/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
SCR_tde_Anl_ReturnValue fn_eScriptCallBackLevelDescription(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
|
||
{
|
||
SCR_tdst_Cxt_Values *pScriptContext;
|
||
SND_tduRefEvt stSndThemeEvent;
|
||
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
|
||
|
||
_p_stFile=_p_stFile;
|
||
|
||
if (M_IsTitle)
|
||
{
|
||
g_bBeginMapSoundEventFlag = FALSE;
|
||
#ifndef RETAIL
|
||
if ( SNA_M_bTestSaveLevelDesc() )
|
||
SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ul_LevelDscTitle );
|
||
#endif
|
||
}
|
||
|
||
|
||
if (M_IsEntry)
|
||
{
|
||
if(M_ActionIs(C_EntryInitNumberOfAlways))
|
||
{
|
||
g_stAlways.ulMaxNumberOfAlways = fn_lAToI(_ap_szParams[0]);
|
||
#ifndef RETAIL
|
||
if(SNA_M_bTestSaveLevelDesc())
|
||
SNA_fn_vWriteLongEntryToCurrentDscFile( SNA_C_ul_NumberOfAlways, fn_lAToI(_ap_szParams[0]) );
|
||
#endif
|
||
}
|
||
/* else if (M_ActionIs(C_EntryReserveString))
|
||
{
|
||
fn_vReserveSuperimposedText(fn_lAToI(_ap_szParams[0]),FON_fn_hGetTextHandle(_ap_szParams[1]),FON_fn_xGetFont(_ap_szParams[2]),fn_fAToF(_ap_szParams[3]),fn_fAToF(_ap_szParams[4]),-1);
|
||
}*/
|
||
#ifdef U64
|
||
else if (M_ActionIs("LoadSoundEvent"))
|
||
#else
|
||
else if (M_ActionIs("LoadSoundEvent") && g_iSoundOnHD)
|
||
/* play theme while level loading only if the sound is on the Hard Drive*/
|
||
#endif
|
||
{
|
||
/* Load theme event for this level:*/
|
||
pScriptContext=SCR_fnp_st_RdL0_AnalyseSection(_ap_szParams[0], SCR_CDF_uw_Anl_Normal);
|
||
stSndThemeEvent.pstPtr=(SND_tdstBlockEvent *)SCR_M_ul_RdL0_ExtractLongValue(pScriptContext,0);
|
||
SND_fn_lSendRequestSound(/*C_SOUNDOBJECT_MUSIC*/SND_C_OBJET_FANTOME,g_lSoundObjectTypeMusic,stSndThemeEvent,0/*prio*/,NULL/*Proc=NULL*/);
|
||
}
|
||
else if( M_ActionIs("BeginMapSoundEvent") )
|
||
{
|
||
pScriptContext=SCR_fnp_st_RdL0_AnalyseSection(_ap_szParams[0], SCR_CDF_uw_Anl_Normal);
|
||
g_stBeginMapSoundEvent.pstPtr=(SND_tdstBlockEvent *)SCR_M_ul_RdL0_ExtractLongValue(pScriptContext,0);
|
||
g_bBeginMapSoundEventFlag = TRUE;
|
||
}
|
||
else
|
||
M_GameInformationError(E_uwGameScriptCallBackDescriptionUnknownAction);
|
||
}
|
||
#ifndef RETAIL
|
||
else if ( M_IsEnd )
|
||
if ( SNA_M_bTestSaveLevelDesc() )
|
||
SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ulEndOfDescSection );
|
||
#endif
|
||
|
||
return(eReturnValue);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : Callback script function
|
||
*-----------------------------------------------------------------------------
|
||
* Input : ...
|
||
* Output : void
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 29/08/96 Author : CB
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
extern char gc_EraseBackground;
|
||
SCR_tde_Anl_ReturnValue fn_eScriptCallBackLevelOptions(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
|
||
{
|
||
_p_stFile = _p_stFile;
|
||
|
||
if (M_IsTitle)
|
||
{
|
||
gc_EraseBackground = 1;
|
||
}
|
||
|
||
|
||
if (M_IsEntry)
|
||
{
|
||
if(M_ActionIs("EraseBackground"))
|
||
{
|
||
if(!strcmpi(_ap_szParams[0], "off"))
|
||
gc_EraseBackground = 0;
|
||
else
|
||
gc_EraseBackground = 1;
|
||
}
|
||
else
|
||
M_GameInformationError(E_uwGameScriptCallBackDescriptionUnknownAction);
|
||
}
|
||
|
||
return(SCR_ERV_Anl_NormalReturn);
|
||
}
|
||
|
||
unsigned long fn_ulEmptySizeOf()
|
||
{
|
||
return 0;
|
||
}
|
||
void fn_vEmptyAlloc(struct tdstEngineObject_ *p_stObject)
|
||
{
|
||
}
|
||
void fn_vEmptyFree(struct tdstEngineObject_ *p_stObject)
|
||
{
|
||
}
|
||
void fn_vEmptyInit(struct tdstEngineObject_ *p_stObject,enum tdeObjectTreeInit_ eObjectInit)
|
||
{
|
||
}
|
||
void fn_vEmptyDesinit(struct tdstEngineObject_ *p_stObject,enum tdeObjectTreeInit_ eObjectInit)
|
||
{
|
||
}
|
||
void fn_vEmptyCopyClone(struct tdstEngineObject_ * _p_stObjectDest,struct tdstEngineObject_ * _p_stObjectSrc)
|
||
{
|
||
}
|
||
|
||
/*END*/
|
||
|
||
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : Callback script function
|
||
*-----------------------------------------------------------------------------
|
||
* Input : ...
|
||
* Output : void
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 29/08/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications : For loading chars of the fix too (not only level's chars...)
|
||
*---------------------------------------------------------------------------*/
|
||
SCR_tde_Anl_ReturnValue fn_eScriptCallBackLevelCharacters(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
|
||
{
|
||
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
|
||
HIE_tdxHandleToSuperObject h_SupObject = NULL;
|
||
static tdstEngineObject *p_stEngineObject = NULL;
|
||
SCR_tdst_Cxt_Values *p_stValues = NULL;
|
||
|
||
static char g_szCharacterSection[MAX_PATH];
|
||
static ACP_tdxBool s_bMainCharacter = FALSE,s_bMainCamera = FALSE;
|
||
|
||
static ACP_tdxBool s_bLaunchingSound = FALSE;
|
||
/* ANNECY MT - 19/11/98 {*/
|
||
static ACP_tdxBool s_bInAllSubMap = FALSE;
|
||
/* END ANNECY MT }*/
|
||
|
||
_p_stFile = _p_stFile;
|
||
|
||
if (M_IsTitle && !GAM_fn_bIsEngineInFixMode())
|
||
{
|
||
int i = 0;
|
||
char *szParam;
|
||
|
||
s_bInAllSubMap = s_bLaunchingSound = s_bMainCharacter = s_bMainCamera = FALSE;
|
||
|
||
/* Scan all parameters and set flags accordingly..*/
|
||
while( (szParam = _ap_szParams[i++]) != NULL )
|
||
{
|
||
if( !s_bMainCharacter )
|
||
if( stricmp(szParam,C_LevelPrincipalCharacter) == 0 )
|
||
{ s_bMainCharacter = TRUE; continue; }
|
||
|
||
if( !s_bLaunchingSound )
|
||
if( stricmp(szParam,C_LevelCharacterLauchingSounds) == 0 ||
|
||
stricmp(szParam,C_LevelCharacterLaunchingSounds) == 0 )
|
||
{ s_bLaunchingSound = TRUE; continue; }
|
||
|
||
if( !s_bMainCamera )
|
||
if( stricmp(szParam,C_LevelStandardCamera) == 0 )
|
||
s_bMainCamera = TRUE;
|
||
}
|
||
/* The SuperObject is created later, to avoid double creation for chars in fix.*/
|
||
/* For now, set it to NULL*/
|
||
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,NULL);
|
||
|
||
}
|
||
else if (M_IsEntry)
|
||
{
|
||
/* For all entries : get SuperObject handle.*/
|
||
/* This handle is NULL before entry C_LevelLinkCharacters and C_LevelCharacterMatrixTranslation*/
|
||
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,HIE_tdxHandleToSuperObject,h_SupObject);
|
||
|
||
|
||
if (M_ActionIs(C_LevelLinkCharacters))
|
||
{
|
||
VIG_fn_vAddToProgressBar(1);
|
||
M_CheckScriptParamNumber(1);
|
||
|
||
strcpy( g_szCharacterSection, _ap_szParams[0]);
|
||
|
||
/* 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();
|
||
/* 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_stValues = SCR_fnp_st_RdL0_AnalyseSection(g_szCharacterSection, SCR_CDF_uw_Anl_Normal);
|
||
assert( p_stValues ); /* Test if we can get character's EngineObject.*/
|
||
p_stEngineObject=(tdstEngineObject *)(p_stValues->a_ulValues[0]);
|
||
|
||
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++;
|
||
}
|
||
}
|
||
|
||
else if (M_ActionIs(C_LevelCharacterIsInAllSubmap))
|
||
{
|
||
s_bInAllSubMap = TRUE;
|
||
}
|
||
else if (M_ActionIs(C_LevelCharacterMatrixTranslation) && !GAM_fn_bIsEngineInFixMode() )
|
||
{
|
||
MTH3D_tdstVector stTempMatrixTranslation;
|
||
HIE_tdxHandleToSuperObject h_SOSector;
|
||
|
||
if( (fn_lGetSubMapNumber()!=0) && g_stEngineStructure.bResurection && (s_bMainCamera || s_bMainCharacter))
|
||
{
|
||
if(s_bMainCamera)
|
||
POS_fn_vGetTranslationVector(&g_stEngineStructure.stMainCameraPosition,&stTempMatrixTranslation);
|
||
else if(s_bMainCharacter)
|
||
POS_fn_vGetTranslationVector(&g_stEngineStructure.stMainCharacterPosition,&stTempMatrixTranslation);
|
||
}
|
||
else
|
||
{
|
||
M_CheckScriptParamNumber(3);
|
||
MTH3D_M_vSetVectorElements(&stTempMatrixTranslation,fn_fAToF(_ap_szParams[0]),fn_fAToF(_ap_szParams[1]),fn_fAToF(_ap_szParams[2]));
|
||
}
|
||
|
||
/* ANNECY MT - 19/11/98 {*/
|
||
if ((fn_lGetSubMapNumber() != 0) && !s_bInAllSubMap)
|
||
{
|
||
h_SOSector=SECT_fn_hResearchInWhatSectorIAm(SECT_hFatherSector,&stTempMatrixTranslation);
|
||
|
||
if (SECT_fn_bIsThisSectorUniverse(h_SOSector))
|
||
{
|
||
if(SCR_fnp_st_RdL0_GetOpenSection(g_szCharacterSection,0) == NULL)
|
||
{
|
||
/* the .car has not already been analysed, so the actor is not in fix.*/
|
||
/* we can ignore it.*/
|
||
eReturnValue = SCR_ERV_Anl_TerminateCurrentSection;
|
||
return(eReturnValue);
|
||
}
|
||
}
|
||
}
|
||
/* END ANNECY MT }*/
|
||
|
||
p_stValues = SCR_fnp_st_RdL0_AnalyseSection(g_szCharacterSection, SCR_CDF_uw_Anl_Normal);
|
||
assert( p_stValues );
|
||
p_stEngineObject=(tdstEngineObject *)(p_stValues->a_ulValues[0]);
|
||
|
||
/* 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);
|
||
|
||
}
|
||
|
||
/* A this point, the SuperObject has been created, so we can store it.*/
|
||
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,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( s_bMainCharacter )
|
||
MC_fn_vAddCharacterInMainCharacterList(h_SupObject);
|
||
if( s_bLaunchingSound )
|
||
fn_vSectInfoSetCharacterLauchingEvents( h_SupObject );
|
||
if( s_bMainCamera )
|
||
g_stEngineStructure.h_StdCamCaracter = h_SupObject;
|
||
|
||
/* ANNECY MT - 19/11/98 {*/
|
||
#if defined(ACTIVE_EDITOR)
|
||
fn_vStdGameSetInAllSubMaps(M_GetMSHandle(h_SupObject,StandardGame),s_bInAllSubMap);
|
||
#endif
|
||
/* END ANNECY MT }*/
|
||
}
|
||
else if (M_ActionIs(C_LevelCharacterMatrixRotation))
|
||
{
|
||
MTH3D_tdstVector stTempRotationVX,stTempRotationVY,stTempRotationVZ;
|
||
|
||
if( (fn_lGetSubMapNumber()!=0) && g_stEngineStructure.bResurection && (s_bMainCamera || s_bMainCharacter))
|
||
{
|
||
if(s_bMainCamera)
|
||
POS_fn_vGetRotationMatrix(&g_stEngineStructure.stMainCameraPosition,&stTempRotationVX,&stTempRotationVY,&stTempRotationVZ);
|
||
else if(s_bMainCharacter)
|
||
POS_fn_vGetRotationMatrix(&g_stEngineStructure.stMainCharacterPosition,&stTempRotationVX,&stTempRotationVY,&stTempRotationVZ);
|
||
}
|
||
else
|
||
{
|
||
M_CheckScriptParamNumber(9);
|
||
MTH3D_M_vSetVectorElements(&stTempRotationVX
|
||
,fn_fAToF(_ap_szParams[0])
|
||
,fn_fAToF(_ap_szParams[1])
|
||
,fn_fAToF(_ap_szParams[2]));
|
||
MTH3D_M_vSetVectorElements(&stTempRotationVY
|
||
,fn_fAToF(_ap_szParams[3])
|
||
,fn_fAToF(_ap_szParams[4])
|
||
,fn_fAToF(_ap_szParams[5]));
|
||
MTH3D_M_vSetVectorElements(&stTempRotationVZ
|
||
,fn_fAToF(_ap_szParams[6])
|
||
,fn_fAToF(_ap_szParams[7])
|
||
,fn_fAToF(_ap_szParams[8]));
|
||
}
|
||
POS_fn_vSetRotationMatrix(fn_p_st3dDataGetMatrix(M_GetMSHandle(h_SupObject,3dData)),
|
||
&stTempRotationVX,&stTempRotationVY,&stTempRotationVZ ) ;
|
||
}
|
||
else if (M_ActionIs(C_LevelCharacterMatrixScale) && !GAM_fn_bIsEngineInFixMode())
|
||
{
|
||
MTH3D_tdstVector stTempScaleVX,stTempScaleVY,stTempScaleVZ;
|
||
|
||
if( (fn_lGetSubMapNumber()!=0) && g_stEngineStructure.bResurection && (s_bMainCamera || s_bMainCharacter))
|
||
{
|
||
if(s_bMainCamera)
|
||
POS_fn_vGetScaleMatrix(&g_stEngineStructure.stMainCameraPosition,&stTempScaleVX,&stTempScaleVY,&stTempScaleVZ);
|
||
else if(s_bMainCharacter)
|
||
POS_fn_vGetScaleMatrix(&g_stEngineStructure.stMainCharacterPosition,&stTempScaleVX,&stTempScaleVY,&stTempScaleVZ);
|
||
}
|
||
else
|
||
{
|
||
M_CheckScriptParamNumber(9);
|
||
MTH3D_M_vSetVectorElements(&stTempScaleVX
|
||
,fn_fAToF(_ap_szParams[0])
|
||
,fn_fAToF(_ap_szParams[1])
|
||
,fn_fAToF(_ap_szParams[2]));
|
||
MTH3D_M_vSetVectorElements(&stTempScaleVY
|
||
,fn_fAToF(_ap_szParams[3])
|
||
,fn_fAToF(_ap_szParams[4])
|
||
,fn_fAToF(_ap_szParams[5]));
|
||
MTH3D_M_vSetVectorElements(&stTempScaleVZ
|
||
,fn_fAToF(_ap_szParams[6])
|
||
,fn_fAToF(_ap_szParams[7])
|
||
,fn_fAToF(_ap_szParams[8]));
|
||
}
|
||
/**/
|
||
POS_fn_vSetScaleMatrix (fn_p_st3dDataGetMatrix(M_GetMSHandle(h_SupObject,3dData)),
|
||
&stTempScaleVX,&stTempScaleVY,&stTempScaleVZ ) ;
|
||
}
|
||
else if (M_ActionIs(C_LevelCharacterInitialState) && !GAM_fn_bIsEngineInFixMode())
|
||
{
|
||
char szCompletFileName[_MAX_PATH];
|
||
SCR_tdst_Link_Value *p_xIndex;
|
||
strcpy(szCompletFileName,fn_szGetFamiliesDataPath());
|
||
strcat(szCompletFileName,"\\");
|
||
strcat(szCompletFileName,_ap_szParams[0]);
|
||
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));
|
||
}
|
||
else if(M_ActionIs(C_LevelCharacterIsAlwaysActive) && !GAM_fn_bIsEngineInFixMode())
|
||
{
|
||
fn_vAddCharacterInAlwaysActiveCharacterList(h_SupObject);
|
||
}
|
||
else if(M_ActionIs(C_LevelCharacterFlags) && !GAM_fn_bIsEngineInFixMode())
|
||
{
|
||
unsigned long ulFlags;
|
||
|
||
ulFlags = atol(_ap_szParams[0]);
|
||
ulFlags &= ~HIE_C_Flag_ulSuperimposed;
|
||
HIE_fn_SO_vSetFlags(h_SupObject, ulFlags);
|
||
/* Actors have zoom instead of scale*/
|
||
/* HIE_fn_SO_vSetFlags (h_SupObject, HIE_fn_SO_ulGetFlags (h_SupObject) | HIE_C_Flag_ulZoomInsteadOfScale);*/
|
||
}
|
||
|
||
else if (M_ActionIs(C_LevelCharacterTransparency) && !GAM_fn_bIsEngineInFixMode())
|
||
{
|
||
tdstEngineObject *p_stObject;
|
||
|
||
HIE_fn_vSetSuperObjectTransparenceLevel( h_SupObject, (float) atof( _ap_szParams[0] ) );
|
||
p_stObject = M_GetEngineObject( h_SupObject );
|
||
p_stObject->h_3dData->ucTransparency = (unsigned char)h_SupObject->fTransparenceLevel;
|
||
}
|
||
}
|
||
else if ( M_IsEnd )
|
||
{
|
||
if ( !GAM_fn_bIsEngineInFixMode() )
|
||
{
|
||
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,HIE_tdxHandleToSuperObject,h_SupObject);
|
||
POS_fn_vUpdateMatrixType( fn_p_st3dDataGetMatrix(M_GetMSHandle(h_SupObject,3dData)) );
|
||
}
|
||
/* check that the principal actor has no zoom!*/
|
||
if ( s_bMainCharacter && !POS_fn_ulIsNotScaledMatrix(HIE_fn_hGetSuperObjectMatrix(h_SupObject)) )
|
||
{
|
||
Erm_fn_iMessageBox("The principal actor has zoom or scale in this map\nThis is not allowed.", "Warning!", MB_TOPMOST| MB_ICONEXCLAMATION | MB_OK);
|
||
fn_vForceEditor();
|
||
}
|
||
}
|
||
|
||
return(eReturnValue);
|
||
}
|
||
|
||
|
||
|
||
/* For conditional sound bank load test:*/
|
||
int gs_iTempMapState=0;
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : Callback script function
|
||
*-----------------------------------------------------------------------------
|
||
* Input : ...
|
||
* Output : void
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 15/08/97 Author : Frederic decreau
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
SCR_tde_Anl_ReturnValue fn_eScriptCallBackLevelSoundBank(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
|
||
{
|
||
|
||
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
|
||
char szLevelName[100];
|
||
char szSectionName[150];
|
||
BOOL bLoadMapParsed;
|
||
/* int iBankId;*/
|
||
|
||
_p_stFile=_p_stFile;
|
||
|
||
if (M_IsTitle)
|
||
{
|
||
#if defined (ACTIVE_EDITOR)
|
||
g_bSectionSoundFoundInLevelDSC = TRUE;
|
||
#endif /*ACTIVE_EDITOR*/
|
||
|
||
/* SND_fn_bStartLoadBanks();*/
|
||
#ifndef RETAIL
|
||
SCR_M_RdL0_SetContextLong(0, 0, FALSE)
|
||
if (SNA_M_bTestSaveGameDesc() || SNA_M_bTestSaveLevelDesc())
|
||
{
|
||
int a500_iArray[500];
|
||
int iSize;
|
||
SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ul_LevelDscLevelSoundBanks );
|
||
|
||
if (SNA_M_bTestSaveGameDesc())
|
||
SND_fn_vLoadSoundMap("Fix",TRUE);
|
||
else
|
||
SND_fn_vLoadSoundMap(fn_p_szGetLevelName(),TRUE);
|
||
|
||
iSize = SND_fn_iGetLoadedBankArray(a500_iArray, 500);
|
||
SNA_fn_vWriteIntArrayEntryToCurrentDscFile
|
||
(
|
||
SNA_C_ul_LevelLoadMap,
|
||
iSize,
|
||
a500_iArray
|
||
);
|
||
}
|
||
#endif
|
||
}
|
||
else if (M_IsEntry)
|
||
{
|
||
if (M_ActionIs("LoadMap"))
|
||
{
|
||
#ifndef RETAIL
|
||
if (!(SNA_M_bTestSaveGameDesc() || SNA_M_bTestSaveLevelDesc()))
|
||
{
|
||
if (SCR_fn_c_RdL0_IsSectionExists(_ap_szParams[0]))
|
||
{
|
||
SND_fn_bStartLoadBanks();
|
||
SCR_fnp_st_RdL0_AnalyseSection(_ap_szParams[0],SCR_CDF_uw_Anl_ForceAnalyse);
|
||
SND_fn_bEndLoadBanks();
|
||
SCR_M_RdL0_SetContextLong(0, 0, TRUE)
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
/* else if (M_ActionIs("LoadSoundBank"))
|
||
{
|
||
iBankId=atoi(_ap_szParams[0]);
|
||
if ( SNA_M_bTestSaveGameDesc() || SNA_M_bTestSaveLevelDesc() )
|
||
{
|
||
SNA_fn_vWriteLongEntryToCurrentDscFile
|
||
(
|
||
SNA_C_ul_LevelLoadSoundBank,
|
||
(long)iBankId
|
||
);
|
||
}
|
||
|
||
SND_fn_bInitBank(iBankId);
|
||
}
|
||
|
||
*/ }
|
||
#ifndef RETAIL
|
||
else if (M_IsEnd)
|
||
{
|
||
SCR_M_RdL0_GetContextLong(0, 0, long, bLoadMapParsed);
|
||
if (!bLoadMapParsed)
|
||
{
|
||
/* load map from default lcb file */
|
||
strcpy(szLevelName ,fn_p_szGetLevelName());
|
||
strcpy(szSectionName,"Rayman2.lcb^SndMapE:");
|
||
if (!strcmp(szLevelName,""))
|
||
strcat(szSectionName,"Fix");
|
||
else
|
||
strcat(szSectionName,szLevelName);
|
||
|
||
if (SCR_fn_c_RdL0_IsSectionExists(szSectionName))
|
||
{
|
||
SND_fn_bStartLoadBanks();
|
||
SCR_fnp_st_RdL0_AnalyseSection(szSectionName,SCR_CDF_uw_Anl_ForceAnalyse);
|
||
SND_fn_bEndLoadBanks();
|
||
}
|
||
|
||
}
|
||
|
||
if ( SNA_M_bTestSaveGameDesc() || SNA_M_bTestSaveLevelDesc() )
|
||
SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ulEndOfDescSection );
|
||
/* SND_fn_bEndLoadBanks();*/
|
||
}
|
||
#endif
|
||
return(eReturnValue);
|
||
}
|
||
|
||
|
||
SCR_tde_Anl_ReturnValue fn_eScriptCallBackLevelSoundBankBlock(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
|
||
{
|
||
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
|
||
int iBlockValue,iBankId;
|
||
|
||
_p_stFile=_p_stFile;
|
||
|
||
if (M_IsTitle)
|
||
{
|
||
iBlockValue=atoi(_ap_szParams[0]);
|
||
}
|
||
else if (M_IsEntry)
|
||
{
|
||
if (M_ActionIs("LoadSoundBank"))
|
||
{
|
||
iBankId=atoi(_ap_szParams[0]);
|
||
SND_fn_bInitBank(iBankId);
|
||
}
|
||
}
|
||
else if (M_IsEnd)
|
||
{
|
||
}
|
||
|
||
return(eReturnValue);
|
||
}
|
||
|
||
|
||
// Try to find szSubString in szString.
|
||
// Comparaison is case INSENSITIVE.
|
||
static const char *stristr( const char *szString, const char *szSubString )
|
||
{
|
||
const char *p_szSrcCur;
|
||
const char *p_szToFindCur;
|
||
const char *p_szSrcStartFind;
|
||
|
||
|
||
p_szSrcStartFind = szString;
|
||
p_szToFindCur = szSubString;
|
||
for( p_szSrcCur = szString; *p_szSrcCur && *p_szToFindCur; p_szSrcCur++ )
|
||
{
|
||
if( tolower( *p_szSrcCur ) == tolower( *p_szToFindCur ) )
|
||
{
|
||
if( ! p_szSrcStartFind )
|
||
p_szSrcStartFind = p_szSrcCur;
|
||
p_szToFindCur ++;
|
||
}
|
||
else
|
||
{
|
||
p_szToFindCur = szSubString;
|
||
p_szSrcStartFind = NULL;
|
||
}
|
||
}
|
||
|
||
if( *p_szToFindCur == '\0' )
|
||
return p_szSrcStartFind;
|
||
|
||
return NULL;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : Callback script function
|
||
*-----------------------------------------------------------------------------
|
||
* Input : ...
|
||
* Output : void
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 29/08/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications : For loading always of the fix too (not only level's always...)
|
||
*---------------------------------------------------------------------------*/
|
||
#if defined(WIN32) && defined(_DEBUG) /* on PC, and in debug versions */
|
||
#ifdef __cplusplus
|
||
extern "C"
|
||
{
|
||
#endif
|
||
ACP_tdxBool g_bIsLoadingAnAlways = FALSE ;
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif /* WIN32 && _DEBUG */
|
||
|
||
SCR_tde_Anl_ReturnValue fn_eScriptCallBackLevelAlways(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
|
||
{
|
||
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
|
||
HIE_tdxHandleToSuperObject h_SupObject;
|
||
static tdstEngineObject *p_stEngineObject = NULL;
|
||
SCR_tdst_Cxt_Values *p_stValues ;
|
||
|
||
_p_stFile=_p_stFile;
|
||
|
||
if (M_IsTitle)
|
||
{
|
||
h_SupObject=NULL; /**** There's no super object for always character's*/
|
||
#if defined(WIN32) && defined(_DEBUG) /* on PC, and in debug versions */
|
||
g_bIsLoadingAnAlways = TRUE ;
|
||
#endif /* WIN32 && _DEBUG */
|
||
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,h_SupObject);
|
||
}
|
||
else if (M_IsEntry)
|
||
{
|
||
if (M_ActionIs(C_LevelLinkCharacters))
|
||
{
|
||
VIG_fn_vAddToProgressBar(1);
|
||
p_stValues = SCR_fnp_st_RdL0_AnalyseSection(_ap_szParams[0], SCR_CDF_uw_Anl_Normal);
|
||
if(p_stValues)
|
||
p_stEngineObject=(tdstEngineObject *)(p_stValues->a_ulValues[0]);
|
||
|
||
/* Add an always model only if it hasn't already been added (for always in the fix)*/
|
||
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));
|
||
}
|
||
|
||
/* GuS : added this for ago text display. */
|
||
if( ! g_AlphabetCharacterPointer && stristr( _ap_szParams[0], "alphabet" ) )
|
||
g_AlphabetCharacterPointer = p_stEngineObject;
|
||
|
||
}
|
||
else if (M_ActionIs(C_LevelCharacterInitialState))
|
||
{
|
||
char szCompletFileName[_MAX_PATH];
|
||
SCR_tdst_Link_Value *p_xIndex;
|
||
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,HIE_tdxHandleToSuperObject,h_SupObject);
|
||
|
||
strcpy(szCompletFileName,fn_szGetFamiliesDataPath());
|
||
strcat(szCompletFileName,"\\");
|
||
strcat(szCompletFileName,_ap_szParams[0]);
|
||
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));
|
||
}
|
||
/* ANNECY MT - 27/11/98 {*/
|
||
else if (M_ActionIs(C_LevelCharacterTransparency))
|
||
{
|
||
p_stEngineObject -> h_3dData -> ucTransparency = (unsigned char)atof( _ap_szParams[0] );
|
||
}
|
||
/* END ANNECY MT }*/
|
||
}
|
||
else if (M_IsEnd)
|
||
{
|
||
#if defined(WIN32) && defined(_DEBUG) /* on PC, and in debug versions */
|
||
g_bIsLoadingAnAlways = FALSE ;
|
||
#endif /* WIN32 && _DEBUG */
|
||
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,HIE_tdxHandleToSuperObject,h_SupObject);
|
||
}
|
||
|
||
return(eReturnValue);
|
||
}
|
||
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : Callback script function
|
||
*-----------------------------------------------------------------------------
|
||
* Input : ...
|
||
* Output : void
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 13/08/98 Author : Jacques Th<54>noz
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
SCR_tde_Anl_ReturnValue fn_eScriptCallBackLevelUseSAIWithEditor(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
|
||
{
|
||
#ifdef ACTIVE_EDITOR
|
||
g_bUseSAIWithEditor = TRUE;
|
||
#endif /* ACTIVE_EDITOR */
|
||
return SCR_ERV_Anl_NormalReturn;
|
||
}
|
||
|
||
|
||
|
||
/**************************************************************************/
|
||
void fn_vDeleteAllLevelReUsableSections(void)
|
||
{
|
||
#ifndef RETAIL
|
||
GAM_PrintAllUsedStaticMemory();
|
||
#endif
|
||
#if defined(_DEBUG)
|
||
GEO_fn_vPrintMemoryInformation();
|
||
GAM_fn_vPrintMemoryInformation();
|
||
SCR_fn_ul_Mem_GetAllocationSize(0,255);
|
||
#endif /* _DEBUG*/
|
||
SCR_fn_v_Mem_DeleteWithMemLevel(GAM_C_LevelScriptPriority,GAM_C_LevelScriptPriority);
|
||
SCR_fn_v_Mem_DeleteWithMemLevel(GAM_C_LevelDynamicScriptPriority,GAM_C_LevelDynamicScriptPriority);
|
||
SCR_fn_v_Mem_ReduceMemory();
|
||
}
|
||
/**************************************************************************/
|