summaryrefslogtreecommitdiffstats
path: root/src/peds
diff options
context:
space:
mode:
authoraap <aap@papnet.eu>2020-05-20 12:40:59 +0200
committerGitHub <noreply@github.com>2020-05-20 12:40:59 +0200
commit98b158c783e7e010b19aee22e452f1233a8f1ec2 (patch)
tree675e1d491bd8f9cb80c707fbba45ae41005a4d31 /src/peds
parentMerge pull request #567 from erorcun/miami (diff)
parentsync with upstream (diff)
downloadre3-98b158c783e7e010b19aee22e452f1233a8f1ec2.tar
re3-98b158c783e7e010b19aee22e452f1233a8f1ec2.tar.gz
re3-98b158c783e7e010b19aee22e452f1233a8f1ec2.tar.bz2
re3-98b158c783e7e010b19aee22e452f1233a8f1ec2.tar.lz
re3-98b158c783e7e010b19aee22e452f1233a8f1ec2.tar.xz
re3-98b158c783e7e010b19aee22e452f1233a8f1ec2.tar.zst
re3-98b158c783e7e010b19aee22e452f1233a8f1ec2.zip
Diffstat (limited to 'src/peds')
-rw-r--r--src/peds/Ped.cpp38
-rw-r--r--src/peds/Ped.h62
2 files changed, 70 insertions, 30 deletions
diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp
index 15c72330..12870236 100644
--- a/src/peds/Ped.cpp
+++ b/src/peds/Ped.cpp
@@ -595,9 +595,6 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
#ifdef KANGAROO_CHEAT
m_ped_flagI80 = false;
#endif
-#ifdef VC_PED_PORTS
- bSomeVCflag1 = false;
-#endif
m_gangFlags = 0xFF;
@@ -605,6 +602,10 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
bTurnedAroundOnAttractor = false;
bCarPassenger = false;
bMiamiViceCop = false;
+#ifdef VC_PED_PORTS
+ bHeadStuckInCollision = false;
+#endif
+ bIsPlayerFriend = true;
bDeadPedInFrontOfCar = false;
if ((CGeneral::GetRandomNumber() & 3) == 0)
@@ -10659,7 +10660,7 @@ CPed::ProcessControl(void)
flyDir = 1;
}
- if (flyDir != 0 && !bSomeVCflag1) {
+ if (flyDir != 0 && !bHeadStuckInCollision) {
SetPosition((flyDir == 2 ? obstacleForFlyingOtherDir.point : obstacleForFlying.point));
GetMatrix().GetPosition().z += FEET_OFFSET;
GetMatrix().UpdateRW();
@@ -10766,11 +10767,11 @@ CPed::ProcessControl(void)
if (CWorld::ProcessVerticalLine(offsetToCheck, GetPosition().z - FEET_OFFSET, foundCol, foundEnt, true, true, false, true, false, false, nil)) {
#ifdef VC_PED_PORTS
- if (!bSomeVCflag1 || FEET_OFFSET + foundCol.point.z < GetPosition().z) {
+ if (!bHeadStuckInCollision || FEET_OFFSET + foundCol.point.z < GetPosition().z) {
GetMatrix().GetPosition().z = FEET_OFFSET + foundCol.point.z;
GetMatrix().UpdateRW();
- if (bSomeVCflag1)
- bSomeVCflag1 = false;
+ if (bHeadStuckInCollision)
+ bHeadStuckInCollision = false;
}
#else
GetMatrix().GetPosition().z = FEET_OFFSET + foundCol.point.z;
@@ -10840,15 +10841,15 @@ CPed::ProcessControl(void)
if (IsPedInControl() && !bIsStanding && !m_pDamageEntity && CheckIfInTheAir()) {
SetInTheAir();
#ifdef VC_PED_PORTS
- bSomeVCflag1 = false;
+ bHeadStuckInCollision = false;
#endif
}
#ifdef VC_PED_PORTS
- if (bSomeVCflag1) {
+ if (bHeadStuckInCollision) {
CVector posToCheck = GetPosition();
posToCheck.z += 0.9f;
if (!CWorld::TestSphereAgainstWorld(posToCheck, 0.2f, this, true, true, false, true, false, false))
- bSomeVCflag1 = false;
+ bHeadStuckInCollision = false;
}
#endif
ProcessObjective();
@@ -15337,10 +15338,10 @@ CPed::ProcessEntityCollision(CEntity *collidingEnt, CColPoint *collidingPoints)
if (CCollision::IsStoredPolyStillValidVerticalLine(pos, potentialGroundZ, intersectionPoint, &m_collPoly)) {
bStillOnValidPoly = true;
#ifdef VC_PED_PORTS
- if(!bSomeVCflag1 || FEET_OFFSET + intersectionPoint.point.z < GetPosition().z) {
+ if(!bHeadStuckInCollision || FEET_OFFSET + intersectionPoint.point.z < GetPosition().z) {
GetMatrix().GetPosition().z = FEET_OFFSET + intersectionPoint.point.z;
- if (bSomeVCflag1)
- bSomeVCflag1 = false;
+ if (bHeadStuckInCollision)
+ bHeadStuckInCollision = false;
}
#else
GetMatrix().GetPosition().z = FEET_OFFSET + intersectionPoint.point.z;
@@ -15415,10 +15416,10 @@ CPed::ProcessEntityCollision(CEntity *collidingEnt, CColPoint *collidingPoints)
}
}
#ifdef VC_PED_PORTS
- if (!bSomeVCflag1 || FEET_OFFSET + intersectionPoint.point.z < GetPosition().z) {
+ if (!bHeadStuckInCollision || FEET_OFFSET + intersectionPoint.point.z < GetPosition().z) {
GetMatrix().GetPosition().z = FEET_OFFSET + intersectionPoint.point.z;
- if (bSomeVCflag1)
- bSomeVCflag1 = false;
+ if (bHeadStuckInCollision)
+ bHeadStuckInCollision = false;
}
#else
GetMatrix().GetPosition().z = FEET_OFFSET + intersectionPoint.point.z;
@@ -15505,7 +15506,7 @@ CPed::ProcessEntityCollision(CEntity *collidingEnt, CColPoint *collidingPoints)
sphereNormal.x = -m_vecMoveSpeed.x / Max(0.001f, speed);
sphereNormal.y = -m_vecMoveSpeed.y / Max(0.001f, speed);
GetMatrix().GetPosition().z -= 0.05f;
- bSomeVCflag1 = true;
+ bHeadStuckInCollision = true;
}
#endif
sphereNormal.Normalise();
@@ -16039,8 +16040,9 @@ CPed::SetSolicit(uint32 time)
}
bool
-CPed::SetFollowPath(CVector dest)
+CPed::SetFollowPath(CVector dest, float radius, eMoveState state, CEntity* pFollowedPed, CEntity*, int time)
{
+ // TODO(MIAMI): new follow
if (m_nPedState == PED_FOLLOW_PATH)
return false;
diff --git a/src/peds/Ped.h b/src/peds/Ped.h
index bc61d170..f5e6d95a 100644
--- a/src/peds/Ped.h
+++ b/src/peds/Ped.h
@@ -429,23 +429,54 @@ public:
uint32 bVehExitWillBeInstant : 1;
uint32 bHasAlreadyBeenRecorded : 1;
uint32 bFallenDown : 1;
-#ifdef VC_PED_PORTS
- uint32 bSomeVCflag1 : 1;
-#endif
#ifdef PED_SKIN
uint32 bDontAcceptIKLookAts : 1; // TODO: find uses of this
#endif
+ uint32 bReachedAttractorHeadingTarget : 1;
+ uint32 bTurnedAroundOnAttractor : 1;
+
+ uint32 bHasAlreadyUsedAttractor : 1;
+ //uint32 b155_2
+ uint32 bCarPassenger : 1;
+ //uint32 b155_8
+ //uint32 b155_10
+ uint32 bMiamiViceCop : 1;
+ //uint32 b155_40
+ //uint32 b155_80
+
+ //uint32 b156_1
+ //uint32 b156_2
+ //uint32 b156_4
+ //uint32 b156_8
+ uint32 bIsPlayerFriend : 1;
+#ifdef VC_PED_PORTS
+ uint32 bHeadStuckInCollision : 1;
+#endif
+ uint32 bDeadPedInFrontOfCar : 1;
+ //uint32 b156_80
+
+ //uint32 b157_1
+ //uint32 b157_2
+ //uint32 b157_4
+ //uint32 b157_8
+ //uint32 b157_10
+ //uint32 b157_20
+ //uint32 b157_40
+ //uint32 b157_80
+
+ //uint32 b158_1
+ //uint32 b158_2
+ //uint32 b158_4
+ //uint32 b158_8
+ //uint32 b158_10
+ //uint32 b158_20
+ //uint32 b158_40
+ //uint32 b158_80
+
// our own flags
uint32 m_ped_flagI40 : 1; // bMakePedsRunToPhonesToReportCrimes makes use of this as runover by car indicator
uint32 m_ped_flagI80 : 1; // KANGAROO_CHEAT define makes use of this as cheat toggle
- uint32 bReachedAttractorHeadingTarget : 1; // 0x154 0x40
- uint32 bTurnedAroundOnAttractor : 1; // 0x154 0x80
- uint32 bHasAlreadyUsedAttractor : 1; // 0x155 0x1
- uint32 bCarPassenger : 1; // 0x155 0x4
- uint32 bMiamiViceCop : 1; // 0x155 0x20
- uint32 bDeadPedInFrontOfCar : 1; // 0x156 0x40
-
uint8 m_gangFlags;
uint8 CharCreatedBy;
eObjective m_objective;
@@ -678,7 +709,9 @@ public:
void SetPointGunAt(CEntity*);
bool Seek(void);
bool SetWanderPath(int8);
- bool SetFollowPath(CVector);
+ bool SetFollowPath(CVector dest, float radius, eMoveState state, CEntity*, CEntity*, int);
+ bool SetFollowPathStatic(void);
+ bool SetFollowPathDynamic(void);
void ClearAttackByRemovingAnim(void);
void SetStoredState(void);
void StopNonPartialAnims(void);
@@ -886,7 +919,12 @@ public:
CWeapon *GetWeapon(void) { return &m_weapons[m_currentWeapon]; }
PedState GetPedState(void) { return m_nPedState; }
- void SetPedState(PedState state) { m_nPedState = state; }
+ void SetPedState(PedState state)
+ {
+ if (GetPedState() == PED_FOLLOW_PATH)
+ ClearFollowPath();
+ m_nPedState = state;
+ }
bool Dead(void) { return m_nPedState == PED_DEAD; }
bool Dying(void) { return m_nPedState == PED_DIE; }
bool DyingOrDead(void) { return m_nPedState == PED_DIE || m_nPedState == PED_DEAD; }