3293 lines
130 KiB
C
3293 lines
130 KiB
C
/*##########################################################################################*/
|
||
/*## Demos.c : ##*/
|
||
/*## ##*/
|
||
/*## Version 1.0 ##*/
|
||
/*## Creation date 16/04/98 Sebastien DAVID symbol : DVD (Gizmo) ##*/
|
||
/*## ##*/
|
||
/*## That file needs to be compatible for all platforms. ##*/
|
||
/*## ##*/
|
||
/*## (c) Ubi Studios 1998 ##*/
|
||
/*##########################################################################################*/
|
||
|
||
/* ANNECY AV {*/
|
||
/*#define GIZ_DEBUG_DEMO_MEMORY*/
|
||
/* END ANNECY AV }*/
|
||
|
||
|
||
#define D_3dData_StructureDefine
|
||
#define D_State_Define
|
||
|
||
|
||
/*#define D_GIZMO_TEST /* maj DVD (Gizmo) */
|
||
|
||
#include <direct.h>
|
||
#include "TOOLSCPA.h"
|
||
#include "cpa_std.h"
|
||
|
||
/*#include "POS\PosMatri.h"*/
|
||
|
||
#include "Actions/AllActs.h"
|
||
|
||
#include "Structur/ErrGame.h"
|
||
#include "Structur/MemGame.h"
|
||
#include "STRUCTUR/Objects.h"
|
||
#include "STRUCTUR/Anim_s.h"
|
||
#include "Structur/StdObjSt.h"
|
||
#include "Structur/EngMode.h"
|
||
#include "Structur/State.h"
|
||
#include "MainChar.h"
|
||
#include "Family.h"
|
||
#include "PlayAnim/PlayAnim.h"
|
||
#include "PlayAnim/PlayEvts.h"
|
||
#include "ZeMem.h"
|
||
#include "Physicol.h"
|
||
#include "PO.h"
|
||
#include "Structur/ObjsTbls.h"
|
||
#include "ia_dnm.h"
|
||
#include "ToolCam.h"
|
||
/* ANNECY AV {*/
|
||
/*#include "Commands.h"*/
|
||
/* END ANNECY AV }*/
|
||
|
||
#include "ChanList.h"
|
||
#include "LipsSync.h"
|
||
#include "Basic.h"
|
||
/* Add on for father son links management*/
|
||
#include "GameEng.h"
|
||
#include "Initeng.h"
|
||
#include "Always.h"
|
||
|
||
/* ANNECY AV {*/
|
||
#include "Specif/Demos.h"
|
||
/*#include "POS\PosQuatn.h"*/
|
||
/*#include "DspText.h"*/
|
||
/*#include "DspFix.h"*/
|
||
/*#include "lives.h"*/
|
||
/*#include "GamInven.h"*/
|
||
#include "MTH.h"
|
||
extern BOOL g_bAnimConstantSpeed;
|
||
/* END ANNECY AV }*/
|
||
|
||
#include "SCT\Sector.h"
|
||
#include "AGO.h"
|
||
|
||
extern void fn_vRegisterTextToDraw (char * _szTextToDraw , long _lX , long _lY);
|
||
extern int IPT_g_bAtLeastOneActionIsValidated;
|
||
|
||
|
||
void fn_vTreatCharactersInSector(HIE_tdxHandleToSuperObject hCharacter, ACP_tdxBool bUseSector);
|
||
|
||
/* ******************* */
|
||
/* variables globales */
|
||
/* ******************* */
|
||
|
||
unsigned long gl_DEMO_ConstantSpeed=FALSE;
|
||
|
||
char * gp_DEMO_AllocatedMemory=NULL;
|
||
char * gp_DEMO_CurrentPosInMemory=NULL;
|
||
unsigned long gl_DEMO_NumberOfFrames=0L;
|
||
unsigned long gl_DEMO_CurrentFrame=0L;
|
||
unsigned long g_ulDEMO_CurrentTimerCount=0L;
|
||
unsigned long g_ulDEMO_StartDEMO_EngineTimerCount;
|
||
|
||
#ifndef RETAIL
|
||
#define D_DEMO_USE_VCR /* Don't use VCR in the retail version*/
|
||
#endif
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
|
||
typedef struct stBeginningOfCharacterFrame_
|
||
{
|
||
long lCurrentIndex;
|
||
long lCurrentIndexForVCR;
|
||
} tdstBeginningOfCharacterFrame;
|
||
|
||
tdstBeginningOfCharacterFrame * gp_DEMO_BeginningOfCharacterFrame = NULL; /* The position in the gp_DEMO_AllocatedMemory array of the beginning of each character for each frame*/
|
||
char * gp_DEMO_AllocatedMemoryForVCR = NULL; /* To save infos which are not in the gp_DEMO_AllocatedMemory block*/
|
||
char * gp_DEMO_CurrentPosInMemoryForVCR = NULL;
|
||
char * gp_DEMO_SaveCurrentPosInMemory = NULL;
|
||
int g_b_DEMO_VCRIsUsable = FALSE; /* Is the VCR available (if there is no .vcr file, it won't)*/
|
||
int g_bVCRMode = FALSE; /* Does the user want to be in VCR mode ?*/
|
||
int g_bVCR_DemoIsPaused = FALSE;
|
||
int g_bVCR_ReverseMode = FALSE; /* When playing the demo in reverse mode*/
|
||
int g_bDontTreatCharacter = FALSE; /* To NOT treat a character (because it still isn't created in reverse mode)*/
|
||
long g_lNumberOfCharacterFrame = 0;
|
||
|
||
#define M_DEMO_ENTER_VCR_MODE() \
|
||
{ \
|
||
gp_DEMO_SaveCurrentPosInMemory = gp_DEMO_CurrentPosInMemory; \
|
||
gp_DEMO_CurrentPosInMemory = gp_DEMO_CurrentPosInMemoryForVCR; \
|
||
}
|
||
|
||
#define M_DEMO_EXIT_VCR_MODE() \
|
||
{ \
|
||
gp_DEMO_CurrentPosInMemoryForVCR = gp_DEMO_CurrentPosInMemory; \
|
||
gp_DEMO_CurrentPosInMemory = gp_DEMO_SaveCurrentPosInMemory; \
|
||
}
|
||
|
||
#define M_DEMO_WRITE_VCR(info,type) \
|
||
{ \
|
||
/*long lTest=0xAAAAAAAA;*/ \
|
||
M_DEMO_ENTER_VCR_MODE (); \
|
||
/*M_DEMO_WRITE (& lTest,lTest);*/ \
|
||
M_DEMO_WRITE (info,type); \
|
||
M_DEMO_EXIT_VCR_MODE (); \
|
||
}
|
||
|
||
#define M_DEMO_READ_VCR(info,type) \
|
||
{ \
|
||
/*long lTest;*/ \
|
||
M_DEMO_ENTER_VCR_MODE (); \
|
||
/*M_DEMO_READ (& lTest,lTest);*/ \
|
||
/*assert (lTest == 0xAAAAAAAA);*/ \
|
||
M_DEMO_READ (info,type); \
|
||
M_DEMO_EXIT_VCR_MODE (); \
|
||
}
|
||
#else
|
||
|
||
#define M_DEMO_WRITE_VCR(a,b)
|
||
#define M_DEMO_READ_VCR(a,b)
|
||
|
||
#endif
|
||
|
||
float gf_CompressionRate0,gf_CompressionRate1,gf_CompressionRate2;
|
||
|
||
DEMO_tdxHandleToDemoSOList g_hDemoSOList=NULL;
|
||
int g_iFirstAlwaysNumber = 0;
|
||
DEMO_tdxHandleToDemoGMTList g_hDemoGMTFixList=NULL;
|
||
DEMO_tdxHandleToDemoGMTList g_hDemoGMTLevelList=NULL;
|
||
|
||
/*HIE_tdxHandleToSuperObject gSO_UniverseSector;*/
|
||
|
||
unsigned short g_DEMO_KeybTest=0;
|
||
int g_iNbFramesToWaitBeforePlaying=0;
|
||
unsigned long g_ulFlagFrameNumber=0;
|
||
unsigned long g_ulNbPOS,g_ulNbALW,g_ulNbSCT,g_ulNbACT,g_ulNbCAN;
|
||
|
||
unsigned short g_DEMO_FirstInitFlag=FALSE;
|
||
unsigned short g_DEMO_AutoPlay=FALSE;
|
||
|
||
/*FILE *gp_stFileDEMO_DEBUG;*/
|
||
|
||
int g_bTestInputDuringDemo = FALSE;
|
||
char g_szMapNameToLoadWhenDemoFinished [20];
|
||
|
||
#ifndef RETAIL
|
||
char g_szDemoMode [20];
|
||
char g_szVCRMode [20];
|
||
char g_szFrameNumber [20];
|
||
#endif
|
||
|
||
#define D_DEMO_STATISTIC
|
||
|
||
#ifdef D_DEMO_STATISTIC
|
||
|
||
typedef struct DEMO_stStatistic_
|
||
{
|
||
long lNumberOfAllocations;
|
||
long lNumberOfBytes;
|
||
} DEMO_tdstStatistic;
|
||
|
||
#define DEMO_C_NumberOfStatistic 22
|
||
|
||
DEMO_tdstStatistic DEMO_g_a_stStatistic [DEMO_C_NumberOfStatistic];
|
||
|
||
char * DEMO_g_a_szStatisticName [DEMO_C_NumberOfStatistic] =
|
||
{ "General flag" , "Actor number" , "Compressed actor number" , "Frame number" ,
|
||
"Complete translation" , "Delta translation" ,
|
||
"Complete rotation" , "Delta rotation" , "State change" , "Frame change" ,
|
||
"Transparency change" , "Activate always" , "Desactivate always" ,
|
||
"Activate / desactivate canal" , "Activation / Desactivation" ,
|
||
"Debug" , "Change viewport size" , "Set module transparency value" ,
|
||
"Activate module transparency" , "Fix values change" , "Sector change" ,
|
||
"Move module" };
|
||
|
||
#define DEMO_M_AddStatistic(lType,lSize) \
|
||
{ \
|
||
DEMO_g_a_stStatistic [lType] . lNumberOfAllocations ++; \
|
||
DEMO_g_a_stStatistic [lType] . lNumberOfBytes += lSize; \
|
||
}
|
||
|
||
#else
|
||
|
||
#define DEMO_M_AddStatistic(a,b)
|
||
|
||
#endif
|
||
|
||
#define DEMO_C_STAT_GeneralFlag 0
|
||
#define DEMO_C_STAT_ActorNumber 1
|
||
#define DEMO_C_STAT_CompressedActorNumber 2
|
||
#define DEMO_C_STAT_FrameNumber 3
|
||
#define DEMO_C_STAT_CompleteTranslation 4
|
||
#define DEMO_C_STAT_DeltaTranslation 5
|
||
#define DEMO_C_STAT_CompleteRotation 6
|
||
#define DEMO_C_STAT_DeltaRotation 7
|
||
#define DEMO_C_STAT_StateChange 8
|
||
#define DEMO_C_STAT_FrameChange 9
|
||
#define DEMO_C_STAT_TransparencyChange 10
|
||
|
||
#define DEMO_C_STAT_ActivateAlways 11
|
||
#define DEMO_C_STAT_DesactivateAlways 12
|
||
#define DEMO_C_STAT_ActivateDesactivateCanal 13
|
||
#define DEMO_C_STAT_ActivationDesactivation 14
|
||
#define DEMO_C_STAT_Debug 15
|
||
#define DEMO_C_STAT_ChangeViewportSize 16
|
||
#define DEMO_C_STAT_SetModuleTransparencyValue 17
|
||
#define DEMO_C_STAT_ActivateModuleTransparency 18
|
||
#define DEMO_C_STAT_FixValuesChange 19
|
||
#define DEMO_C_STAT_SectorChange 20
|
||
#define DEMO_C_STAT_MoveModule 21
|
||
#define DEMO_C_STAT_GenerateAGO 22
|
||
|
||
/* ANNECY AV {*/
|
||
|
||
/* Compression of a float into a short : if -2 < x < 2 ==> store x * 4096 : -8192 <= result <= 8192*/
|
||
/* if |x| >= 2 ==> store 16384 + x * 128 : 8704 <= result <= 24064 (one must have x <= 60)*/
|
||
INLINE
|
||
short fn_sCompressNumber (float x)
|
||
{
|
||
return (short) (fabs (x) < 2.0f ? x * 4096 : 16384.0f + x * 128.0f);
|
||
}
|
||
|
||
INLINE
|
||
float fn_fUncompressNumber (short n)
|
||
{
|
||
return n < 8700 ? ((float) n) / 4096.0f : ((float) (n - 16384)) / 128.0f;
|
||
}
|
||
|
||
/*******************************************************************************/
|
||
/** fn_vCompressMatrix **/
|
||
/** Compress a 3x3 float matrix into a 9 short array **/
|
||
/*******************************************************************************/
|
||
void fn_vCompressMatrix (tdstDemoCompressedMatrix * _p_stCompressedMatrix , MTH3D_tdstMatrix * _p_stMatrix)
|
||
{
|
||
short * p = _p_stCompressedMatrix -> a9_sCoef;
|
||
MTH3D_tdstVector * p_stVector;
|
||
|
||
p_stVector = & _p_stMatrix -> stCol_0;
|
||
* (p ++) = fn_sCompressNumber (MTH3D_M_xGetXofVector (p_stVector));
|
||
* (p ++) = fn_sCompressNumber (MTH3D_M_xGetYofVector (p_stVector));
|
||
* (p ++) = fn_sCompressNumber (MTH3D_M_xGetZofVector (p_stVector));
|
||
|
||
p_stVector = & _p_stMatrix -> stCol_1;
|
||
* (p ++) = fn_sCompressNumber (MTH3D_M_xGetXofVector (p_stVector));
|
||
* (p ++) = fn_sCompressNumber (MTH3D_M_xGetYofVector (p_stVector));
|
||
* (p ++) = fn_sCompressNumber (MTH3D_M_xGetZofVector (p_stVector));
|
||
|
||
p_stVector = & _p_stMatrix -> stCol_2;
|
||
* (p ++) = fn_sCompressNumber (MTH3D_M_xGetXofVector (p_stVector));
|
||
* (p ++) = fn_sCompressNumber (MTH3D_M_xGetYofVector (p_stVector));
|
||
* (p ++) = fn_sCompressNumber (MTH3D_M_xGetZofVector (p_stVector));
|
||
}
|
||
|
||
/*******************************************************************************/
|
||
/** fn_bCompressedMatrixTestIfEqual **/
|
||
/** Test if two compressed matrixes are equal **/
|
||
/*******************************************************************************/
|
||
int fn_bCompressedMatrixTestIfEqual (tdstDemoCompressedMatrix * _p_stMatrix1 , tdstDemoCompressedMatrix * _p_stMatrix2)
|
||
{
|
||
return memcmp (_p_stMatrix1 , _p_stMatrix2 , sizeof (tdstDemoCompressedMatrix)) == 0;
|
||
}
|
||
|
||
/*******************************************************************************/
|
||
/** fn_vDecompressMatrix **/
|
||
/** Decompress a matrix **/
|
||
/*******************************************************************************/
|
||
void fn_vDecompressMatrix (MTH3D_tdstMatrix * _p_stMatrix , tdstDemoCompressedMatrix * _p_stCompressedMatrix)
|
||
{
|
||
short * p = _p_stCompressedMatrix -> a9_sCoef;
|
||
MTH3D_tdstVector * p_stVector;
|
||
|
||
p_stVector = & _p_stMatrix -> stCol_0;
|
||
MTH3D_M_vSetVectorElements (p_stVector , fn_fUncompressNumber (* (p ++)) , fn_fUncompressNumber (* (p ++)) , fn_fUncompressNumber (* (p ++)));
|
||
p_stVector = & _p_stMatrix -> stCol_1;
|
||
MTH3D_M_vSetVectorElements (p_stVector , fn_fUncompressNumber (* (p ++)) , fn_fUncompressNumber (* (p ++)) , fn_fUncompressNumber (* (p ++)));
|
||
p_stVector = & _p_stMatrix -> stCol_2;
|
||
MTH3D_M_vSetVectorElements (p_stVector , fn_fUncompressNumber (* (p ++)) , fn_fUncompressNumber (* (p ++)) , fn_fUncompressNumber (* (p ++)));
|
||
}
|
||
|
||
/*******************************************************************************/
|
||
/** fn_vComputeRotationMatrixFromTransformMatrix **/
|
||
/** **/
|
||
/*******************************************************************************/
|
||
void fn_vComputeRotationMatrixFromTransformMatrix (MTH3D_tdstMatrix * _p_stRotationMatrix , MTH3D_tdstMatrix * _p_stTransformMatrix)
|
||
{
|
||
MTH_tdxReal xInvertScaleX , xInvertScaleY , xInvertScaleZ;
|
||
|
||
/* ??? In reverse mode, it is possible to have a null matrix*/
|
||
if (_p_stTransformMatrix -> stCol_0 . xX == 0.0 && _p_stTransformMatrix -> stCol_0 . xY == 0.0 && _p_stTransformMatrix -> stCol_0 . xZ == 0.0)
|
||
MTH3D_M_vSetIdentityMatrix (_p_stTransformMatrix);
|
||
|
||
xInvertScaleX = MTH_M_xInvSqrt (MTH_M_xAdd (MTH_M_xAdd (MTH_M_xSqr (_p_stTransformMatrix -> stCol_0.xX) ,
|
||
MTH_M_xSqr (_p_stTransformMatrix -> stCol_1.xX)) ,
|
||
MTH_M_xSqr (_p_stTransformMatrix -> stCol_2.xX)));
|
||
|
||
xInvertScaleY = MTH_M_xInvSqrt (MTH_M_xAdd (MTH_M_xAdd (MTH_M_xSqr (_p_stTransformMatrix -> stCol_0.xY) ,
|
||
MTH_M_xSqr (_p_stTransformMatrix -> stCol_1.xY)) ,
|
||
MTH_M_xSqr (_p_stTransformMatrix -> stCol_2.xY)));
|
||
|
||
xInvertScaleZ = MTH_M_xInvSqrt (MTH_M_xAdd (MTH_M_xAdd (MTH_M_xSqr (_p_stTransformMatrix -> stCol_0.xZ) ,
|
||
MTH_M_xSqr (_p_stTransformMatrix -> stCol_1.xZ)) ,
|
||
MTH_M_xSqr (_p_stTransformMatrix -> stCol_2.xZ)));
|
||
|
||
_p_stRotationMatrix -> stCol_0 . xX = MTH_M_xMul (_p_stTransformMatrix -> stCol_0 . xX , xInvertScaleX);
|
||
_p_stRotationMatrix -> stCol_0 . xY = MTH_M_xMul (_p_stTransformMatrix -> stCol_0 . xY , xInvertScaleY);
|
||
_p_stRotationMatrix -> stCol_0 . xZ = MTH_M_xMul (_p_stTransformMatrix -> stCol_0 . xZ , xInvertScaleZ);
|
||
_p_stRotationMatrix -> stCol_1 . xX = MTH_M_xMul (_p_stTransformMatrix -> stCol_1 . xX , xInvertScaleX);
|
||
_p_stRotationMatrix -> stCol_1 . xY = MTH_M_xMul (_p_stTransformMatrix -> stCol_1 . xY , xInvertScaleY);
|
||
_p_stRotationMatrix -> stCol_1 . xZ = MTH_M_xMul (_p_stTransformMatrix -> stCol_1 . xZ , xInvertScaleZ);
|
||
_p_stRotationMatrix -> stCol_2 . xX = MTH_M_xMul (_p_stTransformMatrix -> stCol_2 . xX , xInvertScaleX);
|
||
_p_stRotationMatrix -> stCol_2 . xY = MTH_M_xMul (_p_stTransformMatrix -> stCol_2 . xY , xInvertScaleY);
|
||
_p_stRotationMatrix -> stCol_2 . xZ = MTH_M_xMul (_p_stTransformMatrix -> stCol_2 . xZ , xInvertScaleZ);
|
||
}
|
||
|
||
/*******************************************************************************/
|
||
/** fn_bCanUltraCompressMatrix **/
|
||
/** **/
|
||
/*******************************************************************************/
|
||
int fn_bCanUltraCompressMatrix (tdstDemoCompressedMatrix * p_stMatrixToCompress , tdstDemoCompressedMatrix * p_stReferenceMatrix ,
|
||
tdstDemoUltraCompressedMatrix * p_stUltraCompressedMatrix)
|
||
{
|
||
int i , j;
|
||
short * p , * r;
|
||
|
||
p = p_stMatrixToCompress -> a9_sCoef;
|
||
r = p_stReferenceMatrix -> a9_sCoef;
|
||
|
||
/*
|
||
// To be ultra-compressed, the matrix must be antisymetric :
|
||
if (p [1] != - p [3] || r [1] != - r [3]) return FALSE;
|
||
if (p [2] != - p [6] || r [2] != - r [6]) return FALSE;
|
||
if (p [5] != - p [7] || r [5] != - r [7]) return FALSE;
|
||
*/
|
||
|
||
for (i = 0 , j = 0 ; i < 9 ; i ++ , p ++ , r ++)
|
||
{
|
||
/* if (i == 3 || i == 6 || i == 7) continue; // coef 3, 6 and 7 are unnecessary*/
|
||
|
||
if (abs (* p) >= 8192 || abs (* r) >= 8192) return FALSE;
|
||
if (abs (* p - * r) >= 128) return FALSE;
|
||
|
||
p_stUltraCompressedMatrix -> a9_cCoef [j ++] = (char) (* p - * r);
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
/*******************************************************************************/
|
||
/** fn_vUltraDecompressMatrix **/
|
||
/** **/
|
||
/*******************************************************************************/
|
||
void fn_vUltraDecompressMatrix (MTH3D_tdstMatrix * p_stMatrix , tdstDemoUltraCompressedMatrix * p_stUltraCompressedMatrix ,
|
||
tdstDemoCompressedMatrix * p_stReferenceMatrix)
|
||
{
|
||
int i;
|
||
char * p = p_stUltraCompressedMatrix -> a9_cCoef;
|
||
short * r = p_stReferenceMatrix -> a9_sCoef;
|
||
|
||
for (i = 0 ; i < 9 ; i ++ , r ++)
|
||
{
|
||
/*
|
||
if (i == 3) * r = (short) - r [-2]; // coef 3 = - coef 1
|
||
else
|
||
if (i == 6) * r = (short) - r [-4]; // coef 6 = - coef 2
|
||
else
|
||
if (i == 7) * r = (short) - r [-2]; // coef 7 = - coef 5
|
||
else
|
||
*/
|
||
#pragma warning (disable:4244)
|
||
* r += (short) * (p ++);
|
||
#pragma warning (default:4244)
|
||
}
|
||
|
||
fn_vDecompressMatrix (p_stMatrix , p_stReferenceMatrix);
|
||
}
|
||
|
||
/*******************************************************************************/
|
||
/** fn_bCanCompressVector **/
|
||
/** **/
|
||
/*******************************************************************************/
|
||
int fn_bCanCompressVector (MTH3D_tdstVector * _p_stVector , MTH3D_tdstVector * _p_stPreviousVector)
|
||
{
|
||
MTH3D_tdstVector stDelta;
|
||
|
||
MTH3D_M_vSubVector (& stDelta , _p_stVector , _p_stPreviousVector);
|
||
|
||
return fabs (stDelta . xX * 128.0) <= 127 &&
|
||
fabs (stDelta . xY * 128.0) <= 127 &&
|
||
fabs (stDelta . xZ * 128.0) <= 127;
|
||
}
|
||
|
||
/*******************************************************************************/
|
||
/** fn_vCompressVector **/
|
||
/** **/
|
||
/*******************************************************************************/
|
||
void fn_vCompressVector (char * _p_cCompressedVector , MTH3D_tdstVector * _p_stVector , MTH3D_tdstVector * _p_stPreviousVector)
|
||
{
|
||
MTH3D_tdstVector stDelta;
|
||
|
||
MTH3D_M_vSubVector (& stDelta , _p_stVector , _p_stPreviousVector);
|
||
|
||
if (stDelta . xX >= 0)
|
||
_p_cCompressedVector [0] = (char) ( stDelta . xX * 128.0 + 0.5);
|
||
else _p_cCompressedVector [0] = (char) - (char) (- stDelta . xX * 128.0 + 0.5);
|
||
|
||
if (stDelta . xY >= 0)
|
||
_p_cCompressedVector [1] = (char) ( stDelta . xY * 128.0 + 0.5);
|
||
else _p_cCompressedVector [1] = (char) - (char) (- stDelta . xY * 128.0 + 0.5);
|
||
|
||
if (stDelta . xZ >= 0)
|
||
_p_cCompressedVector [2] = (char) ( stDelta . xZ * 128.0 + 0.5);
|
||
else _p_cCompressedVector [2] = (char) - (char) (- stDelta . xZ * 128.0 + 0.5);
|
||
}
|
||
|
||
/*******************************************************************************/
|
||
/** fn_vDecompressVector **/
|
||
/** **/
|
||
/*******************************************************************************/
|
||
void fn_vDecompressVector (MTH3D_tdstVector * _p_stVector , char * _p_cCompressedVector , MTH3D_tdstVector * _p_stPreviousVector)
|
||
{
|
||
_p_stVector -> xX = _p_stPreviousVector -> xX + _p_cCompressedVector [0] / 128.0f;
|
||
_p_stVector -> xY = _p_stPreviousVector -> xY + _p_cCompressedVector [1] / 128.0f;
|
||
_p_stVector -> xZ = _p_stPreviousVector -> xZ + _p_cCompressedVector [2] / 128.0f;
|
||
}
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
|
||
/*******************************************************************************/
|
||
/** fn_vSaveCurrentPositionForVCR **/
|
||
/** **/
|
||
/*******************************************************************************/
|
||
void fn_vSaveCurrentPositionForVCR (void)
|
||
{
|
||
gp_DEMO_BeginningOfCharacterFrame [g_lNumberOfCharacterFrame] . lCurrentIndex = gp_DEMO_CurrentPosInMemory - gp_DEMO_AllocatedMemory;
|
||
gp_DEMO_BeginningOfCharacterFrame [g_lNumberOfCharacterFrame] . lCurrentIndexForVCR = gp_DEMO_CurrentPosInMemoryForVCR - gp_DEMO_AllocatedMemoryForVCR;
|
||
g_lNumberOfCharacterFrame ++;
|
||
}
|
||
|
||
#endif
|
||
/* END ANNECY AV }*/
|
||
|
||
|
||
/* ######################################################################## */
|
||
/* ############################################################################ */
|
||
/* ########################## MANAGMENT of Demo Memory ########################## */
|
||
/* ############################################################################### */
|
||
/* ############################################################################### */
|
||
/* ######### */
|
||
/* ################# */
|
||
/* ############# */
|
||
/* ######### */
|
||
/* ##### */
|
||
/* # */
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vAllocateMemory(void)
|
||
{
|
||
#define DEMO_ALLOCATED_MEMORY 2000L /* 2000 Ko to store the demo*/
|
||
|
||
gp_DEMO_AllocatedMemory = (char *)TMP_M_p_Malloc(DEMO_ALLOCATED_MEMORY*1024L);
|
||
if(gp_DEMO_AllocatedMemory == NULL)
|
||
{
|
||
__asm int 3h
|
||
}
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
#define DEMO_MAX_NB_CHARACTER_FRAME 250000L
|
||
gp_DEMO_BeginningOfCharacterFrame = (tdstBeginningOfCharacterFrame *) TMP_M_p_Malloc (DEMO_MAX_NB_CHARACTER_FRAME * sizeof (tdstBeginningOfCharacterFrame));
|
||
if (gp_DEMO_BeginningOfCharacterFrame == NULL)
|
||
{
|
||
__asm int 3h
|
||
}
|
||
|
||
#define DEMO_ALLOCATED_MEMORY_FOR_VCR 1000L /* 1000 Ko to store informations for VCR*/
|
||
gp_DEMO_AllocatedMemoryForVCR = (char *) TMP_M_p_Malloc (DEMO_ALLOCATED_MEMORY_FOR_VCR*1024L);
|
||
if (gp_DEMO_AllocatedMemoryForVCR == NULL)
|
||
{
|
||
__asm int 3h
|
||
}
|
||
#endif
|
||
|
||
* g_szMapNameToLoadWhenDemoFinished = 0;
|
||
|
||
#if !defined(RETAIL) && !defined(PRESS_DEMO)
|
||
* g_szDemoMode = 0;
|
||
* g_szVCRMode = 0;
|
||
* g_szFrameNumber = 0;
|
||
|
||
fn_vRegisterTextToDraw (g_szDemoMode , 400 , 0);
|
||
fn_vRegisterTextToDraw (g_szVCRMode , 400 , 16);
|
||
fn_vRegisterTextToDraw (g_szFrameNumber , 400 , 32);
|
||
#endif
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vPrepareForReadNow (void)
|
||
{
|
||
/* gSO_UniverseSector = HIE_fn_hGetChildNumber(SECT_hFatherSector,HIE_fn_lGetNumberOfChildren(SECT_hFatherSector)-1);*/
|
||
|
||
gp_DEMO_CurrentPosInMemory = gp_DEMO_AllocatedMemory;
|
||
gl_DEMO_CurrentFrame = 0;
|
||
#ifdef D_DEMO_USE_VCR
|
||
gp_DEMO_CurrentPosInMemoryForVCR = gp_DEMO_AllocatedMemoryForVCR;
|
||
g_lNumberOfCharacterFrame = 0;
|
||
#endif
|
||
/* fn_vAddCommandLineAnswerWithScroll("PLAY DEMO");*/
|
||
/* OutputDebugString("PLAY DEMO\n");*/
|
||
#ifndef RETAIL
|
||
strcpy (g_szDemoMode , "PLAY");
|
||
#endif
|
||
/* gp_stFileDEMO_DEBUG = fopen("DEMO_DBG.LOG","at"); */
|
||
g_ulDEMO_CurrentTimerCount =0;
|
||
g_ulDEMO_StartDEMO_EngineTimerCount = g_stEngineStructure.stEngineTimer.ulCurrentTimerCount;
|
||
}
|
||
|
||
void DEMO_fn_vPrepareForRead (int _iNbFramesToWait)
|
||
{
|
||
g_DEMO_KeybTest = DEMO_PLAY;
|
||
if (_iNbFramesToWait == 0) DEMO_fn_vPrepareForReadNow ();
|
||
else g_iNbFramesToWaitBeforePlaying = _iNbFramesToWait;
|
||
}
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vPrepareForWrite(void)
|
||
{
|
||
g_DEMO_KeybTest = DEMO_RECORD;
|
||
/* gSO_UniverseSector = HIE_fn_hGetChildNumber(SECT_hFatherSector,HIE_fn_lGetNumberOfChildren(SECT_hFatherSector)-1);*/
|
||
gp_DEMO_CurrentPosInMemory = gp_DEMO_AllocatedMemory;
|
||
#ifdef D_DEMO_USE_VCR
|
||
gp_DEMO_CurrentPosInMemoryForVCR = gp_DEMO_AllocatedMemoryForVCR;
|
||
g_b_DEMO_VCRIsUsable = TRUE;
|
||
g_lNumberOfCharacterFrame = 0L;
|
||
#endif
|
||
gl_DEMO_NumberOfFrames = 0L;
|
||
g_DEMO_FirstInitFlag=TRUE;
|
||
DEMO_fn_vReInitSOList();
|
||
/* fn_vAddCommandLineAnswerWithScroll("RECORD DEMO");*/
|
||
#ifndef RETAIL
|
||
strcpy (g_szDemoMode , "RECORD");
|
||
#endif
|
||
|
||
#ifdef D_DEMO_STATISTIC
|
||
memset (DEMO_g_a_stStatistic , 0 , sizeof (DEMO_g_a_stStatistic));
|
||
#endif
|
||
|
||
/* OutputDebugString("RECORD DEMO\n");*/
|
||
|
||
g_ulNbPOS=0; g_ulNbALW=0; g_ulNbSCT=0; g_ulNbACT=0; g_ulNbCAN=0;
|
||
g_ulFlagFrameNumber = g_stEngineStructure.stEngineTimer.ulTrameNumber;
|
||
}
|
||
#endif /* RETAIL */
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vCloseFirstInit(void)
|
||
{
|
||
g_DEMO_FirstInitFlag=FALSE;
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vSaveToFile(void)
|
||
{
|
||
FILE *p_xFile;
|
||
/* ANNECY AV {*/
|
||
char szFilename[_MAX_PATH]/*,szMessage[80]*/;
|
||
/* END ANNECY AV }*/
|
||
long i;
|
||
long lSubMapNumber;
|
||
char *p_cFilename;
|
||
|
||
lSubMapNumber = GAM_M_GetSubMap(fn_lGetSubMapNumber());
|
||
if(lSubMapNumber == 0)
|
||
{
|
||
sprintf (szFilename , "Demos\\%s" , fn_p_szGetLevelName());
|
||
}
|
||
else
|
||
{
|
||
sprintf (szFilename , "Demos\\%s\\%02d" , fn_p_szGetLevelName() , lSubMapNumber);
|
||
}
|
||
p_cFilename = szFilename + strlen (szFilename);
|
||
|
||
FIL_fn_bValidatePath(szFilename,"Demo000.sav");
|
||
/* mkdir("Demos");*/
|
||
|
||
|
||
sprintf(p_cFilename,"\\Demo%03d.sav",0);
|
||
for (i=0;i<100&&FIL_fn_bIsFileExist(szFilename);i++)
|
||
{
|
||
sprintf(p_cFilename,"\\Demo%03d.sav",i+1);
|
||
}
|
||
|
||
/*
|
||
i=0;
|
||
do
|
||
{
|
||
sprintf(szFilename,"Demos\\demo%03d.sav",i);
|
||
p_xFile=fopen(szFilename,"rb");
|
||
i++;
|
||
}
|
||
while ( p_xFile!=NULL && i<100);
|
||
*/
|
||
|
||
if(i<100)
|
||
{
|
||
unsigned long Length = (unsigned long)gp_DEMO_CurrentPosInMemory-(unsigned long)gp_DEMO_AllocatedMemory;
|
||
|
||
p_xFile=fopen(szFilename,"wb");
|
||
if(p_xFile!=NULL)
|
||
{
|
||
fwrite(&gl_DEMO_NumberOfFrames,sizeof(unsigned long),1,p_xFile);
|
||
fwrite(&Length,sizeof(unsigned long),1,p_xFile);
|
||
fwrite(gp_DEMO_AllocatedMemory,Length,1,p_xFile);
|
||
fclose(p_xFile);
|
||
/* ANNECY AV {*/
|
||
/* sprintf(szMessage,"SAVE DEMO in Demos\\demo%03d.sav",i);*/
|
||
/* fn_vAddCommandLineAnswerWithScroll(szMessage);*/
|
||
}
|
||
/* else fn_vAddCommandLineAnswerWithScroll("FILE ERROR IN SAVING DEMO");*/
|
||
}
|
||
/* else fn_vAddCommandLineAnswerWithScroll("!!! DEMO NOT SAVED !!! NO MORE PLACE");*/
|
||
/* END ANNECY AV }*/
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
strncpy (szFilename + strlen (szFilename) - 3 , "vcr" , 3);
|
||
p_xFile = fopen (szFilename , "wb");
|
||
if (p_xFile)
|
||
{
|
||
unsigned long Length;
|
||
fwrite (& g_lNumberOfCharacterFrame , sizeof (g_lNumberOfCharacterFrame) , 1 , p_xFile);
|
||
fwrite (gp_DEMO_BeginningOfCharacterFrame , g_lNumberOfCharacterFrame , sizeof (tdstBeginningOfCharacterFrame) , p_xFile);
|
||
Length = (unsigned long) gp_DEMO_CurrentPosInMemoryForVCR - (unsigned long) gp_DEMO_AllocatedMemoryForVCR;
|
||
fwrite(&Length,sizeof(unsigned long),1,p_xFile);
|
||
if (Length)
|
||
fwrite (gp_DEMO_AllocatedMemoryForVCR,Length,1,p_xFile);
|
||
fclose (p_xFile);
|
||
}
|
||
#endif
|
||
|
||
#ifndef RETAIL
|
||
strcpy (g_szDemoMode , "");
|
||
#endif
|
||
|
||
#ifdef D_DEMO_STATISTIC
|
||
{
|
||
int i;
|
||
DEMO_tdstStatistic * p;
|
||
long lTotalSize = 0;
|
||
FILE * pFile = fopen ("Demos.log" , "wt");
|
||
if (! pFile) return;
|
||
|
||
for (i = 0 , p = DEMO_g_a_stStatistic ; i < DEMO_C_NumberOfStatistic ; i ++ , p ++)
|
||
{
|
||
lTotalSize += p -> lNumberOfBytes;
|
||
}
|
||
|
||
fprintf (pFile , "Total size : %i\n\n" , lTotalSize);
|
||
|
||
for (i = 0 , p = DEMO_g_a_stStatistic ; i < DEMO_C_NumberOfStatistic ; i ++ , p ++)
|
||
{
|
||
fprintf (pFile , "%35s : %4i blocs %6i bytes - %2i %% (1 bloc = %2i bytes)\n" , DEMO_g_a_szStatisticName [i] , p -> lNumberOfAllocations ,
|
||
p -> lNumberOfBytes , (p -> lNumberOfBytes * 100 + lTotalSize / 2) / lTotalSize , p -> lNumberOfBytes / max (p -> lNumberOfAllocations , 1));
|
||
}
|
||
|
||
fclose (pFile);
|
||
}
|
||
#endif
|
||
}
|
||
#endif /* RETAIL */
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vLoadFromFile(char *szFileName)
|
||
{
|
||
FILE *p_xFile;
|
||
|
||
p_xFile=fopen(szFileName,"rb");
|
||
if(p_xFile!=NULL)
|
||
{
|
||
unsigned long Length;
|
||
fread(&gl_DEMO_NumberOfFrames,sizeof(long),1,p_xFile);
|
||
fread(&Length,sizeof(unsigned long),1,p_xFile);
|
||
fread(gp_DEMO_AllocatedMemory,Length,1,p_xFile);
|
||
fclose(p_xFile);
|
||
/* fn_vAddCommandLineAnswerWithScroll("LOAD DEMO");*/
|
||
/* else fn_vAddCommandLineAnswerWithScroll("DEMO NOT LOADED --- FILE NOT FOUND");*/
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
{
|
||
char szVCRFileName [256];
|
||
strcpy (szVCRFileName , szFileName);
|
||
strncpy (szVCRFileName + strlen (szVCRFileName) - 3 , "vcr" , 3);
|
||
|
||
g_b_DEMO_VCRIsUsable = FALSE;
|
||
p_xFile = fopen (szVCRFileName , "rb");
|
||
if (p_xFile)
|
||
{
|
||
if (fread (& g_lNumberOfCharacterFrame , sizeof (g_lNumberOfCharacterFrame) , 1 , p_xFile))
|
||
if (g_lNumberOfCharacterFrame)
|
||
if (fread (gp_DEMO_BeginningOfCharacterFrame , sizeof (tdstBeginningOfCharacterFrame) ,
|
||
g_lNumberOfCharacterFrame , p_xFile) == (unsigned int) g_lNumberOfCharacterFrame)
|
||
if (fread (&Length,sizeof(unsigned long),1,p_xFile))
|
||
if (fread (gp_DEMO_AllocatedMemoryForVCR,1,Length,p_xFile) == Length)
|
||
g_b_DEMO_VCRIsUsable = TRUE;
|
||
fclose (p_xFile);
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vAutoPlayDemoFromFile(char *szFileName)
|
||
{
|
||
DEMO_fn_vLoadFromFile(szFileName);
|
||
DEMO_fn_vPrepareForRead(0);
|
||
g_DEMO_AutoPlay=TRUE;
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vStopAutoPlay(void)
|
||
{
|
||
g_DEMO_AutoPlay = FALSE;
|
||
/*DFM changeEngineFlag*/
|
||
fn_vChangeEngineMode(EM_ModeStoppingProgram);
|
||
}
|
||
|
||
|
||
void DEMO_fn_vSwitchVCRMode ()
|
||
{
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_DEMO_KeybTest == DEMO_PLAY) /* One can change the VCR mode only when playing the demo*/
|
||
{
|
||
g_bVCRMode = ! g_bVCRMode;
|
||
g_bVCR_DemoIsPaused = FALSE;
|
||
}
|
||
#endif
|
||
}
|
||
|
||
void DEMO_fn_vSetTestInputDuringDemo (int _bTestInput)
|
||
{
|
||
g_bTestInputDuringDemo = _bTestInput;
|
||
}
|
||
|
||
void DEMO_fn_vSetMapToLoadWhenDemoFinished (char * _szMapName)
|
||
{
|
||
strncpy (g_szMapNameToLoadWhenDemoFinished , _szMapName , 20);
|
||
g_szMapNameToLoadWhenDemoFinished [19] = 0;
|
||
}
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vTransformPositionInfos(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
|
||
}
|
||
#endif /* RETAIL */
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
|
||
void DEMO_fn_vSaveAPositionInMemory(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
}
|
||
#endif /* RETAIL */
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/****WRITE SECTION*******************************************************************************************************************/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
/* ANNECY AV {*/
|
||
/*
|
||
void DEMO_fn_vSaveSuperImposedTextActivationDesactivation(int iIndex,FON_tdxHandleOfString hText,FON_tdxHandleOfFont hFont,MTH_tdxReal xPosX,MTH_tdxReal xPosY,long lLiveTime,int Activate)
|
||
{
|
||
DEMO_FLAG_CAST Demo_Flag = (DEMO_FLAG_CAST) DEMO_FLAG_EXTENDED;
|
||
|
||
char Tmp_iIndex = (char)iIndex;
|
||
char Tmp_hText = (char)hText;
|
||
char Tmp_lLiveTime = (char)lLiveTime;
|
||
char Tmp_hFont;
|
||
|
||
if(g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
|
||
Tmp_hFont = (char)FON_fn_wGetFontNumberInList(hFont);
|
||
|
||
if(Activate) Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_ACTIVE_DESACTIVE;
|
||
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_SUPERIMPOSED_TEXT;
|
||
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{// debug
|
||
long L=0xABABABAB;
|
||
M_DEMO_WRITE(&L,long);
|
||
}// debug
|
||
#endif
|
||
|
||
M_DEMO_WRITE(&Demo_Flag,DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE(&Tmp_iIndex,char);
|
||
if(Activate)
|
||
{
|
||
M_DEMO_WRITE(&Tmp_hText,char);
|
||
M_DEMO_WRITE(&Tmp_hFont,char);
|
||
M_DEMO_WRITE(&xPosX,MTH_tdxReal);
|
||
M_DEMO_WRITE(&xPosY,MTH_tdxReal);
|
||
M_DEMO_WRITE(&Tmp_lLiveTime,char);
|
||
}
|
||
}
|
||
*/
|
||
/* END ANNECY AV }*/
|
||
|
||
/* ANNECY AV {*/
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vSaveChangeViewportSize (unsigned char _ucParam1 , unsigned char _ucParam2 , unsigned char _ucParam3 ,
|
||
unsigned char _ucParam4 , unsigned char _ucParam5 , unsigned char _ucParam6 ,
|
||
unsigned char _ucParam7 , unsigned char _ucParam8 , unsigned char _ucParam9 , unsigned char _ucParam10)
|
||
{
|
||
DEMO_FLAG_CAST Demo_Flag;
|
||
unsigned char a10_ucParam [10];
|
||
|
||
if(g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
Demo_Flag = (DEMO_FLAG_CAST) (DEMO_FLAG_EXTENDED | DEMO_FLAG_CHANGE_VIEWPORT_SIZE);
|
||
|
||
a10_ucParam [0] = _ucParam1;
|
||
a10_ucParam [1] = _ucParam2;
|
||
a10_ucParam [2] = _ucParam3;
|
||
a10_ucParam [3] = _ucParam4;
|
||
a10_ucParam [4] = _ucParam5;
|
||
a10_ucParam [5] = _ucParam6;
|
||
a10_ucParam [6] = _ucParam7;
|
||
a10_ucParam [7] = _ucParam8;
|
||
a10_ucParam [8] = _ucParam9;
|
||
a10_ucParam [9] = _ucParam10;
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
fn_vSaveCurrentPositionForVCR ();
|
||
#endif
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_ChangeViewportSize , sizeof (DEMO_FLAG_CAST) + sizeof (a10_ucParam));
|
||
M_DEMO_WRITE (& Demo_Flag , DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE (a10_ucParam , a10_ucParam);
|
||
}
|
||
#endif /* RETAIL */
|
||
|
||
|
||
#ifndef REATAIL
|
||
void DEMO_fn_vSaveModuleTransparencyValue (HIE_tdxHandleToSuperObject hSO , unsigned char ucChannelNumber , MTH_tdxReal xTransparencyValue)
|
||
{
|
||
DEMO_FLAG_CAST Demo_Flag;
|
||
unsigned short wSO_Number;
|
||
unsigned char ucTransparencyValue;
|
||
|
||
if (g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
Demo_Flag = (DEMO_FLAG_CAST) (DEMO_FLAG_EXTENDED | DEMO_FLAG_MODULE_TRANSPARENCY);
|
||
wSO_Number = DEMO_fn_wGetNumberFromSO (hSO);
|
||
ucTransparencyValue = (unsigned char) MTH_M_xRealToLong (xTransparencyValue);
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
fn_vSaveCurrentPositionForVCR ();
|
||
#endif
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_SetModuleTransparencyValue , sizeof (DEMO_FLAG_CAST) + 4);
|
||
M_DEMO_WRITE (& Demo_Flag , DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE (& wSO_Number , unsigned short);
|
||
M_DEMO_WRITE (& ucChannelNumber , unsigned char);
|
||
M_DEMO_WRITE (& ucTransparencyValue , unsigned char);
|
||
}
|
||
#endif /* RETAIL */
|
||
|
||
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vSaveActivateModuleTransparency (HIE_tdxHandleToSuperObject hSO , unsigned char ucChannelNumber , int bTransparencyActive)
|
||
{
|
||
DEMO_FLAG_CAST Demo_Flag;
|
||
unsigned short wSO_Number;
|
||
|
||
if (g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
Demo_Flag = (DEMO_FLAG_CAST) (bTransparencyActive ? DEMO_FLAG_EXTENDED | DEMO_FLAG_ACTIVATE_TRANSPARENCY
|
||
: DEMO_FLAG_EXTENDED | DEMO_FLAG_DESACTIVATE_TRANSPARENCY);
|
||
wSO_Number = DEMO_fn_wGetNumberFromSO (hSO);
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
fn_vSaveCurrentPositionForVCR ();
|
||
#endif
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_ActivateModuleTransparency , sizeof (DEMO_FLAG_CAST) + 3);
|
||
M_DEMO_WRITE (& Demo_Flag , DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE (& wSO_Number , unsigned short);
|
||
M_DEMO_WRITE (& ucChannelNumber , unsigned char);
|
||
}
|
||
#endif /* RETAIL */
|
||
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vSaveModuleMove (HIE_tdxHandleToSuperObject hSO , unsigned char ucChannelNumber , int bSaveTransformMatrix)
|
||
{
|
||
DEMO_FLAG_CAST Demo_Flag;
|
||
unsigned short wSO_Number;
|
||
HIE_tdxHandleToSuperObject hModuleSO;
|
||
/* POS_tdstCompletePosition * hModuleGlobalMatrix;*/
|
||
POS_tdstCompletePosition * hModuleLocaleMatrix;
|
||
tdstDemoCompressedMatrix stCompressedMatrix;
|
||
|
||
if (g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
hModuleSO = fn_hGetSuperObjectInChannel (fn_h3dDataGetChannelSOList (M_GetMSHandle (hSO , 3dData)) , ucChannelNumber);
|
||
/* hModuleGlobalMatrix = HIE_fn_hGetSuperObjectGlobalMatrix (hModuleSO);*/
|
||
/* fn_vCompressMatrix (& stCompressedMatrix , & hModuleGlobalMatrix -> stTransformMatrix);*/
|
||
hModuleLocaleMatrix = HIE_fn_hGetSuperObjectMatrix (hModuleSO);
|
||
if (bSaveTransformMatrix)
|
||
fn_vCompressMatrix (& stCompressedMatrix , & hModuleLocaleMatrix -> stTransformMatrix);
|
||
|
||
Demo_Flag = (DEMO_FLAG_CAST) (DEMO_FLAG_EXTENDED | DEMO_FLAG_MOVE_MODULE);
|
||
if (bSaveTransformMatrix) Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_ROTATE_MODULE;
|
||
wSO_Number = DEMO_fn_wGetNumberFromSO (hSO);
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
fn_vSaveCurrentPositionForVCR ();
|
||
#endif
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_MoveModule , sizeof (DEMO_FLAG_CAST) + 3 + sizeof (MTH3D_tdstVector) +
|
||
(bSaveTransformMatrix ? sizeof (tdstDemoCompressedMatrix) : 0));
|
||
M_DEMO_WRITE (& Demo_Flag , DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE (& wSO_Number , unsigned short);
|
||
M_DEMO_WRITE (& ucChannelNumber , unsigned char);
|
||
/* M_DEMO_WRITE (& hModuleGlobalMatrix -> stTranslationVector , MTH3D_tdstVector);*/
|
||
M_DEMO_WRITE (& hModuleLocaleMatrix -> stTranslationVector , MTH3D_tdstVector);
|
||
if (bSaveTransformMatrix) M_DEMO_WRITE (& stCompressedMatrix , tdstDemoCompressedMatrix);
|
||
}
|
||
#endif /* RETAIL */
|
||
/* END ANNECY AV }*/
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vSaveFixValuesChange(unsigned char FieldFlag,unsigned char ucNewValue)
|
||
{
|
||
DEMO_FLAG_CAST Demo_Flag = (DEMO_FLAG_CAST) DEMO_FLAG_EXTENDED;
|
||
|
||
if(g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_FIX_CHANGE;
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
fn_vSaveCurrentPositionForVCR ();
|
||
#endif
|
||
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L=0xCBCBCBCB;
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_Debug , 4);
|
||
M_DEMO_WRITE(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_FixValuesChange , sizeof (DEMO_FLAG_CAST) + 2);
|
||
M_DEMO_WRITE(&Demo_Flag,DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE(&FieldFlag,unsigned char);
|
||
M_DEMO_WRITE(&ucNewValue,unsigned char);
|
||
}
|
||
#endif /* RETAIL */
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vSaveAlwaysActivationDesactivation(HIE_tdxHandleToSuperObject hSO,MTH3D_tdstVector * p_stTempVector,int Activate)
|
||
{
|
||
tdstDemoSOList *p_stListElement;
|
||
unsigned short wSO_Number=0;
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
tdObjectType otObjectModelType;
|
||
|
||
if(g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
p_stListElement = DEMO_fn_p_stGetInfosPointerFromSO(hSO);
|
||
if(p_stListElement->ucActivate == Activate ) return;
|
||
p_stListElement->ucActivate = (unsigned char)Activate;
|
||
|
||
wSO_Number = DEMO_fn_wGetNumberFromSO(hSO);
|
||
otObjectModelType = M_ObjectGetModelType(M_GetEngineObject(hSO));
|
||
|
||
if(Activate)
|
||
Demo_Flag = (DEMO_FLAG_CAST) DEMO_FLAG_ACTIVATE;
|
||
else
|
||
{
|
||
Demo_Flag = (DEMO_FLAG_CAST) DEMO_FLAG_DESACTIVATE;
|
||
p_stListElement->ucReInit = TRUE;
|
||
}
|
||
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_IS_AN_ALWAYS;
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
fn_vSaveCurrentPositionForVCR ();
|
||
#endif
|
||
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L=0xDDDDDDDD;
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_Debug , 4);
|
||
M_DEMO_WRITE(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
|
||
DEMO_M_AddStatistic (Activate ? DEMO_C_STAT_ActivateAlways : DEMO_C_STAT_DesactivateAlways ,
|
||
sizeof (DEMO_FLAG_CAST) + 2 + (Activate ? sizeof (tdObjectType) + sizeof (MTH3D_tdstVector) : 0));
|
||
M_DEMO_WRITE(&Demo_Flag,DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE(&wSO_Number,unsigned short);
|
||
g_ulNbALW++;
|
||
if(Activate)
|
||
{
|
||
M_DEMO_WRITE(&otObjectModelType,tdObjectType);
|
||
M_DEMO_WRITE(&p_stTempVector,MTH3D_tdstVector);
|
||
}
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (! Activate)
|
||
{
|
||
MS_tdxHandleTo3dData h_Current3dData = M_GetMSHandle(hSO,3dData);
|
||
struct tdstState_ * p_stCurrentState = h_Current3dData -> h_CurrentState;
|
||
tdxHandleToFamilyList p_stCurrentFamily = h_Current3dData -> h_Family;
|
||
struct tdstState_ * p_stTmpState;
|
||
long tmp;
|
||
unsigned short wStateNumber;
|
||
|
||
LST3_M_StaticWhatElementNumber (p_stCurrentState , & p_stCurrentFamily -> hForStateArray , p_stTmpState , tmp);
|
||
wStateNumber = (unsigned short)tmp;
|
||
|
||
M_DEMO_WRITE_VCR (& otObjectModelType , tdObjectType);
|
||
M_DEMO_WRITE_VCR (& hSO -> hGlobalMatrix -> stTranslationVector , MTH3D_tdstVector);
|
||
M_DEMO_WRITE_VCR (& wStateNumber , unsigned short);
|
||
M_DEMO_WRITE_VCR (& h_Current3dData -> uwCurrentFrame , unsigned short);
|
||
}
|
||
#endif
|
||
/* M_DEMO_WRITE(&ucChannelNumber,unsigned char);*/
|
||
#ifdef _DEBUG
|
||
{ /*???*/
|
||
char szText [128];
|
||
sprintf (szText , "%s of actor '%s' with index %i\n" , Activate ? "Activation" : "Desactivation" ,
|
||
hSO -> hLinkedObject . p_stCharacter -> h_3dData -> h_InitialState -> szStateName ,
|
||
hSO - g_stAlways . d_stAlwaysSuperObject);
|
||
OutputDebugString (szText);
|
||
}
|
||
#endif
|
||
}
|
||
#endif /* RETAIL */
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vSaveCanalActivationDesactivation(HIE_tdxHandleToSuperObject hSO, unsigned char ucChannelNumber,int Activate)
|
||
{
|
||
/* tdstDemoSOList *p_stListElement;*/
|
||
unsigned short wSO_Number=0;
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
|
||
if(g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
wSO_Number = DEMO_fn_wGetNumberFromSO(hSO);
|
||
|
||
if(Activate)
|
||
Demo_Flag = (DEMO_FLAG_CAST) DEMO_FLAG_ACTIVATE_CANAL;
|
||
else
|
||
Demo_Flag = (DEMO_FLAG_CAST) DEMO_FLAG_DESACTIVATE_CANAL;
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
fn_vSaveCurrentPositionForVCR ();
|
||
#endif
|
||
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L=0xCCCCCCCC;
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_Debug , 4);
|
||
M_DEMO_WRITE(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_ActivateDesactivateCanal , sizeof (DEMO_FLAG_CAST) + 3);
|
||
M_DEMO_WRITE(&Demo_Flag,DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE(&wSO_Number,unsigned short);
|
||
M_DEMO_WRITE(&ucChannelNumber,unsigned char);
|
||
g_ulNbCAN++;
|
||
}
|
||
#endif /* RETAIL */
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
/*
|
||
void DEMO_fn_vSaveSectorChange(HIE_tdxHandleToSuperObject hSO, HIE_tdxHandleToSuperObject hSectorNew)
|
||
{
|
||
// tdstDemoSOList *p_stListElement;
|
||
unsigned short wSO_Number=0;
|
||
unsigned char ucSectorNumber=0;
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
SECT_tdxHandleOfElementLstGraphicInteraction _hCollNode;
|
||
long Index;
|
||
SECT_tdxHandleOfSectorObject hSectorUniverse_LinkedObject;
|
||
|
||
if(g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
wSO_Number = DEMO_fn_wGetNumberFromSO(hSO);
|
||
|
||
hSectorUniverse_LinkedObject = (SECT_tdxHandleOfSectorObject)HIE_fn_hGetSuperObjectObject(gSO_UniverseSector);
|
||
LST2_M_StaticForEachElementOf(&hSectorUniverse_LinkedObject->stListOfSectorsInGraphicInteraction,_hCollNode,Index)
|
||
{
|
||
if(_hCollNode->hPointerOfSectorSO == hSectorNew)
|
||
{
|
||
ucSectorNumber = (unsigned char)Index;
|
||
goto Label_continue;
|
||
}
|
||
}
|
||
// error all sectors must be in universe sector graphical list
|
||
OutputDebugString("\nerror in Universe sector Demos.c\n");
|
||
|
||
|
||
Label_continue :
|
||
|
||
Demo_Flag = (DEMO_FLAG_CAST) DEMO_FLAG_SECTOR_CHANGE;
|
||
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{// debug
|
||
long L=0xEEEEEEEE;
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_Debug , 4);
|
||
M_DEMO_WRITE(&L,long);
|
||
}// debug
|
||
#endif
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_SectorChange , sizeof (DEMO_FLAG_CAST) + 3);
|
||
M_DEMO_WRITE(&Demo_Flag,DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE(&wSO_Number,unsigned short);
|
||
M_DEMO_WRITE(&ucSectorNumber,unsigned char);
|
||
g_ulNbSCT++;
|
||
}
|
||
*/
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vTestAndSaveActivationDesactivation(HIE_tdxHandleToSuperObject hSO, int Active)
|
||
{
|
||
tdstDemoSOList *p_stListElement;
|
||
unsigned short wSO_Number=0;
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
|
||
if(g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
/* ********************** init values ***************************/
|
||
p_stListElement = DEMO_fn_p_stGetInfosPointerFromSO(hSO);
|
||
if(p_stListElement->ucActivate == Active ) return;
|
||
|
||
p_stListElement->ucActivate = (unsigned char)Active;
|
||
wSO_Number = DEMO_fn_wGetNumberFromSO(hSO);
|
||
|
||
/*if(gl_DEMO_NumberOfFrames > 0)*/
|
||
{
|
||
Demo_Flag = (DEMO_FLAG_CAST) 0;
|
||
|
||
/* if( g_stEngineStructure.stEngineTimer.ulTrameNumber > g_ulFlagFrameNumber)
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_NEW_ENGINE_FRAME;
|
||
g_ulFlagFrameNumber = g_stEngineStructure.stEngineTimer.ulTrameNumber;
|
||
}
|
||
*/
|
||
if(Active)
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_ACTIVATE;
|
||
p_stListElement->ucReInit = TRUE;
|
||
}
|
||
else
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_DESACTIVATE;
|
||
}
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
fn_vSaveCurrentPositionForVCR ();
|
||
#endif
|
||
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L=0xBBBBBBBB;
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_Debug , 4);
|
||
M_DEMO_WRITE(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_ActivationDesactivation , sizeof (DEMO_FLAG_CAST) + 2);
|
||
M_DEMO_WRITE(&Demo_Flag,DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE(&wSO_Number,unsigned short);
|
||
g_ulNbACT++;
|
||
}
|
||
|
||
}
|
||
#endif /* RETAIL */
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vSaveACompleteCharacterPosition(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
tdstDemoSOList *p_stListElement;
|
||
MS_tdxHandleTo3dData h_Current3dData = M_GetMSHandle(hSO,3dData);
|
||
struct tdstState_ *p_stCurrentState = h_Current3dData->h_CurrentState;
|
||
/* ANNECY MT {*/
|
||
tdxHandleToFamilyList p_stCurrentFamily = h_Current3dData->h_Family;
|
||
/* END ANNECY MT }*/
|
||
struct tdstState_ *p_stTmpState;
|
||
GEO_tdxHandleToMatrix hSupObjMatrix;
|
||
MTH3D_tdstVector _stTrs;
|
||
/* ANNECY AV {*/
|
||
/* POS_tdstShortQuaternion _stQuaternion;*/
|
||
tdstDemoCompressedMatrix stCompressedMatrix;
|
||
tdstDemoUltraCompressedMatrix stUltraCompressedMatrix;
|
||
/* END ANNECY AV }*/
|
||
unsigned short wStateNumber=0, wSO_Number=0;
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
long tmp;
|
||
float f_Transparence;
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
unsigned short wPreviousStateNumber;
|
||
unsigned short wPreviousFrame;
|
||
MTH3D_tdstVector stPreviousTranslation;
|
||
tdstDemoCompressedMatrix stPreviousCompressedMatrix;
|
||
#endif
|
||
|
||
if(g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
/* ********************** init values ***************************/
|
||
p_stListElement = DEMO_fn_p_stGetInfosPointerFromSO(hSO);
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
wPreviousStateNumber = p_stListElement -> wStateNumber;
|
||
wPreviousFrame = p_stListElement -> uwCurrentFrame;
|
||
stPreviousTranslation = p_stListElement -> _stTrs;
|
||
stPreviousCompressedMatrix = p_stListElement -> stCompressedMatrix;
|
||
#endif
|
||
|
||
/* ANNECY AV {*/
|
||
/* if(p_stListElement->ucActivate == FALSE ) return;*/
|
||
if (p_stListElement->ucActivate == FALSE && ! CAM_fn_bSuperObjectIsACamera (hSO)) return;
|
||
/* END ANNECY AV }*/
|
||
|
||
wSO_Number = DEMO_fn_wGetNumberFromSO(hSO);
|
||
|
||
/* ANNECY MT {*/
|
||
LST3_M_StaticWhatElementNumber(p_stCurrentState,&p_stCurrentFamily->hForStateArray,p_stTmpState,tmp);
|
||
/* END ANNECY MT }*/
|
||
wStateNumber = (unsigned short)tmp; /* macro de (t<><74><EFBFBD>..<2E><><EFBFBD>t)*/
|
||
|
||
hSupObjMatrix = HIE_fn_hGetSuperObjectGlobalMatrix(hSO);
|
||
POS_fn_vGetTranslationVector(hSupObjMatrix , &_stTrs );
|
||
/* ANNECY AV {*/
|
||
/* POS_fn_vCompressRotation(&_stQuaternion, &hSupObjMatrix->stRotationMatrix);*/
|
||
fn_vCompressMatrix (& stCompressedMatrix , & hSupObjMatrix -> stTransformMatrix);
|
||
/* END ANNECY AV }*/
|
||
/* ************************************************************* */
|
||
|
||
|
||
/* ********************** compress data *************************/
|
||
if(p_stListElement->ucReInit == FALSE)
|
||
{
|
||
Demo_Flag = (DEMO_FLAG_CAST) 0;
|
||
|
||
if( g_stEngineStructure.stEngineTimer.ulTrameNumber > g_ulFlagFrameNumber)
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_NEW_ENGINE_FRAME;
|
||
g_ulFlagFrameNumber = g_stEngineStructure.stEngineTimer.ulTrameNumber;
|
||
{
|
||
char s[200];
|
||
sprintf(s,"Frame = %ld : \t\tPOS%ld \t\tALW%ld \t\tSCT%ld \t\tACT%ld \t\tCAN%ld \n",g_ulFlagFrameNumber,g_ulNbPOS,g_ulNbALW,g_ulNbSCT,g_ulNbACT,g_ulNbCAN);
|
||
OutputDebugString(s);
|
||
}
|
||
g_ulNbPOS=0; g_ulNbALW=0; g_ulNbSCT=0; g_ulNbACT=0; g_ulNbCAN=0;
|
||
}
|
||
|
||
if (MTH_M_bEqualWithEpsilon (p_stListElement->_stTrs.xX, _stTrs.xX, 1E-4) == FALSE ||
|
||
MTH_M_bEqualWithEpsilon (p_stListElement->_stTrs.xY, _stTrs.xY, 1E-4) == FALSE ||
|
||
MTH_M_bEqualWithEpsilon (p_stListElement->_stTrs.xZ, _stTrs.xZ, 1E-4) == FALSE)
|
||
{
|
||
if(p_stListElement->ucDeltaCounter != 0 && fn_bCanCompressVector (& _stTrs , & p_stListElement->_stTrs))
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_TRANSLATION_DELTA;
|
||
}
|
||
else
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_TRANSLATION_COMPLETE;
|
||
MTH3D_M_vCopyVector(&p_stListElement->_stTrs,&_stTrs);
|
||
}
|
||
}
|
||
|
||
/* if( !POS_fn_bQuaternionTestIfEqual(&p_stListElement->_stQuaternion,&_stQuaternion) )*/
|
||
if (! fn_bCompressedMatrixTestIfEqual (& p_stListElement -> stCompressedMatrix , & stCompressedMatrix))
|
||
{
|
||
if (fn_bCanUltraCompressMatrix (& stCompressedMatrix , & p_stListElement -> stCompressedMatrix , & stUltraCompressedMatrix))
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_ROTATION_DELTA;
|
||
else Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_ROTATION_COMPLETE;
|
||
|
||
/* memcpy(&p_stListElement->_stQuaternion, &_stQuaternion, sizeof(POS_tdstShortQuaternion));*/
|
||
memcpy (& p_stListElement -> stCompressedMatrix , & stCompressedMatrix , sizeof (tdstDemoCompressedMatrix));
|
||
}
|
||
|
||
if (!CAM_fn_bSuperObjectIsACamera(hSO))
|
||
{
|
||
if( p_stListElement->wStateNumber !=wStateNumber )
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_STATE_CHANGE;
|
||
p_stListElement->wStateNumber = wStateNumber;
|
||
}
|
||
if( p_stListElement->uwCurrentFrame != h_Current3dData->uwCurrentFrame )
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_FRAME_CHANGE;
|
||
p_stListElement->uwCurrentFrame = h_Current3dData->uwCurrentFrame;
|
||
}
|
||
|
||
f_Transparence = HIE_fn_fGetSuperObjectTransparenceLevel(hSO);
|
||
/* ANNECY AV {*/
|
||
if (HIE_fn_lGetSuperObjectDrawMask (hSO) & GLI_C_lIsNotGrided) f_Transparence = 255.0f;
|
||
/* END ANNECY AV }*/
|
||
if( ((float)p_stListElement->ucTransparence) != f_Transparence )
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_TRANSPARENCY_CHANGE;
|
||
p_stListElement->ucTransparence = (unsigned char)f_Transparence;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
/* ANNECY AV {*/
|
||
Demo_Flag = (DEMO_FLAG_CAST) (DEMO_FLAG_TRANSLATION_COMPLETE | DEMO_FLAG_ROTATION_COMPLETE);
|
||
/* g_ulFlagFrameNumber = g_stEngineStructure.stEngineTimer.ulTrameNumber;*/
|
||
MTH3D_M_vCopyVector(&p_stListElement->_stTrs,&_stTrs);
|
||
/* memcpy(&p_stListElement->_stQuaternion, &_stQuaternion, sizeof(POS_tdstShortQuaternion));*/
|
||
memcpy (& p_stListElement -> stCompressedMatrix , & stCompressedMatrix , sizeof (tdstDemoCompressedMatrix));
|
||
|
||
if( g_stEngineStructure.stEngineTimer.ulTrameNumber > g_ulFlagFrameNumber)
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_NEW_ENGINE_FRAME;
|
||
g_ulFlagFrameNumber = g_stEngineStructure.stEngineTimer.ulTrameNumber;
|
||
}
|
||
|
||
/* END ANNECY AV }*/
|
||
if (!CAM_fn_bSuperObjectIsACamera(hSO))
|
||
{
|
||
Demo_Flag |= (DEMO_FLAG_CAST) ( DEMO_FLAG_FRAME_CHANGE
|
||
| DEMO_FLAG_STATE_CHANGE
|
||
| DEMO_FLAG_TRANSPARENCY_CHANGE );
|
||
}
|
||
|
||
if (!CAM_fn_bSuperObjectIsACamera(hSO))
|
||
{
|
||
p_stListElement->wStateNumber = wStateNumber;
|
||
p_stListElement->uwCurrentFrame = h_Current3dData->uwCurrentFrame;
|
||
/* ANNECY AV {*/
|
||
p_stListElement->ucTransparence = (unsigned char) ((HIE_fn_lGetSuperObjectDrawMask (hSO) & GLI_C_lIsNotGrided) == 0 ?
|
||
HIE_fn_fGetSuperObjectTransparenceLevel (hSO) : 255);
|
||
/* END ANNECY AV }*/
|
||
}
|
||
p_stListElement->ucReInit = FALSE;
|
||
/* g_ulFlagFrameNumber = g_stEngineStructure.stEngineTimer.ulTrameNumber;*/
|
||
}
|
||
/* **********************************************************************/
|
||
|
||
if(Demo_Flag == (DEMO_FLAG_CAST) 0) return;
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
fn_vSaveCurrentPositionForVCR ();
|
||
#endif
|
||
|
||
/* *********************** save in Memory ****************************** */
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L=0xAAAAAAAA;
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_Debug , 4);
|
||
M_DEMO_WRITE(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
|
||
if (HIE_fn_SO_bIsSuperimposed (hSO)) wSO_Number += 16384;
|
||
else if (wSO_Number <= 255) Demo_Flag |= (DEMO_FLAG_CAST) DEMO_FLAG_COMPRESS_ACTOR_NUMBER;
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_GeneralFlag , sizeof (DEMO_FLAG_CAST));
|
||
M_DEMO_WRITE(&Demo_Flag,DEMO_FLAG_CAST);
|
||
|
||
if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_COMPRESS_ACTOR_NUMBER))
|
||
{
|
||
unsigned char ucActorNumber = (unsigned char) wSO_Number;
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_CompressedActorNumber , 1);
|
||
M_DEMO_WRITE (& ucActorNumber , unsigned char);
|
||
}
|
||
else
|
||
{
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_ActorNumber , 2);
|
||
M_DEMO_WRITE(&wSO_Number,short);
|
||
}
|
||
|
||
g_ulNbPOS++;
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_NEW_ENGINE_FRAME) )
|
||
{
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L=0xFFFFFFFF;
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_Debug , 4);
|
||
M_DEMO_WRITE(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
{
|
||
unsigned short ulDeltaTimerCount = (unsigned short)g_stEngineStructure.stEngineTimer.ulDeltaTimerCount;
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_FrameNumber , 2);
|
||
M_DEMO_WRITE(&ulDeltaTimerCount,unsigned short);
|
||
}
|
||
gl_DEMO_NumberOfFrames ++;
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_TRANSLATION_COMPLETE) )
|
||
{
|
||
/* p_stListElement->ucDeltaCounter++; if(p_stListElement->ucDeltaCounter == DEMO_DELTACOUNT) p_stListElement->ucDeltaCounter=0;*/
|
||
p_stListElement->ucDeltaCounter = 1;
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_CompleteTranslation , sizeof (MTH3D_tdstVector));
|
||
M_DEMO_WRITE(&_stTrs,MTH3D_tdstVector);
|
||
M_DEMO_WRITE_VCR (& stPreviousTranslation , MTH3D_tdstVector);
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_TRANSLATION_DELTA) )
|
||
{
|
||
/* MTH3D_tdstVector _stDelta;*/
|
||
/* MTH3D_M_vSubVector ( &_stDelta, &_stTrs, &p_stListElement->_stTrs );*/
|
||
char a3_cCoef [3];
|
||
fn_vCompressVector (a3_cCoef , & _stTrs , & p_stListElement->_stTrs);
|
||
|
||
p_stListElement->ucDeltaCounter++; if(p_stListElement->ucDeltaCounter == DEMO_DELTACOUNT) p_stListElement->ucDeltaCounter=0;
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_DeltaTranslation , 3);
|
||
/* M_DEMO_WRITE(&_stDelta,MTH3D_tdstVector);*/
|
||
M_DEMO_WRITE (a3_cCoef , a3_cCoef);
|
||
|
||
MTH3D_M_vCopyVector(&p_stListElement->_stTrs,&_stTrs);
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_ROTATION_COMPLETE) )
|
||
{
|
||
/* ANNECY AV {*/
|
||
/* M_DEMO_WRITE(&_stQuaternion,POS_tdstShortQuaternion);*/
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_CompleteRotation , sizeof (tdstDemoCompressedMatrix));
|
||
M_DEMO_WRITE (& stCompressedMatrix , tdstDemoCompressedMatrix);
|
||
M_DEMO_WRITE_VCR (& stPreviousCompressedMatrix , tdstDemoCompressedMatrix);
|
||
/* END ANNECY AV }*/
|
||
}
|
||
|
||
if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_ROTATION_DELTA))
|
||
{
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_DeltaRotation , sizeof (tdstDemoUltraCompressedMatrix));
|
||
M_DEMO_WRITE (& stUltraCompressedMatrix , tdstDemoUltraCompressedMatrix);
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_STATE_CHANGE) )
|
||
{
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_StateChange , 2);
|
||
M_DEMO_WRITE(&wStateNumber,unsigned short);
|
||
M_DEMO_WRITE_VCR (& wPreviousStateNumber , unsigned short);
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_FRAME_CHANGE) )
|
||
{
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_FrameChange , 2);
|
||
M_DEMO_WRITE(&h_Current3dData->uwCurrentFrame,unsigned short);
|
||
M_DEMO_WRITE_VCR (& wPreviousFrame , unsigned short);
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_TRANSPARENCY_CHANGE) )
|
||
{
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_TransparencyChange , 1);
|
||
M_DEMO_WRITE(&p_stListElement->ucTransparence,unsigned char);
|
||
}
|
||
/* ***********************************************************************/
|
||
|
||
|
||
gf_CompressionRate0 = (float)((long)gp_DEMO_CurrentPosInMemory-(long)gp_DEMO_AllocatedMemory)/(float)gl_DEMO_NumberOfFrames;
|
||
|
||
if( ((long)gp_DEMO_CurrentPosInMemory-(long)gp_DEMO_AllocatedMemory)>DEMO_ALLOCATED_MEMORY*1024L )
|
||
{
|
||
g_DEMO_KeybTest = DEMO_NOTHING;
|
||
DEMO_fn_vSaveToFile();
|
||
/* ANNECY AV {*/
|
||
/* fn_vAddCommandLineAnswerWithScroll("DEMO RECORD STOP DEMO MEMORY FULL SAVE AT THIS POSITION");*/
|
||
/* END ANNECY AV }*/
|
||
}
|
||
}
|
||
#endif /* RETAIL */
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
void DEMO_fn_vSaveGenerateAGO (unsigned long PartType, MTH3D_tdstVector *p_stPosition, MTH3D_tdstVector *p_stDirection, GMT_tdxHandleToGameMaterial hGameMaterial, float parameter)
|
||
{
|
||
DEMO_FLAG_CAST Demo_Flag;
|
||
unsigned short uwGMTIndexInGMTList;
|
||
|
||
if(g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
if (hGameMaterial)
|
||
{
|
||
uwGMTIndexInGMTList = DEMO_fn_wGetNumberFromGMT(hGameMaterial);
|
||
}
|
||
else
|
||
{
|
||
uwGMTIndexInGMTList = 0xffff;
|
||
}
|
||
Demo_Flag = (DEMO_FLAG_CAST) (DEMO_FLAG_EXTENDED | DEMO_FLAG_GENERATE_AGO);
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
fn_vSaveCurrentPositionForVCR ();
|
||
#endif
|
||
|
||
DEMO_M_AddStatistic (DEMO_C_STAT_GenerateAGO , sizeof (DEMO_FLAG_CAST) + sizeof (unsigned long) + sizeof(MTH3D_tdstVector) + sizeof(MTH3D_tdstVector) + sizeof(unsigned short) + sizeof(float));
|
||
M_DEMO_WRITE (& Demo_Flag , DEMO_FLAG_CAST);
|
||
M_DEMO_WRITE (&PartType , unsigned long);
|
||
M_DEMO_WRITE (p_stPosition , MTH3D_tdstVector);
|
||
M_DEMO_WRITE (p_stDirection , MTH3D_tdstVector);
|
||
M_DEMO_WRITE (&uwGMTIndexInGMTList , unsigned short);
|
||
M_DEMO_WRITE (¶meter , float);
|
||
}
|
||
#endif /* RETAIL */
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/************************************************************************************************************************************/
|
||
/****READ SECTION********************************************************************************************************************/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vReadAndTreatAllExtendedFlag(DEMO_FLAG_CAST Demo_Flag)
|
||
{
|
||
if(g_DEMO_KeybTest != DEMO_PLAY) return;
|
||
|
||
/* ********************** init values ***************************/
|
||
/* *********************** read in Memory *******************************/
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L;
|
||
M_DEMO_READ(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
|
||
M_DEMO_READ(&Demo_Flag,DEMO_FLAG_CAST);
|
||
|
||
/* ANNECY AV {*/
|
||
/*
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_SUPERIMPOSED_TEXT))
|
||
{
|
||
char Tmp_iIndex;
|
||
char Tmp_hText;
|
||
char Tmp_lLiveTime;
|
||
char Tmp_hFont;
|
||
MTH_tdxReal xPosX,xPosY;
|
||
FON_tdxHandleOfFont hFont;
|
||
|
||
M_DEMO_READ(&Tmp_iIndex,char);
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_ACTIVE_DESACTIVE))
|
||
{
|
||
M_DEMO_READ(&Tmp_hText,char);
|
||
M_DEMO_READ(&Tmp_hFont,char);
|
||
M_DEMO_READ(&xPosX,MTH_tdxReal);
|
||
M_DEMO_READ(&xPosY,MTH_tdxReal);
|
||
M_DEMO_READ(&Tmp_lLiveTime,char);
|
||
|
||
hFont = FON_fn_wGetFontHandleByNumber((unsigned long)Tmp_hFont);
|
||
fn_vAddSuperimposedText((int)Tmp_iIndex,(FON_tdxHandleOfString)Tmp_hText,hFont,xPosX,xPosY,(long) Tmp_lLiveTime);
|
||
}
|
||
else
|
||
{
|
||
fn_vRemoveSuperimposedText((int)Tmp_iIndex);
|
||
}
|
||
}
|
||
*/
|
||
|
||
/* ANNECY AV {*/
|
||
/*
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_FIX_CHANGE))
|
||
{
|
||
unsigned char ucValue;
|
||
unsigned char FieldFlag;
|
||
HIE_tdxHandleToSuperObject hSO;
|
||
|
||
M_DEMO_READ(&FieldFlag,unsigned char);
|
||
M_DEMO_READ(&ucValue,unsigned char);
|
||
|
||
hSO = MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode());
|
||
switch(FieldFlag)
|
||
{
|
||
case DEMO_FIX_HIT_POINTS : fn_vStandardGameSetHitPoints(M_GetMSHandle(hSO,StandardGame),ucValue); break;
|
||
case DEMO_FIX_HIT_POINTS_MAX : fn_vStandardGameSetHitPointsMax(M_GetMSHandle(hSO,StandardGame),ucValue); break;
|
||
case DEMO_FIX_SILVER_SPADE : fn_vStandardGameSetHitPoints(M_GetMSHandle(g_stEngineStructure.h_WorldCaracter,StandardGame),ucValue); break;
|
||
case DEMO_FIX_SILVER_SPADE_MAX : fn_vStandardGameSetHitPointsMax(M_GetMSHandle(g_stEngineStructure.h_WorldCaracter,StandardGame),ucValue);
|
||
g_stFixStructure.ucCurrentNumberOfSilverSpade = 255; break;
|
||
case DEMO_FIX_LIVES : fn_vSetLives(ucValue); break;
|
||
case DEMO_FIX_TINGS : fn_vWorldSetNumberOfTingsPickedUp(M_GetMSHandle(g_stEngineStructure.h_WorldCaracter,World),ucValue); break;
|
||
case DEMO_FIX_BEES : fn_xSetNumberOfItemsWithId(0,ucValue); break;
|
||
}
|
||
}
|
||
*/
|
||
/* END ANNECY AV }*/
|
||
|
||
/* ANNECY AV {*/
|
||
if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_CHANGE_VIEWPORT_SIZE))
|
||
{
|
||
unsigned char a10_ucParam [10];
|
||
|
||
M_DEMO_READ (a10_ucParam , a10_ucParam);
|
||
fn_vChangeViewPortPercent (a10_ucParam [0] , a10_ucParam [1] , a10_ucParam [2] , a10_ucParam [3] , a10_ucParam [4] ,
|
||
a10_ucParam [5] , a10_ucParam [6] , a10_ucParam [7] , (signed char)a10_ucParam [8] , (signed char)a10_ucParam [9]);
|
||
}
|
||
else if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_MODULE_TRANSPARENCY))
|
||
{
|
||
unsigned short wSO_Number;
|
||
unsigned char ucChannelNumber;
|
||
unsigned char ucTransparencyValue;
|
||
tdstDemoSOList * p_stListElement;
|
||
int i;
|
||
CHN_tdxHandleToChannelArray hChannelArray;
|
||
HIE_tdxHandleToSuperObject hModuleSuperObject;
|
||
|
||
/* Read the parameters*/
|
||
M_DEMO_READ (& wSO_Number , unsigned short);
|
||
M_DEMO_READ (& ucChannelNumber , unsigned char);
|
||
M_DEMO_READ (& ucTransparencyValue , unsigned char);
|
||
|
||
/* Find the actor super object*/
|
||
LST2_M_StaticGetElementNumber (g_hDemoSOList , p_stListElement , wSO_Number , i);
|
||
|
||
hChannelArray = fn_h3dDataGetChannelSOList (M_GetMSHandle (p_stListElement -> hCharacterSupObject , 3dData));
|
||
if (hChannelArray)
|
||
{
|
||
hModuleSuperObject = fn_hGetSuperObjectInChannel (hChannelArray , ucChannelNumber);
|
||
if (hModuleSuperObject)
|
||
{
|
||
HIE_fn_SO_vSetFlags(hModuleSuperObject , HIE_fn_SO_ulGetFlags(hModuleSuperObject) | HIE_C_Flag_ModuleTransparency);
|
||
HIE_fn_vSetSuperObjectTransparenceLevel (hModuleSuperObject , (float) ucTransparencyValue);
|
||
}
|
||
}
|
||
}
|
||
else if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_ACTIVATE_TRANSPARENCY) ||
|
||
DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_DESACTIVATE_TRANSPARENCY))
|
||
{
|
||
unsigned short wSO_Number;
|
||
unsigned char ucChannelNumber;
|
||
tdstDemoSOList * p_stListElement;
|
||
int i;
|
||
CHN_tdxHandleToChannelArray hChannelArray;
|
||
HIE_tdxHandleToSuperObject hModuleSuperObject;
|
||
|
||
/* Read the parameters*/
|
||
M_DEMO_READ (& wSO_Number , unsigned short);
|
||
M_DEMO_READ (& ucChannelNumber , unsigned char);
|
||
|
||
/* Find the actor super object*/
|
||
LST2_M_StaticGetElementNumber (g_hDemoSOList , p_stListElement , wSO_Number , i);
|
||
|
||
hChannelArray = fn_h3dDataGetChannelSOList (M_GetMSHandle (p_stListElement -> hCharacterSupObject , 3dData));
|
||
if (hChannelArray)
|
||
{
|
||
hModuleSuperObject = fn_hGetSuperObjectInChannel (hChannelArray , ucChannelNumber);
|
||
if (hModuleSuperObject)
|
||
{
|
||
long lValue = HIE_fn_lGetSuperObjectDrawMask (hModuleSuperObject);
|
||
|
||
if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_ACTIVATE_TRANSPARENCY))
|
||
lValue = lValue & ~ GLI_C_lIsNotGrided;
|
||
else
|
||
{
|
||
lValue = lValue | GLI_C_lIsNotGrided;
|
||
HIE_fn_SO_vSetFlags (hModuleSuperObject , HIE_fn_SO_ulGetFlags (hModuleSuperObject) & ~ HIE_C_Flag_ModuleTransparency);
|
||
}
|
||
|
||
HIE_fn_vSetSuperObjectDrawMask (hModuleSuperObject , lValue);
|
||
}
|
||
}
|
||
}
|
||
else if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_MOVE_MODULE))
|
||
{
|
||
unsigned short wSO_Number;
|
||
unsigned char ucChannelNumber;
|
||
tdstDemoSOList * p_stListElement;
|
||
int i;
|
||
CHN_tdxHandleToChannelArray hChannelArray;
|
||
HIE_tdxHandleToSuperObject hModuleSuperObject;
|
||
/* POS_tdstCompletePosition * hModuleGlobalMatrix;*/
|
||
POS_tdstCompletePosition * hModuleLocaleMatrix;
|
||
tdstDemoCompressedMatrix stCompressedMatrix;
|
||
MTH3D_tdstVector stTranslationVector;
|
||
|
||
/* Read the parameters*/
|
||
M_DEMO_READ (& wSO_Number , unsigned short);
|
||
M_DEMO_READ (& ucChannelNumber , unsigned char);
|
||
M_DEMO_READ (& stTranslationVector , MTH3D_tdstVector);
|
||
if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_ROTATE_MODULE))
|
||
M_DEMO_READ (& stCompressedMatrix , tdstDemoCompressedMatrix);
|
||
|
||
/* Find the actor super object*/
|
||
LST2_M_StaticGetElementNumber (g_hDemoSOList , p_stListElement , wSO_Number , i);
|
||
|
||
hChannelArray = fn_h3dDataGetChannelSOList (M_GetMSHandle (p_stListElement -> hCharacterSupObject , 3dData));
|
||
if (hChannelArray)
|
||
{
|
||
hModuleSuperObject = fn_hGetSuperObjectInChannel (hChannelArray , ucChannelNumber);
|
||
if (hModuleSuperObject)
|
||
{
|
||
/*
|
||
hModuleGlobalMatrix = HIE_fn_hGetSuperObjectGlobalMatrix (hModuleSuperObject);
|
||
fn_vDecompressMatrix (& hModuleGlobalMatrix -> stTransformMatrix , & stCompressedMatrix);
|
||
fn_vComputeRotationMatrixFromTransformMatrix (& hModuleGlobalMatrix -> stRotationMatrix , & hModuleGlobalMatrix -> stTransformMatrix);
|
||
MTH3D_M_vCopyVector (& hModuleGlobalMatrix -> stTranslationVector , & stTranslationVector);
|
||
POS_fn_vUpdateMatrixType (hModuleGlobalMatrix);
|
||
HIE_fn_vValidateGlobalMatrix (hModuleSuperObject);
|
||
HIE_fn_vComputeNewRelativeMatrix (hModuleSuperObject);
|
||
*/
|
||
|
||
hModuleLocaleMatrix = HIE_fn_hGetSuperObjectMatrix (hModuleSuperObject);
|
||
if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_ROTATE_MODULE))
|
||
{
|
||
fn_vDecompressMatrix (& hModuleLocaleMatrix -> stTransformMatrix , & stCompressedMatrix);
|
||
fn_vComputeRotationMatrixFromTransformMatrix (& hModuleLocaleMatrix -> stRotationMatrix , & hModuleLocaleMatrix -> stTransformMatrix);
|
||
}
|
||
MTH3D_M_vCopyVector (& hModuleLocaleMatrix -> stTranslationVector , & stTranslationVector);
|
||
hModuleLocaleMatrix -> ulType = POS_C_ulCompleteMatrixFlag;
|
||
POS_fn_vUpdateMatrixType (hModuleLocaleMatrix);
|
||
HIE_fn_vInvalidateOneGlobalMatrix (hModuleSuperObject);
|
||
}
|
||
}
|
||
}
|
||
else if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_GENERATE_AGO))
|
||
{
|
||
unsigned long PartType;
|
||
MTH3D_tdstVector stPosition;
|
||
MTH3D_tdstVector stDirection;
|
||
unsigned short uwGMTIndexInGMTList;
|
||
float parameter;
|
||
GMT_tdxHandleToGameMaterial hGameMaterial;
|
||
ACP_tdxHandleOfMaterial hVisualMaterial;
|
||
|
||
M_DEMO_READ (&PartType , unsigned long);
|
||
M_DEMO_READ (&stPosition , MTH3D_tdstVector);
|
||
M_DEMO_READ (&stDirection , MTH3D_tdstVector);
|
||
M_DEMO_READ (&uwGMTIndexInGMTList , unsigned short);
|
||
M_DEMO_READ (¶meter , float);
|
||
|
||
if (uwGMTIndexInGMTList != 0xffff)
|
||
{
|
||
hGameMaterial = DEMO_fn_hGetGMTFromList (uwGMTIndexInGMTList);
|
||
hVisualMaterial = GMT_fn_hGetVisualMaterial (hGameMaterial);
|
||
}
|
||
else
|
||
{
|
||
hVisualMaterial = NULL;
|
||
}
|
||
|
||
AGO_vAddParticle (PartType , &stPosition , &stDirection , hVisualMaterial , parameter);
|
||
}
|
||
/* END ANNECY AV }*/
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vReadAndChangeActivationDesactivation(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
unsigned short wSO_Number=0;
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
tdstEngineObject * p_stObj;
|
||
unsigned char ucChannelNumber;
|
||
HIE_tdxHandleToSuperObject hSOChannel;
|
||
unsigned long ulSpoFlags;
|
||
|
||
if(g_DEMO_KeybTest != DEMO_PLAY) return;
|
||
|
||
/* ********************** init values ***************************/
|
||
/* *********************** read in Memory *******************************/
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L;
|
||
M_DEMO_READ(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
|
||
M_DEMO_READ(&Demo_Flag,DEMO_FLAG_CAST);
|
||
M_DEMO_READ(&wSO_Number,unsigned short);
|
||
|
||
p_stObj=(tdstEngineObject*)HIE_fn_hGetSuperObjectObject(hSO);
|
||
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_ACTIVATE))
|
||
{
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode)
|
||
{
|
||
p_stObj = (tdstEngineObject *) HIE_fn_hGetSuperObjectObject (hSO);
|
||
M_UnactivateObject (p_stObj);
|
||
PLA_fn_vDesInitAllChildOfCharacter (hSO , p_stObj);
|
||
}
|
||
else
|
||
#endif
|
||
{
|
||
M_ActivateObject(p_stObj);
|
||
/* ANNECY AV {*/
|
||
PLA_fn_bDoAnimPlayerForCharacter(hSO,FALSE,FALSE);
|
||
/* END ANNECY AV }*/
|
||
}
|
||
}
|
||
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_DESACTIVATE))
|
||
{
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode)
|
||
{
|
||
MS_tdxHandleTo3dData h_Current3dData = M_GetMSHandle(hSO,3dData);
|
||
struct tdstAnim3d_ * p_stAnim = fn_h3dDataGetCurrentState (h_Current3dData) -> p_stAnim;
|
||
|
||
M_ActivateObject ((tdstEngineObject *) HIE_fn_hGetSuperObjectObject (hSO));
|
||
|
||
/* ???*/
|
||
/* To be sure that the frame number is correct*/
|
||
if (p_stAnim && fn_uw3dDataGetCurrentFrame (h_Current3dData) >= p_stAnim -> uwNumberOfFrames)
|
||
fn_v3dDataSetCurrentFrame (h_Current3dData , (unsigned short) (p_stAnim -> uwNumberOfFrames - 1));
|
||
|
||
PLA_fn_bDoAnimPlayerForCharacter (hSO,FALSE,FALSE);
|
||
}
|
||
else
|
||
#endif
|
||
{
|
||
M_UnactivateObject(p_stObj);
|
||
PLA_fn_vDesInitAllChildOfCharacter(hSO,p_stObj);
|
||
}
|
||
}
|
||
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_ACTIVATE_CANAL))
|
||
{
|
||
M_DEMO_READ(&ucChannelNumber,unsigned char);
|
||
hSOChannel = fn_hGetSuperObjectInChannel(fn_h3dDataGetChannelSOList(M_GetMSHandle(hSO,3dData)),ucChannelNumber);
|
||
if (hSOChannel != NULL)
|
||
{
|
||
ulSpoFlags = HIE_M_xGetSuperObjectMember(hSOChannel , ulFlags);
|
||
/* it becomes pickable, visible and shadowable */
|
||
HIE_M_vSetSuperObjectMember(hSOChannel , ulFlags, ulSpoFlags & ~ ( HIE_C_Flag_ulNotPickable | HIE_C_Flag_ulHidden | HIE_C_Flag_ulNoShadowOnMe ) ) ;
|
||
}
|
||
}
|
||
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_DESACTIVATE_CANAL))
|
||
{
|
||
M_DEMO_READ(&ucChannelNumber,unsigned char);
|
||
hSOChannel = fn_hGetSuperObjectInChannel(fn_h3dDataGetChannelSOList(M_GetMSHandle(hSO,3dData)),ucChannelNumber);
|
||
if (hSOChannel != NULL)
|
||
{
|
||
ulSpoFlags = HIE_M_xGetSuperObjectMember(hSOChannel , ulFlags);
|
||
/* it becomes not pickable, visible or shadowable */
|
||
HIE_M_vSetSuperObjectMember(hSOChannel , ulFlags, ulSpoFlags | HIE_C_Flag_ulNotPickable | HIE_C_Flag_ulHidden | HIE_C_Flag_ulNoShadowOnMe ) ;
|
||
}
|
||
}
|
||
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
/*
|
||
void DEMO_fn_vReadAndDoSectorChange(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
unsigned short wSO_Number=0;
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
unsigned char ucSectorNumber=0;
|
||
SECT_tdxHandleOfElementLstGraphicInteraction _hCollNode;
|
||
long Index;
|
||
SECT_tdxHandleOfSectorObject hSectorUniverse_LinkedObject;
|
||
|
||
if(g_DEMO_KeybTest != DEMO_PLAY) return;
|
||
|
||
// ********************** init values **************************
|
||
// *********************** read in Memory ******************************
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{// debug
|
||
long L;
|
||
M_DEMO_READ(&L,long);
|
||
}// debug
|
||
#endif
|
||
|
||
M_DEMO_READ(&Demo_Flag,DEMO_FLAG_CAST);
|
||
M_DEMO_READ(&wSO_Number,unsigned short);
|
||
M_DEMO_READ(&ucSectorNumber,unsigned char);
|
||
|
||
hSectorUniverse_LinkedObject = (SECT_tdxHandleOfSectorObject)HIE_fn_hGetSuperObjectObject(gSO_UniverseSector);
|
||
|
||
LST2_M_StaticGetElementNumber(&hSectorUniverse_LinkedObject->stListOfSectorsInGraphicInteraction,_hCollNode,ucSectorNumber,Index);
|
||
|
||
GAM_fn_vSetCurrentSector(hSO,_hCollNode->hPointerOfSectorSO);
|
||
fn_vSectInfoLaunchSectorSoundEvents(hSO);
|
||
fn_vInsertObjectInSectorList(GAM_fn_hGetCurrentSector(hSO),hSO);
|
||
if( hSO==MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode()) )
|
||
{
|
||
fn_vInitObjectsWhenPlayerChangeSector(hSO);
|
||
}
|
||
GAM_fn_vSetPreviousSector(hSO,GAM_fn_hGetCurrentSector(hSO));
|
||
}
|
||
*/
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vReadAlwaysActivationDesactivation(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
unsigned short wSO_Number=0,wFatherSO_Number=0;
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
/*tdstEngineObject * p_stObj;*/
|
||
tdObjectType otObjectModelType;
|
||
MTH3D_tdstVector stTempVector;
|
||
POS_tdstCompletePosition p_stPosMatrix;
|
||
|
||
POS_fn_vSetIdentityMatrix(&p_stPosMatrix);
|
||
|
||
|
||
if(g_DEMO_KeybTest != DEMO_PLAY) return;
|
||
/* ********************** init values ***************************/
|
||
/* *********************** read in Memory *******************************/
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L;
|
||
M_DEMO_READ(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
|
||
M_DEMO_READ(&Demo_Flag,DEMO_FLAG_CAST);
|
||
M_DEMO_READ(&wSO_Number,unsigned short);
|
||
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_ACTIVATE))
|
||
{
|
||
M_DEMO_READ(&otObjectModelType,tdObjectType);
|
||
M_DEMO_READ(&stTempVector,MTH3D_tdstVector);
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode)
|
||
{ /* In reverse mode, desactivate always instead of activating it*/
|
||
fn_vKillEngineObjectOrAlwaysByPointer ((tdstEngineObject *) HIE_fn_hGetSuperObjectObject (hSO));
|
||
}
|
||
else
|
||
#endif
|
||
{
|
||
POS_fn_vSetTranslationVector (&p_stPosMatrix,&stTempVector);
|
||
|
||
/* The generator of all always is the main character*/
|
||
fn_p_stAllocateAlways(otObjectModelType, gp_stDynamicWorld, MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode()) , 0, &p_stPosMatrix);
|
||
fn_vStandardGameSetIsActivable(M_GetMSHandle(hSO,StandardGame),TRUE);
|
||
}
|
||
}
|
||
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_DESACTIVATE))
|
||
{
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode)
|
||
{
|
||
int i , iAlwaysNumber;
|
||
unsigned short wStateNumber , wFrameNumber;
|
||
MS_tdxHandleTo3dData h_Current3dData;
|
||
struct tdstState_ * p_stTmpState;
|
||
|
||
M_DEMO_READ_VCR (& otObjectModelType , tdObjectType);
|
||
M_DEMO_READ_VCR (& stTempVector , MTH3D_tdstVector);
|
||
M_DEMO_READ_VCR (& wStateNumber , unsigned short);
|
||
M_DEMO_READ_VCR (& wFrameNumber , unsigned short);
|
||
|
||
POS_fn_vSetTranslationVector (&p_stPosMatrix,&stTempVector);
|
||
|
||
/* A little trick : to be sure that the always will be allocated at the good place, we fill all the previous places*/
|
||
iAlwaysNumber = hSO - g_stAlways.d_stAlwaysSuperObject;
|
||
for (i = 0 ; i < iAlwaysNumber ; i ++)
|
||
if (g_stAlways.d_hAlwaysGenerator [i] == NULL) g_stAlways.d_hAlwaysGenerator [i] = (void *) 0xFFFFFFFF;
|
||
|
||
fn_p_stAllocateAlways(otObjectModelType, gp_stDynamicWorld, MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode()) , 0, &p_stPosMatrix);
|
||
|
||
for (i = 0 ; i < iAlwaysNumber ; i ++)
|
||
if (g_stAlways.d_hAlwaysGenerator [i] == (void *) 0xFFFFFFFF) g_stAlways.d_hAlwaysGenerator [i] = NULL;
|
||
|
||
fn_vStandardGameSetIsActivable(M_GetMSHandle(hSO,StandardGame),TRUE);
|
||
|
||
h_Current3dData = M_GetMSHandle (hSO , 3dData);
|
||
LST2_M_StaticGetElementNumber( & h_Current3dData -> h_Family -> hForStateArray , p_stTmpState , wStateNumber , i);
|
||
PLA_fn_bSetNewState (hSO , p_stTmpState , FALSE , FALSE);
|
||
PLA_fn_vSetCurrFrame (hSO , wFrameNumber);
|
||
}
|
||
else
|
||
#endif
|
||
/* ANNECY AV {*/
|
||
{
|
||
/* fn_vKillAlwaysByPersonalType(wSO_Number+C_AlwaysObjectType);*/
|
||
/* fn_vKillAlwaysByPersonalType (wSO_Number - g_iFirstAlwaysNumber + C_AlwaysObjectType);*/
|
||
fn_vKillEngineObjectOrAlwaysByPointer ((tdstEngineObject *) HIE_fn_hGetSuperObjectObject (hSO));
|
||
}
|
||
/* END ANNECY AV */
|
||
}
|
||
}
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vGetACompleteCharacterPosition(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
tdstDemoSOList *p_stListElement;
|
||
MS_tdxHandleTo3dData h_Current3dData = M_GetMSHandle(hSO,3dData);
|
||
struct tdstState_ *p_stTmpState;
|
||
GEO_tdxHandleToMatrix hSupObjMatrix;
|
||
/* MTH3D_tdstVector _stTrs;*/
|
||
/* ANNECY AV {*/
|
||
/* POS_tdstShortQuaternion _stQuaternion;*/
|
||
tdstDemoCompressedMatrix stCompressedMatrix;
|
||
tdstDemoUltraCompressedMatrix stUltraCompressedMatrix;
|
||
/* END ANNECY AV }*/
|
||
unsigned short wStateNumber=0, wSO_Number=0;
|
||
unsigned short uwForcedFrame;
|
||
long i;
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
/*MTH_tdxReal X, Y, Z;*/
|
||
|
||
/* We have to test g_iNbFramesToWaitBeforePlaying*/
|
||
if(g_DEMO_KeybTest != DEMO_PLAY || g_iNbFramesToWaitBeforePlaying != 0) return;
|
||
|
||
/* ********************** init values ***************************/
|
||
p_stListElement = DEMO_fn_p_stGetInfosPointerFromSO(hSO);
|
||
hSupObjMatrix = HIE_fn_hGetSuperObjectMatrix(hSO);
|
||
/* ANNECY AV {*/
|
||
/* POS_M_vSetType(hSupObjMatrix,0x01b0);*/
|
||
/* END ANNECY AV }*/
|
||
/* ************************************************************* */
|
||
|
||
/* *********************** read in Memory *******************************/
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L;
|
||
M_DEMO_READ(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
|
||
M_DEMO_READ(&Demo_Flag,DEMO_FLAG_CAST);
|
||
|
||
if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_COMPRESS_ACTOR_NUMBER))
|
||
{
|
||
unsigned char ucSO_Number;
|
||
M_DEMO_READ (& ucSO_Number , unsigned char);
|
||
wSO_Number= ucSO_Number;
|
||
}
|
||
else
|
||
{
|
||
M_DEMO_READ(&wSO_Number,short);
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_NEW_ENGINE_FRAME) )
|
||
{
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{/* debug*/
|
||
long L;
|
||
M_DEMO_READ(&L,long);
|
||
}/* debug*/
|
||
#endif
|
||
{
|
||
unsigned short ulDeltaTimerCount;
|
||
M_DEMO_READ(&ulDeltaTimerCount,unsigned short);
|
||
g_ulDEMO_CurrentTimerCount += ulDeltaTimerCount;
|
||
/* {
|
||
char s[200];
|
||
sprintf(s,"Demo : MEM read ulDeltaTimerCount %ld\n",ulDeltaTimerCount);
|
||
OutputDebugString(s);
|
||
}*/
|
||
}
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (! g_bVCR_ReverseMode)
|
||
#endif
|
||
gl_DEMO_CurrentFrame++;
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_TRANSLATION_COMPLETE) )
|
||
{
|
||
M_DEMO_READ(&p_stListElement->_stTrs,MTH3D_tdstVector);
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode)
|
||
{
|
||
M_DEMO_READ_VCR (& p_stListElement->_stTrs , MTH3D_tdstVector);
|
||
}
|
||
#endif
|
||
POS_fn_vSetTranslationVector(hSupObjMatrix , &p_stListElement->_stTrs );
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_TRANSLATION_DELTA) )
|
||
{
|
||
/* MTH3D_tdstVector _stDelta;*/
|
||
/* M_DEMO_READ(&_stDelta,MTH3D_tdstVector);*/
|
||
/* MTH3D_M_vAddVector ( &p_stListElement->_stTrs,&_stDelta, &p_stListElement->_stTrs );*/
|
||
char a3_cCoef [3];
|
||
M_DEMO_READ (a3_cCoef , a3_cCoef);
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode)
|
||
{
|
||
a3_cCoef [0] = (char) - a3_cCoef [0];
|
||
a3_cCoef [1] = (char) - a3_cCoef [1];
|
||
a3_cCoef [2] = (char) - a3_cCoef [2];
|
||
}
|
||
#endif
|
||
fn_vDecompressVector (& p_stListElement->_stTrs , a3_cCoef , & p_stListElement -> _stTrs);
|
||
|
||
POS_fn_vSetTranslationVector(hSupObjMatrix , &p_stListElement->_stTrs );
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_ROTATION_COMPLETE) )
|
||
{
|
||
/* M_DEMO_READ(&_stQuaternion,POS_tdstShortQuaternion);*/
|
||
/* POS_fn_vDecompressRotation(&hSupObjMatrix->stRotationMatrix,&_stQuaternion);*/
|
||
/* MTH3D_M_vCopyMatrix( &hSupObjMatrix->stTransformMatrix, &hSupObjMatrix->stRotationMatrix ); */
|
||
M_DEMO_READ (& stCompressedMatrix , tdstDemoCompressedMatrix);
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode)
|
||
{
|
||
M_DEMO_READ_VCR (& stCompressedMatrix , tdstDemoCompressedMatrix);
|
||
}
|
||
#endif
|
||
memcpy (& p_stListElement -> stCompressedMatrix , & stCompressedMatrix , sizeof (tdstDemoCompressedMatrix));
|
||
fn_vDecompressMatrix (& hSupObjMatrix -> stTransformMatrix , & stCompressedMatrix);
|
||
fn_vComputeRotationMatrixFromTransformMatrix (& hSupObjMatrix -> stRotationMatrix , & hSupObjMatrix -> stTransformMatrix);
|
||
hSupObjMatrix -> ulType = POS_C_ulCompleteMatrixFlag;
|
||
POS_fn_vUpdateMatrixType (hSupObjMatrix);
|
||
}
|
||
|
||
if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_ROTATION_DELTA))
|
||
{
|
||
M_DEMO_READ (& stUltraCompressedMatrix , tdstDemoUltraCompressedMatrix);
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode)
|
||
{
|
||
int i;
|
||
char * p = stUltraCompressedMatrix . a9_cCoef;
|
||
for (i = 0 ; i < 9 ; i ++ , p ++)
|
||
* p = (char) - * p;
|
||
}
|
||
#endif
|
||
fn_vUltraDecompressMatrix (& hSupObjMatrix -> stTransformMatrix , & stUltraCompressedMatrix , & p_stListElement -> stCompressedMatrix);
|
||
fn_vComputeRotationMatrixFromTransformMatrix (& hSupObjMatrix -> stRotationMatrix , & hSupObjMatrix -> stTransformMatrix);
|
||
hSupObjMatrix -> ulType = POS_C_ulCompleteMatrixFlag;
|
||
POS_fn_vUpdateMatrixType (hSupObjMatrix);
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_STATE_CHANGE) )
|
||
{
|
||
M_DEMO_READ(&wStateNumber,unsigned short);
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode) M_DEMO_READ_VCR (& wStateNumber , unsigned short); /* If reverse mode, we read the previous state number*/
|
||
#endif
|
||
p_stListElement->wStateNumber = wStateNumber;
|
||
}
|
||
else
|
||
{
|
||
wStateNumber = p_stListElement->wStateNumber;
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_FRAME_CHANGE) )
|
||
{
|
||
M_DEMO_READ(&uwForcedFrame,unsigned short);
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode) M_DEMO_READ_VCR (& uwForcedFrame , unsigned short); /* If reverse mode, we read the previous frame number*/
|
||
#endif
|
||
p_stListElement->uwCurrentFrame = uwForcedFrame;
|
||
}
|
||
else
|
||
{
|
||
uwForcedFrame = p_stListElement->uwCurrentFrame;
|
||
}
|
||
|
||
/* ANNECY AV {*/
|
||
/* POS_fn_vCopyCompressedMatrix(HIE_fn_hGetSuperObjectGlobalMatrix(hSO),HIE_fn_hGetSuperObjectMatrix(hSO));*/
|
||
POS_fn_vCopyMatrix (HIE_fn_hGetSuperObjectGlobalMatrix (hSO) , HIE_fn_hGetSuperObjectMatrix (hSO));
|
||
/* END ANNECY AV }*/
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (! g_bDontTreatCharacter)
|
||
#endif
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_FRAME_CHANGE)
|
||
|| DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_STATE_CHANGE) )
|
||
{
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode && wStateNumber >= LST2_M_StaticGetNumberOfElements (& h_Current3dData -> h_Family -> hForStateArray))
|
||
wStateNumber = (unsigned short) (LST2_M_StaticGetNumberOfElements (& h_Current3dData -> h_Family -> hForStateArray) - 1);
|
||
#endif
|
||
|
||
LST2_M_StaticGetElementNumber(&(h_Current3dData->h_Family->hForStateArray),p_stTmpState,wStateNumber,i);
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode)
|
||
{
|
||
struct tdstAnim3d_ * p_stAnim = fn_h3dDataGetCurrentState (h_Current3dData) -> p_stAnim;
|
||
|
||
/* ???*/
|
||
/* To be sure that the frame number is correct*/
|
||
if (p_stAnim && uwForcedFrame >= p_stAnim -> uwNumberOfFrames)
|
||
uwForcedFrame = (unsigned short) (p_stAnim -> uwNumberOfFrames - 1);
|
||
}
|
||
#endif
|
||
|
||
/* ANNECY AV {*/
|
||
/* PLA_fn_bSetForcedStateWithForcedFrame(hSO,p_stTmpState,uwForcedFrame);*/
|
||
if (p_stTmpState != fn_h3dDataGetCurrentState (h_Current3dData) || uwForcedFrame == 0)
|
||
{
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode == FALSE || p_stTmpState -> p_stAnim != NULL)
|
||
#endif
|
||
{
|
||
PLA_fn_bSetNewState (hSO , p_stTmpState , FALSE , FALSE );
|
||
PLA_fn_vSetCurrFrame (hSO , uwForcedFrame);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
BOOL bSavedValue = g_bAnimConstantSpeed;
|
||
fn_v3dDataSetCurrentFrame (h_Current3dData , (unsigned short) (uwForcedFrame - 1));
|
||
g_bAnimConstantSpeed = TRUE;
|
||
PLA_fn_bDoAnimPlayerForCharacter(hSO,FALSE,FALSE);
|
||
g_bAnimConstantSpeed = bSavedValue;
|
||
}
|
||
/* END ANNECY AV }*/
|
||
}
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_TRANSPARENCY_CHANGE) )
|
||
{
|
||
M_DEMO_READ(&p_stListElement->ucTransparence,unsigned char);
|
||
HIE_fn_vSetSuperObjectTransparenceLevel(hSO,(float)p_stListElement->ucTransparence);
|
||
/* ANNECY AV {*/
|
||
if (p_stListElement->ucTransparence == 255)
|
||
{ HIE_fn_vSetSuperObjectDrawMask (hSO , HIE_fn_lGetSuperObjectDrawMask (hSO) | GLI_C_lIsNotGrided); }
|
||
else
|
||
{ HIE_fn_vSetSuperObjectDrawMask (hSO , HIE_fn_lGetSuperObjectDrawMask (hSO) & ~ GLI_C_lIsNotGrided); }
|
||
/* END ANNECY AV }*/
|
||
}
|
||
|
||
|
||
/* {
|
||
char s[200];
|
||
sprintf(s,"Lecture : State n<>%d -- Frame n<>%d\n",wStateNumber,ucForcedFrame);
|
||
OutputDebugString(s);
|
||
}*/
|
||
|
||
|
||
|
||
/* DEMO_fn_vGoToTheNextInfoBlock();*/
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
g_bDontTreatCharacter = FALSE;
|
||
#endif
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vGoToTheNextInfoBlock(void)
|
||
{
|
||
/* !!! plus <20> jour !!!
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
unsigned short wSO_Number=0;
|
||
|
||
// *********************** read in Memory ******************************
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{// debug
|
||
M_DEMO_MOVE(long);
|
||
}// debug
|
||
#endif
|
||
|
||
M_DEMO_READ(&Demo_Flag,DEMO_FLAG_CAST);
|
||
M_DEMO_READ(&wSO_Number,unsigned short);
|
||
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_NEW_ENGINE_FRAME) )
|
||
{
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
{// debug
|
||
M_DEMO_MOVE(long);
|
||
}// debug
|
||
#endif
|
||
|
||
M_DEMO_MOVE(unsigned short);
|
||
}
|
||
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_TRANSLATION_COMPLETE) ) { M_DEMO_MOVE(MTH3D_tdstVector); }
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_ROTATION_COMPLETE) ) { M_DEMO_MOVE(POS_tdstShortQuaternion); }
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_STATE_CHANGE) ) { M_DEMO_MOVE(unsigned short); }
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_FRAME_CHANGE) ) { M_DEMO_MOVE(unsigned char); }
|
||
*/
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vInitSOList(void)
|
||
{
|
||
g_hDemoSOList=(DEMO_tdxHandleToDemoSOList)M_p_GameMallocInHLM(sizeof(LST2_M_StaticAnchorDeclaration(DEMO_tdxHandleToDemoSOElement)));
|
||
LST2_M_StaticInitAnchor(g_hDemoSOList);
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
tdstDemoSOList * DEMO_fn_p_stCreateSOListElement(void)
|
||
{
|
||
tdstDemoSOList* p_stDemoSOList;
|
||
|
||
unsigned char bIsInLevelMode = GAM_fn_bIsEngineInLevelMode ();
|
||
GAM_fn_vSetEngineInLevelMode ();
|
||
|
||
p_stDemoSOList=(tdstDemoSOList *)M_p_GameMallocInHLM(sizeof(tdstDemoSOList));
|
||
|
||
if (! bIsInLevelMode) GAM_fn_vSetEngineInFixMode ();
|
||
|
||
p_stDemoSOList->hCharacterSupObject = NULL;
|
||
p_stDemoSOList->ucActivate = FALSE;
|
||
p_stDemoSOList->ucReInit = TRUE;
|
||
LST2_M_StaticInitElement(p_stDemoSOList);
|
||
return p_stDemoSOList;
|
||
}
|
||
|
||
void DEMO_fn_vStartOfAlwaysCreation (void)
|
||
{
|
||
g_iFirstAlwaysNumber = LST2_M_StaticGetNumberOfElements (g_hDemoSOList);
|
||
}
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vPutCharacterInList(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
tdstDemoSOList *p_stListElement;
|
||
|
||
p_stListElement = DEMO_fn_p_stCreateSOListElement();
|
||
p_stListElement->hCharacterSupObject = hSO;
|
||
|
||
LST2_M_StaticAddTail(g_hDemoSOList,p_stListElement);
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
unsigned short DEMO_fn_wGetNumberFromSO(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
tdstDemoSOList *p_stListElement;
|
||
unsigned short uwIndex;
|
||
|
||
LST2_M_StaticForEachElementOf(g_hDemoSOList,p_stListElement,uwIndex)
|
||
{
|
||
if (p_stListElement->hCharacterSupObject==hSO) return(uwIndex);
|
||
}
|
||
return((unsigned short)0xffff);
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
tdstDemoSOList * DEMO_fn_p_stGetInfosPointerFromSO(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
tdstDemoSOList *p_stListElement;
|
||
unsigned short uwIndex;
|
||
|
||
LST2_M_StaticForEachElementOf(g_hDemoSOList,p_stListElement,uwIndex)
|
||
{
|
||
if (p_stListElement->hCharacterSupObject==hSO) return(p_stListElement);
|
||
}
|
||
return(NULL);
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vReInitSOList(void)
|
||
{
|
||
tdstDemoSOList *p_stListElement;
|
||
unsigned short uwIndex;
|
||
|
||
LST2_M_StaticForEachElementOf(g_hDemoSOList,p_stListElement,uwIndex)
|
||
{
|
||
p_stListElement->ucActivate = FALSE;
|
||
p_stListElement->ucReInit = TRUE;
|
||
p_stListElement->ucDeltaCounter = 0;
|
||
}
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
unsigned short DEMO_fn_vFindMainCharacterNumber(void)
|
||
{
|
||
return (DEMO_fn_wGetNumberFromSO(MC_fn_hGetCharacterInMainCharacterNode(MC_fn_hGetFirstMainCharNode())));
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
unsigned short DEMO_fn_vFindMainCameraNumber(void)
|
||
{
|
||
return (DEMO_fn_wGetNumberFromSO(CAM_fn_hGetActiveCamera(CAM_e_MainViewport)));
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
int DEMO_fn_vTestIfThisIsAGraphicCharacter(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
MS_tdxHandleTo3dData h_Current3dData = M_GetMSHandle(hSO,3dData);
|
||
|
||
if (h_Current3dData->h_CurrentState==NULL) return FALSE;
|
||
if (h_Current3dData->h_CurrentState->p_stAnim==NULL) return FALSE;
|
||
|
||
return TRUE;
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
#ifndef RETAIL
|
||
void DEMO_SaveInfo(HIE_tdxHandleToSuperObject hSO)
|
||
{
|
||
unsigned short wCurrentSO_Number;
|
||
if(g_DEMO_KeybTest != DEMO_RECORD) return;
|
||
|
||
wCurrentSO_Number = DEMO_fn_wGetNumberFromSO(hSO);
|
||
|
||
if( DEMO_fn_vTestIfThisIsAGraphicCharacter(hSO) )
|
||
{
|
||
/* {
|
||
char s[200];
|
||
sprintf(s,"%ld S: %d\n",g_stEngineStructure.stEngineTimer.ulTrameNumber,wCurrentSO_Number);
|
||
OutputDebugString(s);
|
||
}
|
||
*/
|
||
DEMO_fn_vSaveACompleteCharacterPosition(hSO); return;
|
||
}
|
||
/*
|
||
if( DEMO_fn_wGetNumberFromSO(hSO) == DEMO_fn_vFindMainCharacterNumber() )
|
||
{
|
||
DEMO_fn_vSaveACompleteCharacterPosition(hSO); return;
|
||
}*/
|
||
if( DEMO_fn_wGetNumberFromSO(hSO) == DEMO_fn_vFindMainCameraNumber() )
|
||
{
|
||
/* {
|
||
char s[200];
|
||
sprintf(s,"%ld S: %d\n",g_stEngineStructure.stEngineTimer.ulTrameNumber,wCurrentSO_Number);
|
||
OutputDebugString(s);
|
||
}*/
|
||
DEMO_fn_vSaveACompleteCharacterPosition(hSO); return;
|
||
}
|
||
|
||
}
|
||
#endif /* RETAIL */
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
|
||
#if !defined(PRESS_DEMO)
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
|
||
void DEMO_fn_vTestActionForVCR (void)
|
||
{
|
||
static int bSpaceKeyWasPressed = FALSE;
|
||
static int bRightKeyWasPressed = FALSE;
|
||
static int bLeftKeyWasPressed = FALSE;
|
||
static int bPauseDemoNextFrame = FALSE;
|
||
static int bPauseDemoWhenKeyReleased = FALSE;
|
||
|
||
/* ***** No VCR or end of VCR mode ******/
|
||
if (g_bVCRMode == FALSE || g_b_DEMO_VCRIsUsable == FALSE)
|
||
{
|
||
bSpaceKeyWasPressed = FALSE;
|
||
bLeftKeyWasPressed = FALSE;
|
||
bRightKeyWasPressed = FALSE;
|
||
bPauseDemoNextFrame = FALSE;
|
||
bPauseDemoWhenKeyReleased = FALSE;
|
||
return;
|
||
}
|
||
|
||
/* ***** Does the demo have to return to pause mode ? ******/
|
||
if (bPauseDemoNextFrame)
|
||
{
|
||
g_bVCR_DemoIsPaused = TRUE;
|
||
bPauseDemoNextFrame = FALSE;
|
||
}
|
||
|
||
/* ***** 'SPACE' key : pause or move one frame forward ******/
|
||
if (GetAsyncKeyState (VK_SPACE) & 0x8000)
|
||
{
|
||
if (! bSpaceKeyWasPressed)
|
||
{
|
||
bSpaceKeyWasPressed = TRUE;
|
||
|
||
if (g_bVCR_DemoIsPaused)
|
||
{
|
||
g_bVCR_DemoIsPaused = FALSE; /* Press 'SPACE' when demo is in paused to move forward one frame*/
|
||
bPauseDemoNextFrame = TRUE;
|
||
}
|
||
else g_bVCR_DemoIsPaused = TRUE; /* Press 'SPACE' when demo is playing to pause the demo*/
|
||
}
|
||
}
|
||
else bSpaceKeyWasPressed = FALSE;
|
||
|
||
/* ***** 'RETURN' key : exit demo pause mode ******/
|
||
if (GetAsyncKeyState (VK_RETURN) & 0x8000) g_bVCR_DemoIsPaused = FALSE;
|
||
|
||
/* ***** ''RIGHT' key : move forward faster ******/
|
||
if (GetAsyncKeyState (VK_RIGHT) & 0x8000)
|
||
{
|
||
bRightKeyWasPressed = TRUE;
|
||
|
||
if (g_bVCR_DemoIsPaused || bPauseDemoWhenKeyReleased)
|
||
{ /* Press 'RIGHT' when demo is paused to move forward*/
|
||
int ShiftKeyPressed = GetAsyncKeyState (VK_SHIFT) & 0x8000;
|
||
int ControlKeyPressed = GetAsyncKeyState (VK_CONTROL) & 0x8000;
|
||
|
||
g_bVCR_DemoIsPaused = FALSE;
|
||
bPauseDemoWhenKeyReleased = TRUE;
|
||
|
||
if (ShiftKeyPressed || ControlKeyPressed) /* Press 'Shift+RIGHT' when demo is paused to move forward 3 times faster*/
|
||
{ /* Press 'Ctrl+RIGHT' when demo is paused to move forward 10 times faster*/
|
||
g_ulDEMO_StartDEMO_EngineTimerCount -= g_stEngineStructure.stEngineTimer.ulUsefulDeltaTime *
|
||
(ControlKeyPressed ? 9 : 2);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
int iSpeed = 1; /* Press 'RIGHT' when demo is playing to move forward twice faster*/
|
||
if (GetAsyncKeyState (VK_CONTROL) & 0x8000) iSpeed = 9; /* Press 'Ctrl+RIGHT' to move forward 10 times faster*/
|
||
else
|
||
if (GetAsyncKeyState (VK_SHIFT) & 0x8000) iSpeed = 2; /* Press 'Shift+RIGHT' to move forward 3 times faster*/
|
||
|
||
g_ulDEMO_StartDEMO_EngineTimerCount -= g_stEngineStructure.stEngineTimer.ulUsefulDeltaTime * iSpeed;
|
||
}
|
||
}
|
||
else
|
||
if (bRightKeyWasPressed)
|
||
{
|
||
bRightKeyWasPressed = FALSE;
|
||
|
||
if (bPauseDemoWhenKeyReleased)
|
||
{
|
||
g_bVCR_DemoIsPaused = TRUE;
|
||
bPauseDemoWhenKeyReleased = FALSE;
|
||
}
|
||
}
|
||
|
||
/* ***** 'LEFT' key : move backward ******/
|
||
if ((GetAsyncKeyState (VK_LEFT) & 0x8000) && gl_DEMO_CurrentFrame >= 3)
|
||
{
|
||
bLeftKeyWasPressed = TRUE;
|
||
|
||
if (g_bVCR_DemoIsPaused || bPauseDemoWhenKeyReleased)
|
||
{
|
||
int ShiftKeyPressed = GetAsyncKeyState (VK_SHIFT) & 0x8000;
|
||
int ControlKeyPressed = GetAsyncKeyState (VK_CONTROL) & 0x8000;
|
||
|
||
g_bVCR_DemoIsPaused = FALSE;
|
||
bPauseDemoWhenKeyReleased = TRUE;
|
||
|
||
if (ShiftKeyPressed || ControlKeyPressed) /* Press 'Shift+LEFT' when demo is paused to move backward 3 times faster*/
|
||
{ /* Press 'Ctrl+LEFT' when demo is paused to move backward 10 times faster*/
|
||
g_ulDEMO_StartDEMO_EngineTimerCount -= g_stEngineStructure.stEngineTimer.ulUsefulDeltaTime *
|
||
(ControlKeyPressed ? 9 : 2);
|
||
}
|
||
|
||
gl_DEMO_CurrentFrame --;
|
||
g_bVCR_ReverseMode = TRUE;
|
||
}
|
||
else
|
||
{
|
||
/*???*/
|
||
}
|
||
}
|
||
else
|
||
if (bLeftKeyWasPressed)
|
||
{
|
||
bLeftKeyWasPressed = FALSE;
|
||
|
||
if (bPauseDemoWhenKeyReleased)
|
||
{
|
||
g_bVCR_DemoIsPaused = TRUE;
|
||
bPauseDemoWhenKeyReleased = FALSE;
|
||
}
|
||
}
|
||
}
|
||
#endif /* D_DEMO_USE_VCR */
|
||
|
||
#endif /* PRESS_DEMO */
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
ACP_tdxBool DEMO_fn_bUpdateDynamicHierarchy(void)
|
||
{
|
||
long i;
|
||
unsigned short wCurrentSO_Number;
|
||
tdstDemoSOList *p_stListElement;
|
||
DEMO_FLAG_CAST Demo_Flag=0;
|
||
unsigned long ulDEMO_DeltaEngineTimerCount;
|
||
int bSuperimposedSO;
|
||
|
||
#if !defined(PRESS_DEMO)
|
||
#ifdef D_DEMO_USE_VCR
|
||
int bDontLookAtNewEngineFrame;
|
||
#endif
|
||
#endif /* PRESS_DEMO */
|
||
|
||
/* Do we have to wait before playing the demo ?*/
|
||
if (g_iNbFramesToWaitBeforePlaying)
|
||
{
|
||
if (-- g_iNbFramesToWaitBeforePlaying == 0) DEMO_fn_vPrepareForReadNow ();
|
||
return TRUE;
|
||
}
|
||
|
||
#if !defined(PRESS_DEMO)
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
DEMO_fn_vTestActionForVCR ();
|
||
if (g_bVCR_DemoIsPaused)
|
||
{
|
||
/* Increaze the 'start engine timer count' to be ok when the demo will continue*/
|
||
/* ( + 10 to be sure to do only one frame when the demo will continue)*/
|
||
g_ulDEMO_StartDEMO_EngineTimerCount = g_stEngineStructure.stEngineTimer.ulCurrentTimerCount - g_ulDEMO_CurrentTimerCount + 10;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
bDontLookAtNewEngineFrame = g_bVCR_ReverseMode; /* In reverse mode, we dont look at the NEW ENGINE FRAME flag for the first frame*/
|
||
#endif
|
||
|
||
#endif /* PRESS_DEMO */
|
||
|
||
/* Stop the demo if we have reach the end or*/
|
||
/* if a key or a button is pressed (only if we have been asked to test the input and after 60 frames (to let the user release the key to start the demo))*/
|
||
if( gl_DEMO_CurrentFrame >= gl_DEMO_NumberOfFrames ||
|
||
(g_bTestInputDuringDemo && gl_DEMO_CurrentFrame > 60 && IPT_g_bAtLeastOneActionIsValidated
|
||
#ifdef D_DEMO_USE_VCR
|
||
&& g_bVCRMode == FALSE /* Don't test the input in VCR mode*/
|
||
#endif
|
||
))
|
||
{
|
||
DEMO_fn_vStopWhenPlaying ();
|
||
|
||
/* Reinit the map even if another map will be loaded, because one more frame will be computed before the load*/
|
||
fn_vReinitTheMap ();
|
||
|
||
if (* g_szMapNameToLoadWhenDemoFinished != 0)
|
||
{
|
||
GAM_fn_vAskToChangeLevel (g_szMapNameToLoadWhenDemoFinished , FALSE);
|
||
* g_szMapNameToLoadWhenDemoFinished = 0;
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
ulDEMO_DeltaEngineTimerCount = g_stEngineStructure.stEngineTimer.ulCurrentTimerCount
|
||
- g_ulDEMO_StartDEMO_EngineTimerCount;
|
||
|
||
if(!gl_DEMO_ConstantSpeed)
|
||
{
|
||
if(g_ulDEMO_CurrentTimerCount > ulDEMO_DeltaEngineTimerCount) TMR_fn_wWait(g_ulDEMO_CurrentTimerCount-ulDEMO_DeltaEngineTimerCount);
|
||
}
|
||
|
||
do
|
||
{
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode)
|
||
{
|
||
g_lNumberOfCharacterFrame --;
|
||
gp_DEMO_CurrentPosInMemory = gp_DEMO_AllocatedMemory + gp_DEMO_BeginningOfCharacterFrame [g_lNumberOfCharacterFrame] . lCurrentIndex;
|
||
gp_DEMO_CurrentPosInMemoryForVCR = gp_DEMO_AllocatedMemoryForVCR + gp_DEMO_BeginningOfCharacterFrame [g_lNumberOfCharacterFrame] . lCurrentIndexForVCR;
|
||
}
|
||
else
|
||
{
|
||
assert (gp_DEMO_CurrentPosInMemory - gp_DEMO_AllocatedMemory == gp_DEMO_BeginningOfCharacterFrame [g_lNumberOfCharacterFrame] . lCurrentIndex);
|
||
}
|
||
#endif
|
||
|
||
/* ???
|
||
{
|
||
char szText [128];
|
||
sprintf (szText , "CurrentFrame = %4i CharacterFrame = %4i\n" , gl_DEMO_CurrentFrame , g_lNumberOfCharacterFrame);
|
||
OutputDebugString (szText);
|
||
}
|
||
*/
|
||
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
M_DEMO_LOOK(&Demo_Flag,4,DEMO_FLAG_CAST);
|
||
#else
|
||
M_DEMO_LOOK(&Demo_Flag,0,DEMO_FLAG_CAST);
|
||
#endif
|
||
|
||
#if !defined(PRESS_DEMO)
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
if (g_bVCR_ReverseMode && bDontLookAtNewEngineFrame == FALSE && DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_NEW_ENGINE_FRAME))
|
||
{
|
||
unsigned short usDeltaTimerCount;
|
||
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
M_DEMO_LOOK (& usDeltaTimerCount , DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_COMPRESS_ACTOR_NUMBER) ? 11 : 12 , unsigned short);
|
||
#else
|
||
M_DEMO_LOOK (& usDeltaTimerCount , DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_COMPRESS_ACTOR_NUMBER) ? 3 : 4 , unsigned short);
|
||
#endif
|
||
|
||
/* A new frame begins : do we continue or not ?*/
|
||
if (gl_DEMO_ConstantSpeed == FALSE && g_ulDEMO_CurrentTimerCount + usDeltaTimerCount < ulDEMO_DeltaEngineTimerCount && gl_DEMO_CurrentFrame > 2)
|
||
{ /* We continue, so we decreaze the frame number*/
|
||
gl_DEMO_CurrentFrame --;
|
||
}
|
||
else
|
||
{ /* We don't continue : we advance to the beginning of the frame*/
|
||
g_lNumberOfCharacterFrame ++;
|
||
gp_DEMO_CurrentPosInMemory = gp_DEMO_AllocatedMemory + gp_DEMO_BeginningOfCharacterFrame [g_lNumberOfCharacterFrame] . lCurrentIndex;
|
||
gp_DEMO_CurrentPosInMemoryForVCR = gp_DEMO_AllocatedMemoryForVCR + gp_DEMO_BeginningOfCharacterFrame [g_lNumberOfCharacterFrame] . lCurrentIndexForVCR;
|
||
break;
|
||
}
|
||
}
|
||
#endif
|
||
|
||
#endif /* PRESS_DEMO */
|
||
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_EXTENDED))
|
||
{
|
||
DEMO_fn_vReadAndTreatAllExtendedFlag(Demo_Flag);
|
||
}
|
||
else
|
||
{
|
||
if (DEMO_TEST_FLAG (Demo_Flag , DEMO_FLAG_COMPRESS_ACTOR_NUMBER))
|
||
{
|
||
unsigned char ucCurrentSO_Number;
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
M_DEMO_LOOK (& ucCurrentSO_Number , 4 + sizeof (DEMO_FLAG_CAST) , unsigned char);
|
||
#else
|
||
M_DEMO_LOOK (& ucCurrentSO_Number , sizeof (DEMO_FLAG_CAST) , unsigned char);
|
||
#endif
|
||
wCurrentSO_Number = ucCurrentSO_Number;
|
||
}
|
||
else
|
||
{
|
||
#ifdef GIZ_DEBUG_DEMO_MEMORY
|
||
M_DEMO_LOOK(&wCurrentSO_Number , 4 + sizeof(DEMO_FLAG_CAST),unsigned short);
|
||
#else
|
||
M_DEMO_LOOK(&wCurrentSO_Number , sizeof(DEMO_FLAG_CAST),unsigned short);
|
||
#endif
|
||
}
|
||
|
||
/* Check if this is a superimposed super object*/
|
||
if (wCurrentSO_Number < 16384)
|
||
{
|
||
bSuperimposedSO = FALSE;
|
||
}
|
||
else
|
||
{
|
||
bSuperimposedSO = TRUE;
|
||
wCurrentSO_Number -= 16384;
|
||
}
|
||
|
||
LST2_M_StaticGetElementNumber(g_hDemoSOList,p_stListElement,wCurrentSO_Number,i);
|
||
|
||
if (bSuperimposedSO) HIE_fn_SO_vSetSuperimposedFlag (p_stListElement->hCharacterSupObject);
|
||
|
||
if( DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_ACTIVATE)
|
||
|| DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_DESACTIVATE)
|
||
|| DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_ACTIVATE_CANAL)
|
||
|| DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_DESACTIVATE_CANAL)
|
||
/* || DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_SECTOR_CHANGE) */
|
||
)
|
||
{
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_IS_AN_ALWAYS))
|
||
{
|
||
DEMO_fn_vReadAlwaysActivationDesactivation(p_stListElement->hCharacterSupObject);
|
||
}
|
||
else
|
||
{
|
||
/*
|
||
if(DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_SECTOR_CHANGE))
|
||
{
|
||
DEMO_fn_vReadAndDoSectorChange(p_stListElement->hCharacterSupObject);
|
||
}
|
||
else
|
||
*/
|
||
{
|
||
DEMO_fn_vReadAndChangeActivationDesactivation(p_stListElement->hCharacterSupObject);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
tdstEngineObject * p_stObject = (tdstEngineObject*)HIE_fn_hGetSuperObjectObject(p_stListElement->hCharacterSupObject);
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
/* ???
|
||
if (g_bVCR_ReverseMode)
|
||
{
|
||
int iAlwaysNumber = p_stListElement -> hCharacterSupObject - g_stAlways . d_stAlwaysSuperObject;
|
||
if (iAlwaysNumber >= 0 && iAlwaysNumber < (int) g_stAlways . ulMaxNumberOfAlways)
|
||
{
|
||
// This is an always : let's see if it is created or not
|
||
// (because in reverse mode, it can be created later in this frame)
|
||
if (g_stAlways . d_hAlwaysGenerator [iAlwaysNumber] == NULL) g_bDontTreatCharacter = TRUE;
|
||
}
|
||
}
|
||
|
||
if (g_bDontTreatCharacter)
|
||
{
|
||
DEMO_fn_vGetACompleteCharacterPosition (p_stListElement -> hCharacterSupObject);
|
||
}
|
||
else
|
||
*/
|
||
#endif
|
||
{
|
||
M_ActivateObject(p_stObject);
|
||
fn_vStandardGameSetLastTrame(p_stObject->h_StandardGame,g_stEngineStructure.stEngineTimer.ulTrameNumber-1);
|
||
fn_vTreatCharactersInSector(p_stListElement->hCharacterSupObject,FALSE);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* ???
|
||
{
|
||
char s[200];
|
||
sprintf(s,"Demo : CurrentFrame %ld \t\tNumberOfFrames %ld \t\tCurrentTimerCount %ld \t\tDeltaEngineTimerCount %ld\n",gl_DEMO_CurrentFrame,gl_DEMO_NumberOfFrames,g_ulDEMO_CurrentTimerCount,ulDEMO_DeltaEngineTimerCount);
|
||
OutputDebugString(s);
|
||
}
|
||
*/
|
||
|
||
#if !defined(PRESS_DEMO)
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
|
||
if (bDontLookAtNewEngineFrame) Demo_Flag &= ~ DEMO_FLAG_NEW_ENGINE_FRAME;
|
||
bDontLookAtNewEngineFrame = FALSE; /* Only for one frame*/
|
||
|
||
if (! g_bVCR_ReverseMode)
|
||
{
|
||
g_lNumberOfCharacterFrame ++;
|
||
}
|
||
else
|
||
{
|
||
/* Set the pointer to the correct values*/
|
||
gp_DEMO_CurrentPosInMemory = gp_DEMO_AllocatedMemory + gp_DEMO_BeginningOfCharacterFrame [g_lNumberOfCharacterFrame] . lCurrentIndex;
|
||
gp_DEMO_CurrentPosInMemoryForVCR = gp_DEMO_AllocatedMemoryForVCR + gp_DEMO_BeginningOfCharacterFrame [g_lNumberOfCharacterFrame] . lCurrentIndexForVCR;
|
||
}
|
||
#endif
|
||
|
||
#endif /* PRESS_DEMO */
|
||
|
||
if(gl_DEMO_CurrentFrame >= gl_DEMO_NumberOfFrames) break;
|
||
|
||
} while( !DEMO_TEST_FLAG(Demo_Flag,DEMO_FLAG_NEW_ENGINE_FRAME)
|
||
|| (!gl_DEMO_ConstantSpeed && g_ulDEMO_CurrentTimerCount < ulDEMO_DeltaEngineTimerCount) );
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
g_bVCR_ReverseMode = FALSE; /* This flag is only valid for one frame*/
|
||
|
||
if (g_bVCRMode)
|
||
{
|
||
strcpy (g_szVCRMode , g_b_DEMO_VCRIsUsable ? "VCR" : "VCR not available");
|
||
itoa (gl_DEMO_CurrentFrame , g_szFrameNumber , 10); /* To display the frame number on the screen*/
|
||
}
|
||
else
|
||
{
|
||
strcpy (g_szVCRMode , "");
|
||
* g_szFrameNumber = 0;
|
||
}
|
||
#endif
|
||
|
||
/*OutputDebugString("------------\n");*/
|
||
return TRUE;
|
||
}
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
|
||
/* ANNECY MT - 04/12/98 {*/
|
||
void DEMO_fn_vStopWhenPlaying()
|
||
{
|
||
g_DEMO_KeybTest = DEMO_NOTHING;
|
||
/* fn_vAddCommandLineAnswerWithScroll("DEMO STOP NORMAL PLAY");*/
|
||
/* OutputDebugString("DEMO STOP NORMAL PLAY\n");*/
|
||
#ifndef RETAIL
|
||
strcpy (g_szDemoMode , "");
|
||
#endif
|
||
|
||
#ifdef D_DEMO_USE_VCR
|
||
g_bVCRMode = FALSE;
|
||
* g_szVCRMode = 0;
|
||
* g_szFrameNumber = 0;
|
||
#endif
|
||
|
||
if(g_DEMO_AutoPlay==TRUE) DEMO_fn_vStopAutoPlay();
|
||
}
|
||
/* END ANNECY MT }*/
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vInitGMTFixList(void)
|
||
{
|
||
g_hDemoGMTFixList=(DEMO_tdxHandleToDemoGMTList)M_p_GameMallocInHLM(sizeof(LST2_M_StaticAnchorDeclaration(DEMO_tdxHandleToDemoGMTElement)));
|
||
LST2_M_StaticInitAnchor(g_hDemoGMTFixList);
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vInitGMTLevelList(void)
|
||
{
|
||
g_hDemoGMTLevelList=(DEMO_tdxHandleToDemoGMTList)M_p_GameMallocInHLM(sizeof(LST2_M_StaticAnchorDeclaration(DEMO_tdxHandleToDemoGMTElement)));
|
||
LST2_M_StaticInitAnchor(g_hDemoGMTLevelList);
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
tdstDemoGMTList * DEMO_fn_p_stCreateGMTListElement(void)
|
||
{
|
||
tdstDemoGMTList* p_stDemoGMTList;
|
||
|
||
p_stDemoGMTList=(tdstDemoGMTList *)M_p_GameMallocInHLM(sizeof(tdstDemoGMTList));
|
||
|
||
p_stDemoGMTList->hGameMaterial = NULL;
|
||
LST2_M_StaticInitElement(p_stDemoGMTList);
|
||
return p_stDemoGMTList;
|
||
}
|
||
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vPutGMTInList(GMT_tdxHandleToGameMaterial _hGameMaterial)
|
||
{
|
||
if (DEMO_fn_wGetNumberFromGMT (_hGameMaterial) == 0xffff)
|
||
{
|
||
tdstDemoGMTList *p_stListElement;
|
||
|
||
p_stListElement = DEMO_fn_p_stCreateGMTListElement();
|
||
p_stListElement->hGameMaterial = _hGameMaterial;
|
||
|
||
if (GAM_fn_bIsEngineInFixMode ())
|
||
{
|
||
LST2_M_StaticAddTail(g_hDemoGMTFixList,p_stListElement);
|
||
}
|
||
else
|
||
{
|
||
LST2_M_StaticAddTail(g_hDemoGMTLevelList,p_stListElement);
|
||
}
|
||
}
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
unsigned short DEMO_fn_wGetNumberFromGMT(GMT_tdxHandleToGameMaterial _hGameMaterial)
|
||
{
|
||
tdstDemoGMTList *p_stListElement;
|
||
unsigned short uwIndex;
|
||
|
||
/* search in Fix List */
|
||
LST2_M_StaticForEachElementOf(g_hDemoGMTFixList,p_stListElement,uwIndex)
|
||
{
|
||
if (p_stListElement->hGameMaterial == _hGameMaterial) return(uwIndex);
|
||
}
|
||
if (g_hDemoGMTLevelList)
|
||
{
|
||
/* search in level list */
|
||
LST2_M_StaticForEachElementOf(g_hDemoGMTLevelList,p_stListElement,uwIndex)
|
||
{
|
||
if (p_stListElement->hGameMaterial == _hGameMaterial)
|
||
return ( unsigned short ) ( uwIndex + (unsigned short) LST2_M_StaticGetNumberOfElements ( g_hDemoGMTFixList ) );
|
||
}
|
||
}
|
||
return((unsigned short)0xffff);
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
GMT_tdxHandleToGameMaterial DEMO_fn_hGetGMTFromList(unsigned short _uwIndex)
|
||
{
|
||
unsigned short i;
|
||
tdstDemoGMTList *p_stListElement = NULL;
|
||
|
||
if (_uwIndex < LST2_M_StaticGetNumberOfElements(g_hDemoGMTFixList))
|
||
{
|
||
LST2_M_StaticGetElementNumber(g_hDemoGMTFixList,p_stListElement,_uwIndex,i);
|
||
}
|
||
else
|
||
{
|
||
_uwIndex -= (unsigned short) LST2_M_StaticGetNumberOfElements ( g_hDemoGMTFixList ) ;
|
||
LST2_M_StaticGetElementNumber(g_hDemoGMTLevelList,p_stListElement,_uwIndex,i);
|
||
}
|
||
return p_stListElement ? p_stListElement -> hGameMaterial : NULL;
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vDesInitLevel()
|
||
{
|
||
g_hDemoSOList = NULL;
|
||
g_hDemoGMTLevelList = NULL;
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|
||
|
||
/*.............############################################################.............*/
|
||
/*.....############################################################################.....*/
|
||
/*.####################################################################################.*/
|
||
void DEMO_fn_vDesInitGame()
|
||
{
|
||
g_hDemoGMTFixList = NULL;
|
||
DEMO_fn_vDesInitLevel ();
|
||
}
|
||
/*.####################################################################################.*/
|
||
/*.....############################################################################.....*/
|
||
/*.............############################################################.............*/
|