From cc731f47324cf58c899b242e34d661b651d3acef Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Tue, 25 Jun 2019 01:42:23 +0300 Subject: More replay stuff --- src/entities/Automobile.cpp | 5 +++++ src/entities/Automobile.h | 16 ++++++++++++++-- src/entities/Object.cpp | 2 ++ src/entities/Object.h | 1 + src/entities/Ped.cpp | 27 +++++++++++++++++++++++++++ src/entities/Ped.h | 29 ++++++++++++++++++++++++++++- src/entities/Vehicle.h | 13 +++++++++---- 7 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 src/entities/Automobile.cpp (limited to 'src/entities') diff --git a/src/entities/Automobile.cpp b/src/entities/Automobile.cpp new file mode 100644 index 00000000..89fac33e --- /dev/null +++ b/src/entities/Automobile.cpp @@ -0,0 +1,5 @@ +#include "common.h" +#include "patcher.h" +#include "Automobile.h" + +WRAPPER void CAutomobile::SetDoorDamage(int32, uint32, bool) { EAXJMP(0x530200); } \ No newline at end of file diff --git a/src/entities/Automobile.h b/src/entities/Automobile.h index 379124e6..7422112b 100644 --- a/src/entities/Automobile.h +++ b/src/entities/Automobile.h @@ -1,14 +1,26 @@ #pragma once +#include "DamageManager.h" +#include "Door.h" +#include "RwHelper.h" #include "Vehicle.h" class CAutomobile : public CVehicle { public: // 0x288 - uint8 stuff1[484]; + CDamageManager m_DamageManager; + CDoor m_aDoors[6]; + RwFrame *m_apModelNodes[20]; + uint8 stuff1[160]; float m_afWheelSuspDist[4]; - uint8 stuff2[300]; + uint8 stuff2[44]; + float m_afWheelRotation[4]; + uint8 stuff3[200]; + float m_fCarGunLR; + uint8 stuff4[36]; + + void SetDoorDamage(int32, uint32, bool); /* TODO: eDoors */ }; static_assert(sizeof(CAutomobile) == 0x5A8, "CAutomobile: error"); static_assert(offsetof(CAutomobile, m_afWheelSuspDist) == 0x46C, "CAutomobile: error"); diff --git a/src/entities/Object.cpp b/src/entities/Object.cpp index 35a64604..8c7cc4c9 100644 --- a/src/entities/Object.cpp +++ b/src/entities/Object.cpp @@ -63,6 +63,8 @@ CObject::Render(void) CEntity::Render(); } +WRAPPER void CObject::DeleteAllTempObjectInArea(CVector, float) { EAXJMP(0x4BBED0); } + STARTPATCHES InjectHook(0x4BB1E0, &CObject::Render_, PATCH_JUMP); ENDPATCHES diff --git a/src/entities/Object.h b/src/entities/Object.h index 2079ff0e..a156609c 100644 --- a/src/entities/Object.h +++ b/src/entities/Object.h @@ -71,6 +71,7 @@ public: void ObjectDamage(float amount); + static void DeleteAllTempObjectInArea(CVector, float); void Render_(void) { CObject::Render(); } }; diff --git a/src/entities/Ped.cpp b/src/entities/Ped.cpp index f3e212d4..20a5b48c 100644 --- a/src/entities/Ped.cpp +++ b/src/entities/Ped.cpp @@ -975,6 +975,33 @@ CPed::ClearPointGunAt(void) } } +WRAPPER void CPed::PedGetupCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE810); } +WRAPPER void CPed::PedStaggerCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE8D0); } +WRAPPER void CPed::PedEvadeCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4D36E0); } +WRAPPER void CPed::FinishDieAnimCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4D3950); } +WRAPPER void CPed::FinishedWaitCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4D6520); } +WRAPPER void CPed::FinishLaunchCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4D7490); } +WRAPPER void CPed::FinishHitHeadCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4D7A80); } +WRAPPER void CPed::PedAnimGetInCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4DEC80); } +WRAPPER void CPed::PedAnimDoorOpenCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4DE500); } +WRAPPER void CPed::PedAnimPullPedOutCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4DEAF0); } +WRAPPER void CPed::PedAnimDoorCloseCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4DF1B0); } +WRAPPER void CPed::SetInCarCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CF220); } +WRAPPER void CPed::PedSetOutCarCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE8F0); } +WRAPPER void CPed::PedAnimAlignCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4DE130); } +WRAPPER void CPed::PedSetDraggedOutCarCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CF000); } +WRAPPER void CPed::PedAnimStepOutCarCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4DF5C0); } +WRAPPER void CPed::PedSetInTrainCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4E3290); } +WRAPPER void CPed::PedSetOutTrainCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4E36E0); } +WRAPPER void CPed::FinishFightMoveCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4E9830); } +WRAPPER void CPed::PedAnimDoorCloseRollingCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4E4B90); } +WRAPPER void CPed::FinishJumpCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4D7A50); } +WRAPPER void CPed::PedLandCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE8A0); } +WRAPPER void FinishFuckUCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4C6620); } +WRAPPER void CPed::RestoreHeadingRateCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4D6550); } +WRAPPER void CPed::PedSetQuickDraggedOutCarPositionCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4E2480); } +WRAPPER void CPed::PedSetDraggedOutCarPositionCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4E2920); } + STARTPATCHES InjectHook(0x4CF8F0, &CPed::AddWeaponModel, PATCH_JUMP); InjectHook(0x4C6AA0, &CPed::AimGun, PATCH_JUMP); diff --git a/src/entities/Ped.h b/src/entities/Ped.h index 800c5bb9..43131533 100644 --- a/src/entities/Ped.h +++ b/src/entities/Ped.h @@ -280,7 +280,32 @@ public: void ClearPointGunAt(void); static RwObject *SetPedAtomicVisibilityCB(RwObject *object, void *data); static RwFrame *RecurseFrameChildrenVisibilityCB(RwFrame *frame, void *data); - static void FinishedAttackCB(CAnimBlendAssociation *attackAssoc, void *arg); + static void PedGetupCB(CAnimBlendAssociation *assoc, void *arg); + static void PedStaggerCB(CAnimBlendAssociation *assoc, void *arg); + static void PedEvadeCB(CAnimBlendAssociation *assoc, void *arg); + static void FinishDieAnimCB(CAnimBlendAssociation *assoc, void *arg); + static void FinishedWaitCB(CAnimBlendAssociation *assoc, void *arg); + static void FinishLaunchCB(CAnimBlendAssociation *assoc, void *arg); + static void FinishHitHeadCB(CAnimBlendAssociation *assoc, void *arg); + static void PedAnimGetInCB(CAnimBlendAssociation *assoc, void *arg); + static void PedAnimDoorOpenCB(CAnimBlendAssociation *assoc, void *arg); + static void PedAnimPullPedOutCB(CAnimBlendAssociation *assoc, void *arg); + static void PedAnimDoorCloseCB(CAnimBlendAssociation *assoc, void *arg); + static void SetInCarCB(CAnimBlendAssociation *assoc, void *arg); + static void PedSetOutCarCB(CAnimBlendAssociation *assoc, void *arg); + static void PedAnimAlignCB(CAnimBlendAssociation *assoc, void *arg); + static void PedSetDraggedOutCarCB(CAnimBlendAssociation *assoc, void *arg); + static void PedAnimStepOutCarCB(CAnimBlendAssociation *assoc, void *arg); + static void PedSetInTrainCB(CAnimBlendAssociation *assoc, void *arg); + static void PedSetOutTrainCB(CAnimBlendAssociation *assoc, void *arg); + static void FinishedAttackCB(CAnimBlendAssociation *assoc, void *arg); + static void FinishFightMoveCB(CAnimBlendAssociation *assoc, void *arg); + static void PedAnimDoorCloseRollingCB(CAnimBlendAssociation *assoc, void *arg); + static void FinishJumpCB(CAnimBlendAssociation *assoc, void *arg); + static void PedLandCB(CAnimBlendAssociation *assoc, void *arg); + static void RestoreHeadingRateCB(CAnimBlendAssociation *assoc, void *arg); + static void PedSetQuickDraggedOutCarPositionCB(CAnimBlendAssociation *assoc, void *arg); + static void PedSetDraggedOutCarPositionCB(CAnimBlendAssociation *assoc, void *arg); bool HasWeapon(eWeaponType weaponType) { return m_weapons[weaponType].m_eWeaponType == weaponType; } CWeapon *GetWeapon(void) { return &m_weapons[m_currentWeapon]; } @@ -291,6 +316,8 @@ public: static bool &bPedCheat3; }; +void FinishFuckUCB(CAnimBlendAssociation *assoc, void *arg); + 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"); diff --git a/src/entities/Vehicle.h b/src/entities/Vehicle.h index e5d1cfb3..fea15d35 100644 --- a/src/entities/Vehicle.h +++ b/src/entities/Vehicle.h @@ -11,14 +11,17 @@ public: uint8 stuff1[116]; uint8 m_currentColour1; uint8 m_currentColour2; -uint8 m_extra1; -uint8 m_extra2; + uint8 m_extra1; + uint8 m_extra2; int16 m_nAlarmState; CPed *pDriver; CPed *pPassengers[8]; uint8 stuff2[24]; CEntity *m_pCurSurface; - uint8 stuff3[17]; + void* m_pFire; + float m_fWheelState; + float m_fAcceleration; + uint8 stuff4[5]; uint8 m_veh_flagA1 : 1; uint8 m_veh_flagA2 : 1; uint8 m_veh_flagA4 : 1; @@ -51,7 +54,9 @@ uint8 m_extra2; uint8 m_veh_flagD20 : 1; uint8 m_veh_flagD40 : 1; uint8 m_veh_flagD80 : 1; - uint8 stuff4[139]; + uint8 stuff5[7]; + float m_fHealth; + uint8 stuff6[128]; int32 m_vehType; static void *operator new(size_t); -- cgit v1.2.3