/*
    conv.txt                                             
    Metal Gear Solid 2 - SONS OF LIBERTY-                
    ؿϻͥ                                   
    2001/10/18 Masafumi Okuta                            
    $Id: conv.txt,v 1.1.1.3 2002/11/19 11:48:11 Yoshizawa1 Exp $                                                 
*/

algfunc.h : Ϥδؿ
algfunc.c : Ϥδؿ
    ٥ȥ롢ޥȥꥯ黻ʤΤޤȤ᤿
	ޥ饤ؿ˴ؤƤϥȤΤǳ䰦

	٥ȥϴؿ
            // ȥ󥹰ư
            MAO_TransVector( FVECTOR* pvecRes, 		// 
			     FMATRIX* pmatWorld, 	// Ȥʤޥȥꥯ
			     FVECTOR* pvecMove );	// ư
                ư̤ɸϤвʿ԰ưԤʤ̤κɸ֤

            // ,Ѵ
	    MAO_RelPos( FVECTOR* pvecRes, 		// 
		        FVECTOR* pvec, 			// ֥٥ȥ
		        FMATRIX* pmat); 		// Ȥʤޥȥꥯ
                ֥٥ȥpvecpmatФв֤pvecRes
                
            MAO_AbsPos( FVECTOR* pvecRes, 		// 
		        FVECTOR* pvec, 			// ֥٥ȥ
		        FMATRIX* pmat);			// Ȥʤޥȥꥯ
                ֥٥ȥpvecpmatФв֤pvecRes

            MAO_RelVec( FVECTOR* pvecRes, 		// 
		        FVECTOR* pvec, 			// ٥ȥ
		        FMATRIX* pmat); 		// Ȥʤޥȥꥯ
                ٥ȥpvecpmatФвpvecRes

            MAO_AbsVec( FVECTOR* pvecRes, 		// 
		        FVECTOR* pvec, 			// ٥ȥ
		        FMATRIX* pmat);			// Ȥʤޥȥꥯ
                ٥ȥpvecpmatФвpvecRes

            MAO_RelMat( FMATRIX* pmatRes, 		// 
		        FMATRIX* pmat1, 		// Ѵޥȥꥯ
		        FMATRIX* pmat2);		// Ȥʤޥȥꥯ
                pmat1pmat2ФвޥȥꥯpmatRes
            MAO_AbsMat( FMATRIX* pmatRes, 		// 
		        FMATRIX* pmat1, 		// Ѵޥȥꥯ
		        FMATRIX* pmat2);		// Ȥʤޥȥꥯ
                pmat1pmat2ФвޥȥꥯpmatRes
            MAO_RelRot( FMATRIX* pmatRes, 		// 
		        FMATRIX* pmat1,			// Ѵޥȥꥯ
		        FMATRIX* pmat2);		// Ȥʤޥȥꥯ
                pmat1pmat2ФвޥȥꥯpmatRes
		mat.m[3][0]mat.m[3][3](0.f, 0.f, 0.f, 1.f)Ȥʤ
            MAO_AbsRot( FMATRIX* pmatRes, 		// 
		        FMATRIX* pmat1, 		// Ѵޥȥꥯ
		        FMATRIX* pmat2);		// Ȥʤޥȥꥯ
                pmat1pmat2ФвޥȥꥯpmatRes
		mat.m[3][0]mat.m[3][3](0.f, 0.f, 0.f, 1.f)Ȥʤ

            // ؿ
	    MAO_SetAxisY( FMATRIX* pmatRes, 		// 
                          FMATRIX* pmat,  		// ꤹޥȥꥯ
                          FVECTOR* pvec); 		// Y
                pmatYpvecˤƥޥȥꥯƹۤ롣ήϰʲ̤
                    Y
                    YZXѤǵ
                    XYZѤǵ
            MAO_SetAxisZ( FMATRIX* pmatRes,  		// 
                          FMATRIX* pmat,  		// ꤹޥȥꥯ
                          FVECTOR* pvec); 		// Z
                pmatZpvecˤƥޥȥꥯƹۤ롣ήϰʲ̤
                    Z
                    YZXѤǵ
                    XZYѤǵ
                
            // ִؿ
	    MAO_InterpVec( FVECTOR* pvecRes,            // 
                           FVECTOR* pvecBase,           // 
                           FVECTOR* pvecAim,            // ɸ
                           float    fRate);             // 
                pvecBasepvecAimФfRate(0.fǸ,1.fɸ)ʬ֤ΤpvecRes
		    Ѵ : pvecRes = pvecBase * fRate + pvecAim * (1.f - fRate);
            // ФƺǤ⸫䤹٥ȥ(ꤢ)
            MAO_CalcVisibleVector( FVECTOR* pvecRes,    // 
                                   FVECTOR* pvec1,      // ֣
                                   FVECTOR* pvec2,      // ֣
                                   float    fWidth);    // 
                pvec1pvec2ʬ˿ľʥ٥ȥǲ̤ɽ줿äȤĹ٥ȥ롣

            // ߡ
            MAO_LoadMatHermiteLerp( void);
                ߡȷ׻ѥޥȥåVUΥ쥸
	    MAO_HermiteLerpVec( FVECTOR* pvecRes,	// ַ
				FVECTOR* pvecDiff,	// Ѳ̷ 
				FVECTOR* pvecBasePos,	// ָɸ
				FVECTOR* pvecAimPos,	// ɸ
				FVECTOR* pvecBaseDiff,	// ָѲ
				FVECTOR* pvecAimDiff, 	// Ѳ
				float    fRate); 	// (0.f1.f)
                ߡ֤Ԥʤ̤ΰ֤Ѳ̡ʷˤ
                
            MAO_HermiteLerpVecScale( FVECTOR* pvecRes,		// ַ
		                     FVECTOR* pvecDiff,		// Ѳ̷ 
				     FVECTOR* pvecBasePos,	// ָɸ
				     FVECTOR* pvecAimPos,	// ɸ
				     FVECTOR* pvecBaseDiff,	// ָѲ
				     FVECTOR* pvecAimDiff, 	// Ѳ
				     float    fRate, 		// (0.f1.f)
				     float    fScale); 		// ե졼
                MAO_HermiteLerpVecβѥե졼б

            // 3٥
            MAO_MakeBezierMatrix( FMATRIX* pmatBezier,  	// 
		                  FVECTOR* pvec1,  		// 
                                  FVECTOR* pvec2,  		// 
                                  FVECTOR* pvec3); 		// 
                ,,ξ󤫤٥Ѵޥȥꥯ롣
                ּΤMAO_Bezier3InterpQuickǤʤ롣
		             |  1 -2  1  0 ||   pvec1 |
		pmatBezier = | -2  2  0  0 ||   pvec2 |
		             |  1  0  0  0 ||   pvec3 |
 	                     |  0  0  0  1 || 0 0 0 1 |

	    MAO_Bezier3InterpQuick( FVECTOR* pvecRes, 		// 
                                    FMATRIX* pmatBezier,  	// Ѵޥȥꥯ
                                    float    fRate); 		// (0.f1.f)
                MAO_MakeBezierMatrixǺѴޥȥꥯѤƥ٥֤Ԥʤ
                pvecRes = pmatBazier * vec( fRate^2, fRate, 1.f, 0.f );

	    MAO_Bezier3Interp( FVECTOR* pvecRes,		// 
                               FVECTOR* pvec1, 			// 
                               FVECTOR* pvec2, 			// 
                               FVECTOR* pvec3, 			// 
                               float    fRate);		 	// (0.f1.f)
                ,,ξ󤫤٥Ѵޥȥꥯ,θ夽ΥޥȥꥯѤƥ٥֤Ԥʤ
                pvecRes = ( 1.f - fRate )^2 * pvec1 + 2 * fRate * (1.f - fRate) * pvec2 + fRate^2 * pvec3
 	                  |  1 -2  1  0 ||   pvec1 || fRate^2 fRate 1 0 |
                pvecRes = | -2  2  0  0 ||   pvec2 |
 	                  |  1  0  0  0 ||   pvec3 |
 	                  |  0  0  0  1 || 0 0 0 1 |
 
            // ٥ȥĹ
            _MAO_FVecLen3( FVECTOR* vec);
                vecĹ

            _MAO_FVec2Len3( FVECTOR* vec1, FVECTOR* vec2);
                vec1vec2Ĺ

            _MAO_FVec2Len2( FVECTOR* pvec1, FVECTOR* pvec2);
                vec1vec2ĹYͤƵ

maoutil.h : ؿ
maoutil.c : ؿ
    algfuncò줿ΤǥХåѤؿ򤢤Ĥ᤿

            MAO_GetDiffVec3( FVECTOR* pvecDiff,		// ٥ȥ: (NULLOK)
		             int*     pnDist,		// ʬΥ    : (NULLOK)
		             int*     pnDir,		// Y       : (NULLOK)
		             FVECTOR* pvecFrom,		// 
		             FVECTOR* pvecTo);		// 
                pvecFrompvecToεΥ,٥ȥ,Y(04096)롣ɬפʽϤNULLꤹ뤳ȤǤ

	    MAO_FlatCheck( FVECTOR* pvecPos, 		// Ĵ٤
                           FVECTOR* pvec1,  		// Хܥå(Ǿ)
                           FVECTOR* pvec2); 		// Хܥå()
                pvecPospvec1pvec2δ֤¸ߤ뤫åȢޤY̵ͤ뤹롣
	            :1
	            :0

            MAO_BoundCheck( FVECTOR* pvecPos, 		// Ĵ٤
                            FVECTOR* pvec1,  		// Хܥå(Ǿ)
                            FVECTOR* pvec2); 		// Хܥå()
                pvecPospvec1pvec2δ֤¸ߤ뤫åȢޤ
	            :1
	            :0

	    MAO_SphereCheck( FVECTOR*	pvecPos, 	// Ĵ٤
		             FVECTOR*   pvecCenter, 	// Ƚ濴
		             int	nRad);          // ȽȾ 
	        pvecCenter濴ȤȾnRadεΤʤˡʵ̾ϽpvecPos¸ߤ뤫å
	            :1
	            :0

            MAO_DbgPlayerPosDump(void);
                󥽡˥ץ쥤䡼κɸǤФ

            MAO_DbgDumpVector( FVECTOR* pvec);
                󥽡pvecͤfloatǤФ

            MAO_DbgDumpSVector( SVECTOR* pvec);
                󥽡pvecͤshortǤФ

            MAO_DbgDumpMatrix( FMATRIX* pmat);
                󥽡pmatͤǤФ

	    MAO_DbgDrawMatrix( FMATRIX* pmat, 	   	// Ȥޥȥꥯ
             		       float    fLength);       // Ĺ
                X:,Y:,Z:ĤȤfLengthʬĹΥ饤褹롣

  	    MAO_DbgDrawBox( FVECTOR* pvecPos,	            // 濴
          		    float fX, float fY, float fZ,   // 礭
		            u_char r, u_char g, u_char b)   // 
                pvecPos濴Ȥƥ(fX,fY,fZ)ȤʤȢ(r,g,b)

            MAO_DbgDrawTrap( int nTrap, u_char r, u_char g, u_char b);
                nTrap濴Ȥƥ(fX,fY,fZ)ȤʤȢ(r,g,b)

	    MAO_GetDirZone2( FVECTOR* 	pvecDir,   	// :٥ȥ
		             int 	nFromZone, 	// ֹ
		             int 	nToZone); 	// ֹ
                nFromZone濴nToZone濴ؤ٥ȥpvecDir
	    MAO_GetDirZoneToZone( int nFromZone, 	// ֹ
		                  int nToZone);		// ֹ
                nFromZone濴nToZone濴ؤY֤

            // åѥåɴϢ
	    MAO_CopyMemToScr( void* pvMainMem,          // ᥤꥢɥ쥹
                              void* pvScrPad,           // åѥåɥɥ쥹
                              int   nSize,           	// 
                              int   nNum);          	// Ŀ
                pvMainMempvScrPadnSize * nNumʬΥǡ򥳥ԡ

            MAO_CopyScrToMem( void* pvMainMem,          // ᥤꥢɥ쥹
                              void* pvScrPad,           // åѥåɥɥ쥹
                              int   nSize,           	// 
                              int   nNum);          	// Ŀ
                pvScrPadpvMainMemnSize * nNumʬΥǡ򥳥ԡ
                
            // å
	    MAO_ChkZoneInZ2Z( HZX_GROUP_ID hzx_id,       // HZXΥ롼ID
                              int 	   nZone1,       // õ
		              int          nZone2,       // õ
                              int          nAimzone);    // ɸ
                nZone1nZone2κûϩnAimzone¸ߤ뤫ånZone1, nZone2, nAimzonehzx_id˽°뤳ȡ

	    // ץߥƥַ
            MAO_FreePrim2( DG_PRIM2* prim );
                primˤƥץߥƥֲԤʤ

            MAO_SetRGBA( u_char R, u_char G, u_char B, u_char A);
                R,G,B,A32bit˥ѥåƤ֤
                (R<<24) | (G<<16) | (B<<8) | (A)

            // ­å
            MAO_MemoryFullCreate( void );
                򤯤Ĥ֤128Хñ̤ǳݤǤ뤫åƳݤǤΥ򻻽ФΥmalloc

            MAO_MemoryFullDestroy( void );
                MAO_MemoryFullCreateǳݤβ

memmot.h : ⡼
memmot.c : ⡼ؿ
    Ϥ˥⡼ǡե졼ʬŸƤ򻲾Ȥ뤳Ȥǽ֤ڸ륷ƥࡣ
    ϥΤߤλѤˤʤäΤòƤ(16ʤ)

    struct MEMMOT_DATA : ⡼Ÿǡ򰷤¤
    struct MEMMOT_CTRL : Ѥ湽¤
                
        MEMMOT_GetAbsRot( MEMMOT_CTRL*);
            ⡼ǡ椫鸽ߺƤ⡼κ֤ˤäžǡƬ֤                

        MEMMOT_SetMotion( MEMMOT_CTRL*, int, int);
            ⡼ؤ

        MEMMOT_SetMotionSpeed( MEMMOT_CTRL*, float);
            ®٤ѹ(̤) : ®ٻꤷޤȤ˺Ǥʤ

        MEMMOT_AdjustMotion( MEMMOT_CTRL *mmt_ctrl);
            㥹ȵǽ
            
        MEMMOT_QuatSlerp( FVECTOR *res, FVECTOR *from, FVECTOR *to, float t )
            ˥
        
        MEMMOT_ActMotion( MEMMOT_CTRL* mmt_ctrl);
            ˥֤ޤ᤿žι

        MEMMOT_ActMotion2( MOTION_CONTROL*, DG_OBJS*, FVECTOR* );
            :ǥȿ

        MEMMOT_CheckObject_IsEnd( MEMMOT_CTRL*, int);
            ⡼λå
                
        MEMMOT_MakeMotion( MEMMOT_CTRL*);
            ⡼

        MEMMOT_MakeMotionSkip( MEMMOT_CTRL*);
            ̳åѥ⡼
                
        MEMMOT_InitMotion( MEMMOT_CTRL*, MEMMOT_DATA*, OBJECT*, int);
            ⡼楷ƥ 

	MEMMOT_GetMotionData( int motion, int* pnMotNum, int* pnFlame );
            ⡼ե졼

        MEMMOT_MotionPreCalloc( MEMMOT_DATA*, int, int);
            ⡼ե졼׻
                
        MEMMOT_FreeWork(MEMMOT_DATA* );
            ⡼ǻѤ
                
        MEMMOT_CheckMotionTime( MEMMOT_CTRL* pmmCtrl, int time );
            time᤮Ƥ뤫ɤå
