Some CPed functions
Signed-off-by: eray orçunus <erayorcunus@gmail.com>
This commit is contained in:
parent
54837368c3
commit
ed69be36cc
@ -11,6 +11,8 @@ void *CPed::operator new(size_t sz) { return CPools::GetPedPool()->New(); }
|
|||||||
void CPed::operator delete(void *p, size_t sz) { CPools::GetPedPool()->Delete((CPed*)p); }
|
void CPed::operator delete(void *p, size_t sz) { CPools::GetPedPool()->Delete((CPed*)p); }
|
||||||
|
|
||||||
WRAPPER void CPed::KillPedWithCar(CVehicle *veh, float impulse) { EAXJMP(0x4EC430); }
|
WRAPPER void CPed::KillPedWithCar(CVehicle *veh, float impulse) { EAXJMP(0x4EC430); }
|
||||||
|
WRAPPER void CPed::Say(uint16 audio) { EAXJMP(0x4E5A10); }
|
||||||
|
WRAPPER void CPed::SetLookFlag(CEntity* to, bool set) { EAXJMP(0x4C6460); }
|
||||||
|
|
||||||
static char ObjectiveText[34][28] = {
|
static char ObjectiveText[34][28] = {
|
||||||
"No Obj",
|
"No Obj",
|
||||||
@ -175,3 +177,56 @@ CPed::UseGroundColModel(void)
|
|||||||
m_nPedState == PED_DIE ||
|
m_nPedState == PED_DIE ||
|
||||||
m_nPedState == PED_DEAD;
|
m_nPedState == PED_DEAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CPed::AddWeaponModel(int id)
|
||||||
|
{
|
||||||
|
RpAtomic* atm;
|
||||||
|
|
||||||
|
if (id != -1) {
|
||||||
|
atm = (RpAtomic*)CModelInfo::GetModelInfo(id)->CreateInstance();
|
||||||
|
RwFrameDestroy(RpAtomicGetFrame(atm));
|
||||||
|
RpAtomicSetFrame(atm, m_pFrames[PED_HANDR]->frame);
|
||||||
|
RpClumpAddAtomic((RpClump*)m_rwObject, atm);
|
||||||
|
m_wepModelID = id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CPed::AimGun()
|
||||||
|
{
|
||||||
|
RwV3d pos;
|
||||||
|
CVector vector;
|
||||||
|
uint8 newFlag;
|
||||||
|
|
||||||
|
if (m_pSeekTarget) {
|
||||||
|
if (m_pSeekTarget->m_status == STATUS_PHYSICS) {
|
||||||
|
m_pSeekTarget->m_pedIK.GetComponentPosition(&pos, 1);
|
||||||
|
vector.x = pos.x;
|
||||||
|
vector.y = pos.y;
|
||||||
|
vector.z = pos.z;
|
||||||
|
} else {
|
||||||
|
vector = *(m_pSeekTarget->GetMatrix().GetPosition());
|
||||||
|
}
|
||||||
|
CPed::Say(0x74);
|
||||||
|
|
||||||
|
m_ped_flagB40 = m_pedIK.PointGunAtPosition(&vector);
|
||||||
|
if (m_pPedFight != m_pSeekTarget) {
|
||||||
|
CPed::SetLookFlag(m_pSeekTarget, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (CPed::IsPlayer()) {
|
||||||
|
newFlag = m_pedIK.PointGunInDirection(m_fLookDirection, m_vecMoveSpeedAvg.y);
|
||||||
|
} else {
|
||||||
|
newFlag = m_pedIK.PointGunInDirection(m_fLookDirection, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_ped_flagB40 = newFlag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
STARTPATCHES
|
||||||
|
InjectHook(0x4CF8F0, &CPed::AddWeaponModel, PATCH_JUMP);
|
||||||
|
InjectHook(0x4C6AA0, &CPed::AimGun, PATCH_JUMP);
|
||||||
|
ENDPATCHES
|
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#include "Physical.h"
|
#include "Physical.h"
|
||||||
#include "Weapon.h"
|
#include "Weapon.h"
|
||||||
|
#include "PedIK.h"
|
||||||
|
#include <animation\AnimBlendClumpData.h>
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PED_MAX_WEAPONS = 13
|
PED_MAX_WEAPONS = 13
|
||||||
@ -79,6 +81,22 @@ enum {
|
|||||||
PEDMOVE_SPRINT,
|
PEDMOVE_SPRINT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum PedNode {
|
||||||
|
PED_WAIST = 0,
|
||||||
|
PED_TORSO, // Smid on PS2/PC, Storso on mobile/xbox. We follow mobile/xbox (makes kicking on ground look better)
|
||||||
|
PED_HEAD,
|
||||||
|
PED_UPPERARML,
|
||||||
|
PED_UPPERARMR,
|
||||||
|
PED_HANDL,
|
||||||
|
PED_HANDR,
|
||||||
|
PED_UPPERLEGL,
|
||||||
|
PED_UPPERLEGR,
|
||||||
|
PED_FOOTL,
|
||||||
|
PED_FOOTR,
|
||||||
|
PED_NODE_11,
|
||||||
|
PED_NODE_MAX
|
||||||
|
};
|
||||||
|
|
||||||
class CVehicle;
|
class CVehicle;
|
||||||
|
|
||||||
class CPed : public CPhysical
|
class CPed : public CPhysical
|
||||||
@ -159,7 +177,16 @@ public:
|
|||||||
uint8 m_ped_flagI20 : 1;
|
uint8 m_ped_flagI20 : 1;
|
||||||
uint8 m_ped_flagI40 : 1;
|
uint8 m_ped_flagI40 : 1;
|
||||||
uint8 m_ped_flagI80 : 1;
|
uint8 m_ped_flagI80 : 1;
|
||||||
uint8 stuff1[199];
|
uint8 stuff10[60];
|
||||||
|
int32 m_pEventEntity;
|
||||||
|
int32 m_fAngleToEvent;
|
||||||
|
AnimBlendFrameData *m_pFrames[PED_FRAME_MAX];
|
||||||
|
int32 m_animGroup;
|
||||||
|
int32 m_pVehicleAnim;
|
||||||
|
CVector2D m_vecAnimMoveDelta;
|
||||||
|
CVector m_vecOffsetSeek;
|
||||||
|
CPedIK m_pedIK;
|
||||||
|
uint8 stuff1[12];
|
||||||
int32 m_nPedState;
|
int32 m_nPedState;
|
||||||
int32 m_nLastPedState;
|
int32 m_nLastPedState;
|
||||||
int32 m_nMoveState;
|
int32 m_nMoveState;
|
||||||
@ -167,7 +194,8 @@ public:
|
|||||||
CEntity *m_pCurrentPhysSurface;
|
CEntity *m_pCurrentPhysSurface;
|
||||||
CVector m_vecOffsetFromPhysSurface;
|
CVector m_vecOffsetFromPhysSurface;
|
||||||
CEntity *m_pCurSurface;
|
CEntity *m_pCurSurface;
|
||||||
uint8 stuff3[16];
|
uint8 stuff3[12];
|
||||||
|
CPed* m_pSeekTarget;
|
||||||
CVehicle *m_pMyVehicle;
|
CVehicle *m_pMyVehicle;
|
||||||
bool bInVehicle;
|
bool bInVehicle;
|
||||||
uint8 stuff4[23];
|
uint8 stuff4[23];
|
||||||
@ -179,14 +207,25 @@ public:
|
|||||||
CWeapon m_weapons[PED_MAX_WEAPONS];
|
CWeapon m_weapons[PED_MAX_WEAPONS];
|
||||||
int32 stuff7;
|
int32 stuff7;
|
||||||
uint8 m_currentWeapon;
|
uint8 m_currentWeapon;
|
||||||
uint8 stuff[163];
|
uint8 stuff[3];
|
||||||
|
int32 m_pPointGunAt;
|
||||||
|
CVector m_vecHitLastPos;
|
||||||
|
uint8 stuff8[12];
|
||||||
|
CPed *m_pPedFight;
|
||||||
|
float m_fLookDirection;
|
||||||
|
int32 m_wepModelID;
|
||||||
|
uint8 stuff9[120];
|
||||||
|
|
||||||
static void *operator new(size_t);
|
static void *operator new(size_t);
|
||||||
static void operator delete(void*, size_t);
|
static void operator delete(void*, size_t);
|
||||||
|
|
||||||
bool IsPlayer(void) { return m_nPedType == 0 || m_nPedType== 1 || m_nPedType == 2 || m_nPedType == 3; }
|
bool IsPlayer(void) { return m_nPedType == 0 || m_nPedType== 1 || m_nPedType == 2 || m_nPedType == 3; }
|
||||||
bool UseGroundColModel(void);
|
bool UseGroundColModel(void);
|
||||||
|
void AddWeaponModel(int id);
|
||||||
|
void AimGun();
|
||||||
void KillPedWithCar(CVehicle *veh, float impulse);
|
void KillPedWithCar(CVehicle *veh, float impulse);
|
||||||
|
void Say(uint16 audio);
|
||||||
|
void SetLookFlag(CEntity *to, bool set);
|
||||||
CWeapon *GetWeapon(void) { return &m_weapons[m_currentWeapon]; }
|
CWeapon *GetWeapon(void) { return &m_weapons[m_currentWeapon]; }
|
||||||
|
|
||||||
static Bool &bNastyLimbsCheat;
|
static Bool &bNastyLimbsCheat;
|
||||||
@ -200,4 +239,4 @@ static_assert(offsetof(CPed, m_nPedType) == 0x32C, "CPed: error");
|
|||||||
static_assert(offsetof(CPed, m_pCollidingEntity) == 0x34C, "CPed: error");
|
static_assert(offsetof(CPed, m_pCollidingEntity) == 0x34C, "CPed: error");
|
||||||
static_assert(offsetof(CPed, m_weapons) == 0x35C, "CPed: error");
|
static_assert(offsetof(CPed, m_weapons) == 0x35C, "CPed: error");
|
||||||
static_assert(offsetof(CPed, m_currentWeapon) == 0x498, "CPed: error");
|
static_assert(offsetof(CPed, m_currentWeapon) == 0x498, "CPed: error");
|
||||||
static_assert(sizeof(CPed) == 0x53C, "CPed: error");
|
static_assert(sizeof(CPed) == 0x53C, "CPed: error");
|
7
src/entities/PedIK.cpp
Normal file
7
src/entities/PedIK.cpp
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include "common.h"
|
||||||
|
#include "patcher.h"
|
||||||
|
#include "Ped.h"
|
||||||
|
|
||||||
|
WRAPPER void CPedIK::GetComponentPosition(RwV3d* pos, int id) { EAXJMP(0x4ED0F0); }
|
||||||
|
WRAPPER bool CPedIK::PointGunInDirection(float phi, float theta) { EAXJMP(0x4ED9B0); }
|
||||||
|
WRAPPER bool CPedIK::PointGunAtPosition(CVector* position) { EAXJMP(0x4ED920); }
|
26
src/entities/PedIK.h
Normal file
26
src/entities/PedIK.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <common.h>
|
||||||
|
|
||||||
|
struct LimbOrientation
|
||||||
|
{
|
||||||
|
float phi;
|
||||||
|
float theta;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CPed;
|
||||||
|
|
||||||
|
class CPedIK
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CPed* m_ped;
|
||||||
|
LimbOrientation m_headOrient;
|
||||||
|
LimbOrientation m_torsoOrient;
|
||||||
|
LimbOrientation m_upperArmOrient;
|
||||||
|
LimbOrientation m_lowerArmOrient;
|
||||||
|
int32 m_flags;
|
||||||
|
|
||||||
|
void GetComponentPosition(RwV3d* pos, int id);
|
||||||
|
bool PointGunInDirection(float phi, float theta);
|
||||||
|
bool PointGunAtPosition(CVector* position);
|
||||||
|
};
|
||||||
|
static_assert(sizeof(CPedIK) == 0x28, "CPedIK: error");
|
Loading…
Reference in New Issue
Block a user