1009 lines
38 KiB
C
1009 lines
38 KiB
C
/*=========================================================================
|
|
* MS_Micro.cpp : MS_Micro's functions
|
|
*
|
|
*
|
|
*
|
|
* MS_Micro MUST BE REPLACE BY THE C FILENAME
|
|
*
|
|
*
|
|
* Version 1.0
|
|
* Creation date 01/10/96
|
|
* Revision date
|
|
*
|
|
* That file needs to be compatible for all platforms.
|
|
*
|
|
* (c) Ubi Studios 1996
|
|
*=======================================================================*/
|
|
|
|
/*******************************************************/
|
|
/**** For the structures and variables declarations ****/
|
|
/*******************************************************/
|
|
#define D_Micro_StructureDefine
|
|
#define D_Micro_VariableDefine
|
|
|
|
#include "ToolsCPA.h"
|
|
|
|
#include "SND.h"
|
|
|
|
#include "Options/Options.h"
|
|
#include "Macros.h"
|
|
|
|
#include "Actions/AllActs.h"
|
|
|
|
#include "Structur/MemGame.h"
|
|
#include "Structur/ErrGame.h"
|
|
#include "Structur/Objects.h"
|
|
#include "Structur/GameScpt.h"
|
|
#include "Structur/StdObjSt.h"
|
|
#include "Structur/EngMode.h"
|
|
|
|
#include "Basic.h"
|
|
#include "ObjInit.h"
|
|
#include "ZeMem.h"
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : MS_Micro's object action script callback
|
|
*-----------------------------------------------------------------------------
|
|
* Input : Object pointer
|
|
* Output : None
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 01/10/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
#if defined(GAM_USE_SCRIPT)
|
|
SCR_tde_Anl_ReturnValue fn_eMicroScriptCallback(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;
|
|
MS_tdxHandleToMicro h_MS_Micro;
|
|
struct tdstEngineObject_ *p_stEngineObject;
|
|
MTH3D_tdstVector stX,stY,stZ;
|
|
|
|
_p_stFile=_p_stFile;
|
|
|
|
SCR_M_RdL0_GetSectionLong(C_ParentSection,0,struct tdstEngineObject_ *, p_stEngineObject);
|
|
|
|
if (M_IsTitle)
|
|
{
|
|
MMG_fn_vBeginMemoryInfo (MMG_C_lTypeMiniStructure , MMG_C_lSubTypeMicro , p_stEngineObject);
|
|
h_MS_Micro = fn_h_MicroRealAlloc();
|
|
MMG_fn_vEndMemoryInfo ();
|
|
p_stEngineObject->h_Micro = h_MS_Micro;
|
|
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,h_MS_Micro);
|
|
/*h_MS_Micro->hMicroMatrix = GEO_fn_hCreateMatrix();*/
|
|
h_MS_Micro->bIsActive = 0;
|
|
POS_fn_vSetIdentityMatrix( h_MS_Micro->hMicroMatrix );
|
|
/*fn_vAddMicro(p_stEngineObject);*/
|
|
}
|
|
else if (M_IsEntry)
|
|
{
|
|
if( M_ActionIs( C_EntryMicroRotationMatrix ) )
|
|
{
|
|
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,MS_tdxHandleToMicro,h_MS_Micro);
|
|
M_CheckScriptParamNumber(9);
|
|
MTH3D_M_vSetVectorElements(&stX,fn_fAToF(_ap_szParams[0]),
|
|
fn_fAToF(_ap_szParams[1]),fn_fAToF(_ap_szParams[2]));
|
|
MTH3D_M_vSetVectorElements(&stY,fn_fAToF(_ap_szParams[3]),
|
|
fn_fAToF(_ap_szParams[4]),fn_fAToF(_ap_szParams[5]));
|
|
MTH3D_M_vSetVectorElements(&stZ,fn_fAToF(_ap_szParams[6]),
|
|
fn_fAToF(_ap_szParams[7]),fn_fAToF(_ap_szParams[8]));
|
|
POS_fn_vSetRotationMatrix(h_MS_Micro->hMicroMatrix,&stX,&stY,&stZ);
|
|
}
|
|
else if( M_ActionIs( C_EntryMicroTranslationMatrix ) )
|
|
{
|
|
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,MS_tdxHandleToMicro,h_MS_Micro);
|
|
M_CheckScriptParamNumber(3);
|
|
MTH3D_M_vSetVectorElements(&stX,fn_fAToF(_ap_szParams[0]),
|
|
fn_fAToF(_ap_szParams[1]),fn_fAToF(_ap_szParams[2]));
|
|
POS_fn_vSetTranslationVector(h_MS_Micro->hMicroMatrix,&stX);
|
|
}
|
|
else if( M_ActionIs( C_EntryMicroActivation ) )
|
|
{
|
|
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,MS_tdxHandleToMicro,h_MS_Micro);
|
|
h_MS_Micro->bIsActive = 1;
|
|
|
|
/* fn_vAddMicro( p_stEngineObject );*/
|
|
}
|
|
else if( M_ActionIs( C_EntryMicroUnactivation ) )
|
|
{/* Default option*/
|
|
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,MS_tdxHandleToMicro,h_MS_Micro);
|
|
h_MS_Micro->bIsActive = 0;
|
|
}
|
|
}
|
|
return(eReturnValue);
|
|
}
|
|
#endif /* GAM_USE_SCRIPT */
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : MS_Micro's save structure
|
|
*-----------------------------------------------------------------------------
|
|
* Input : SCR_tdst_File_Description *, struct tdstEngineObject_ *
|
|
* Output : Void
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 28/02/97 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
/*
|
|
void fn_vMicroSaveMiniStructure(SCR_tdst_File_Description *p_stFile,struct tdstEngineObject_ *p_stObject)
|
|
{
|
|
char szSection[SCR_CV_ui_Cfg_MaxLenName];
|
|
MS_tdxHandleToMicro h_MS_Micro = p_stObject->h_Micro;
|
|
MTH3D_tdstVector stX,stY,stZ;
|
|
|
|
SCR_M_SvL0_SaveBlankLine(p_stFile);
|
|
SCR_M_SvL0_SaveComment(p_stFile, "**** MS_Micro mini-structure definition ****");
|
|
|
|
sprintf(szSection,"%s:",C_SectionMicroDescription);
|
|
SCR_M_SvL0_SaveBeginSection(p_stFile,szSection,SCR_CC_C_Cfg_EOL);
|
|
|
|
// ** Put here the saving script functions **
|
|
POS_fn_vGetRotationMatrix( h_MS_Micro->hMicroMatrix,&stX,&stY,&stZ );
|
|
SCR_M_SvL0_SaveEntry(p_stFile,C_EntryMicroRotationMatrix,SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf,9,
|
|
"%f,%f,%f,%f,%f,%f,%f,%f,%f",
|
|
stX.xX,stX.xY,stX.xZ,
|
|
stY.xX,stY.xY,stY.xZ,
|
|
stZ.xX,stZ.xY,stZ.xZ);
|
|
POS_fn_vGetTranslationVector( h_MS_Micro->hMicroMatrix,&stX );
|
|
SCR_M_SvL0_SaveEntry(p_stFile,C_EntryMicroTranslationMatrix,SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf,3,"%f,%f,%f",stX.xX,stX.xY,stX.xZ);
|
|
|
|
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL)
|
|
}
|
|
*/
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : MS_Micro's mini-structure sizeof
|
|
*-----------------------------------------------------------------------------
|
|
* Input : None
|
|
* Output : Size of
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 14/10/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
unsigned long fn_ulMicroSizeOf()
|
|
{
|
|
return(sizeof(struct tdstMicro_));
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : MS_Micro's object action allocation
|
|
*-----------------------------------------------------------------------------
|
|
* Input : Object pointer
|
|
* Output : None
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 01/10/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vMicroAlloc(struct tdstEngineObject_ *p_stObject)
|
|
{
|
|
MTH3D_tdstVector stI, stJ, stK;
|
|
|
|
if (p_stObject==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
|
|
|
if (p_stObject->h_Micro!=NULL)
|
|
M_GameFatalError(E_uwGameMiniStructAllocAlreadyAlloc);
|
|
|
|
MMG_fn_vBeginMemoryInfo (MMG_C_lTypeMiniStructure , MMG_C_lSubTypeMicro , p_stObject);
|
|
p_stObject->h_Micro = fn_h_MicroRealAlloc();
|
|
MMG_fn_vEndMemoryInfo ();
|
|
|
|
/* ANNECY MT - 15/03/99 { */
|
|
/* init matrix */
|
|
MTH3D_M_vSetVectorElements(&stJ, MTH_C_MinusONE, MTH_C_ZERO, MTH_C_ZERO);
|
|
MTH3D_M_vSetBaseKVector(&stK);
|
|
if (p_stObject -> h_Cineinfo != NULL)
|
|
{
|
|
/* actor is a camera */
|
|
MTH3D_M_vSetVectorElements(&stI, MTH_C_ZERO, MTH_C_MinusONE, MTH_C_ZERO);
|
|
}
|
|
else
|
|
{
|
|
/* actor isn't a camera */
|
|
MTH3D_M_vSetVectorElements(&stI, MTH_C_ZERO, MTH_C_ONE, MTH_C_ZERO);
|
|
}
|
|
POS_fn_vSetRotationMatrix(p_stObject->h_Micro->hMicroMatrix, &stI, &stJ, &stK);
|
|
/* END ANNECY MT } */
|
|
}
|
|
|
|
MS_tdxHandleToMicro fn_h_MicroRealAlloc()
|
|
{
|
|
MS_tdxHandleToMicro h_MS_Micro;
|
|
|
|
h_MS_Micro = (MS_tdxHandleToMicro)M_p_GameMallocInHLM(fn_ulMicroSizeOf());
|
|
h_MS_Micro->hMicroMatrix = GEO_fn_hCreateMatrix();
|
|
return(h_MS_Micro);
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : MS_Micro's object action free
|
|
*-----------------------------------------------------------------------------
|
|
* Input : Object pointer
|
|
* Output : None
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 01/10/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vMicroFree(struct tdstEngineObject_ *p_stObject)
|
|
{
|
|
if (p_stObject==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
|
|
|
if (p_stObject->h_Micro==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructNull);
|
|
|
|
MMG_fn_vAddMemoryInfo( MMG_C_lTypeMiniStructure , MMG_C_lSubTypeMicro , p_stObject );
|
|
M_GameFreeInHLM(p_stObject->h_Micro);
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : MS_Micro's object action initialisation
|
|
*-----------------------------------------------------------------------------
|
|
* Input : When this function's called (see ObjInit.h)
|
|
* Output : None
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 01/10/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vMicroInit(struct tdstEngineObject_ *p_stObject,enum tdeObjectTreeInit_ eObjectInit)
|
|
{
|
|
if (p_stObject==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
|
|
|
if (p_stObject->h_Micro==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructNull);
|
|
|
|
switch(eObjectInit)
|
|
{
|
|
case OTI_WhenGameStart:
|
|
break;
|
|
case OTI_MapLoaded:
|
|
if (fn_bMicroGetActivationFlag(p_stObject->h_Micro))
|
|
fn_vAddMicro(p_stObject);
|
|
break;
|
|
case OTI_ReinitTheMap:
|
|
case OTI_AlwaysCreated:
|
|
case OTI_PlayerDead:
|
|
case OTI_LoadSavedGame:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : MS_Micro's object action desinitialisation
|
|
*-----------------------------------------------------------------------------
|
|
* Input : When this function's called (see ObjInit.h)
|
|
* Output : None
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 01/10/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vMicroDesinit(struct tdstEngineObject_ *p_stObject,enum tdeObjectTreeInit_ eObjectInit)
|
|
{
|
|
if (p_stObject==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
|
|
|
if (p_stObject->h_Micro==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructNull);
|
|
|
|
switch(eObjectInit)
|
|
{
|
|
case OTI_ReinitTheMap:
|
|
break;
|
|
case OTI_MapLoaded:
|
|
break;
|
|
case OTI_AlwaysCreated:
|
|
case OTI_PlayerDead:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Micro's object copy clone action
|
|
*-----------------------------------------------------------------------------
|
|
* Input : Handle to destination, handle to source
|
|
* Output : None
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 30/06/97 Author : Olivier Jourdan
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vMicroCopyClone(struct tdstEngineObject_ * _p_stObjectDest,struct tdstEngineObject_ * _p_stObjectSrc)
|
|
{
|
|
/* If Micro doesn't contains pointers to structure that may be*/
|
|
/* changed during the game, this function must only be a :*/
|
|
/* Should be changed*/
|
|
memcpy(_p_stObjectDest->h_Micro,_p_stObjectSrc->h_Micro,fn_ulMicroSizeOf());
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : MS_Micro access functions
|
|
*-----------------------------------------------------------------------------
|
|
* Input : MS_tdxHandleToMicro + (value)
|
|
* Output : (value or pointer)
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 29/01/97 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
/*------------------------------------------------------------------
|
|
* Accessors to matrix
|
|
*-----------------------------------------------------------------*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
GEO_tdxHandleToMatrix fn_xMicroGetMatrix(MS_tdxHandleToMicro h_MS_Micro)
|
|
{
|
|
return( h_MS_Micro->hMicroMatrix );
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void fn_vMicroSetMatrix(MS_tdxHandleToMicro h_MS_Micro,GEO_tdxHandleToMatrix hMatrix)
|
|
{
|
|
h_MS_Micro->hMicroMatrix = hMatrix;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/*------------------------------------------------------------------
|
|
* Accessors to activation flag
|
|
*-----------------------------------------------------------------*/
|
|
ACP_tdxBool fn_bMicroGetActivationFlag(MS_tdxHandleToMicro h_MS_Micro)
|
|
{
|
|
return( h_MS_Micro->bIsActive );
|
|
}
|
|
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void fn_vMicroSetActivationFlag(MS_tdxHandleToMicro h_MS_Micro,ACP_tdxBool bFlag)
|
|
{
|
|
h_MS_Micro->bIsActive = bFlag;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/*------------------------------------------------------------------
|
|
* Management of micros/characters list
|
|
*-----------------------------------------------------------------*/
|
|
struct tdstEngineObject_ * fn_hReturnHandleMicroFromIndex(long lIndex)
|
|
{
|
|
MIC_tdxHandleToMicro hMicro;
|
|
int i;
|
|
|
|
LST2_M_DynamicForEachElementOf(&(g_stIndexMicrosList.hMicrosList),hMicro,i)
|
|
{
|
|
if( ((tdstIndexMicros*)hMicro)->lIndex == lIndex )
|
|
return( ((tdstIndexMicros*)hMicro)->hMicroObj );
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the X component of micro position
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreX(long indice)
|
|
{
|
|
MTH3D_tdstVector stVertex;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
POS_fn_vGetTranslationVector( HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj),&stVertex );
|
|
/*POS_fn_vMulMatrixVertex( &stVertex,M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix,&stVertex );*/
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(stVertex.xX));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the Y component of micro position
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreY(long indice)
|
|
{
|
|
MTH3D_tdstVector stVertex;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
POS_fn_vGetTranslationVector( HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj),&stVertex );
|
|
/*POS_fn_vMulMatrixVertex( &stVertex,M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix,&stVertex );*/
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(stVertex.xY));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the Z component of micro position
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreZ(long indice)
|
|
{
|
|
MTH3D_tdstVector stVertex;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
POS_fn_vGetTranslationVector( HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj),&stVertex );
|
|
/*POS_fn_vMulMatrixVertex( &stVertex,M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix,&stVertex );*/
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(stVertex.xZ));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the X component of micro speed
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreVX(long indice)
|
|
{
|
|
struct tdstEngineObject_ *p_Object;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
DNM_tdstDynamics *p_stDynamics;
|
|
MTH_tdxReal xResult = MTH_C_ZERO;
|
|
|
|
p_Object = fn_hReturnHandleMicroFromIndex(indice);
|
|
if (p_Object)
|
|
{
|
|
hSuperObj = M_GetSuperObject( p_Object );
|
|
if( !M_GetMSHandle(hSuperObj,Dynam) )
|
|
return 0;
|
|
if( (p_stDynamics = fn_p_stDynamGetDynamics(M_GetMSHandle(hSuperObj,Dynam))) == NULL )
|
|
return 0;
|
|
|
|
/* camera object special case */
|
|
if (DNM_M_lDynamicsGetObjectType(p_stDynamics)==DNM_eCamera)
|
|
{
|
|
MTH_tdxReal xInvDTInSecond;
|
|
|
|
xInvDTInSecond = MTH_M_xDiv(MTH_M_xFloatToReal(1000.f),MTH_M_xLongToReal(g_stEngineStructure.stEngineTimer.ulUsefulDeltaTime));
|
|
|
|
xResult = MTH_M_xMul(MTH3D_M_xGetXofVector(DNM_M_p_stReportGetLastMove(DNM_M_p_stDynamicsGetReport(p_stDynamics))),xInvDTInSecond);
|
|
}
|
|
else
|
|
{
|
|
xResult = MTH3D_M_xGetXofVector(DNM_M_pDynamicsGetPreviousSpeed(p_stDynamics));
|
|
}
|
|
}
|
|
|
|
if(xResult>32000.0f)
|
|
xResult=32000.0f; //AR9908 Against overflow...
|
|
if(xResult<-32000.0f)
|
|
xResult=-32000.0f; //AR9908 Against overflow...
|
|
|
|
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(xResult));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the Y component of micro speed
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreVY(long indice)
|
|
{
|
|
struct tdstEngineObject_ *p_Object;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
DNM_tdstDynamics *p_stDynamics;
|
|
MTH_tdxReal xResult = MTH_C_ZERO;
|
|
|
|
p_Object = fn_hReturnHandleMicroFromIndex(indice);
|
|
if (p_Object)
|
|
{
|
|
hSuperObj = M_GetSuperObject( p_Object );
|
|
if( !M_GetMSHandle(hSuperObj,Dynam) )
|
|
return 0;
|
|
if( (p_stDynamics = fn_p_stDynamGetDynamics(M_GetMSHandle(hSuperObj,Dynam))) == NULL )
|
|
return 0;
|
|
|
|
/* camera object special case */
|
|
if (DNM_M_lDynamicsGetObjectType(p_stDynamics)==DNM_eCamera)
|
|
{
|
|
MTH_tdxReal xInvDTInSecond;
|
|
|
|
xInvDTInSecond = MTH_M_xDiv(MTH_M_xFloatToReal(1000.f),MTH_M_xLongToReal(g_stEngineStructure.stEngineTimer.ulUsefulDeltaTime));
|
|
|
|
xResult = MTH_M_xMul(MTH3D_M_xGetYofVector(DNM_M_p_stReportGetLastMove(DNM_M_p_stDynamicsGetReport(p_stDynamics))),xInvDTInSecond);
|
|
}
|
|
else
|
|
{
|
|
xResult = MTH3D_M_xGetYofVector(DNM_M_pDynamicsGetPreviousSpeed(p_stDynamics));
|
|
}
|
|
}
|
|
|
|
if(xResult>32000.0f)
|
|
xResult=32000.0f; //AR9908 Against overflow...
|
|
if(xResult<-32000.0f)
|
|
xResult=-32000.0f; //AR9908 Against overflow...
|
|
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(xResult));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the Z component of micro speed
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreVZ(long indice)
|
|
{
|
|
struct tdstEngineObject_ *p_Object;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
DNM_tdstDynamics *p_stDynamics;
|
|
MTH_tdxReal xResult = MTH_C_ZERO;
|
|
|
|
p_Object = fn_hReturnHandleMicroFromIndex(indice);
|
|
if (p_Object)
|
|
{
|
|
hSuperObj = M_GetSuperObject( p_Object );
|
|
if( !M_GetMSHandle(hSuperObj,Dynam) )
|
|
return 0;
|
|
if( (p_stDynamics = fn_p_stDynamGetDynamics(M_GetMSHandle(hSuperObj,Dynam))) == NULL )
|
|
return 0;
|
|
|
|
/* camera object special case */
|
|
if (DNM_M_lDynamicsGetObjectType(p_stDynamics)==DNM_eCamera)
|
|
{
|
|
MTH_tdxReal xInvDTInSecond;
|
|
|
|
xInvDTInSecond = MTH_M_xDiv(MTH_M_xFloatToReal(1000.f),MTH_M_xLongToReal(g_stEngineStructure.stEngineTimer.ulUsefulDeltaTime));
|
|
|
|
xResult = MTH_M_xMul(MTH3D_M_xGetZofVector(DNM_M_p_stReportGetLastMove(DNM_M_p_stDynamicsGetReport(p_stDynamics))),xInvDTInSecond);
|
|
}
|
|
else
|
|
{
|
|
xResult = MTH3D_M_xGetZofVector(DNM_M_pDynamicsGetPreviousSpeed(p_stDynamics));
|
|
}
|
|
}
|
|
|
|
if(xResult>32000.0f)
|
|
xResult=32000.0f; //AR9908 Against overflow...
|
|
if(xResult<-32000.0f)
|
|
xResult=-32000.0f; //AR9908 Against overflow...
|
|
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(xResult));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the X component of micro normal
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreDNX(long indice)
|
|
{
|
|
/*
|
|
//This the exact code, but needs 27 multiplication
|
|
MTH3D_tdstVector stI,stJ,stK;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition stMatrix;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
POS_fn_vSetIdentityMatrix(&stMatrix);
|
|
POS_fn_vMulMatrixMatrix( &stMatrix,HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj),M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix );
|
|
POS_fn_vGetRotationMatrix(&stMatrix,&stI,&stJ,&stK);
|
|
//POS_fn_vMulMatrixVertex( &stI,M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix,&stI );
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(stI.xX));
|
|
*/
|
|
/*need only 3 multiplications*/
|
|
MTH3D_tdstVector stV1,stV2,stV3,stW1,stW2,stW3;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition *pMatrix1,*pMatrix2;
|
|
MTH_tdxReal xN;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
pMatrix1=HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj);
|
|
pMatrix2=M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix;
|
|
POS_fn_vGetRotationMatrix(pMatrix1,&stV1,&stV2,&stV3);
|
|
POS_fn_vGetRotationMatrix(pMatrix2,&stW1,&stW2,&stW3);
|
|
xN=MTH_M_xAdd(
|
|
MTH_M_xAdd(
|
|
MTH_M_xMul(stV1.xX,stW1.xX),MTH_M_xMul(stV2.xX,stW1.xY)),
|
|
MTH_M_xMul(stV3.xX,stW1.xZ));
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(xN));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the Y component of micro normal
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreDNY(long indice)
|
|
{
|
|
/*
|
|
MTH3D_tdstVector stI,stJ,stK;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition stMatrix;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
POS_fn_vSetIdentityMatrix(&stMatrix);
|
|
POS_fn_vMulMatrixMatrix( &stMatrix,HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj),M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix );
|
|
POS_fn_vGetRotationMatrix(&stMatrix,&stI,&stJ,&stK);
|
|
//POS_fn_vMulMatrixVertex( &stI,M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix,&stI );
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(stI.xY));
|
|
*/
|
|
MTH3D_tdstVector stV1,stV2,stV3,stW1,stW2,stW3;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition *pMatrix1,*pMatrix2;
|
|
MTH_tdxReal xN;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
pMatrix1=HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj);
|
|
pMatrix2=M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix;
|
|
POS_fn_vGetRotationMatrix(pMatrix1,&stV1,&stV2,&stV3);
|
|
POS_fn_vGetRotationMatrix(pMatrix2,&stW1,&stW2,&stW3);
|
|
xN=MTH_M_xAdd(
|
|
MTH_M_xAdd(
|
|
MTH_M_xMul(stV1.xY,stW1.xX),MTH_M_xMul(stV2.xY,stW1.xY)),
|
|
MTH_M_xMul(stV3.xY,stW1.xZ));
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(xN));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the Z component of micro normal
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreDNZ(long indice)
|
|
{
|
|
/*
|
|
MTH3D_tdstVector stI,stJ,stK;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition stMatrix;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
POS_fn_vSetIdentityMatrix(&stMatrix);
|
|
POS_fn_vMulMatrixMatrix( &stMatrix,HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj),M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix );
|
|
POS_fn_vGetRotationMatrix(&stMatrix,&stI,&stJ,&stK);
|
|
//POS_fn_vMulMatrixVertex( &stI,M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix,&stI );
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(stI.xZ));
|
|
*/
|
|
MTH3D_tdstVector stV1,stV2,stV3,stW1,stW2,stW3;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition *pMatrix1,*pMatrix2;
|
|
MTH_tdxReal xN;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
pMatrix1=HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj);
|
|
pMatrix2=M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix;
|
|
POS_fn_vGetRotationMatrix(pMatrix1,&stV1,&stV2,&stV3);
|
|
POS_fn_vGetRotationMatrix(pMatrix2,&stW1,&stW2,&stW3);
|
|
xN=MTH_M_xAdd(
|
|
MTH_M_xAdd(
|
|
MTH_M_xMul(stV1.xZ,stW1.xX),MTH_M_xMul(stV2.xZ,stW1.xY)),
|
|
MTH_M_xMul(stV3.xZ,stW1.xZ));
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(xN));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the X component of micro tangent
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreDTX(long indice)
|
|
{
|
|
/*
|
|
MTH3D_tdstVector stI,stJ,stK;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition stMatrix;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
POS_fn_vSetIdentityMatrix(&stMatrix);
|
|
POS_fn_vMulMatrixMatrix( &stMatrix,HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj),M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix );
|
|
POS_fn_vGetRotationMatrix(&stMatrix,&stI,&stJ,&stK);
|
|
//POS_fn_vMulMatrixVertex( &stI,M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix,&stI );
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(stJ.xX));
|
|
*/
|
|
/*need only 3 multiplications*/
|
|
MTH3D_tdstVector stV1,stV2,stV3,stW1,stW2,stW3;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition *pMatrix1,*pMatrix2;
|
|
MTH_tdxReal xN;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
pMatrix1=HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj);
|
|
pMatrix2=M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix;
|
|
POS_fn_vGetRotationMatrix(pMatrix1,&stV1,&stV2,&stV3);
|
|
POS_fn_vGetRotationMatrix(pMatrix2,&stW1,&stW2,&stW3);
|
|
xN=MTH_M_xAdd(
|
|
MTH_M_xAdd(
|
|
MTH_M_xMul(stV1.xX,stW2.xX),MTH_M_xMul(stV2.xX,stW2.xY)),
|
|
MTH_M_xMul(stV3.xX,stW2.xZ));
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(xN));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the Y component of micro tangent
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreDTY(long indice)
|
|
{
|
|
/*
|
|
MTH3D_tdstVector stI,stJ,stK;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition stMatrix;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
POS_fn_vSetIdentityMatrix(&stMatrix);
|
|
POS_fn_vMulMatrixMatrix( &stMatrix,HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj),M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix );
|
|
POS_fn_vGetRotationMatrix(&stMatrix,&stI,&stJ,&stK);
|
|
//POS_fn_vMulMatrixVertex( &stI,M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix,&stI );
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(stJ.xY));
|
|
*/
|
|
/*need only 3 multiplications*/
|
|
MTH3D_tdstVector stV1,stV2,stV3,stW1,stW2,stW3;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition *pMatrix1,*pMatrix2;
|
|
MTH_tdxReal xN;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
pMatrix1=HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj);
|
|
pMatrix2=M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix;
|
|
POS_fn_vGetRotationMatrix(pMatrix1,&stV1,&stV2,&stV3);
|
|
POS_fn_vGetRotationMatrix(pMatrix2,&stW1,&stW2,&stW3);
|
|
xN=MTH_M_xAdd(
|
|
MTH_M_xAdd(
|
|
MTH_M_xMul(stV1.xY,stW2.xX),MTH_M_xMul(stV2.xY,stW2.xY)),
|
|
MTH_M_xMul(stV3.xY,stW2.xZ));
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(xN));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Get the Z component of micro tangent
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreDTZ(long indice)
|
|
{
|
|
/*
|
|
MTH3D_tdstVector stI,stJ,stK;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition stMatrix;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
POS_fn_vSetIdentityMatrix(&stMatrix);
|
|
POS_fn_vMulMatrixMatrix( &stMatrix,HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj) ,M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix);
|
|
POS_fn_vGetRotationMatrix(&stMatrix,&stI,&stJ,&stK);
|
|
//POS_fn_vMulMatrixVertex( &stI,M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix,&stI );
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(stJ.xZ));
|
|
*/
|
|
/*need only 3 multiplications*/
|
|
MTH3D_tdstVector stV1,stV2,stV3,stW1,stW2,stW3;
|
|
HIE_tdxHandleToSuperObject hSuperObj;
|
|
POS_tdstCompletePosition *pMatrix1,*pMatrix2;
|
|
MTH_tdxReal xN;
|
|
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(indice) );
|
|
pMatrix1=HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObj);
|
|
pMatrix2=M_GetMSHandle(hSuperObj,Micro)->hMicroMatrix;
|
|
POS_fn_vGetRotationMatrix(pMatrix1,&stV1,&stV2,&stV3);
|
|
POS_fn_vGetRotationMatrix(pMatrix2,&stW1,&stW2,&stW3);
|
|
xN=MTH_M_xAdd(
|
|
MTH_M_xAdd(
|
|
MTH_M_xMul(stV1.xZ,stW2.xX),MTH_M_xMul(stV2.xZ,stW2.xY)),
|
|
MTH_M_xMul(stV3.xZ,stW2.xZ));
|
|
return (long)M_Fixed1616ToRealSnd(MTH_M_xRealToFixed16_16(xN));
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Return value of micro filter
|
|
*-----------------------------------------------------------------*/
|
|
long RetMicroSonoreFILTRE(long indice)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Activate the Micro attached to character
|
|
* Caution: hEngObj must have a Micro MiniStructure
|
|
*-----------------------------------------------------------------*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void fn_vActivateMicroForObject(struct tdstEngineObject_ * hEngObj)
|
|
{
|
|
hEngObj->h_Micro->bIsActive = TRUE;
|
|
fn_vAddMicro( hEngObj );
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
/*------------------------------------------------------------------
|
|
* Add an active micro in sound engine
|
|
*-----------------------------------------------------------------*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void fn_vUnactivateMicroForObject(struct tdstEngineObject_ * hEngObj)
|
|
{
|
|
hEngObj->h_Micro->bIsActive = FALSE;
|
|
fn_vRemoveMicro( hEngObj );
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
/*------------------------------------------------------------------
|
|
* Add an active micro in sound engine
|
|
*-----------------------------------------------------------------*/
|
|
void fn_vAddMicro(struct tdstEngineObject_ * hEngObj)
|
|
{
|
|
MIC_tdxHandleToMicro hMicro;
|
|
|
|
MMG_fn_vAddMemoryInfo( MMG_C_lTypeMiniStructure , MMG_C_lSubTypeMicro , hEngObj );
|
|
hMicro = (MIC_tdxHandleToMicro)M_p_GameMallocInHLM(sizeof(tdstIndexMicros));
|
|
LST2_M_DynamicInitElement(hMicro);
|
|
((tdstIndexMicros *)hMicro)->lIndex = SND_fn_lCreateMicroSound();
|
|
((tdstIndexMicros *)hMicro)->hMicroObj = hEngObj;
|
|
LST2_M_DynamicAddTail(&g_stIndexMicrosList.hMicrosList,hMicro);
|
|
hEngObj->h_Micro->bIsActive = TRUE;
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Remove an active micro from the sound engine
|
|
*-----------------------------------------------------------------*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void fn_vRemoveMicro(struct tdstEngineObject_ * hEngObj)
|
|
{
|
|
MIC_tdxHandleToMicro hMicro,hNextElement;
|
|
long lI;
|
|
|
|
LST2_M_DynamicForEachMovingElementOf( &g_stIndexMicrosList.hMicrosList,hMicro,hNextElement,lI )
|
|
{
|
|
if( ((tdstIndexMicros *)hMicro)->hMicroObj == hEngObj )
|
|
{
|
|
SND_fn_vDestroyMicroSound( hMicro->lIndex );
|
|
LST2_M_DynamicIsolate( hMicro );
|
|
MMG_fn_vAddMemoryInfo( MMG_C_lTypeMiniStructure , MMG_C_lSubTypeMicro , hEngObj );
|
|
M_GameFreeInHLM( hMicro );
|
|
}
|
|
}
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/*------------------------------------------------------------------
|
|
* Remove all active micros in sound engine (not in 3DOS)
|
|
*-----------------------------------------------------------------*/
|
|
void fn_vRemoveAllMicros()
|
|
{
|
|
MIC_tdxHandleToMicro hMicro,hNextElement;
|
|
long lI;
|
|
|
|
LST2_M_DynamicForEachMovingElementOf( &g_stIndexMicrosList.hMicrosList,hMicro,hNextElement,lI )
|
|
{
|
|
SND_fn_vDestroyMicroSound( hMicro->lIndex );
|
|
LST2_M_DynamicIsolate( hMicro );
|
|
/* M_GameFreeInHLM( hMicro );*/
|
|
}
|
|
LST2_M_DynamicInitAnchor( &g_stIndexMicrosList.hMicrosList );
|
|
}
|
|
/*------------------------------------------------------------------
|
|
* Return TRUE if objet is audible from micro position
|
|
*-----------------------------------------------------------------*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
BOOL td_fn_bRetObjetSoundLinkWithMicro(long objet,long micro)
|
|
{
|
|
HIE_tdxHandleToSuperObject hObjectSector,hMicroSector,hSuperObj;
|
|
unsigned long ulI;
|
|
SECT_tdxHandleOfElementLstSoundInteraction hSoundList;
|
|
|
|
hObjectSector=fn_h_SectInfoGetCurrentSector( M_GetMSHandle(((HIE_tdxHandleToSuperObject)objet),SectInfo) );
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(micro) );
|
|
hMicroSector=fn_h_SectInfoGetCurrentSector( M_GetMSHandle(hSuperObj,SectInfo) );
|
|
if( hObjectSector==hMicroSector )
|
|
return TRUE;
|
|
SECT_M_ForEachSoundNodeInSoundInteractionList(hMicroSector,hSoundList,ulI)
|
|
{
|
|
if( SECT_GetSectorInSoundList(hSoundList)==hObjectSector )
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/*------------------------------------------------------------------
|
|
* Return Value of audibility of object from micro position
|
|
*-----------------------------------------------------------------*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
long fn_lRetObjectSoundLinkVolumeWithMicro(long objet,long micro)
|
|
{
|
|
HIE_tdxHandleToSuperObject hObjectSector,hMicroSector,hSuperObj;
|
|
unsigned long ulI;
|
|
SECT_tdxHandleOfElementLstSoundInteraction hSoundList;
|
|
|
|
hObjectSector=fn_h_SectInfoGetCurrentSector( M_GetMSHandle(((HIE_tdxHandleToSuperObject)objet),SectInfo) );
|
|
hSuperObj = M_GetSuperObject( fn_hReturnHandleMicroFromIndex(micro) );
|
|
hMicroSector=fn_h_SectInfoGetCurrentSector( M_GetMSHandle(hSuperObj,SectInfo) );
|
|
if( hObjectSector==hMicroSector )
|
|
return C_MSMicro_MaxVolume;
|
|
SECT_M_ForEachSoundNodeInSoundInteractionList(hMicroSector,hSoundList,ulI)
|
|
{
|
|
if( SECT_GetSectorInSoundList(hSoundList)==hObjectSector )
|
|
return SCT_fn_lGetVolumeInSoundList(hSoundList);
|
|
}
|
|
return C_MSMicro_MinVolume;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/*------------------------------------------------------------------
|
|
* Init pointers of functions for sound engine
|
|
*-----------------------------------------------------------------*/
|
|
void fn_vInitMicrosFunction()
|
|
{
|
|
tdstAllRetMicroSound st_pfnRetMicroSound;
|
|
|
|
memset(&st_pfnRetMicroSound,0,sizeof(st_pfnRetMicroSound));
|
|
st_pfnRetMicroSound.X=RetMicroSonoreX;
|
|
st_pfnRetMicroSound.Y=RetMicroSonoreY;
|
|
st_pfnRetMicroSound.Z=RetMicroSonoreZ;
|
|
st_pfnRetMicroSound.VX=RetMicroSonoreVX;
|
|
st_pfnRetMicroSound.VY=RetMicroSonoreVY;
|
|
st_pfnRetMicroSound.VZ=RetMicroSonoreVZ;
|
|
st_pfnRetMicroSound.DNX=RetMicroSonoreDNX;
|
|
st_pfnRetMicroSound.DNY=RetMicroSonoreDNY;
|
|
st_pfnRetMicroSound.DNZ=RetMicroSonoreDNZ;
|
|
st_pfnRetMicroSound.DTX=RetMicroSonoreDTX;
|
|
st_pfnRetMicroSound.DTY=RetMicroSonoreDTY;
|
|
st_pfnRetMicroSound.DTZ=RetMicroSonoreDTZ;
|
|
st_pfnRetMicroSound.Filtre=RetMicroSonoreFILTRE;
|
|
|
|
SND_fn_vSetRetMicroSound(&st_pfnRetMicroSound);
|
|
LST2_M_DynamicInitAnchor(&g_stIndexMicrosList.hMicrosList);
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
* Access functions to Micro List Element fields
|
|
*-----------------------------------------------------------------*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
long fn_lGetMicroIndiceInMicroListElement(MIC_tdxHandleToMicro _hMicroListElement)
|
|
{
|
|
return( _hMicroListElement->lIndex );
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
struct tdstEngineObject_ * fn_p_stGetEngineObjectInMicroListElement(MIC_tdxHandleToMicro _hMicroListElement)
|
|
{
|
|
return( _hMicroListElement->hMicroObj );
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
struct tdstEngineObject_ * fn_p_stGetFirstEngineObjectInMicroList(void)
|
|
{
|
|
MIC_tdxHandleToMicro hMicroElement;
|
|
|
|
hMicroElement = LST2_M_DynamicGetFirstElement(&g_stIndexMicrosList.hMicrosList);
|
|
if( hMicroElement )
|
|
return( hMicroElement->hMicroObj );
|
|
else
|
|
return NULL;
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
*------------------------------------------------------------------
|
|
* WARNING : these functions are to use only with the ONE micro
|
|
* version of the GamLib
|
|
*------------------------------------------------------------------
|
|
*-----------------------------------------------------------------*/
|
|
|
|
/*------------------------------------------------------------------
|
|
* Put micro on another character
|
|
*-----------------------------------------------------------------*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void fn_vChangeCharacterForMicro(struct tdstEngineObject_ * _p_stEngineCharacter)
|
|
{
|
|
LST2_M_DynamicGetFirstElement(&g_stIndexMicrosList.hMicrosList)->hMicroObj = _p_stEngineCharacter;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/*------------------------------------------------------------------
|
|
* Put micro on another character (AI version)
|
|
*-----------------------------------------------------------------*/
|
|
void GAM_fn_vChangeCharacterForMicro(HIE_tdxHandleToSuperObject _hCharacter)
|
|
{
|
|
LST2_M_DynamicGetFirstElement(&g_stIndexMicrosList.hMicrosList)->hMicroObj = (struct tdstEngineObject_ *)HIE_fn_hGetSuperObjectObject(_hCharacter);
|
|
}
|
|
|
|
/*------------------------------------------------------------------
|
|
*------------------------------------------------------------------
|
|
* End of functions for the ONE micro specific version of the GamLib
|
|
*------------------------------------------------------------------
|
|
*-----------------------------------------------------------------*/
|
|
|
|
|