From c9f6e7bf83dcef53f13de9e24fa9c6113cf1f0fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Tue, 18 Jun 2019 15:55:39 +0300 Subject: CPed merge fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: eray orçunus --- src/control/PedType.cpp | 29 ++++++++++++++++++++++- src/control/PedType.h | 61 ++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 86 insertions(+), 4 deletions(-) (limited to 'src/control') diff --git a/src/control/PedType.cpp b/src/control/PedType.cpp index 587aa815..b6d77cb0 100644 --- a/src/control/PedType.cpp +++ b/src/control/PedType.cpp @@ -2,4 +2,31 @@ #include "patcher.h" #include "PedType.h" -WRAPPER int32 CPedType::FindPedType(char *type) { EAXJMP(0x4EEC10); } +CPedType* (&CPedType::ms_apPedType)[23] = *(CPedType * (*)[23]) * (int*)0x941594; + +WRAPPER void CPedType::LoadPedData(void) { EAXJMP(0x4EE8D0); } +WRAPPER int32 CPedType::FindPedType(char* type) { EAXJMP(0x4EEC10); } + +void +CPedType::Initialise() +{ + debug("Initialising CPedType...\n"); + for (int i = 0; i < 23; i++) { + ms_apPedType[i] = new CPedType; + ms_apPedType[i]->m_Type.IntValue = 1; + ms_apPedType[i]->field_4 = 0; + ms_apPedType[i]->field_8 = 0; + // Why field_C not initialized? + ms_apPedType[i]->field_10 = 0; + ms_apPedType[i]->field_14 = 0; + ms_apPedType[i]->m_Threat.IntValue = 0; + ms_apPedType[i]->m_Avoid.IntValue = 0; + } + debug("Loading ped data...\n"); + LoadPedData(); + debug("CPedType ready\n"); +} + +STARTPATCHES + InjectHook(0x4EE7E0, &CPedType::Initialise, PATCH_JUMP); +ENDPATCHES \ No newline at end of file diff --git a/src/control/PedType.h b/src/control/PedType.h index 563dc294..1d1057d7 100644 --- a/src/control/PedType.h +++ b/src/control/PedType.h @@ -1,7 +1,62 @@ #pragma once -class CPedType -{ +#include "common.h" +#include "templates.h" +#include "Lists.h" + +class CPedType { public: - static int32 FindPedType(char *type); + union tPedTypeFlags + { + uint32 IntValue; + struct + { + uint8 bPlayer1 : 1; + uint8 bPlayer2 : 1; + uint8 bPlayer3 : 1; + uint8 bPlayer4 : 1; + uint8 bCivmale : 1; + uint8 bCivfemale : 1; + uint8 bCop : 1; + uint8 bGang1 : 1; + + uint8 bGang2 : 1; + uint8 bGang3 : 1; + uint8 bGang4 : 1; + uint8 bGang5 : 1; + uint8 bGang6 : 1; + uint8 bGang7 : 1; + uint8 bGang8 : 1; + uint8 bGang9 : 1; + + uint8 bEmergency : 1; + uint8 bProstitute : 1; + uint8 bCriminal : 1; + uint8 bSpecial : 1; + uint8 bGun : 1; + uint8 bCop_car : 1; + uint8 bFast_car : 1; + uint8 bExplosion : 1; + + uint8 bFireman : 1; + uint8 bDeadpeds : 1; + }; + }; + + tPedTypeFlags m_Type; + float field_4; + float field_8; + float field_C; + float field_10; + float field_14; + tPedTypeFlags m_Threat; + tPedTypeFlags m_Avoid; + + static CPedType* (&ms_apPedType)[23]; + + static void Initialise(); + static void LoadPedData(); + static int32 FindPedType(char* type); }; + +static_assert(sizeof(CPedType) == 0x20, "CPedType: error"); \ No newline at end of file -- cgit v1.2.3