diff --git a/rage/gameSkeleton.hpp b/rage/gameSkeleton.hpp new file mode 100644 index 0000000..7e72884 --- /dev/null +++ b/rage/gameSkeleton.hpp @@ -0,0 +1,85 @@ +#pragma once + +#include +#include "atArray.hpp" + +namespace rage +{ + +#pragma pack(push, 8) + +struct skeleton_data +{ + uint64_t m_init_func; //0x0 + uint64_t m_shutdown_func; //0x8 + uint32_t m_unk1; // 0x10 + uint32_t m_unk2; // 0x14 + uint32_t m_unk3; // 0x18 + uint32_t m_unk4; // 0x1C + uint32_t m_hash; // 0x20 +}; +static_assert(sizeof(skeleton_data) == 0x28); + +struct game_skeleton_update_base +{ + virtual ~game_skeleton_update_base() = default; + virtual void run() = 0; + uint64_t m_pad; // 0x08 + uint32_t m_hash; // 0x10 + game_skeleton_update_base* m_next; // 0x18 +}; +static_assert(sizeof(game_skeleton_update_base) == 0x20); + +struct game_skeleton_update_group : game_skeleton_update_base +{ + game_skeleton_update_base* m_head; // 0x20 +}; +static_assert(sizeof(game_skeleton_update_group) == 0x28); + +struct game_skeleton_update_element : game_skeleton_update_base +{ + void(*m_function)(); // 0x20 +}; +static_assert(sizeof(game_skeleton_update_element) == 0x28); + +struct game_skeleton_update_mode +{ + int m_type; // 0x00 + game_skeleton_update_base* m_head; // 0x08 + game_skeleton_update_mode* m_next; // 0x10 +}; +static_assert(sizeof(game_skeleton_update_mode) == 0x18); + +struct game_skeleton_init_dependency +{ + int m_level; // 0x00 + atArray m_data; // 0x08 + game_skeleton_init_dependency* m_next; // 0x10 +}; + +struct game_skeleton_mode +{ + int m_type; // 0x00 + game_skeleton_init_dependency* m_head; // 0x08 + game_skeleton_mode* m_next; // 0x10 +}; +static_assert(sizeof(game_skeleton_mode) == 0x18); + +struct game_skeleton +{ + virtual ~game_skeleton() = 0; + uint32_t m_unk1; //0x08 + uint32_t m_unk2; //0x0C + uint32_t m_unk3; // 0x10 + uint32_t m_unk4; // 0x14 + atArray m_sys_data; // 0x18 + uint32_t m_unk5; // 0x28 + void* m_unk6[32]; // 0x30 + game_skeleton_mode* m_init_modes; // 0x130 + game_skeleton_mode* m_shutdown_modes; // 0x138 + game_skeleton_update_mode* m_update_modes; // 0x140 +}; +static_assert(sizeof(game_skeleton) == 0x148); + +#pragma pack(pop) +} \ No newline at end of file