summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerorcun <erorcunerorcun@hotmail.com.tr>2021-08-20 21:26:19 +0300
committererorcun <erorcunerorcun@hotmail.com.tr>2021-08-20 21:26:19 +0300
commit0256790e1c18826d383f8e1eec134b2c5cecd044 (patch)
treeae6d79b8cb52db2840709c90647550c3b7221c62
parent8b7f469ae14545b75ea24fee474f5b2a4c6a9bdf (diff)
Fix some auto-aim problems
-rw-r--r--src/peds/PedIK.cpp10
-rw-r--r--src/peds/PlayerPed.cpp6
2 files changed, 11 insertions, 5 deletions
diff --git a/src/peds/PedIK.cpp b/src/peds/PedIK.cpp
index cf2e4ed5..3bc5796b 100644
--- a/src/peds/PedIK.cpp
+++ b/src/peds/PedIK.cpp
@@ -205,9 +205,15 @@ CPedIK::PointGunInDirection(float targetYaw, float targetPitch)
else if (status == ANGLES_SET_EXACTLY)
m_flags |= GUN_POINTED_SUCCESSFULLY;
}
- RwMatrix *m = GetBoneMatrix(m_ped, BONE_spine); // BUG: game uses index 2 directly, which happens to be identical to BONE_spine
+#ifdef FIX_BUGS
+ RwMatrix *m = GetBoneMatrix(m_ped, BONE_spine);
+#else
+ RpHAnimHierarchy* hier = GetAnimHierarchyFromSkinClump(m_ped->GetClump());
+ RwMatrix *mats = RpHAnimHierarchyGetMatrixArray(hier);
+ RwMatrix *m = &mats[2];
+#endif
RwV3d axis = { 0.0f, 0.0f, 0.0f };
- float axisangle = -CGeneral::LimitRadianAngle(Atan2(-m->at.y, -m->at.x) - m_ped->m_fRotationCur);
+ float axisangle = -CGeneral::LimitRadianAngle(Atan2(-m->up.y, -m->up.x) - m_ped->m_fRotationCur);
axis.y = -Sin(axisangle);
axis.z = Cos(axisangle);
diff --git a/src/peds/PlayerPed.cpp b/src/peds/PlayerPed.cpp
index b0b82640..e486d4ce 100644
--- a/src/peds/PlayerPed.cpp
+++ b/src/peds/PlayerPed.cpp
@@ -1057,7 +1057,7 @@ CPlayerPed::FindNextWeaponLockOnTarget(CEntity *previousTarget, bool lookToLeft)
// nextTarget = nil; // duplicate
float lastCloseness = -10000.0f;
// CGeneral::GetATanOfXY(GetForward().x, GetForward().y); // unused
- CVector distVec = previousTarget->GetPosition() - GetPosition();
+ CVector distVec = previousTarget->GetPosition() - TheCamera.GetPosition();
float referenceBeta = CGeneral::GetATanOfXY(distVec.x, distVec.y);
for (int h = CPools::GetPedPool()->GetSize() - 1; h >= 0; h--) {
@@ -1069,7 +1069,7 @@ CPlayerPed::FindNextWeaponLockOnTarget(CEntity *previousTarget, bool lookToLeft)
&& (!pedToCheck->bInVehicle || (pedToCheck->m_pMyVehicle && pedToCheck->m_pMyVehicle->IsBike()))
#endif
&& pedToCheck->m_leader != this && !pedToCheck->bNeverEverTargetThisPed
- && OurPedCanSeeThisOne(pedToCheck) && CanIKReachThisTarget(pedToCheck->GetPosition(), GetWeapon(), true)) {
+ && OurPedCanSeeThisOne(pedToCheck, true) && CanIKReachThisTarget(pedToCheck->GetPosition(), GetWeapon(), true)) {
EvaluateNeighbouringTarget(pedToCheck, &nextTarget, &lastCloseness,
weaponRange, referenceBeta, lookToLeft, IsThisPedAnAimingPriority(pedToCheck));
@@ -1195,7 +1195,7 @@ CPlayerPed::ProcessAnimGroups(void)
GetWeapon()->m_eWeaponType == WEAPONTYPE_MINIGUN)
groupToSet = ASSOCGRP_PLAYERCHAINSAW;
else if (GetWeapon()->m_eWeaponType != WEAPONTYPE_COLT45 && GetWeapon()->m_eWeaponType != WEAPONTYPE_UZI
- // I hope this is a inlined function...
+ // I hope this is an inlined function...
&& GetWeapon()->m_eWeaponType != WEAPONTYPE_PYTHON && GetWeapon()->m_eWeaponType != WEAPONTYPE_TEC9
&& GetWeapon()->m_eWeaponType != WEAPONTYPE_SILENCED_INGRAM && GetWeapon()->m_eWeaponType != WEAPONTYPE_MP5
&& GetWeapon()->m_eWeaponType != WEAPONTYPE_GOLFCLUB && GetWeapon()->m_eWeaponType != WEAPONTYPE_KATANA