Structures used:
Code:
typedef struct _VECTOR {
float X,Y,Z;
} VECTOR, *PVECTOR;
typedef struct _MATRIX4X4 {
VECTOR vLookRight;
float pad_r;
VECTOR vLookUp;
float pad_u;
VECTOR vLookAt;
float pad_a;
VECTOR vPos;
float pad_p;
} MATRIX4X4, *PMATRIX4X4;
#define _pad(x,y) BYTE x[y]
#pragma pack(1)
typedef struct _ENTITY_TYPE {
DWORD func_table; // 0
MATRIX4X4 mat; // 4-68
_pad(__pad0,8); // 68-76
PDWORD pModel; // 76-80
BYTE nControlFlags; // 80-81
BYTE nControlFlags2; // 81-82
_pad(__pad1,10); // 82-92
WORD nModelIndex; // 92-94
_pad(__pad2,18); // 94-112
VECTOR vecMoveSpeed; // 112-124
VECTOR vecTurnSpeed; // 124-136
_pad(__pad3,146); // 136-282
BYTE byteSunkFlags; // 282-284
BYTE byteLockedFlags; // 283-284
} ENTITY_TYPE;
#pragma pack(1)
typedef struct _VEHICLE_TYPE {
ENTITY_TYPE entity; // 0-284
_pad(__pad0a,132); // 284-416
BYTE byteColor1; // 416-417
BYTE byteColor2; // 417-418
_pad(__pad1a,6); // 418-424
PED_TYPE * pDriver; // 424-428
PED_TYPE * pPassengers[7]; // 428-456 (probably 8)
_pad(__pad2a,4); // 456-460
BYTE bytePassengersCount; // 460-461
_pad(__pad2b,3); // 461-464
BYTE byteMaxPassengers; // 464-465
_pad(__pad3a,23); // 465-488
float fSteerAngle1; // 488-492
float fSteerAngle2; // 492-496
float fAcceleratorPedal; // 496-500
float fBrakePedal; // 500-504
_pad(__pad4a,12); // 504-516
float fHealth; // 516-520
_pad(__pad5a,40); // 520-560
DWORD dwDoorsLocked; // 560-564
_pad(__pad6a,4); // 564-568
PDWORD pdwDamageEntity; // 568-572
DWORD nRadio; // 572-576
BYTE byteHorn; // 576-577
DWORD dwUnk1; // 577-581
BYTE byteSiren; // 581-582
_pad(__pad7a,874); // 582-1456
float fSpecialWeaponRotation1; // 1456 (following 2 are rhino turret and firetruck spray)
float fSpecialWeaponRotation2; // 1460
/// ............
} VEHICLE_TYPE;
And:
Code:
VEHICLE_TYPE *m_pVehicle;
One strange question - does an executable file consist of assembler commands?