diff --git a/saco/game/util.cpp b/saco/game/util.cpp index b23d3c3..70c94b5 100644 --- a/saco/game/util.cpp +++ b/saco/game/util.cpp @@ -1835,3 +1835,83 @@ void __stdcall FUNC_100B6330(BYTE *pObject) FUNC_100B19D0(pObject); } } + +//----------------------------------------------------------- + +void FUNC_100B5260(MATRIX4X4 *pMatrix, float *pQuatOut) +{ + FUNC_100B4D70(pMatrix->right.X, pMatrix->right.Y, pMatrix->right.Z, + pMatrix->up.X, pMatrix->up.Y, pMatrix->up.Z, + pMatrix->at.X, pMatrix->at.Y, pMatrix->at.Z, + &pQuatOut[0], &pQuatOut[1], &pQuatOut[2], &pQuatOut[3]); +} + +//----------------------------------------------------------- + +void FUNC_100B5420(float *pQuat, MATRIX4X4 *pMatrix) +{ + FUNC_100B4F10(pQuat[0], pQuat[1], pQuat[2], pQuat[3], + &pMatrix->right.X, &pMatrix->right.Y, &pMatrix->right.Z, + &pMatrix->up.X, &pMatrix->up.Y, &pMatrix->up.Z, + &pMatrix->at.X, &pMatrix->at.Y, &pMatrix->at.Z); +} + +//----------------------------------------------------------- + +VECTOR VAR_10117400[3]; +DWORD VAR_10117424; + +void FUNC_100B57E0(int a1, int nIndex, int a3, int a4) +{ + VECTOR *pEntry = &VAR_10117400[nIndex]; + DWORD dwFunc = (iGtaVersion != GTASA_VERSION_USA10) ? 0x7EB800 : 0x7EB7C0; + + _asm push a4 + _asm push a3 + _asm push pEntry + _asm push a1 + _asm mov edx, dwFunc + _asm call edx + _asm pop edx + _asm pop edx + _asm pop edx + _asm pop edx +} + +//----------------------------------------------------------- + +void FUNC_100B5790(int a1, int nIndex, int a3) +{ + VECTOR *pEntry = &VAR_10117400[nIndex]; + + VAR_10117424 = (iGtaVersion != GTASA_VERSION_USA10) ? 0x7F2010 : 0x7F1FD0; + + _asm push 1 + _asm push a3 + _asm push pEntry + _asm push a1 + _asm mov ebx, VAR_10117424 + _asm call ebx + _asm pop ebx + _asm pop ebx + _asm pop ebx + _asm pop ebx +} + +//----------------------------------------------------------- + +void FUNC_100B5740(int a1, int a2) +{ + VAR_1026DF88 = (iGtaVersion != GTASA_VERSION_USA10) ? 0x7F20B0 : 0x7F2070; + VAR_1026DF80 = a2; + VAR_1026DF84 = a1; + + _asm pushad + _asm push VAR_1026DF80 + _asm push VAR_1026DF84 + _asm mov edx, VAR_1026DF88 + _asm call edx + _asm pop edx + _asm pop edx + _asm popad +} diff --git a/saco/game/util.h b/saco/game/util.h index a054960..5e820f1 100644 --- a/saco/game/util.h +++ b/saco/game/util.h @@ -157,6 +157,16 @@ void FUNC_100B56F0(int a1, int a2, int a3); // .text:100B56F0 void FUNC_100B62B0(BYTE *pObject); // .text:100B62B0 BOOL __stdcall FUNC_100B62F0(BYTE *pObject); // .text:100B62F0 void __stdcall FUNC_100B6330(BYTE *pObject); // .text:100B6330 +void FUNC_100B4D70(float m00, float m01, float m02, float m10, float m11, float m12, + float m20, float m21, float m22, float *pW, float *pX, float *pY, float *pZ); // .text:100B4D70, todo: implement +void FUNC_100B4F10(float w, float x, float y, float z, float *pM00, float *pM01, + float *pM02, float *pM10, float *pM11, float *pM12, float *pM20, float *pM21, + float *pM22); // .text:100B4F10, todo: implement +void FUNC_100B5260(MATRIX4X4 *pMatrix, float *pQuatOut); // .text:100B5260 +void FUNC_100B5420(float *pQuat, MATRIX4X4 *pMatrix); // .text:100B5420 +void FUNC_100B57E0(int a1, int nIndex, int a3, int a4); // .text:100B57E0 +void FUNC_100B5790(int a1, int nIndex, int a3); // .text:100B5790 +void FUNC_100B5740(int a1, int a2); // .text:100B5740 void FUNC_100B5210(int a1, void *a2); // .text:100B5210, __cdecl: the caller's // stack cleanup is folded into the next call's argument setup