Vector3 CBaseEntity::Position(int Bone)
{
if (this->ReadBoneMatrix())
{
Vector3 Pos;
Pos.Init();
Pos.x = *(float*)((DWORD)this->BoneMatrix + 0x30 * Bone + 0x0C);
Pos.z = *(float*)((DWORD)this->BoneMatrix + 0x30 * Bone + 0x1C);
Pos.y = *(float*)((DWORD)this->BoneMatrix + 0x30 * Bone + 0x2C);
return Pos;
}
}
DWORD CBaseEntity::ReadBoneMatrix()
{
this->BoneMatrix = *(DWORD*)((DWORD)this->Base + Offsets::m_dwBoneMatrix);
return this->BoneMatrix;
}
Vector3 CBaseEntity::Position(int Bone)
{
if (this->ReadBoneMatrix())
{
Vector3 Pos;
Pos.Init();
Pos.x = *(float*)((DWORD)this->BoneMatrix + 0x30 * Bone + 0x0C);
Pos.z = *(float*)((DWORD)this->BoneMatrix + 0x30 * Bone + 0x1C);
Pos.y = *(float*)((DWORD)this->BoneMatrix + 0x30 * Bone + 0x2C);
return Pos;
}
}
DWORD CBaseEntity::ReadBoneMatrix()
{
this->BoneMatrix = *(DWORD*)((DWORD)this->Base + Offsets::m_dwBoneMatrix);
return this->BoneMatrix;
}
Vector CBaseEntity::GetBonePosition( int iBone )
{
matrix3x4_t boneMatrixes[128];
if ( this->SetupBones( boneMatrixes, 128, 0x100, 0 ) )
{
matrix3x4_t boneMatrix = boneMatrixes[iBone];
return Vector( boneMatrix.m_flMatVal[0][3], boneMatrix.m_flMatVal[1][3], boneMatrix.m_flMatVal[2][3] );
}
else return Vector( 0, 0, 0 );
}
bool CBaseEntity::SetupBones( matrix3x4_t *pBoneToWorldOut, int nMaxBones, int boneMask, float currentTime )
{
__asm
{
mov edi, this
lea ecx, dword ptr ds : [edi + 0x4]
mov edx, dword ptr ds : [ecx]
push currentTime
push boneMask
push nMaxBones
push pBoneToWorldOut
call dword ptr ds : [edx + 0x34]
}
}