/*

    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᤮Ƥ뤫ɤå

