2019-05-15 16:52:37 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "Physical.h"
|
2019-05-29 18:06:33 +02:00
|
|
|
#include "Weapon.h"
|
2019-06-18 14:55:39 +02:00
|
|
|
#include "PedStats.h"
|
2019-06-20 13:22:44 +02:00
|
|
|
#include "PedType.h"
|
|
|
|
#include "PedIK.h"
|
2019-06-16 20:39:48 +02:00
|
|
|
#include "AnimManager.h"
|
|
|
|
#include "AnimBlendClumpData.h"
|
2019-06-20 13:22:44 +02:00
|
|
|
#include "AnimBlendAssociation.h"
|
|
|
|
#include "WeaponInfo.h"
|
2019-06-30 12:59:55 +02:00
|
|
|
#include "Fire.h"
|
2019-07-28 19:39:39 +02:00
|
|
|
#include "DMAudio.h"
|
2019-08-23 00:44:38 +02:00
|
|
|
#include "EventList.h"
|
2019-06-16 23:12:14 +02:00
|
|
|
|
|
|
|
struct CPathNode;
|
2019-09-16 19:32:58 +02:00
|
|
|
class CAccident;
|
2019-05-29 18:06:33 +02:00
|
|
|
|
2019-07-28 19:39:39 +02:00
|
|
|
struct CPedAudioData
|
|
|
|
{
|
|
|
|
int m_nFixedDelayTime;
|
|
|
|
int m_nOverrideFixedDelayTime;
|
|
|
|
int m_nOverrideMaxRandomDelayTime;
|
|
|
|
int m_nMaxRandomDelayTime;
|
|
|
|
};
|
|
|
|
|
2019-09-03 18:53:04 +02:00
|
|
|
enum FightState : int8 {
|
|
|
|
FIGHTSTATE_MOVE_FINISHED = -2,
|
|
|
|
FIGHTSTATE_JUST_ATTACKED,
|
|
|
|
FIGHTSTATE_NO_MOVE,
|
|
|
|
FIGHTSTATE_1
|
|
|
|
};
|
|
|
|
|
2019-08-05 15:07:10 +02:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
ENDFIGHT_NORMAL,
|
|
|
|
ENDFIGHT_WITH_A_STEP,
|
|
|
|
ENDFIGHT_FAST
|
|
|
|
};
|
|
|
|
|
2019-08-13 00:30:31 +02:00
|
|
|
enum PedRouteType
|
|
|
|
{
|
|
|
|
PEDROUTE_STOP_WHEN_DONE = 1,
|
|
|
|
PEDROUTE_GO_BACKWARD_WHEN_DONE,
|
|
|
|
PEDROUTE_GO_TO_START_WHEN_DONE
|
|
|
|
};
|
|
|
|
|
2019-07-25 17:06:24 +02:00
|
|
|
struct FightMove
|
|
|
|
{
|
|
|
|
AnimationId animId;
|
|
|
|
float startFireTime;
|
|
|
|
float endFireTime;
|
|
|
|
float comboFollowOnTime;
|
|
|
|
float strikeRadius;
|
|
|
|
uint8 hitLevel;
|
|
|
|
uint8 damage;
|
|
|
|
uint8 flags;
|
|
|
|
};
|
|
|
|
static_assert(sizeof(FightMove) == 0x18, "FightMove: error");
|
|
|
|
|
2019-09-16 19:32:58 +02:00
|
|
|
// TO-DO: This is eFightState on mobile.
|
2019-07-25 17:06:24 +02:00
|
|
|
enum PedFightMoves
|
|
|
|
{
|
|
|
|
FIGHTMOVE_NULL,
|
2019-07-28 19:39:39 +02:00
|
|
|
// Attacker
|
2019-07-25 17:06:24 +02:00
|
|
|
FIGHTMOVE_STDPUNCH,
|
|
|
|
FIGHTMOVE_IDLE,
|
|
|
|
FIGHTMOVE_SHUFFLE_F,
|
|
|
|
FIGHTMOVE_KNEE,
|
|
|
|
FIGHTMOVE_HEADBUTT,
|
|
|
|
FIGHTMOVE_PUNCHJAB,
|
|
|
|
FIGHTMOVE_PUNCHHOOK,
|
|
|
|
FIGHTMOVE_KICK,
|
|
|
|
FIGHTMOVE_LONGKICK,
|
|
|
|
FIGHTMOVE_ROUNDHOUSE,
|
|
|
|
FIGHTMOVE_BODYBLOW,
|
|
|
|
FIGHTMOVE_GROUNDKICK,
|
2019-07-28 19:39:39 +02:00
|
|
|
// Opponent
|
2019-07-25 17:06:24 +02:00
|
|
|
FIGHTMOVE_HITFRONT,
|
|
|
|
FIGHTMOVE_HITBACK,
|
|
|
|
FIGHTMOVE_HITRIGHT,
|
|
|
|
FIGHTMOVE_HITLEFT,
|
|
|
|
FIGHTMOVE_HITBODY,
|
|
|
|
FIGHTMOVE_HITCHEST,
|
|
|
|
FIGHTMOVE_HITHEAD,
|
|
|
|
FIGHTMOVE_HITBIGSTEP,
|
|
|
|
FIGHTMOVE_HITONFLOOR,
|
|
|
|
FIGHTMOVE_HITBEHIND,
|
|
|
|
FIGHTMOVE_IDLE2NORM
|
|
|
|
};
|
|
|
|
|
2019-07-18 04:26:46 +02:00
|
|
|
enum ePedPieceTypes
|
|
|
|
{
|
2019-07-18 04:41:57 +02:00
|
|
|
PEDPIECE_TORSO,
|
|
|
|
PEDPIECE_MID,
|
2019-07-18 04:26:46 +02:00
|
|
|
PEDPIECE_LEFTARM,
|
|
|
|
PEDPIECE_RIGHTARM,
|
|
|
|
PEDPIECE_LEFTLEG,
|
|
|
|
PEDPIECE_RIGHTLEG,
|
|
|
|
PEDPIECE_HEAD,
|
|
|
|
};
|
|
|
|
|
2019-07-10 08:06:43 +02:00
|
|
|
enum eWaitState {
|
2019-07-06 00:44:49 +02:00
|
|
|
WAITSTATE_FALSE,
|
|
|
|
WAITSTATE_TRAFFIC_LIGHTS,
|
|
|
|
WAITSTATE_CROSS_ROAD,
|
|
|
|
WAITSTATE_CROSS_ROAD_LOOK,
|
|
|
|
WAITSTATE_LOOK_PED,
|
|
|
|
WAITSTATE_LOOK_SHOP,
|
|
|
|
WAITSTATE_LOOK_ACCIDENT,
|
|
|
|
WAITSTATE_FACEOFF_GANG,
|
|
|
|
WAITSTATE_DOUBLEBACK,
|
|
|
|
WAITSTATE_HITWALL,
|
|
|
|
WAITSTATE_TURN180,
|
|
|
|
WAITSTATE_SURPRISE,
|
|
|
|
WAITSTATE_STUCK,
|
|
|
|
WAITSTATE_LOOK_ABOUT,
|
|
|
|
WAITSTATE_PLAYANIM_DUCK,
|
|
|
|
WAITSTATE_PLAYANIM_COWER,
|
|
|
|
WAITSTATE_PLAYANIM_TAXI,
|
|
|
|
WAITSTATE_PLAYANIM_HANDSUP,
|
|
|
|
WAITSTATE_PLAYANIM_HANDSCOWER,
|
|
|
|
WAITSTATE_PLAYANIM_CHAT,
|
|
|
|
WAITSTATE_FINISH_FLEE
|
|
|
|
};
|
|
|
|
|
|
|
|
enum eObjective : uint32 {
|
2019-07-03 18:34:42 +02:00
|
|
|
OBJECTIVE_NONE,
|
|
|
|
OBJECTIVE_IDLE,
|
|
|
|
OBJECTIVE_FLEE_TILL_SAFE,
|
|
|
|
OBJECTIVE_GUARD_SPOT,
|
2019-09-26 23:01:50 +02:00
|
|
|
OBJECTIVE_GUARD_AREA, // not implemented
|
2019-07-03 18:34:42 +02:00
|
|
|
OBJECTIVE_WAIT_IN_CAR,
|
|
|
|
OBJECTIVE_WAIT_IN_CAR_THEN_GETOUT,
|
|
|
|
OBJECTIVE_KILL_CHAR_ON_FOOT,
|
|
|
|
OBJECTIVE_KILL_CHAR_ANY_MEANS,
|
|
|
|
OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE,
|
|
|
|
OBJECTIVE_FLEE_CHAR_ON_FOOT_ALWAYS,
|
|
|
|
OBJECTIVE_GOTO_CHAR_ON_FOOT,
|
|
|
|
OBJECTIVE_FOLLOW_PED_IN_FORMATION,
|
|
|
|
OBJECTIVE_LEAVE_VEHICLE,
|
|
|
|
OBJECTIVE_ENTER_CAR_AS_PASSENGER,
|
|
|
|
OBJECTIVE_ENTER_CAR_AS_DRIVER,
|
2019-09-26 23:01:50 +02:00
|
|
|
OBJECTIVE_FOLLOW_CAR_IN_CAR, // seems not implemented so far
|
|
|
|
OBJECTIVE_FIRE_AT_OBJ_FROM_VEHICLE, // not implemented
|
|
|
|
OBJECTIVE_DESTROY_OBJ, // not implemented
|
2019-07-03 18:34:42 +02:00
|
|
|
OBJECTIVE_DESTROY_CAR,
|
|
|
|
OBJECTIVE_GOTO_AREA_ANY_MEANS,
|
|
|
|
OBJECTIVE_GOTO_AREA_ON_FOOT,
|
|
|
|
OBJECTIVE_RUN_TO_AREA,
|
2019-09-26 23:01:50 +02:00
|
|
|
OBJECTIVE_23, // not implemented
|
|
|
|
OBJECTIVE_24, // not implemented
|
2019-07-03 18:34:42 +02:00
|
|
|
OBJECTIVE_FIGHT_CHAR,
|
|
|
|
OBJECTIVE_SET_LEADER,
|
|
|
|
OBJECTIVE_FOLLOW_ROUTE,
|
|
|
|
OBJECTIVE_SOLICIT,
|
|
|
|
OBJECTIVE_HAIL_TAXI,
|
|
|
|
OBJECTIVE_CATCH_TRAIN,
|
|
|
|
OBJECTIVE_BUY_ICE_CREAM,
|
|
|
|
OBJECTIVE_STEAL_ANY_CAR,
|
|
|
|
OBJECTIVE_MUG_CHAR,
|
|
|
|
OBJECTIVE_FLEE_CAR,
|
2019-09-26 23:01:50 +02:00
|
|
|
#ifdef VC_PED_PORTS
|
|
|
|
OBJECTIVE_LEAVE_CAR_AND_DIE
|
|
|
|
#endif
|
2019-07-03 18:34:42 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
2019-07-05 14:23:39 +02:00
|
|
|
RANDOM_CHAR = 1,
|
|
|
|
MISSION_CHAR,
|
2019-07-03 18:34:42 +02:00
|
|
|
};
|
|
|
|
|
2019-06-24 16:57:54 +02:00
|
|
|
enum PedLineUpPhase {
|
|
|
|
LINE_UP_TO_CAR_START,
|
|
|
|
LINE_UP_TO_CAR_END,
|
2019-09-16 19:32:58 +02:00
|
|
|
LINE_UP_TO_CAR_2 // Buggy. Used for cops arresting you from passenger door
|
2019-06-24 16:57:54 +02:00
|
|
|
};
|
|
|
|
|
2019-06-20 13:22:44 +02:00
|
|
|
enum PedOnGroundState {
|
|
|
|
NO_PED,
|
2019-08-05 15:07:10 +02:00
|
|
|
PED_IN_FRONT_OF_ATTACKER,
|
2019-06-20 13:22:44 +02:00
|
|
|
PED_ON_THE_FLOOR,
|
|
|
|
PED_DEAD_ON_THE_FLOOR
|
|
|
|
};
|
|
|
|
|
2019-05-28 08:39:36 +02:00
|
|
|
enum PedState
|
2019-05-15 16:52:37 +02:00
|
|
|
{
|
2019-05-30 14:50:54 +02:00
|
|
|
PED_NONE,
|
2019-05-28 08:39:36 +02: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 14:50:54 +02:00
|
|
|
|
|
|
|
PED_UNKNOWN, // HANG_OUT in Fire_Head's idb
|
|
|
|
|
|
|
|
PED_STATES_NO_AI,
|
2019-05-28 08:39:36 +02:00
|
|
|
PED_JUMP,
|
|
|
|
PED_FALL,
|
|
|
|
PED_GETUP,
|
|
|
|
PED_STAGGER,
|
|
|
|
PED_DIVE_AWAY,
|
2019-05-30 14:50:54 +02:00
|
|
|
|
2019-05-28 08:39:36 +02: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-07-05 14:23:39 +02:00
|
|
|
PED_DIE,
|
|
|
|
PED_DEAD,
|
2019-05-28 08:39:36 +02:00
|
|
|
PED_CARJACK,
|
|
|
|
PED_DRAG_FROM_CAR,
|
|
|
|
PED_ENTER_CAR,
|
|
|
|
PED_STEAL_CAR,
|
|
|
|
PED_EXIT_CAR,
|
|
|
|
PED_HANDS_UP,
|
2019-07-05 14:23:39 +02:00
|
|
|
PED_ARRESTED,
|
2019-05-15 16:52:37 +02:00
|
|
|
};
|
|
|
|
|
2019-07-03 18:34:42 +02:00
|
|
|
enum eMoveState {
|
2019-05-29 18:06:33 +02:00
|
|
|
PEDMOVE_NONE,
|
|
|
|
PEDMOVE_STILL,
|
|
|
|
PEDMOVE_WALK,
|
|
|
|
PEDMOVE_RUN,
|
|
|
|
PEDMOVE_SPRINT,
|
|
|
|
};
|
|
|
|
|
2019-05-15 16:52:37 +02:00
|
|
|
class CVehicle;
|
|
|
|
|
|
|
|
class CPed : public CPhysical
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// 0x128
|
2019-05-19 21:28:10 +02:00
|
|
|
CStoredCollPoly m_collPoly;
|
|
|
|
float m_fCollisionSpeed;
|
2019-07-05 14:23:39 +02:00
|
|
|
|
|
|
|
// cf. https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPed.h from R*
|
2019-06-28 18:19:00 +02:00
|
|
|
uint8 bIsStanding : 1;
|
2019-09-29 18:44:51 +02:00
|
|
|
uint8 m_ped_flagA2 : 1; // bWasStanding?
|
2019-09-03 18:53:04 +02:00
|
|
|
uint8 bIsAttacking : 1; // doesn't reset after fist fight
|
2019-06-24 16:57:54 +02:00
|
|
|
uint8 bIsPointingGunAt : 1;
|
2019-06-19 14:20:50 +02:00
|
|
|
uint8 bIsLooking : 1;
|
2019-08-23 00:44:38 +02:00
|
|
|
uint8 bKeepTryingToLook : 1; // if we can't look somewhere due to unreachable angles
|
2019-06-19 14:20:50 +02:00
|
|
|
uint8 bIsRestoringLook : 1;
|
|
|
|
uint8 bIsAimingGun : 1;
|
2019-06-30 23:50:40 +02:00
|
|
|
|
2019-06-19 14:20:50 +02:00
|
|
|
uint8 bIsRestoringGun : 1;
|
|
|
|
uint8 bCanPointGunAtTarget : 1;
|
2019-07-06 00:44:49 +02:00
|
|
|
uint8 bIsTalking : 1;
|
|
|
|
uint8 bIsInTheAir : 1;
|
|
|
|
uint8 bIsLanding : 1;
|
2019-09-03 18:53:04 +02:00
|
|
|
uint8 bIsRunning : 1; // on some conditions
|
|
|
|
uint8 bHitSomethingLastFrame : 1;
|
2019-09-29 18:44:51 +02:00
|
|
|
uint8 m_ped_flagB80 : 1; // bIsNearCar? it's sure that it's related with cars and used for deciding whether we should move
|
2019-06-30 23:50:40 +02:00
|
|
|
|
2019-09-29 18:44:51 +02:00
|
|
|
uint8 m_ped_flagC1 : 1; // bCanPedEnterSeekedCar?
|
2019-07-06 00:44:49 +02:00
|
|
|
uint8 bRespondsToThreats : 1;
|
2019-07-18 04:26:46 +02:00
|
|
|
uint8 bRenderPedInCar : 1;
|
|
|
|
uint8 bChangedSeat : 1;
|
2019-07-25 17:06:24 +02:00
|
|
|
uint8 bUpdateAnimHeading : 1;
|
2019-07-18 04:26:46 +02:00
|
|
|
uint8 bBodyPartJustCameOff : 1;
|
2019-05-19 21:28:10 +02:00
|
|
|
uint8 m_ped_flagC40 : 1;
|
2019-08-23 00:44:38 +02:00
|
|
|
uint8 bFindNewNodeAfterStateRestore : 1;
|
2019-06-30 23:50:40 +02:00
|
|
|
|
2019-09-13 21:04:55 +02:00
|
|
|
uint8 bHasACamera : 1; // does ped possess a camera to document accidents involves fire/explosion
|
|
|
|
uint8 m_ped_flagD2 : 1; // set when ped witnessed an event
|
2019-09-29 18:44:51 +02:00
|
|
|
uint8 bPedIsBleeding : 1;
|
|
|
|
uint8 bStopAndShoot : 1; // Ped cannot reach target to attack with fist, need to use gun
|
2019-07-18 04:26:46 +02:00
|
|
|
uint8 bIsPedDieAnimPlaying : 1;
|
2019-08-17 14:44:25 +02:00
|
|
|
uint8 bUsePedNodeSeek : 1;
|
2019-09-29 18:44:51 +02:00
|
|
|
uint8 bObjectiveCompleted : 1;
|
2019-07-25 22:34:29 +02:00
|
|
|
uint8 bScriptObjectiveCompleted : 1;
|
2019-06-30 23:50:40 +02:00
|
|
|
|
2019-07-25 17:06:24 +02:00
|
|
|
uint8 bKindaStayInSamePlace : 1;
|
2019-09-29 18:44:51 +02:00
|
|
|
uint8 m_ped_flagE2 : 1; // bBeingChasedByPolice?
|
2019-07-06 00:44:49 +02:00
|
|
|
uint8 bNotAllowedToDuck : 1;
|
|
|
|
uint8 bCrouchWhenShooting : 1;
|
2019-09-03 18:53:04 +02:00
|
|
|
uint8 bIsDucking : 1;
|
2019-07-25 17:06:24 +02:00
|
|
|
uint8 bGetUpAnimStarted : 1;
|
2019-06-28 18:19:00 +02:00
|
|
|
uint8 bDoBloodyFootprints : 1;
|
2019-09-13 21:04:55 +02:00
|
|
|
uint8 bFleeAfterExitingCar : 1;
|
2019-06-30 23:50:40 +02:00
|
|
|
|
2019-09-03 18:53:04 +02:00
|
|
|
uint8 bWanderPathAfterExitingCar : 1;
|
2019-05-19 21:28:10 +02:00
|
|
|
uint8 m_ped_flagF2 : 1;
|
2019-09-13 21:04:55 +02:00
|
|
|
uint8 m_ped_flagF4 : 1; // Unfinished feature from VC, probably bDontDragMeOutCar
|
2019-05-19 21:28:10 +02:00
|
|
|
uint8 m_ped_flagF8 : 1;
|
2019-08-02 00:04:30 +02:00
|
|
|
uint8 bWillBeQuickJacked : 1;
|
2019-09-05 21:59:44 +02:00
|
|
|
uint8 bCancelEnteringCar : 1; // after door is opened or couldn't be opened due to it's locked
|
2019-09-29 18:44:51 +02:00
|
|
|
uint8 bObstacleShowedUpDuringKillObjective : 1;
|
2019-08-02 00:04:30 +02:00
|
|
|
uint8 bDuckAndCover : 1;
|
2019-06-30 23:50:40 +02:00
|
|
|
|
2019-10-03 03:02:02 +02:00
|
|
|
uint8 bStillOnValidPoly : 1;
|
2019-05-19 21:28:10 +02:00
|
|
|
uint8 m_ped_flagG2 : 1;
|
2019-10-03 03:02:02 +02:00
|
|
|
uint8 m_ped_flagG4 : 1; // bResetWalkAnims?
|
2019-09-03 18:53:04 +02:00
|
|
|
uint8 bStartWanderPathOnFoot : 1; // exits the car if he's in it, reset after path found
|
2019-10-03 03:02:02 +02:00
|
|
|
uint8 bOnBoat : 1; // not just driver, may be just standing
|
2019-09-12 14:35:05 +02:00
|
|
|
uint8 bBusJacked : 1;
|
2019-09-13 21:04:55 +02:00
|
|
|
uint8 bGonnaKillTheCarJacker : 1; // only set when car is jacked from right door
|
2019-09-03 18:53:04 +02:00
|
|
|
uint8 bFadeOut : 1;
|
2019-06-30 23:50:40 +02:00
|
|
|
|
2019-10-05 20:50:02 +02:00
|
|
|
uint8 m_ped_flagH1 : 1;
|
2019-10-03 03:02:02 +02:00
|
|
|
uint8 bHitSteepSlope : 1; // has ped collided/is standing on a steep slope (surface type)
|
2019-05-19 21:28:10 +02:00
|
|
|
uint8 m_ped_flagH4 : 1;
|
2019-07-25 17:06:24 +02:00
|
|
|
uint8 bClearObjective : 1;
|
2019-10-03 03:02:02 +02:00
|
|
|
uint8 m_ped_flagH10 : 1; // bTryingToReachDryLand? reset when we landed on something not vehicle and object
|
2019-09-12 14:35:05 +02:00
|
|
|
uint8 bCollidedWithMyVehicle : 1;
|
2019-09-16 19:32:58 +02:00
|
|
|
uint8 bRichFromMugging : 1; // ped has lots of cash from mugging people - will drop money if someone points gun to him
|
2019-05-19 21:28:10 +02:00
|
|
|
uint8 m_ped_flagH80 : 1;
|
2019-06-30 23:50:40 +02:00
|
|
|
|
2019-08-17 14:44:25 +02:00
|
|
|
uint8 bShakeFist : 1; // test shake hand at look entity
|
2019-07-25 17:06:24 +02:00
|
|
|
uint8 bNoCriticalHits : 1; // if set, limbs won't came off
|
2019-09-29 18:44:51 +02:00
|
|
|
uint8 m_ped_flagI4 : 1; // seems like related with cars
|
2019-07-09 09:57:44 +02:00
|
|
|
uint8 bHasAlreadyBeenRecorded : 1;
|
2019-08-23 00:44:38 +02:00
|
|
|
uint8 bFallenDown : 1;
|
2019-10-05 20:50:02 +02:00
|
|
|
#ifdef VC_PED_PORTS
|
|
|
|
uint8 bKnockedUpIntoAir : 1; // has ped been knocked up into the air by a car collision
|
|
|
|
#else
|
2019-05-19 21:28:10 +02:00
|
|
|
uint8 m_ped_flagI20 : 1;
|
2019-10-05 20:50:02 +02:00
|
|
|
#endif
|
2019-05-19 21:28:10 +02:00
|
|
|
uint8 m_ped_flagI40 : 1;
|
|
|
|
uint8 m_ped_flagI80 : 1;
|
2019-07-05 14:23:39 +02:00
|
|
|
|
2019-06-30 12:59:55 +02:00
|
|
|
uint8 stuff10[3];
|
2019-07-05 14:23:39 +02:00
|
|
|
uint8 CharCreatedBy;
|
2019-06-30 23:50:40 +02:00
|
|
|
uint8 field_161;
|
|
|
|
uint8 pad_162[2];
|
2019-07-03 18:34:42 +02:00
|
|
|
eObjective m_objective;
|
|
|
|
eObjective m_prevObjective;
|
|
|
|
CPed *m_pedInObjective;
|
|
|
|
CVehicle *m_carInObjective;
|
2019-08-13 00:30:31 +02:00
|
|
|
CVector m_nextRoutePointPos;
|
2019-07-03 18:34:42 +02:00
|
|
|
CPed *m_leader;
|
2019-06-30 23:50:40 +02:00
|
|
|
uint32 m_pedFormation;
|
|
|
|
uint32 m_fearFlags;
|
|
|
|
CEntity *m_threatEntity;
|
2019-07-29 14:01:44 +02:00
|
|
|
CVector2D m_eventOrThreat;
|
2019-06-30 23:50:40 +02:00
|
|
|
uint32 m_eventType;
|
|
|
|
CEntity* m_pEventEntity;
|
2019-06-15 17:53:25 +02:00
|
|
|
float m_fAngleToEvent;
|
2019-06-14 16:14:22 +02:00
|
|
|
AnimBlendFrameData *m_pFrames[PED_NODE_MAX];
|
2019-06-24 16:57:54 +02:00
|
|
|
AssocGroupId m_animGroup;
|
|
|
|
CAnimBlendAssociation *m_pVehicleAnim;
|
2019-06-14 14:33:08 +02:00
|
|
|
CVector2D m_vecAnimMoveDelta;
|
|
|
|
CVector m_vecOffsetSeek;
|
|
|
|
CPedIK m_pedIK;
|
2019-06-30 23:50:40 +02:00
|
|
|
float m_actionX;
|
|
|
|
float m_actionY;
|
2019-06-16 20:39:48 +02:00
|
|
|
uint32 m_nPedStateTimer;
|
2019-06-20 13:22:44 +02:00
|
|
|
PedState m_nPedState;
|
2019-06-24 16:57:54 +02:00
|
|
|
PedState m_nLastPedState;
|
2019-07-03 18:34:42 +02:00
|
|
|
eMoveState m_nMoveState;
|
2019-07-25 17:06:24 +02:00
|
|
|
int32 m_nStoredMoveState;
|
|
|
|
int32 m_nPrevMoveState;
|
2019-07-06 00:44:49 +02:00
|
|
|
eWaitState m_nWaitState;
|
2019-06-30 23:50:40 +02:00
|
|
|
uint32 m_nWaitTimer;
|
2019-08-23 00:44:38 +02:00
|
|
|
void *m_pPathNodesStates[8]; // seems unused, probably leftover from VC
|
2019-06-30 23:50:40 +02:00
|
|
|
CVector2D m_stPathNodeStates[10];
|
2019-06-15 01:34:19 +02:00
|
|
|
uint16 m_nPathNodes;
|
2019-07-10 08:06:43 +02:00
|
|
|
int16 m_nCurPathNode;
|
2019-06-15 01:34:19 +02:00
|
|
|
int8 m_nPathState;
|
|
|
|
private:
|
|
|
|
int8 _pad2B5[3];
|
|
|
|
public:
|
|
|
|
CPathNode *m_pLastPathNode;
|
2019-08-10 17:15:22 +02:00
|
|
|
CPathNode *m_pNextPathNode;
|
2019-06-17 00:16:38 +02:00
|
|
|
float m_fHealth;
|
|
|
|
float m_fArmour;
|
2019-06-30 23:50:40 +02:00
|
|
|
int16 m_routeLastPoint;
|
2019-08-13 00:30:31 +02:00
|
|
|
uint16 m_routeStartPoint;
|
|
|
|
int16 m_routePointsPassed;
|
2019-07-06 00:44:49 +02:00
|
|
|
int16 m_routeType;
|
2019-08-13 00:30:31 +02:00
|
|
|
int16 m_routePointsBeingPassed;
|
2019-06-30 23:50:40 +02:00
|
|
|
uint16 field_2D2;
|
2019-07-03 18:34:42 +02:00
|
|
|
CVector2D m_moved;
|
2019-06-17 11:48:42 +02:00
|
|
|
float m_fRotationCur;
|
|
|
|
float m_fRotationDest;
|
2019-07-01 18:26:46 +02:00
|
|
|
float m_headingRate;
|
2019-07-29 19:18:03 +02:00
|
|
|
uint16 m_vehEnterType; // TODO: this is more like a door, not a type
|
2019-09-29 18:44:51 +02:00
|
|
|
int16 m_walkAroundType;
|
2019-05-15 16:52:37 +02:00
|
|
|
CEntity *m_pCurrentPhysSurface;
|
|
|
|
CVector m_vecOffsetFromPhysSurface;
|
|
|
|
CEntity *m_pCurSurface;
|
2019-08-10 17:15:22 +02:00
|
|
|
CVector m_vecSeekPos;
|
2019-06-27 14:01:55 +02:00
|
|
|
CEntity *m_pSeekTarget;
|
2019-05-15 16:52:37 +02:00
|
|
|
CVehicle *m_pMyVehicle;
|
2019-06-17 00:16:38 +02:00
|
|
|
bool bInVehicle;
|
2019-06-30 23:50:40 +02:00
|
|
|
uint8 pad_315[3];
|
2019-08-10 17:15:22 +02:00
|
|
|
float m_distanceToCountSeekDone;
|
2019-07-29 14:01:44 +02:00
|
|
|
bool bRunningToPhone;
|
2019-06-30 23:50:40 +02:00
|
|
|
uint8 field_31D;
|
|
|
|
int16 m_phoneId;
|
2019-09-16 19:32:58 +02:00
|
|
|
eCrimeType m_crimeToReportOnPhone;
|
2019-06-30 23:50:40 +02:00
|
|
|
uint32 m_phoneTalkTimer;
|
2019-09-16 19:32:58 +02:00
|
|
|
CAccident *m_lastAccident;
|
2019-05-15 16:52:37 +02:00
|
|
|
int32 m_nPedType;
|
2019-06-19 18:35:51 +02:00
|
|
|
CPedStats *m_pedStats;
|
2019-06-30 23:50:40 +02:00
|
|
|
float m_fleeFromPosX;
|
|
|
|
float m_fleeFromPosY;
|
|
|
|
CEntity *m_fleeFrom;
|
|
|
|
uint32 m_fleeTimer;
|
2019-08-10 17:15:22 +02:00
|
|
|
CEntity* m_collidingEntityWhileFleeing;
|
|
|
|
uint32 m_collidingThingTimer;
|
2019-05-19 21:28:10 +02:00
|
|
|
CEntity *m_pCollidingEntity;
|
2019-06-30 23:50:40 +02:00
|
|
|
uint8 m_stateUnused;
|
|
|
|
uint8 pad_351[3];
|
|
|
|
uint32 m_timerUnused;
|
|
|
|
CEntity *m_targetUnused;
|
2019-07-04 22:31:21 +02:00
|
|
|
CWeapon m_weapons[WEAPONTYPE_TOTAL_INVENTORY_WEAPONS];
|
2019-06-24 16:57:54 +02:00
|
|
|
eWeaponType m_storedWeapon;
|
2019-06-21 20:16:51 +02:00
|
|
|
uint8 m_currentWeapon; // eWeaponType
|
|
|
|
uint8 m_maxWeaponTypeAllowed; // eWeaponType
|
2019-06-30 23:50:40 +02:00
|
|
|
uint8 m_wepSkills;
|
|
|
|
uint8 m_wepAccuracy;
|
|
|
|
CEntity *m_pPointGunAt;
|
2019-06-14 14:33:08 +02:00
|
|
|
CVector m_vecHitLastPos;
|
2019-07-25 17:06:24 +02:00
|
|
|
PedFightMoves m_lastFightMove;
|
|
|
|
uint8 m_fightButtonPressure;
|
2019-09-03 18:53:04 +02:00
|
|
|
FightState m_fightState;
|
2019-08-05 15:07:10 +02:00
|
|
|
bool m_takeAStepAfterAttack;
|
2019-07-25 17:06:24 +02:00
|
|
|
uint8 pad_4B3;
|
2019-07-29 14:01:44 +02:00
|
|
|
CFire *m_pFire;
|
2019-06-19 14:06:13 +02:00
|
|
|
CEntity *m_pLookTarget;
|
2019-06-14 14:33:08 +02:00
|
|
|
float m_fLookDirection;
|
|
|
|
int32 m_wepModelID;
|
2019-06-15 17:53:25 +02:00
|
|
|
uint32 m_leaveCarTimer;
|
|
|
|
uint32 m_getUpTimer;
|
|
|
|
uint32 m_lookTimer;
|
2019-06-18 14:34:27 +02:00
|
|
|
uint32 m_standardTimer;
|
|
|
|
uint32 m_attackTimer;
|
2019-09-03 18:53:04 +02:00
|
|
|
uint32 m_shootTimer; // shooting is a part of attack
|
2019-06-21 20:16:51 +02:00
|
|
|
uint32 m_hitRecoverTimer;
|
2019-07-03 18:34:42 +02:00
|
|
|
uint32 m_objectiveTimer;
|
2019-06-21 20:16:51 +02:00
|
|
|
uint32 m_duckTimer;
|
2019-08-02 00:04:30 +02:00
|
|
|
uint32 m_duckAndCoverTimer;
|
2019-06-28 18:19:00 +02:00
|
|
|
int32 m_bloodyFootprintCount;
|
2019-07-29 14:01:44 +02:00
|
|
|
uint8 m_panicCounter;
|
2019-09-03 18:53:04 +02:00
|
|
|
bool m_deadBleeding;
|
2019-06-30 23:50:40 +02:00
|
|
|
int8 m_bodyPartBleeding; // PedNode
|
2019-06-16 20:39:48 +02:00
|
|
|
uint8 m_field_4F3;
|
|
|
|
CPed *m_nearPeds[10];
|
2019-06-20 13:22:44 +02:00
|
|
|
uint16 m_numNearPeds;
|
2019-06-30 23:50:40 +02:00
|
|
|
int8 m_lastWepDam;
|
|
|
|
uint8 pad_51F;
|
2019-07-29 14:01:44 +02:00
|
|
|
uint32 m_lastSoundStart;
|
|
|
|
uint32 m_soundStart;
|
2019-07-28 19:39:39 +02:00
|
|
|
uint16 m_lastQueuedSound;
|
|
|
|
uint16 m_queuedSound;
|
2019-09-26 23:01:50 +02:00
|
|
|
CVector m_vecSeekPosEx; // used in objectives
|
|
|
|
float m_distanceToCountSeekDoneEx; // used in objectives
|
2019-05-15 16:52:37 +02:00
|
|
|
|
2019-06-02 17:13:56 +02:00
|
|
|
static void *operator new(size_t);
|
2019-06-30 12:59:55 +02:00
|
|
|
static void *operator new(size_t, int);
|
2019-06-02 17:13:56 +02:00
|
|
|
static void operator delete(void*, size_t);
|
2019-06-30 15:20:11 +02:00
|
|
|
static void operator delete(void*, int);
|
2019-05-19 21:28:10 +02:00
|
|
|
|
2019-06-30 23:50:40 +02:00
|
|
|
CPed(uint32 pedType);
|
2019-07-08 08:46:42 +02:00
|
|
|
~CPed(void);
|
|
|
|
|
|
|
|
void SetModelIndex(uint32 mi);
|
|
|
|
void ProcessControl(void);
|
|
|
|
void Teleport(CVector);
|
|
|
|
void PreRender(void);
|
|
|
|
void Render(void);
|
|
|
|
bool SetupLighting(void);
|
|
|
|
void RemoveLighting(bool);
|
|
|
|
void FlagToDestroyWhenNextProcessed(void);
|
|
|
|
int32 ProcessEntityCollision(CEntity*, CColPoint*);
|
2019-06-30 23:50:40 +02:00
|
|
|
|
2019-07-08 08:46:42 +02:00
|
|
|
virtual void SetMoveAnim(void);
|
2019-06-30 12:59:55 +02:00
|
|
|
|
2019-06-14 14:33:08 +02:00
|
|
|
void AddWeaponModel(int id);
|
2019-06-20 13:22:44 +02:00
|
|
|
void AimGun(void);
|
2019-05-19 21:28:10 +02:00
|
|
|
void KillPedWithCar(CVehicle *veh, float impulse);
|
2019-06-16 23:12:14 +02:00
|
|
|
void Say(uint16 audio);
|
2019-06-27 14:01:55 +02:00
|
|
|
void SetLookFlag(CEntity *target, bool unknown);
|
2019-06-19 14:06:13 +02:00
|
|
|
void SetLookFlag(float direction, bool unknown);
|
2019-06-16 20:39:48 +02:00
|
|
|
void SetLookTimer(int time);
|
2019-06-15 17:53:25 +02:00
|
|
|
void SetDie(AnimationId anim, float arg1, float arg2);
|
2019-07-09 18:50:35 +02:00
|
|
|
void SetDead(void);
|
2019-06-15 17:53:25 +02:00
|
|
|
void ApplyHeadShot(eWeaponType weaponType, CVector pos, bool evenOnPlayer);
|
2019-07-18 04:26:46 +02:00
|
|
|
void RemoveBodyPart(PedNode nodeId, int8 direction);
|
|
|
|
void SpawnFlyingComponent(int, int8);
|
2019-06-19 14:06:13 +02:00
|
|
|
bool OurPedCanSeeThisOne(CEntity *target);
|
2019-06-17 11:48:42 +02:00
|
|
|
void Avoid(void);
|
2019-06-20 13:22:44 +02:00
|
|
|
void Attack(void);
|
|
|
|
void ClearAimFlag(void);
|
|
|
|
void ClearLookFlag(void);
|
|
|
|
void RestorePreviousState(void);
|
|
|
|
void ClearAttack(void);
|
|
|
|
bool IsPedHeadAbovePos(float zOffset);
|
2019-06-21 20:16:51 +02:00
|
|
|
void RemoveWeaponModel(int modelId);
|
2019-07-01 18:26:46 +02:00
|
|
|
void SetCurrentWeapon(uint32 weaponType);
|
2019-06-21 20:16:51 +02:00
|
|
|
void Duck(void);
|
|
|
|
void ClearDuck(void);
|
|
|
|
void ClearPointGunAt(void);
|
2019-06-24 16:57:54 +02:00
|
|
|
void BeingDraggedFromCar(void);
|
|
|
|
void RestartNonPartialAnims(void);
|
|
|
|
void LineUpPedWithCar(PedLineUpPhase phase);
|
|
|
|
void SetPedPositionInCar(void);
|
2019-06-28 18:19:00 +02:00
|
|
|
void PlayFootSteps(void);
|
2019-06-30 12:59:55 +02:00
|
|
|
void QuitEnteringCar(void);
|
2019-06-30 23:50:40 +02:00
|
|
|
void BuildPedLists(void);
|
2019-07-01 21:46:44 +02:00
|
|
|
uint32 GiveWeapon(eWeaponType weaponType, uint32 ammo);
|
2019-07-03 18:34:42 +02:00
|
|
|
void CalculateNewOrientation(void);
|
|
|
|
float WorkOutHeadingForMovingFirstPerson(float);
|
|
|
|
void CalculateNewVelocity(void);
|
|
|
|
bool CanSeeEntity(CEntity*, float);
|
|
|
|
void RestorePreviousObjective(void);
|
2019-07-06 00:44:49 +02:00
|
|
|
void SetIdle(void);
|
2019-07-03 18:34:42 +02:00
|
|
|
void SetObjective(eObjective, void*);
|
2019-07-06 00:44:49 +02:00
|
|
|
void SetObjective(eObjective);
|
|
|
|
void SetObjective(eObjective, int16, int16);
|
|
|
|
void ClearChat(void);
|
|
|
|
void InformMyGangOfAttack(CEntity*);
|
|
|
|
void SetFollowRoute(int16, int16);
|
|
|
|
void ReactToAttack(CEntity*);
|
|
|
|
void SetDuck(uint32);
|
|
|
|
void RegisterThreatWithGangPeds(CEntity*);
|
|
|
|
bool TurnBody(void);
|
|
|
|
void Chat(void);
|
2019-07-10 08:06:43 +02:00
|
|
|
void CheckAroundForPossibleCollisions(void);
|
2019-07-15 14:11:40 +02:00
|
|
|
void SetSeek(CVector, float);
|
2019-08-02 00:04:30 +02:00
|
|
|
void SetSeek(CEntity*, float);
|
2019-07-15 14:11:40 +02:00
|
|
|
bool MakePhonecall(void);
|
|
|
|
bool FacePhone(void);
|
|
|
|
CPed *CheckForDeadPeds(void);
|
|
|
|
bool CheckForExplosions(CVector2D &area);
|
|
|
|
CPed *CheckForGunShots(void);
|
|
|
|
uint8 CheckForPointBlankPeds(CPed*);
|
|
|
|
bool CheckIfInTheAir(void);
|
|
|
|
void ClearAll(void);
|
|
|
|
void SetPointGunAt(CEntity*);
|
2019-07-16 18:31:18 +02:00
|
|
|
bool Seek(void);
|
2019-07-20 23:29:58 +02:00
|
|
|
bool SetWanderPath(int8);
|
2019-07-14 11:49:03 +02:00
|
|
|
void SetFollowPath(CVector);
|
2019-07-18 04:26:46 +02:00
|
|
|
void ClearAttackByRemovingAnim(void);
|
|
|
|
void SetStoredState(void);
|
|
|
|
void StopNonPartialAnims(void);
|
|
|
|
bool InflictDamage(CEntity*, eWeaponType, float, ePedPieceTypes, uint8);
|
|
|
|
void ClearFlee(void);
|
|
|
|
void ClearFall(void);
|
|
|
|
void SetGetUp(void);
|
2019-07-20 23:29:58 +02:00
|
|
|
void ClearInvestigateEvent(void);
|
|
|
|
void ClearLeader(void);
|
|
|
|
void ClearLook(void);
|
|
|
|
void ClearObjective(void);
|
|
|
|
void ClearPause(void);
|
|
|
|
void ClearSeek(void);
|
|
|
|
void ClearWeapons(void);
|
|
|
|
void RestoreGunPosition(void);
|
|
|
|
void RestoreHeadingRate(void);
|
|
|
|
void SetAimFlag(CEntity* to);
|
|
|
|
void SetAimFlag(float angle);
|
|
|
|
void SetAmmo(eWeaponType weaponType, uint32 ammo);
|
|
|
|
void SetEvasiveStep(CEntity*, uint8);
|
2019-07-25 22:34:29 +02:00
|
|
|
void GrantAmmo(eWeaponType, uint32);
|
2019-07-25 17:06:24 +02:00
|
|
|
void SetEvasiveDive(CPhysical*, uint8);
|
|
|
|
void SetAttack(CEntity*);
|
|
|
|
void StartFightAttack(uint8);
|
|
|
|
void SetWaitState(eWaitState, void*);
|
|
|
|
bool FightStrike(CVector&);
|
2019-08-16 20:17:15 +02:00
|
|
|
int GetLocalDirection(const CVector2D &);
|
2019-07-25 17:06:24 +02:00
|
|
|
void StartFightDefend(uint8, uint8, uint8);
|
|
|
|
void PlayHitSound(CPed*);
|
|
|
|
void SetFall(int, AnimationId, uint8);
|
2019-07-28 19:39:39 +02:00
|
|
|
void SetFlee(CEntity*, int);
|
2019-08-16 18:25:02 +02:00
|
|
|
void SetFlee(CVector2D const &, int);
|
2019-07-29 14:01:44 +02:00
|
|
|
void RemoveInCarAnims(void);
|
|
|
|
void CollideWithPed(CPed*);
|
|
|
|
void SetDirectionToWalkAroundObject(CEntity*);
|
2019-08-02 00:04:30 +02:00
|
|
|
void CreateDeadPedMoney(void);
|
|
|
|
void CreateDeadPedWeaponPickups(void);
|
|
|
|
void SetAttackTimer(uint32);
|
|
|
|
void SetBeingDraggedFromCar(CVehicle*, uint32, bool);
|
|
|
|
void SetRadioStation(void);
|
|
|
|
void SetBuyIceCream(void);
|
|
|
|
void SetChat(CEntity*, uint32);
|
|
|
|
void DeadPedMakesTyresBloody(void);
|
|
|
|
void MakeTyresMuddySectorList(CPtrList&);
|
|
|
|
uint8 DoesLOSBulletHitPed(CColPoint &point);
|
|
|
|
bool DuckAndCover(void);
|
2019-08-03 19:14:45 +02:00
|
|
|
void EndFight(uint8);
|
2019-08-05 15:07:10 +02:00
|
|
|
void EnterCar(void);
|
|
|
|
uint8 GetNearestTrainPedPosition(CVehicle*, CVector&);
|
|
|
|
uint8 GetNearestTrainDoor(CVehicle*, CVector&);
|
|
|
|
void LineUpPedWithTrain(void);
|
|
|
|
void ExitCar(void);
|
|
|
|
void Fight(void);
|
2019-08-23 00:44:38 +02:00
|
|
|
bool FindBestCoordsFromNodes(CVector, CVector*);
|
2019-08-08 02:21:38 +02:00
|
|
|
void Wait(void);
|
|
|
|
void ProcessObjective(void);
|
2019-08-10 17:15:22 +02:00
|
|
|
bool SeekFollowingPath(CVector*);
|
|
|
|
void Flee(void);
|
|
|
|
void FollowPath(void);
|
|
|
|
CVector GetFormationPosition(void);
|
|
|
|
void GetNearestDoor(CVehicle*, CVector&);
|
2019-08-13 00:30:31 +02:00
|
|
|
bool GetNearestPassengerDoor(CVehicle*, CVector&);
|
|
|
|
int GetNextPointOnRoute(void);
|
|
|
|
uint8 GetPedRadioCategory(uint32);
|
|
|
|
int GetWeaponSlot(eWeaponType);
|
|
|
|
void GoToNearestDoor(CVehicle*);
|
2019-08-23 00:44:38 +02:00
|
|
|
bool HaveReachedNextPointOnRoute(float);
|
2019-08-13 00:30:31 +02:00
|
|
|
void Idle(void);
|
|
|
|
void InTheAir(void);
|
|
|
|
void SetLanding(void);
|
2019-08-17 21:03:57 +02:00
|
|
|
void InvestigateEvent(void);
|
|
|
|
bool IsPedDoingDriveByShooting(void);
|
|
|
|
bool IsRoomToBeCarJacked(void);
|
2019-08-23 00:44:38 +02:00
|
|
|
void SetInvestigateEvent(eEventType, CVector2D, float, uint16, float);
|
|
|
|
bool LookForInterestingNodes(void);
|
|
|
|
void LookForSexyCars(void);
|
|
|
|
void LookForSexyPeds(void);
|
|
|
|
void Mug(void);
|
|
|
|
void MoveHeadToLook(void);
|
|
|
|
void Pause(void);
|
2019-09-03 18:53:04 +02:00
|
|
|
void ProcessBuoyancy(void);
|
|
|
|
void ServiceTalking(void);
|
|
|
|
void SetJump(void);
|
|
|
|
void UpdatePosition(void);
|
|
|
|
void WanderRange(void);
|
|
|
|
void WanderPath(void);
|
|
|
|
void ReactToPointGun(CEntity*);
|
|
|
|
void SeekCar(void);
|
|
|
|
void SeekBoatPosition(void);
|
2019-09-13 21:04:55 +02:00
|
|
|
bool PositionPedOutOfCollision(void);
|
2019-09-16 19:32:58 +02:00
|
|
|
bool RunToReportCrime(eCrimeType);
|
|
|
|
bool PlacePedOnDryLand(void);
|
2019-09-20 21:40:33 +02:00
|
|
|
bool PossiblyFindBetterPosToSeekCar(CVector*, CVehicle*);
|
2019-09-26 23:01:50 +02:00
|
|
|
void UpdateFromLeader(void);
|
|
|
|
int ScanForThreats(void);
|
|
|
|
void SetEnterCar(CVehicle*, uint32);
|
|
|
|
bool WarpPedToNearEntityOffScreen(CEntity*);
|
|
|
|
void SetExitCar(CVehicle*, uint32);
|
2019-07-03 18:34:42 +02:00
|
|
|
|
|
|
|
// Static methods
|
2019-07-26 18:48:14 +02:00
|
|
|
static CVector GetLocalPositionToOpenCarDoor(CVehicle *veh, uint32 component, float offset);
|
|
|
|
static CVector GetPositionToOpenCarDoor(CVehicle *veh, uint32 component, float seatPosMult);
|
|
|
|
static CVector GetPositionToOpenCarDoor(CVehicle* veh, uint32 component);
|
2019-08-13 00:30:31 +02:00
|
|
|
static void Initialise(void);
|
|
|
|
static void SetAnimOffsetForEnterOrExitVehicle(void);
|
|
|
|
static void LoadFightData(void);
|
2019-07-03 18:34:42 +02:00
|
|
|
|
|
|
|
// Callbacks
|
2019-06-25 00:42:23 +02: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);
|
2019-09-07 00:27:07 +02:00
|
|
|
static void PedSetInCarCB(CAnimBlendAssociation *assoc, void *arg);
|
2019-06-25 00:42:23 +02:00
|
|
|
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 17:53:25 +02:00
|
|
|
|
2019-07-03 18:34:42 +02:00
|
|
|
// functions that I see unnecessary to hook
|
|
|
|
bool IsPlayer(void);
|
|
|
|
bool UseGroundColModel(void);
|
|
|
|
bool CanSetPedState(void);
|
|
|
|
bool IsPedInControl(void);
|
|
|
|
bool CanPedDriveOff(void);
|
|
|
|
bool CanBeDeleted(void);
|
|
|
|
bool CanStrafeOrMouseControl(void);
|
|
|
|
bool CanPedReturnToState(void);
|
|
|
|
void SetMoveState(eMoveState);
|
|
|
|
bool IsTemporaryObjective(eObjective objective);
|
|
|
|
void SetObjectiveTimer(int);
|
|
|
|
bool SelectGunIfArmed(void);
|
|
|
|
bool IsPointerValid(void);
|
|
|
|
void SortPeds(CPed**, int, int);
|
|
|
|
void ForceStoredObjective(eObjective);
|
|
|
|
void SetStoredObjective(void);
|
|
|
|
void SetLeader(CEntity* leader);
|
|
|
|
void SetPedStats(ePedStats);
|
2019-07-06 00:44:49 +02:00
|
|
|
bool IsGangMember(void);
|
2019-08-02 00:04:30 +02:00
|
|
|
void Die(void);
|
2019-08-05 15:07:10 +02:00
|
|
|
void EnterTrain(void);
|
|
|
|
void ExitTrain(void);
|
|
|
|
void Fall(void);
|
2019-08-17 21:03:57 +02:00
|
|
|
bool IsPedShootable(void);
|
|
|
|
void Look(void);
|
2019-09-03 18:53:04 +02:00
|
|
|
void SetInTheAir(void);
|
|
|
|
void RestoreHeadPosition(void);
|
|
|
|
void PointGunAt(void);
|
2019-09-07 00:27:07 +02:00
|
|
|
bool ServiceTalkingWhenDead(void);
|
2019-09-12 02:43:18 +02:00
|
|
|
void SetPedPositionInTrain(void);
|
2019-09-26 23:01:50 +02:00
|
|
|
void SetShootTimer(uint32);
|
|
|
|
void SetSeekCar(CVehicle*, uint32);
|
|
|
|
void SetSeekBoatPosition(CVehicle*);
|
|
|
|
void SetExitTrain(CVehicle*);
|
2019-09-29 18:44:51 +02:00
|
|
|
#ifdef VC_PED_PORTS
|
|
|
|
bool CanPedJumpThis(CEntity*, CVector*);
|
|
|
|
#else
|
|
|
|
bool CanPedJumpThis(CEntity*);
|
|
|
|
#endif
|
2019-07-03 18:34:42 +02:00
|
|
|
|
2019-07-07 10:16:16 +02:00
|
|
|
bool HasWeapon(uint8 weaponType) { return m_weapons[weaponType].m_eWeaponType == weaponType; }
|
|
|
|
CWeapon &GetWeapon(uint8 weaponType) { return m_weapons[weaponType]; }
|
|
|
|
CWeapon *GetWeapon(void) { return &m_weapons[m_currentWeapon]; }
|
|
|
|
RwFrame *GetNodeFrame(int nodeId) { return m_pFrames[nodeId]->frame; }
|
2019-07-05 14:23:39 +02:00
|
|
|
PedState GetPedState(void) { return m_nPedState; }
|
|
|
|
void SetPedState(PedState state) { m_nPedState = state; }
|
2019-09-13 21:04:55 +02:00
|
|
|
bool DyingOrDead(void) { return m_nPedState == PED_DIE || m_nPedState == PED_DEAD; }
|
2019-09-20 21:40:33 +02:00
|
|
|
void ReplaceWeaponWhenExitingVehicle(void);
|
2019-06-16 20:39:48 +02:00
|
|
|
|
2019-06-30 23:50:40 +02:00
|
|
|
// set by 0482:set_threat_reaction_range_multiplier opcode
|
2019-08-10 17:15:22 +02:00
|
|
|
static uint16 &nThreatReactionRangeMultiplier;
|
2019-06-30 23:50:40 +02:00
|
|
|
|
2019-09-26 23:01:50 +02:00
|
|
|
// set by 0481:set_enter_car_range_multiplier opcode
|
|
|
|
static uint16 &nEnterCarRangeMultiplier;
|
|
|
|
|
2019-06-17 00:16:38 +02:00
|
|
|
static bool &bNastyLimbsCheat;
|
|
|
|
static bool &bPedCheat2;
|
|
|
|
static bool &bPedCheat3;
|
2019-09-03 18:53:04 +02:00
|
|
|
static CVector2D ms_vec2DFleePosition;
|
2019-08-10 17:15:22 +02:00
|
|
|
static CPedAudioData (&CommentWaitTime)[38];
|
2019-08-05 15:07:10 +02:00
|
|
|
|
2019-08-16 18:25:02 +02:00
|
|
|
#ifndef MASTER
|
|
|
|
static void SwitchDebugDisplay(void);
|
|
|
|
void DebugRenderOnePedText(void);
|
2019-08-05 15:07:10 +02:00
|
|
|
static bool bUnusedFightThingOnPlayer;
|
|
|
|
#endif
|
2019-05-15 16:52:37 +02:00
|
|
|
};
|
2019-06-20 13:22:44 +02:00
|
|
|
|
2019-07-31 17:54:18 +02:00
|
|
|
class cPedParams
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
char m_bDistanceCalculated;
|
|
|
|
char gap_1[3];
|
|
|
|
float m_fDistance;
|
|
|
|
CPed *m_pPed;
|
|
|
|
};
|
|
|
|
|
2019-06-25 00:42:23 +02:00
|
|
|
void FinishFuckUCB(CAnimBlendAssociation *assoc, void *arg);
|
|
|
|
|
2019-05-15 16:52:37 +02: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 21:28:10 +02:00
|
|
|
static_assert(offsetof(CPed, m_pCollidingEntity) == 0x34C, "CPed: error");
|
2019-05-29 18:06:33 +02:00
|
|
|
static_assert(offsetof(CPed, m_weapons) == 0x35C, "CPed: error");
|
|
|
|
static_assert(offsetof(CPed, m_currentWeapon) == 0x498, "CPed: error");
|
2019-06-15 17:53:25 +02:00
|
|
|
static_assert(offsetof(CPed, m_lookTimer) == 0x4CC, "CPed: error");
|
|
|
|
static_assert(offsetof(CPed, m_bodyPartBleeding) == 0x4F2, "CPed: error");
|
2019-07-03 18:34:42 +02:00
|
|
|
static_assert(offsetof(CPed, m_pedInObjective) == 0x16C, "CPed: error");
|
2019-06-16 20:39:48 +02:00
|
|
|
static_assert(offsetof(CPed, m_pEventEntity) == 0x19C, "CPed: error");
|
2019-06-02 17:13:56 +02:00
|
|
|
static_assert(sizeof(CPed) == 0x53C, "CPed: error");
|