diff --git a/base/CNavigation.hpp b/base/CNavigation.hpp index 7391da5..5df9b61 100644 --- a/base/CNavigation.hpp +++ b/base/CNavigation.hpp @@ -11,6 +11,11 @@ public: class rage::phArchetypeDamp* m_damp; //0x0010 char pad_0018[8]; //0x0018 rage::fmatrix44 m_transformation_matrix; + + rage::fvector3* get_position() + { + return reinterpret_cast(&m_transformation_matrix.rows[3]); + } }; //Size: 0x0060 static_assert(sizeof(CNavigation) == 0x60); #pragma pack(pop) diff --git a/base/phArchetype.hpp b/base/phArchetype.hpp index 4dcbe8b..7360827 100644 --- a/base/phArchetype.hpp +++ b/base/phArchetype.hpp @@ -6,6 +6,7 @@ namespace rage { class phArchetype { + public: char pad_0000[32]; //0x0000 class phBound* m_bound; //0x0020 char pad_0028[16]; //0x0028 @@ -14,6 +15,7 @@ namespace rage class phArchetypePhys : public phArchetype { + public: char pad_0038[28]; //0x0028 float m_water_collision; //0x0054 char pad_0058[40]; //0x0058 diff --git a/ped/CPed.hpp b/ped/CPed.hpp index 2c94f03..f93b192 100644 --- a/ped/CPed.hpp +++ b/ped/CPed.hpp @@ -36,11 +36,18 @@ public: char pad_143D[13]; //0x143D uint8_t m_can_switch_weapon; //0x144A uint8_t m_ped_task_flag; //0x144B - char pad_144C[192]; //0x144C + char pad_144C[4]; //0x144C + uint8_t m_forced_aim; //0x1450 m_forced_aim ^= (m_forced_aim ^ -(char)toggle) & 0x20; + char pad_1451[187]; //0x1451 float m_armor; //0x150C - char pad_1510[260]; //0x1510 - int m_cash; //0x1614 -}; //Size: 0x1618 -static_assert(sizeof(CPed) == 0x1618); + float unk_health_threshold; //0x1510 + float m_fatigued_health_threshold; //0x1514 + float m_injured_health_threshold; //0x1518 + float m_dying_health_threshold; //0x151C + float m_hurt_health_threshold; //0x1520 + char pad_1524[240]; //0x1524 + uint16_t m_cash; //0x1614 +}; //Size: 0x1616 +static_assert(sizeof(CPed) == 0x1616); #pragma pack(pop) diff --git a/player/CPlayerInfo.hpp b/player/CPlayerInfo.hpp index d42fcd9..813ace4 100644 --- a/player/CPlayerInfo.hpp +++ b/player/CPlayerInfo.hpp @@ -36,7 +36,11 @@ public: uint32_t m_player_controls; //0x0250 char pad_0254[1256]; //0x0254 float m_wanted_can_change; //0x073C - char pad_0740[304]; //0x0740 + char pad_0740[144]; //0x0740 + float m_wanted_level_difficulty; //0x07D0 min:-1 max:1 + char pad_07D4[52]; //0x07D4 + float m_wanted_level_multiplier; //0x0808 min:0 max:1 + char pad_080C[100]; //0x080C uint32_t m_npc_ignore; //0x0870 char pad_0874[12]; //0x0874 bool m_is_wanted; //0x0880 diff --git a/rage/vector.hpp b/rage/vector.hpp index efeea3f..285e6d7 100644 --- a/rage/vector.hpp +++ b/rage/vector.hpp @@ -33,7 +33,7 @@ namespace rage template union matrix44 { - T data[3][4]; + T data[4][4]; struct { struct {T x, y, z, w; } rows[4];}; }; diff --git a/vehicle/CVehicle.hpp b/vehicle/CVehicle.hpp index 30ae68d..8c13f56 100644 --- a/vehicle/CVehicle.hpp +++ b/vehicle/CVehicle.hpp @@ -9,322 +9,44 @@ class CVehicle : public rage::CPhysical { public: - char gap2EC[4]; - uint32_t dword2F0; - uint32_t dword2F4; - uint8_t m_boost_state; // 0x2F8 - char gap2F9[2]; - uint8_t m_boost_allow_recharge; // 0x2FB - uint16_t word2FC; - char gap2FE[2]; - float m_boost; // 0x300 - float m_rocket_recharge_speed; // 0x304 - uint32_t dword308; - uint8_t byte30C; - char gap30D[3]; - uint8_t byte310; - char gap311[3]; - uint64_t qword314; - uint32_t dword31C; - uint8_t byte320; - char gap321[3]; - uint32_t dword324; - uint8_t byte328; - char gap329[3]; - uint64_t qword32C; - uint64_t qword334; - uint64_t qword33C; - uint64_t qword344; - uint32_t dword34C; - uint32_t dword350; - uint8_t byte354; - uint16_t word355; - uint8_t byte357; - uint64_t qword358; - uint64_t qword360; - uint64_t qword368; - uint32_t dword370; - uint32_t dword374; - uint8_t byte378; - char gap379[3]; - uint64_t qword37C; - uint64_t qword384; - char gap38C[4]; - float m_jump_boost_charge; // 0x390 - uint8_t byte394; - char gap395[3]; - uint64_t qword398; - uint32_t dword3A0; - uint32_t dword3A4; - char gap3A8[8]; - uint16_t oword3B0; - char gap3B2[30]; - uint16_t oword3D0; - char gap3D2[14]; - uint32_t dword3E0; - uint64_t qword3E4; - char gap3EC[4]; - uint32_t dword3F0; - uint64_t qword3F4; - char gap3FC[4]; - uint64_t qword400; - uint32_t dword408; - uint32_t dword40C; - char gap410[1032]; - uint64_t qword818; - float m_body_health; // 0x820 - float m_petrol_tank_health; // 0x824 - char gap828[12]; - float float834; - char gap838[176]; - float m_engine_health; // 0x8E8 - char gap8EC[44]; - CHandlingData* m_handling_data; // 0x918 - char gap920[2]; + char pad_02EC[0xC]; //0x02EC + uint8_t m_boost_state; //0x02F8 + char pad_02F9[0x2]; //0x02F9 + uint8_t m_boost_allow_recharge; //0x02FB + char pad_02FC[0x4]; //0x02FC + float m_boost; //0x0300 + float m_rocket_recharge_speed; //0x304 + char pad_0308[0x88]; //0x0308 + float m_jump_boost_charge; //0x0390 + char pad_0394[0x43C]; //0x0394 + rage::fvector3 m_velocity; //0x07D0 + char pad_07DC[0x44]; //0x07DC + float m_body_health; //0x0820 + float m_petrol_tank_health; //0x0824 + char pad_0x828[0xC0]; //0x0828 + float m_engine_health; //0x08E8 + char pad_08EC[0x2C]; //0x08EC + CHandlingData* m_handling_data; //0x0918 + char pad_0920[0x2]; //0x0920 uint8_t m_is_drivable; //0x0922 uint8_t m_tyres_can_burst; //0x0923 uint8_t m_deform_god; //0x0924 - char gap925[6]; - uint8_t byte92B; - char gap92C; - uint8_t byte92D; - char gap92E; - uint8_t byte92F; - char gap930[3]; - uint8_t byte933; - uint8_t byte934; - char gap935; - uint8_t byte936; - uint8_t byte937; - char gap938[2]; - uint8_t byte93A; - char gap93B[9]; - uint64_t qword944; - char gap94C[4]; - uint64_t qword950; - uint64_t qword958; - char gap960[8]; - uint64_t qword968; - uint16_t word970; - uint32_t dword972; - uint16_t word976; - uint64_t qword978; - uint64_t qword980; - uint32_t dword988; - uint64_t qword98C; - uint64_t qword994; - uint64_t qword99C; - uint16_t word9A4; - uint8_t byte9A6; - char gap9A7; - uint32_t dword9A8; - uint8_t byte9AC; - char gap9AD; - uint16_t word9AE; - uint16_t word9B0; - char gap9B2[2]; - uint32_t dword9B4; - char gap9B8[8]; - uint32_t dword9C0; - uint64_t qword9C4; - uint32_t dword9CC; - uint32_t dword9D0; - char gap9D4[4]; - float m_dirt_level; // 0x9D8 - uint32_t dword9DC; - uint64_t qword9E0; - uint64_t qword9E8; - uint32_t dword9F0; - uint32_t dword9F4; - uint8_t byte9F8; - uint16_t word9F9; - uint8_t byte9FB; - uint32_t dword9FC; - uint64_t qwordA00; - uint32_t dwordA08; - uint32_t dwordA0C; - uint64_t qwordA10; - uint64_t qwordA18; - uint64_t qwordA20; - uint64_t qwordA28; - uint8_t byteA30; - char gapA31[7]; - uint64_t qwordA38; - uint64_t qwordA40; - uint32_t dwordA48; - uint32_t dwordA4C; - uint32_t dwordA50; - uint32_t dwordA54; - uint32_t dwordA58; - uint32_t dwordA5C; - uint64_t qwordA60; - uint8_t byteA68; - char gapA69; - uint16_t wordA6A; - uint64_t qwordA6C; - uint64_t qwordA74; - uint64_t qwordA7C; - uint64_t qwordA84; - uint32_t dwordA8C; - uint16_t wordA90; - uint16_t wordA92; - uint8_t byteA94; - uint16_t wordA95; - uint16_t wordA97; - char gapA99[2]; - char gapA9B[3]; // start of some kind of flag, default value 0x1000000i64 - uint8_t m_is_targetable; // 0xA9E - char gapA9F[4]; // end of some kind of flag - uint32_t dwordAA3; - uint32_t dwordAA7; - uint16_t wordAAB; - uint8_t byteAAD; - uint8_t byteAAE; - char gapAAF; - uint64_t qwordAB0; - uint64_t qwordAB8; - uint8_t byteAC0; - char gapAC1[3]; - uint32_t dwordAC4; - uint32_t dwordAC8; - uint32_t dwordACC; - uint32_t dwordAD0; - char gapAD4[4]; - uint32_t dwordAD8; - char gapADC[20]; - uint32_t dwordAF0; - uint32_t dwordAF4; - char gapAF8[24]; - uint32_t dwordB10; - uint64_t qwordB14; - char gapB1C[4]; - uint32_t dwordB20; - uint64_t qwordB24; - char gapB2C[4]; - uint16_t owordB30; - char gapB32[14]; - uint16_t owordB40; - char gapB42[14]; - uint32_t dwordB50; - uint32_t dwordB54; - uint64_t qwordB58; - uint32_t dwordB60; - uint32_t dwordB64; - uint32_t dwordB68; - uint32_t dwordB6C; - uint32_t dwordB70; - uint32_t dwordB74; - uint32_t dwordB78; - uint32_t dwordB7C; - uint32_t dwordB80; - uint64_t qwordB84; - char gapB8C[4]; - uint32_t dwordB90; - uint64_t qwordB94; - char gapB9C[20]; - uint64_t qwordBB0; - char gapBB8[16]; - uint32_t dwordBC8; - char gapBCC[4]; - uint64_t qwordBD0; - uint32_t dwordBD8; - uint64_t qwordBDC; - uint16_t wordBE4; - uint8_t byteBE6; - char gapBE7; - uint64_t qwordBE8; - uint32_t dwordBF0; - uint32_t dwordBF4; - uint16_t wordBF8; - char gapBFA[2]; - uint64_t qwordBFC; - uint64_t qwordC04; - uint64_t qwordC0C; - uint64_t qwordC14; - char gapC1C[4]; - uint64_t qwordC20; - uint64_t qwordC28; - uint32_t dwordC30; - char gapC34[4]; - uint32_t dwordC38; - float m_gravity; // 0xC3C - might be start of some sub-class - char gapC40[8]; + char pad_0925[0xB3]; //0x0925 + float m_dirt_level; //0x09D8 + char pad_09DC[0xC2]; //0x09DC + uint8_t m_is_targetable; //0x0A9E + char pad_0A9F[0x19D]; //0x0A9F + float m_gravity; //0x0C3C - might be start of some sub-class + uint8_t m_max_passengers; //0x0C40 + char pad_0C41; //0x0C41 + uint8_t m_num_of_passengers; //0x0C42 + char pad_0C43[5]; //0x0C43 class CPed* m_driver; //0x0C48 class CPed* m_passengers[15]; //0x0C50 class CPed* m_last_driver; //0x0CC8 - char gapCD0[1424]; // end of sub-class - uint32_t dword1260; - char gap1264[4]; - uint32_t dword1268; - char gap126C[12]; - uint16_t word1278; - uint8_t byte127A; - char gap127B; - uint64_t qword127C; - uint64_t qword1284; - uint64_t qword128C; - uint64_t qword1294; - char gap129C[4]; - uint64_t qword12A0; - uint64_t qword12A8; - uint16_t word12B0; - char gap12B2[14]; - uint32_t dword12C0; - uint32_t dword12C4; - uint64_t qword12C8; - uint32_t dword12D0; - char gap12D4[4]; - uint64_t qword12D8; - char gap12E0[56]; - uint64_t qword1318; - uint64_t qword1320; - uint32_t dword1328; - uint32_t dword132C; - uint32_t dword1330; - uint64_t qword1334; - uint32_t dword133C; - uint32_t dword1340; - uint32_t dword1344; - uint32_t dword1348; - char gap134C[4]; - float float1350; - float float1354; - char gap1358[8]; - uint64_t qword1360; - uint64_t qword1368; - uint32_t m_door_lock_status; - uint64_t qword1374; - uint16_t word137C; - uint16_t word137E; - uint8_t byte1380; - uint16_t word1381; - char gap1383[2]; - uint8_t byte1385; - uint16_t word1386; - uint8_t byte1388; - char gap1389[3]; - uint32_t dword138C; - uint8_t byte1390; - char gap1391[3]; - uint64_t qword1394; - uint32_t dword139C; - uint32_t dword13A0; - uint32_t dword13A4; - uint32_t dword13A8; - uint8_t byte13AC; - char gap13AD[3]; - uint64_t qword13B0; - uint8_t byte13B8; - char gap13B9[3]; - uint32_t dword13BC; - char gap13C0[8]; - uint32_t dword13C8; - char gap13CC[116]; - uint32_t dword1440; - uint16_t word1444; - uint8_t byte1446; - char gap1447; - uint64_t qword1448; + char pad_0CD0[0x6A0]; //0x0CD0 + uint32_t m_door_lock_status; //0x1370 + char pad_1374[0xDC]; //0x1374 }; static_assert(sizeof(CVehicle) == 0x1450); #pragma pack(pop)