/*##########################################################################################*/ /*## 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 #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ûûû..ûûû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 à 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 (); } /*.####################################################################################.*/ /*.....############################################################################.....*/ /*.............############################################################.............*/