Ped.h 27,6 КБ
Newer Older
aap's avatar
aap включено в состав коммита
1
2
#pragma once

aap's avatar
aap включено в состав коммита
3
#include "RwHelper.h"
Filip Gawin's avatar
Filip Gawin включено в состав коммита
4
5
6
7
#include "AnimManager.h"
#include "Crime.h"
#include "EventList.h"
#include "PedIK.h"
Sergeanur's avatar
Sergeanur включено в состав коммита
8
#include "PedType.h"
aap's avatar
aap включено в состав коммита
9
#include "Physical.h"
aap's avatar
aap включено в состав коммита
10
#include "Weapon.h"
eray orçunus's avatar
eray orçunus включено в состав коммита
11
#include "WeaponInfo.h"
erorcun's avatar
erorcun включено в состав коммита
12
#include "Collision.h"
aap's avatar
aap включено в состав коммита
13

eray orçunus's avatar
eray orçunus включено в состав коммита
14
15
#define FEET_OFFSET	1.04f
#define CHECK_NEARBY_THINGS_MAX_DIST	15.0f
eray orçunus's avatar
eray orçunus включено в состав коммита
16
#define ENTER_CAR_MAX_DIST	30.0f
Sergeanur's avatar
Sergeanur включено в состав коммита
17
#define CAN_SEE_ENTITY_ANGLE_THRESHOLD	DEGTORAD(60.0f)
eray orçunus's avatar
eray orçunus включено в состав коммита
18

aap's avatar
aap включено в состав коммита
19
struct CPathNode;
eray orçunus's avatar
eray orçunus включено в состав коммита
20
class CAccident;
eray orçunus's avatar
eray orçunus включено в состав коммита
21
class CObject;
eray orçunus's avatar
eray orçunus включено в состав коммита
22
23
24
class CFire;
struct AnimBlendFrameData;
class CAnimBlendAssociation;
aap's avatar
aap включено в состав коммита
25

eray orçunus's avatar
eray orçunus включено в состав коммита
26
struct PedAudioData
eray orçunus's avatar
eray orçunus включено в состав коммита
27
28
29
30
31
32
33
{
	int m_nFixedDelayTime;
	int m_nOverrideFixedDelayTime;
	int m_nOverrideMaxRandomDelayTime;
	int m_nMaxRandomDelayTime;
};

eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
34
35
enum eFormation
{
eray orçunus's avatar
eray orçunus включено в состав коммита
36
	FORMATION_UNDEFINED,
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
37
38
39
40
41
42
43
44
45
46
	FORMATION_REAR,
	FORMATION_REAR_LEFT,
	FORMATION_REAR_RIGHT,
	FORMATION_FRONT_LEFT,
	FORMATION_FRONT_RIGHT,
	FORMATION_LEFT,
	FORMATION_RIGHT,
	FORMATION_FRONT
};

withmorten's avatar
withmorten включено в состав коммита
47
enum FightState {
eray orçunus's avatar
eray orçunus включено в состав коммита
48
49
50
51
52
53
	FIGHTSTATE_MOVE_FINISHED = -2,
	FIGHTSTATE_JUST_ATTACKED,
	FIGHTSTATE_NO_MOVE,
	FIGHTSTATE_1
};

eray orçunus's avatar
eray orçunus включено в состав коммита
54
55
56
57
58
59
60
enum
{
	ENDFIGHT_NORMAL,
	ENDFIGHT_WITH_A_STEP,
	ENDFIGHT_FAST
};

eray orçunus's avatar
eray orçunus включено в состав коммита
61
62
63
64
65
66
67
enum PedRouteType
{
	PEDROUTE_STOP_WHEN_DONE = 1,
	PEDROUTE_GO_BACKWARD_WHEN_DONE,
	PEDROUTE_GO_TO_START_WHEN_DONE
};

eray orçunus's avatar
eray orçunus включено в состав коммита
68
69
70
71
72
73
74
75
76
enum FightMoveHitLevel
{
	HITLEVEL_NULL,
	HITLEVEL_GROUND,
	HITLEVEL_LOW,
	HITLEVEL_MEDIUM,
	HITLEVEL_HIGH
};

eray orçunus's avatar
eray orçunus включено в состав коммита
77
78
79
80
81
82
83
struct FightMove
{
	AnimationId animId;
	float startFireTime;
	float endFireTime;
	float comboFollowOnTime;
	float strikeRadius;
eray orçunus's avatar
eray orçunus включено в состав коммита
84
	uint8 hitLevel; // FightMoveHitLevel
eray orçunus's avatar
eray orçunus включено в состав коммита
85
86
87
	uint8 damage;
	uint8 flags;
};
bigbossbro08's avatar
bigbossbro08 включено в состав коммита
88
VALIDATE_SIZE(FightMove, 0x18);
eray orçunus's avatar
eray orçunus включено в состав коммита
89

eray orçunus's avatar
eray orçunus включено в состав коммита
90
// TODO: This is eFightState on mobile.
eray orçunus's avatar
eray orçunus включено в состав коммита
91
92
93
enum PedFightMoves
{
	FIGHTMOVE_NULL,
eray orçunus's avatar
eray orçunus включено в состав коммита
94
	// Attacker
eray orçunus's avatar
eray orçunus включено в состав коммита
95
96
97
98
99
100
101
102
103
104
105
106
	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,
eray orçunus's avatar
eray orçunus включено в состав коммита
107
	// Opponent
eray orçunus's avatar
eray orçunus включено в состав коммита
108
109
110
111
112
113
114
115
116
117
	FIGHTMOVE_HITFRONT,
	FIGHTMOVE_HITBACK,
	FIGHTMOVE_HITRIGHT,
	FIGHTMOVE_HITLEFT,
	FIGHTMOVE_HITBODY,
	FIGHTMOVE_HITCHEST,
	FIGHTMOVE_HITHEAD,
	FIGHTMOVE_HITBIGSTEP,
	FIGHTMOVE_HITONFLOOR,
	FIGHTMOVE_HITBEHIND,
eray orçunus's avatar
eray orçunus включено в состав коммита
118
119
	FIGHTMOVE_IDLE2NORM,
	NUM_FIGHTMOVES
eray orçunus's avatar
eray orçunus включено в состав коммита
120
121
};

eray orçunus's avatar
eray orçunus включено в состав коммита
122
123
enum ePedPieceTypes
{
eray orçunus's avatar
eray orçunus включено в состав коммита
124
125
	PEDPIECE_TORSO,
	PEDPIECE_MID,
eray orçunus's avatar
eray orçunus включено в состав коммита
126
127
128
129
130
131
132
	PEDPIECE_LEFTARM,
	PEDPIECE_RIGHTARM,
	PEDPIECE_LEFTLEG,
	PEDPIECE_RIGHTLEG,
	PEDPIECE_HEAD,
};

eray orçunus's avatar
eray orçunus включено в состав коммита
133
enum eWaitState {
eray orçunus's avatar
CPed...    
eray orçunus включено в состав коммита
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
	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
};

withmorten's avatar
withmorten включено в состав коммита
157
enum eObjective {
eray orçunus's avatar
eray orçunus включено в состав коммита
158
	OBJECTIVE_NONE,
eray orçunus's avatar
eray orçunus включено в состав коммита
159
160
	OBJECTIVE_WAIT_ON_FOOT,
	OBJECTIVE_FLEE_ON_FOOT_TILL_SAFE,
eray orçunus's avatar
eray orçunus включено в состав коммита
161
	OBJECTIVE_GUARD_SPOT,
eray orçunus's avatar
eray orçunus включено в состав коммита
162
	OBJECTIVE_GUARD_AREA,	// not implemented
eray orçunus's avatar
eray orçunus включено в состав коммита
163
	OBJECTIVE_WAIT_IN_CAR,
eray orçunus's avatar
eray orçunus включено в состав коммита
164
	OBJECTIVE_WAIT_IN_CAR_THEN_GET_OUT,
eray orçunus's avatar
eray orçunus включено в состав коммита
165
166
167
168
169
	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,
eray orçunus's avatar
eray orçunus включено в состав коммита
170
171
	OBJECTIVE_FOLLOW_CHAR_IN_FORMATION,
	OBJECTIVE_LEAVE_CAR,
eray orçunus's avatar
eray orçunus включено в состав коммита
172
173
	OBJECTIVE_ENTER_CAR_AS_PASSENGER,
	OBJECTIVE_ENTER_CAR_AS_DRIVER,
eray orçunus's avatar
eray orçunus включено в состав коммита
174
175
176
	OBJECTIVE_FOLLOW_CAR_IN_CAR, // not implemented
	OBJECTIVE_FIRE_AT_OBJECT_FROM_VEHICLE,	// not implemented
	OBJECTIVE_DESTROY_OBJECT,	// not implemented
eray orçunus's avatar
eray orçunus включено в состав коммита
177
178
179
180
	OBJECTIVE_DESTROY_CAR,
	OBJECTIVE_GOTO_AREA_ANY_MEANS,
	OBJECTIVE_GOTO_AREA_ON_FOOT,
	OBJECTIVE_RUN_TO_AREA,
eray orçunus's avatar
eray orçunus включено в состав коммита
181
182
183
	OBJECTIVE_GOTO_AREA_IN_CAR,	// not implemented
	OBJECTIVE_FOLLOW_CAR_ON_FOOT_WITH_OFFSET,	// not implemented
	OBJECTIVE_GUARD_ATTACK,
eray orçunus's avatar
eray orçunus включено в состав коммита
184
185
	OBJECTIVE_SET_LEADER,
	OBJECTIVE_FOLLOW_ROUTE,
eray orçunus's avatar
eray orçunus включено в состав коммита
186
	OBJECTIVE_SOLICIT_VEHICLE,
eray orçunus's avatar
eray orçunus включено в состав коммита
187
188
189
190
191
192
	OBJECTIVE_HAIL_TAXI,
	OBJECTIVE_CATCH_TRAIN,
	OBJECTIVE_BUY_ICE_CREAM,
	OBJECTIVE_STEAL_ANY_CAR,
	OBJECTIVE_MUG_CHAR,
	OBJECTIVE_FLEE_CAR,
eray orçunus's avatar
eray orçunus включено в состав коммита
193
194
195
#ifdef VC_PED_PORTS
	OBJECTIVE_LEAVE_CAR_AND_DIE
#endif
eray orçunus's avatar
eray orçunus включено в состав коммита
196
197
198
};

enum {
aap's avatar
aap включено в состав коммита
199
200
	RANDOM_CHAR = 1,
	MISSION_CHAR,
eray orçunus's avatar
eray orçunus включено в состав коммита
201
202
};

eray orçunus's avatar
eray orçunus включено в состав коммита
203
204
205
enum PedLineUpPhase {
	LINE_UP_TO_CAR_START,
	LINE_UP_TO_CAR_END,
eray orçunus's avatar
eray orçunus включено в состав коммита
206
	LINE_UP_TO_CAR_2 // Buggy. Used for cops arresting you from passenger door
eray orçunus's avatar
eray orçunus включено в состав коммита
207
208
};

eray orçunus's avatar
eray orçunus включено в состав коммита
209
210
enum PedOnGroundState {
	NO_PED,
eray orçunus's avatar
eray orçunus включено в состав коммита
211
	PED_IN_FRONT_OF_ATTACKER,
eray orçunus's avatar
eray orçunus включено в состав коммита
212
213
214
215
	PED_ON_THE_FLOOR,
	PED_DEAD_ON_THE_FLOOR
};

withmorten's avatar
withmorten включено в состав коммита
216
enum PointBlankNecessity {
eray orçunus's avatar
eray orçunus включено в состав коммита
217
218
219
220
221
	NO_POINT_BLANK_PED,
	POINT_BLANK_FOR_WANTED_PED,
	POINT_BLANK_FOR_SOMEONE_ELSE
};

aap's avatar
aap включено в состав коммита
222
enum PedState
aap's avatar
aap включено в состав коммита
223
{
aap's avatar
aap включено в состав коммита
224
	PED_NONE,
aap's avatar
aap включено в состав коммита
225
226
227
228
229
230
231
232
233
234
235
236
	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,
eray orçunus's avatar
eray orçunus включено в состав коммита
237
	PED_ROCKET_MODE,
aap's avatar
aap включено в состав коммита
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
	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,
aap's avatar
aap включено в состав коммита
257

eray orçunus's avatar
eray orçunus включено в состав коммита
258
	PED_UNKNOWN,	// Same with IDLE, but also infects up to 5 peds with same pedType and WANDER_PATH, so they become stone too. HANG_OUT in Fire_Head's idb
aap's avatar
aap включено в состав коммита
259
260

	PED_STATES_NO_AI,
eray orçunus's avatar
eray orçunus включено в состав коммита
261
262

	// One of these states isn't on PS2 - start
aap's avatar
aap включено в состав коммита
263
264
265
266
267
	PED_JUMP,
	PED_FALL,
	PED_GETUP,
	PED_STAGGER,
	PED_DIVE_AWAY,
aap's avatar
aap включено в состав коммита
268

aap's avatar
aap включено в состав коммита
269
270
271
272
	PED_STATES_NO_ST,
	PED_ENTER_TRAIN,
	PED_EXIT_TRAIN,
	PED_ARREST_PLAYER,
eray orçunus's avatar
eray orçunus включено в состав коммита
273
274
	// One of these states isn't on PS2 - end

aap's avatar
aap включено в состав коммита
275
276
277
278
	PED_DRIVING,
	PED_PASSENGER,
	PED_TAXI_PASSENGER,
	PED_OPEN_DOOR,
aap's avatar
aap включено в состав коммита
279
280
	PED_DIE,
	PED_DEAD,
aap's avatar
aap включено в состав коммита
281
282
283
284
285
286
	PED_CARJACK,
	PED_DRAG_FROM_CAR,
	PED_ENTER_CAR,
	PED_STEAL_CAR,
	PED_EXIT_CAR,
	PED_HANDS_UP,
aap's avatar
aap включено в состав коммита
287
	PED_ARRESTED,
aap's avatar
aap включено в состав коммита
288
289
};

eray orçunus's avatar
eray orçunus включено в состав коммита
290
enum eMoveState {
aap's avatar
aap включено в состав коммита
291
292
293
294
295
296
297
	PEDMOVE_NONE,
	PEDMOVE_STILL,
	PEDMOVE_WALK,
	PEDMOVE_RUN,
	PEDMOVE_SPRINT,
};

aap's avatar
aap включено в состав коммита
298
299
300
301
302
303
class CVehicle;

class CPed : public CPhysical
{
public:
	// 0x128
aap's avatar
aap включено в состав коммита
304
305
	CStoredCollPoly m_collPoly;
	float m_fCollisionSpeed;
aap's avatar
aap включено в состав коммита
306
307

	// cf. https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPed.h from R*
Sergeanur's avatar
Sergeanur включено в состав коммита
308
	uint32 bIsStanding : 1;
Sergeanur's avatar
Sergeanur включено в состав коммита
309
	uint32 bWasStanding : 1;
Sergeanur's avatar
Sergeanur включено в состав коммита
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
	uint32 bIsAttacking : 1;		// doesn't reset after fist fight
	uint32 bIsPointingGunAt : 1;
	uint32 bIsLooking : 1;
	uint32 bKeepTryingToLook : 1; // if we can't look somewhere due to unreachable angles
	uint32 bIsRestoringLook : 1;
	uint32 bIsAimingGun : 1;

	uint32 bIsRestoringGun : 1;
	uint32 bCanPointGunAtTarget : 1;
	uint32 bIsTalking : 1;
	uint32 bIsInTheAir : 1;
	uint32 bIsLanding : 1;
	uint32 bIsRunning : 1; // on some conditions
	uint32 bHitSomethingLastFrame : 1;
	uint32 bVehEnterDoorIsBlocked : 1; // because someone else enters/exits from there

	uint32 bCanPedEnterSeekedCar : 1;
	uint32 bRespondsToThreats : 1;
	uint32 bRenderPedInCar : 1;
	uint32 bChangedSeat : 1;
	uint32 bUpdateAnimHeading : 1;
	uint32 bBodyPartJustCameOff : 1;
	uint32 bIsShooting : 1;
	uint32 bFindNewNodeAfterStateRestore : 1;

	uint32 bHasACamera : 1; // does ped possess a camera to document accidents involves fire/explosion
	uint32 bGonnaInvestigateEvent : 1;
	uint32 bPedIsBleeding : 1;
	uint32 bStopAndShoot : 1; // Ped cannot reach target to attack with fist, need to use gun
	uint32 bIsPedDieAnimPlaying : 1;
	uint32 bUsePedNodeSeek : 1;
	uint32 bObjectiveCompleted : 1;
	uint32 bScriptObjectiveCompleted : 1;

	uint32 bKindaStayInSamePlace : 1;
	uint32 bBeingChasedByPolice : 1; // Unused VC leftover. Should've been set for criminal/gang members
	uint32 bNotAllowedToDuck : 1;
	uint32 bCrouchWhenShooting : 1;
	uint32 bIsDucking : 1;
	uint32 bGetUpAnimStarted : 1;
	uint32 bDoBloodyFootprints : 1;
	uint32 bFleeAfterExitingCar : 1;

	uint32 bWanderPathAfterExitingCar : 1;
	uint32 bIsLeader : 1;
	uint32 bDontDragMeOutCar : 1; // unfinished feature
	uint32 m_ped_flagF8 : 1;
	uint32 bWillBeQuickJacked : 1;
	uint32 bCancelEnteringCar : 1; // after door is opened or couldn't be opened due to it's locked
	uint32 bObstacleShowedUpDuringKillObjective : 1;
	uint32 bDuckAndCover : 1;

	uint32 bStillOnValidPoly : 1; // set if the polygon the ped is on is still valid for collision
	uint32 bAllowMedicsToReviveMe : 1;
	uint32 bResetWalkAnims : 1;
	uint32 bStartWanderPathOnFoot : 1; // exits the car if he's in it, reset after path found
	uint32 bOnBoat : 1; // not just driver, may be just standing
	uint32 bBusJacked : 1;
	uint32 bGonnaKillTheCarJacker : 1; // only set when car is jacked from right door and when arrested by police
	uint32 bFadeOut : 1;

	uint32 bKnockedUpIntoAir : 1; // has ped been knocked up into the air by a car collision
	uint32 bHitSteepSlope : 1; // has ped collided/is standing on a steep slope (surface type)
	uint32 bCullExtraFarAway : 1; // special ped only gets culled if it's extra far away (for roadblocks)
	uint32 bClearObjective : 1;
	uint32 bTryingToReachDryLand : 1; // has ped just exited boat and trying to get to dry land
	uint32 bCollidedWithMyVehicle : 1;
	uint32 bRichFromMugging : 1; // ped has lots of cash cause they've been mugging people
	uint32 bChrisCriminal : 1; // Is a criminal as killed during Chris' police mission (should be counted as such)

	uint32 bShakeFist : 1;  // test shake hand at look entity
	uint32 bNoCriticalHits : 1; // if set, limbs won't came off
	uint32 bVehExitWillBeInstant : 1;
	uint32 bHasAlreadyBeenRecorded : 1;
	uint32 bFallenDown : 1;
eray orçunus's avatar
Fixes    
eray orçunus включено в состав коммита
385
#ifdef VC_PED_PORTS
Sergeanur's avatar
Sergeanur включено в состав коммита
386
	uint32 bSomeVCflag1 : 1;
eray orçunus's avatar
Fixes    
eray orçunus включено в состав коммита
387
#endif
aap's avatar
aap включено в состав коммита
388
389
390
#ifdef PED_SKIN
	uint32 bDontAcceptIKLookAts : 1;	// TODO: find uses of this
#endif
erorcun's avatar
erorcun включено в состав коммита
391
392
	uint32 m_ped_flagI40 : 1;
	uint32 m_ped_flagI80 : 1; // originally unused, KANGAROO_CHEAT define makes use of this as cheat toggle 
aap's avatar
aap включено в состав коммита
393
394

	uint8 CharCreatedBy;
eray orçunus's avatar
eray orçunus включено в состав коммита
395
396
397
398
	eObjective m_objective;
	eObjective m_prevObjective;
	CPed *m_pedInObjective;
	CVehicle *m_carInObjective;
eray orçunus's avatar
eray orçunus включено в состав коммита
399
	CVector m_nextRoutePointPos;
eray orçunus's avatar
eray orçunus включено в состав коммита
400
	CPed *m_leader;
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
401
	eFormation m_pedFormation;
eray orçunus's avatar
eray orçunus включено в состав коммита
402
403
	uint32 m_fearFlags;
	CEntity *m_threatEntity;
eray orçunus's avatar
eray orçunus включено в состав коммита
404
	CVector2D m_eventOrThreat;
eray orçunus's avatar
eray orçunus включено в состав коммита
405
406
	uint32 m_eventType;
	CEntity* m_pEventEntity;
eray orçunus's avatar
eray orçunus включено в состав коммита
407
	float m_fAngleToEvent;
eray orçunus's avatar
eray orçunus включено в состав коммита
408
	AnimBlendFrameData *m_pFrames[PED_NODE_MAX];
aap's avatar
aap включено в состав коммита
409
410
411
412
#ifdef PED_SKIN
	// stored inside the clump with non-skin ped
	RpAtomic *m_pWeaponModel;
#endif
eray orçunus's avatar
eray orçunus включено в состав коммита
413
414
	AssocGroupId m_animGroup;
	CAnimBlendAssociation *m_pVehicleAnim;
erorcun's avatar
erorcun включено в состав коммита
415
416
417
	CVector2D m_vecAnimMoveDelta;
	CVector m_vecOffsetSeek;
	CPedIK m_pedIK; 
eray orçunus's avatar
eray orçunus включено в состав коммита
418
419
	float m_actionX;
	float m_actionY;
eray orçunus's avatar
eray orçunus включено в состав коммита
420
	uint32 m_nPedStateTimer;
eray orçunus's avatar
eray orçunus включено в состав коммита
421
	PedState m_nPedState;
eray orçunus's avatar
eray orçunus включено в состав коммита
422
	PedState m_nLastPedState;
eray orçunus's avatar
eray orçunus включено в состав коммита
423
	eMoveState m_nMoveState;
eray orçunus's avatar
eray orçunus включено в состав коммита
424
425
	int32 m_nStoredMoveState;
	int32 m_nPrevMoveState;
eray orçunus's avatar
CPed...    
eray orçunus включено в состав коммита
426
	eWaitState m_nWaitState;
eray orçunus's avatar
eray orçunus включено в состав коммита
427
	uint32 m_nWaitTimer;
eray orçunus's avatar
eray orçunus включено в состав коммита
428
	void *m_pPathNodesStates[8]; // unused, probably leftover from VC
eray orçunus's avatar
eray orçunus включено в состав коммита
429
	CVector2D m_stPathNodeStates[10];
_AG's avatar
_AG включено в состав коммита
430
	uint16 m_nPathNodes;
eray orçunus's avatar
eray orçunus включено в состав коммита
431
	int16 m_nCurPathNode;
eray orçunus's avatar
eray orçunus включено в состав коммита
432
	int8 m_nPathDir;
_AG's avatar
_AG включено в состав коммита
433
434
public:
	CPathNode *m_pLastPathNode;
eray orçunus's avatar
eray orçunus включено в состав коммита
435
	CPathNode *m_pNextPathNode;
aap's avatar
aap включено в состав коммита
436
437
	float m_fHealth;
	float m_fArmour;
eray orçunus's avatar
eray orçunus включено в состав коммита
438
	int16 m_routeLastPoint;
eray orçunus's avatar
eray orçunus включено в состав коммита
439
440
	uint16 m_routeStartPoint;
	int16 m_routePointsPassed;
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
441
	int16 m_routeType;	// See PedRouteType
eray orçunus's avatar
eray orçunus включено в состав коммита
442
	int16 m_routePointsBeingPassed;
eray orçunus's avatar
eray orçunus включено в состав коммита
443
	CVector2D m_moved;
eray orçunus's avatar
eray orçunus включено в состав коммита
444
445
	float m_fRotationCur;
	float m_fRotationDest;
eray orçunus's avatar
eray orçunus включено в состав коммита
446
	float m_headingRate;
aap's avatar
aap включено в состав коммита
447
	uint16 m_vehDoor;
eray orçunus's avatar
eray orçunus включено в состав коммита
448
	int16 m_walkAroundType;
eray orçunus's avatar
eray orçunus включено в состав коммита
449
	CPhysical *m_pCurrentPhysSurface;
aap's avatar
aap включено в состав коммита
450
451
	CVector m_vecOffsetFromPhysSurface;
	CEntity *m_pCurSurface;
eray orçunus's avatar
eray orçunus включено в состав коммита
452
	CVector m_vecSeekPos;
eray orçunus's avatar
eray orçunus включено в состав коммита
453
	CEntity *m_pSeekTarget;
aap's avatar
aap включено в состав коммита
454
	CVehicle *m_pMyVehicle;
aap's avatar
aap включено в состав коммита
455
	bool bInVehicle;
eray orçunus's avatar
eray orçunus включено в состав коммита
456
	float m_distanceToCountSeekDone;
eray orçunus's avatar
eray orçunus включено в состав коммита
457
	bool bRunningToPhone;
eray orçunus's avatar
eray orçunus включено в состав коммита
458
	int16 m_phoneId;
erorcun's avatar
erorcun включено в состав коммита
459
460
461
462
#ifdef PEDS_REPORT_CRIMES_ON_PHONE
	bool m_facePhoneStart;
	CEntity *m_victimOfPlayerCrime;
#endif
eray orçunus's avatar
eray orçunus включено в состав коммита
463
	eCrimeType m_crimeToReportOnPhone;
eray orçunus's avatar
eray orçunus включено в состав коммита
464
	uint32 m_phoneTalkTimer;
eray orçunus's avatar
eray orçunus включено в состав коммита
465
	CAccident *m_lastAccident;
eray orçunus's avatar
eray orçunus включено в состав коммита
466
	uint32 m_nPedType;
aap's avatar
aap включено в состав коммита
467
	CPedStats *m_pedStats;
eray orçunus's avatar
eray orçunus включено в состав коммита
468
469
470
471
	float m_fleeFromPosX;
	float m_fleeFromPosY;
	CEntity *m_fleeFrom;
	uint32 m_fleeTimer;
eray orçunus's avatar
eray orçunus включено в состав коммита
472
473
	CEntity* m_collidingEntityWhileFleeing;
	uint32 m_collidingThingTimer;
aap's avatar
aap включено в состав коммита
474
	CEntity *m_pCollidingEntity;
eray orçunus's avatar
eray orçunus включено в состав коммита
475
476
	uint8 m_stateUnused;
	uint32 m_timerUnused;
Sergeanur's avatar
Sergeanur включено в состав коммита
477
	class CRange2D *m_wanderRangeBounds;
_AG's avatar
_AG включено в состав коммита
478
	CWeapon m_weapons[WEAPONTYPE_TOTAL_INVENTORY_WEAPONS];
eray orçunus's avatar
eray orçunus включено в состав коммита
479
	eWeaponType m_storedWeapon;
eray orçunus's avatar
eray orçunus включено в состав коммита
480
481
	uint8 m_currentWeapon;			// eWeaponType
	uint8 m_maxWeaponTypeAllowed;	// eWeaponType
eray orçunus's avatar
eray orçunus включено в состав коммита
482
483
484
	uint8 m_wepSkills;
	uint8 m_wepAccuracy;
	CEntity *m_pPointGunAt;
erorcun's avatar
erorcun включено в состав коммита
485
	CVector m_vecHitLastPos;
eray orçunus's avatar
eray orçunus включено в состав коммита
486
	uint32 m_curFightMove;
eray orçunus's avatar
eray orçunus включено в состав коммита
487
	uint8 m_fightButtonPressure;
withmorten's avatar
withmorten включено в состав коммита
488
	int8 m_fightState;
eray orçunus's avatar
eray orçunus включено в состав коммита
489
	bool m_takeAStepAfterAttack;
eray orçunus's avatar
eray orçunus включено в состав коммита
490
	CFire *m_pFire;
aap's avatar
aap включено в состав коммита
491
	CEntity *m_pLookTarget;
erorcun's avatar
erorcun включено в состав коммита
492
493
	float m_fLookDirection;
	int32 m_wepModelID;
eray orçunus's avatar
eray orçunus включено в состав коммита
494
495
496
	uint32 m_leaveCarTimer;
	uint32 m_getUpTimer;
	uint32 m_lookTimer;
aap's avatar
aap включено в состав коммита
497
	uint32 m_chatTimer;
eray orçunus's avatar
eray orçunus включено в состав коммита
498
	uint32 m_attackTimer;
eray orçunus's avatar
eray orçunus включено в состав коммита
499
	uint32 m_shootTimer; // shooting is a part of attack
aap's avatar
aap включено в состав коммита
500
	uint32 m_carJackTimer;
eray orçunus's avatar
eray orçunus включено в состав коммита
501
	uint32 m_objectiveTimer;
eray orçunus's avatar
eray orçunus включено в состав коммита
502
	uint32 m_duckTimer;
eray orçunus's avatar
eray orçunus включено в состав коммита
503
	uint32 m_duckAndCoverTimer;
eray orçunus's avatar
eray orçunus включено в состав коммита
504
	uint32 m_bloodyFootprintCountOrDeathTime;	// Death time when bDoBloodyFootprints is false. Weird decision
eray orçunus's avatar
eray orçunus включено в состав коммита
505
	uint8 m_panicCounter;
eray orçunus's avatar
eray orçunus включено в состав коммита
506
	bool m_deadBleeding;
eray orçunus's avatar
eray orçunus включено в состав коммита
507
	int8 m_bodyPartBleeding;		// PedNode, but -1 if there isn't
eray orçunus's avatar
eray orçunus включено в состав коммита
508
	CPed *m_nearPeds[10];
eray orçunus's avatar
eray orçunus включено в состав коммита
509
	uint16 m_numNearPeds;
eray orçunus's avatar
eray orçunus включено в состав коммита
510
	int8 m_lastWepDam;
eray orçunus's avatar
eray orçunus включено в состав коммита
511
512
	uint32 m_lastSoundStart;
	uint32 m_soundStart;
eray orçunus's avatar
eray orçunus включено в состав коммита
513
514
	uint16 m_lastQueuedSound;
	uint16 m_queuedSound;
eray orçunus's avatar
eray orçunus включено в состав коммита
515
516
	CVector m_vecSeekPosEx; // used for OBJECTIVE_GUARD_SPOT
	float m_distanceToCountSeekDoneEx; // used for OBJECTIVE_GUARD_SPOT
aap's avatar
aap включено в состав коммита
517

erorcun's avatar
erorcun включено в состав коммита
518
519
520
521
	static void *operator new(size_t) throw();
	static void *operator new(size_t, int) throw();
	static void operator delete(void*, size_t) throw();
	static void operator delete(void*, int) throw();
aap's avatar
aap включено в состав коммита
522

eray orçunus's avatar
eray orçunus включено в состав коммита
523
	CPed(uint32 pedType);
aap's avatar
aap включено в состав коммита
524
525
526
527
528
529
530
531
532
533
534
	~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*);
eray orçunus's avatar
eray orçunus включено в состав коммита
535

aap's avatar
aap включено в состав коммита
536
	virtual void SetMoveAnim(void);
Nikolay Korolev's avatar
Nikolay Korolev включено в состав коммита
537

erorcun's avatar
erorcun включено в состав коммита
538
	void AddWeaponModel(int id);
eray orçunus's avatar
eray orçunus включено в состав коммита
539
	void AimGun(void);
aap's avatar
aap включено в состав коммита
540
	void KillPedWithCar(CVehicle *veh, float impulse);
aap's avatar
aap включено в состав коммита
541
	void Say(uint16 audio);
eray orçunus's avatar
eray orçunus включено в состав коммита
542
543
	void SetLookFlag(CEntity *target, bool keepTryingToLook);
	void SetLookFlag(float direction, bool keepTryingToLook);
eray orçunus's avatar
eray orçunus включено в состав коммита
544
	void SetLookTimer(int time);
eray orçunus's avatar
eray orçunus включено в состав коммита
545
	void SetDie(AnimationId anim, float arg1, float arg2);
aap's avatar
aap включено в состав коммита
546
	void SetDead(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
547
	void ApplyHeadShot(eWeaponType weaponType, CVector pos, bool evenOnPlayer);
eray orçunus's avatar
eray orçunus включено в состав коммита
548
	void RemoveBodyPart(PedNode nodeId, int8 direction);
aap's avatar
aap включено в состав коммита
549
	bool OurPedCanSeeThisOne(CEntity *target);
eray orçunus's avatar
eray orçunus включено в состав коммита
550
	void Avoid(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
551
552
553
554
555
556
	void Attack(void);
	void ClearAimFlag(void);
	void ClearLookFlag(void);
	void RestorePreviousState(void);
	void ClearAttack(void);
	bool IsPedHeadAbovePos(float zOffset);
eray orçunus's avatar
eray orçunus включено в состав коммита
557
	void RemoveWeaponModel(int modelId);
eray orçunus's avatar
eray orçunus включено в состав коммита
558
	void SetCurrentWeapon(uint32 weaponType);
eray orçunus's avatar
eray orçunus включено в состав коммита
559
560
561
	void Duck(void);
	void ClearDuck(void);
	void ClearPointGunAt(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
562
563
564
565
	void BeingDraggedFromCar(void);
	void RestartNonPartialAnims(void);
	void LineUpPedWithCar(PedLineUpPhase phase);
	void SetPedPositionInCar(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
566
	void PlayFootSteps(void);
Nikolay Korolev's avatar
Nikolay Korolev включено в состав коммита
567
	void QuitEnteringCar(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
568
	void BuildPedLists(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
569
	uint32 GiveWeapon(eWeaponType weaponType, uint32 ammo);
eray orçunus's avatar
eray orçunus включено в состав коммита
570
571
572
	void CalculateNewOrientation(void);
	float WorkOutHeadingForMovingFirstPerson(float);
	void CalculateNewVelocity(void);
Sergeanur's avatar
Sergeanur включено в состав коммита
573
	bool CanSeeEntity(CEntity*, float threshold = CAN_SEE_ENTITY_ANGLE_THRESHOLD);
eray orçunus's avatar
eray orçunus включено в состав коммита
574
	void RestorePreviousObjective(void);
eray orçunus's avatar
CPed...    
eray orçunus включено в состав коммита
575
	void SetIdle(void);
Sergeanur's avatar
Sergeanur включено в состав коммита
576
#ifdef _MSC_VER
Nikolay Korolev's avatar
Nikolay Korolev включено в состав коммита
577
#if _MSC_VER >= 1920 && _MSC_VER < 1929
Sergeanur's avatar
Sergeanur включено в состав коммита
578
	__declspec(noinline) // workaround for a compiler bug, hooray MS :P
Nikolay Korolev's avatar
Nikolay Korolev включено в состав коммита
579
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
580
#endif
eray orçunus's avatar
eray orçunus включено в состав коммита
581
	void SetObjective(eObjective, void*);
eray orçunus's avatar
CPed...    
eray orçunus включено в состав коммита
582
583
	void SetObjective(eObjective);
	void SetObjective(eObjective, int16, int16);
Nikolay Korolev's avatar
Nikolay Korolev включено в состав коммита
584
585
	void SetObjective(eObjective, CVector);
	void SetObjective(eObjective, CVector, float);
eray orçunus's avatar
CPed...    
eray orçunus включено в состав коммита
586
587
588
589
590
591
592
	void ClearChat(void);
	void InformMyGangOfAttack(CEntity*);
	void ReactToAttack(CEntity*);
	void SetDuck(uint32);
	void RegisterThreatWithGangPeds(CEntity*);
	bool TurnBody(void);
	void Chat(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
593
	void CheckAroundForPossibleCollisions(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
594
	void SetSeek(CVector, float);
eray orçunus's avatar
eray orçunus включено в состав коммита
595
	void SetSeek(CEntity*, float);
eray orçunus's avatar
eray orçunus включено в состав коммита
596
597
598
	bool MakePhonecall(void);
	bool FacePhone(void);
	CPed *CheckForDeadPeds(void);
erorcun's avatar
erorcun включено в состав коммита
599
600
601
#ifdef PEDS_REPORT_CRIMES_ON_PHONE
	int32 CheckForPlayerCrimes(CPed *victim = nil);
#endif
eray orçunus's avatar
eray orçunus включено в состав коммита
602
603
	bool CheckForExplosions(CVector2D &area);
	CPed *CheckForGunShots(void);
withmorten's avatar
withmorten включено в состав коммита
604
	uint8 CheckForPointBlankPeds(CPed*);
eray orçunus's avatar
eray orçunus включено в состав коммита
605
606
607
	bool CheckIfInTheAir(void);
	void ClearAll(void);
	void SetPointGunAt(CEntity*);
aap's avatar
aap включено в состав коммита
608
	bool Seek(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
609
	bool SetWanderPath(int8);
eray orçunus's avatar
eray orçunus включено в состав коммита
610
	bool SetFollowPath(CVector);
eray orçunus's avatar
eray orçunus включено в состав коммита
611
612
613
614
615
616
617
	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);
eray orçunus's avatar
eray orçunus включено в состав коммита
618
619
620
621
622
623
624
625
626
627
628
629
	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);
erorcun's avatar
erorcun включено в состав коммита
630
	void SetEvasiveStep(CPhysical*, uint8);
Nikolay Korolev's avatar
Nikolay Korolev включено в состав коммита
631
	void GrantAmmo(eWeaponType, uint32);
eray orçunus's avatar
eray orçunus включено в состав коммита
632
633
634
635
636
	void SetEvasiveDive(CPhysical*, uint8);
	void SetAttack(CEntity*);
	void StartFightAttack(uint8);
	void SetWaitState(eWaitState, void*);
	bool FightStrike(CVector&);
Filip Gawin's avatar
Filip Gawin включено в состав коммита
637
	int GetLocalDirection(const CVector2D &);
eray orçunus's avatar
eray orçunus включено в состав коммита
638
639
640
	void StartFightDefend(uint8, uint8, uint8);
	void PlayHitSound(CPed*);
	void SetFall(int, AnimationId, uint8);
eray orçunus's avatar
eray orçunus включено в состав коммита
641
	void SetFlee(CEntity*, int);
eray orçunus's avatar
eray orçunus включено в состав коммита
642
	void SetFlee(CVector2D const &, int);
eray orçunus's avatar
eray orçunus включено в состав коммита
643
644
645
	void RemoveInCarAnims(void);
	void CollideWithPed(CPed*);
	void SetDirectionToWalkAroundObject(CEntity*);
eray orçunus's avatar
eray orçunus включено в состав коммита
646
647
648
649
650
651
652
653
654
655
656
	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);
eray orçunus's avatar
eray orçunus включено в состав коммита
657
	void EndFight(uint8);
eray orçunus's avatar
eray orçunus включено в состав коммита
658
659
660
661
662
663
	void EnterCar(void);
	uint8 GetNearestTrainPedPosition(CVehicle*, CVector&);
	uint8 GetNearestTrainDoor(CVehicle*, CVector&);
	void LineUpPedWithTrain(void);
	void ExitCar(void);
	void Fight(void);
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
664
	bool FindBestCoordsFromNodes(CVector, CVector*);
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
665
666
	void Wait(void);
	void ProcessObjective(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
667
668
669
670
671
	bool SeekFollowingPath(CVector*);
	void Flee(void);
	void FollowPath(void);
	CVector GetFormationPosition(void);
	void GetNearestDoor(CVehicle*, CVector&);
eray orçunus's avatar
eray orçunus включено в состав коммита
672
673
674
675
676
	bool GetNearestPassengerDoor(CVehicle*, CVector&);
	int GetNextPointOnRoute(void);
	uint8 GetPedRadioCategory(uint32);
	int GetWeaponSlot(eWeaponType);
	void GoToNearestDoor(CVehicle*);
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
677
	bool HaveReachedNextPointOnRoute(float);
eray orçunus's avatar
eray orçunus включено в состав коммита
678
679
680
	void Idle(void);
	void InTheAir(void);
	void SetLanding(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
681
682
683
	void InvestigateEvent(void);
	bool IsPedDoingDriveByShooting(void);
	bool IsRoomToBeCarJacked(void);
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
684
685
686
687
688
689
690
	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);
eray orçunus's avatar
eray orçunus включено в состав коммита
691
692
693
694
695
696
	void ProcessBuoyancy(void);
	void ServiceTalking(void);
	void SetJump(void);
	void WanderPath(void);
	void ReactToPointGun(CEntity*);
	void SeekCar(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
697
	bool PositionPedOutOfCollision(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
698
699
	bool RunToReportCrime(eCrimeType);
	bool PlacePedOnDryLand(void);
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
700
	bool PossiblyFindBetterPosToSeekCar(CVector*, CVehicle*);
eray orçunus's avatar
eray orçunus включено в состав коммита
701
	void UpdateFromLeader(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
702
	uint32 ScanForThreats(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
703
704
705
	void SetEnterCar(CVehicle*, uint32);
	bool WarpPedToNearEntityOffScreen(CEntity*);
	void SetExitCar(CVehicle*, uint32);
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
706
707
708
709
	void SetFormation(eFormation);
	bool WillChat(CPed*);
	void SetEnterTrain(CVehicle*, uint32);
	void SetEnterCar_AllClear(CVehicle*, uint32, uint32);
eray orçunus's avatar
eray orçunus включено в состав коммита
710
	void SetSolicit(uint32 time);
eray orçunus's avatar
eray orçunus включено в состав коммита
711
	void ScanForInterestingStuff(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
712
713
	void WarpPedIntoCar(CVehicle*);
	void SetCarJack(CVehicle*);
eray orçunus's avatar
eray orçunus включено в состав коммита
714
	bool WarpPedToNearLeaderOffScreen(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
715
	void Solicit(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
716
	void SetExitBoat(CVehicle*);
eray orçunus's avatar
eray orçunus включено в состав коммита
717
718

	// Static methods
aap's avatar
aap включено в состав коммита
719
720
721
	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);
eray orçunus's avatar
eray orçunus включено в состав коммита
722
723
724
	static void Initialise(void);
	static void SetAnimOffsetForEnterOrExitVehicle(void);
	static void LoadFightData(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
725
726

	// Callbacks
Nikolay Korolev's avatar
Nikolay Korolev включено в состав коммита
727
728
729
730
731
732
733
734
735
736
737
	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);
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
738
	static void PedSetInCarCB(CAnimBlendAssociation *assoc, void *arg);
Nikolay Korolev's avatar
Nikolay Korolev включено в состав коммита
739
740
741
742
743
744
745
746
747
748
749
750
751
752
	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);
eray orçunus's avatar
eray orçunus включено в состав коммита
753

Sergeanur's avatar
Sergeanur включено в состав коммита
754
	bool IsPlayer(void) const;
eray orçunus's avatar
eray orçunus включено в состав коммита
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
	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);
Sergeanur's avatar
Sergeanur включено в состав коммита
772
	bool IsGangMember(void) const;
eray orçunus's avatar
eray orçunus включено в состав коммита
773
	void Die(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
774
775
776
	void EnterTrain(void);
	void ExitTrain(void);
	void Fall(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
777
778
	bool IsPedShootable(void);
	void Look(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
779
780
781
	void SetInTheAir(void);
	void RestoreHeadPosition(void);
	void PointGunAt(void);
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
782
	bool ServiceTalkingWhenDead(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
783
	void SetPedPositionInTrain(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
784
785
786
787
	void SetShootTimer(uint32);
	void SetSeekCar(CVehicle*, uint32);
	void SetSeekBoatPosition(CVehicle*);
	void SetExitTrain(CVehicle*);
eray orçunus's avatar
Peds    
eray orçunus включено в состав коммита
788
789
790
	void WanderRange(void);
	void SetFollowRoute(int16, int16);
	void SeekBoatPosition(void);
eray orçunus's avatar
eray orçunus включено в состав коммита
791
792
	void UpdatePosition(void);
	CObject *SpawnFlyingComponent(int, int8);
eray orçunus's avatar
eray orçunus включено в состав коммита
793
	void SetCarJack_AllClear(CVehicle*, uint32, uint32);
eray orçunus's avatar
eray orçunus включено в состав коммита
794
#ifdef VC_PED_PORTS
Sergeanur's avatar
Sergeanur включено в состав коммита
795
	bool CanPedJumpThis(CEntity *unused, CVector *damageNormal = nil);
eray orçunus's avatar
eray orçunus включено в состав коммита
796
797
798
#else
	bool CanPedJumpThis(CEntity*);
#endif
eray orçunus's avatar
eray orçunus включено в состав коммита
799

aap's avatar
aap включено в состав коммита
800
801
802
	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]; }
eray orçunus's avatar
eray orçunus включено в состав коммита
803

aap's avatar
aap включено в состав коммита
804
805
	PedState GetPedState(void) { return m_nPedState; }
	void SetPedState(PedState state) { m_nPedState = state; }
Fire-Head's avatar
Fire-Head включено в состав коммита
806
807
	bool Dead(void) { return m_nPedState == PED_DEAD; }
	bool Dying(void) { return m_nPedState == PED_DIE; }
eray orçunus's avatar
eray orçunus включено в состав коммита
808
	bool DyingOrDead(void) { return m_nPedState == PED_DIE || m_nPedState == PED_DEAD; }
Fire-Head's avatar
Fire-Head включено в состав коммита
809
	bool OnGround(void) { return m_nPedState == PED_FALL || m_nPedState == PED_DIE || m_nPedState == PED_DEAD; }
eray orçunus's avatar
eray orçunus включено в состав коммита
810
	bool OnGroundOrGettingUp(void) { return OnGround() || m_nPedState == PED_GETUP; }
Fire-Head's avatar
Fire-Head включено в состав коммита
811
812
	
	bool Driving(void) { return m_nPedState == PED_DRIVING; }
eray orçunus's avatar
eray orçunus включено в состав коммита
813
	bool InVehicle(void) { return bInVehicle && m_pMyVehicle; } // True when ped is sitting/standing in vehicle, not in enter/exit state.
eray orçunus's avatar
eray orçunus включено в состав коммита
814
815
	bool EnteringCar(void) { return m_nPedState == PED_ENTER_CAR || m_nPedState == PED_CARJACK; }

Sergeanur's avatar
Sergeanur включено в состав коммита
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
	// It was inlined in III but not in VC.
	inline void
	ReplaceWeaponWhenExitingVehicle(void)
	{
		eWeaponType weaponType = GetWeapon()->m_eWeaponType;

		// If it's Uzi, we may have stored weapon. Uzi is the only gun we can use in car.
		if (IsPlayer() && weaponType == WEAPONTYPE_UZI) {
			if (/*IsPlayer() && */ m_storedWeapon != WEAPONTYPE_UNIDENTIFIED) {
				SetCurrentWeapon(m_storedWeapon);
				m_storedWeapon = WEAPONTYPE_UNIDENTIFIED;
			}
		} else {
			AddWeaponModel(CWeaponInfo::GetWeaponInfo(weaponType)->m_nModelId);
		}
	}

	// It was inlined in III but not in VC.
	inline void
	RemoveWeaponWhenEnteringVehicle(void)
	{
		if (IsPlayer() && HasWeapon(WEAPONTYPE_UZI) && GetWeapon(WEAPONTYPE_UZI).m_nAmmoTotal > 0) {
			if (m_storedWeapon == WEAPONTYPE_UNIDENTIFIED)
				m_storedWeapon = GetWeapon()->m_eWeaponType;
			SetCurrentWeapon(WEAPONTYPE_UZI);
		} else {
			CWeaponInfo *ourWeapon = CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType);
			RemoveWeaponModel(ourWeapon->m_nModelId);
		}
	}
	bool IsNotInWreckedVehicle()
	{
		return m_pMyVehicle != nil && ((CEntity*)m_pMyVehicle)->GetStatus() != STATUS_WRECKED;
	}
erorcun's avatar
erorcun включено в состав коммита
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
	// My additions, because there were many, many instances of that.
	inline void SetFindPathAndFlee(CEntity *fleeFrom, int time, bool walk = false)
	{
		SetFlee(fleeFrom, time);
		bUsePedNodeSeek = true;
		m_pNextPathNode = nil;
		if (walk)
			SetMoveState(PEDMOVE_WALK);
	}

	inline void SetFindPathAndFlee(CVector2D const &from, int time, bool walk = false)
	{
		SetFlee(from, time);
		bUsePedNodeSeek = true;
		m_pNextPathNode = nil;
		if (walk)
			SetMoveState(PEDMOVE_WALK);
	}
eray orçunus's avatar
eray orçunus включено в состав коммита
868

Sergeanur's avatar
Sergeanur включено в состав коммита
869
870
871
872
873
874
875
	inline void SetWeaponLockOnTarget(CEntity *target)
	{
		m_pPointGunAt = (CPed *)target;
		if(target)
			((CEntity *)target)->RegisterReference(&m_pPointGunAt);
	}

aap's avatar
aap включено в состав коммита
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
	// Using this to abstract nodes of skinned and non-skinned meshes
	CVector GetNodePosition(int32 node)
	{
#ifdef PED_SKIN
		if(IsClumpSkinned(GetClump())){
			RwV3d pos = { 0.0f, 0.0f, 0.0f };
			RpHAnimHierarchy *hier = GetAnimHierarchyFromSkinClump(GetClump());
			int32 idx = RpHAnimIDGetIndex(hier, m_pFrames[node]->nodeID);
			RwMatrix *mats = RpHAnimHierarchyGetMatrixArray(hier);
			// this is just stupid
			//RwV3dTransformPoints(&pos, &pos, 1, &mats[idx]);
			pos = mats[idx].pos;
			return pos;
		}else
#endif
		{
			RwMatrix mat;
			CPedIK::GetWorldMatrix(m_pFrames[node]->frame, &mat);
			return mat.pos;
		}
	}
	void TransformToNode(CVector &pos, int32 node)
	{
#ifdef PED_SKIN
		if(IsClumpSkinned(GetClump())){
			RpHAnimHierarchy *hier = GetAnimHierarchyFromSkinClump(GetClump());
			int32 idx = RpHAnimIDGetIndex(hier, m_pFrames[node]->nodeID);
			RwMatrix *mats = RpHAnimHierarchyGetMatrixArray(hier);
Sergeanur's avatar
Sergeanur включено в состав коммита
904
			RwV3dTransformPoints(&pos, &pos, 1, &mats[idx]);
aap's avatar
aap включено в состав коммита
905
906
907
908
909
		}else
#endif
		{
			RwFrame *frame;
			for (frame = m_pFrames[node]->frame; frame; frame = RwFrameGetParent(frame))
Sergeanur's avatar
Sergeanur включено в состав коммита
910
				RwV3dTransformPoints(&pos, &pos, 1, RwFrameGetMatrix(frame));
aap's avatar
aap включено в состав коммита
911
912
913
		}
	}

eray orçunus's avatar
eray orçunus включено в состав коммита
914
	// set by 0482:set_threat_reaction_range_multiplier opcode
eray orçunus's avatar
eray orçunus включено в состав коммита
915
	static uint16 nThreatReactionRangeMultiplier;
eray orçunus's avatar
eray orçunus включено в состав коммита
916

eray orçunus's avatar
eray orçunus включено в состав коммита
917
	// set by 0481:set_enter_car_range_multiplier opcode
eray orçunus's avatar
eray orçunus включено в состав коммита
918
	static uint16 nEnterCarRangeMultiplier;
eray orçunus's avatar
eray orçunus включено в состав коммита
919

eray orçunus's avatar
eray orçunus включено в состав коммита
920
921
922
	static bool bNastyLimbsCheat;
	static bool bPedCheat2;
	static bool bPedCheat3;
eray orçunus's avatar
eray orçunus включено в состав коммита
923
	static CVector2D ms_vec2DFleePosition;
eray orçunus's avatar
eray orçunus включено в состав коммита
924

erorcun's avatar
erorcun включено в состав коммита
925
#ifdef DEBUGMENU
eray orçunus's avatar
eray orçunus включено в состав коммита
926
	static bool bPopHeadsOnHeadshot;
eray orçunus's avatar
eray orçunus включено в состав коммита
927
#endif
eray orçunus's avatar
eray orçunus включено в состав коммита
928

eray orçunus's avatar
eray orçunus включено в состав коммита
929
#ifndef MASTER
eray orçunus's avatar
eray orçunus включено в состав коммита
930
	// Mobile things
Sergeanur's avatar
Sergeanur включено в состав коммита
931
932
933
934
935
936
937
938
939
	void DebugDrawPedDestination(CPed *, int, int);
	void DebugDrawPedDesiredHeading(CPed *, int, int);
	void DebugDrawCollisionRadius(float, float, float, float, int);
	void DebugDrawVisionRange(CVector, float);
	void DebugDrawVisionSimple(CVector, float);
	void DebugDrawLook();
	void DebugDrawPedPsyche();
	void DebugDrawDebugLines();

eray orçunus's avatar
eray orçunus включено в состав коммита
940
	static void SwitchDebugDisplay(void);
Sergeanur's avatar
Sergeanur включено в состав коммита
941
942
943
	static int GetDebugDisplay(void);

	void DebugDrawLookAtPoints();
eray orçunus's avatar
eray orçunus включено в состав коммита
944
	void DebugRenderOnePedText(void);
Sergeanur's avatar
Sergeanur включено в состав коммита
945
	void DebugRenderClosePedText();
eray orçunus's avatar
eray orçunus включено в состав коммита
946
#endif
aap's avatar
aap включено в состав коммита
947
948
949
950

#ifdef PED_SKIN
	void renderLimb(int node);
#endif
Nikolay Korolev's avatar
Nikolay Korolev включено в состав коммита
951
952
953
954
955

#ifdef COMPATIBLE_SAVES
	virtual void Save(uint8*& buf);
	virtual void Load(uint8*& buf);
#endif
aap's avatar
aap включено в состав коммита
956
};
eray orçunus's avatar
eray orçunus включено в состав коммита
957

Nikolay Korolev's avatar
Nikolay Korolev включено в состав коммита
958
959
void FinishFuckUCB(CAnimBlendAssociation *assoc, void *arg);

aap's avatar
aap включено в состав коммита
960
#ifndef PED_SKIN
bigbossbro08's avatar
bigbossbro08 включено в состав коммита
961
VALIDATE_SIZE(CPed, 0x53C);
aap's avatar
aap включено в состав коммита
962
#endif