feat(Classes): Updated CBaseModelInfo, CPlayerGameStateDataNode and fwEntity (#24)

* Fixed eModelType enum value names
* CBaseModelInfo: Changed min/max dimension types from fvector3 to fvector4
* CBaseModelInfo: Adjusted to actual size
* Added datBase, fwRefAwareBase, fwRefAwareBaseImpl, fwExtensibleBase, fwExtension, fwExtensionContainer and pgBase classes
* CPlayerGameStateDataNode: Updated fields and resized to actual size
* CVehicleModelInfo: Resized because of modified CBaseModelInfo
This commit is contained in:
Reece Watson 2022-08-20 13:17:32 -04:00 committed by GitHub
parent d79c33ce97
commit 7052c5e91b
11 changed files with 168 additions and 36 deletions

View File

@ -8,8 +8,8 @@ enum class eModelType : std::uint8_t
{
Invalid,
Object,
Interior,
Window,
MLO,
Time,
Weapon,
Vehicle,
Ped,
@ -27,19 +27,33 @@ enum class eModelType : std::uint8_t
Unk193 = 193
};
#pragma pack(push, 1)
#pragma pack(push, 8)
class CBaseModelInfo
{
public:
char pad_0000[24]; //0x0000
uint32_t m_model_hash; //0x0018
char pad_001C[20]; //0x001C
rage::fvector3 m_min_dimensions; //0x0030
char pad_003C[4]; //0x003C
rage::fvector3 m_max_dimensions; //0x0040
char pad_004C[81]; //0x004C
eModelType m_model_type; //0x009D
char pad_009E[6]; //0x009E
}; //Size: 0x00A4
static_assert(sizeof(CBaseModelInfo) == 0xA4);
char pad_0000[24]; //0x0000
uint32_t m_model_hash; //0x0018
char pad_001C[20]; //0x001C
rage::fvector4 m_axis_aligned_bounding_box_min; //0x0030
rage::fvector4 m_axis_aligned_bounding_box_max; //0x0040
uint32_t m_flags;
char pad_0054[4];
uint16_t unk_0x58;
char pad_005A[6];
uint8_t m_drawable_type;
char pad_0061;
uint16_t m_drawable_index;
char pad_0064[6];
uint16_t unk_0x6A;
char pad_006C[12];
uint64_t unk_0x78;
uint64_t unk_0x80;
char pad_0088[8];
uint64_t unk_0x90;
char pad_0098[5];
eModelType m_model_type;
char pad_009E[6];
uint64_t unk_0xA8;
}; //Size: 0x00B0
static_assert(sizeof(CBaseModelInfo) == 0xB0);
#pragma pack(pop)

13
base/datBase.hpp Normal file
View File

@ -0,0 +1,13 @@
#pragma once
namespace rage
{
class datBase
{
public:
virtual ~datBase() = default;
}; //Size: 0x0008
static_assert(sizeof(datBase) == 0x8);
}

29
base/fwExtensibleBase.hpp Normal file
View File

@ -0,0 +1,29 @@
#pragma once
#include "fwRefAwareBase.hpp"
#include "fwExtensionContainer.hpp"
namespace rage
{
class fwExtensibleBase : public fwRefAwareBase
{
public:
virtual bool is_of_type(std::uint32_t hash) = 0;
virtual uint32_t const &get_type() = 0;
fwExtensionContainer* m_extension_container; // 0x0010
void *m_extensible_unk; // 0x0018
template <typename T>
bool is_of_type()
{
static auto name = (typeid(T).name()) + 6; // Skip "class "
static auto name_hash = joaat(name);
return is_of_type(name_hash);
}
}; //Size: 0x0020
static_assert(sizeof(fwExtensibleBase) == 0x20);
}

18
base/fwExtension.hpp Normal file
View File

@ -0,0 +1,18 @@
#pragma once
#include <cstdint>
namespace rage
{
class fwExtension
{
public:
virtual ~fwExtension() = default;
virtual void unk_0x08() = 0;
virtual void unk_0x10() = 0;
virtual uint32_t get_id() = 0;
}; //Size: 0x0008
static_assert(sizeof(fwExtension) == 0x8);
}

View File

@ -0,0 +1,16 @@
#pragma once
#include "fwExtension.hpp"
namespace rage
{
class fwExtensionContainer
{
public:
fwExtension *m_entry; //0x0000
fwExtensionContainer* m_next; //0x0008
}; //Size: 0x0010
static_assert(sizeof(fwExtensionContainer) == 0x10);
}

14
base/fwRefAwareBase.hpp Normal file
View File

@ -0,0 +1,14 @@
#pragma once
#include "datBase.hpp"
#include "fwRefAwareBaseImpl.hpp"
namespace rage
{
class fwRefAwareBase : public fwRefAwareBaseImpl<datBase>
{
};
static_assert(sizeof(fwRefAwareBase) == 0x10);
}

View File

@ -0,0 +1,13 @@
#pragma once
namespace rage
{
template <typename T>
class fwRefAwareBaseImpl : public T
{
private:
void *m_ref; // 0x08
};
}

15
base/pgBase.hpp Normal file
View File

@ -0,0 +1,15 @@
#pragma once
namespace rage
{
class pgBase
{
public:
virtual ~pgBase() = default;
void *unk_0000; // 0x0000
}; //Size: 0x0008
static_assert(sizeof(pgBase) == 0x10);
}

View File

@ -15,16 +15,16 @@ public:
bool m_is_antagonistic_to_another_player; //0x00C8
bool m_never_target; //0x00C9
bool m_use_kinematic_physics; //0x00CA
bool unk_000CB; //0x00CB
bool unk_00CC; //0x00CC
bool m_has_tutorial_data; //0x00CB
bool m_pending_tutorial_change; //0x00CC
bool unk_00CD; //0x00CD
bool unk_00CE; //0x00CE
bool unk_00CF; //0x00CF
bool unk_00D0; //0x00D0
bool unk_00D1; //0x00D1
bool m_respawning; //0x00CE
bool m_will_jack_any_player; //0x00CF
bool m_will_jack_wanted_players; //0x00D0
bool m_dont_drag_from_car; //0x00D1
bool m_random_peds_flee; //0x00D2
bool m_every_ped_back_away; //0x00D3
bool unk_00D4; //0x00D4
bool m_has_microphone; //0x00D4
bool m_is_invincible; //0x00D5
bool unk_00D6; //0x00D6
bool unk_00D7; //0x00D7
@ -70,8 +70,8 @@ public:
float m_air_drag_multiplier; //0x0108
uint32_t m_max_health; //0x010C
uint32_t m_max_armor; //0x0110
uint32_t unk_0114; //0x0114
uint16_t unk_0118; //0x0118
uint32_t m_jack_speed; //0x0114
uint16_t m_player_is_targetable_by_team; //0x0118
uint32_t m_override_receive_chat; //0x011C
uint32_t m_override_send_chat; //0x0120
bool unk_0124; //0x0124
@ -83,8 +83,8 @@ public:
uint8_t m_tutorial_index; //0x012B
uint8_t m_tutorial_instance_id; //0x012C
char pad_012D[2]; //0x012D
uint32_t unk_0130; //0x0130
uint32_t unk_0134; //0x0134
float m_microphone_volume; //0x0130
uint32_t m_voice_channel; //0x0134
bool m_is_overriding_voice_proximity; //0x0138
char pad_0139[7]; //0x0139
float m_voice_proximity_x; //0x0140
@ -92,8 +92,8 @@ public:
float m_voice_proximity_z; //0x0148
float m_voice_proximity_radius_maybe; //0x014C
uint32_t unk_0150; //0x0150
uint32_t unk_0154; //0x0154
bool unk_0158; //0x0158
uint32_t m_vehicle_weapon_index; //0x0154
bool m_has_vehicle_weapon_index; //0x0158
uint32_t m_decor_count; //0x015C
uint32_t m_decor_type[3]; // 0x0160
uint32_t m_decor_value[3]; // 0x016C
@ -104,8 +104,8 @@ public:
uint8_t m_current_property_id; //0x0187
uint8_t unk_0188; //0x0188
uint8_t unk_0189; //0x0189
bool unk_018A; //0x018A
bool unk_018B; //0x018B
bool m_battle_aware; //0x018A
bool m_vehicle_jump_down; //0x018B
float m_weapon_defence_modifier; //0x018C
float m_weapon_defence_modifier_2; //0x0190
bool m_is_overriding_population_control_sphere; //0x0194
@ -140,6 +140,8 @@ public:
uint8_t unk_01F1; //0x01F1
bool unk_01F2; //0x01F2
uint8_t unk_01F3; //0x01F3
}; //Size: 0x01F4
static_assert(sizeof(CPlayerGameStateDataNode) == 0x1F4);
bool unk_01F4; //0x01F4
bool unk_01F5; //0x01F5
}; //Size: 0x01F8
static_assert(sizeof(CPlayerGameStateDataNode) == 0x1F8);
#pragma pack(pop)

View File

@ -2,6 +2,7 @@
#include "base/CBaseModelInfo.hpp"
#include "base/CNavigation.hpp"
#include "base/fwExtensibleBase.hpp"
#include "rage/fwDrawData.hpp"
#include "network/netObject.hpp"
@ -11,12 +12,9 @@
namespace rage
{
#pragma pack(push, 4)
class fwEntity
class fwEntity : public fwExtensibleBase
{
public:
char pad_0000[25]; //0x0000
uint8_t m_mission_bits; // 0x0019
char pad_001A[6]; // 0x001A
class CBaseModelInfo *m_model_info; //0x0020
char pad_0028[1]; //0x0028
int8_t m_entity_type; //0x0029

View File

@ -27,7 +27,7 @@ enum class eVehicleType : std::uint32_t
class CVehicleModelInfo : public CBaseModelInfo
{
public:
char pad_00A4[84]; //0x00A4
char pad_00B0[76]; //0x00B0
uint8_t m_primary_color_combinations[25]; //0x00F8
uint8_t m_secondary_color_combinations[25]; //0x0111
uint8_t m_unk_color_combos1[25]; //0x012A