From: <ec...@us...> - 2002-08-26 00:30:05
|
Update of /cvsroot/decaldev/source/Decal In directory usw-pr-cvs1:/tmp/cvs-serv30078 Modified Files: ACHooks.h ACHooks.cpp Log Message: Upload for Madar, hooks in the new FaceHeading stuff Index: ACHooks.h =================================================================== RCS file: /cvsroot/decaldev/source/Decal/ACHooks.h,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** ACHooks.h 22 Jul 2002 19:15:40 -0000 1.12 --- ACHooks.h 26 Aug 2002 00:30:02 -0000 1.13 *************** *** 100,103 **** --- 100,108 ---- long m_lMoveItemEx; + bool m_bFaceHeading; + long m_lMovementThingyParent; + long m_lMovementThingyOffset; + long m_lFaceHeading; + public: STDMETHOD(MoveItemEx)(long lObjectID, long lDestinationID); *************** *** 131,134 **** --- 136,140 ---- STDMETHOD(DropItem)(long lObjectID); STDMETHOD(get_HooksAvail)(long *pVal) ; + STDMETHOD(FaceHeading)(float fHeading, VARIANT_BOOL bUnknown, VARIANT_BOOL *pRetval); }; Index: ACHooks.cpp =================================================================== RCS file: /cvsroot/decaldev/source/Decal/ACHooks.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ACHooks.cpp 22 Jul 2002 21:01:39 -0000 1.11 --- ACHooks.cpp 26 Aug 2002 00:30:02 -0000 1.12 *************** *** 30,33 **** --- 30,34 ---- m_bPointerState = false; m_bMoveItemEx = false; + m_bFaceHeading = false; m_Hooks = 0 ; *************** *** 204,207 **** --- 205,232 ---- pfnMoveItemEx = reinterpret_cast< void (*)(DWORD, DWORD, DWORD) >( Val ); } + + m_lMovementThingyParent = m_lMovementThingyOffset = m_lFaceHeading = 0; + + if( QueryMemLoc( _bstr_t( "MovementThingyParent" ), &Val ) == S_OK) + { + m_lMovementThingyParent = Val; + } + + if( QueryMemLoc( _bstr_t( "MovementThingyOffset" ), &Val ) == S_OK) + { + m_lMovementThingyOffset = Val; + } + + if( QueryMemLoc( _bstr_t( "FaceHeading" ), &Val ) == S_OK) + { + m_lFaceHeading = Val; + } + + if (m_lMovementThingyParent && m_lMovementThingyOffset && m_lFaceHeading) + { + m_bFaceHeading = true; + + m_Hooks |= eFaceHeading; + } } *************** *** 941,944 **** --- 966,1001 ---- add esp, 0x0C } + + return S_OK; + } + + // Turn to a particular heading, discovered by Madar on 8/25/2002 + STDMETHODIMP cACHooks::FaceHeading (float fHeading, VARIANT_BOOL bUnknown, VARIANT_BOOL *pRetval) + { + if (!m_bFaceHeading) + { + *pRetval = VARIANT_FALSE; + return S_FALSE; + } + + DWORD dwTemp = m_lFaceHeading; + + DWORD ** pTemp = (DWORD **) m_lMovementThingyParent; + + DWORD dwMovementThingy = pTemp[0][m_lMovementThingyOffset]; + long lResult = 0; + + DWORD dwSecondArg = (bUnknown == VARIANT_TRUE) ? 1 : 0; + + __asm + { + mov ecx,dwMovementThingy + push dwSecondArg + push fHeading + call dwTemp + mov lResult, eax + } + + *pRetval = lResult ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; |