2019-05-15 14:52:37 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "Physical.h"
|
2019-05-29 16:06:33 +00:00
|
|
|
#include "Weapon.h"
|
2019-06-18 12:55:39 +00:00
|
|
|
#include "PedStats.h"
|
2019-06-20 11:22:44 +00:00
|
|
|
#include "PedType.h"
|
|
|
|
#include "PedIK.h"
|
2019-06-16 18:39:48 +00:00
|
|
|
#include "AnimManager.h"
|
|
|
|
#include "AnimBlendClumpData.h"
|
2019-06-20 11:22:44 +00:00
|
|
|
#include "AnimBlendAssociation.h"
|
|
|
|
#include "WeaponInfo.h"
|
2019-06-30 10:59:55 +00:00
|
|
|
#include "Fire.h"
|
2019-06-16 21:12:14 +00:00
|
|
|
|
|
|
|
struct CPathNode;
|
2019-05-29 16:06:33 +00:00
|
|
|
|
2019-06-24 14:57:54 +00:00
|
|
|
enum {
|
|
|
|
VEHICLE_ENTER_FRONT_RIGHT = 11,
|
|
|
|
VEHICLE_ENTER_REAR_RIGHT = 12,
|
|
|
|
VEHICLE_ENTER_FRONT_LEFT = 15,
|
|
|
|
VEHICLE_ENTER_REAR_LEFT = 16,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum PedLineUpPhase {
|
|
|
|
LINE_UP_TO_CAR_START,
|
|
|
|
LINE_UP_TO_CAR_END,
|
|
|
|
LINE_UP_TO_CAR_2
|
|
|
|
};
|
|
|
|
|
2019-06-20 11:22:44 +00:00
|
|
|
enum PedOnGroundState {
|
|
|
|
NO_PED,
|
|
|
|
PED_BELOW_PLAYER,
|
|
|
|
PED_ON_THE_FLOOR,
|
|
|
|
PED_DEAD_ON_THE_FLOOR
|
|
|
|
};
|
|
|
|
|
2019-05-28 06:39:36 +00:00
|
|
|
enum PedState
|
2019-05-15 14:52:37 +00:00
|
|
|
{
|
2019-05-30 12:50:54 +00:00
|
|
|
PED_NONE,
|
2019-05-28 06:39:36 +00:00
|
|
|
PED_IDLE,
|
|
|
|
PED_LOOK_ENTITY,
|
|
|
|
PED_LOOK_HEADING,
|
|
|
|
PED_WANDER_RANGE,
|
|
|
|
PED_WANDER_PATH,
|
|
|
|
PED_SEEK_POS,
|
|
|
|
PED_SEEK_ENTITY,
|
|
|
|
PED_FLEE_POS,
|
|
|
|
PED_FLEE_ENTITY,
|
|
|
|
PED_PURSUE,
|
|
|
|
PED_FOLLOW_PATH,
|
|
|
|
PED_SNIPER_MODE,
|
|
|
|
PED_ROCKET_ODE,
|
|
|
|
PED_DUMMY,
|
|
|
|
PED_PAUSE,
|
|
|
|
PED_ATTACK,
|
|
|
|
PED_FIGHT,
|
|
|
|
PED_FACE_PHONE,
|
|
|
|
PED_MAKE_CALL,
|
|
|
|
PED_CHAT,
|
|
|
|
PED_MUG,
|
|
|
|
PED_AIM_GUN,
|
|
|
|
PED_AI_CONTROL,
|
|
|
|
PED_SEEK_CAR,
|
|
|
|
PED_SEEK_IN_BOAT,
|
|
|
|
PED_FOLLOW_ROUTE,
|
|
|
|
PED_CPR,
|
|
|
|
PED_SOLICIT,
|
|
|
|
PED_BUY_ICECREAM,
|
|
|
|
PED_INVESTIGATE,
|
|
|
|
PED_STEP_AWAY,
|
|
|
|
PED_ON_FIRE,
|
2019-05-30 12:50:54 +00:00
|
|
|
|
|
|
|
PED_UNKNOWN, // HANG_OUT in Fire_Head's idb
|
|
|
|
|
|
|
|
PED_STATES_NO_AI,
|
2019-05-28 06:39:36 +00:00
|
|
|
PED_JUMP,
|
|
|
|
PED_FALL,
|
|
|
|
PED_GETUP,
|
|
|
|
PED_STAGGER,
|
|
|
|
PED_DIVE_AWAY,
|
2019-05-30 12:50:54 +00:00
|
|
|
|
2019-05-28 06:39:36 +00:00
|
|
|
PED_STATES_NO_ST,
|
|
|
|
PED_ENTER_TRAIN,
|
|
|
|
PED_EXIT_TRAIN,
|
|
|
|
PED_ARREST_PLAYER,
|
|
|
|
PED_DRIVING,
|
|
|
|
PED_PASSENGER,
|
|
|
|
PED_TAXI_PASSENGER,
|
|
|
|
PED_OPEN_DOOR,
|
2019-06-27 16:45:16 +00:00
|
|
|
PED_DIE = 48,
|
|
|
|
PED_DEAD = 49,
|
2019-05-28 06:39:36 +00:00
|
|
|
PED_CARJACK,
|
|
|
|
PED_DRAG_FROM_CAR,
|
|
|
|
PED_ENTER_CAR,
|
|
|
|
PED_STEAL_CAR,
|
|
|
|
PED_EXIT_CAR,
|
|
|
|
PED_HANDS_UP,
|
2019-06-27 16:45:16 +00:00
|
|
|
PED_ARRESTED = 56,
|
2019-05-15 14:52:37 +00:00
|
|
|
};
|
|
|
|
|
2019-05-29 16:06:33 +00:00
|
|
|
enum {
|
|
|
|
PEDMOVE_NONE,
|
|
|
|
PEDMOVE_STILL,
|
|
|
|
PEDMOVE_WALK,
|
|
|
|
PEDMOVE_RUN,
|
|
|
|
PEDMOVE_SPRINT,
|
|
|
|
};
|
|
|
|
|
2019-05-15 14:52:37 +00:00
|
|
|
class CVehicle;
|
|
|
|
|
|
|
|
class CPed : public CPhysical
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// 0x128
|
2019-05-19 19:28:10 +00:00
|
|
|
CStoredCollPoly m_collPoly;
|
|
|
|
float m_fCollisionSpeed;
|
2019-06-28 16:19:00 +00:00
|
|
|
uint8 bIsStanding : 1;
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagA2 : 1;
|
2019-06-18 12:34:27 +00:00
|
|
|
uint8 m_ped_flagA4 : 1; // stores (CTimer::GetTimeInMilliseconds() < m_lastHitTime)
|
2019-06-24 14:57:54 +00:00
|
|
|
uint8 bIsPointingGunAt : 1;
|
2019-06-19 12:20:50 +00:00
|
|
|
uint8 bIsLooking : 1;
|
2019-06-20 11:22:44 +00:00
|
|
|
uint8 m_ped_flagA20 : 1; // "look" method? - probably missing in SA
|
2019-06-19 12:20:50 +00:00
|
|
|
uint8 bIsRestoringLook : 1;
|
|
|
|
uint8 bIsAimingGun : 1;
|
2019-06-30 21:50:40 +00:00
|
|
|
|
2019-06-19 12:20:50 +00:00
|
|
|
uint8 bIsRestoringGun : 1;
|
|
|
|
uint8 bCanPointGunAtTarget : 1;
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagB4 : 1;
|
|
|
|
uint8 m_ped_flagB8 : 1;
|
|
|
|
uint8 m_ped_flagB10 : 1;
|
|
|
|
uint8 m_ped_flagB20 : 1;
|
|
|
|
uint8 m_ped_flagB40 : 1;
|
|
|
|
uint8 m_ped_flagB80 : 1;
|
2019-06-30 21:50:40 +00:00
|
|
|
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagC1 : 1;
|
|
|
|
uint8 m_ped_flagC2 : 1;
|
|
|
|
uint8 m_ped_flagC4 : 1;
|
|
|
|
uint8 m_ped_flagC8 : 1;
|
|
|
|
uint8 m_ped_flagC10 : 1;
|
2019-06-17 09:48:42 +00:00
|
|
|
uint8 m_ped_flagC20 : 1; // just left some body part?
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagC40 : 1;
|
|
|
|
uint8 m_ped_flagC80 : 1;
|
2019-06-30 21:50:40 +00:00
|
|
|
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagD1 : 1;
|
|
|
|
uint8 m_ped_flagD2 : 1;
|
|
|
|
uint8 m_ped_flagD4 : 1;
|
|
|
|
uint8 m_ped_flagD8 : 1;
|
|
|
|
uint8 m_ped_flagD10 : 1;
|
|
|
|
uint8 m_ped_flagD20 : 1;
|
|
|
|
uint8 m_ped_flagD40 : 1;
|
|
|
|
uint8 m_ped_flagD80 : 1;
|
2019-06-30 21:50:40 +00:00
|
|
|
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagE1 : 1;
|
|
|
|
uint8 m_ped_flagE2 : 1;
|
|
|
|
uint8 m_ped_flagE4 : 1;
|
2019-06-21 18:16:51 +00:00
|
|
|
uint8 m_ped_flagE8 : 1; // can duck?
|
2019-06-28 16:19:00 +00:00
|
|
|
uint8 bCantFireBecauseCrouched : 1; // set if you don't want ped to attack
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagE20 : 1;
|
2019-06-28 16:19:00 +00:00
|
|
|
uint8 bDoBloodyFootprints : 1;
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagE80 : 1;
|
2019-06-30 21:50:40 +00:00
|
|
|
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagF1 : 1;
|
|
|
|
uint8 m_ped_flagF2 : 1;
|
|
|
|
uint8 m_ped_flagF4 : 1;
|
|
|
|
uint8 m_ped_flagF8 : 1;
|
|
|
|
uint8 m_ped_flagF10 : 1;
|
|
|
|
uint8 m_ped_flagF20 : 1;
|
|
|
|
uint8 m_ped_flagF40 : 1;
|
|
|
|
uint8 m_ped_flagF80 : 1;
|
2019-06-30 21:50:40 +00:00
|
|
|
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagG1 : 1;
|
|
|
|
uint8 m_ped_flagG2 : 1;
|
|
|
|
uint8 m_ped_flagG4 : 1;
|
|
|
|
uint8 m_ped_flagG8 : 1;
|
|
|
|
uint8 m_ped_flagG10 : 1;
|
|
|
|
uint8 m_ped_flagG20 : 1;
|
|
|
|
uint8 m_ped_flagG40 : 1;
|
|
|
|
uint8 m_ped_flagG80 : 1;
|
2019-06-30 21:50:40 +00:00
|
|
|
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagH1 : 1;
|
|
|
|
uint8 m_ped_flagH2 : 1;
|
|
|
|
uint8 m_ped_flagH4 : 1;
|
|
|
|
uint8 m_ped_flagH8 : 1;
|
|
|
|
uint8 m_ped_flagH10 : 1;
|
|
|
|
uint8 m_ped_flagH20 : 1;
|
|
|
|
uint8 m_ped_flagH40 : 1;
|
|
|
|
uint8 m_ped_flagH80 : 1;
|
2019-06-30 21:50:40 +00:00
|
|
|
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagI1 : 1;
|
|
|
|
uint8 m_ped_flagI2 : 1;
|
|
|
|
uint8 m_ped_flagI4 : 1;
|
2019-06-22 18:16:29 +00:00
|
|
|
uint8 bRecordedForReplay : 1;
|
2019-05-19 19:28:10 +00:00
|
|
|
uint8 m_ped_flagI10 : 1;
|
|
|
|
uint8 m_ped_flagI20 : 1;
|
|
|
|
uint8 m_ped_flagI40 : 1;
|
|
|
|
uint8 m_ped_flagI80 : 1;
|
2019-06-30 10:59:55 +00:00
|
|
|
uint8 stuff10[3];
|
|
|
|
uint8 m_nCreatedBy;
|
2019-06-30 21:50:40 +00:00
|
|
|
uint8 field_161;
|
|
|
|
uint8 pad_162[2];
|
|
|
|
uint32 m_objective;
|
|
|
|
uint32 m_prevObjective;
|
|
|
|
CPed* m_field_16C;
|
|
|
|
uint32 field_170;
|
|
|
|
uint32 field_174;
|
|
|
|
uint32 field_178;
|
|
|
|
uint32 field_17C;
|
|
|
|
uint32 field_180;
|
|
|
|
uint32 m_pedFormation;
|
|
|
|
uint32 m_fearFlags;
|
|
|
|
CEntity *m_threatEntity;
|
|
|
|
CVector2D m_eventOrThread;
|
|
|
|
uint32 m_eventType;
|
|
|
|
CEntity* m_pEventEntity;
|
2019-06-15 15:53:25 +00:00
|
|
|
float m_fAngleToEvent;
|
2019-06-14 14:14:22 +00:00
|
|
|
AnimBlendFrameData *m_pFrames[PED_NODE_MAX];
|
2019-06-24 14:57:54 +00:00
|
|
|
AssocGroupId m_animGroup;
|
|
|
|
CAnimBlendAssociation *m_pVehicleAnim;
|
2019-06-14 12:33:08 +00:00
|
|
|
CVector2D m_vecAnimMoveDelta;
|
|
|
|
CVector m_vecOffsetSeek;
|
|
|
|
CPedIK m_pedIK;
|
2019-06-30 21:50:40 +00:00
|
|
|
float m_actionX;
|
|
|
|
float m_actionY;
|
2019-06-16 18:39:48 +00:00
|
|
|
uint32 m_nPedStateTimer;
|
2019-06-20 11:22:44 +00:00
|
|
|
PedState m_nPedState;
|
2019-06-24 14:57:54 +00:00
|
|
|
PedState m_nLastPedState;
|
2019-05-29 16:06:33 +00:00
|
|
|
int32 m_nMoveState;
|
2019-06-14 23:34:19 +00:00
|
|
|
int32 m_nStoredActionState;
|
|
|
|
int32 m_nPrevActionState;
|
|
|
|
int32 m_nWaitState;
|
2019-06-30 21:50:40 +00:00
|
|
|
uint32 m_nWaitTimer;
|
|
|
|
void *m_pPathNodesStates[8];
|
|
|
|
CVector2D m_stPathNodeStates[10];
|
2019-06-14 23:34:19 +00:00
|
|
|
uint16 m_nPathNodes;
|
|
|
|
uint8 m_nCurPathNode;
|
|
|
|
int8 m_nPathState;
|
|
|
|
private:
|
|
|
|
int8 _pad2B5[3];
|
|
|
|
public:
|
|
|
|
CPathNode *m_pNextPathNode;
|
|
|
|
CPathNode *m_pLastPathNode;
|
2019-06-16 22:16:38 +00:00
|
|
|
float m_fHealth;
|
|
|
|
float m_fArmour;
|
2019-06-30 21:50:40 +00:00
|
|
|
int16 m_routeLastPoint;
|
|
|
|
uint16 m_routePoints;
|
|
|
|
uint16 m_routePos;
|
|
|
|
uint16 m_routeType;
|
|
|
|
uint16 m_routeCurDir;
|
|
|
|
uint16 field_2D2;
|
|
|
|
float m_movedX;
|
|
|
|
float m_movedY;
|
2019-06-17 09:48:42 +00:00
|
|
|
float m_fRotationCur;
|
|
|
|
float m_fRotationDest;
|
2019-07-01 16:26:46 +00:00
|
|
|
float m_headingRate;
|
2019-06-24 14:57:54 +00:00
|
|
|
uint16 m_vehEnterType;
|
|
|
|
uint16 m_walkAroundType;
|
2019-05-15 14:52:37 +00:00
|
|
|
CEntity *m_pCurrentPhysSurface;
|
|
|
|
CVector m_vecOffsetFromPhysSurface;
|
|
|
|
CEntity *m_pCurSurface;
|
2019-06-30 21:50:40 +00:00
|
|
|
CVector m_vecSeekVehicle;
|
2019-06-27 12:01:55 +00:00
|
|
|
CEntity *m_pSeekTarget;
|
2019-05-15 14:52:37 +00:00
|
|
|
CVehicle *m_pMyVehicle;
|
2019-06-16 22:16:38 +00:00
|
|
|
bool bInVehicle;
|
2019-06-30 21:50:40 +00:00
|
|
|
uint8 pad_315[3];
|
|
|
|
uint32 field_318;
|
|
|
|
uint8 field_31C;
|
|
|
|
uint8 field_31D;
|
|
|
|
int16 m_phoneId;
|
|
|
|
uint32 m_lookingForPhone;
|
|
|
|
uint32 m_phoneTalkTimer;
|
|
|
|
void *m_lastAccident;
|
2019-05-15 14:52:37 +00:00
|
|
|
int32 m_nPedType;
|
2019-06-19 16:35:51 +00:00
|
|
|
CPedStats *m_pedStats;
|
2019-06-30 21:50:40 +00:00
|
|
|
float m_fleeFromPosX;
|
|
|
|
float m_fleeFromPosY;
|
|
|
|
CEntity *m_fleeFrom;
|
|
|
|
uint32 m_fleeTimer;
|
|
|
|
uint32 field_344;
|
|
|
|
uint32 m_lastThreatTimer;
|
2019-05-19 19:28:10 +00:00
|
|
|
CEntity *m_pCollidingEntity;
|
2019-06-30 21:50:40 +00:00
|
|
|
uint8 m_stateUnused;
|
|
|
|
uint8 pad_351[3];
|
|
|
|
uint32 m_timerUnused;
|
|
|
|
CEntity *m_targetUnused;
|
2019-06-21 18:16:51 +00:00
|
|
|
CWeapon m_weapons[NUM_PED_WEAPONTYPES];
|
2019-06-24 14:57:54 +00:00
|
|
|
eWeaponType m_storedWeapon;
|
2019-06-21 18:16:51 +00:00
|
|
|
uint8 m_currentWeapon; // eWeaponType
|
|
|
|
uint8 m_maxWeaponTypeAllowed; // eWeaponType
|
2019-06-30 21:50:40 +00:00
|
|
|
uint8 m_wepSkills;
|
|
|
|
uint8 m_wepAccuracy;
|
|
|
|
CEntity *m_pPointGunAt;
|
2019-06-14 12:33:08 +00:00
|
|
|
CVector m_vecHitLastPos;
|
2019-06-30 21:50:40 +00:00
|
|
|
uint32 m_lastHitState;
|
|
|
|
uint8 m_fightFlags1;
|
|
|
|
uint8 m_fightFlags2;
|
|
|
|
uint8 pad_4B2[2];
|
2019-06-30 10:59:55 +00:00
|
|
|
CFire* m_pFire;
|
2019-06-19 12:06:13 +00:00
|
|
|
CEntity *m_pLookTarget;
|
2019-06-14 12:33:08 +00:00
|
|
|
float m_fLookDirection;
|
|
|
|
int32 m_wepModelID;
|
2019-06-15 15:53:25 +00:00
|
|
|
uint32 m_leaveCarTimer;
|
|
|
|
uint32 m_getUpTimer;
|
|
|
|
uint32 m_lookTimer;
|
2019-06-18 12:34:27 +00:00
|
|
|
uint32 m_standardTimer;
|
|
|
|
uint32 m_attackTimer;
|
|
|
|
uint32 m_lastHitTime;
|
2019-06-21 18:16:51 +00:00
|
|
|
uint32 m_hitRecoverTimer;
|
|
|
|
uint32 field_4E0;
|
|
|
|
uint32 m_duckTimer;
|
2019-06-30 21:50:40 +00:00
|
|
|
uint32 field_4E8;
|
2019-06-28 16:19:00 +00:00
|
|
|
int32 m_bloodyFootprintCount;
|
|
|
|
uint8 stuff9[2];
|
2019-06-30 21:50:40 +00:00
|
|
|
int8 m_bodyPartBleeding; // PedNode
|
2019-06-16 18:39:48 +00:00
|
|
|
uint8 m_field_4F3;
|
|
|
|
CPed *m_nearPeds[10];
|
2019-06-20 11:22:44 +00:00
|
|
|
uint16 m_numNearPeds;
|
2019-06-30 21:50:40 +00:00
|
|
|
int8 m_lastWepDam;
|
|
|
|
uint8 pad_51F;
|
|
|
|
uint8 field_520;
|
|
|
|
uint8 pad_521[3];
|
|
|
|
uint32 m_talkTimer;
|
|
|
|
uint16 m_talkTypeLast;
|
|
|
|
uint16 m_talkType;
|
|
|
|
CVector m_vecSeekPosEx;
|
|
|
|
float m_seekExAngle;
|
2019-05-15 14:52:37 +00:00
|
|
|
|
2019-06-02 15:13:56 +00:00
|
|
|
static void *operator new(size_t);
|
2019-06-30 10:59:55 +00:00
|
|
|
static void *operator new(size_t, int);
|
2019-06-02 15:13:56 +00:00
|
|
|
static void operator delete(void*, size_t);
|
2019-06-30 13:20:11 +00:00
|
|
|
static void operator delete(void*, int);
|
2019-05-19 19:28:10 +00:00
|
|
|
|
2019-06-30 21:50:40 +00:00
|
|
|
CPed(uint32 pedType);
|
|
|
|
virtual ~CPed(void);
|
2019-06-30 10:59:55 +00:00
|
|
|
|
2019-06-30 21:50:40 +00:00
|
|
|
virtual void SetModelIndex(uint32 mi);
|
|
|
|
virtual void ProcessControl(void);
|
|
|
|
virtual void Teleport(CVector);
|
|
|
|
virtual void PreRender(void);
|
|
|
|
virtual void Render(void);
|
|
|
|
virtual bool SetupLighting(void);
|
|
|
|
virtual void RemoveLighting(bool);
|
|
|
|
virtual void FlagToDestroyWhenNextProcessed(void);
|
|
|
|
virtual int32 ProcessEntityCollision(CEntity*, CColPoint*);
|
|
|
|
virtual void SetMoveAnim(void);
|
|
|
|
|
|
|
|
CPed* ctor(uint32 pedType) { return ::new (this) CPed(pedType); }
|
2019-06-30 10:59:55 +00:00
|
|
|
void dtor(void) { this->CPed::~CPed(); }
|
|
|
|
|
2019-06-19 12:06:13 +00:00
|
|
|
bool IsPlayer(void);
|
2019-05-28 06:39:36 +00:00
|
|
|
bool UseGroundColModel(void);
|
2019-06-24 14:57:54 +00:00
|
|
|
bool CanSetPedState(void);
|
2019-06-14 12:33:08 +00:00
|
|
|
void AddWeaponModel(int id);
|
2019-06-20 11:22:44 +00:00
|
|
|
void AimGun(void);
|
2019-05-19 19:28:10 +00:00
|
|
|
void KillPedWithCar(CVehicle *veh, float impulse);
|
2019-06-16 21:12:14 +00:00
|
|
|
void Say(uint16 audio);
|
2019-06-27 12:01:55 +00:00
|
|
|
void SetLookFlag(CEntity *target, bool unknown);
|
2019-06-19 12:06:13 +00:00
|
|
|
void SetLookFlag(float direction, bool unknown);
|
2019-06-16 18:39:48 +00:00
|
|
|
void SetLookTimer(int time);
|
2019-06-15 15:53:25 +00:00
|
|
|
void SetDie(AnimationId anim, float arg1, float arg2);
|
|
|
|
void ApplyHeadShot(eWeaponType weaponType, CVector pos, bool evenOnPlayer);
|
2019-06-16 21:12:14 +00:00
|
|
|
void RemoveBodyPart(PedNode nodeId, int8 unknown);
|
|
|
|
void SpawnFlyingComponent(int, int8 unknown);
|
2019-06-19 12:06:13 +00:00
|
|
|
bool OurPedCanSeeThisOne(CEntity *target);
|
2019-06-17 09:48:42 +00:00
|
|
|
void Avoid(void);
|
2019-06-20 11:22:44 +00:00
|
|
|
void Attack(void);
|
|
|
|
void ClearAimFlag(void);
|
|
|
|
void ClearLookFlag(void);
|
|
|
|
void RestorePreviousState(void);
|
|
|
|
void ClearAttack(void);
|
|
|
|
bool IsPedHeadAbovePos(float zOffset);
|
2019-06-21 18:16:51 +00:00
|
|
|
void RemoveWeaponModel(int modelId);
|
2019-07-01 16:26:46 +00:00
|
|
|
void SetCurrentWeapon(uint32 weaponType);
|
2019-06-21 18:16:51 +00:00
|
|
|
bool SelectGunIfArmed(void);
|
|
|
|
void Duck(void);
|
|
|
|
void ClearDuck(void);
|
|
|
|
void ClearPointGunAt(void);
|
2019-06-24 14:57:54 +00:00
|
|
|
void BeingDraggedFromCar(void);
|
|
|
|
void RestartNonPartialAnims(void);
|
|
|
|
void LineUpPedWithCar(PedLineUpPhase phase);
|
|
|
|
void SetPedPositionInCar(void);
|
2019-06-28 16:19:00 +00:00
|
|
|
void PlayFootSteps(void);
|
2019-06-30 10:59:55 +00:00
|
|
|
void QuitEnteringCar(void);
|
2019-06-30 21:50:40 +00:00
|
|
|
bool IsPointerValid(void);
|
|
|
|
void SortPeds(CPed**, int, int);
|
|
|
|
void BuildPedLists(void);
|
2019-07-01 16:26:46 +00:00
|
|
|
void GiveWeapon(eWeaponType weaponType, uint32 ammo);
|
2019-06-30 21:50:40 +00:00
|
|
|
void SetPedStats(ePedStats);
|
2019-06-24 14:57:54 +00:00
|
|
|
static void GetLocalPositionToOpenCarDoor(CVector *output, CVehicle *veh, uint32 enterType, float offset);
|
|
|
|
static void GetPositionToOpenCarDoor(CVector *output, CVehicle *veh, uint32 enterType, float seatPosMult);
|
|
|
|
static void GetPositionToOpenCarDoor(CVector* output, CVehicle* veh, uint32 enterType);
|
2019-06-15 15:53:25 +00:00
|
|
|
static RwObject *SetPedAtomicVisibilityCB(RwObject *object, void *data);
|
|
|
|
static RwFrame *RecurseFrameChildrenVisibilityCB(RwFrame *frame, void *data);
|
2019-06-24 22:42:23 +00:00
|
|
|
static void PedGetupCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedStaggerCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedEvadeCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void FinishDieAnimCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void FinishedWaitCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void FinishLaunchCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void FinishHitHeadCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedAnimGetInCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedAnimDoorOpenCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedAnimPullPedOutCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedAnimDoorCloseCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void SetInCarCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedSetOutCarCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedAnimAlignCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedSetDraggedOutCarCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedAnimStepOutCarCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedSetInTrainCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedSetOutTrainCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void FinishedAttackCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void FinishFightMoveCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedAnimDoorCloseRollingCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void FinishJumpCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedLandCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void RestoreHeadingRateCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedSetQuickDraggedOutCarPositionCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
static void PedSetDraggedOutCarPositionCB(CAnimBlendAssociation *assoc, void *arg);
|
2019-06-15 15:53:25 +00:00
|
|
|
|
2019-07-01 16:26:46 +00:00
|
|
|
inline bool HasWeapon(uint32 weaponType) { return m_weapons[weaponType].m_eWeaponType == weaponType; }
|
|
|
|
inline CWeapon *GetWeapon(uint32 weaponType) { return &m_weapons[weaponType]; }
|
|
|
|
inline CWeapon *GetWeapon(void) { return &m_weapons[m_currentWeapon]; }
|
|
|
|
inline RwFrame *GetNodeFrame(int nodeId) { return m_pFrames[nodeId]->frame; }
|
2019-06-16 18:39:48 +00:00
|
|
|
|
2019-06-30 21:50:40 +00:00
|
|
|
// to make patching virtual functions possible
|
|
|
|
void SetModelIndex_(uint32 mi) { CPed::SetModelIndex(mi); }
|
|
|
|
void FlagToDestroyWhenNextProcessed_(void) { CPed::FlagToDestroyWhenNextProcessed(); }
|
|
|
|
|
|
|
|
// set by 0482:set_threat_reaction_range_multiplier opcode
|
|
|
|
static uint16 &distanceMultToCountPedNear;
|
|
|
|
|
2019-06-24 14:57:54 +00:00
|
|
|
static CVector &offsetToOpenRegularCarDoor;
|
|
|
|
static CVector &offsetToOpenLowCarDoor;
|
|
|
|
static CVector &offsetToOpenVanDoor;
|
2019-06-16 22:16:38 +00:00
|
|
|
static bool &bNastyLimbsCheat;
|
|
|
|
static bool &bPedCheat2;
|
|
|
|
static bool &bPedCheat3;
|
2019-05-15 14:52:37 +00:00
|
|
|
};
|
2019-06-20 11:22:44 +00:00
|
|
|
|
2019-06-24 22:42:23 +00:00
|
|
|
void FinishFuckUCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
|
2019-05-15 14:52:37 +00:00
|
|
|
static_assert(offsetof(CPed, m_nPedState) == 0x224, "CPed: error");
|
|
|
|
static_assert(offsetof(CPed, m_pCurSurface) == 0x2FC, "CPed: error");
|
|
|
|
static_assert(offsetof(CPed, m_pMyVehicle) == 0x310, "CPed: error");
|
|
|
|
static_assert(offsetof(CPed, m_nPedType) == 0x32C, "CPed: error");
|
2019-05-19 19:28:10 +00:00
|
|
|
static_assert(offsetof(CPed, m_pCollidingEntity) == 0x34C, "CPed: error");
|
2019-05-29 16:06:33 +00:00
|
|
|
static_assert(offsetof(CPed, m_weapons) == 0x35C, "CPed: error");
|
|
|
|
static_assert(offsetof(CPed, m_currentWeapon) == 0x498, "CPed: error");
|
2019-06-15 15:53:25 +00:00
|
|
|
static_assert(offsetof(CPed, m_lookTimer) == 0x4CC, "CPed: error");
|
|
|
|
static_assert(offsetof(CPed, m_bodyPartBleeding) == 0x4F2, "CPed: error");
|
2019-06-16 18:39:48 +00:00
|
|
|
static_assert(offsetof(CPed, m_field_16C) == 0x16C, "CPed: error");
|
|
|
|
static_assert(offsetof(CPed, m_pEventEntity) == 0x19C, "CPed: error");
|
2019-06-02 15:13:56 +00:00
|
|
|
static_assert(sizeof(CPed) == 0x53C, "CPed: error");
|