814 lines
32 KiB
C
814 lines
32 KiB
C
/* ***********************************************************************************/
|
|
/* * "a3x_load.c" **/
|
|
/* * Written by : Sébastien Rubens **/
|
|
/* * Tabulations : 4 char **/
|
|
/* ***********************************************************************************/
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
#define A3X_LOAD_C
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
/* Included files*/
|
|
|
|
#include <math.h>
|
|
#include <stdio.h>
|
|
|
|
#include "PlayAnim/Interpol/specif/a3x_pref.h"
|
|
|
|
/*#define LST2_StaticIsOptimised*/
|
|
#include "TOOLSCPA.h"
|
|
#include "cpa_std.h"
|
|
#include "STRUCTUR/Anim_s.h"
|
|
|
|
#include "PlayAnim/Interpol/a3x_glob.h"
|
|
#include "PlayAnim/Interpol/a3x_int.h"
|
|
#include "PlayAnim/Interpol/a3x_mem.h"
|
|
#include "PlayAnim/Interpol/a3x_load.h"
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
/* Globals datas*/
|
|
|
|
static void *p_vCurrentFile;
|
|
|
|
static tdstFileA3dAnimationGENERAL *p_stFileA3dGENERAL;
|
|
static tdxULongVector3 *p_stFileVector3;
|
|
static tdxSShortQuater4 *p_stFileQuater4;
|
|
static tdstFileHierarchy *p_stFileHierarchy;
|
|
static tdstFileNTTO *p_stFileNTTO;
|
|
static tdstFileOnlyFrame *p_stFileOnlyFrame;
|
|
static tdstFileChannel *p_stFileChannel;
|
|
static tdstFileFrame *p_stFileFrame;
|
|
static tdstFileKeyFrame *p_stFileKeyFrame;
|
|
static tdstFileEvent *p_stFileEvent;
|
|
static tdstFileMorphData *p_stFileMorphData;
|
|
|
|
static tdstA3dGENERAL *p_stCurrentA3dGENERAL;
|
|
static tdxULongVector3 *p_stCurrentVector3;
|
|
static tdxSShortQuater4 *p_stCurrentQuater4;
|
|
static tdstHierarchy *p_stCurrentHierarchy;
|
|
static tdstNTTO *p_stCurrentNTTO;
|
|
static tdstOnlyFrame *p_stCurrentOnlyFrame;
|
|
static tdstChannel *p_stCurrentChannel, *p_stFirstChannel;
|
|
static tdstFrame *p_stCurrentFrame;
|
|
static tdstKeyFrame *p_stCurrentKeyFrame, *p_stOldKeyFrame;
|
|
static tdstEvent *p_stCurrentEvent;
|
|
static tdstMorphData *p_stCurrentMorphData;
|
|
|
|
static tdxMatrix33 a3a3_xMtxOri, a3a3_xMtxSca, a3a3_xScaleMatrix;
|
|
static tdxQuater4 a4_xOldQuatOri, a4_xOldQuatSca;
|
|
static tdxQuater4 a4_xQuatOri, a4_xQuatSca;
|
|
static tdxVector3 a3_xTmpVec;
|
|
|
|
static unsigned short uwNumOfFirstVector, uwNumOfFirstQuaternion, uwNumOfFirstHierarchy;
|
|
|
|
#ifdef ANIM_DEBUG
|
|
extern char* g_p_cSecurityMalloc; /* for debug -> to be removed !!!*/
|
|
#endif /*ANIM_DEBUG*/
|
|
|
|
/* ***********************************************************************************/
|
|
#ifdef A3xDebug
|
|
void fn_v_A3dVerify( char *a4_cNeededString,
|
|
char *p_cString )
|
|
{
|
|
if ( (a4_cNeededString[0] != p_cString[0]) ||
|
|
(a4_cNeededString[1] != p_cString[1]) ||
|
|
(a4_cNeededString[2] != p_cString[2]) ||
|
|
(a4_cNeededString[3] != p_cString[3]) )
|
|
{ printf("Error in %s hunk\n", a4_cNeededString );
|
|
}
|
|
}
|
|
|
|
#define M_A3xDebug( String, Type, p_xFile ) \
|
|
{ fn_v_A3dVerify( String, (char *) (p_xFile) ); \
|
|
p_xFile= (Type *) ( ((char *) (p_xFile)) + 8 ); \
|
|
}
|
|
#else
|
|
#define M_A3xDebug( String, Type, p_xFile )
|
|
#endif
|
|
|
|
#ifdef U64
|
|
/* XB 05/05/99 */
|
|
extern void *fast_memcpy( register void *dest, register void *src, register size_t n);
|
|
/* End XB 05/05/99 */
|
|
#define memcpy(a,b,c) fast_memcpy(a,b,c)
|
|
#endif /*U64*/
|
|
|
|
/* ***********************************************************************************/
|
|
void fn_v_LoadA3dGENERAL( void )
|
|
{
|
|
p_stCurrentA3dGENERAL= &p_stA3dGENERAL[ fn_ul_AllocateOnStack( eStackA3dGENERAL, 1 ) ];
|
|
|
|
p_stFileA3dGENERAL= (tdstFileA3dAnimationGENERAL *) p_vCurrentFile;
|
|
M_A3xDebug( "GENE", tdstFileA3dAnimationGENERAL, p_stFileA3dGENERAL );
|
|
|
|
/* p_stCurrentA3dGENERAL->uwAnimationSpeed= p_stFileA3dGENERAL->uwAnimationSpeed;
|
|
|
|
p_stCurrentA3dGENERAL->uwNumberOfVectors= p_stFileA3dGENERAL->uwNumberOfVectors;
|
|
p_stCurrentA3dGENERAL->uwNumberOfQuaternions= p_stFileA3dGENERAL->uwNumberOfQuaternions;
|
|
p_stCurrentA3dGENERAL->uwNumberOfHierarchies= p_stFileA3dGENERAL->uwNumberOfHierarchies;
|
|
p_stCurrentA3dGENERAL->uwNumberOfNTTO= p_stFileA3dGENERAL->uwNumberOfSavedNTTO;
|
|
p_stCurrentA3dGENERAL->uwNumberOfSavedFrames= p_stFileA3dGENERAL->uwNumberOfSavedFrames;
|
|
|
|
p_stCurrentA3dGENERAL->uwNumberOfChannels= p_stFileA3dGENERAL->uwNumberOfChannels;
|
|
p_stCurrentA3dGENERAL->uwNumberOfFrames= p_stFileA3dGENERAL->uwNumberOfFrames;
|
|
p_stCurrentA3dGENERAL->uwNumberOfKeyFrames= p_stFileA3dGENERAL->uwNumberOfKeyFrames;
|
|
p_stCurrentA3dGENERAL->uwNumberOfEvents= p_stFileA3dGENERAL->uwNumberOfEvents;
|
|
p_stCurrentA3dGENERAL->uwNumberOfMorphData= p_stFileA3dGENERAL->uwNumberOfMorphData;
|
|
|
|
p_stCurrentA3dGENERAL->uwNumOfAnimationTranslationOffset= p_stFileA3dGENERAL->uwNumOfAnimationTranslationOffset;
|
|
p_stCurrentA3dGENERAL->uwNumOfAnimationRotationOffset= p_stFileA3dGENERAL->uwNumOfAnimationRotationOffset;
|
|
p_stCurrentA3dGENERAL->uwNumOfFirstPosition= p_stFileA3dGENERAL->uwNumOfFirstPosition;
|
|
|
|
p_stCurrentA3dGENERAL->uwStartFrame= p_stFileA3dGENERAL->uwStartFrame;
|
|
p_stCurrentA3dGENERAL->uwEndFrame= p_stFileA3dGENERAL->uwEndFrame;
|
|
p_stCurrentA3dGENERAL->uwFlags= p_stFileA3dGENERAL->uwFlags;
|
|
p_stCurrentA3dGENERAL->uwFakeAnimSpeed= p_stFileA3dGENERAL->uwFakeAnimSpeed; */
|
|
/* p_stCurrentA3dGENERAL->uwAlign= 0;*/
|
|
|
|
/* optim AR9811*/
|
|
memcpy(p_stCurrentA3dGENERAL,p_stFileA3dGENERAL,sizeof(tdstFileA3dAnimationGENERAL));
|
|
|
|
p_stFileA3dGENERAL++;
|
|
p_vCurrentFile= (void *) p_stFileA3dGENERAL;
|
|
|
|
/*unsigned short uwNumOfFirstVector; will be set in fn_v_LoadVectors*/
|
|
/*unsigned short uwNumOfFirstQuaternion; will be set in fn_v_LoadQuaternions*/
|
|
/*unsigned short uwNumOfFirstHierarchy; will be set in fn_v_LoadHierarchies*/
|
|
/*unsigned short uwNumOfFirstNTTO; will be set in fn_v_LoadNTTO*/
|
|
/*unsigned short uwNumOfFirstOnlyFrame; will be set in fn_v_LoadOnlyFrames*/
|
|
/*unsigned short uwNumOfFirstChannel; will be set in fn_v_LoadChannels*/
|
|
/*unsigned short uwNumOfFirstEvent; will be set in fn_v_LoadEvents*/
|
|
/*unsigned short uwNumOfFirstPosition; will be add in fn_v_LoadVectors*/
|
|
/*unsigned short uwNumOfAnimationTranslationOffset; will be add in fn_v_LoadVectors*/
|
|
/*unsigned short uwNumOfAnimationRotationOffset; will be add in fn_v_LoadQuaternions*/
|
|
}
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
void fn_v_LoadVectors( void )
|
|
{ register unsigned short uwMax/*, uwCnt1*/;
|
|
register unsigned long ulInd;
|
|
|
|
uwMax= p_stCurrentA3dGENERAL->uwNumberOfVectors;
|
|
ulInd= fn_ul_AllocateOnStack( eStackVertexes, uwMax );
|
|
|
|
uwNumOfFirstVector = p_stCurrentA3dGENERAL->uwNumOfFirstVector = (unsigned short)ulInd;
|
|
|
|
p_stCurrentVector3= (tdxULongVector3 *) &p_a3_xVectors[ ulInd ];
|
|
p_stFileVector3= (tdxULongVector3 *) p_vCurrentFile;
|
|
M_A3xDebug( "VERT", tdxULongVector3, p_stFileVector3 );
|
|
/* for ( uwCnt1=0 ; uwCnt1<uwMax ; uwCnt1++ )
|
|
{
|
|
(*p_stCurrentVector3)[0]= (*p_stFileVector3)[0];
|
|
(*p_stCurrentVector3)[1]= (*p_stFileVector3)[1];
|
|
(*p_stCurrentVector3)[2]= (*p_stFileVector3)[2];
|
|
p_stFileVector3++;
|
|
p_stCurrentVector3++;
|
|
}*/
|
|
|
|
memcpy(p_stCurrentVector3,p_stFileVector3,sizeof(tdxULongVector3)*uwMax); /* optim AR9811*/
|
|
|
|
/* p_vCurrentFile= (void *) p_stFileVector3;*/
|
|
p_vCurrentFile= (void *) (p_stFileVector3+uwMax);
|
|
p_stCurrentVector3 += uwMax;
|
|
|
|
#pragma warning(disable:4244)
|
|
p_stCurrentA3dGENERAL->uwNumOfFirstPosition+= uwNumOfFirstVector;
|
|
p_stCurrentA3dGENERAL->uwNumOfAnimationTranslationOffset+= uwNumOfFirstVector;
|
|
#pragma warning(default:4244)
|
|
}
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
void fn_v_LoadQuaternions( void )
|
|
{ register unsigned short uwMax/*, uwCnt1*/;
|
|
register unsigned long ulInd;
|
|
uwMax= p_stCurrentA3dGENERAL->uwNumberOfQuaternions;
|
|
ulInd= fn_ul_AllocateOnStack( eStackQuaternions, uwMax );
|
|
|
|
uwNumOfFirstQuaternion = p_stCurrentA3dGENERAL->uwNumOfFirstQuaternion = (unsigned short)ulInd;
|
|
|
|
p_stCurrentQuater4= &p_a4_xQuaternions[ ulInd ];
|
|
p_stFileQuater4= (tdxSShortQuater4 *) p_vCurrentFile;
|
|
M_A3xDebug( "QUAT", tdxSShortQuater4, p_stFileQuater4 );
|
|
/* for ( uwCnt1=0 ; uwCnt1<uwMax ; uwCnt1++ )
|
|
{
|
|
(*p_stCurrentQuater4)[0]= (*p_stFileQuater4)[0];
|
|
(*p_stCurrentQuater4)[1]= (*p_stFileQuater4)[1];
|
|
(*p_stCurrentQuater4)[2]= (*p_stFileQuater4)[2];
|
|
(*p_stCurrentQuater4)[3]= (*p_stFileQuater4)[3];
|
|
p_stFileQuater4++;
|
|
p_stCurrentQuater4++;
|
|
} */
|
|
|
|
memcpy(p_stCurrentQuater4,p_stFileQuater4,sizeof(tdxSShortQuater4)*uwMax); /* optim AR9811*/
|
|
|
|
/* p_vCurrentFile= (void *) p_stFileQuater4;*/
|
|
p_vCurrentFile= (void *) (p_stFileQuater4+uwMax);
|
|
p_stCurrentQuater4 += uwMax;
|
|
|
|
#pragma warning(disable:4244)
|
|
p_stCurrentA3dGENERAL->uwNumOfAnimationRotationOffset+= uwNumOfFirstQuaternion;
|
|
#pragma warning(default:4244)
|
|
}
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
void fn_v_LoadHierarchies( void )
|
|
{ register unsigned short uwMax/*, uwCnt1*/;
|
|
register unsigned long ulInd;
|
|
|
|
uwMax= p_stCurrentA3dGENERAL->uwNumberOfHierarchies;
|
|
ulInd= fn_ul_AllocateOnStack( eStackHierarchies, uwMax );
|
|
|
|
uwNumOfFirstHierarchy = p_stCurrentA3dGENERAL->uwNumOfFirstHierarchy = (unsigned short)ulInd;
|
|
|
|
p_stCurrentHierarchy= &p_stHierarchies[ ulInd ];
|
|
p_stFileHierarchy= (tdstFileHierarchy *) p_vCurrentFile;
|
|
M_A3xDebug( "HIER", tdstFileHierarchy, p_stFileHierarchy );
|
|
/* for ( uwCnt1=0 ; uwCnt1<uwMax ; uwCnt1++ )
|
|
{
|
|
p_stCurrentHierarchy->uwChild= p_stFileHierarchy->uwChild;
|
|
p_stCurrentHierarchy->uwFather= p_stFileHierarchy->uwFather;
|
|
p_stFileHierarchy++;
|
|
p_stCurrentHierarchy++;
|
|
} */
|
|
|
|
memcpy(p_stCurrentHierarchy,p_stFileHierarchy,sizeof(tdstFileHierarchy)*uwMax); /* optim AR9811*/
|
|
|
|
/* p_vCurrentFile= (void *) p_stFileHierarchy;*/
|
|
p_vCurrentFile= (void *) (p_stFileHierarchy+uwMax);
|
|
p_stCurrentHierarchy+=uwMax;
|
|
}
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
void fn_v_LoadNTTO( void )
|
|
{ register unsigned short uwMax/*, uwCnt1*/;
|
|
register unsigned long ulInd;
|
|
|
|
uwMax= p_stCurrentA3dGENERAL->uwNumberOfNTTO;
|
|
ulInd= fn_ul_AllocateOnStack( eStackNTTO, uwMax );
|
|
|
|
p_stCurrentA3dGENERAL->uwNumOfFirstNTTO = (unsigned short)ulInd;
|
|
|
|
p_stCurrentNTTO= &p_stNTTO[ ulInd ];
|
|
p_stFileNTTO= (tdstFileNTTO *) p_vCurrentFile;
|
|
M_A3xDebug( "NTTO", tdstFileNTTO, p_stFileNTTO );
|
|
/* for ( uwCnt1=0 ; uwCnt1<uwMax ; uwCnt1++ )
|
|
{
|
|
p_stCurrentNTTO->ucNumberInTable= p_stFileNTTO->ucNumberInTable;
|
|
p_stCurrentNTTO->uwTypeOfObject= p_stFileNTTO->uwTypeOfObject;
|
|
p_stCurrentNTTO->ucTransparency= p_stFileNTTO->ucTransparency;
|
|
p_stFileNTTO++;
|
|
p_stCurrentNTTO++;
|
|
} */
|
|
|
|
memcpy(p_stCurrentNTTO,p_stFileNTTO,sizeof(tdstFileNTTO)*uwMax); /* optim AR9811*/
|
|
|
|
/* p_vCurrentFile= (void *) p_stFileNTTO;*/
|
|
p_vCurrentFile= (void *) (p_stFileNTTO+uwMax);
|
|
p_stCurrentNTTO+=uwMax;
|
|
}
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
void fn_v_LoadOnlyFrames( void )
|
|
{ register unsigned short uwCnt1, uwMax;
|
|
register unsigned long ulInd;
|
|
|
|
uwMax= (unsigned short)(p_stCurrentA3dGENERAL->uwEndFrame - p_stCurrentA3dGENERAL->uwStartFrame);
|
|
ulInd= fn_ul_AllocateOnStack( eStackOnlyFrames, uwMax );
|
|
|
|
p_stCurrentA3dGENERAL->uwNumOfFirstOnlyFrame = (unsigned short)ulInd;
|
|
|
|
p_stCurrentOnlyFrame= &p_stOnlyFrames[ ulInd ];
|
|
p_stFileOnlyFrame= (tdstFileOnlyFrame *) p_vCurrentFile;
|
|
M_A3xDebug( "OFRM", tdstFileOnlyFrame, p_stFileOnlyFrame );
|
|
for ( uwCnt1=0 ; uwCnt1<uwMax ; uwCnt1++ )
|
|
{
|
|
if ( p_stFileOnlyFrame->uwNumOfAngularSpeedQuat != SEB_Invalid )
|
|
{ p_stCurrentOnlyFrame->uwNumOfAngularSpeedQuat= (unsigned short) (uwNumOfFirstQuaternion + p_stFileOnlyFrame->uwNumOfAngularSpeedQuat);
|
|
/* fn_v_ExpandQuat( a4_xQuatOri, p_a4_xQuaternions[ p_stCurrentOnlyFrame->uwNumOfAngularSpeedQuat ] );
|
|
p_stCurrentOnlyFrame->uwAngSpeedQuat= fn_uw_AngleBetweenQuat( a4_xQuatOri, a4_xQuater1 ); */
|
|
}
|
|
else
|
|
{ p_stCurrentOnlyFrame->uwNumOfAngularSpeedQuat= SEB_Invalid;
|
|
}
|
|
if ( p_stFileOnlyFrame->uwNumOfSpeedVector != SEB_Invalid )
|
|
p_stCurrentOnlyFrame->uwNumOfSpeedVector=(unsigned short)(uwNumOfFirstVector + p_stFileOnlyFrame->uwNumOfSpeedVector);
|
|
else p_stCurrentOnlyFrame->uwNumOfSpeedVector= SEB_Invalid;
|
|
p_stCurrentOnlyFrame->uwHierarchyNbCouples= p_stFileOnlyFrame->uwHierarchyNbCouples;
|
|
p_stCurrentOnlyFrame->uwNumOfFirstHierarchyCouple= (unsigned short)(uwNumOfFirstHierarchy + p_stFileOnlyFrame->uwNumOfHierarchyCouples);
|
|
p_stCurrentOnlyFrame->uwNumOfSavedFrame= p_stFileOnlyFrame->uwNumOfSavedFrame;
|
|
p_stFileOnlyFrame++;
|
|
p_stCurrentOnlyFrame++;
|
|
}
|
|
p_vCurrentFile= (void *) p_stFileOnlyFrame;
|
|
}
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
void fn_v_LoadChannels( void )
|
|
{ register unsigned short uwCnt1, uwMax;
|
|
register unsigned long ulInd;
|
|
|
|
uwMax= p_stCurrentA3dGENERAL->uwNumberOfChannels;
|
|
ulInd= fn_ul_AllocateOnStack( eStackChannels, uwMax );
|
|
|
|
p_stCurrentA3dGENERAL->uwNumOfFirstChannel = (unsigned short)ulInd;
|
|
p_stFirstChannel= &p_stChannels[ ulInd ];
|
|
|
|
p_stCurrentChannel= p_stFirstChannel;
|
|
p_stFileChannel= (tdstFileChannel *) p_vCurrentFile;
|
|
M_A3xDebug( "CHAN", tdstFileChannel, p_stFileChannel );
|
|
for ( uwCnt1=0 ; uwCnt1<uwMax ; uwCnt1++ )
|
|
{
|
|
p_stCurrentChannel->uwNumberOfKeys= p_stFileChannel->uwNumberOfKeys;
|
|
p_stCurrentChannel->uwChannelNumber= p_stFileChannel->uwChannelNumber;
|
|
p_stCurrentChannel->uwNumOfLocalPivotPos= (unsigned short)(uwNumOfFirstVector + p_stFileChannel->uwNumOfLocalPivotPos);
|
|
p_stFileChannel++;
|
|
p_stCurrentChannel++;
|
|
}
|
|
p_vCurrentFile= (void *) p_stFileChannel;
|
|
|
|
/*unsigned short uwNumOfFirstFrame; will be set in fn_v_LoadFrames*/
|
|
/*unsigned short uwNumOfFirstFrameKF; will be set in fn_v_LoadFrames*/
|
|
/*unsigned short uwNumOfFirstKeyFrame; will be set in fn_v_LoadKeyFrames*/
|
|
}
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
void fn_v_LoadFrames( void )
|
|
{ register unsigned short uwCnt1, uwCnt2, uwMax;
|
|
register unsigned long ulInd;
|
|
|
|
p_stCurrentChannel= p_stFirstChannel;
|
|
p_stFileFrame= (tdstFileFrame *) p_vCurrentFile;
|
|
M_A3xDebug( "FRMS", tdstFileFrame, p_stFileFrame );
|
|
for ( uwCnt1=0 ; uwCnt1<p_stCurrentA3dGENERAL->uwNumberOfChannels ; uwCnt1++ )
|
|
{
|
|
uwMax= p_stCurrentA3dGENERAL->uwNumberOfSavedFrames;
|
|
ulInd= fn_ul_AllocateOnStack( eStackFrames, uwMax );
|
|
|
|
p_stCurrentChannel->uwNumOfFirstFrame=(unsigned short)ulInd;
|
|
p_stCurrentFrame= &p_stFrames[ ulInd ];
|
|
|
|
for ( uwCnt2=0 ; uwCnt2<uwMax ; uwCnt2++ )
|
|
{
|
|
if(p_stFileFrame->uwNumOfNTTO!=(unsigned short)0xFFFF) /*AR9810 0xFFFF means simple empty object*/
|
|
p_stCurrentFrame->uwNumOfNTTO= (unsigned short)(p_stCurrentA3dGENERAL->uwNumOfFirstNTTO + p_stFileFrame->uwNumOfNTTO);
|
|
else
|
|
p_stCurrentFrame->uwNumOfNTTO=(unsigned short)0xFFFF;
|
|
p_stFileFrame++;
|
|
p_stCurrentFrame++;
|
|
}
|
|
|
|
uwMax= (unsigned short)(p_stCurrentA3dGENERAL->uwEndFrame - p_stCurrentA3dGENERAL->uwStartFrame);
|
|
ulInd= fn_ul_AllocateOnStack( eStackFramesKF, uwMax );
|
|
|
|
p_stCurrentChannel->ulNumOfFirstFrameKF = ulInd;
|
|
|
|
p_stCurrentChannel++;
|
|
}
|
|
p_vCurrentFile= (void *) p_stFileFrame;
|
|
|
|
/*unsigned short uwNumOfKeyFrame; will be set in fn_v_LoadKeyFrames*/
|
|
}
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
void fn_v_LoadKeyFrames( void )
|
|
{ register unsigned short uwCnt1, uwCnt2, uwCnt3, uwMax;
|
|
register unsigned long ulInd;
|
|
unsigned short uwNumOfPosition;
|
|
unsigned long ulNumOfFirstFrameKF;
|
|
unsigned short uwNumOfOldKeyFrame= 0, uwNumOfCurrentKeyFrame;
|
|
unsigned short uwNumOfOldFrameNumber= 0, uwNumOfCurrentFrameNumber;
|
|
unsigned short uwNumOfOldPosition= 0;
|
|
|
|
p_stCurrentChannel= p_stFirstChannel;
|
|
p_stFileKeyFrame= (tdstFileKeyFrame *) p_vCurrentFile;
|
|
M_A3xDebug( "KFRM", tdstFileKeyFrame, p_stFileKeyFrame );
|
|
for ( uwCnt1=0 ; uwCnt1<p_stCurrentA3dGENERAL->uwNumberOfChannels ; uwCnt1++ )
|
|
{
|
|
/* Allocate KeyFrames*/
|
|
uwMax= p_stCurrentChannel->uwNumberOfKeys;
|
|
ulInd= fn_ul_AllocateOnStack( eStackKeyFrames, uwMax );
|
|
|
|
p_stCurrentChannel->uwNumOfFirstKeyFrame = (unsigned short)ulInd;
|
|
p_stCurrentKeyFrame= &p_stKeyFrames[ ulInd ];
|
|
/* Warning : don't change uwInd value (it will use at the end of this routine to get first keyframe)*/
|
|
|
|
ulNumOfFirstFrameKF= p_stCurrentChannel->ulNumOfFirstFrameKF;
|
|
uwNumOfCurrentKeyFrame= (unsigned short)ulInd;
|
|
uwNumOfCurrentFrameNumber= 0;
|
|
|
|
ulInd= 0;
|
|
uwCnt3= p_stCurrentChannel->uwNumOfLocalPivotPos;
|
|
if ( (p_a3_xVectors[uwCnt3][0] != xZero) ||
|
|
(p_a3_xVectors[uwCnt3][1] != xZero) ||
|
|
(p_a3_xVectors[uwCnt3][2] != xZero) )
|
|
{ ulInd= 1;
|
|
}
|
|
|
|
for ( uwCnt2=0 ; uwCnt2<uwMax ; uwCnt2++ )
|
|
{
|
|
/* Copy Key Frame information*/
|
|
p_stCurrentKeyFrame->uwFrameNumber= p_stFileKeyFrame->uwFrameNumber;
|
|
p_stCurrentKeyFrame->uwMask= p_stFileKeyFrame->uwMask;
|
|
|
|
p_stCurrentKeyFrame->uwNumOfQuatOri= (unsigned short)(uwNumOfFirstQuaternion + p_stFileKeyFrame->uwNumOfQuatOri);
|
|
p_stCurrentKeyFrame->uwNumOfQuatSca= (unsigned short)(uwNumOfFirstQuaternion + p_stFileKeyFrame->uwNumOfQuatSca);
|
|
p_stCurrentKeyFrame->uwNumOfScaleValues= (unsigned short)(uwNumOfFirstVector + p_stFileKeyFrame->uwNumOfScaleValues);
|
|
p_stCurrentKeyFrame->uwNumOfPosition= (unsigned short)(uwNumOfFirstVector + p_stFileKeyFrame->uwNumOfPosition);
|
|
p_stCurrentKeyFrame->swInterpolationParameter= p_stFileKeyFrame->swInterpolationParameter;
|
|
|
|
/* World Pivot position*/
|
|
fn_v_ExpandQuat ( a4_xQuatOri, p_a4_xQuaternions[ p_stCurrentKeyFrame->uwNumOfQuatOri ] );
|
|
fn_v_ExpandQuat( a4_xQuatSca, p_a4_xQuaternions[ p_stCurrentKeyFrame->uwNumOfQuatSca ] );
|
|
if (ulInd == 0)
|
|
{ register SEB_xReal xTmp;
|
|
|
|
xTmp= 0.0f;
|
|
p_stCurrentKeyFrame->a3_xWorldPivotPosition[0]= xTmp;
|
|
p_stCurrentKeyFrame->a3_xWorldPivotPosition[1]= xTmp;
|
|
p_stCurrentKeyFrame->a3_xWorldPivotPosition[2]= xTmp;
|
|
}
|
|
else
|
|
{
|
|
fn_v_QuatToMatrix( a3a3_xMtxOri, a4_xQuatOri );
|
|
|
|
/* optim AR9811*/
|
|
if((a4_xQuatSca[0]!=0.0f)||(a4_xQuatSca[1]!=0.0f)||(a4_xQuatSca[2]!=0.0f)||(a4_xQuatSca[3]!=1.0f))
|
|
{
|
|
fn_v_QuatToMatrix( a3a3_xMtxSca, a4_xQuatSca );
|
|
fn_v_InvRotDiaRot( a3a3_xScaleMatrix, a3a3_xMtxSca, p_a3_xVectors[ p_stCurrentKeyFrame->uwNumOfScaleValues ] );
|
|
fn_v_MatrixByVector( a3_xTmpVec, a3a3_xScaleMatrix, p_a3_xVectors[ p_stCurrentChannel->uwNumOfLocalPivotPos ] );
|
|
}
|
|
else
|
|
{
|
|
a3_xTmpVec[0]=p_a3_xVectors[ p_stCurrentKeyFrame->uwNumOfScaleValues ][0]*p_a3_xVectors[ p_stCurrentChannel->uwNumOfLocalPivotPos ][0];
|
|
a3_xTmpVec[1]=p_a3_xVectors[ p_stCurrentKeyFrame->uwNumOfScaleValues ][1]*p_a3_xVectors[ p_stCurrentChannel->uwNumOfLocalPivotPos ][1];
|
|
a3_xTmpVec[2]=p_a3_xVectors[ p_stCurrentKeyFrame->uwNumOfScaleValues ][2]*p_a3_xVectors[ p_stCurrentChannel->uwNumOfLocalPivotPos ][2];
|
|
}
|
|
|
|
fn_v_MatrixByVector( p_stCurrentKeyFrame->a3_xWorldPivotPosition, a3a3_xMtxOri, a3_xTmpVec );
|
|
}
|
|
uwNumOfPosition= p_stCurrentKeyFrame->uwNumOfPosition;
|
|
p_stCurrentKeyFrame->a3_xWorldPivotPosition[0]+= p_a3_xVectors[ uwNumOfPosition ][0];
|
|
p_stCurrentKeyFrame->a3_xWorldPivotPosition[1]+= p_a3_xVectors[ uwNumOfPosition ][1];
|
|
p_stCurrentKeyFrame->a3_xWorldPivotPosition[2]+= p_a3_xVectors[ uwNumOfPosition ][2];
|
|
|
|
/* DistMaster*/
|
|
p_stCurrentKeyFrame->xDistMaster= fn_x_VectorLength( p_a3_xVectors[ uwNumOfPosition ] );
|
|
|
|
/* If we are not on the first keyframe*/
|
|
if ( uwCnt2 > 0 )
|
|
{
|
|
p_stOldKeyFrame->uwAngQuatOri= 0x0000;
|
|
if ((p_stOldKeyFrame->uwMask & SEB_xMaskQuatOri) == 0x0000)
|
|
p_stOldKeyFrame->uwAngQuatOri= fn_uw_AngleBetweenQuat( a4_xOldQuatOri, a4_xQuatOri );
|
|
|
|
p_stOldKeyFrame->uwAngQuatSca= 0x0000;
|
|
if ((p_stOldKeyFrame->uwMask & SEB_xMaskQuatSca) == 0x0000)
|
|
p_stOldKeyFrame->uwAngQuatSca= fn_uw_AngleBetweenQuat( a4_xOldQuatSca, a4_xQuatSca );
|
|
|
|
/* Copy KeyFrames references*/
|
|
uwNumOfCurrentFrameNumber= p_stFileKeyFrame->uwFrameNumber;
|
|
if ( uwNumOfCurrentFrameNumber > p_stCurrentA3dGENERAL->uwEndFrame )
|
|
uwNumOfCurrentFrameNumber= p_stCurrentA3dGENERAL->uwEndFrame;
|
|
#pragma warning(disable:4244)
|
|
uwNumOfCurrentFrameNumber-= p_stCurrentA3dGENERAL->uwStartFrame;
|
|
#pragma warning(default:4244)
|
|
|
|
for ( uwCnt3=uwNumOfOldFrameNumber ; uwCnt3<uwNumOfCurrentFrameNumber ; uwCnt3++ )
|
|
p_stFramesKF[ulNumOfFirstFrameKF + uwCnt3].uwNumOfKeyFrame= uwNumOfOldKeyFrame;
|
|
}
|
|
|
|
/* Copy old informations*/
|
|
p_stOldKeyFrame= p_stCurrentKeyFrame;
|
|
fn_v_CopyQuat( a4_xOldQuatOri, a4_xQuatOri );
|
|
fn_v_CopyQuat( a4_xOldQuatSca, a4_xQuatSca );
|
|
uwNumOfOldPosition= uwNumOfPosition;
|
|
uwNumOfOldFrameNumber= uwNumOfCurrentFrameNumber;
|
|
uwNumOfOldKeyFrame= uwNumOfCurrentKeyFrame;
|
|
|
|
uwNumOfCurrentKeyFrame++;
|
|
|
|
p_stFileKeyFrame++;
|
|
p_stCurrentKeyFrame++;
|
|
}
|
|
|
|
/* For last keyframe*/
|
|
p_stCurrentKeyFrame= &p_stKeyFrames[ p_stCurrentChannel->uwNumOfFirstKeyFrame ];
|
|
fn_v_ExpandQuat ( a4_xQuatOri, p_a4_xQuaternions[ p_stCurrentKeyFrame->uwNumOfQuatOri ] );
|
|
fn_v_ExpandQuat ( a4_xQuatSca, p_a4_xQuaternions[ p_stCurrentKeyFrame->uwNumOfQuatSca ] );
|
|
|
|
p_stOldKeyFrame->uwAngQuatOri= 0x0000;
|
|
if ((p_stOldKeyFrame->uwMask & SEB_xMaskQuatOri) == 0x0000)
|
|
p_stOldKeyFrame->uwAngQuatOri= fn_uw_AngleBetweenQuat( a4_xOldQuatOri, a4_xQuatOri );
|
|
|
|
p_stOldKeyFrame->uwAngQuatSca= 0x0000;
|
|
if ((p_stOldKeyFrame->uwMask & SEB_xMaskQuatSca) == 0x0000)
|
|
p_stOldKeyFrame->uwAngQuatSca= fn_uw_AngleBetweenQuat( a4_xOldQuatSca, a4_xQuatSca );
|
|
|
|
|
|
for ( uwCnt3=uwNumOfOldFrameNumber ; uwCnt3<(p_stCurrentA3dGENERAL->uwEndFrame - p_stCurrentA3dGENERAL->uwStartFrame) ; uwCnt3++ )
|
|
p_stFramesKF[ulNumOfFirstFrameKF + uwCnt3].uwNumOfKeyFrame= uwNumOfOldKeyFrame;
|
|
|
|
p_stCurrentChannel++;
|
|
}
|
|
|
|
/* Normalization of positions*/
|
|
for ( uwCnt1=p_stCurrentA3dGENERAL->uwNumOfFirstPosition ; uwCnt1<uwNumOfFirstVector+p_stCurrentA3dGENERAL->uwNumberOfVectors ; uwCnt1++ )
|
|
fn_v_NormalizeVector( p_a3_xVectors[ uwCnt1 ] );
|
|
|
|
|
|
/* Calculate (uwAngObjCentre) and (WorldPivotPosition with hierarchy)*/
|
|
p_stCurrentChannel= p_stFirstChannel;
|
|
for ( uwCnt1=0 ; uwCnt1<p_stCurrentA3dGENERAL->uwNumberOfChannels ; uwCnt1++ )
|
|
{
|
|
p_stOldKeyFrame= &p_stKeyFrames[ p_stCurrentChannel->uwNumOfFirstKeyFrame ];
|
|
p_stCurrentKeyFrame= &p_stOldKeyFrame[1];
|
|
uwMax= p_stCurrentChannel->uwNumberOfKeys;
|
|
for ( uwCnt2=1 ; uwCnt2<uwMax ; uwCnt2++ )
|
|
{ /* uwAngObjCentre*/
|
|
p_stOldKeyFrame->uwAngObjCentre=
|
|
fn_uw_AngleBetweenVect( p_a3_xVectors[ p_stOldKeyFrame->uwNumOfPosition ],
|
|
p_a3_xVectors[ p_stCurrentKeyFrame->uwNumOfPosition ] );
|
|
|
|
p_stOldKeyFrame++;
|
|
p_stCurrentKeyFrame++;
|
|
}
|
|
/* For last keyframe*/
|
|
p_stOldKeyFrame->uwAngObjCentre=
|
|
fn_uw_AngleBetweenVect( p_a3_xVectors[ p_stOldKeyFrame->uwNumOfPosition ], p_a3_xVectors[ p_stKeyFrames[p_stCurrentChannel->uwNumOfFirstKeyFrame].uwNumOfPosition ] );
|
|
|
|
p_stCurrentChannel++;
|
|
}
|
|
|
|
p_vCurrentFile= (void *) p_stFileKeyFrame;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------------
|
|
// Description : fn_v_LoadMorphingData
|
|
// Load morphing data from the rom
|
|
----------------------------------------------------------------------------//
|
|
// Methods : None
|
|
----------------------------------------------------------------------------//
|
|
// Input :
|
|
// Output :
|
|
----------------------------------------------------------------------------//
|
|
// Creation date : Mar 98 Author: Alain Robin
|
|
----------------------------------------------------------------------------//
|
|
// Modifications :
|
|
// Modification date : Modification author :
|
|
----------------------------------------------------------------------------*/
|
|
void fn_v_LoadMorphingData ( void )
|
|
{
|
|
register unsigned short uwMax/*, uwCnt1*/;
|
|
register unsigned long ulInd;
|
|
|
|
/* Alignment*/
|
|
while ( (((unsigned long) p_vCurrentFile) % 4) != 0 )
|
|
p_vCurrentFile= (void *) (((unsigned char *) p_vCurrentFile) + 1);
|
|
|
|
uwMax= p_stCurrentA3dGENERAL->uwNumberOfMorphData;
|
|
ulInd= fn_ul_AllocateOnStack( eStackMorphData, p_stCurrentA3dGENERAL->uwNumberOfMorphData);
|
|
|
|
p_stCurrentA3dGENERAL->uwNumOfFirstMorphData = (unsigned short)ulInd;
|
|
p_stCurrentMorphData= &p_stMorphData[ulInd];
|
|
|
|
p_stFileMorphData= (tdstFileMorphData *) p_vCurrentFile;
|
|
/* for ( uwCnt1=0 ; uwCnt1<uwMax ; uwCnt1++ )
|
|
{
|
|
p_stCurrentMorphData->ucTarget=p_stFileMorphData->ucTarget;
|
|
p_stCurrentMorphData->ucMorphingAmount=p_stFileMorphData->ucMorphingAmount;
|
|
p_stCurrentMorphData->uwChannelNumber=p_stFileMorphData->uwChannelNumber;
|
|
p_stCurrentMorphData->uwFrameNumber=p_stFileMorphData->uwFrameNumber;
|
|
|
|
p_stFileMorphData++;
|
|
p_stCurrentMorphData++;
|
|
} */
|
|
|
|
memcpy(p_stCurrentMorphData,p_stFileMorphData,sizeof(tdstFileMorphData)*uwMax); /* optim AR9811*/
|
|
|
|
/* p_vCurrentFile= (void *) p_stFileMorphData;*/
|
|
p_vCurrentFile= (void *) (p_stFileMorphData+uwMax);
|
|
p_stCurrentMorphData+=uwMax;
|
|
}
|
|
|
|
/*AR9809 Now, this function can be in the common part (same structure used)*/
|
|
void fn_v_LoadEvents()
|
|
{ register unsigned short uwCnt1, uwMax;
|
|
register unsigned long ulInd;
|
|
|
|
/* Alignment*/
|
|
while ( (((unsigned long) p_vCurrentFile) % 4) != 0 )
|
|
p_vCurrentFile= (void *) (((unsigned char *) p_vCurrentFile) + 1);
|
|
|
|
uwMax= p_stCurrentA3dGENERAL->uwNumberOfEvents;
|
|
ulInd= fn_ul_AllocateOnStack( eStackEvents, uwMax );
|
|
|
|
p_stCurrentA3dGENERAL->uwNumOfFirstEvent = (unsigned short)ulInd;
|
|
p_stCurrentEvent= &p_stEvents[ulInd];
|
|
|
|
p_stFileEvent= (tdstFileEvent *) p_vCurrentFile;
|
|
M_A3xDebug( "EVNT", tdstFileEvent, p_stFileEvent );
|
|
for ( uwCnt1=0 ; uwCnt1<uwMax ; uwCnt1++ )
|
|
{
|
|
p_stCurrentEvent->uwFrameNumber= p_stFileEvent->uwFrameNumber;
|
|
p_stCurrentEvent->usEventNumberInTBL= p_stFileEvent->usEventNumberInTBL;
|
|
p_stCurrentEvent->p_stfEventInTBL= NULL;
|
|
p_stCurrentEvent->uwChannelNumber= p_stFileEvent->uwChannelNumber;
|
|
|
|
p_stFileEvent++;
|
|
p_stCurrentEvent++;
|
|
}
|
|
|
|
p_vCurrentFile= (void *) p_stFileEvent;
|
|
}
|
|
|
|
/* ***********************************************************************************/
|
|
|
|
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC 04/06/99 */
|
|
unsigned short fn_uw_LoadAnimV6 ( void *_p_vStartFile )
|
|
{
|
|
|
|
p_vCurrentFile= _p_vStartFile;
|
|
fn_v_LoadA3dGENERAL ();
|
|
fn_v_LoadVectors ();
|
|
fn_v_LoadQuaternions();
|
|
fn_v_LoadHierarchies();
|
|
fn_v_LoadNTTO ();
|
|
fn_v_LoadOnlyFrames ();
|
|
fn_v_LoadChannels ();
|
|
fn_v_LoadFrames ();
|
|
fn_v_LoadKeyFrames ();
|
|
fn_v_LoadEvents ();
|
|
/* fn_v_LoadLights ();*/
|
|
fn_v_LoadMorphingData(); /*AR980306*/
|
|
return (unsigned short)(fn_ul_GetStackAlloc(eStackA3dGENERAL));
|
|
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC 04/06/99 */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
void fn_v_LoadCachedAnimV6 ( char *_p_cDestMem,
|
|
void *_p_vStartFile,
|
|
unsigned long _ulMaxlength )
|
|
{
|
|
#ifdef ANIM_PROFILE
|
|
u64 ulBefore,ulAfter;
|
|
|
|
if(_ulMaxlength==10240)
|
|
ulBefore=osGetTime();
|
|
#endif
|
|
#ifdef A3X_CacheIsUsed
|
|
/* Reset Stacks*/
|
|
M_v_ResetOneStack( eStackA3dGENERAL );
|
|
M_v_ResetOneStack( eStackVertexes );
|
|
M_v_ResetOneStack( eStackQuaternions );
|
|
M_v_ResetOneStack( eStackHierarchies );
|
|
M_v_ResetOneStack( eStackNTTO );
|
|
M_v_ResetOneStack( eStackOnlyFrames );
|
|
M_v_ResetOneStack( eStackChannels );
|
|
M_v_ResetOneStack( eStackFrames );
|
|
M_v_ResetOneStack( eStackFramesKF );
|
|
M_v_ResetOneStack( eStackKeyFrames );
|
|
M_v_ResetOneStack( eStackEvents );
|
|
M_v_ResetOneStack( eStackMorphData );
|
|
|
|
p_vCurrentFile= _p_vStartFile;
|
|
|
|
p_stA3dGENERAL= (tdstA3dGENERAL *) _p_cDestMem;
|
|
fn_v_LoadA3dGENERAL ();
|
|
|
|
p_a3_xVectors= (tdxVector3 *) &p_stA3dGENERAL[1];
|
|
fn_v_LoadVectors ();
|
|
|
|
p_a4_xQuaternions= (tdxSShortQuater4 *) p_stCurrentVector3;
|
|
fn_v_LoadQuaternions();
|
|
|
|
p_stHierarchies= (tdstHierarchy *) p_stCurrentQuater4;
|
|
fn_v_LoadHierarchies();
|
|
|
|
p_stNTTO= (tdstNTTO *) p_stCurrentHierarchy;
|
|
fn_v_LoadNTTO ();
|
|
|
|
p_stOnlyFrames= (tdstOnlyFrame *) p_stCurrentNTTO;
|
|
fn_v_LoadOnlyFrames ();
|
|
|
|
p_stChannels= (tdstChannel *) p_stCurrentOnlyFrame;
|
|
while ( (((unsigned long) p_stChannels) %4) != 0 )
|
|
p_stChannels= (tdstChannel *) (((char *) p_stChannels) + 1);
|
|
fn_v_LoadChannels ();
|
|
|
|
p_stFrames= (tdstFrame *) p_stCurrentChannel;
|
|
fn_v_LoadFrames ();
|
|
|
|
p_stFramesKF= (tdstFrameKF *) p_stCurrentFrame;
|
|
/*p_stKeyFrames= (tdstKeyFrame *) &p_stFramesKF[ p_stCurrentA3dGENERAL->uwNumberOfChannels * p_stCurrentA3dGENERAL->uwNumberOfFrames ];*/
|
|
p_stKeyFrames= (tdstKeyFrame *) &p_stFramesKF[ p_stCurrentA3dGENERAL->uwNumberOfChannels *
|
|
(p_stCurrentA3dGENERAL->uwEndFrame - p_stCurrentA3dGENERAL->uwStartFrame) ];
|
|
/* Alignment*/
|
|
if ( (((unsigned long) p_stKeyFrames) & 0x0002) != 0x0000 )
|
|
p_stKeyFrames= (tdstKeyFrame *) (((char *) p_stKeyFrames) + 2);
|
|
fn_v_LoadKeyFrames ();
|
|
|
|
p_stEvents= (tdstEvent *) p_stCurrentKeyFrame;
|
|
fn_v_LoadEvents ();
|
|
|
|
/* fn_v_LoadLights ();*/
|
|
|
|
/* due to alignment*/
|
|
while ( (((unsigned long) p_stCurrentEvent) %4) != 0 )
|
|
p_stCurrentEvent= (tdstEvent *) (((char *) p_stCurrentEvent) + 1);
|
|
|
|
p_stMorphData= (tdstMorphData *) p_stCurrentEvent; /*AR9803*/
|
|
fn_v_LoadMorphingData(); /*AR9803*/
|
|
|
|
#ifdef ANIM_PROFILE
|
|
if(_ulMaxlength==10240)
|
|
{
|
|
ulAfter=osGetTime();
|
|
osSyncPrintf("%llu\n",ulAfter-ulBefore);
|
|
}
|
|
#endif
|
|
|
|
/*AR9901 For debug only -> to be removed !!!*/
|
|
#ifdef ANIM_DEBUG
|
|
if(*((unsigned char*)(g_p_cSecurityMalloc))!=0xA1)
|
|
{
|
|
ASM_BREAK;
|
|
}
|
|
#endif /*#ifdef ANIM_DEBUG*/
|
|
|
|
#ifdef ANIM_DEBUG
|
|
/* due to alignment*/
|
|
while ( (((unsigned long) p_stCurrentMorphData) %4) != 0 )
|
|
p_stCurrentMorphData= (tdstMorphData *) (((char *) p_stCurrentMorphData) + 1);
|
|
|
|
if ( abs((unsigned long)p_stCurrentMorphData - (unsigned long)p_stCurrentA3dGENERAL) > _ulMaxlength )
|
|
{
|
|
osSyncPrintf("fn_v_LoadCachedAnimV6 (%d > %d)\n", ((unsigned long)p_stCurrentMorphData - (unsigned long)p_stCurrentA3dGENERAL),_ulMaxlength);
|
|
osSyncPrintf(" uwNumberOfFrames = %4d\n", p_stCurrentA3dGENERAL->uwNumberOfFrames);
|
|
osSyncPrintf(" uwNumberOfVectors = %4d\n", p_stCurrentA3dGENERAL->uwNumberOfVectors);
|
|
osSyncPrintf(" uwNumberOfQuaternions= %4d\n", p_stCurrentA3dGENERAL->uwNumberOfQuaternions);
|
|
osSyncPrintf(" uwNumberOfHierarchies= %4d\n", p_stCurrentA3dGENERAL->uwNumberOfHierarchies);
|
|
osSyncPrintf(" uwNumberOfNTTO = %4d\n", p_stCurrentA3dGENERAL->uwNumberOfNTTO);
|
|
osSyncPrintf(" uwNumberOfOnlyFrames = %4d\n", (p_stCurrentA3dGENERAL->uwEndFrame - p_stCurrentA3dGENERAL->uwStartFrame));
|
|
osSyncPrintf(" uwNumberOfChannels = %4d\n", p_stCurrentA3dGENERAL->uwNumberOfChannels);
|
|
osSyncPrintf(" uwNumberOfSavedFrames= %4d\n", p_stCurrentA3dGENERAL->uwNumberOfSavedFrames);
|
|
osSyncPrintf(" uwNumberOfKeyFrames = %4d\n", p_stCurrentA3dGENERAL->uwNumberOfKeyFrames);
|
|
osSyncPrintf(" uwNumberOfEvents = %4d\n", p_stCurrentA3dGENERAL->uwNumberOfEvents);
|
|
osSyncPrintf(" uwNumberOfMorphData = %4d\n", p_stCurrentA3dGENERAL->uwNumberOfMorphData);
|
|
osSyncPrintf(" uwStartFrame = %4d\n", p_stCurrentA3dGENERAL->uwStartFrame);
|
|
osSyncPrintf(" uwEndFrame = %4d\n", p_stCurrentA3dGENERAL->uwEndFrame);
|
|
|
|
osSyncPrintf(" p_stA3dGENERAL = %d\n", 0);
|
|
osSyncPrintf(" p_a3_xVectors = %d\n", (unsigned long)p_a3_xVectors - (unsigned long)p_stA3dGENERAL);
|
|
osSyncPrintf(" p_a4_xQuaternions = %d\n", (unsigned long)p_a4_xQuaternions - (unsigned long)p_stA3dGENERAL);
|
|
osSyncPrintf(" p_stHierarchies = %d\n", (unsigned long)p_stHierarchies - (unsigned long)p_stA3dGENERAL);
|
|
osSyncPrintf(" p_stNTTO = %d\n", (unsigned long)p_stNTTO - (unsigned long)p_stA3dGENERAL);
|
|
osSyncPrintf(" p_stOnlyFrames = %d\n", (unsigned long)p_stOnlyFrames - (unsigned long)p_stA3dGENERAL);
|
|
osSyncPrintf(" p_stChannels = %d\n", (unsigned long)p_stChannels - (unsigned long)p_stA3dGENERAL);
|
|
osSyncPrintf(" p_stFrames = %d\n", (unsigned long)p_stFrames - (unsigned long)p_stA3dGENERAL);
|
|
osSyncPrintf(" p_stFramesKF = %d\n", (unsigned long)p_stFramesKF - (unsigned long)p_stA3dGENERAL);
|
|
osSyncPrintf(" p_stKeyFrames = %d\n", (unsigned long)p_stKeyFrames - (unsigned long)p_stA3dGENERAL);
|
|
osSyncPrintf(" p_stEvents = %d\n", (unsigned long)p_stEvents - (unsigned long)p_stA3dGENERAL);
|
|
osSyncPrintf(" p_stMorphData = %d\n", (unsigned long)p_stMorphData - (unsigned long)p_stA3dGENERAL);
|
|
|
|
ASM_BREAK;
|
|
}
|
|
#endif /* ANIM_DEBUG */
|
|
#endif
|
|
}
|
|
|
|
|
|
|
|
/* ***********************************************************************************/
|
|
#undef A3X_LOAD_C
|