nfsu2-re

https://github.com/yugecin/nfsu2-re

Structs (500)

struct

FuncInfo_V1

{ /*7 members, size 1Ch*/ /*0*/ int magicNumber ; /*4*/ int maxState ; /*8*/ int pUnwindMap ; /*C*/ int nTryBlocks ; /*10*/ int pTryBlockMap ; /*14*/ int nIPMapEntries ; /*18*/ int pIPtoStateMap ; }; EXPECT_SIZE(struct FuncInfo_V1, 0x1C);
struct

UnwindMapEntry

{ /*2 members, size 8h*/ /*0*/ int toState ; /*4*/ int action ; }; EXPECT_SIZE(struct UnwindMapEntry, 0x8);
struct

DIDATAFORMAT

{ /*6 members, size 18h*/ /*0*/ DWORD dwSize; /*4*/ DWORD dwObjSize; /*8*/ DWORD dwFlags; /*C*/ DWORD dwDataSize; /*10*/ DWORD dwNumObjs; /*14*/ LPDIOBJECTDATAFORMAT rgodf; }; EXPECT_SIZE(struct DIDATAFORMAT, 0x18);
struct

TryBlockMapEntry

{ /*5 members, size 14h*/ /*0*/ int tryLow ; /*4*/ int tryHigh ; /*8*/ int catchHigh ; /*C*/ int nCatches ; /*10*/ int pHandlerArray ; }; EXPECT_SIZE(struct TryBlockMapEntry, 0x14);
struct

HandlerType

{ /*4 members, size 10h*/ /*0*/ int adjectives ; /*4*/ int pType ; /*8*/ int dispCatchObj ; /*C*/ int addressOfHandler ; }; EXPECT_SIZE(struct HandlerType, 0x10);
union

LARGE_INTEGER

{ /*4 members, size 8h*/ /*0*/ struct _LARGE_INTEGER::$837407842DC9087486FDFA5FEB63B74E s; /*0*/ struct _LARGE_INTEGER::$837407842DC9087486FDFA5FEB63B74E u; /*0*/ char QuadPart[8] ; /*0*/ struct _LARGE_INTEGER::$837407842DC9087486FDFA5FEB63B74E anonymous_0; }; EXPECT_SIZE(struct LARGE_INTEGER, 0x8);
struct

_LARGE_INTEGER::$837407842DC9087486FDFA5FEB63B74E

{ /*2 members, size 8h*/ /*0*/ DWORD LowPart; /*4*/ LONG HighPart; }; EXPECT_SIZE(struct _LARGE_INTEGER::$837407842DC9087486FDFA5FEB63B74E, 0x8);
struct

_WIN32_FIND_DATAA

{ /*11 members, size 140h*/ /*0*/ DWORD dwFileAttributes; /*4*/ struct FILETIME ftCreationTime; /*C*/ struct FILETIME ftLastAccessTime; /*14*/ struct FILETIME ftLastWriteTime; /*1C*/ DWORD nFileSizeHigh; /*20*/ DWORD nFileSizeLow; /*24*/ DWORD dwReserved0; /*28*/ DWORD dwReserved1; /*2C*/ CHAR cFileName[260]; /*130*/ CHAR cAlternateFileName[14]; /*13E*/ short _padding ; }; EXPECT_SIZE(struct _WIN32_FIND_DATAA, 0x140);
struct

FILETIME

{ /*2 members, size 8h*/ /*0*/ DWORD dwLowDateTime; /*4*/ DWORD dwHighDateTime; }; EXPECT_SIZE(struct FILETIME, 0x8);
struct

PROCESSENTRY32

{ /*10 members, size 128h*/ /*0*/ DWORD dwSize; /*4*/ DWORD cntUsage; /*8*/ DWORD th32ProcessID; /*C*/ ULONG_PTR th32DefaultHeapID; /*10*/ DWORD th32ModuleID; /*14*/ DWORD cntThreads; /*18*/ DWORD th32ParentProcessID; /*1C*/ LONG pcPriClassBase; /*20*/ DWORD dwFlags; /*24*/ CHAR szExeFile[260]; }; EXPECT_SIZE(struct PROCESSENTRY32, 0x128);
struct

tagRECT

{ /*4 members, size 10h*/ /*0*/ LONG left; /*4*/ LONG top; /*8*/ LONG right; /*C*/ LONG bottom; }; EXPECT_SIZE(struct tagRECT, 0x10);
struct

tagMSG

{ /*6 members, size 1Ch*/ /*0*/ HWND hwnd; /*4*/ UINT message; /*8*/ WPARAM wParam; /*C*/ LPARAM lParam; /*10*/ DWORD time; /*14*/ struct POINT pt; }; EXPECT_SIZE(struct tagMSG, 0x1C);
struct

POINT

{ /*2 members, size 8h*/ /*0*/ LONG x; /*4*/ LONG y; }; EXPECT_SIZE(struct POINT, 0x8);
struct

_OSVERSIONINFOA

{ /*6 members, size 94h*/ /*0*/ DWORD dwOSVersionInfoSize; /*4*/ DWORD dwMajorVersion; /*8*/ DWORD dwMinorVersion; /*C*/ DWORD dwBuildNumber; /*10*/ DWORD dwPlatformId; /*14*/ CHAR szCSDVersion[128]; }; EXPECT_SIZE(struct _OSVERSIONINFOA, 0x94);
struct

tagPOINT

{ /*2 members, size 8h*/ /*0*/ LONG x; /*4*/ LONG y; }; EXPECT_SIZE(struct tagPOINT, 0x8);
struct

tagPAINTSTRUCT

{ /*6 members, size 40h*/ /*0*/ HDC hdc; /*4*/ BOOL fErase; /*8*/ struct RECT rcPaint; /*18*/ BOOL fRestore; /*1C*/ BOOL fIncUpdate; /*20*/ BYTE rgbReserved[32]; }; EXPECT_SIZE(struct tagPAINTSTRUCT, 0x40);
struct

RECT

{ /*4 members, size 10h*/ /*0*/ LONG left; /*4*/ LONG top; /*8*/ LONG right; /*C*/ LONG bottom; }; EXPECT_SIZE(struct RECT, 0x10);
struct

PAINTSTRUCT

{ /*6 members, size 40h*/ /*0*/ HDC hdc; /*4*/ BOOL fErase; /*8*/ struct RECT rcPaint; /*18*/ BOOL fRestore; /*1C*/ BOOL fIncUpdate; /*20*/ BYTE rgbReserved[32]; }; EXPECT_SIZE(struct PAINTSTRUCT, 0x40);
struct

WNDCLASSEXA

{ /*12 members, size 30h*/ /*0*/ UINT cbSize; /*4*/ UINT style; /*8*/ WNDPROC lpfnWndProc; /*C*/ int cbClsExtra; /*10*/ int cbWndExtra; /*14*/ HINSTANCE hInstance; /*18*/ HICON hIcon; /*1C*/ HCURSOR hCursor; /*20*/ HBRUSH hbrBackground; /*24*/ LPCSTR lpszMenuName; /*28*/ LPCSTR lpszClassName; /*2C*/ HICON hIconSm; }; EXPECT_SIZE(struct WNDCLASSEXA, 0x30);
struct

_SYSTEM_INFO

{ /*10 members, size 24h*/ /*0*/ struct _SYSTEM_INFO::$058745E319A46827965CDE7F37238831 u; /*4*/ DWORD dwPageSize; /*8*/ LPVOID lpMinimumApplicationAddress; /*C*/ LPVOID lpMaximumApplicationAddress; /*10*/ DWORD_PTR dwActiveProcessorMask; /*14*/ DWORD dwNumberOfProcessors; /*18*/ DWORD dwProcessorType; /*1C*/ DWORD dwAllocationGranularity; /*20*/ WORD wProcessorLevel; /*22*/ WORD wProcessorRevision; }; EXPECT_SIZE(struct _SYSTEM_INFO, 0x24);
union

_SYSTEM_INFO::$058745E319A46827965CDE7F37238831

{ /*2 members, size 4h*/ /*0*/ _SYSTEM_INFO::$058745E319A46827965CDE7F37238831::$AA04DEB0C6383F89F13D312A174572A9 dwOemId; /*0*/ struct _SYSTEM_INFO::$058745E319A46827965CDE7F37238831::$AA04DEB0C6383F89F13D312A174572A9 s; }; EXPECT_SIZE(struct _SYSTEM_INFO::$058745E319A46827965CDE7F37238831, 0x4);
struct

_SYSTEM_INFO::$058745E319A46827965CDE7F37238831::$AA04DEB0C6383F89F13D312A174572A9

{ /*2 members, size 4h*/ /*0*/ WORD wProcessorArchitecture; /*2*/ WORD wReserved; }; EXPECT_SIZE(struct _SYSTEM_INFO::$058745E319A46827965CDE7F37238831::$AA04DEB0C6383F89F13D312A174572A9, 0x4);
struct

_RTL_CRITICAL_SECTION

{ /*6 members, size 18h*/ /*0*/ PRTL_CRITICAL_SECTION_DEBUG DebugInfo; /*4*/ LONG LockCount; /*8*/ LONG RecursionCount; /*C*/ HANDLE OwningThread; /*10*/ HANDLE LockSemaphore; /*14*/ ULONG_PTR SpinCount; }; EXPECT_SIZE(struct _RTL_CRITICAL_SECTION, 0x18);
struct

MSG

{ /*6 members, size 1Ch*/ /*0*/ HWND hwnd; /*4*/ UINT message; /*8*/ WPARAM wParam; /*C*/ LPARAM lParam; /*10*/ DWORD time; /*14*/ struct POINT pt; }; EXPECT_SIZE(struct MSG, 0x1C);
struct

timecaps_tag

{ /*2 members, size 8h*/ /*0*/ UINT wPeriodMin; /*4*/ UINT wPeriodMax; }; EXPECT_SIZE(struct timecaps_tag, 0x8);
struct

_NCB

{ /*15 members, size 40h*/ /*0*/ UCHAR ncb_command; /*1*/ UCHAR ncb_retcode; /*2*/ UCHAR ncb_lsn; /*3*/ UCHAR ncb_num; /*4*/ PUCHAR ncb_buffer; /*8*/ WORD ncb_length; /*A*/ UCHAR ncb_callname[16]; /*1A*/ UCHAR ncb_name[16]; /*2A*/ UCHAR ncb_rto; /*2B*/ UCHAR ncb_sto; /*2C*/ void (__stdcall *ncb_post)(_NCB *); /*30*/ UCHAR ncb_lana_num; /*31*/ UCHAR ncb_cmd_cplt; /*32*/ UCHAR ncb_reserve[10]; /*3C*/ HANDLE ncb_event; }; EXPECT_SIZE(struct _NCB, 0x40);
struct

WSAData

{ /*7 members, size 190h*/ /*0*/ WORD wVersion; /*2*/ WORD wHighVersion; /*4*/ char szDescription[257]; /*105*/ char szSystemStatus[129]; /*186*/ unsigned __int16 iMaxSockets; /*188*/ unsigned __int16 iMaxUdpDg; /*18A*/ char _pad18A[0x2]; /*18C*/ char *lpVendorInfo; }; EXPECT_SIZE(struct WSAData, 0x190);
struct

fd_set

{ /*2 members, size 104h*/ /*0*/ u_int fd_count; /*4*/ SOCKET fd_array[64]; }; EXPECT_SIZE(struct fd_set, 0x104);
struct

timeval

{ /*2 members, size 8h*/ /*0*/ int tv_sec; /*4*/ int tv_usec; }; EXPECT_SIZE(struct timeval, 0x8);
struct

sockaddr

{ /*2 members, size 10h*/ /*0*/ u_short sa_family; /*2*/ CHAR sa_data[14]; }; EXPECT_SIZE(struct sockaddr, 0x10);
struct

_COMMTIMEOUTS

{ /*5 members, size 14h*/ /*0*/ DWORD ReadIntervalTimeout; /*4*/ DWORD ReadTotalTimeoutMultiplier; /*8*/ DWORD ReadTotalTimeoutConstant; /*C*/ DWORD WriteTotalTimeoutMultiplier; /*10*/ DWORD WriteTotalTimeoutConstant; }; EXPECT_SIZE(struct _COMMTIMEOUTS, 0x14);
struct

_COMMCONFIG

{ /*9 members, size 34h*/ /*0*/ DWORD dwSize; /*4*/ WORD wVersion; /*6*/ WORD wReserved; /*8*/ struct DCB dcb; /*24*/ DWORD dwProviderSubType; /*28*/ DWORD dwProviderOffset; /*2C*/ DWORD dwProviderSize; /*30*/ WCHAR wcProviderData[1]; /*32*/ short _padding ; }; EXPECT_SIZE(struct _COMMCONFIG, 0x34);
struct

DCB

{ /*15 members, size 1Ch*/ /*0*/ DWORD DCBlength; /*4*/ DWORD BaudRate; /*8*/ __int32 _bf8; /*C*/ WORD wReserved; /*E*/ WORD XonLim; /*10*/ WORD XoffLim; /*12*/ BYTE ByteSize; /*13*/ BYTE Parity; /*14*/ BYTE StopBits; /*15*/ char XonChar; /*16*/ char XoffChar; /*17*/ char ErrorChar; /*18*/ char EofChar; /*19*/ char EvtChar; /*1A*/ WORD wReserved1; }; EXPECT_SIZE(struct DCB, 0x1C);
struct

_FILETIME

{ /*2 members, size 8h*/ /*0*/ DWORD dwLowDateTime; /*4*/ DWORD dwHighDateTime; }; EXPECT_SIZE(struct _FILETIME, 0x8);
struct

_TIME_ZONE_INFORMATION

{ /*7 members, size ACh*/ /*0*/ LONG Bias; /*4*/ WCHAR StandardName[32]; /*44*/ struct SYSTEMTIME StandardDate; /*54*/ LONG StandardBias; /*58*/ WCHAR DaylightName[32]; /*98*/ struct SYSTEMTIME DaylightDate; /*A8*/ LONG DaylightBias; }; EXPECT_SIZE(struct _TIME_ZONE_INFORMATION, 0xAC);
struct

SYSTEMTIME

{ /*8 members, size 10h*/ /*0*/ WORD wYear; /*2*/ WORD wMonth; /*4*/ WORD wDayOfWeek; /*6*/ WORD wDay; /*8*/ WORD wHour; /*A*/ WORD wMinute; /*C*/ WORD wSecond; /*E*/ WORD wMilliseconds; }; EXPECT_SIZE(struct SYSTEMTIME, 0x10);
struct

_SYSTEMTIME

{ /*8 members, size 10h*/ /*0*/ WORD wYear; /*2*/ WORD wMonth; /*4*/ WORD wDayOfWeek; /*6*/ WORD wDay; /*8*/ WORD wHour; /*A*/ WORD wMinute; /*C*/ WORD wSecond; /*E*/ WORD wMilliseconds; }; EXPECT_SIZE(struct _SYSTEMTIME, 0x10);
struct

_SECURITY_ATTRIBUTES

{ /*3 members, size Ch*/ /*0*/ DWORD nLength; /*4*/ LPVOID lpSecurityDescriptor; /*8*/ BOOL bInheritHandle; }; EXPECT_SIZE(struct _SECURITY_ATTRIBUTES, 0xC);
struct

_STARTUPINFOA

{ /*18 members, size 44h*/ /*0*/ DWORD cb; /*4*/ LPSTR lpReserved; /*8*/ LPSTR lpDesktop; /*C*/ LPSTR lpTitle; /*10*/ DWORD dwX; /*14*/ DWORD dwY; /*18*/ DWORD dwXSize; /*1C*/ DWORD dwYSize; /*20*/ DWORD dwXCountChars; /*24*/ DWORD dwYCountChars; /*28*/ DWORD dwFillAttribute; /*2C*/ DWORD dwFlags; /*30*/ WORD wShowWindow; /*32*/ WORD cbReserved2; /*34*/ LPBYTE lpReserved2; /*38*/ HANDLE hStdInput; /*3C*/ HANDLE hStdOutput; /*40*/ HANDLE hStdError; }; EXPECT_SIZE(struct _STARTUPINFOA, 0x44);
struct

_cpinfo

{ /*4 members, size 14h*/ /*0*/ UINT MaxCharSize; /*4*/ BYTE DefaultChar[2]; /*6*/ BYTE LeadByte[12]; /*12*/ short _padding ; }; EXPECT_SIZE(struct _cpinfo, 0x14);
struct

_SCOPETABLE_ENTRY

{ /*3 members, size Ch*/ /*0*/ int EnclosingLevel; /*4*/ void *FilterFunc; /*8*/ void *HandlerFunc; }; EXPECT_SIZE(struct _SCOPETABLE_ENTRY, 0xC);
struct

CPPEH_RECORD

{ /*3 members, size 18h*/ /*0*/ DWORD old_esp; /*4*/ EXCEPTION_POINTERS *exc_ptr; /*8*/ struct _EH3_EXCEPTION_REGISTRATION registration; }; EXPECT_SIZE(struct CPPEH_RECORD, 0x18);
struct

_EH3_EXCEPTION_REGISTRATION

{ /*4 members, size 10h*/ /*0*/ struct _EH3_EXCEPTION_REGISTRATION *Next; /*4*/ PVOID ExceptionHandler; /*8*/ PSCOPETABLE_ENTRY ScopeTable; /*C*/ DWORD TryLevel; }; EXPECT_SIZE(struct _EH3_EXCEPTION_REGISTRATION, 0x10);
struct

lineextensionid_tag

{ /*4 members, size 10h*/ /*0*/ DWORD dwExtensionID0; /*4*/ DWORD dwExtensionID1; /*8*/ DWORD dwExtensionID2; /*C*/ DWORD dwExtensionID3; }; EXPECT_SIZE(struct lineextensionid_tag, 0x10);
struct

varstring_tag

{ /*6 members, size 18h*/ /*0*/ DWORD dwTotalSize; /*4*/ DWORD dwNeededSize; /*8*/ DWORD dwUsedSize; /*C*/ DWORD dwStringFormat; /*10*/ DWORD dwStringSize; /*14*/ DWORD dwStringOffset; }; EXPECT_SIZE(struct varstring_tag, 0x18);
struct

linecallparams_tag

{ /*41 members, size B0h*/ /*0*/ DWORD dwTotalSize; /*4*/ DWORD dwBearerMode; /*8*/ DWORD dwMinRate; /*C*/ DWORD dwMaxRate; /*10*/ DWORD dwMediaMode; /*14*/ DWORD dwCallParamFlags; /*18*/ DWORD dwAddressMode; /*1C*/ DWORD dwAddressID; /*20*/ struct LINEDIALPARAMS DialParams; /*30*/ DWORD dwOrigAddressSize; /*34*/ DWORD dwOrigAddressOffset; /*38*/ DWORD dwDisplayableAddressSize; /*3C*/ DWORD dwDisplayableAddressOffset; /*40*/ DWORD dwCalledPartySize; /*44*/ DWORD dwCalledPartyOffset; /*48*/ DWORD dwCommentSize; /*4C*/ DWORD dwCommentOffset; /*50*/ DWORD dwUserUserInfoSize; /*54*/ DWORD dwUserUserInfoOffset; /*58*/ DWORD dwHighLevelCompSize; /*5C*/ DWORD dwHighLevelCompOffset; /*60*/ DWORD dwLowLevelCompSize; /*64*/ DWORD dwLowLevelCompOffset; /*68*/ DWORD dwDevSpecificSize; /*6C*/ DWORD dwDevSpecificOffset; /*70*/ DWORD dwPredictiveAutoTransferStates; /*74*/ DWORD dwTargetAddressSize; /*78*/ DWORD dwTargetAddressOffset; /*7C*/ DWORD dwSendingFlowspecSize; /*80*/ DWORD dwSendingFlowspecOffset; /*84*/ DWORD dwReceivingFlowspecSize; /*88*/ DWORD dwReceivingFlowspecOffset; /*8C*/ DWORD dwDeviceClassSize; /*90*/ DWORD dwDeviceClassOffset; /*94*/ DWORD dwDeviceConfigSize; /*98*/ DWORD dwDeviceConfigOffset; /*9C*/ DWORD dwCallDataSize; /*A0*/ DWORD dwCallDataOffset; /*A4*/ DWORD dwNoAnswerTimeout; /*A8*/ DWORD dwCallingPartyIDSize; /*AC*/ DWORD dwCallingPartyIDOffset; }; EXPECT_SIZE(struct linecallparams_tag, 0xB0);
struct

LINEDIALPARAMS

{ /*4 members, size 10h*/ /*0*/ DWORD dwDialPause; /*4*/ DWORD dwDialSpeed; /*8*/ DWORD dwDigitDuration; /*C*/ DWORD dwWaitForDialtone; }; EXPECT_SIZE(struct LINEDIALPARAMS, 0x10);
struct

linedevcaps_tag

{ /*54 members, size FCh*/ /*0*/ DWORD dwTotalSize; /*4*/ DWORD dwNeededSize; /*8*/ DWORD dwUsedSize; /*C*/ DWORD dwProviderInfoSize; /*10*/ DWORD dwProviderInfoOffset; /*14*/ DWORD dwSwitchInfoSize; /*18*/ DWORD dwSwitchInfoOffset; /*1C*/ DWORD dwPermanentLineID; /*20*/ DWORD dwLineNameSize; /*24*/ DWORD dwLineNameOffset; /*28*/ DWORD dwStringFormat; /*2C*/ DWORD dwAddressModes; /*30*/ DWORD dwNumAddresses; /*34*/ DWORD dwBearerModes; /*38*/ DWORD dwMaxRate; /*3C*/ DWORD dwMediaModes; /*40*/ DWORD dwGenerateToneModes; /*44*/ DWORD dwGenerateToneMaxNumFreq; /*48*/ DWORD dwGenerateDigitModes; /*4C*/ DWORD dwMonitorToneMaxNumFreq; /*50*/ DWORD dwMonitorToneMaxNumEntries; /*54*/ DWORD dwMonitorDigitModes; /*58*/ DWORD dwGatherDigitsMinTimeout; /*5C*/ DWORD dwGatherDigitsMaxTimeout; /*60*/ DWORD dwMedCtlDigitMaxListSize; /*64*/ DWORD dwMedCtlMediaMaxListSize; /*68*/ DWORD dwMedCtlToneMaxListSize; /*6C*/ DWORD dwMedCtlCallStateMaxListSize; /*70*/ DWORD dwDevCapFlags; /*74*/ DWORD dwMaxNumActiveCalls; /*78*/ DWORD dwAnswerMode; /*7C*/ DWORD dwRingModes; /*80*/ DWORD dwLineStates; /*84*/ DWORD dwUUIAcceptSize; /*88*/ DWORD dwUUIAnswerSize; /*8C*/ DWORD dwUUIMakeCallSize; /*90*/ DWORD dwUUIDropSize; /*94*/ DWORD dwUUISendUserUserInfoSize; /*98*/ DWORD dwUUICallInfoSize; /*9C*/ struct LINEDIALPARAMS MinDialParams; /*AC*/ struct LINEDIALPARAMS MaxDialParams; /*BC*/ struct LINEDIALPARAMS DefaultDialParams; /*CC*/ DWORD dwNumTerminals; /*D0*/ DWORD dwTerminalCapsSize; /*D4*/ DWORD dwTerminalCapsOffset; /*D8*/ DWORD dwTerminalTextEntrySize; /*DC*/ DWORD dwTerminalTextSize; /*E0*/ DWORD dwTerminalTextOffset; /*E4*/ DWORD dwDevSpecificSize; /*E8*/ DWORD dwDevSpecificOffset; /*EC*/ DWORD dwLineFeatures; /*F0*/ DWORD dwSettableDevStatus; /*F4*/ DWORD dwDeviceClassesSize; /*F8*/ DWORD dwDeviceClassesOffset; }; EXPECT_SIZE(struct linedevcaps_tag, 0xFC);
struct

_MEMORY_BASIC_INFORMATION

{ /*7 members, size 1Ch*/ /*0*/ PVOID BaseAddress; /*4*/ PVOID AllocationBase; /*8*/ DWORD AllocationProtect; /*C*/ SIZE_T RegionSize; /*10*/ DWORD State; /*14*/ DWORD Protect; /*18*/ DWORD Type; }; EXPECT_SIZE(struct _MEMORY_BASIC_INFORMATION, 0x1C);
union

ULARGE_INTEGER

{ /*3 members, size 8h*/ /*0*/ struct _ULARGE_INTEGER::$0354AA9C204208F00D0965D07BBE7FAC anonymous_0; /*0*/ struct _ULARGE_INTEGER::$0354AA9C204208F00D0965D07BBE7FAC u; /*0*/ char QuadPart[8] ; }; EXPECT_SIZE(struct ULARGE_INTEGER, 0x8);
struct

_ULARGE_INTEGER::$0354AA9C204208F00D0965D07BBE7FAC

{ /*2 members, size 8h*/ /*0*/ DWORD LowPart; /*4*/ DWORD HighPart; }; EXPECT_SIZE(struct _ULARGE_INTEGER::$0354AA9C204208F00D0965D07BBE7FAC, 0x8);
struct

GUID

{ /*4 members, size 10h*/ /*0*/ int Data1 ; /*4*/ short Data2 ; /*6*/ short Data3 ; /*8*/ unsigned __int8 Data4[8]; }; EXPECT_SIZE(struct GUID, 0x10);
struct

_DCB

{ /*15 members, size 1Ch*/ /*0*/ int DCBlength ; /*4*/ int BaudRate ; /*8*/ int fDummy2 ; /*C*/ short wReserved ; /*E*/ short XonLim ; /*10*/ short XoffLim ; /*12*/ char ByteSize ; /*13*/ char Parity ; /*14*/ char StopBits ; /*15*/ char XonChar ; /*16*/ char XoffChar ; /*17*/ char ErrorChar ; /*18*/ char EofChar ; /*19*/ char EvtChar ; /*1A*/ short wReserved1 ; }; EXPECT_SIZE(struct _DCB, 0x1C);
struct

_SYSTEM_INFO::$41710344DA04EC56A327D4EA11DEF6D2::$AA04DEB0C6383F89F13D312A174572A9

{ /*2 members, size 4h*/ /*0*/ short wProcessorArchitecture ; /*2*/ short wReserved ; }; EXPECT_SIZE(struct _SYSTEM_INFO::$41710344DA04EC56A327D4EA11DEF6D2::$AA04DEB0C6383F89F13D312A174572A9, 0x4);
union

_SYSTEM_INFO::$41710344DA04EC56A327D4EA11DEF6D2

{ /*2 members, size 4h*/ /*0*/ int dwOemId ; /*0*/ struct _SYSTEM_INFO::$41710344DA04EC56A327D4EA11DEF6D2::$AA04DEB0C6383F89F13D312A174572A9 anonymous_0; }; EXPECT_SIZE(struct _SYSTEM_INFO::$41710344DA04EC56A327D4EA11DEF6D2, 0x4);
struct

CCarHeadlightsPosition

{ /*19 members, size 150h*/ /*0*/ char _pad0[0x30]; /*30*/ int fX0 ; /*34*/ int fY0 ; /*38*/ int fZ0 ; /*3C*/ char _pad3C[0x4]; /*40*/ int fX1 ; /*44*/ int fY1 ; /*48*/ int fZ1 ; /*4C*/ char _pad4C[0x14]; /*60*/ int fX2 ; /*64*/ int fY2 ; /*68*/ int fZ2 ; /*6C*/ char _pad6C[0x94]; /*100*/ int fX3 ; /*104*/ int fY3 ; /*108*/ int fZ3 ; /*10C*/ char _pad10C[0x4]; /*110*/ int fX4 ; /*114*/ int fY4 ; /*118*/ int fZ4 ; /*11C*/ char _pad11C[0x14]; /*130*/ int fX5 ; /*134*/ int fY5 ; /*138*/ int fZ5 ; /*13C*/ char _pad13C[0x13]; /*14F*/ char __end ; }; EXPECT_SIZE(struct CCarHeadlightsPosition, 0x150);
struct

LanguageData

{ /*3 members, size Ch*/ /*0*/ char *pName; /*4*/ int field_4; /*8*/ int region; }; EXPECT_SIZE(struct LanguageData, 0xC);
struct

LanguageFileData

{ /*4 members, size 10h*/ /*0*/ int id; /*4*/ char *pFilecode; /*8*/ char *pBinfile; /*C*/ struct LanguageFontData *fontdata; }; EXPECT_SIZE(struct LanguageFileData, 0x10);
struct

LanguageStruct7F6DE8

{ /*2 members, size 8h*/ /*0*/ unsigned int fonthash; /*4*/ int field_4; }; EXPECT_SIZE(struct LanguageStruct7F6DE8, 0x8);
struct

LanguageFontData

{ /*28 members, size 70h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ int field_38; /*3C*/ int field_3C; /*40*/ int field_40; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ int field_4C; /*50*/ int field_50; /*54*/ int field_54; /*58*/ int field_58; /*5C*/ int field_5C; /*60*/ int field_60; /*64*/ int field_64; /*68*/ int field_68; /*6C*/ int field_6C; }; EXPECT_SIZE(struct LanguageFontData, 0x70);
struct

LoadedLanguage

{ /*4 members, size 10h*/ /*0*/ int numStrings; /*4*/ char **ptrStrings; /*8*/ struct LanguageTableEntry *ptrTable; /*C*/ struct LanguageConversionTable *ptrConversionTable; }; EXPECT_SIZE(struct LoadedLanguage, 0x10);
struct

LanguageTableEntry

{ /*2 members, size 8h*/ /*0*/ unsigned int key; /*4*/ char *string; }; EXPECT_SIZE(struct LanguageTableEntry, 0x8);
struct

LanguageConversionTable

{ /*2 members, size 204h*/ /*0*/ int field_0; /**size unknown*/ /*4*/ char table[512] ; }; EXPECT_SIZE(struct LanguageConversionTable, 0x204);
struct

BinSectionHeader

{ /*2 members, size 8h*/ /*0*/ unsigned int magic; /*4*/ int size; }; EXPECT_SIZE(struct BinSectionHeader, 0x8);
struct

BinSection

{ /*2 members, size 9h*/ /*0*/ struct BinSectionHeader header; /**actual data size is determined by struct BinSectionHeader.size*/ /*8*/ char data[1]; }; EXPECT_SIZE(struct BinSection, 0x9);
struct

BinDataLanguage39000

{ /*4 members, size 10h*/ /*0*/ int field_0; /*4*/ int numStrings; /*8*/ struct LanguageTable *tableOffset; /*C*/ char **stringsOffset; }; EXPECT_SIZE(struct BinDataLanguage39000, 0x10);

link is a circle (last entry's next is the first entry; first entry's prev is the last entry)

struct

PoolLink

{ /*2 members, size 8h*/ /*0*/ struct PoolLink *prev; /*4*/ struct PoolLink *next; }; EXPECT_SIZE(struct PoolLink, 0x8);
struct

PoolControl

{ /*2 members, size Ch*/ /*0*/ int inited; /*4*/ struct PoolLink link; }; EXPECT_SIZE(struct PoolControl, 0xC);

The pool entries are located at the end of this struct; so variables of this struct type are of sizeof(struct Pool)+elementAmount*elementSize?

struct

Pool

{ /*11 members, size 30h*/ /*0*/ struct PoolLink __parent; /*8*/ struct Pool *nextLinkedPool; /*C*/ char *pName; /*10*/ struct PoolEntry *firstAvailableElement; /**see enum POOLFLAGS*/ /*14*/ int flags; /*18*/ int numUsedElements; /**the highest amount that was allocated at one point?*/ /*1C*/ int maxUsedElements?; /*20*/ int unknownArgGivenOnPoolCreation ; /*24*/ int elementAmount; /*28*/ int elementSize; /*2C*/ int elementAmountOverAllLinkedPools; }; EXPECT_SIZE(struct Pool, 0x30);
struct

bPNodeSlotPoolEntry

{ /*2 members, size Ch*/ /*0*/ struct PoolEntry __parent; /*8*/ char *fngName; }; EXPECT_SIZE(struct bPNodeSlotPoolEntry, 0xC);
struct

PoolEntry

{ /*2 members, size 8h*/ /*0*/ struct PoolEntry *nextEntry; /*4*/ struct PoolEntry *prevEntry; }; EXPECT_SIZE(struct PoolEntry, 0x8);
struct

LevelSorterPoolEntry

{ /*6 members, size 1Ch*/ /*0*/ struct PoolEntry __parent; /*8*/ int fngName ; /*C*/ int indexInLevelSorterLink ; /*10*/ int someNumber ; /*14*/ int field_14; /*18*/ int field_18; }; EXPECT_SIZE(struct LevelSorterPoolEntry, 0x1C);

This struct's size should be 0xF0? (to be confirmed again)

struct

bFileSystemPoolEntry

{ /*7 members, size 80h*/ /*0*/ struct PoolEntry __parent; /*8*/ int ptrDataContent ; /*C*/ int ptrfield_C ; /*10*/ int nextLinkedEntry? ; /*14*/ int field_14; /*18*/ int someNumber ; /**sometimes this is different data?*/ /*1C*/ char filename[100]; }; EXPECT_SIZE(struct bFileSystemPoolEntry, 0x80);
struct

ResourceFileSlotPoolEntry

{ /*37 members, size F0h*/ /*0*/ struct PoolEntry __parent; /*8*/ char field_8; /*9*/ char _pad9[0x3]; /*C*/ int field_C; /**sometimes read as a byte*/ /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ char filename[60] ; /*58*/ char field_58; /*59*/ char field_59; /*5A*/ char field_5A; /*5B*/ char field_5B; /*5C*/ int field_5C; /*60*/ int field_60; /*64*/ int field_64; /*68*/ int field_68; /*6C*/ int field_6C; /*70*/ int field_70; /*74*/ int field_74; /*78*/ int field_78; /*7C*/ int field_7C; /*80*/ int field_80; /*84*/ int field_84; /*88*/ int field_88; /*8C*/ int field_8C; /*90*/ int field_90; /*94*/ char filename_again[48] ; /*C4*/ int field_C4; /*C8*/ int field_C8; /**set to 1 after ptrAllocatedMemForData has been free'd*/ /*CC*/ int someNumber_CC ; /*D0*/ void (__cdecl *ptrFunction)(int); /**used as argument when calling D0 ptrFunction*/ /*D4*/ int field_D4; /*D8*/ int ptrAllocatedMemForData ; /*DC*/ int filesize ; /*E0*/ int field_E0; /*E4*/ int field_E4; /*E8*/ int field_E8; /*EC*/ int field_EC; }; EXPECT_SIZE(struct ResourceFileSlotPoolEntry, 0xF0);
struct

QueuedFileSlotPoolEntry

{ /*16 members, size 7Ch*/ /*0*/ struct PoolEntry __parent; /*8*/ int ptrDataContent ; /**has some weird acces but it HAS to be filename for other usages (and strcpy and strcmp). Maybe those other usages use the wrong struct?*/ /*C*/ char filename[60] ; /*48*/ int field_48; /*4C*/ int filesize ; /*50*/ int field_50; /*54*/ int field_54; /*58*/ int field_58; /**might be sub_571050*/ /*5C*/ void (__cdecl *ptrsomefunc)(void *); /*60*/ struct ResourceFileSlotPoolEntry *resourceFileSlotPoolEntry; /*64*/ int field_64; /*68*/ int field_68; /*6C*/ int handle ; /**2 when filesize is 0?*/ /*70*/ int field_70; /*74*/ int field_74; /*78*/ int flt_field_78 ; }; EXPECT_SIZE(struct QueuedFileSlotPoolEntry, 0x7C);
struct

structFor440AD0

{ /*4 members, size 30h*/ /*0*/ struct substructFor440AD0type6 type6; /*C*/ struct substructFor440AD0type5 type5; /*18*/ struct substructFor440AD0type1 type1; /*24*/ struct substructFor440AD0type4 type4; }; EXPECT_SIZE(struct structFor440AD0, 0x30);
struct

substructFor440AD0

{ /*1 members, size 4h*/ /*0*/ int type ; }; EXPECT_SIZE(struct substructFor440AD0, 0x4);
struct

substructFor440AD0common

{ /*3 members, size Ch*/ /*0*/ struct substructFor440AD0 __parent; /*4*/ int value ; /*8*/ struct substructFor440AD0 *next; }; EXPECT_SIZE(struct substructFor440AD0common, 0xC);
struct

substructFor440AD0type1

{ /*3 members, size Ch*/ /**1*/ /*0*/ struct substructFor440AD0 __parent; /*4*/ char *ptrFilename; /*8*/ struct substructFor440AD0type4 *next_type4; }; EXPECT_SIZE(struct substructFor440AD0type1, 0xC);
struct

substructFor440AD0type2

{ /*3 members, size Ch*/ /*0*/ struct substructFor440AD0 __parent; /*4*/ int value ; /*8*/ struct substructFor440AD0 *next; }; EXPECT_SIZE(struct substructFor440AD0type2, 0xC);
struct

substructFor440AD0type3

{ /*3 members, size Ch*/ /*0*/ struct substructFor440AD0 __parent; /*4*/ int value ; /*8*/ struct substructFor440AD0 *next; }; EXPECT_SIZE(struct substructFor440AD0type3, 0xC);
struct

substructFor440AD0type4

{ /*3 members, size Ch*/ /**4*/ /*0*/ struct substructFor440AD0 __parent; /**a number?*/ /*4*/ int value ; /*8*/ int next_null ; }; EXPECT_SIZE(struct substructFor440AD0type4, 0xC);
struct

substructFor440AD0type5

{ /*3 members, size Ch*/ /**5*/ /*0*/ struct substructFor440AD0 __parent; /*4*/ char *ptrRandomTraceFileString; /*8*/ struct substructFor440AD0type1 *next_type1; }; EXPECT_SIZE(struct substructFor440AD0type5, 0xC);
struct

substructFor440AD0type6

{ /*3 members, size Ch*/ /**6*/ /*0*/ struct substructFor440AD0 __parent; /**0x1B0?*/ /*4*/ int value ; /*8*/ struct substructFor440AD0type5 *next_type5; }; EXPECT_SIZE(struct substructFor440AD0type6, 0xC);
struct

D3DVSHADERCAPS2_0

{ /*4 members, size 10h*/ /*0*/ int dwCaps ; /*4*/ int iDynamicFlowControlDepth ; /*8*/ int iNumTemps ; /*C*/ int iStaticFlowControlDepth ; }; EXPECT_SIZE(struct D3DVSHADERCAPS2_0, 0x10);
struct

DialogInfo

{ /*18 members, size 338h*/ /*0*/ char text[768]; /*300*/ unsigned int leftButtonLanguageString; /*304*/ unsigned int leftButtonMessage; /*308*/ unsigned int rightButtonLanguageString; /*30C*/ unsigned int rightButtonMessage; /*310*/ unsigned int middleButtonLanguageString; /*314*/ unsigned int middleButtonMessage; /**Message to send when pressing esc. If 0, dialog is not escapable*/ /*318*/ unsigned int escMessage; /*31C*/ int field_31C; /*320*/ char *parentFNGName; /*324*/ char *myFNGName; /*328*/ int numButtons; /*32C*/ char field_32C; /*32D*/ char isHelpDialog; /*32E*/ char field_32E; /*32F*/ char textNeedsSomeWcharConversion; /**this is a message that will be sent (when non-zero) (with SomethingUI::SendMessageToFNG) to parentFNGName when this dialog is dismissed due to ShowDialog being called to show another dialog initialized to 0 in ShowDialog, but some dialog set this later TODO: explore maybe?*/ /*330*/ unsigned int messageToSendToParentFNGWhenThisDialogIsDismissed; /*334*/ int dialogId; }; EXPECT_SIZE(struct DialogInfo, 0x338);
struct

FNGData

{ /*7 members, size 1Ch*/ /*0*/ char *name; /*4*/ struct FNGObject *(__cdecl *procCreateFNGObject)(struct FNGShowData *); /*8*/ enum LANGUAGE_LABELS helpLanguageKey; /*C*/ enum PCHELPBARFLAGS helpBarMask; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; }; EXPECT_SIZE(struct FNGData, 0x1C);
struct

FNGShowData

{ /*5 members, size 14h*/ /*0*/ char *fngName; /*4*/ struct FNGInfo *fngInfo; /**set to struct FNGData.helpLanguageKey TODO please reconfirm*/ /*8*/ enum LANGUAGE_LABELS helpTextLanguageString; /**set to struct FNGData.helpBarMask*/ /*C*/ unsigned int helpBarMask; /*10*/ struct FNGShowData_Arg2 arg2; }; EXPECT_SIZE(struct FNGShowData, 0x14);
union

FNGShowData_Arg2

{ /*3 members, size 4h*/ /*0*/ struct DialogInfo *unk; /*0*/ int MessageDialogFNGObject_ptrSms ; /*0*/ int DialogFNGObject_ptrDialogInfo ; }; EXPECT_SIZE(struct FNGShowData_Arg2, 0x4);

size unknown

struct

FNGInfo

{ /*27 members, size 98h*/ /**'next' is child fng, 'prev' is parent fng*/ /*0*/ struct ListEntry __parent; /*C*/ char *fngName; /*10*/ unsigned int hash; /*14*/ char field_14; /*15*/ char field_15; /*16*/ char field_16; /*17*/ char field_17; /**index in levelSorterPoolEntry*/ /*18*/ int indexInLevelSorterLink ; /*1C*/ int controlMask; /**control mask related?*/ /*20*/ int field_20; /**control mask related?*/ /*24*/ int field_24; /**control mask related?*/ /*28*/ int field_28; /*2C*/ int field_2C; /**bit surprising but ok*/ /*30*/ struct UIData_field8 *pUIData_field8; /*34*/ int field_34; /*38*/ int field_38; /**what is the relation between these? calling/parent fng?*/ /*3C*/ struct FNGInfo *somefnginfo; /*40*/ struct SomethingUIImpl *somethingUIImpl; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ struct UIElement *rootUIElement; /*50*/ char _pad50[0x14]; /*64*/ int field_64; /*68*/ int field_68; /*6C*/ char _pad6C[0x10]; /*7C*/ int field_7C; /*80*/ char _pad80[0xC]; /*8C*/ int field_8C; /*90*/ int field_90; /*94*/ int field_94; }; EXPECT_SIZE(struct FNGInfo, 0x98);
struct

CheatScreenData

{ /*11 members, size 3Ch*/ /*0*/ void **vtable; /**only 1 when in the 'press enter key' screen*/ /*4*/ char doCheatCheck; /*5*/ char cheatExecuted; /*6*/ char field_6; /*7*/ char field_7; /*8*/ int field2CofLastCheatActivated; /**0x7FB960 cheatData*/ /*C*/ struct CheatData *cheats; /**20*/ /*10*/ int numCheats; /*14*/ char typedCheat[32]; /*34*/ int typedCheatLength; /*38*/ int field_38; }; EXPECT_SIZE(struct CheatScreenData, 0x3C);

size 0x34

struct

CheatData

{ /*16 members, size 34h*/ /**splitting name[32] into 8 fields because it makes the disassembly easier, because it's written/read per dword*/ /*0*/ int name0 ; /*4*/ int name4 ; /*8*/ int name8 ; /*C*/ int nameC ; /*10*/ int name10 ; /*14*/ int name14 ; /*18*/ int name18 ; /*1C*/ int name1C ; /*20*/ enum CHEATTYPE cheatType; /**hash (when cheatType is sponsor car or vinyl) or data (what is the other data?)*/ /*24*/ unsigned int cheatData; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ char hasBeenTriggered; /*31*/ char field_31; /*32*/ char cheatEnabled; /*33*/ char field_33; }; EXPECT_SIZE(struct CheatData, 0x34);
struct

CriticalSectionWrapper_2

{ /*2 members, size 8h*/ /**pointer to struct of CRITICAL_SECTION*/ /*0*/ int lpCriticalSection ; /*4*/ int field_4; }; EXPECT_SIZE(struct CriticalSectionWrapper_2, 0x8);
struct

CRealCoreDrive

{ /*2 members, size 14h*/ /**probably 7C30F8*/ /*0*/ struct CRealCoreDrive_vtable *vtable; /**like 'null:'. actual size is unknown, but this struct size is probably 0x14*/ /*4*/ char driveNameLetterPathThing[16] ; }; EXPECT_SIZE(struct CRealCoreDrive, 0x14);
struct

MouseData

{ /*18 members, size 2Ah*/ /*0*/ struct IDirectInputDevice8 *dinputdevice; /**on 640x480 canvas*/ /*4*/ int cursorX; /**on 640x480 canvas*/ /*8*/ int cursorY; /**on 640x480 canvas*/ /*C*/ int previousCursorX; /**on 640x480 canvas*/ /*10*/ int previousCursorY; /**on 640x480 canvas*/ /*14*/ int deltaCursorX; /**on 640x480 canvas*/ /*18*/ int deltaCursorY; /**scrollwheel data*/ /*1C*/ int mousestate.lZ; /**result of GetSystemMetrics(SM_SWAPBUTTON)*/ /*20*/ char areMouseButtonsSwapped; /**left mouse button*/ /*21*/ char button0State; /*22*/ char button0JustPressed; /*23*/ char button0JustReleased; /**right mouse button*/ /*24*/ char button1State; /*25*/ char button1JustPressed; /*26*/ char button1JustReleased; /**middle mouse button*/ /*27*/ char button2State; /*28*/ char button2JustPressed; /*29*/ char button2JustReleased; }; EXPECT_SIZE(struct MouseData, 0x2A);
struct

QWORDSTRUCT

{ /*2 members, size 8h*/ /*0*/ int lo32 ; /*4*/ int hi32 ; }; EXPECT_SIZE(struct QWORDSTRUCT, 0x8);
struct

IDirectInputDevice8

{ /*1 members, size 4h*/ /*0*/ struct IDirectInputDevice8vtable *vtable; }; EXPECT_SIZE(struct IDirectInputDevice8, 0x4);
struct

IDirectInputDevice8vtable

{ /*14 members, size 38h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ HRESULT (__stdcall *Release)(struct IDirectInputDevice8 *this); /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ HRESULT (__stdcall *Acquire)(struct IDirectInputDevice8 *this); /*20*/ HRESULT (__stdcall *Unacquire)(struct IDirectInputDevice8 *this); /*24*/ HRESULT (__stdcall *GetDeviceState)(struct IDirectInputDevice8 *this, DWORD cbData, LPVOID lpvData); /*28*/ int field_28; /*2C*/ HRESULT (__stdcall *SetDataFormat)(struct IDirectInputDevice8 *this, int *dataformat); /*30*/ int field_30; /*34*/ HRESULT (__stdcall *SetCooperativeLevel)(struct IDirectInputDevice8 *this, HWND hwnd, DWORD dwFlags); }; EXPECT_SIZE(struct IDirectInputDevice8vtable, 0x38);
struct

D3DPSHADERCAPS2_0

{ /*5 members, size 14h*/ /*0*/ int dwCaps ; /*4*/ int iDynamicFlowControlDepth ; /*8*/ int iNumTemps ; /*C*/ int iStaticFlowControlDepth ; /*10*/ int iNumInstructionSlots ; }; EXPECT_SIZE(struct D3DPSHADERCAPS2_0, 0x14);
struct

D3DCAPS9

{ /*69 members, size 130h*/ /*0*/ enum D3DDEVTYPE dwDeviceType; /*4*/ int uiAdapterOrdinal ; /*8*/ int dwCaps ; /*C*/ int dwCaps2 ; /*10*/ int dwCaps3 ; /*14*/ int dwPresentationIntervals ; /*18*/ int dwCursorCaps ; /*1C*/ int dwDevCaps ; /*20*/ int dwPrimiriveMiscCaps ; /*24*/ int dwRasterCaps ; /*28*/ int dwZCmpCaps ; /*2C*/ int dwSrcBeldnCaps ; /*30*/ int dwDestBlendCaps ; /*34*/ int dwAlphaCmpCaps ; /*38*/ int dwShadeCaps ; /*3C*/ int dwTextureCaps ; /*40*/ int dwTextureFilterCaps ; /*44*/ int dwCubeTextureFilterCaps ; /*48*/ int dwVolumeTextureFilterCaps ; /*4C*/ int dwTextureAddressCaps ; /*50*/ int dwVolumeTextureAddressCaps ; /*54*/ int dwLineCaps ; /*58*/ int dwMaxTextureWidth ; /*5C*/ int dwMaxTextureHeight ; /*60*/ int dwMaxVolumeExtent ; /*64*/ int dwMaxTextureRepeat ; /*68*/ int dwMaxTextureAspectRatio ; /*6C*/ int dwMaxAnisotropy ; /*70*/ int fMaxVertexW ; /*74*/ int fGuardBandLeft ; /*78*/ int fGuardBandTop ; /*7C*/ int fGuardBandRight ; /*80*/ int fGuardBandBottom ; /*84*/ int fExtentsAdjust ; /*88*/ int dwStencilCaps ; /*8C*/ int dwFVFCaps ; /*90*/ int dwTextureOpCaps ; /*94*/ int dwMaxTextureBlendStages ; /*98*/ int dwMaxSimultaneousTextures ; /*9C*/ int dwVertexProcessingCaps ; /*A0*/ int dwMaxActiveLights ; /*A4*/ int dwMaxUserClipPlanes ; /*A8*/ int dwMaxVertexBlendMartices ; /*AC*/ int dwMaxVertexBlendMatrixIndex ; /*B0*/ int fMaxPointSize ; /*B4*/ int dwMaxPrimitiveCount ; /*B8*/ int dwMaxVertexIndex ; /*BC*/ int dwMaxStreams ; /*C0*/ int dwMaxStreamsStride ; /*C4*/ int dwVertexShaderVersion ; /*C8*/ int dwMaxVertexShaderConst ; /*CC*/ int dwPixelShaderVersion ; /*D0*/ int fPixelShader1xMaxValue ; /*D4*/ int dwDevCaps2 ; /*D8*/ int uiMasterAdapterOrdinal ; /*DC*/ int uiAdapterOrdinalInGroup ; /*E0*/ int uiNumberOfAdaptersInGroup ; /*E4*/ int dwDeclTypes ; /*E8*/ int dwNumSimultaneousRTs ; /*EC*/ int swStretchRectFilterCaps ; /*F0*/ struct D3DVSHADERCAPS2_0 VS20Caps; /*100*/ struct D3DPSHADERCAPS2_0 PS20Caps; /*114*/ int dwVertexTextureFilterCaps ; /*118*/ int dwMaxVShaderInstructionsExecuted ; /*11C*/ int dwMaxPShaderInstructionsExecuted ; /*120*/ int dwMaxVertexShader30InstructionSlots ; /*124*/ int dwMaxPixelShader30InstructionSlots ; /*128*/ int dwReserved2 ; /*12C*/ int dwReserved3 ; }; EXPECT_SIZE(struct D3DCAPS9, 0x130);
struct

D3DADAPTER_IDENTIFIER9

{ /*11 members, size 44Ch*/ /**char[MAX_DEVICE_IDENTIFIER_STRING]*/ /*0*/ char cDriver[512]; /**char[MAX_DEVICE_IDENTIFIER_STRING]*/ /*200*/ char cDescription[512]; /*400*/ char cDeviceName[32]; /**SubVersion = HIWORD(DriverVersion.LowPart) Build = LOWORD(DriverVersion.LowPart)*/ /*420*/ int dwDriverVersionLowPart ; /**Product = HIWORD(DriverVersion.HighPart) Version = LOWORD(DriverVersion.HighPart)*/ /*424*/ int dwDriverVersionHightPart ; /*428*/ int dwVendorId ; /*42C*/ int dwDeviceId ; /*430*/ int dwSubSysId ; /*434*/ int dwRevision ; /*438*/ struct GUID DeviceIdentifier; /*448*/ int dwWHQLLevel ; }; EXPECT_SIZE(struct D3DADAPTER_IDENTIFIER9, 0x44C);
struct

IDirectInput8

{ /*1 members, size 4h*/ /*0*/ struct IDirectInput8vtable *vtable; }; EXPECT_SIZE(struct IDirectInput8, 0x4);
struct

IDirectInput8vtable

{ /*11 members, size 2Ch*/ /*0*/ int QueryInterface ; /*4*/ int AddRef ; /*8*/ int Release ; /*C*/ HRESULT (__stdcall *CreateDevice)(struct IDirectInput8vtable *this, int rguid, int *lplpDirectInputDevice, void *pUnkOuter); /*10*/ int EnumDevices ; /*14*/ int GetDeviceStatus ; /*18*/ int RunControlPanel ; /*1C*/ int Initialize ; /*20*/ int FindDevice ; /*24*/ int EnumDevicesBySemantics ; /*28*/ int ConfigureDevices ; }; EXPECT_SIZE(struct IDirectInput8vtable, 0x2C);
struct

D3DPRESENT_PARAMETERS

{ /*14 members, size 38h*/ /*0*/ int uiBackBufferWidth ; /*4*/ int uiBackBufferHeight ; /*8*/ int BackBufferFormat ; /*C*/ int uiBackBufferCount ; /*10*/ enum D3DMULTISAMPLE_TYPE MultiSampleType; /*14*/ int MultiSampleQuality ; /*18*/ enum D3DSWAPEFFECT SwapEffect; /*1C*/ int hDeviceWindow ; /*20*/ int bWindowed ; /*24*/ int bEnableAutoDepthStencil ; /*28*/ enum _D3DFORMAT AutoDepthStencilFormat; /*2C*/ int dwFlags ; /**windowed mode: 0, fullscreen: one of rates returned from EnumAdapterModes*/ /*30*/ int uiFullScreen_RefreshRateInHz ; /*34*/ int uiPresentationInterval ; }; EXPECT_SIZE(struct D3DPRESENT_PARAMETERS, 0x38);
struct

WIN32_FIND_DATAA

{ /*11 members, size 140h*/ /*0*/ DWORD dwFileAttributes; /*4*/ struct FILETIME ftCreationTime; /*C*/ struct FILETIME ftLastAccessTime; /*14*/ struct FILETIME ftLastWriteTime; /*1C*/ DWORD nFileSizeHigh; /*20*/ DWORD nFileSizeLow; /*24*/ DWORD dwReserved0; /*28*/ DWORD dwReserved1; /*2C*/ CHAR cFileName[260]; /*130*/ CHAR cAlternateFileName[14]; /*13E*/ char _padding[2]; }; EXPECT_SIZE(struct WIN32_FIND_DATAA, 0x140);
struct

DIMOUSESTATE2

{ /*11 members, size 14h*/ /*0*/ int lX ; /*4*/ int lY ; /*8*/ int lZ ; /*C*/ char rbgButton0 ; /*D*/ char rbgButton1 ; /*E*/ char rbgButton2 ; /*F*/ char rbgButton3 ; /*10*/ char rbgButton4 ; /*11*/ char rbgButton5 ; /*12*/ char rbgButton6 ; /*13*/ char rbgButton7 ; }; EXPECT_SIZE(struct DIMOUSESTATE2, 0x14);
struct

tagSIZE

{ /*2 members, size 8h*/ /*0*/ LONG _cx; /*4*/ LONG cy; }; EXPECT_SIZE(struct tagSIZE, 0x8);
struct

_SIZE

{ /*2 members, size 8h*/ /*0*/ int width ; /*4*/ int height ; }; EXPECT_SIZE(struct _SIZE, 0x8);
struct

_POS

{ /*2 members, size 8h*/ /*0*/ int x ; /*4*/ int y ; }; EXPECT_SIZE(struct _POS, 0x8);
struct

CRealCoreDrive_vtable

{ /*14 members, size 38h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /**probably CreateFileAWrapper*/ /*C*/ int (__thiscall *CreateFileAWrapper)(struct CRealCoreDrive *this, LPCSTR lpFileName, int unk1, int ptrUnk2); /**probably CRealCoreDrive::CloseHandleWrapper*/ /*10*/ int (__thiscall *CloseHandleWrapper)(struct CRealCoreDrive *this, HANDLE handle); /**probably CRealCoreDrive::ReadFileWrapper return amount of bytes actually read*/ /*14*/ int (__thiscall *ReadFileWrapper)(struct CRealCoreDrive *this, HANDLE hFile, char *lpBuffer, int nNumberOfBytesToRead, int unkunused1, int unkunused2); /**probably CRealCoreDrive::WriteFileWrapper*/ /*18*/ int (__thiscall *WriteFileWrapper)(struct CRealCoreDrive *this, HANDLE hFile, char *lpBuffer, int nNumberOfBytesToWrite); /**probably CRealCoreDrive::SetFilePointerWrapper*/ /*1C*/ int (__thiscall *SetFilePointerWrapper)(struct CRealCoreDrive *this, HANDLE hFile, int lDistanceToMove, int distanceHighDwordUnused, int moveMethod, int unkunused1, int unkunused2); /**probably CRealCoreDrive::GetFileSizeWrapper*/ /*20*/ int (__thiscall *GetFileSizeWrapper)(struct CRealCoreDrive *this, HANDLE hFile, char *lpBuffer, int nNumberOfBytesToWrite); /**probably UnkStdCall1Arg (returns edx:eax 0)*/ /*24*/ int (__thiscall *UnkStdCall1ArgUnused)(struct CRealCoreDrive *this, int unkunused); /**probably CRealCoreDrive::DeleteFileAWrapper*/ /*28*/ int (__thiscall *DeleteFileAWrapper)(struct CRealCoreDrive *this, char *lpFileName); /**probably CRealCoreDrive::GetDiskFreeSpaceExAWrapper*/ /*2C*/ int (__thiscall *GetDiskFreeSpaceExAWrapper)(struct CRealCoreDrive *this); /*30*/ int (__thiscall *GetDriveNamePath)(struct CRealCoreDrive *this); /**unsure about parameters*/ /*34*/ void (__thiscall *field_34)(struct CRealCoreDrive *this); }; EXPECT_SIZE(struct CRealCoreDrive_vtable, 0x38);
struct

struct6F79AFesi

{ /*8 members, size 84h*/ /*0*/ struct struct6F79AFesi *nextLinkedStruct; /*4*/ int field_4; /*8*/ char _pad8[0x4]; /*C*/ int ptrField_C ; /*10*/ int field_10; /*14*/ char _pad14[0x8]; /*1C*/ int field_1C; /*20*/ char _pad20[0x8]; /*28*/ struct CriticalSectionWrapper criticalSectionWrapper_28; /*30*/ char _pad30[0x14]; /*44*/ struct EventWrapper eventWrapper_44; /*4C*/ char _pad4C[0x34]; /*80*/ struct CRealCoreDrive *_realCoreDrive; }; EXPECT_SIZE(struct struct6F79AFesi, 0x84);
struct

struct6F7195

{ /*10 members, size 80h*/ /**is this the same struct as struct6F79AFesi?*/ /*0*/ char field_0; /*1*/ char _pad1[0x3]; /*4*/ char someNumber ; /*5*/ char _pad5[0x3]; /**see 6F724E*/ /*8*/ int stopLoadingFileLoop? ; /*C*/ int field_C; /*10*/ struct struct8AD610_base struct8AD610_base; /*1C*/ char someinlinestructusedasthis? ; /*1D*/ char _pad1D[0xB]; /*28*/ struct CriticalSectionWrapper criticalSectionWrapper_28; /*30*/ char _pad30[0x14]; /**the (language) file is read while WaitForSingleObject on this one*/ /*44*/ struct CriticalSectionWrapper criticalSectionWrapper_fileReadLock; /*4C*/ char _pad4C[0x2C]; /**could this be part of EventWrapper?*/ /*78*/ int hEvent ; /*7C*/ int field_7C; }; EXPECT_SIZE(struct struct6F7195, 0x80);
struct

struct6F7195_8AD610_ptr0

{ /*16 members, size 34h*/ /**probably 7C2F64*/ /*0*/ int vtable ; /*4*/ int field_4; /*8*/ int field_8; /*C*/ struct struct6F7195_8AD610_ptr0_ptrC *ptrField_C; /*10*/ char field_10; /*11*/ char field_11; /*12*/ char field_12; /*13*/ char field_13; /**a value returned from sub 6F79AF*/ /*14*/ struct struct8AD610LinkedListNode *probablyPtrStruct8AD610LinkedListNode; /*18*/ int field_18; /**can be sub 57B800*/ /*1C*/ int ptrFunc ; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ int ptrFilepath ; }; EXPECT_SIZE(struct struct6F7195_8AD610_ptr0, 0x34);
struct

struct6F7195_8AD610_ptr0_vtable

{ /*4 members, size 10h*/ /*0*/ int (__thiscall *field_0)(struct struct6F7195_8AD610_ptr0 *this, int); /**probably sub 6F8680*/ /*4*/ int (__thiscall *ptrFuncSomethingOpensFileHandle)(struct struct6F7195_8AD610_ptr0 *this, struct struct6F7195 *struct6F7195); /*8*/ int (__thiscall *field_8)(struct struct6F7195_8AD610_ptr0 *this); /*C*/ int (__thiscall *field_C)(struct struct6F7195_8AD610_ptr0 *this, int); }; EXPECT_SIZE(struct struct6F7195_8AD610_ptr0_vtable, 0x10);
struct

struct6F7195_8AD610_ptr0_ptrC

{ /*10 members, size 28h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int ptrField8 ; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /**this number is used as index for sub 6F6C47 to get a structure of type struct6F79AFesi*/ /*20*/ int indexForStruct6F79AFesi ; /*24*/ int field_24; }; EXPECT_SIZE(struct struct6F7195_8AD610_ptr0_ptrC, 0x28);
struct

struct8AD610_base

{ /*3 members, size Ch*/ /*0*/ int ptrField_0 ; /*4*/ int ptrField_4 ; /*8*/ int someCounter_8 ; }; EXPECT_SIZE(struct struct8AD610_base, 0xC);
struct

struct8AD610

{ /*12 members, size 9Ch*/ /*0*/ struct struct8AD610_base __parent; /*C*/ struct CriticalSectionWrapper criticalSectionWrapper_C; /*14*/ char _pad14[0x14]; /*28*/ struct struct8AD610LinkedList someList; /*34*/ struct CriticalSectionWrapper criticalSectionWrapper_34; /*3C*/ char _pad3C[0x14]; /*50*/ int someCounter_50 ; /*54*/ struct CriticalSectionWrapper criticalSectionWrapper_54; /*5C*/ char _pad5C[0x20]; /*7C*/ struct struct6F79AFesi *ptrStruct6F79AFesi_7C; /*80*/ char _pad80[0x8]; /*88*/ char *pathPointers; /*8C*/ int field_8C; /*90*/ int field_90; /*94*/ int field_94; /*98*/ struct struct6F79AFesi *ptrStruct6F79AFesi_98; }; EXPECT_SIZE(struct struct8AD610, 0x9C);
struct

struct8AD610LinkedListNode

{ /*8 members, size 20h*/ /*0*/ struct struct8AD610LinkedListNode *next; /**most likely a value that is used with different kinds of filesystems, when real filesystem (CreateFileA etc), this will awlays be a ptr to this own struct*/ /*4*/ int field_4; /**HANDLE*/ /*8*/ HANDLE filehandle; /*C*/ struct struct6F79AFesi *_struct6F79AFesi; /*10*/ int filesizeLo ; /*14*/ int filesizeHi ; /*18*/ int field_18; /*1C*/ int field_1C; }; EXPECT_SIZE(struct struct8AD610LinkedListNode, 0x20);
struct

struct8AD610LinkedList

{ /*3 members, size Ch*/ /*0*/ struct struct8AD610LinkedListNode *first; /*4*/ struct struct8AD610LinkedListNode *last; /*8*/ int count ; }; EXPECT_SIZE(struct struct8AD610LinkedList, 0xC);
struct

LinkedListNode

{ /*3 members, size Ch*/ /*0*/ struct LinkedListNode *next; /*4*/ int dunno?? ; /*8*/ int valuemaybe? ; }; EXPECT_SIZE(struct LinkedListNode, 0xC);
struct

LinkedList

{ /*3 members, size Ch*/ /*0*/ int first ; /*4*/ int last ; /*8*/ int count ; }; EXPECT_SIZE(struct LinkedList, 0xC);
struct

CriticalSectionWrapper

{ /*2 members, size 8h*/ /*0*/ int field_0; /*4*/ CRITICAL_SECTION *lpCriticalSection; }; EXPECT_SIZE(struct CriticalSectionWrapper, 0x8);
struct

EventWrapper

{ /*2 members, size 8h*/ /*0*/ int field_0; /*4*/ HANDLE hEvent; }; EXPECT_SIZE(struct EventWrapper, 0x8);
struct

struct8AD2B8

{ /*5 members, size 14h*/ /**arguments/retval unknown*/ /*0*/ void (__cdecl *ptrFunction)(); /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; }; EXPECT_SIZE(struct struct8AD2B8, 0x14);
struct

BinSectionLoadFunc

{ /*1 members, size 4h*/ /*0*/ int (__cdecl *func)(struct BinSection *binsection); }; EXPECT_SIZE(struct BinSectionLoadFunc, 0x4);
struct

BinSectionUnloadFunc

{ /*1 members, size 4h*/ /*0*/ int (__cdecl *func)(struct BinSection *binsection); }; EXPECT_SIZE(struct BinSectionUnloadFunc, 0x4);
struct

BinSectionHandler

{ /*3 members, size Ch*/ /*0*/ unsigned int magic; /*4*/ int (__cdecl *loadfunc)(struct BinSection *); /*8*/ int (__cdecl *unloadfunc)(struct BinSection *); }; EXPECT_SIZE(struct BinSectionHandler, 0xC);
struct

BinSectionMagicMapEntry

{ /*2 members, size 10h*/ /*0*/ struct BinSectionHandler *nextEntry; /*4*/ struct BinSectionHandler value; }; EXPECT_SIZE(struct BinSectionMagicMapEntry, 0x10);

unsure about complete size? make sure to undefine fields in ProfileData before expanding!!

struct

OL850080

{ /*31 members, size 58h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /**set to 0 when socket is created*/ /*18*/ char field_18; /*19*/ char field_19; /*1A*/ char field_1A; /*1B*/ char field_1B; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ char field_28; /*29*/ char field_29; /*2A*/ char field_2A; /*2B*/ char field_2B; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ int field_38; /*3C*/ int field_3C; /*40*/ int field_40; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ char field_4C; /*4D*/ char field_4D; /*4E*/ char field_4E; /*4F*/ char field_4F; /*50*/ int field_50; /*54*/ int field_54; }; EXPECT_SIZE(struct OL850080, 0x58);
struct

OL86A858

{ /*3 members, size 51Ch*/ /*0*/ int field_0; /*4*/ char _pad4[0x18]; /*1C*/ int field_1C; /*20*/ char _pad20[0x4F8]; /*518*/ int field_518; }; EXPECT_SIZE(struct OL86A858, 0x51C);
struct

OLMainStruct

{ /*16 members, size 1Ch*/ /*0*/ int openDialogId ; /*4*/ char field_4; /*5*/ char field_5; /*6*/ char field_6; /*7*/ char field_7; /**which child fngobject is it though*/ /*8*/ int fngObject ; /*C*/ char field_C; /**set to 1 when showing 'connecting to srv/lobby' msg*/ /*D*/ char field_D; /*E*/ char field_E; /*F*/ char field_F; /*10*/ char field_10; /*11*/ char field_11; /*12*/ char field_12; /*13*/ char field_13; /*14*/ int field_14; /*18*/ int field_18; }; EXPECT_SIZE(struct OLMainStruct, 0x1C);
struct

OL836370

{ /*11 members, size 154h*/ /**most likely 7977F0, 1 extry with free call?*/ /*0*/ int vtable ; /**inited to 1*/ /*4*/ int field_4; /*8*/ char _pad8[0x130]; /**link of struct OL138*/ /*138*/ struct ObjectLink someLink; /**initialized to UI_OLISPConnect.fng*/ /*140*/ struct OL138 *currentOL138?; /*144*/ int field_144; /**some fngname?*/ /*148*/ char *field_148; /*14C*/ int field_14C; /*150*/ char field_150; /*151*/ char field_151; /*152*/ char field_152; /*153*/ char field_153; }; EXPECT_SIZE(struct OL836370, 0x154);
struct

OL138

{ /*4 members, size 14h*/ /*0*/ struct ObjectLink __parent; /*8*/ char *fngName; /**TODO*/ /*C*/ char *(__cdecl *continueProc?)(); /**TODO*/ /*10*/ char *(__cdecl *cancelProc?)(); }; EXPECT_SIZE(struct OL138, 0x14);
struct

TextboxData

{ /*11 members, size 218h*/ /*0*/ char placeholderText?[256] ; /*100*/ char currentText[256] ; /*200*/ int currentTextLength ; /**see enum TEXTBOXTYPE*/ /*204*/ enum TEXTBOXTYPE type; /*208*/ int field_208; /*20C*/ int maxLength ; /*210*/ char isTextboxFocused ; /*211*/ char field_211; /*212*/ char field_212; /*213*/ char field_213; /*214*/ int focusedTextbox ; }; EXPECT_SIZE(struct TextboxData, 0x218);
struct

FocusedTextbox

{ /*3 members, size Ch*/ /*0*/ struct UILabel *uiLabel; /*4*/ struct FNGObject *fngObject; /**goes to 90, display | when less than 45*/ /*8*/ int timerForCaretAnimation ; }; EXPECT_SIZE(struct FocusedTextbox, 0xC);
struct

UIMessage

{ /*7 members, size 20h*/ /**one func (destructor)*/ /*0*/ int vtable ; /*4*/ struct ObjectLink link; /**ui element this message is meant to be sent to, matches an element's struct UIElement.field_C*/ /*C*/ int targetUIElement ; /*10*/ int field_10; /**fng this message originates from*/ /*14*/ struct FNGInfo *fngInfo; /*18*/ unsigned int theMessage; /*1C*/ int field_1C; }; EXPECT_SIZE(struct UIMessage, 0x20);
struct

PCHelpBarButton

{ /*77 members, size 120h*/ /**1 func (destructor)*/ /*0*/ int vtable ; /*4*/ struct ObjectLink siblingLink; /*C*/ char isCursorHovering ; /*D*/ char field_D; /*E*/ char field_E; /*F*/ char field_F; /*10*/ struct UILabel *buttonLabelElement; /*14*/ struct UIElementType1 *buttonBgElement; /*18*/ char shouldShow ; /*19*/ char field_19; /*1A*/ char field_1A; /*1B*/ char field_1B; /**from enum PCHELPBARFLAGS*/ /*1C*/ enum PCHELPBARFLAGS buttonFlag; /*20*/ int animationStringUnkLength ; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ int field_38; /*3C*/ int field_3C; /*40*/ int field_40; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ int field_4C; /*50*/ int field_50; /*54*/ int field_54; /*58*/ int field_58; /*5C*/ int field_5C; /**animation to apply when cursor hovers button*/ /*60*/ unsigned int cursorHoverAnimationHash; /*64*/ int field_64; /*68*/ int field_68; /*6C*/ int field_6C; /*70*/ int field_70; /*74*/ int field_74; /*78*/ int field_78; /*7C*/ int field_7C; /*80*/ int field_80; /*84*/ int field_84; /*88*/ int field_88; /*8C*/ int field_8C; /*90*/ int field_90; /*94*/ int field_94; /*98*/ int field_98; /*9C*/ int field_9C; /*A0*/ int field_A0; /*A4*/ int field_A4; /*A8*/ int field_A8; /*AC*/ int field_AC; /*B0*/ int field_B0; /*B4*/ int field_B4; /*B8*/ int field_B8; /*BC*/ int field_BC; /*C0*/ int field_C0; /*C4*/ int field_C4; /*C8*/ int field_C8; /*CC*/ int field_CC; /*D0*/ int field_D0; /*D4*/ int field_D4; /*D8*/ int field_D8; /*DC*/ int field_DC; /*E0*/ int field_E0; /*E4*/ int field_E4; /*E8*/ int field_E8; /*EC*/ int field_EC; /*F0*/ int field_F0; /*F4*/ int field_F4; /*F8*/ int field_F8; /*FC*/ int field_FC; /*100*/ int field_100; /*104*/ int field_104; /*108*/ int field_108; /*10C*/ int field_10C; /*110*/ int field_110; /*114*/ int field_114; /*118*/ int field_118; /*11C*/ int field_11C; }; EXPECT_SIZE(struct PCHelpBarButton, 0x120);
struct

FNGObject$vtable

{ /*4 members, size 10h*/ /*0*/ int dtor ; /*4*/ int field_4; /*8*/ int (__thiscall *procMessageHandler)(struct FNGObject *this, unsigned int message, int, int, struct FNGInfo *fngInfo); /*C*/ int field_C; }; EXPECT_SIZE(struct FNGObject$vtable, 0x10);
struct

FNGObject

{ /*24 members, size 4Ch*/ /*0*/ struct FNGObject$vtable *vtable; /*4*/ int fngName ; /*8*/ char field_8; /*9*/ char field_9; /*A*/ char field_A; /*B*/ char field_B; /*C*/ struct FocusedTextbox *focusedTextbox; /**something textbox related, 0-1-2-3*/ /*10*/ char field_10; /*11*/ char field_11; /*12*/ char field_12; /*13*/ char field_13; /*14*/ struct FNGShowData fngShowData; /**set to FNGData_field8 on fngobject init*/ /*28*/ int fngdata_field8 ; /*2C*/ char field_2C; /*2D*/ char field_2D; /*2E*/ char field_2E; /*2F*/ char field_2F; /**initialized to 9 (for BaseMenuFNGObject)*/ /*30*/ int numberField_30 ; /**pchelpbar: player name ui label*/ /*34*/ struct UIElement *uiElement_34; /**pchelpbar: money ui label*/ /*38*/ struct UIElement *uiElement_38; /*3C*/ struct UIElement *uiElement_3C; /*40*/ int floatField_40; /*44*/ int floatField_44; /**maybe an ui element?*/ /*48*/ int field_48; }; EXPECT_SIZE(struct FNGObject, 0x4C);
struct

OptionsPCControllerFNGObject

{ /*42 members, size 15Ch*/ /*0*/ struct FNGObject __parent; /**links struct ControllerOptionsRelated (+4)*/ /*4C*/ struct ObjectLink controllerOptionsRelatedLinkTitles; /**links struct ControllerOptionsRelated (+4)*/ /*54*/ struct ObjectLink controllerOptionsRelatedLinkPrimary; /**links struct ControllerOptionsRelated (+4)*/ /*5C*/ struct ObjectLink controllerOptionsRelatedLinkSecondary; /*64*/ struct ControllerOptionsRelated *focusedControl; /*68*/ struct ControllerOptionsRelated *controllerOptionsRelated68; /*6C*/ struct UIElement *uielement_TITLE_MASTER; /*70*/ struct UIElement *uielement_DATA_MASTER; /*74*/ struct UIElement *uielement_DATA_MASTER2; /*78*/ int field_78; /*7C*/ int uielement_DONE_BUTTON ; /*80*/ struct ScrollingThing scrollingThing; /*D8*/ struct UILabel *uilabel_Instructions_Label; /*DC*/ struct UIElementType1 *uielement_ControllerSelectionArrowLeft; /*E0*/ struct UIElementType1 *uielement_ControllerSelectionArrowRight; /**4E11CF90h*/ /*E4*/ struct UILabel *uilabel_keyboardconfig; /**OPTION_NAME_*/ /*E8*/ char *strField_E8; /**OPTION_DATA_*/ /*EC*/ char *strField_EC; /**OPTION_DATA2_*/ /*F0*/ char *strField_F0; /**position of uielement_TITLE_MASTER*/ /*F4*/ struct vec2 titleMasterPos; /**initialized to value of titleMasterPos*/ /*FC*/ struct vec2 titleMasterPosCopy; /*104*/ int dataMasterSizeXCopy ; /*108*/ int titleMasterSizeYCopy ; /*10C*/ struct vec2 titleMasterSize; /**used together with the field below (as x;y or with 2 more fields as x;y;w;h?)*/ /*114*/ struct vec2 dataMasterSize; /*11C*/ struct vec2 dataMasterPos; /*124*/ struct vec2 dataMaster2Pos; /*12C*/ float floatField_12C; /*130*/ int floatField_130; /**incremented every time OptionsPCControllerFNGObject::AddOptionRow is called*/ /*134*/ int currentOptionIndex ; /*138*/ int field_138; /**7*/ /*13C*/ int rowsPerPage ; /*140*/ unsigned int hash140; /*144*/ int field_144; /*148*/ int field_148; /*14C*/ char field_14C; /*14D*/ char field_14D; /*14E*/ char field_14E; /*14F*/ char waitingForReassignmentKeyInput ; /**set when about to set waitingForReassignmentKeyInput to 1*/ /*150*/ char field_150; /*151*/ char _pad151[0x3]; /**num controllers where result of ControllerStruct874C40::5B8720 is 3*/ /*154*/ int numControllerConfigurations3 ; /*158*/ int numControllerConfigurations ; }; EXPECT_SIZE(struct OptionsPCControllerFNGObject, 0x15C);
struct

BuyPerformancePartsFNGObject

{ /*2 members, size 1E8h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x19B]; /*1E7*/ char __end ; }; EXPECT_SIZE(struct BuyPerformancePartsFNGObject, 0x1E8);
struct

CareerCarLotFNGObject

{ /*27 members, size 1C0h*/ /*0*/ struct FNGObject __parent; /*4C*/ int field_4C; /**entries are struct CarSelectCarEntry (link offset 10h)*/ /*50*/ struct ObjectLink selectableCars; /**this is an entry that is in selectableCars*/ /*58*/ struct CarSelectCarEntry *currentSelectedCar; /*5C*/ int field_5C; /*60*/ unsigned int currentActiveSlotHash?; /*64*/ int field_64; /*68*/ int field_68; /*6C*/ int field_6C; /*70*/ int field_70; /*74*/ int numUnlockedAndFreeInventorySlots; /*78*/ int numUnlockedInventorySlots; /*7C*/ int field_7C; /*80*/ int numSelectableCars; /*84*/ int field_84; /*88*/ struct ScrollingThing scrollingThing; /*E0*/ int field_E0; /*E4*/ struct UIElementType1 *manufacturerLogoUIElement; /*E8*/ struct UIElementType1 *carBadgeUIElement; /**1 or 2*/ /*EC*/ int browsingPlayer ; /*F0*/ struct UIProgressBar accelerationIndicator; /*134*/ struct UIProgressBar topSpeedIndicator; /*178*/ struct UIProgressBar handlingIndicator; /*1BC*/ char field_1BC; /*1BD*/ char field_1BD; /*1BE*/ char field_1BE; /*1BF*/ char __end ; }; EXPECT_SIZE(struct CareerCarLotFNGObject, 0x1C0);
struct

CarSelectCarEntry

{ /*16 members, size 930h*/ /**just a dtor*/ /*0*/ int vtable ; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ struct ObjectLink link; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ struct MenuCarInstance carInstance; /**1 or 2*/ /*910*/ unsigned int playerId; /**just a guess*/ /*914*/ char needApplyTuningToCarInstance; /*915*/ char _pad915[0x3]; /*918*/ struct Car *car; /*91C*/ int field_91C; /**gets its value from struct InventoryCar.slotHash*/ /*920*/ unsigned int slotHash; /*924*/ int field_924; /*928*/ int field_928; /*92C*/ char _pad92C[0x3]; /*92F*/ char __end ; }; EXPECT_SIZE(struct CarSelectCarEntry, 0x930);
struct

s734

{ /*10 members, size E8h*/ /**initialized to -1*/ /*0*/ int field_0; /**initialized to 1*/ /*4*/ int field_4; /*8*/ struct MenuCarInstance_10_2E0 *field_8; /**&struct MenuCarInstance_10.field_30*/ /*C*/ void *field_C; /*10*/ int field_10; /**gonna take a leap and assume this is this struct. it looks the same & is initialized the same.*/ /*14*/ struct TunedCar360 field_14; /*3D*/ char _pad3D[0x3]; /*40*/ char field_40[92]; /*9C*/ char field_9C[36]; /*C0*/ char field_C0[36]; /*E4*/ int field_E4; }; EXPECT_SIZE(struct s734, 0xE8);
struct

s735_100

{ /*5 members, size 14h*/ /*0*/ int field_0; /*4*/ float floatField_4; /*8*/ float floatField_8; /**s735::CopyFrom sets this to (floatField_8-floatField_4)/63 (63 is amount of elements in struct s735.floatField_0*/ /*C*/ float floatField_C; /*10*/ struct s735 *owner_s735; }; EXPECT_SIZE(struct s735_100, 0x14);
struct

s735

{ /*3 members, size 114h*/ /*0*/ float floatField_0[63]; /*FC*/ float floatField_FC; /*100*/ struct s735_100 field_100; }; EXPECT_SIZE(struct s735, 0x114);
struct

MenuCarInstance

{ /*16 members, size 8F0h*/ /*0*/ int carIndex; /*4*/ char field_4; /*5*/ char field_5; /*6*/ char field_6; /*7*/ char field_7; /*8*/ char _pad8[0x8]; /*10*/ struct MenuCarInstance_10 field_10; /*580*/ char field_580; /*581*/ char field_581; /*582*/ char _pad582[0x2]; /**if struct Car.field_88C was not 0, this is set to hash of DUMMY_SKIN%d where %d is something*/ /*584*/ unsigned int someDummySkinHash; /**set to hash of DUMMY_WHEEL%d at some point*/ /*588*/ unsigned int someWheelHash; /**set to hash of DUMMY_SPINNER%d at some point*/ /*58C*/ unsigned int someSpinnerHash; /*590*/ void *field_590[170]; /**all initialized to 1*/ /*838*/ char field_838[170]; /*8E2*/ char _pad8E2[0x2]; /*8E4*/ int field_8E4; /*8E8*/ int field_8E8; /*8EC*/ int field_8EC; }; EXPECT_SIZE(struct MenuCarInstance, 0x8F0);

partSlots802DE8 and partSlots803338

struct

s483

{ /*2 members, size 8h*/ /**just seems like an index*/ /*0*/ int value; /*4*/ char *name; }; EXPECT_SIZE(struct s483, 0x8);
struct

MenuCarInstance_10

{ /*18 members, size 570h*/ /*0*/ int field_0; /*4*/ char field_4; /*5*/ char _pad5[0x3]; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ char _pad24[0xC]; /*30*/ int field_30; /*34*/ char _pad34[0x10C]; /*140*/ int field_140; /*144*/ int field_144; /*148*/ int field_148; /*14C*/ int field_14C; /*150*/ char _pad150[0x40]; /*190*/ int field_190; /*194*/ char _pad194[0x14C]; /*2E0*/ struct MenuCarInstance_10_2E0 field_2E0; /*374*/ struct s734 field_374; /*45C*/ struct s735 field_45C; }; EXPECT_SIZE(struct MenuCarInstance_10, 0x570);
struct

MenuCarInstance_10_2E0

{ /*3 members, size 94h*/ /*0*/ char field_0[40]; /*28*/ char field_28[40]; /*50*/ char field_50[68]; }; EXPECT_SIZE(struct MenuCarInstance_10_2E0, 0x94);

allocated at 513CF8 in Career::GetAvailableStockCars, used & free'd in CareerCarLotFNGObject::InitializeBrowsableCars

struct

Tmp4DF9C0ListEntry

{ /*2 members, size Ch*/ /*0*/ struct ObjectLink link; /*8*/ int carIndex; }; EXPECT_SIZE(struct Tmp4DF9C0ListEntry, 0xC);
struct

UIProgressBar$vtable

{ /*9 members, size 24h*/ /*0*/ int field_0; /**UIProgressBar::4FF480*/ /*4*/ int field_4; /**UIProgressBar::InitializeElements*/ /*8*/ void (__thiscall *procInitializeElements)(struct UIProgressBar *this, struct UIProgressBarInitializeElementsConfig *config, char toBePutInField4); /**UIProgressBar::ShowOrHideElements*/ /*C*/ void (__thiscall *procHideOrShowElements)(struct UIProgressBar *this, char doShow); /**UIProgressBar::526D90*/ /*10*/ int field_10; /**UIProgressBar::526F80*/ /*14*/ int field_14; /**UIProgressBar::UpdateUI*/ /*18*/ int procUpdateUI ; /**UIProgressBar::UpdateUIVertical*/ /*1C*/ int procUpdateUIVertical ; /**UIProgressBar::UpdateUIHorizontal*/ /*20*/ int procUpdateUIHorizontal ; }; EXPECT_SIZE(struct UIProgressBar$vtable, 0x24);
struct

UIProgressBarInitializeElementsConfig

{ /*12 members, size 30h*/ /*0*/ char *parentFngName; /*4*/ int backingName ; /*8*/ int handleName ; /*C*/ int valueName ; /*10*/ int currName ; /*14*/ int endCapName ; /*18*/ int endName ; /*1C*/ int field_1C; /*20*/ int floatField_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int floatField_2C; }; EXPECT_SIZE(struct UIProgressBarInitializeElementsConfig, 0x30);
struct

UIProgressBar

{ /*17 members, size 44h*/ /**78F544*/ /*0*/ struct UIProgressBar$vtable *vtable; /**can be handled as an int because of padding (probably)*/ /*4*/ char isVertical; /*5*/ char _pad5[0x3]; /*8*/ int parentFngName ; /**like top_speed_backing*/ /*C*/ struct UIElement *backingUIElement; /**like top_speed_handle*/ /*10*/ struct UIElement *handleUIElement; /**like top_speed_value, an element that will show a number (text)*/ /*14*/ struct UIElement *valueUIElement; /**like top_speed_curr*/ /*18*/ struct UIElement *currUIElement; /**like top_speed_end_cap*/ /*1C*/ struct UIElement *endCapUIElement; /**like top_speed_end*/ /*20*/ struct UIElement *endUIElement; /*24*/ float floatField_24; /*28*/ float floatField_28; /*2C*/ int field_2C; /*30*/ float floatField_30; /*34*/ float floatField_34; /*38*/ int field_38; /*3C*/ float floatField_3C; /**initialized to 46.0*/ /*40*/ float floatField_40; }; EXPECT_SIZE(struct UIProgressBar, 0x44);
struct

CareerCarSelectFNGObject

{ /*2 members, size 1B0h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x163]; /*1AF*/ char __end ; }; EXPECT_SIZE(struct CareerCarSelectFNGObject, 0x1B0);
struct

CareerCribFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct CareerCribFNGObject, 0x150);
struct

CareerWorldMapFNGObject

{ /*2 members, size 230h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x1E3]; /*22F*/ char __end ; }; EXPECT_SIZE(struct CareerWorldMapFNGObject, 0x230);
struct

ChooseCustomHUDFNGObject

{ /*2 members, size B4h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x67]; /*B3*/ char __end ; }; EXPECT_SIZE(struct ChooseCustomHUDFNGObject, 0xB4);
struct

ChooseCustomizeCategoryFNGObject

{ /*2 members, size 170h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x123]; /*16F*/ char __end ; }; EXPECT_SIZE(struct ChooseCustomizeCategoryFNGObject, 0x170);
struct

ChoosePaintCategoryFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct ChoosePaintCategoryFNGObject, 0x150);
struct

ChoosePerformanceCategoryFNGObject

{ /*2 members, size 154h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x107]; /*153*/ char __end ; }; EXPECT_SIZE(struct ChoosePerformanceCategoryFNGObject, 0x154);
struct

ChooseRimBrandFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct ChooseRimBrandFNGObject, 0x150);
struct

ChooseSpinnerFNGObject

{ /*2 members, size 218h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x1CB]; /*217*/ char __end ; }; EXPECT_SIZE(struct ChooseSpinnerFNGObject, 0x218);

unknown size

struct

ChooseUniquePartFNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct ChooseUniquePartFNGObject, 0x4C);
struct

ChooseVinylLayerFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct ChooseVinylLayerFNGObject, 0x150);
struct

CreditsFNGObject

{ /*2 members, size 68h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x1B]; /*67*/ char __end ; }; EXPECT_SIZE(struct CreditsFNGObject, 0x68);
struct

CribRewardOptionsMainFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct CribRewardOptionsMainFNGObject, 0x150);
struct

CustomHUDOverlayFNGObject

{ /*2 members, size 12Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xDF]; /*12B*/ char __end ; }; EXPECT_SIZE(struct CustomHUDOverlayFNGObject, 0x12C);
struct

CustomNeonMainFNGObject

{ /*2 members, size 164h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x117]; /*163*/ char __end ; }; EXPECT_SIZE(struct CustomNeonMainFNGObject, 0x164);
struct

DateEntryFNGObject

{ /*2 members, size 90h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x43]; /*8F*/ char __end ; }; EXPECT_SIZE(struct DateEntryFNGObject, 0x90);
struct

DebugCarCustomizeFNGObject

{ /*2 members, size 88h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3B]; /*87*/ char __end ; }; EXPECT_SIZE(struct DebugCarCustomizeFNGObject, 0x88);
struct

DecalMainFNGObject

{ /*2 members, size 178h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x12B]; /*177*/ char __end ; }; EXPECT_SIZE(struct DecalMainFNGObject, 0x178);
struct

DecalsOverlayFNGObject

{ /*2 members, size 11Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xCF]; /*11B*/ char __end ; }; EXPECT_SIZE(struct DecalsOverlayFNGObject, 0x11C);
struct

DeleteprofileFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct DeleteprofileFNGObject, 0x150);
struct

DemoLegalFNGObject

{ /*2 members, size 54h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x7]; /*53*/ char __end ; }; EXPECT_SIZE(struct DemoLegalFNGObject, 0x54);
struct

DemoPSAFNGObject

{ /*2 members, size 50h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3]; /*4F*/ char __end ; }; EXPECT_SIZE(struct DemoPSAFNGObject, 0x50);
struct

DiscErrorPCFngObject

{ /*2 members, size 50h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3]; /*4F*/ char __end ; }; EXPECT_SIZE(struct DiscErrorPCFngObject, 0x50);
struct

EATraxJukeboxFNGObject

{ /*2 members, size 128h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xDB]; /*127*/ char __end ; }; EXPECT_SIZE(struct EATraxJukeboxFNGObject, 0x128);
struct

EngageEventDialogFNGObject

{ /*2 members, size 58h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xB]; /*57*/ char __end ; }; EXPECT_SIZE(struct EngageEventDialogFNGObject, 0x58);
struct

EngageRaceDialogFNGObject

{ /*2 members, size 5Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xF]; /*5B*/ char __end ; }; EXPECT_SIZE(struct EngageRaceDialogFNGObject, 0x5C);
struct

GenericPartsBrowserFNGObject

{ /*2 members, size 1E4h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x197]; /*1E3*/ char __end ; }; EXPECT_SIZE(struct GenericPartsBrowserFNGObject, 0x1E4);
struct

ICEMAINFNGObject

{ /*2 members, size 16Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x11F]; /*16B*/ char __end ; }; EXPECT_SIZE(struct ICEMAINFNGObject, 0x16C);
struct

IGPlayMovieFNGObject

{ /*2 members, size 68h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x1B]; /*67*/ char __end ; }; EXPECT_SIZE(struct IGPlayMovieFNGObject, 0x68);
struct

InGameWorldMapFNGObject

{ /*2 members, size 64h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x17]; /*63*/ char __end ; }; EXPECT_SIZE(struct InGameWorldMapFNGObject, 0x64);
struct

EngageShopDialogFNGObject

{ /*2 members, size 58h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xB]; /*57*/ char __end ; }; EXPECT_SIZE(struct EngageShopDialogFNGObject, 0x58);
struct

GarageMainFNGObject

{ /*134 members, size 280h*/ /*0*/ struct FNGObject __parent; /*4C*/ int field_4C; /*50*/ int field_50; /*54*/ int field_54; /*58*/ int field_58; /*5C*/ int field_5C; /*60*/ int field_60; /*64*/ int field_64; /*68*/ int field_68; /*6C*/ int field_6C; /*70*/ int field_70; /*74*/ int field_74; /*78*/ int field_78; /*7C*/ int field_7C; /*80*/ int field_80; /*84*/ int field_84; /*88*/ int field_88; /*8C*/ int field_8C; /*90*/ int field_90; /*94*/ int field_94; /*98*/ int field_98; /*9C*/ int field_9C; /*A0*/ int field_A0; /*A4*/ int field_A4; /*A8*/ int field_A8; /*AC*/ int field_AC; /*B0*/ int field_B0; /*B4*/ int field_B4; /*B8*/ int field_B8; /*BC*/ int field_BC; /*C0*/ int field_C0; /*C4*/ int field_C4; /*C8*/ int field_C8; /*CC*/ int field_CC; /*D0*/ int field_D0; /*D4*/ int field_D4; /*D8*/ int field_D8; /*DC*/ int field_DC; /*E0*/ int field_E0; /*E4*/ int field_E4; /*E8*/ int field_E8; /*EC*/ int field_EC; /*F0*/ int field_F0; /*F4*/ int field_F4; /*F8*/ int field_F8; /*FC*/ int field_FC; /*100*/ int field_100; /*104*/ int field_104; /*108*/ int field_108; /*10C*/ int field_10C; /*110*/ int field_110; /*114*/ int field_114; /*118*/ int field_118; /*11C*/ int field_11C; /*120*/ int field_120; /*124*/ int field_124; /*128*/ int field_128; /*12C*/ int field_12C; /*130*/ int field_130; /*134*/ int field_134; /*138*/ char field_138; /*139*/ char _pad139[0x3]; /*13C*/ int field_13C; /*140*/ int field_140; /*144*/ int field_144; /*148*/ int field_148; /*14C*/ int field_14C; /*150*/ int field_150; /*154*/ int field_154; /*158*/ int field_158; /*15C*/ int field_15C; /*160*/ char field_160; /*161*/ char field_161; /*162*/ char field_162; /*163*/ char field_163; /*164*/ char field_164; /*165*/ char field_165; /*166*/ char field_166; /*167*/ char field_167; /*168*/ int field_168; /*16C*/ char field_16C; /*16D*/ char field_16D; /*16E*/ char _pad16E[0x2]; /*170*/ int field_170; /*174*/ int field_174; /*178*/ float floatField_178; /*17C*/ int field_17C; /*180*/ int field_180; /*184*/ int field_184; /*188*/ int field_188; /*18C*/ int field_18C; /*190*/ int field_190; /*194*/ int field_194; /*198*/ int field_198; /*19C*/ int field_19C; /*1A0*/ int field_1A0; /*1A4*/ int field_1A4; /*1A8*/ int field_1A8; /*1AC*/ int field_1AC; /*1B0*/ int field_1B0; /*1B4*/ int uiLabelCarName ; /*1B8*/ int uiLabelPlayerName ; /*1BC*/ int uiLabelStyle ; /*1C0*/ int field_1C0; /*1C4*/ int field_1C4; /*1C8*/ int field_1C8; /*1CC*/ int field_1CC; /*1D0*/ int field_1D0; /*1D4*/ int field_1D4; /*1D8*/ struct GarageMainFNGObject_1D8 field_1D8; /*1F0*/ struct GarageMainFNGObject_1D8 field_1F0; /*208*/ struct GarageMainFNGObject_1D8 field_208; /*220*/ int field_220; /*224*/ int field_224; /*228*/ int field_228; /*22C*/ int field_22C; /*230*/ int field_230; /*234*/ struct GarageMainFNGObject_234 *field_234; /*238*/ int field_238; /*23C*/ int field_23C; /*240*/ int field_240; /*244*/ int field_244; /*248*/ int field_248; /*24C*/ int field_24C; /*250*/ int field_250; /*254*/ int field_254; /*258*/ int field_258; /*25C*/ int field_25C; /*260*/ int field_260; /*264*/ int field_264; /*268*/ int field_268; /*26C*/ int field_26C; /*270*/ int field_270; /*274*/ int field_274; /*278*/ int field_278; /*27C*/ char _pad27C[0x3]; /*27F*/ char __end ; }; EXPECT_SIZE(struct GarageMainFNGObject, 0x280);
struct

GarageMainFNGObject_234

{ /*16 members, size 2CF0h*/ /*0*/ int field_0; /*4*/ char _pad4[0xC]; /*10*/ struct MenuCarInstance field_10; /*900*/ struct MenuCarInstance field_900; /*11F0*/struct MenuCarInstance field_11F0; /*1AE0*/struct MenuCarInstance field_1AE0; /*23D0*/struct MenuCarInstance field_23D0; /*2CC0*/int field_2CC0; /*2CC4*/int field_2CC4; /*2CC8*/int field_2CC8; /*2CCC*/int field_2CCC; /*2CD0*/int field_2CD0; /*2CD4*/int field_2CD4; /*2CD8*/char field_2CD8; /*2CD9*/char _pad2CD9[0x3]; /*2CDC*/int field_2CDC; /*2CE0*/int field_2CE0; /*2CE4*/char _pad2CE4[0xB]; /*2CEF*/char __end ; }; EXPECT_SIZE(struct GarageMainFNGObject_234, 0x2CF0);
struct

GarageMainFNGObject_1D8

{ /*6 members, size 18h*/ /*0*/ char field_0; /*1*/ char _pad1[0x3]; /*4*/ float uiElement1x; /*8*/ struct UIElement *uiElement1; /*C*/ struct UIElement *uiElement2; /*10*/ float uiElement1width; /*14*/ int field_14; }; EXPECT_SIZE(struct GarageMainFNGObject_1D8, 0x18);
struct

LoadingTipsFNGObject

{ /*2 members, size 5Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xF]; /*5B*/ char __end ; }; EXPECT_SIZE(struct LoadingTipsFNGObject, 0x5C);
struct

LSDemoWarningFNGObject

{ /*2 members, size 50h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3]; /*4F*/ char __end ; }; EXPECT_SIZE(struct LSDemoWarningFNGObject, 0x50);
struct

LSEALogoFNGObject

{ /*2 members, size 50h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3]; /*4F*/ char __end ; }; EXPECT_SIZE(struct LSEALogoFNGObject, 0x50);
struct

LSIntroFMVFNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct LSIntroFMVFNGObject, 0x4C);
struct

LSPSAMovieFNGObject

{ /*2 members, size 60h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x13]; /*5F*/ char __end ; }; EXPECT_SIZE(struct LSPSAMovieFNGObject, 0x60);
struct

LSSplashFNGObject

{ /*2 members, size 54h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x7]; /*53*/ char __end ; }; EXPECT_SIZE(struct LSSplashFNGObject, 0x54);
struct

LSTHXMovieFNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct LSTHXMovieFNGObject, 0x4C);
struct

MagazineBackFNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct MagazineBackFNGObject, 0x4C);
struct

MagazineRewardFNGObject

{ /*2 members, size ACh*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x5F]; /*AB*/ char __end ; }; EXPECT_SIZE(struct MagazineRewardFNGObject, 0xAC);
struct

MagazineSelectFNGObject

{ /*2 members, size 158h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x10B]; /*157*/ char __end ; }; EXPECT_SIZE(struct MagazineSelectFNGObject, 0x158);
struct

MagazineViewFNGObject

{ /*2 members, size 54h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x7]; /*53*/ char __end ; }; EXPECT_SIZE(struct MagazineViewFNGObject, 0x54);
struct

MCListFNGObject

{ /*2 members, size 108h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xBB]; /*107*/ char __end ; }; EXPECT_SIZE(struct MCListFNGObject, 0x108);
struct

NeonPartsOverlayFNGObject

{ /*2 members, size 120h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xD3]; /*11F*/ char __end ; }; EXPECT_SIZE(struct NeonPartsOverlayFNGObject, 0x120);
struct

OLCarLotFNGObject

{ /*2 members, size 1BCh*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x16F]; /*1BB*/ char __end ; }; EXPECT_SIZE(struct OLCarLotFNGObject, 0x1BC);
struct

OLChallengeFNGObject

{ /*2 members, size 168h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x11B]; /*167*/ char __end ; }; EXPECT_SIZE(struct OLChallengeFNGObject, 0x168);
struct

OLCreateUserFNGObject

{ /*2 members, size 1A4h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x157]; /*1A3*/ char __end ; }; EXPECT_SIZE(struct OLCreateUserFNGObject, 0x1A4);
struct

OLDisconnectBGFNGObject

{ /*2 members, size 70h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x23]; /*6F*/ char __end ; }; EXPECT_SIZE(struct OLDisconnectBGFNGObject, 0x70);
struct

OLDisconnectFNGObject

{ /*2 members, size 5Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xF]; /*5B*/ char __end ; }; EXPECT_SIZE(struct OLDisconnectFNGObject, 0x5C);
struct

OLEALoginFNGObject

{ /*2 members, size 170h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x123]; /*16F*/ char __end ; }; EXPECT_SIZE(struct OLEALoginFNGObject, 0x170);
struct

WheelOptionsFNGObject

{ /*2 members, size 154h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x107]; /*153*/ char __end ; }; EXPECT_SIZE(struct WheelOptionsFNGObject, 0x154);
struct

VirtualKeyboardFNGObject

{ /*2 members, size 21Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x1CF]; /*21B*/ char __end ; }; EXPECT_SIZE(struct VirtualKeyboardFNGObject, 0x21C);
struct

TwoPPressStartFNGObject

{ /*4 members, size 50h*/ /*0*/ struct FNGObject __parent; /*4C*/ char field_4C; /*4D*/ char field_4D; /*4E*/ char _pad4E[0x1]; /*4F*/ char __end ; }; EXPECT_SIZE(struct TwoPPressStartFNGObject, 0x50);
struct

TrailersFNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct TrailersFNGObject, 0x4C);
struct

ShowcaseDPADFNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct ShowcaseDPADFNGObject, 0x4C);
struct

ChoosePerformancePackageFNGObject

{ /*66 members, size 250h*/ /*0*/ struct IconScrollerFNGObject __parent; /*150*/ char _pad150[0xC]; /*15C*/ int field_15C; /*160*/ char field_160; /*161*/ char field_161; /*162*/ char field_162; /*163*/ char field_163; /*164*/ int field_164; /*168*/ char field_168; /*169*/ char _pad169[0x3]; /*16C*/ int field_16C; /*170*/ int field_170; /*174*/ int field_174; /*178*/ int field_178; /*17C*/ int field_17C; /*180*/ int field_180; /*184*/ int field_184; /*188*/ int field_188; /*18C*/ int field_18C; /*190*/ int field_190; /*194*/ int field_194; /*198*/ int field_198; /*19C*/ int field_19C; /*1A0*/ int field_1A0; /*1A4*/ int field_1A4; /*1A8*/ int field_1A8; /*1AC*/ int field_1AC; /*1B0*/ int field_1B0; /*1B4*/ char field_1B4; /*1B5*/ char _pad1B5[0x3]; /*1B8*/ int field_1B8; /*1BC*/ int field_1BC; /*1C0*/ int field_1C0; /*1C4*/ int field_1C4; /*1C8*/ int field_1C8; /*1CC*/ int field_1CC; /*1D0*/ int field_1D0; /*1D4*/ int field_1D4; /*1D8*/ int field_1D8; /*1DC*/ int field_1DC; /*1E0*/ int field_1E0; /*1E4*/ int field_1E4; /*1E8*/ int field_1E8; /*1EC*/ int field_1EC; /*1F0*/ int field_1F0; /*1F4*/ int field_1F4; /*1F8*/ int field_1F8; /*1FC*/ int field_1FC; /*200*/ char field_200; /*201*/ char _pad201[0x3]; /*204*/ int field_204; /*208*/ int field_208; /*20C*/ int field_20C; /*210*/ int field_210; /*214*/ int field_214; /*218*/ int field_218; /*21C*/ int field_21C; /*220*/ int field_220; /*224*/ int field_224; /*228*/ int field_228; /*22C*/ int field_22C; /*230*/ int field_230; /*234*/ int field_234; /*238*/ int field_238; /*23C*/ int field_23C; /*240*/ int field_240; /*244*/ int field_244; /*248*/ int field_248; /*24C*/ char field_24C; /*24D*/ char _pad24D[0x2]; /*24F*/ char __end ; }; EXPECT_SIZE(struct ChoosePerformancePackageFNGObject, 0x250);
struct

DebugTestFNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct DebugTestFNGObject, 0x4C);
struct

DemoESRBFNGObject

{ /*2 members, size 50h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3]; /*4F*/ char __end ; }; EXPECT_SIZE(struct DemoESRBFNGObject, 0x50);
struct

MCBootupFNGObject

{ /*2 members, size 98h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x4B]; /*97*/ char __end ; }; EXPECT_SIZE(struct MCBootupFNGObject, 0x98);
struct

MCBackgroundFNGObject

{ /*2 members, size 50h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3]; /*4F*/ char __end ; }; EXPECT_SIZE(struct MCBackgroundFNGObject, 0x50);
struct

MCMainFNGObject

{ /*2 members, size 9Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x4F]; /*9B*/ char __end ; }; EXPECT_SIZE(struct MCMainFNGObject, 0x9C);
struct

OLAgeVerifFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct OLAgeVerifFNGObject, 0x150);
struct

OLCreateUser2FNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct OLCreateUser2FNGObject, 0x4C);
struct

OLEAMessengerFNGObject

{ /*2 members, size 1CCh*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x17F]; /*1CB*/ char __end ; }; EXPECT_SIZE(struct OLEAMessengerFNGObject, 0x1CC);
struct

OLFeedbackFNGObject

{ /*2 members, size 108h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xBB]; /*107*/ char __end ; }; EXPECT_SIZE(struct OLFeedbackFNGObject, 0x108);
struct

OLFiltersFNGObject

{ /*2 members, size 158h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x10B]; /*157*/ char __end ; }; EXPECT_SIZE(struct OLFiltersFNGObject, 0x158);
struct

OLForgotAccountNameFNGObject

{ /*2 members, size 190h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x143]; /*18F*/ char __end ; }; EXPECT_SIZE(struct OLForgotAccountNameFNGObject, 0x190);
struct

OLFriendDialogueFNGObject

{ /*2 members, size 118h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xCB]; /*117*/ char __end ; }; EXPECT_SIZE(struct OLFriendDialogueFNGObject, 0x118);
struct

OLGameRoomclientFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct OLGameRoomclientFNGObject, 0x150);
struct

OLGameRoomhostFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct OLGameRoomhostFNGObject, 0x150);
struct

OLISPConnectFNGObject

{ /*2 members, size 58h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xB]; /*57*/ char __end ; }; EXPECT_SIZE(struct OLISPConnectFNGObject, 0x58);
struct

OLMAINFNGObject

{ /*2 members, size 170h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x123]; /*16F*/ char __end ; }; EXPECT_SIZE(struct OLMAINFNGObject, 0x170);
struct

OLNewsFNGObject

{ /*2 members, size 118h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xCB]; /*117*/ char __end ; }; EXPECT_SIZE(struct OLNewsFNGObject, 0x118);
struct

OLPassworFNGObject

{ /*2 members, size 164h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x117]; /*163*/ char __end ; }; EXPECT_SIZE(struct OLPassworFNGObject, 0x164);
struct

OLPreRaceStartFNGObject

{ /*2 members, size 58h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xB]; /*57*/ char __end ; }; EXPECT_SIZE(struct OLPreRaceStartFNGObject, 0x58);
struct

OLRankingsFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct OLRankingsFNGObject, 0x150);
struct

OLRankingsMonthlyFNGObject

{ /*2 members, size 94h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x47]; /*93*/ char __end ; }; EXPECT_SIZE(struct OLRankingsMonthlyFNGObject, 0x94);
struct

OLRankingsOverallFNGObject

{ /*2 members, size 3C4h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x377]; /*3C3*/ char __end ; }; EXPECT_SIZE(struct OLRankingsOverallFNGObject, 0x3C4);
struct

OLRankingsPersonalFNGObject

{ /*2 members, size 98h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x4B]; /*97*/ char __end ; }; EXPECT_SIZE(struct OLRankingsPersonalFNGObject, 0x98);
struct

OLSelectPersonaFNGObject

{ /*2 members, size 170h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x123]; /*16F*/ char __end ; }; EXPECT_SIZE(struct OLSelectPersonaFNGObject, 0x170);
struct

OLUseExistingFNGObject

{ /*2 members, size 1A0h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x153]; /*19F*/ char __end ; }; EXPECT_SIZE(struct OLUseExistingFNGObject, 0x1A0);
struct

OLViewCareerFNGObject

{ /*2 members, size 1E8h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x19B]; /*1E7*/ char __end ; }; EXPECT_SIZE(struct OLViewCareerFNGObject, 0x1E8);
struct

OLViewCarFNGObject

{ /*2 members, size 12Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xDF]; /*12B*/ char __end ; }; EXPECT_SIZE(struct OLViewCarFNGObject, 0x12C);
struct

OLViewTrackFNGObject

{ /*2 members, size 164h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x117]; /*163*/ char __end ; }; EXPECT_SIZE(struct OLViewTrackFNGObject, 0x164);
struct

OLWebOfferFNGObject

{ /*2 members, size 530h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x4E3]; /*52F*/ char __end ; }; EXPECT_SIZE(struct OLWebOfferFNGObject, 0x530);
struct

OLWebOffer2FNGObject

{ /*1 members, size 530h*/ /*0*/ struct OLWebOfferFNGObject __parent; }; EXPECT_SIZE(struct OLWebOffer2FNGObject, 0x530);
struct

OLXFindResultsFNGObject

{ /*2 members, size 178h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x12B]; /*177*/ char __end ; }; EXPECT_SIZE(struct OLXFindResultsFNGObject, 0x178);
struct

OLXMessageFNGObject

{ /*2 members, size 1384h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x1337]; /*1383*/char __end ; }; EXPECT_SIZE(struct OLXMessageFNGObject, 0x1384);
struct

OptionsFNGObject

{ /*2 members, size 164h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x117]; /*163*/ char __end ; }; EXPECT_SIZE(struct OptionsFNGObject, 0x164);
struct

OptionsMainFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct OptionsMainFNGObject, 0x150);
struct

PaintFNGObject

{ /*2 members, size 190h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x143]; /*18F*/ char __end ; }; EXPECT_SIZE(struct PaintFNGObject, 0x190);
struct

PauseFNGObject

{ /*2 members, size 158h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x10B]; /*157*/ char __end ; }; EXPECT_SIZE(struct PauseFNGObject, 0x158);
struct

PauseOptionsFNGObject

{ /*2 members, size 15Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x10F]; /*15B*/ char __end ; }; EXPECT_SIZE(struct PauseOptionsFNGObject, 0x15C);
struct

PauseOptionsMainFNGObject

{ /*2 members, size 154h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x107]; /*153*/ char __end ; }; EXPECT_SIZE(struct PauseOptionsMainFNGObject, 0x154);
struct

PCCustomizeOptionFNGObject

{ /*2 members, size 14Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xFF]; /*14B*/ char __end ; }; EXPECT_SIZE(struct PCCustomizeOptionFNGObject, 0x14C);
struct

PCLANFNGObject

{ /*2 members, size 58h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xB]; /*57*/ char __end ; }; EXPECT_SIZE(struct PCLANFNGObject, 0x58);
struct

PCLANServerSelectFNGObject

{ /*2 members, size 928h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x8DB]; /*927*/ char __end ; }; EXPECT_SIZE(struct PCLANServerSelectFNGObject, 0x928);
struct

PCOLGameRoomFNGObject

{ /*2 members, size 11C4h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x1177]; /*11C3*/char __end ; }; EXPECT_SIZE(struct PCOLGameRoomFNGObject, 0x11C4);
struct

PCOLLobbyFNGObject

{ /*2 members, size 1D0h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x183]; /*1CF*/ char __end ; }; EXPECT_SIZE(struct PCOLLobbyFNGObject, 0x1D0);
struct

PCOLSEARCHFNGObject

{ /*2 members, size 58h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xB]; /*57*/ char __end ; }; EXPECT_SIZE(struct PCOLSEARCHFNGObject, 0x58);
struct

PerformanceBrandSelectFNGObject

{ /*2 members, size 14Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xFF]; /*14B*/ char __end ; }; EXPECT_SIZE(struct PerformanceBrandSelectFNGObject, 0x14C);
struct

PerformanceDynoChartFNGObject

{ /*2 members, size 54h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x7]; /*53*/ char __end ; }; EXPECT_SIZE(struct PerformanceDynoChartFNGObject, 0x54);
struct

PerformanceDynoMAINFNGObject

{ /*2 members, size 158h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x10B]; /*157*/ char __end ; }; EXPECT_SIZE(struct PerformanceDynoMAINFNGObject, 0x158);
struct

PerformanceDynoResultsFNGObject

{ /*2 members, size 120h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xD3]; /*11F*/ char __end ; }; EXPECT_SIZE(struct PerformanceDynoResultsFNGObject, 0x120);
struct

PerformanceTuningGraph

{ /*2 members, size 58h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xB]; /*57*/ char __end ; }; EXPECT_SIZE(struct PerformanceTuningGraph, 0x58);
struct

PerformanceTuningMaster

{ /*2 members, size 158h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x10B]; /*157*/ char __end ; }; EXPECT_SIZE(struct PerformanceTuningMaster, 0x158);
struct

PerformanceTuningSetting

{ /*2 members, size 158h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x10B]; /*157*/ char __end ; }; EXPECT_SIZE(struct PerformanceTuningSetting, 0x158);
struct

PerformanceTuningSlidersFNGObject

{ /*2 members, size 154h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x107]; /*153*/ char __end ; }; EXPECT_SIZE(struct PerformanceTuningSlidersFNGObject, 0x154);
struct

PostRaceFNGObject

{ /*2 members, size 154h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x107]; /*153*/ char __end ; }; EXPECT_SIZE(struct PostRaceFNGObject, 0x154);
struct

PostRaceResultsFNGObject

{ /*2 members, size 78h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x2B]; /*77*/ char __end ; }; EXPECT_SIZE(struct PostRaceResultsFNGObject, 0x78);
struct

PostRaceRewardFNGObject

{ /*2 members, size 50h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3]; /*4F*/ char __end ; }; EXPECT_SIZE(struct PostRaceRewardFNGObject, 0x50);
struct

PostRaceStatsFNGObject

{ /*2 members, size 190h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x143]; /*18F*/ char __end ; }; EXPECT_SIZE(struct PostRaceStatsFNGObject, 0x190);
struct

PostRaceTournResultsFNGObject

{ /*2 members, size 8Ch*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3F]; /*8B*/ char __end ; }; EXPECT_SIZE(struct PostRaceTournResultsFNGObject, 0x8C);
struct

PostRaceTournStandingsFNGObject

{ /*2 members, size 94h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x47]; /*93*/ char __end ; }; EXPECT_SIZE(struct PostRaceTournStandingsFNGObject, 0x94);
struct

ProfileManagerFNGObject

{ /*2 members, size 154h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x107]; /*153*/ char __end ; }; EXPECT_SIZE(struct ProfileManagerFNGObject, 0x154);
struct

QRModeOptionsFNGObject

{ /*2 members, size 164h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x117]; /*163*/ char __end ; }; EXPECT_SIZE(struct QRModeOptionsFNGObject, 0x164);
struct

QRModeSelectFNGObject

{ /*2 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x103]; /*14F*/ char __end ; }; EXPECT_SIZE(struct QRModeSelectFNGObject, 0x150);

used for both QR and OL car select AND customize car select (career car select seems to have a separate screen)

struct

CarSelectFNGObject

{ /*28 members, size 1B8h*/ /*0*/ struct FNGObject __parent; /*4C*/ char field_4C; /*4D*/ char field_4D; /*4E*/ char field_4E; /*4F*/ char _pad4F[0x1]; /**entries are struct CarSelectCarEntry (link offset 10h)*/ /*50*/ struct ObjectLink selectableCars; /*58*/ struct CarSelectCarEntry *currentSelectedCar; /**0/1*/ /*5C*/ int browsingPlayerIndex; /*60*/ int numSelectableCars; /**assumption; please confirm 0 is sentinel node*/ /*64*/ int currentIndexInSelectableCars; /*68*/ int field_68; /*6C*/ struct ScrollingThing scrollingThing; /*C4*/ int field_C4; /*C8*/ struct UIElementType1 *manufacturerLogoUIElement; /*CC*/ struct UIElementType1 *carBadgeUIElement; /*D0*/ struct UIElement *prevCategoryButton; /*D4*/ struct UIElement *nextCategoryButton; /*D8*/ struct UIProgressBar accelerationIndicator; /*11C*/ struct UIProgressBar topSpeedIndicator; /*160*/ struct UIProgressBar handlingIndicator; /*1A4*/ char field_1A4; /*1A5*/ char field_1A5; /*1A6*/ char field_1A6; /*1A7*/ char field_1A7; /**initialized to profileData.player1.d4.currentCarSelectionSlotHash*/ /*1A8*/ unsigned int slotHash; /*1AC*/ int field_1AC; /*1B0*/ int field_1B0; /*1B4*/ char field_1B4; /*1B5*/ char _pad1B5[0x2]; /*1B7*/ char __end ; }; EXPECT_SIZE(struct CarSelectFNGObject, 0x1B8);
struct

QRTrackSelectFNGObject

{ /*2 members, size 160h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x113]; /*15F*/ char __end ; }; EXPECT_SIZE(struct QRTrackSelectFNGObject, 0x160);
struct

QuickRaceCarSelectFNGObject

{ /*2 members, size E4h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x97]; /*E3*/ char __end ; }; EXPECT_SIZE(struct QuickRaceCarSelectFNGObject, 0xE4);
struct

ReplayControlFNGObject

{ /*2 members, size 108h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xBB]; /*107*/ char __end ; }; EXPECT_SIZE(struct ReplayControlFNGObject, 0x108);
struct

RewardsSponsorFNGObject

{ /*2 members, size 204h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x1B7]; /*203*/ char __end ; }; EXPECT_SIZE(struct RewardsSponsorFNGObject, 0x204);
struct

RimsBrowserFNGObject

{ /*2 members, size 218h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x1CB]; /*217*/ char __end ; }; EXPECT_SIZE(struct RimsBrowserFNGObject, 0x218);
struct

ShowcasePreviewFNGObject

{ /*2 members, size ECh*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x9F]; /*EB*/ char __end ; }; EXPECT_SIZE(struct ShowcasePreviewFNGObject, 0xEC);
struct

SponsorPopupFNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct SponsorPopupFNGObject, 0x4C);

size 48

struct

IconScrollerIcon

{ /*22 members, size 48h*/ /*0*/ int vtable ; /**links itself (offset 4)*/ /*4*/ struct ObjectLink link; /*C*/ int field_C; /*10*/ struct UIElementType1 *uiElement10; /*14*/ float floatField_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ char field_20; /*21*/ char field_21; /**show lock icon & don't allow enter*/ /*22*/ char isLocked ; /*23*/ char field_23; /*24*/ float uiElement10Width; /*28*/ float uiElement10Height; /*2C*/ unsigned int languageKeyIconName; /*30*/ unsigned int languageKeyOption?NeverUsed; /*34*/ float floatField_34; /*38*/ float floatField_38; /*3C*/ float floatField_3C; /*40*/ float floatField_40; /*44*/ char field_44; /*45*/ char field_45; /*46*/ char _pad46[0x1]; /*47*/ char __end ; }; EXPECT_SIZE(struct IconScrollerIcon, 0x48);

size 4C

struct

SponsorIconScrollerIcon

{ /*2 members, size 4Ch*/ /*0*/ struct IconScrollerIcon __parent; /*48*/ struct CareerSponsor *sponsor; }; EXPECT_SIZE(struct SponsorIconScrollerIcon, 0x4C);
struct

SponsorshipnewFNGObject

{ /*8 members, size 214h*/ /**scroller to select sponsor*/ /*0*/ struct IconScrollerFNGObject __parent; /**element with hash 'MASTER_OPTION'*/ /*150*/ struct UIElement *masterOptionUIElement; /*154*/ char _pad154[0x4]; /**points to the same element as __parent.iconScroller.__parent.uiElementOPTION_MASTER at time of debugging*/ /*158*/ struct UIElementType1 *sponsorLogoUIElementAgain; /*15C*/ int field_15C; /**its {struct CommonFNGObjectStructA+C} will contain "TERMS_%D"*/ /*160*/ struct CommonFNGObjectStructA field_160; /*1B4*/ struct ScrollingThing contractTermsScroller; /*20C*/ int field_20C; /**points to the same element as __parent.iconScroller.__parent.uiElementOPTION_MASTER at time of debugging*/ /*210*/ struct UIElementType1 *sponsorLogoUIElementAgainAgain; }; EXPECT_SIZE(struct SponsorshipnewFNGObject, 0x214);
struct

StartCareerFNGObject

{ /*2 members, size 154h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x107]; /*153*/ char __end ; }; EXPECT_SIZE(struct StartCareerFNGObject, 0x154);
struct

StatusCareerFNGObject

{ /*3 members, size 108h*/ /*0*/ struct FNGObject __parent; /*4C*/ int field_4C; /*50*/ char _pad50[0xB7]; /*107*/ char __end ; }; EXPECT_SIZE(struct StatusCareerFNGObject, 0x108);
struct

StatusDVDFNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct StatusDVDFNGObject, 0x4C);
struct

StatusMasterFNGObject

{ /*2 members, size 108h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xBB]; /*107*/ char __end ; }; EXPECT_SIZE(struct StatusMasterFNGObject, 0x108);
struct

StatusRegionFNGObject

{ /*2 members, size 50h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3]; /*4F*/ char __end ; }; EXPECT_SIZE(struct StatusRegionFNGObject, 0x50);
struct

LSChineseHealthFNGObject

{ /*2 members, size 50h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x3]; /*4F*/ char __end ; }; EXPECT_SIZE(struct LSChineseHealthFNGObject, 0x50);
struct

LSBlankMovieFNGObject

{ /*1 members, size 4Ch*/ /*0*/ struct FNGObject __parent; }; EXPECT_SIZE(struct LSBlankMovieFNGObject, 0x4C);

not sure if it has other fields or not

struct

LSLangSelectFNGObject

{ /*1 members, size 150h*/ /*0*/ struct IconScrollerFNGObject __parent; }; EXPECT_SIZE(struct LSLangSelectFNGObject, 0x150);
struct

IconScrollerFNGObject$vtable

{ /*4 members, size 1Ch*/ /*0*/ struct FNGObject$vtable __parent; /**default IconScrollerFNGObject::SelectedIconChanged*/ /*10*/ int procSelectedIconChanged ; /*14*/ int field_14; /**default IconScroller::AddIconEntryToScroller*/ /*18*/ int procAddIconEntryToScroller ; }; EXPECT_SIZE(struct IconScrollerFNGObject$vtable, 0x1C);

vtable vtable_IconScrollerFNGObject

struct

IconScrollerFNGObject

{ /*12 members, size 150h*/ /*0*/ struct FNGObject __parent; /*4C*/ struct IconScroller iconScroller; /*131*/ char _pad131[0x3]; /**for ICON_TITLE, may be null*/ /*134*/ struct UILabel *iconTitleUILabel; /**label with name empty string; may be null*/ /*138*/ struct UILabel *emptystringUILabel; /*13C*/ int field_13C; /*140*/ int field_140; /*144*/ int field_144; /*148*/ int field_148; /*14C*/ char field_14C; /*14D*/ char field_14D; /*14E*/ char field_14E; /*14F*/ char field_14F; }; EXPECT_SIZE(struct IconScrollerFNGObject, 0x150);

most likely 79C0F4

struct

IconScrollerBase$vtable

{ /*9 members, size 24h*/ /**most likely 543BF0*/ /*0*/ int field_0; /**most likely 538940*/ /*4*/ int field_4; /**most likely IconScroller::AddIconEntry*/ /*8*/ int procAddIconEntry ; /**most likely 50D980*/ /*C*/ int field_C; /**most likely 52F7C0*/ /*10*/ int field_10; /**most likely IconScroller::SetSelectedIcon*/ /*14*/ int procSetSelectedIcon ; /**most likely 538B80*/ /*18*/ int field_18; /**most likely 51F870*/ /*1C*/ int field_1C; /**most likely 538A30*/ /*20*/ int field_20; }; EXPECT_SIZE(struct IconScrollerBase$vtable, 0x24);
struct

IconScrollerBase

{ /*19 members, size 38h*/ /**most likely 79C0F4 (for IconScroller struct)*/ /*0*/ struct IconScrollerBase$vtable *vtable; /**links struct IconScrollerIcon (offset 4)*/ /*4*/ struct ObjectLink icons; /*C*/ struct IconScrollerIcon *selectedIcon; /**identified by hash of "OPTION_MASTER"*/ /*10*/ int uiElementOPTION_MASTER ; /**identified by hash of "LOCK_MASTER"*/ /*14*/ int uiElementLOCK_MASTER ; /**identified by hash of "BUTTON_MASTER"*/ /*18*/ int uiElementBUTTON_MASTER ; /*1C*/ char *fngName; /**inited to "option_"*/ /*20*/ char *optionPrefix; /**inited to 10.0, then 40.0*/ /*24*/ float floatField_24; /**inited to 1*/ /*28*/ int numIcons ; /*2C*/ char field_2C; /**inited to 1*/ /*2D*/ char field_2D; /**inited to 1*/ /*2E*/ char field_2E; /**inited to 1*/ /*2F*/ char field_2F; /*30*/ char field_30; /*31*/ char field_31; /*32*/ char field_32; /*33*/ char field_33; /**inited to -9*/ /*34*/ int field_34; }; EXPECT_SIZE(struct IconScrollerBase, 0x38);
struct

IconScroller

{ /*25 members, size E5h*/ /*0*/ struct IconScrollerBase __parent; /*38*/ struct ScrollingThing scrollingThing; /*90*/ int field_90; /*94*/ int field_94; /*98*/ float floatField_98; /*9C*/ float floatField_9C; /*A0*/ int field_A0; /*A4*/ int field_A4; /*A8*/ int field_A8; /*AC*/ int field_AC; /*B0*/ int field_B0; /**inited to 1.0, 0.3f*/ /*B4*/ int floatField_B4; /**inited to 1.0*/ /*B8*/ int floatField_B8; /*BC*/ short field_BC; /**inited to 1*/ /*BE*/ short field_BE; /**inited to 1*/ /*C0*/ int field_C0; /*C4*/ int field_C4; /**inited to 1, index in {struct IconScrollerBase+4} (so can't be 0 because that would be the {struct IconScrollerBase} struct itself, which is not an icon*/ /*C8*/ int selectedIconIndex ; /**inited to 480.0 (by passed param)*/ /*CC*/ int floatField_CC; /*D0*/ int field_D0; /*D4*/ int floatField_D4; /*D8*/ int floatField_D8; /*DC*/ int field_DC; /*E0*/ float floatField_E0; /*E4*/ char field_E4; }; EXPECT_SIZE(struct IconScroller, 0xE5);
struct

MainFNGObject

{ /*1 members, size 150h*/ /*0*/ struct IconScrollerFNGObject __parent; }; EXPECT_SIZE(struct MainFNGObject, 0x150);
struct

PCHelpBarFNGObject

{ /*12 members, size 70h*/ /*0*/ struct FNGObject __parent; /**type PCHelpBarButton struct*/ /*4C*/ struct ObjectLink buttonsLink; /*54*/ int field_54; /*58*/ char *buttonOwnerFngName; /*5C*/ char *oldButtonOwnerFngName; /**somehash? see usages, set to A3E4657B on fng init*/ /*60*/ int field_60; /**set to fngdata_fieldC on ctor*/ /*64*/ enum PCHELPBARFLAGS currentButtonMask; /*68*/ int someTimingField ; /*6C*/ char shouldShow ; /*6D*/ char field_6D; /*6E*/ char field_6E; /*6F*/ char field_6F; }; EXPECT_SIZE(struct PCHelpBarFNGObject, 0x70);
struct

DialogFNGObject

{ /*8 members, size 390h*/ /*0*/ struct FNGObject __parent; /*4C*/ char didSuppressHelpBarShouldShowFlagWhenShowing ; /*4D*/ char field_4D; /*4E*/ char field_4E; /*4F*/ char field_4F; /**-1 = unset*/ /*50*/ int returnWithMessage ; /*54*/ int field_54; /*58*/ struct DialogInfo dialogInfo; }; EXPECT_SIZE(struct DialogFNGObject, 0x390);
struct

ChyronIGFNGObject

{ /*9 members, size 60h*/ /*0*/ struct FNGObject __parent; /*4C*/ int field_4C; /*50*/ int field_50; /*54*/ char field_54; /*55*/ char field_55; /*56*/ char field_56; /*57*/ char field_57; /*58*/ int field_58; /*5C*/ int field_5C; }; EXPECT_SIZE(struct ChyronIGFNGObject, 0x60);
struct

IcePartsOverlayFNGObject

{ /*2 members, size 114h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0xC4]; /*110*/ int ptrField_110 ; }; EXPECT_SIZE(struct IcePartsOverlayFNGObject, 0x114);
struct

SMSMailboxFNGObject

{ /*8 members, size 1B8h*/ /*0*/ struct FNGObject __parent; /**possibly float*/ /*4C*/ int someTimingValue ; /**its link8 links struct MailBoxRelated1*/ /*50*/ struct SubScrollingThing subScrollingThing1; /*F9*/ char _padF9[0x3]; /**its link8 links struct MailBoxRelated3*/ /*FC*/ struct SubScrollingThing subScrollingThing2; /*1A5*/ char _pad1A5[0x3]; /*1A8*/ int field_1A8; /*1AC*/ char field_1AC; /*1AD*/ char _pad1AD[0x3]; /**ui element "UP_ARROW"*/ /*1B0*/ struct UIElement *uiElementUpArrow; /**ui element "DOWN_ARROW"*/ /*1B4*/ struct UIElement *uiElementDownArrow; }; EXPECT_SIZE(struct SMSMailboxFNGObject, 0x1B8);
struct

MailBoxRelated1

{ /*11 members, size 34h*/ /**seems like a destructor + nullsub*/ /*0*/ int vtable ; /**links own types*/ /*4*/ struct ObjectLink link1; /**links struct MailBoxRelated2*/ /*C*/ struct ObjectLink link2; /**ui element "HIGH_LIGHT_%d"*/ /*14*/ struct UIElement *uielement; /**related to the rect of {struct MailBoxRelated1+14}*/ /*18*/ int floatField_18; /**related to the rect of {struct MailBoxRelated1+14}*/ /*1C*/ int floatField_1C; /**related to the rect of {struct MailBoxRelated1+14}*/ /*20*/ int floatField_20; /**related to the rect of {struct MailBoxRelated1+14}*/ /*24*/ int floatField_24; /*28*/ char field_28; /*29*/ char _pad29[0x3]; /*2C*/ char *animationString1; /*30*/ char *animationString2; }; EXPECT_SIZE(struct MailBoxRelated1, 0x34);

Could this be the same as struct MailBoxRelated1?

struct

MailBoxRelated3

{ /*12 members, size 34h*/ /**seems like a destructor + nullsub, name as struct MailBoxRelated1*/ /*0*/ int vtable ; /*4*/ int field_4; /*8*/ int field_8; /**links struct MailBoxRelated4*/ /*C*/ struct ObjectLink link; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ char field_28; /*29*/ char _pad29[0x3]; /*2C*/ char *animationString1; /*30*/ char *animationString2; }; EXPECT_SIZE(struct MailBoxRelated3, 0x34);
struct

MailBoxRelated2

{ /*2 members, size 10h*/ /**single dtor func*/ /*0*/ int vtable ; /*4*/ char _pad4[0x8]; /**element with name "MESSAGE_TEXT_%d"*/ /*C*/ int uielement ; }; EXPECT_SIZE(struct MailBoxRelated2, 0x10);

Could this be struct MailBoxRelated2?

struct

MailBoxRelated4

{ /*2 members, size 10h*/ /**single dtor func*/ /*0*/ int vtable ; /*4*/ char _pad4[0x8]; /*C*/ int uielement ; }; EXPECT_SIZE(struct MailBoxRelated4, 0x10);
struct

Mailbox

{ /*6 members, size 1Ch*/ /**only a dtor entry*/ /*0*/ int vtable ; /*4*/ int field_4; /*8*/ int field_8; /*C*/ struct ObjectLink link; /*14*/ char field_14; /*15*/ char _pad15[0x3]; /*18*/ enum MAILBOX mailboxId; }; EXPECT_SIZE(struct Mailbox, 0x1C);

for example in struct BootflowEntry this is at offset 4, so each element links to another struct BootflowEntry but you'd need to subtract 4 to get to the base struct from the link pointer

often (if not always), the ObjectLink instance found in the struct that owns it, is a dummy entry that just serves as an entrypoint and the actual first entry is at this->link->next

struct

ObjectLink

{ /*2 members, size 8h*/ /*0*/ struct ObjectLink *next; /*4*/ struct ObjectLink *prev; }; EXPECT_SIZE(struct ObjectLink, 0x8);
struct

SmsData

{ /*7 members, size 14h*/ /**offset in language table careerStringPool*/ /*0*/ __int16 careerTextLanguageTableOffset; /*2*/ enum SMS_TYPE type; /*3*/ enum MAILBOX mailboxId; /*4*/ char field_4; /*5*/ char _pad5[0x3]; /*8*/ struct SmsDataData data; /*C*/ int moneyReward; /*10*/ unsigned int senderLanguageLabel; }; EXPECT_SIZE(struct SmsData, 0x14);
union

SmsDataData

{ /*10 members, size 4h*/ /**stage index in hi16*/ /*0*/ unsigned int typeAstageIndex; /**hash matching marker data hash*/ /*0*/ int typeFmarkerHash ; /*0*/ int unk ; /**stage index in hi16*/ /*0*/ int typeCstageIndex ; /*0*/ int type1raceHash ; /**stage index in hi16*/ /*0*/ int type9stageIndex ; /*0*/ int type3unk ; /*0*/ int type2unk ; /*0*/ int typeEunk ; /*0*/ int type7unk ; }; EXPECT_SIZE(struct SmsDataData, 0x4);
struct

SmsMessage

{ /*8 members, size 14h*/ /*0*/ struct SmsData *data; /*4*/ char read; /*5*/ char field_5; /*6*/ char deleted; /*7*/ char movedToCorrectInbox; /*8*/ unsigned int bodyFormatLanguageLabel; /*C*/ unsigned int subjectParameterLanguageLabel; /*10*/ unsigned int subjectFormatLanguageLabel; }; EXPECT_SIZE(struct SmsMessage, 0x14);
struct

SmsMessageList

{ /*9 members, size 1414h*/ /*0*/ struct SmsMessage smsMessages[256]; /*1400*/int numMessages; /*1404*/int numUnreadMessages; /*1408*/int field_1408; /*140C*/char field_140C; /*140D*/char field_140D; /*140E*/char field_140E; /*140F*/char field_140F; /*1410*/int field_1410; }; EXPECT_SIZE(struct SmsMessageList, 0x1414);
struct

SmsListEntry

{ /*9 members, size 1Ch*/ /*0*/ int vtable ; /*4*/ int field_4; /*8*/ int field_8; /*C*/ struct ObjectLink link; /*14*/ char field_14; /*15*/ char field_15; /*16*/ char field_16; /*17*/ char field_17; /*18*/ struct SmsMessage *sms; }; EXPECT_SIZE(struct SmsListEntry, 0x1C);
struct

EngageMessageDialogFNGObject

{ /*5 members, size 104h*/ /*0*/ struct FNGObject __parent; /*4C*/ char _pad4C[0x4]; /*50*/ struct CommonFNGObjectStructA field_50; /*A4*/ struct ScrollingThing scrollingThing; /*FC*/ struct SmsMessage *sms; /*100*/ int field_100; }; EXPECT_SIZE(struct EngageMessageDialogFNGObject, 0x104);

see ScrollingThing::ctor for a list of basenames (%s_Backing = basename_Backing)

struct

ScrollingThing

{ /*25 members, size 58h*/ /*0*/ char isVertical? ; /**handle gets drawn stretched horizontally if 1*/ /*1*/ char field_1; /*2*/ char field_2; /*3*/ char field_3; /*4*/ float floatField_4; /*8*/ float floatField_8; /*C*/ float floatField_C; /*10*/ float floatField_10; /*14*/ float floatField_14; /*18*/ float floatField_18; /*1C*/ float floatField_1C; /*20*/ float floatField_20; /*24*/ float floatField_24; /*28*/ float floatField_28; /*2C*/ float floatField_2C; /*30*/ float floatField_30; /*34*/ float floatField_34; /**so next clicks will be ignored for small amount of time*/ /*38*/ int frameTimeWhenArrowClicked ; /**set when (mouse) input event happens on arrow/body / mousewheel input... value -10/-9/-1/1/10 -9 might be magic for nop?*/ /*3C*/ int currentScrollAmountToPerform ; /**%s_Backing (scrollbar body)*/ /*40*/ struct UIElementType1 *uiElementBacking; /**%s_Handle (circle handle position indicator)*/ /*44*/ struct UIElementType1 *uiElementHandle; /**%s_Arrow_1 (left arrow)*/ /*48*/ struct UIElementType1 *uiElementArrow1; /**%s_Arrow_2 (right arrow)*/ /*4C*/ struct UIElementType1 *uiElementArrow2; /**%s_Backing_End_1 (scrollbar body end left)*/ /*50*/ struct UIElementType1 *uiElementBackingEnd1; /**%s_Backing_End_2 (scrollbar body end right)*/ /*54*/ struct UIElementType1 *uiElementBackingEnd2; }; EXPECT_SIZE(struct ScrollingThing, 0x58);

something that uses struct ScrollingThing size may be bigger, unknown

struct

SubScrollingThing

{ /*23 members, size A9h*/ /**probably unknown_795CB4*/ /*0*/ struct SubScrollingThing$vtable *vtable; /*4*/ int field_4; /**links struct MailBoxRelated1 or struct MailBoxRelated3 (see parent struct)*/ /*8*/ struct ObjectLink link8; /*10*/ struct ObjectLink link10; /**inc'd when link8 gets a new entry*/ /*18*/ int numberField_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ int uielement ; /*34*/ struct ScrollingThing scrollingThing; /**stores uielement UI element coordinate x*/ /*8C*/ float floatField_8C; /**stores uielement UI element coordinate y*/ /*90*/ float floatField_90; /*94*/ float floatField_94; /*98*/ float floatField_98; /*9C*/ char field_9C; /*9D*/ char field_9D; /*9E*/ char field_9E; /*9F*/ char field_9F; /*A0*/ char field_A0; /*A1*/ char _padA1[0x3]; /*A4*/ int field_A4; /*A8*/ char field_A8; }; EXPECT_SIZE(struct SubScrollingThing, 0xA9);
struct

SubScrollingThing$vtable

{ /*2 members, size 8h*/ /*0*/ int (__thiscall *field_0)(struct SubScrollingThing *this, int); /*4*/ int (__thiscall *field_4)(struct SubScrollingThing *this); }; EXPECT_SIZE(struct SubScrollingThing$vtable, 0x8);

size 54

struct

CommonFNGObjectStructA

{ /*14 members, size 54h*/ /*0*/ struct FNGObject *ownerFNGObject; /*4*/ int field_4; /*8*/ struct ScrollingThing *scrollingThing; /**"TERMS_%d" for sponsor select screen*/ /*C*/ char strField_C[32] ; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ int field_38; /*3C*/ int ptrAllocatedBytes50DB80 ; /*40*/ int field_40; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ int field_4C; /*50*/ int field_50; }; EXPECT_SIZE(struct CommonFNGObjectStructA, 0x54);
struct

WideCharString

{ /*2 members, size 8h*/ /*0*/ wchar_t *pStr; /**amount of wchars that can fit, excluding zero term*/ /*4*/ int allocatedWcharLength; }; EXPECT_SIZE(struct WideCharString, 0x8);

deals with UI elements of pc controller options (and more?)

struct

ControllerOptionsRelated

{ /*11 members, size 38h*/ /*0*/ struct ControllerOptionsRelated$vtable *vtable; /*4*/ struct ObjectLink link; /*C*/ struct vec2 pos; /*14*/ struct vec2 size; /*1C*/ int floatField_1C; /*20*/ int floatField_20; /**background type1 ui element*/ /*24*/ struct UIElementType1 *backingElement; /**element not focusable if this is 0*/ /*28*/ char field_28; /**element not focusable if this is 1*/ /*29*/ char field_29; /*2A*/ char _pad2A[0x2]; /*2C*/ struct UILabel *uilabel; /*30*/ struct vec2 sizeCopy; }; EXPECT_SIZE(struct ControllerOptionsRelated, 0x38);
struct

ControllerOptionsRelated$vtable

{ /*16 members, size 40h*/ /*0*/ int (__thiscall *procDtor)(struct ControllerOptionsRelated *this, int); /*4*/ void (__thiscall *procDispatchMessage)(struct ControllerOptionsRelated *this, char *fng, unsigned int message); /*8*/ int procOnClick ; /*C*/ int procUpdateLabelText ; /*10*/ int field_10; /**+ backing*/ /*14*/ int procShow ; /**+ backing*/ /*18*/ int procHide ; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int procHighlight ; /*28*/ int procUnhighlight ; /*2C*/ void (__thiscall *procSetPos)(struct ControllerOptionsRelated *this, struct vec2 *pos); /*30*/ void (__thiscall *procSetPosX)(struct ControllerOptionsRelated *this, float x); /*34*/ void (__thiscall *procSetPosY)(struct ControllerOptionsRelated *this, float y); /*38*/ int field_38; /*3C*/ int field_3C; }; EXPECT_SIZE(struct ControllerOptionsRelated$vtable, 0x40);

size 10

struct

ControllerStruct874C40_58

{ /*4 members, size 10h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; }; EXPECT_SIZE(struct ControllerStruct874C40_58, 0x10);

size 10

struct

ControllerStruct874C40_158

{ /*4 members, size 10h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; }; EXPECT_SIZE(struct ControllerStruct874C40_158, 0x10);

size 10

struct

ControllerStruct874C40_1D8

{ /*4 members, size 10h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; }; EXPECT_SIZE(struct ControllerStruct874C40_1D8, 0x10);

size 10

struct

ControllerStruct874C40_D8

{ /*4 members, size 10h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; }; EXPECT_SIZE(struct ControllerStruct874C40_D8, 0x10);

size 370

struct

ControllerStruct874C40

{ /*46 members, size 370h*/ /**only has dtor*/ /*0*/ int vtable ; /*4*/ int field_4; /**inited to -1*/ /*8*/ int field_8; /**inited to -1*/ /*C*/ int field_C; /**inited to 0*/ /*10*/ char field_10; /**inited to 0*/ /*11*/ char field_11; /**inited to 0x80*/ /*12*/ char field_12; /**inited to 0x80*/ /*13*/ char field_13; /*14*/ char _pad14[0x4]; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ int field_38; /*3C*/ int field_3C; /*40*/ char _pad40[0x18]; /*58*/ struct ControllerStruct874C40_58 field_58[4]; /*98*/ char field_98; /*99*/ char _pad99[0x3]; /*9C*/ int field_9C; /*A0*/ int field_A0; /*A4*/ int field_A4; /*A8*/ int field_A8; /*AC*/ char _padAC[0x2C]; /*D8*/ struct ControllerStruct874C40_D8 field_D8[4]; /*118*/ char _pad118[0x40]; /*158*/ struct ControllerStruct874C40_158 field_158[4]; /*198*/ char _pad198[0x40]; /*1D8*/ struct ControllerStruct874C40_1D8 field_1D8[4]; /**inited to 1*/ /*218*/ int field_218; /*21C*/ int field_21C; /*220*/ char _pad220[0x10]; /**an index or -1*/ /*230*/ int field_230; /**0x13 = keyboard (not a controller)*/ /*234*/ int type ; /*238*/ int field_238; /*23C*/ char _pad23C[0x100]; /*33C*/ int currentActiveKeyIndex ; /*340*/ int currentActiveIsSecondary ; /**at least 4 elements*/ /*344*/ int field_344; /*348*/ char _pad348[0x8]; /*350*/ int field_350; /*354*/ int field_354; /*358*/ int field_358; /*35C*/ int field_35C; /*360*/ int field_360; /*364*/ char field_364; /*365*/ char field_365; /*366*/ char field_366; /*367*/ char field_367; /*368*/ char field_368; /*369*/ char _pad369[0x3]; /*36C*/ int field_36C; }; EXPECT_SIZE(struct ControllerStruct874C40, 0x370);

size C

struct

ControllerStruct835930

{ /*2 members, size Ch*/ /**set to 0/1/2*/ /*0*/ int field_0; /*4*/ char _pad4[0x4]; /*8*/ int index ; }; EXPECT_SIZE(struct ControllerStruct835930, 0xC);
struct

U2RECT

{ /*4 members, size 10h*/ /*0*/ float left; /*4*/ float top; /*8*/ float right; /*C*/ float bottom; }; EXPECT_SIZE(struct U2RECT, 0x10);
struct

UIPos

{ /*16 members, size 40h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /**maybe translate?*/ /*1C*/ float leftOffset; /**maybe translate?*/ /*20*/ float topOffset; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /**something with x position*/ /*38*/ int floatField_38; /**somehting with y position*/ /*3C*/ int floatField_3C; }; EXPECT_SIZE(struct UIPos, 0x40);
struct

UIElement_Animation

{ /*13 members, size 34h*/ /*0*/ int vtable ; /*4*/ struct UIElement_Animation *next; /*8*/ int field_8; /**related with field_10*/ /*C*/ int field_C; /**maybe animation timer?*/ /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int ptrField_20 ; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ unsigned int hash_30; }; EXPECT_SIZE(struct UIElement_Animation, 0x34);

How big is this base struct?? 0x5C or 0x60 (can't be more because see struct UILabel

struct

UIElement

{ /*23 members, size 5Ch*/ /*0*/ int vtable ; /*4*/ struct UIElement *nextSibling; /*8*/ int field_8; /*C*/ int field_C; /*10*/ unsigned int hash; /*14*/ int field_14; /**1-11? 2 = struct UILabel 5 = struct UIContainer, 7 = movie*/ /*18*/ int type; /*1C*/ enum UIELEMENTFLAGS flags; /*20*/ int field_20; /**see 497414 (textureHash) and 566250 (movieName)*/ /*24*/ unsigned int textureHashOrMovieName; /*28*/ int field_28; /**some positioning (and maybe size) thing?*/ /*2C*/ struct UIPos *pos; /*30*/ int field_30; /*34*/ int field_34; /**guessing this may be the width (for some types), based on GetUIElementSize?? although if this element is a label, the measured text width (which is also a guess) is multiplied by this member*/ /*38*/ float maybeSizeWidth?; /**guessing this may be the height (for some types), based on GetUIElementSize?? although if this element is a label, the measured text height (which is also a guess) is multiplied by this member*/ /*3C*/ float maybeSizeHeight?; /*40*/ int field_40; /*44*/ int field_44; /*48*/ int field_48; /**not struct ObjectLink, it's non-doubly linked list*/ /*4C*/ struct UIElement_Animation *firstAnimation; /*50*/ struct UIElement_Animation *lastAnimation; /*54*/ struct UIElement_Animation *currentAnimation?; /*58*/ struct FERenderObject *FERenderObject; }; EXPECT_SIZE(struct UIElement, 0x5C);
struct

UIElementType1

{ /*1 members, size 5Ch*/ /*0*/ struct UIElement __parent; }; EXPECT_SIZE(struct UIElementType1, 0x5C);

UI element type 2

struct

UILabel

{ /*7 members, size 78h*/ /*0*/ struct UIElement __parent; /**some string pointer?*/ /*5C*/ int field_5C; /**the text (of the language files entry that matches this key) this label will display if its flags does not include USE_CUSTOM_TEXT*/ /*60*/ enum LANGUAGE_LABELS textLanguageString; /**the text this label will display if its flags includes USE_CUSTOM_TEXT*/ /*64*/ struct WideCharString customString; /*6C*/ int field_6C; /*70*/ int field_70; /*74*/ int field_74; }; EXPECT_SIZE(struct UILabel, 0x78);

UI element type 5

struct

UIContainer

{ /*3 members, size 68h*/ /*0*/ struct UIElement __parent; /*5C*/ char _pad5C[0x4]; /*60*/ int numChildren; /*64*/ struct UIElement *rootElement; }; EXPECT_SIZE(struct UIContainer, 0x68);
struct

UIData

{ /*8 members, size 18h*/ /**probably 79BCD8*/ /*0*/ struct UIData$vtable *vtable; /*4*/ char field_4; /*5*/ char isDrawingMagazineBack?? ; /*6*/ char field_6; /*7*/ char field_7; /*8*/ struct UIData_field8 *field_8; /*C*/ struct UIDataC *field_C; /**sentinel node*/ /*10*/ struct PoolEntry levelSorterPoolEntry; }; EXPECT_SIZE(struct UIData, 0x18);
struct

UIDataC

{ /*3 members, size 3420h*/ /**dtor only*/ /*0*/ int vtable ; /*4*/ char _pad4[0xC]; /*10*/ struct ObjectLink link10; /*18*/ char _pad18[0x8]; /*20*/ char field_20[13312]; }; EXPECT_SIZE(struct UIDataC, 0x3420);
struct

UIData$vtable

{ /*26 members, size 68h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int procInitFNGPackage ; /**probably 51C8C0*/ /*10*/ int (__thiscall *procUnloadFNGPackage)(struct UIData *this, struct FNGInfo *fnginfo); /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /**51C690*/ /*20*/ int field_20; /**537480*/ /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /**50C2C0*/ /*30*/ int field_30; /*34*/ int field_34; /*38*/ int field_38; /**50C490*/ /*3C*/ int field_3C; /*40*/ int field_40; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ int field_4C; /*50*/ int field_50; /**called when sending/queueing a message, arg1=msg,arg3=fnginfo*?*/ /*54*/ int field_54; /*58*/ int field_58; /*5C*/ int field_5C; /*60*/ int field_60; /*64*/ int field_64; }; EXPECT_SIZE(struct UIData$vtable, 0x68);
struct

UIData_field8

{ /*48 members, size 5254h*/ /*0*/ char field_0; /**can't interact with ui when 0 EXCEPT you can scroll iconscrollers with mouse :D*/ /*1*/ char inputsEnabled ; /*2*/ char field_2; /*3*/ char field_3; /*4*/ char field_4; /*5*/ char _pad5[0x3]; /*8*/ struct UIData_field8_8 *field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ short field_18; /*1A*/ short field_1A; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ char field_28; /*29*/ char field_29; /*2A*/ char _pad2A[0x2]; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ char field_38[76]; /*84*/ char field_84[76]; /*D0*/ int field_D0; /*D4*/ int numField8Instances? ; /*D8*/ short field_D8; /*DA*/ char _padDA[0x2]; /*DC*/ struct FNGInfoList fngPackagesDC; /*EC*/ struct FNGInfoList fngPackagesEC; /*FC*/ int field_FC; /*100*/ int field_100; /*104*/ int field_104; /*108*/ int field_108; /**its field_8 links to this struct*/ /*10C*/ struct UIData *uiData; /*110*/ int field_110; /*114*/ int field_114; /*118*/ char _pad118[0x3FFC]; /*4114*/int field_4114; /*4118*/int numMessagesInQueue ; /**entries are struct UIMessage*/ /*411C*/struct ObjectLink messagesQueueLink; /*4124*/int field_4124; /*4128*/int numEntriesInlink412C ; /**entries are struct UIData_field8_412C*/ /*412C*/struct ObjectLink link412C; /*4134*/struct UIData_field8_4134 field_4134; /*4145*/char _pad4145[0x3]; /*4148*/int field_4148; /*414C*/char field_414C[4096]; /*514C*/int field_514C; /*5150*/char field_5150[256]; /*5250*/char field_5250; /*5251*/char field_5251; /*5252*/char field_5252; /*5253*/char field_5253; }; EXPECT_SIZE(struct UIData_field8, 0x5254);
struct

UIData_field8_8

{ /*3 members, size 88h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ char field_8[128]; }; EXPECT_SIZE(struct UIData_field8_8, 0x88);

inherits from struct NamedLinkNode where the name is an fngName

struct

UIData_field8_412C

{ /*4 members, size 20h*/ /*0*/ struct NamedLinkNode __parent; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ struct FNGInfo *parentFngInfo; }; EXPECT_SIZE(struct UIData_field8_412C, 0x20);
struct

NamedLinkNode

{ /*5 members, size 14h*/ /*0*/ void *vtable; /*4*/ void *next; /*8*/ void *prev; /**ptr to mem specially allocated to hold this, see NamedLinkNode::CopyNameIntoCAndHashInto10*/ /*C*/ char *name; /*10*/ unsigned int cihashOfName; }; EXPECT_SIZE(struct NamedLinkNode, 0x14);
struct

UIData_field8_4134

{ /*5 members, size 11h*/ /*0*/ int field_0; /*4*/ int numUIDLA ; /*8*/ struct UIDLA *firstUIDLA; /*C*/ struct UIDLA *lastUIDLA; /*10*/ char field_10; }; EXPECT_SIZE(struct UIData_field8_4134, 0x11);

I'm done with names that have lots of "field" and numbers, this is short for "UIDataLinkNodeA"

it looks like this class has two parents, multiple inheritance fun!!

an instance is made for this for each UI element type (1-11)

struct

UIDLA

{ /*6 members, size 28h*/ /*0*/ struct NamedLinkNode __parentA; /*14*/ int vtableB ; /*18*/ int numEntries ; /*1C*/ struct UIDLA_ENTRY *firstEntry; /*20*/ struct UIDLA_ENTRY *lastEntry; /*24*/ int uiElementType ; }; EXPECT_SIZE(struct UIDLA, 0x28);
struct

UIDLA_ENTRY

{ /*5 members, size 24h*/ /*0*/ struct NamedLinkNode __parent; /*14*/ int type ; /**initialized from map 799320 entry at this->type*4 :D*/ /*18*/ int dataSize ; /**this entry's dataSize + sum of those values of all previous entries in this link*/ /*1C*/ int cumulativeDataSize ; /*20*/ void *data; }; EXPECT_SIZE(struct UIDLA_ENTRY, 0x24);

entries are struct FNGInfo vtable is only a dtor

struct

FNGInfoList

{ /*1 members, size 10h*/ /*0*/ struct List __parent; }; EXPECT_SIZE(struct FNGInfoList, 0x10);
struct

ListEntry

{ /*3 members, size Ch*/ /*0*/ void *vtable; /*4*/ void *next; /*8*/ void *prev; }; EXPECT_SIZE(struct ListEntry, 0xC);
struct

List

{ /*4 members, size 10h*/ /*0*/ void *vtable; /*4*/ int numEntries; /**NULL when list is empty*/ /*8*/ void *first; /**NULL when list is empty*/ /*C*/ void *last; }; EXPECT_SIZE(struct List, 0x10);
struct

SomethingUI

{ /*2 members, size Ch*/ /*0*/ struct SomethingUI$vtable *vtable; /**elements are struct SomethingUIImpl*/ /*4*/ struct ObjectLink link; }; EXPECT_SIZE(struct SomethingUI, 0xC);
struct

SomethingUI$vtable

{ /*1 members, size 4h*/ /*0*/ void (__thiscall *dtor)(struct SomethingUI *this, int dontFree); }; EXPECT_SIZE(struct SomethingUI$vtable, 0x4);

an instance of this exists for every binsection 30203 or 30210 read, see LoadBinSection30203_30210

old comment: "if size is <60 then it'll be padded to 60 in some link/pool thing". But is this thing part of a pool? It's just linked in struct SomethingUI afaik

struct

SomethingUIImpl

{ /*21 members, size 54h*/ /**usually 79B15C*/ /*0*/ void *vtable; /*4*/ struct ObjectLink link; /**set if this instance is from a 30203 binsection, else null*/ /*C*/ struct BinSection30203Data *data30203; /*10*/ struct BinSection *binsection; /*14*/ struct FNGObject *fngObject; /*18*/ struct FNGInfo *fngInfo; /*1C*/ short field_1C; /*1E*/ short field_1E; /**ptr to the entry in fngdata for the hash of this struct's fngname (which comes from its bindata), initialized in ctor*/ /*20*/ struct FNGData *fngData; /*24*/ int field_24; /*28*/ char field_28; /*29*/ char _pad29[0x3]; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ int field_38; /*3C*/ int field_3C; /*40*/ int field_40; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ int controlMask ; /*50*/ int field_50; }; EXPECT_SIZE(struct SomethingUIImpl, 0x54);

size is probably variable

struct

BinSection30203Data

{ /*4 members, size 32h*/ /*0*/ int field_0; /*4*/ char _pad4[0x4]; /*8*/ int field_8; /*C*/ char _padC[0x4]; /*10*/ int field_10; /*14*/ char _pad14[0x14]; /**length unknown*/ /*28*/ char fngName[10] ; }; EXPECT_SIZE(struct BinSection30203Data, 0x32);
struct

BinSection30210

{ /*2 members, size Ch*/ /*0*/ struct BinSectionHeader header; /**see 51B97B for proof*/ /*8*/ unsigned int fngNameCSHash; }; EXPECT_SIZE(struct BinSection30210, 0xC);
struct

UIElementVisitor

{ /*1 members, size 4h*/ /*0*/ UIElementVisitor$vtable *vtable; }; EXPECT_SIZE(struct UIElementVisitor, 0x4);
struct

UIElementVisitor$vtable

{ /*2 members, size 8h*/ /*0*/ int field_0; /**return 0 to stop visiting*/ /*4*/ int (__thiscall *acceptElement)(struct UIElementVisitor *this, struct UIElement *element); }; EXPECT_SIZE(struct UIElementVisitor$vtable, 0x8);
struct

UIElementVisitor_FindByHash

{ /*3 members, size Ch*/ /*0*/ struct UIElementVisitor __parent; /*4*/ unsigned int searchingHash; /*8*/ struct UIElement *foundUIElement; }; EXPECT_SIZE(struct UIElementVisitor_FindByHash, 0xC);
struct

UIElementVisitor_ClearFNGCache

{ /*5 members, size 14h*/ /*0*/ struct UIElementVisitor __parent; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; }; EXPECT_SIZE(struct UIElementVisitor_ClearFNGCache, 0x14);
struct

UIElementVisitor_FindByFieldC

{ /*3 members, size Ch*/ /*0*/ struct UIElementVisitor __parent; /*4*/ int searchingUIElementFieldC ; /*8*/ int foundUIElement ; }; EXPECT_SIZE(struct UIElementVisitor_FindByFieldC, 0xC);

size 0xA0

struct

FERenderObject

{ /*5 members, size A0h*/ /*0*/ struct PoolEntry __parent; /*8*/ char _pad8[0x4]; /**maybe flags field?*/ /*C*/ int field_C; /*10*/ int field_10; /*14*/ char _pad14[0x4]; /**objectlink of pool entries?*/ /*18*/ struct ObjectLink FERenderEPolyLink; /*20*/ char _pad20[0x7F]; /*9F*/ char __end ; }; EXPECT_SIZE(struct FERenderObject, 0xA0);
struct

FERenderEPoly

{ /*2 members, size A0h*/ /*0*/ struct PoolEntry __parent; /*8*/ char _pad8[0x97]; /*9F*/ char __end ; }; EXPECT_SIZE(struct FERenderEPoly, 0xA0);
struct

WorldAnimStuff

{ /*22 members, size 4Ch*/ /*0*/ struct Pool *worldAnimEntityPool; /*4*/ struct Pool *worldAnimEntityTreePool; /*8*/ struct Pool *worldAnimEntityTreeInfoPool; /*C*/ struct Pool *worldAnimCtrlPool; /*10*/ struct Pool *worldAnimInstanceEntryPool; /*14*/ char arePoolsCreated; /*15*/ char field_15; /*16*/ char field_16; /*17*/ char field_17; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /**struct of size 8*/ /*28*/ int field_28; /*2C*/ int field_2C; /**struct of size 8*/ /*30*/ int field_30; /*34*/ int field_34; /**struct of size 8*/ /*38*/ int field_38; /*3C*/ int field_3C; /**struct of size 8*/ /*40*/ int field_40; /*44*/ int field_44; /**struct of size 8*/ /*48*/ int field_48; }; EXPECT_SIZE(struct WorldAnimStuff, 0x4C);
struct

AudioStuff

{ /*4 members, size B0h*/ /*0*/ int vtable ; /*4*/ char _pad4[0x34]; /*38*/ int field_38; /*3C*/ int field_3C; /*40*/ char _pad40[0x6C]; /*AC*/ int field_AC; }; EXPECT_SIZE(struct AudioStuff, 0xB0);
struct

Struct836498

{ /*36 members, size 6Ch*/ /*0*/ int ptrField0 ; /*4*/ char field_4; /*5*/ char field_5; /*6*/ char field_6; /*7*/ char field_7; /*8*/ char field_8; /**meaning, went through all entries in bootflow, see field 836488*/ /*9*/ char bootFinished ; /*A*/ char field_A; /*B*/ char field_B; /*C*/ char field_C; /*D*/ char field_D; /*E*/ char field_E; /*F*/ char field_F; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ struct Pool *minimapEntityPool; /*20*/ struct Pool *minimapElementsPool; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ int field_38; /*3C*/ int field_3C; /*40*/ struct ChyronIGFNGObject *chyronIGFNGObject; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ int field_4C; /*50*/ int field_50; /**used as index for controllerStruct835930*/ /*54*/ int field_54; /*58*/ int field_58; /*5C*/ int field_5C; /*60*/ int field_60; /*64*/ int field_64; /*68*/ int field_68; }; EXPECT_SIZE(struct Struct836498, 0x6C);
struct

Bootflow

{ /*3 members, size 10h*/ /**probably bootflow_vtable*/ /*0*/ int vtable ; /*4*/ struct ObjectLink link; /*C*/ struct BootflowEntry *firstEntry; }; EXPECT_SIZE(struct Bootflow, 0x10);
struct

BootflowEntry

{ /*3 members, size 10h*/ /*0*/ int vtable ; /*4*/ struct ObjectLink link; /*C*/ char *name; }; EXPECT_SIZE(struct BootflowEntry, 0x10);
struct

FontData

{ /*0 members, size 0h*/ }; EXPECT_SIZE(struct FontData, 0x0);
struct

SoundEffectSystem

{ /*0 members, size 0h*/ }; EXPECT_SIZE(struct SoundEffectSystem, 0x0);
struct

SoundIdBanks

{ /*26 members, size 2BEh*/ /*0*/ struct SoundIdBank bank0; /*1B*/ struct SoundIdBank bank1; /*36*/ struct SoundIdBank bank2; /*51*/ struct SoundIdBank bank3; /**most of these are 0x2*/ /*6C*/ struct SoundIdBank bank4; /*87*/ struct SoundIdBank bank5; /*A2*/ struct SoundIdBank bank6; /*BD*/ struct SoundIdBank bank7; /*D8*/ struct SoundIdBank bank8; /*F3*/ struct SoundIdBank bank9; /*10E*/ struct SoundIdBank bank10; /*129*/ struct SoundIdBank bank11; /*144*/ struct SoundIdBank bank12; /*15F*/ struct SoundIdBank bank13; /*17A*/ struct SoundIdBank bank14; /*195*/ struct SoundIdBank bank15; /*1B0*/ struct SoundIdBank bank16; /*1CB*/ struct SoundIdBank bank17; /*1E6*/ struct SoundIdBank bank18; /*201*/ struct SoundIdBank bank19; /*21C*/ struct SoundIdBank bank20; /*237*/ struct SoundIdBank bank21; /*252*/ struct SoundIdBank bank22; /*26D*/ struct SoundIdBank bank23; /*288*/ struct SoundIdBank bank24; /*2A3*/ struct SoundIdBank bank25; }; EXPECT_SIZE(struct SoundIdBanks, 0x2BE);
struct

SoundIdBank

{ /*27 members, size 1Bh*/ /*0*/ char field_0; /*1*/ char field_1; /*2*/ char field_2; /*3*/ char field_3; /*4*/ char field_4; /*5*/ char field_5; /*6*/ char field_6; /*7*/ char field_7; /*8*/ char field_8; /*9*/ char field_9; /*A*/ char field_A; /*B*/ char field_B; /*C*/ char field_C; /*D*/ char field_D; /*E*/ char field_E; /*F*/ char field_F; /*10*/ char field_10; /*11*/ char field_11; /*12*/ char field_12; /*13*/ char field_13; /*14*/ char field_14; /*15*/ char field_15; /*16*/ char field_16; /*17*/ char field_17; /*18*/ char field_18; /*19*/ char field_19; /*1A*/ char field_1A; }; EXPECT_SIZE(struct SoundIdBank, 0x1B);
struct

Car

{ /*13 members, size 890h*/ /**like "240SX"*/ /*0*/ char name0[32]; /**like "240SX"*/ /*20*/ char name1[32]; /**like "CARS\240SX\GEOMETRY.BIN"*/ /*40*/ char geometrybinfilename[32]; /**like "CARS\240SX\GEOMETRY.LZC" unknown size, may be larger*/ /*60*/ char geometrylzcfilename[32]; /*80*/ char _pad80[0x40]; /**like "NISSAN" unknown length, but max 16?*/ /*C0*/ char manufacturerName[16]; /**cs hash of name0*/ /*D0*/ unsigned int carNamehash; /*D4*/ char _padD4[0x6]; /**car will only be available if value & 2*/ /*DA*/ char maybeFlags ; /*DB*/ char _padDB[0x765]; /**index of this struct in ptrCarData*/ /*840*/ int carIndex ; /**0 = customizable, 2 = traffic/ambu/firetruck/...*/ /*844*/ int carType ; /*848*/ char _pad848[0x4]; /**player1 something*/ /*84C*/ int field_84C; /**player2 something*/ /*850*/ int field_850; /*854*/ char _pad854[0x36]; /*88A*/ char field_88A; /*88B*/ char _pad88B[0x1]; /**has something to do with DUMMY_SKIN%d*/ /*88C*/ int field_88C; }; EXPECT_SIZE(struct Car, 0x890);
struct

CarCollection

{ /*9 members, size 9BD8h*/ /*0*/ struct StockCar stockCars[48]; /*540*/ int numStockCars; /*544*/ struct TunedCar tunedCars[20]; /*5954*/struct CareerCar careerCars[5]; /**always 5*/ /*812C*/int numCareerCarSlots; /*8130*/struct OnlineCar onlineCars[6]; /**always 6*/ /*9A80*/int numOnlineCarSlots; /*9A84*/struct SponsorCar sponsorCars[12]; /*9BD4*/int numSponsorCars; }; EXPECT_SIZE(struct CarCollection, 0x9BD8);
struct

CarCollectionWithPointers

{ /*6 members, size 9D44h*/ /*0*/ struct CarCollection __parent; /**initialized to &this->__parent.stockCars + i*/ /*9BD8*/struct StockCar *ptrStockCars[48]; /**initialized to &this->__parent.tunedCars + i*/ /*9C98*/struct TunedCar *ptrTunedCars[20]; /**initialized to &this->__parent.careerCars + i*/ /*9CE8*/struct CareerCar *ptrCareerCars[5]; /**initialized to &this->__parent.SponsorCars + i*/ /*9CFC*/struct SponsorCar *ptrSponsorCars[12]; /**initialized to &this->__parent.onlineCars + i*/ /*9D2C*/struct OnlineCar *ptrOnlineCars[6]; }; EXPECT_SIZE(struct CarCollectionWithPointers, 0x9D44);
struct

InventoryCar

{ /*6 members, size 18h*/ /*0*/ struct InventoryCar$vtable *vtable; /*4*/ int field_4; /**STOCK_PEUGEOT when stock, 0 when unused tuned, TUNED_CAR_%d when used tuned, CAREER_SLOT_%d when career, ONLINE_CAREER_CIRCUIT when online/ranked (DRAG, DRIFT, SPRINT, STREET_CROSS, URL), SPONSOR_SNOOP_DOGG when sponsor sometimes this is also just hash of the car name? I wanna cry*/ /*8*/ int slotHash ; /*C*/ int floatField_C; /**sponsorcar: 1 after hash is assigned, career: inited to 1 | slotHasCar or something?, tunedcar: 1 after car is assigned?*/ /*10*/ int field_10; /*14*/ enum INVENTORY_CAR_FLAGS flags; }; EXPECT_SIZE(struct InventoryCar, 0x18);
struct

CarPreset

{ /*6 members, size 338h*/ /**sentinel node is carPresets*/ /*0*/ struct ObjectLink link; /**like struct Car.name0*/ /*8*/ char modelName[32]; /**DDAY_PLAYER_CAR, DEMO_AI_300GT_BLUE, sponsor cars, ...*/ /*28*/ char name[32]; /*48*/ int field_48; /*4C*/ char field_4C[680]; /*2F4*/ char field_2F4[68]; }; EXPECT_SIZE(struct CarPreset, 0x338);
struct

OLCarSlotData_Slot

{ /*3 members, size Ch*/ /**0/1/2/3/4/10*/ /*0*/ int number0 ; /**ONLINE_CAREER_CIRCUIT/ONLINE_CAREER_SPRINT/ONLINE_CAREER_DRAG/ONLINE_CAREER_DRIFT/ONLINE_CAREER_URL/ONLINE_CAREER_STREET_CROSS*/ /*4*/ unsigned int slotHash; /**4/1/3/2/0/1*/ /*8*/ int number8 ; }; EXPECT_SIZE(struct OLCarSlotData_Slot, 0xC);
struct

OLCarSlotData

{ /*6 members, size 48h*/ /*0*/ struct OLCarSlotData_Slot ONLINE_CAREER_CIRCUIT; /*C*/ struct OLCarSlotData_Slot ONLINE_CAREER_SPRINT; /*18*/ struct OLCarSlotData_Slot ONLINE_CAREER_DRAG; /*24*/ struct OLCarSlotData_Slot ONLINE_CAREER_DRIFT; /*30*/ struct OLCarSlotData_Slot ONLINE_CAREER_URL; /*3C*/ struct OLCarSlotData_Slot ONLINE_CAREER_STREET_CROSS; }; EXPECT_SIZE(struct OLCarSlotData, 0x48);
struct

OnlineCar

{ /*2 members, size 438h*/ /*0*/ struct OnlineCareerCar __parent; /**0 circuit, 1 sprint, 2 drag, 3 drift, 4 url, 5-9 ?, 10 street cross*/ /*434*/ int onlineCarType ; }; EXPECT_SIZE(struct OnlineCar, 0x438);

see struct CarCollection, all of these types will have some common parent

struct

StockCar

{ /*2 members, size 1Ch*/ /*0*/ struct InventoryCar __parent; /**index in ptrCarData*/ /*18*/ int indexInCarData ; }; EXPECT_SIZE(struct StockCar, 0x1C);
struct

s484

{ /*4 members, size 10h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; }; EXPECT_SIZE(struct s484, 0x10);
struct

s485

{ /*9 members, size 24h*/ /*0*/ int index; /**hash of part name related to name field, f.e. name is "Side Mirror Left" and hash is of LEFT_SIDE_MIRROR*/ /*4*/ unsigned int hash; /**always zero*/ /*8*/ int field_8; /*C*/ float floatField_C; /*10*/ float floatField_10; /*14*/ float floatField_14; /**0/1*/ /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ char *name; }; EXPECT_SIZE(struct s485, 0x24);
struct

InventoryCar$vtable

{ /*4 members, size 10h*/ /*0*/ void *dtor; /**index in ptrCarData. stock: StockCar::GetCarIndex sponsor: SponsorCar::GetCarIndex else: TunedCar::GetCarIndex*/ /*4*/ int (__thiscall *procGetCarIndex)(struct InventoryCar *this); /**stock: StockCar::GetCarNameHash sponsor: SponsorCar::GetCarNameHash else: TunedCar::GetCarNameHash*/ /*8*/ unsigned int (__thiscall *procGetCarNameHash)(struct InventoryCar *this); /**stock: StockCar::ApplyTuningToInstance sponsor: SponsorCar::ApplyTuningToInstance else: TunedCar::ApplyTuningToInstance last arg is only used for TunedCar instances*/ /*C*/ void (__thiscall *procApplyTuningToInstance)(struct InventoryCar *this, int playerIndex, struct MenuCarInstance *menuCarInstance, int); }; EXPECT_SIZE(struct InventoryCar$vtable, 0x10);
struct

s54F980

{ /*3 members, size 10h*/ /**just a dtor*/ /*0*/ void *vtable; /**links struct bPNodeSlotPoolEntry*/ /*4*/ struct ObjectLink link; /*C*/ struct bPNodeSlotPoolEntry *field_C; }; EXPECT_SIZE(struct s54F980, 0x10);
struct

SponsorCar

{ /*2 members, size 1Ch*/ /*0*/ struct InventoryCar __parent; /**set to hash of SNOOP_DOGG etc, matches name*/ /*18*/ unsigned int carPresetHash; }; EXPECT_SIZE(struct SponsorCar, 0x1C);

size unsure

struct

CarCollection9BD8

{ /*3 members, size Ch*/ /*0*/ int vtable ; /*4*/ int field_4; /*8*/ int field_8; }; EXPECT_SIZE(struct CarCollection9BD8, 0xC);
struct

TunedCar18

{ /*6 members, size 418h*/ /*0*/ int field_0; /*4*/ char _pad4[0x4]; /**cs hash of struct Car.name0*/ /*8*/ unsigned int carNameHash; /*C*/ char field_C[680]; /**copied from struct MenuCarInstance at TunedCar18::CopyTuningFromMenuCarInstance*/ /*2B4*/ struct MenuCarInstance_10_2E0 field_2B4; /*348*/ struct TunedCar360 field_348[5]; /*415*/ char _pad415[0x2]; /**probably just padding*/ /*417*/ char __end ; }; EXPECT_SIZE(struct TunedCar18, 0x418);

same as struct TunedCar360_20? could just be char[9]

struct

TunedCar360_17

{ /*3 members, size 9h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ char field_8; }; EXPECT_SIZE(struct TunedCar360_17, 0x9);

same as struct TunedCar360_17? could just be char[9]

struct

TunedCar360_20

{ /*3 members, size 9h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ char field_8; }; EXPECT_SIZE(struct TunedCar360_20, 0x9);

all bytes (incl subs) are initialized to 0x64

struct

TunedCar360

{ /*9 members, size 29h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ short field_14; /*16*/ char field_16; /*17*/ struct TunedCar360_17 field_17; /*20*/ struct TunedCar360_20 field_20; }; EXPECT_SIZE(struct TunedCar360, 0x29);
struct

TunedCar

{ /*3 members, size 434h*/ /*0*/ struct InventoryCar __parent; /*18*/ struct TunedCar18 field_18; /*430*/ int field_430; }; EXPECT_SIZE(struct TunedCar, 0x434);

dunno what to call this, both struct CareerCar and struct OnlineCar have the same constructor and share some functions, so this felt required

struct

OnlineCareerCar

{ /*1 members, size 434h*/ /*0*/ struct TunedCar __parent; }; EXPECT_SIZE(struct OnlineCareerCar, 0x434);
struct

CareerCar

{ /*5 members, size 7F8h*/ /*0*/ struct OnlineCareerCar __parent; /*434*/ struct CareerCar434 field_434; /**all slots except first are locked and sequentially unlocked when signing sponsors, see Career::SignSponsor and Career::UnlockNextLockedCarSlot*/ /*7F4*/ char isLocked ; /*7F5*/ char hasCarBought ; /*7F6*/ char _pad7F6[0x1]; /*7F7*/ char __end ; }; EXPECT_SIZE(struct CareerCar, 0x7F8);

is this the same as struct CareerCar434_26C? struct CareerCar434_27C? struct CareerCar434_29C?

struct

CareerCar434_15C

{ /*4 members, size 10h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; }; EXPECT_SIZE(struct CareerCar434_15C, 0x10);

is this the same as struct CareerCar434_15C? struct CareerCar434_27C? struct CareerCar434_29C?

struct

CareerCar434_26C

{ /*4 members, size 10h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; }; EXPECT_SIZE(struct CareerCar434_26C, 0x10);

is this the same as struct CareerCar434_15C? struct CareerCar434_26C? struct CareerCar434_29C?

struct

CareerCar434_27C

{ /*4 members, size 10h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; }; EXPECT_SIZE(struct CareerCar434_27C, 0x10);

is this the same as struct CareerCar434_294?

struct

CareerCar434_28C

{ /*2 members, size 8h*/ /*0*/ int field_0; /*4*/ int field_4; }; EXPECT_SIZE(struct CareerCar434_28C, 0x8);

is this the same as struct CareerCar434_28C?

struct

CareerCar434_294

{ /*2 members, size 8h*/ /*0*/ int field_0; /*4*/ int field_4; }; EXPECT_SIZE(struct CareerCar434_294, 0x8);

is this the same as struct CareerCar434_15C? struct CareerCar434_26C? struct CareerCar434_27C?

struct

CareerCar434_29C

{ /*4 members, size 10h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; }; EXPECT_SIZE(struct CareerCar434_29C, 0x10);

size 3C0 (unconfirmed, though CareerCar434::Init is a good argument)

struct

CareerCar434

{ /*10 members, size 3C0h*/ /**87 entries see 503E8B*/ /*0*/ char field_0[348]; /*15C*/ struct CareerCar434_15C field_15C; /**64 entries see 503E9A*/ /*16C*/ char field_16C[256]; /*26C*/ struct CareerCar434_26C field_26C; /*27C*/ struct CareerCar434_27C field_27C; /*28C*/ struct CareerCar434_28C field_28C; /*294*/ struct CareerCar434_294 field_294; /*29C*/ struct CareerCar434_29C field_29C; /**68 entries see 503EDF*/ /*2AC*/ char field_2AC[272]; /*3BC*/ int moneySpentOnCar ; }; EXPECT_SIZE(struct CareerCar434, 0x3C0);
struct

Player_24_60

{ /*19 members, size 28h*/ /*0*/ char field_0; /*1*/ char field_1; /*2*/ char field_2; /*3*/ char field_3; /*4*/ char field_4; /*5*/ char field_5; /*6*/ char field_6; /*7*/ char _pad7[0x1]; /*8*/ int field_8; /*C*/ char field_C; /*D*/ char _padD[0x3]; /**initialized to 3*/ /*10*/ int field_10; /*14*/ char field_14; /*15*/ char field_15; /*16*/ char field_16; /*17*/ char field_17; /*18*/ char field_18; /*19*/ char field_19; /*1A*/ char _pad1A[0x2]; /**initialized to 1.O*/ /*1C*/ float floatField_1C; /**initialized to 12.5*/ /*20*/ float floatField_20; /**initialized to 1.0*/ /*24*/ float floatField_24; }; EXPECT_SIZE(struct Player_24_60, 0x28);
struct

Player_24

{ /*28 members, size B0h*/ /*0*/ int field_0; /**initialized to .5*/ /*4*/ float floatField_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ char field_10; /*11*/ char _pad11[0x3]; /*14*/ char field_14; /*15*/ char field_15; /**initialized to 1 if _currentLoadedLanguage is not 0*/ /*16*/ char useMetricSystem ; /*17*/ char field_17; /*18*/ char field_18; /*19*/ char _pad19[0x3]; /**initialized to 127.5*/ /*1C*/ float floatField_1C; /**initialized to 127.5*/ /*20*/ float floatField_20; /**initialized to 1.0*/ /*24*/ float floatField_24; /**initialized to 1.0*/ /*28*/ float floatField_28; /**initialized to 0.7*/ /*2C*/ float floatField_2C; /**initialized to 1.0*/ /*30*/ float floatField_30; /**initialized to 1.0*/ /*34*/ float floatField_34; /**initialized to 1.0*/ /*38*/ float floatField_38; /**initialized to 1.0*/ /*3C*/ float floatField_3C; /**initialized to 1.0*/ /*40*/ float floatField_40; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ int field_4C; /*50*/ int field_50; /*54*/ int field_54; /*58*/ int field_58; /*5C*/ int field_5C; /*60*/ struct Player_24_60 field_60[2]; }; EXPECT_SIZE(struct Player_24, 0xB0);
struct

Player_D4_10

{ /*14 members, size 14h*/ /*0*/ char field_0; /*1*/ char field_1; /*2*/ char field_2; /*3*/ char field_3; /*4*/ char field_4; /*5*/ char field_5; /*6*/ char field_6; /*7*/ char field_7; /*8*/ short field_8; /*A*/ short field_A; /*C*/ int field_C; /*10*/ char field_10; /*11*/ char field_11; /*12*/ char _pad12[0x1]; /*13*/ char __end ; }; EXPECT_SIZE(struct Player_D4_10, 0x14);
struct

Player_D4_100_1C

{ /*6 members, size Ch*/ /*0*/ short field_0; /*2*/ short field_2; /*4*/ int field_4; /*8*/ char field_8; /*9*/ char field_9; /*A*/ char _padA[0x1]; /*B*/ char __end ; }; EXPECT_SIZE(struct Player_D4_100_1C, 0xC);
struct

Player_D4_100

{ /*15 members, size 7Ch*/ /*0*/ char field_0; /*1*/ char field_1; /*2*/ char field_2; /*3*/ char field_3; /*4*/ char field_4; /*5*/ char field_5; /*6*/ char _pad6[0x2]; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ char field_14; /*15*/ char field_15; /*16*/ char _pad16[0x2]; /*18*/ char field_18; /*19*/ char field_19; /*1A*/ char field_1A; /*1B*/ char _pad1B[0x1]; /*1C*/ struct Player_D4_100_1C field_1C[8]; }; EXPECT_SIZE(struct Player_D4_100, 0x7C);
struct

Player_D4

{ /*5 members, size 17Ch*/ /**number. compared against 2,3,4,8,9,C*/ /*0*/ int field_0; /**last selected car in car selection, used to select the same car again when going to car selection again (if possible), and also used as the car to use when starting a race. often defaults to STOCK_RX8. Array of 2, one for each player (for some reason?? I thought there already was a Player struct instance for each player??)*/ /*4*/ unsigned int currentCarSelectionSlotHash[2]; /**last category in car selection, to initialize with the same category the next time car selection is shown again, if possible*/ /*C*/ enum INVENTORY_CAR_FLAGS currentCarSelectionCategory; /*10*/ struct Player_D4_10 field_10[12]; /*100*/ struct Player_D4_100 field_100; }; EXPECT_SIZE(struct Player_D4, 0x17C);
struct

Player

{ /*14 members, size AB4Ch*/ /*0*/ char name[32]; /*20*/ char field_20; /*21*/ char _pad21[0x3]; /*24*/ struct Player_24 p24; /*D4*/ struct Player_D4 d4; /*250*/ int field_250; /*254*/ int field_254; /*258*/ char field_258[128]; /*2D8*/ struct TraxConfig traxConfig[27]; /*3B0*/ struct CarCollectionWithPointers carCollection; /*A0F4*/int field_A0F4; /*A0F8*/char field_A0F8; /*A0F9*/char field_A0F9; /*A0FA*/char field_A0FA; /*A0FB*/char _padA0FB[0x1]; /*A0FC*/char field_A0FC[2640]; }; EXPECT_SIZE(struct Player, 0xAB4C);
struct

TraxConfig

{ /*3 members, size 8h*/ /**index in traxEntries*/ /*0*/ int traxIndex; /**0x0 = off, 0x1 = menus, 0x2 = race, 0x3 = all*/ /*4*/ char playWhen; /*5*/ char _pad5[0x2]; /*7*/ char __end ; }; EXPECT_SIZE(struct TraxConfig, 0x8);
struct

TraxEntry

{ /*4 members, size 10h*/ /*0*/ char *title; /*4*/ char *artist; /*8*/ char *album; /**"FE" (menus), "IG" (race), "AL" (all)*/ /*C*/ char *playWhen; }; EXPECT_SIZE(struct TraxEntry, 0x10);
struct

ProfileData_156B0_SubB

{ /*5 members, size 14h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; }; EXPECT_SIZE(struct ProfileData_156B0_SubB, 0x14);
struct

ProfileData_156B0_SubA

{ /*4 members, size Dh*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ char field_C; }; EXPECT_SIZE(struct ProfileData_156B0_SubA, 0xD);
struct

ProfileData_156B0

{ /*34 members, size BCh*/ /*0*/ char field_0; /*1*/ char field_1; /*2*/ char _pad2[0x2]; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ char field_18; /*19*/ char field_19; /*1A*/ char field_1A; /*1B*/ char field_1B; /*1C*/ struct ProfileData_156B0_SubA field_1C; /*29*/ struct ProfileData_156B0_SubA field_29; /*36*/ char _pad36[0x2]; /*38*/ short field_38; /*3A*/ short field_3A; /*3C*/ int field_3C; /*40*/ char field_40; /*41*/ char field_41; /*42*/ char _pad42[0x2]; /*44*/ char field_44; /*45*/ char field_45; /*46*/ char field_46; /*47*/ char field_47; /*48*/ char field_48; /*49*/ char field_49; /*4A*/ char field_4A; /*4B*/ char field_4B; /*4C*/ char field_4C; /*4D*/ char _pad4D[0x3]; /*50*/ int field_50; /*54*/ int field_54; /*58*/ struct ProfileData_156B0_SubB field_58; /*6C*/ struct ProfileData_156B0_SubB field_6C; /*80*/ struct ProfileData_156B0_SubB field_80; /*94*/ struct ProfileData_156B0_SubB field_94; /*A8*/ struct ProfileData_156B0_SubB field_A8; }; EXPECT_SIZE(struct ProfileData_156B0, 0xBC);
struct

ProfileData28DB0

{ /*8 members, size 20h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; }; EXPECT_SIZE(struct ProfileData28DB0, 0x20);
struct

ProfileData28FD0

{ /*2 members, size 8h*/ /*0*/ int field_0; /*4*/ int field_4; }; EXPECT_SIZE(struct ProfileData28FD0, 0x8);
struct

ProfileData29C70

{ /*1 members, size 20h*/ /*0*/ char _pad0[0x1F]; /*1F*/ char __end ; }; EXPECT_SIZE(struct ProfileData29C70, 0x20);

instance at profileData

unsure size (0x29DD8), but might be complete

struct

ProfileData

{ /*84 members, size 29DD8h*/ /*0*/ int field_0; /*4*/ char field_4; /*5*/ char field_5; /*6*/ char _pad6[0x2]; /*8*/ int field_8; /*C*/ int field_C; /*10*/ struct Player player1; /*AB5C*/struct Player player2; /*156A8*/enum MENU_STATE menuState; /*156AC*/char _pad156AC[0x4]; /*156B0*/struct ProfileData_156B0 field_156B0; /*1576C*/char _pad1576C[0x14]; /*15780*/int field_15780; /*15784*/int field_15784; /*15788*/int field_15788; /*1578C*/int field_1578C; /*15790*/int field_15790; /*15794*/char field_15794; /*15795*/char _pad15795[0xFF]; /*15894*/int field_15894; /*15898*/char _pad15898[0xFC]; /*15994*/int field_15994; /*15998*/int field_15998; /*1599C*/struct CareerD24_54_30 field_1599C; /*16690*/char field_16690; /*16691*/char _pad16691[0x10]; /*166A1*/char field_166A1; /*166A2*/char _pad166A2[0x10]; /*166B2*/char field_166B2; /*166B3*/char _pad166B3[0x10]; /*166C3*/char field_166C3; /*166C4*/char _pad166C4[0x32]; /*166F6*/char field_166F6; /*166F7*/char _pad166F7[0x65]; /*1675C*/char field_1675C; /*1675D*/char field_1675D; /*1675E*/char _pad1675E[0x2]; /*16760*/int field_16760; /*16764*/int field_16764; /*16768*/int field_16768; /*1676C*/char field_1676C; /*1676D*/char _pad1676D[0x3]; /*16770*/int field_16770; /*16774*/char _pad16774[0x4]; /*16778*/void *memForWritingSaveData; /*1677C*/struct CarCollection carCollection; /*20354*/char _pad20354[0x4]; /**0 or 1*/ /*20358*/int currentPlayerIndex?; /*2035C*/int field_2035C; /*20360*/char _pad20360[0xC]; /*2036C*/int field_2036C; /*20370*/struct Career career; /*28D7C*/char _pad28D7C[0x10]; /*28D8C*/float floatField_28D8C; /*28D90*/int field_28D90; /*28D94*/char _pad28D94[0x4]; /*28D98*/int field_28D98; /*28D9C*/char _pad28D9C[0x4]; /*28DA0*/struct List list_28DA0; /*28DB0*/struct ProfileData28DB0 field_28DB0; /*28DD0*/struct List list_28DD0; /*28DE0*/struct SomethingUI somethingUI; /*28DEC*/int field_28DEC; /*28DF0*/char _pad28DF0[0x4]; /*28DF4*/int field_28DF4; /*28DF8*/int field_28DF8; /*28DFC*/char _pad28DFC[0x4]; /*28E00*/int field_28E00; /*28E04*/char _pad28E04[0x1CC]; /*28FD0*/struct ProfileData28FD0 field_28FD0[256]; /*297D0*/int field_297D0; /*297D4*/char _pad297D4[0x8]; /*297DC*/struct OLCarSlotData olCarSlotData; /**Ensures this section only gets loaded once*/ /*29824*/int binSection80034A10loaded ; /*29828*/int field_29828; /*2982C*/int field_2982C; /*29830*/int field_29830; /*29834*/int field_29834; /*29838*/int field_29838; /*2983C*/int field_2983C; /*29840*/int field_29840; /*29844*/char _pad29844[0x4]; /**dunno how big this is, assuming 1024 for now*/ /*29848*/char buffer_29848[1024] ; /*29C48*/char field_29C48; /*29C49*/char field_29C49; /*29C4A*/char field_29C4A; /*29C4B*/char _pad29C4B[0x5]; /*29C50*/int field_29C50; /*29C54*/int field_29C54; /*29C58*/struct Pool *styleMomentSlotPool; /*29C5C*/int field_29C5C; /*29C60*/struct ObjectLink field_29C60; /*29C68*/float floatField_29C68; /*29C6C*/char _pad29C6C[0x4]; /*29C70*/struct ProfileData29C70 field_29C70[6]; /*29D30*/int field_29D30; /*29D34*/int field_29D34; /*29D38*/int field_29D38; /*29D3C*/char _pad29D3C[0x4]; /*29D40*/int field_29D40; /*29D44*/char _pad29D44[0xC]; /*29D50*/int field_29D50; /*29D54*/char _pad29D54[0x4]; /*29D58*/char field_29D58[96]; /**array unknown size*/ /*29DB8*/char field_29DB8; /*29DB9*/char field_29DB9; /*29DBA*/char _pad29DBA[0x2]; /*29DBC*/int field_29DBC; /*29DC0*/int field_29DC0; /*29DC4*/int field_29DC4; /*29DC8*/char _pad29DC8[0x4]; /*29DCC*/int field_29DCC; /**array unknown size*/ /*29DD0*/char field_29DD0; /*29DD1*/char _pad29DD1[0x6]; /*29DD7*/char __end ; }; EXPECT_SIZE(struct ProfileData, 0x29DD8);

size 8

struct

Career7B00

{ /*5 members, size 8h*/ /**hash of race, shop, ...*/ /*0*/ unsigned int hash; /**if this entry is a hidden shop, this must be 1 for it to be visible on the map*/ /*4*/ char field_4; /*5*/ char field_5; /**put to 1 when this entry is for a race and the race is finished (won?)*/ /*6*/ char field_6; /*7*/ char field_7; }; EXPECT_SIZE(struct Career7B00, 0x8);

size CF4

struct

CareerD24_54_30

{ /*3 members, size CF4h*/ /*0*/ struct CareerD24_54_30_0 field_0[6]; /*CD8*/ void *field_CD8[6]; /*CF0*/ int numUsedField0; }; EXPECT_SIZE(struct CareerD24_54_30, 0xCF4);
struct

CareerD24_54_30_0_10C

{ /*13 members, size 34h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ float floatField_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ float floatField_2C; /*30*/ int field_30; }; EXPECT_SIZE(struct CareerD24_54_30_0_10C, 0x34);

size 224

struct

CareerD24_54_30_0

{ /*45 members, size 224h*/ /*0*/ int field_0; /*4*/ int field_4; /**checked against 1 and 0xB, see 528822,5288B5*/ /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ char field_1C[84]; /*70*/ char field_70[84]; /*C4*/ int field_C4; /*C8*/ int field_C8; /*CC*/ int field_CC; /*D0*/ int field_D0; /*D4*/ int field_D4; /*D8*/ int field_D8; /*DC*/ int field_DC; /*E0*/ int field_E0; /*E4*/ int field_E4; /*E8*/ int field_E8; /*EC*/ int field_EC; /*F0*/ int field_F0; /*F4*/ int field_F4; /*F8*/ int field_F8; /*FC*/ int field_FC; /*100*/ int field_100; /*104*/ int field_104; /*108*/ int field_108; /*10C*/ struct CareerD24_54_30_0_10C field_10C; /*140*/ int field_140; /*144*/ char field_144[84]; /*198*/ char field_198[84]; /*1EC*/ int field_1EC; /*1F0*/ int field_1F0; /*1F4*/ int field_1F4; /*1F8*/ int field_1F8; /*1FC*/ int field_1FC; /*200*/ int field_200; /*204*/ int field_204; /*208*/ int field_208; /*20C*/ int field_20C; /*210*/ int field_210; /*214*/ int field_214; /*218*/ int field_218; /*21C*/ int field_21C; /*220*/ int field_220; }; EXPECT_SIZE(struct CareerD24_54_30_0, 0x224);

size D24

struct

CareerD24_54

{ /*13 members, size D24h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /**compared to 4 at 5287F3/513F1C, 3 at 513F03/54C95D*/ /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ struct CareerD24_54_30 field_30; }; EXPECT_SIZE(struct CareerD24_54, 0xD24);

size 0xC

struct

CareerD24_8

{ /*3 members, size Ch*/ /**79AA00*/ /*0*/ void *vtable; /*4*/ int field_4; /*8*/ int field_8; }; EXPECT_SIZE(struct CareerD24_8, 0xC);

size most likely 0x34EC

struct

CareerD24

{ /*10 members, size 34ECh*/ /*0*/ char field_0; /*1*/ char field_1; /*2*/ char field_2; /*3*/ char field_3; /*4*/ char field_4; /*5*/ char _pad5[0x3]; /*8*/ struct CareerD24_8 field_8[6]; /*50*/ int field_50; /*54*/ struct CareerD24_54 field_54[4]; /**set to first field_54 at 532FEE*/ /*34E4*/struct CareerD24_54 *ptrCareerDataD24_54; /**sometimes used as index for field_54*/ /*34E8*/int field_34E8; }; EXPECT_SIZE(struct CareerD24, 0x34EC);
struct

CareerStage

{ /*14 members, size 104h*/ /**most likely some hash extra refs: 500FBC 51441E*/ /*0*/ char field_0[140]; /**most likely some hash*/ /*8C*/ char field_8C[16]; /**most likely some hash*/ /*9C*/ char field_9C[40]; /**magazines/dvds done, probably hashes*/ /*C4*/ unsigned int showcases[6]; /*DC*/ int outrunsRaced; /*E0*/ float totalReputation; /**used to calc averageReputationPerRace, so is this # finished or # raced?*/ /*E4*/ int racesFinished; /*E8*/ struct CareerSponsor *signedSponsor; /*EC*/ int field_EC; /*F0*/ int field_F0; /*F4*/ int field_F4; /*F8*/ int field_F8; /*FC*/ char stageFinished?; /*FD*/ char _padFD[0x3]; /*100*/ struct CareerStageSettings *settings; }; EXPECT_SIZE(struct CareerStage, 0x104);
struct

Bin34A11_38

{ /*2 members, size 8h*/ /*0*/ char field_0; /*1*/ char _pad1[0x3]; /*4*/ unsigned int hash4; }; EXPECT_SIZE(struct Bin34A11_38, 0x8);
struct

CareerRace

{ /*18 members, size 88h*/ /*0*/ char _pad0[0x4]; /**if not 0, this if offset in careerStringPool that will point to a movie name. values seen: INDUSTEAST, SUBURBAN, SCENE08, SCENE12, INDUSTWEST*/ /*4*/ short postRaceMovieStrOffs ; /*6*/ char _pad6[0x2]; /**some hash that identifies this race this is at some point compared to field8 of sms data SMS_END_OF_GAME_MESSAGE*/ /*8*/ unsigned int hash; /*C*/ char field_C; /*D*/ char field_D; /*E*/ char _padE[0x1]; /*F*/ enum RACE_TYPE raceType; /**hash*/ /*10*/ unsigned int field_10; /*14*/ char _pad14[0x4]; /**this is an array; but what size? guessing 4 for now*/ /*18*/ struct Bin34A11_18 field_18[4]; /**hash*/ /*28*/ unsigned int markerHash; /*2C*/ int field_2C; /**see 5414D7, -1 means no money? see 500A8F*/ /*30*/ int bankToWinFromRace ; /**see Career::GetBankWonFromRace bankPerRaceWon will be added to race bank reward if this is 1 but this value is also compared to 2 and 3*/ /*34*/ char field_34; /*35*/ char numField38 ; /*36*/ char _pad36[0x1]; /**index for stage0*/ /*37*/ char stageIndex ; /**how big is this array? 8 is a guess*/ /*38*/ struct Bin34A11_38 field_38[8]; /*78*/ char _pad78[0x4]; /*7C*/ char field_7C; /*7D*/ char _pad7D[0x1]; /**entries in field_18*/ /*7E*/ char numField18 ; /*7F*/ char field_7F; /*80*/ char _pad80[0x7]; /*87*/ char __end ; }; EXPECT_SIZE(struct CareerRace, 0x88);

in GLOBALB.BUN section 80034A10, size 7700

struct

BinSection34A11

{ /*1 members, size 7700h*/ /**since the section in my file is size 7700, I'm assuming this array has 224 entries*/ /*0*/ struct CareerRace field_0[224]; }; EXPECT_SIZE(struct BinSection34A11, 0x7700);

size 4

struct

CareerStatsHiddenShopsDiscovered

{ /*2 members, size 4h*/ /*0*/ __int16 numDiscovered; /*2*/ __int16 numShops; }; EXPECT_SIZE(struct CareerStatsHiddenShopsDiscovered, 0x4);
struct

CareerStatsDvdCover

{ /*3 members, size 8h*/ /*0*/ float requiredStarRating; /*4*/ char didGetCover; /*5*/ char _pad5[0x2]; /*7*/ char __end ; }; EXPECT_SIZE(struct CareerStatsDvdCover, 0x8);
struct

CareerStatsRegionDvdCovers

{ /*3 members, size 28h*/ /*0*/ struct CareerStatsDvdCover cover[4]; /*20*/ int numCovers; /*24*/ char _pad24[0x3]; /*27*/ char __end ; }; EXPECT_SIZE(struct CareerStatsRegionDvdCovers, 0x28);

see careerStats

struct

CareerStats

{ /*32 members, size 21Ch*/ /*0*/ int money; /*4*/ int racesEntered; /*8*/ int overallWins; /**[0-1]*/ /*C*/ int winPercent; /*10*/ int circuitWins; /*14*/ int sprintWins; /*18*/ int dragWins; /*1C*/ int driftWins; /*20*/ int streetxWins; /*24*/ int urlWins; /*28*/ int magazinesWon; /*2C*/ int magazinesToWin; /*30*/ int sponsorsSigned; /*34*/ struct CareerStatsHiddenShopsDiscovered hiddenShopsDiscovered[8]; /**[0-1]*/ /*54*/ float partsUnlocked; /*58*/ char _pad58[0xC]; /*64*/ int field_64; /**[0-1]*/ /*68*/ float gameCompletionStatus; /*6C*/ int field_6C; /*70*/ int regionWorldEventWins; /*74*/ int regionWorldEventWinsMax; /*78*/ int regionSponsorEventWins; /*7C*/ int regionSponsorEventWinsMax; /*80*/ int regionURLEventWins; /*84*/ int regionURLEventWinsMax; /*88*/ int dvdCoversWon; /*8C*/ int dvdCoversToWin; /*90*/ int regionDVDCovers; /*94*/ int regionDVDCoversMax; /**[0-1]*/ /*98*/ float regionCompletion; /*9C*/ struct CareerStatsRegionDvdCovers regionDvdCovers[8]; /*1DC*/ float stageTotalReputation[8]; /*1FC*/ float stageAverageReputationPerRaceForStage[8]; }; EXPECT_SIZE(struct CareerStats, 0x21C);

size unknown

struct

CareerC00

{ /*9 members, size 120h*/ /*0*/ char field_0; /*1*/ char _pad1[0x3]; /*4*/ float floatField_4; /*8*/ void *field_8; /*C*/ char field_C[256]; /*10C*/ char field_10C; /*10D*/ char _pad10D[0x3]; /*110*/ int field_110; /*114*/ int field_114; /*118*/ short field_118; /*11A*/ char _pad11A[0x2]; /*11C*/ int field_11C; }; EXPECT_SIZE(struct CareerC00, 0x120);
struct

Bin34A11_18

{ /*3 members, size 4h*/ /*0*/ short field_0; /*2*/ char field_2; /*3*/ char field_3; }; EXPECT_SIZE(struct Bin34A11_18, 0x4);

size C

struct

Career887C_2A

{ /*2 members, size Ch*/ /*0*/ int field_0; /*4*/ char _pad4[0x7]; /*B*/ char __end ; }; EXPECT_SIZE(struct Career887C_2A, 0xC);

size B

struct

Career887C_D

{ /*4 members, size Bh*/ /*0*/ char field_0; /*1*/ char _pad1[0x3]; /*4*/ int field_4; /*8*/ short field_8; /*A*/ char field_A; }; EXPECT_SIZE(struct Career887C_D, 0xB);

size at least 190

struct

Career887C

{ /*31 members, size 190h*/ /*0*/ char field_0; /*1*/ char field_1; /*2*/ char _pad2[0x2]; /*4*/ int field_4; /*8*/ char field_8; /*9*/ char field_9; /*A*/ char field_A; /*B*/ char field_B; /*C*/ char field_C; /*D*/ struct Career887C_D field_D; /*18*/ char field_18; /*19*/ char field_19; /*1A*/ char field_1A; /*1B*/ char _pad1B[0x1]; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ char field_24; /*25*/ char field_25; /*26*/ char field_26; /*27*/ char field_27; /*28*/ char field_28; /*29*/ char _pad29[0x3]; /*2C*/ char field_2C[120]; /*A4*/ char field_A4; /*A5*/ char stage; /*A6*/ char field_A6; /*A7*/ char _padA7[0x1]; /*A8*/ struct Career887C_A8 field_A8[8]; /*108*/ int field_108; /*10C*/ int field_10C; /*110*/ int field_110; /*114*/ int field_114; /*118*/ int field_118; /*11C*/ int field_11C; /*120*/ char field_120[112]; }; EXPECT_SIZE(struct Career887C, 0x190);

size C

struct

Career887C_A8

{ /*3 members, size Ch*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; }; EXPECT_SIZE(struct Career887C_A8, 0xC);
struct

Career7148_180

{ /*3 members, size 10h*/ /**counter (are field8/fieldC part of this too?)*/ /*0*/ char field_0[8]; /*8*/ int field_8; /*C*/ int field_C; }; EXPECT_SIZE(struct Career7148_180, 0x10);

size 190

struct

Career7148

{ /*3 members, size 190h*/ /**size 32 see 527D64*/ /*0*/ char field_0[128]; /*80*/ unsigned int raceHash[64]; /*180*/ struct Career7148_180 field_180; }; EXPECT_SIZE(struct Career7148, 0x190);

size 18

struct

Career_0

{ /*6 members, size 18h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ struct CareerShop *careerShop8; /*C*/ void *field_C; /*10*/ int field_10; /*14*/ int field_14; }; EXPECT_SIZE(struct Career_0, 0x18);

size A (maybe C)

struct

Career713C

{ /*4 members, size Ah*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ char field_8; /*9*/ char field_9; }; EXPECT_SIZE(struct Career713C, 0xA);
struct

Career4230

{ /*4 members, size 1AECh*/ /*0*/ char _pad0[0x10]; /*10*/ struct MenuCarInstance field_10[3]; /*1AE0*/int field_1AE0; /*1AE4*/float floatField_1AE4; /*1AE8*/int field_1AE8; }; EXPECT_SIZE(struct Career4230, 0x1AEC);

size at least 1C

struct

Career4210

{ /*8 members, size 1Ch*/ /*0*/ int field_0; /*4*/ char field_4; /*5*/ char field_5; /*6*/ char field_6; /*7*/ char _pad7[0x1]; /*8*/ int field_8; /*C*/ char _padC[0x4]; /*10*/ char field_10; /*11*/ char _pad11[0x3]; /*14*/ float floatField_14; /*18*/ float floatField_18; }; EXPECT_SIZE(struct Career4210, 0x1C);
struct

CareerBank

{ /*1 members, size 4h*/ /*0*/ int money; }; EXPECT_SIZE(struct CareerBank, 0x4);

this may be way more than just careerdata.. maybe profiledata?

size unknown

probably incomplete

struct

Career

{ /*54 members, size 8A0Ch*/ /*0*/ struct Career_0 field_0[64]; /**see Career::RecalculateCollectedEngageMarkers extra ref: 605880*/ /*600*/ struct Marker *collectedEngageMarkers[128]; /**why is there 256 of these? there aren't that many money pickups in the world... see Career::CheckMoneyMarkers*/ /*800*/ struct Marker *collectedMoneyMarkers?[256]; /**unknown struct size*/ /*C00*/ struct CareerC00 field_C00; /*D20*/ char _padD20[0x4]; /*D24*/ struct CareerD24 field_D24; /*4210*/struct Career4210 field_4210; /*422C*/char field_422C; /*422D*/char field_422D; /*422E*/char _pad422E[0x2]; /*4230*/struct Career4230 field_4230; /*5D1C*/char _pad5D1C[0x4]; /*5D20*/struct SmsMessageList smsMessageList; /*7134*/struct CareerBank bank; /*7138*/char field_7138; /*7139*/char _pad7139[0x3]; /*713C*/struct Career713C field_713C; /*7146*/char _pad7146[0x2]; /*7148*/struct Career7148 field_7148; /**array of 8 (but split in separate fields in this struct for IDA xrefs)*/ /*72D8*/struct CareerStage stage0; /*73DC*/struct CareerStage stage1; /*74E0*/struct CareerStage stage2; /*75E4*/struct CareerStage stage3; /*76E8*/struct CareerStage stage4; /*77EC*/struct CareerStage stage5; /*78F0*/struct CareerStage stage6; /*79F4*/struct CareerStage stage7; /**0-6 (but there's a stage 7? or is it dummy?)*/ /*7AF8*/int currentStage; /*7AFC*/int numUsed7B00; /**384 elements, see 53286B nulling entries removes discovered shops from the map*/ /*7B00*/struct Career7B00 field_7B00[384]; /*8700*/int field_8700; /*8704*/void *field_8704; /*8708*/int field_8708; /*870C*/struct CareerShop *someCareerShop870C; /*8710*/int field_8710; /*8714*/int field_8714; /*8718*/char _pad8718[0x4]; /*871C*/int field_871C; /*8720*/int field_8720; /*8724*/struct CareerShop *someCareerShop8724; /*8728*/int field_8728; /**counter*/ /*872C*/int field_872C; /**set in Career::541160*/ /*8730*/struct CareerRace *currentRace?lastRace?; /*8734*/void *field_8734; /*8738*/struct CareerRace *field_8738; /**Fun fact: when creating a new profile, this value is set to 0 when the textbox to enter a name appears. When canceling at that point, it's set back to 1 (if the loaded profile already had career started).*/ /*873C*/char isCareerStarted ; /*873D*/char field_873D; /*873E*/char field_873E; /*873F*/char field_873F; /**eg: "CAREER_0" (<- shouldn't this be CAREER_SLOT_0?)*/ /*8740*/unsigned int activeCarSlotHash; /*8744*/char field_8744; /*8745*/char _pad8745[0xB]; /**car position is stored here at some points*/ /*8750*/struct vec3 carPosition; /*875C*/int field_875C; /**same as carPosition*/ /*8760*/short carAngle ; /*8762*/char _pad8762[0x2]; /*8764*/float floatField_8764; /**size 64 see 532A1E*/ /*8768*/char field_8768[256]; /*8868*/char field_8868; /**all inited to 1*/ /*8869*/char field_8869[8][2]; /*8879*/char field_8879; /*887A*/char _pad887A[0x2]; /*887C*/struct Career887C field_887C; }; EXPECT_SIZE(struct Career, 0x8A0C);
struct

MarkerQueryResult

{ /*5 members, size 14h*/ /*0*/ struct Marker *marker; /*4*/ struct CareerRace *foundRace; /*8*/ struct CareerShop *foundShop; /*C*/ struct Bin34A16 *found34A16; /*10*/ struct Bin34A1B *found34A1B; }; EXPECT_SIZE(struct MarkerQueryResult, 0x14);
struct

CareerSponsor

{ /*8 members, size 10h*/ /**offset in string table careerStringPool, which will point to something like STREETGLOW, which is then used to get name and info like SPONSOR_%S SPONSOR_INFO_%S*/ /*0*/ __int16 sponsorNameStrpoolOffset; /*2*/ __int16 bankPerRaceWon; /*4*/ char field_4; /*5*/ char field_5; /*6*/ char field_6; /*7*/ char field_7; /*8*/ char _pad8[0x4]; /**money amount*/ /*C*/ __int16 signingBonus; /**this sponsor will only be available when player's average reputation per race in the previous stage was equal or higher than this*/ /*E*/ __int16 requiredAverageReputation; }; EXPECT_SIZE(struct CareerSponsor, 0x10);
struct

CarUnlockEntry

{ /*3 members, size Ch*/ /*0*/ unsigned int carNameHash; /**to be matched with struct CareerRace.hash when game region is US*/ /*4*/ unsigned int unlockingRaceIfGameRegionIsUS; /**to be matched with struct CareerRace.hash when game region is NOT US*/ /*8*/ unsigned int unlockingRaceIfGameRegionIsNotUs; }; EXPECT_SIZE(struct CarUnlockEntry, 0xC);
struct

Bin34A1E

{ /*1 members, size Ch*/ /*0*/ char _pad0[0xB]; /*B*/ char __end ; }; EXPECT_SIZE(struct Bin34A1E, 0xC);
struct

Bin34A1C

{ /*1 members, size 28h*/ /*0*/ char _pad0[0x27]; /*27*/ char __end ; }; EXPECT_SIZE(struct Bin34A1C, 0x28);
struct

Bin34A1A

{ /*1 members, size 18h*/ /*0*/ char _pad0[0x17]; /*17*/ char __end ; }; EXPECT_SIZE(struct Bin34A1A, 0x18);
struct

Bin34A1B

{ /*2 members, size 18h*/ /*0*/ char _pad0[0x2]; /**this value is an offset in careerStringPool example values: TRIGGER_START_STAGE_2_SHOW_1 TRIGGER_START_STAGE_2_SHOW_2 EVENT_LOCATOR_01 TRIGGER_START_STAGE_3_PERF_1 TRIGGER_START_STAGE_3_VISUAL_2*/ /*2*/ short careerStringpoolOffset ; /*4*/ char _pad4[0x13]; /*17*/ char __end ; }; EXPECT_SIZE(struct Bin34A1B, 0x18);
struct

Bin34A16

{ /*3 members, size 40h*/ /*0*/ char _pad0[0x20]; /*20*/ int field_20; /*24*/ char _pad24[0x8]; /*2C*/ unsigned int markerHash; /*30*/ char _pad30[0xF]; /*3F*/ char __end ; }; EXPECT_SIZE(struct Bin34A16, 0x40);
struct

Bin34A14

{ /*1 members, size 44h*/ /*0*/ char _pad0[0x43]; /*43*/ char __end ; }; EXPECT_SIZE(struct Bin34A14, 0x44);
struct

CareerShop

{ /*7 members, size A0h*/ /*0*/ char _pad0[0x38]; /*38*/ unsigned int hash; /*3C*/ unsigned int markerHash; /*40*/ char _pad40[0x11]; /*51*/ char isHiddenShop; /*52*/ char _pad52[0x22]; /**some sort of condition variable for this shop to be visible on the map (if hidden shop); sometimes a hash (race hash?), sometimes a number. see 512870*/ /*74*/ unsigned int field_74; /*78*/ char _pad78[0x24]; /*9C*/ char field_9C; /*9D*/ char stageIndex; /*9E*/ char _pad9E[0x1]; /*9F*/ char __end ; }; EXPECT_SIZE(struct CareerShop, 0xA0);
struct

Bin34A15_C

{ /*3 members, size 5Ch*/ /**index because bin34A15_C[index] = this;*/ /*0*/ int index ; /*4*/ char _pad4[0x3C]; /**also points to an index for this same kind of struct*/ /*40*/ char moreIndices40[20] ; /**also points to an index for this same kind of struct*/ /*54*/ char moreIndices50[8] ; }; EXPECT_SIZE(struct Bin34A15_C, 0x5C);
struct

Bin34A15

{ /*4 members, size 17Ch*/ /*0*/ int field_0; /*4*/ char _pad4[0x4]; /*8*/ int numEntriesInFieldC ; /*C*/ struct Bin34A15_C field_C[3]; /*120*/ char _pad120[0x5B]; /*17B*/ char __end ; }; EXPECT_SIZE(struct Bin34A15, 0x17C);
union

CareerSponsorPtrOrHash

{ /*2 members, size 4h*/ /*0*/ unsigned int sponsor; /*0*/ int sponsorNameHash ; }; EXPECT_SIZE(struct CareerSponsorPtrOrHash, 0x4);

this data comes from bin section 34A18 in GLOBALB.BUN only used for reading size 50 (see 512AC9)

struct

CareerStageSettings

{ /*19 members, size 50h*/ /*0*/ char stageIndex; /**max 5, because sponsors/field_1C is of size 5*/ /*1*/ char numSponsors; /**money to win or lose for outruns*/ /*2*/ __int16 outrunStakes; /*4*/ __int16 showcaseRewardMultiplier; /*6*/ char _pad6[0x2]; /*8*/ struct CareerSponsorPtrOrHash sponsors[5]; /*1C*/ char field_1C[10]; /*26*/ char _pad26[0x2]; /**hash, sms hash? see usage at 524395*/ /*28*/ int field_28; /*2C*/ char _pad2C[0x4]; /*30*/ char field_30; /*31*/ char field_31; /*32*/ char field_32; /*33*/ char field_33; /*34*/ char field_34; /*35*/ char _pad35[0x2]; /*37*/ char field_37; /*38*/ char _pad38[0x8]; /**outrun related, at some point it's compared with amount of outruns raced*/ /*40*/ char field_40; /*41*/ char field_41; /*42*/ short field_42; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ char _pad4C[0x3]; /*4F*/ char __end ; }; EXPECT_SIZE(struct CareerStageSettings, 0x50);

size dynamic, but minimum 64?

struct

Marker

{ /*21 members, size 51h*/ /*0*/ enum MARKER_TYPE type; /*4*/ float floatField_4; /*8*/ float floatField_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /**for type neighbourhood: hash of name for type engage tip: hash of sms name for money: hash of sound effect to play!?*/ /*30*/ unsigned int hash; /*34*/ int field_34; /*38*/ int field_38; /*3C*/ int field_3C; /**usually 4-14*/ /*40*/ __int16 radius; /**seems like there are marker subtypes with different sizes*/ /*42*/ __int16 markerStructSize; /*44*/ float pos_x; /*48*/ float pos_y; /*4C*/ char _pad4C[0x4]; /*50*/ char field_50; }; EXPECT_SIZE(struct Marker, 0x51);
struct

C2D4

{ /*15 members, size 370h*/ /**just a dtor*/ /*0*/ void *vtable; /*4*/ int field_4; /**maybe stdcall?*/ /*8*/ void (__cdecl **[40])(int) field_8; /*A8*/ void *field_A8; /*AC*/ char field_AC; /*AD*/ char field_AD; /*AE*/ char field_AE; /*AF*/ char _padAF[0x1]; /*B0*/ int field_B0; /*B4*/ int field_B4; /*B8*/ char _padB8[0xC]; /*C4*/ int field_C4; /*C8*/ char field_C8; /*C9*/ char _padC9[0x3]; /*CC*/ int field_CC; /*D0*/ int field_D0; /*D4*/ char _padD4[0x280]; /*354*/ int field_354; /*358*/ char _pad358[0x17]; /**maybe? ctor just empties 220*4 bytes*/ /*36F*/ char __end? ; }; EXPECT_SIZE(struct C2D4, 0x370);
struct

C64C

{ /*20 members, size 314h*/ /*0*/ struct ObjectLink link; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ char _pad20[0x4]; /*24*/ int field_24; /*28*/ char _pad28[0x4]; /*2C*/ int field_2C; /*30*/ char _pad30[0x4]; /*34*/ int field_34; /*38*/ char _pad38[0x284]; /*2BC*/ int field_2BC; /*2C0*/ char _pad2C0[0x20]; /*2E0*/ int field_2E0; /*2E4*/ int field_2E4; /*2E8*/ int field_2E8; /*2EC*/ int field_2EC; /*2F0*/ int field_2F0; /*2F4*/ char _pad2F4[0x10]; /*304*/ int field_304; /*308*/ int field_308; /*30C*/ int field_30C; /*310*/ int field_310; }; EXPECT_SIZE(struct C64C, 0x314);
struct

C20

{ /*13 members, size 30h*/ /*0*/ char field_0; /*1*/ char field_1; /*2*/ char _pad2[0x2]; /*4*/ float floatField_4; /*8*/ char field_8; /*9*/ char field_9; /*A*/ char field_A; /*B*/ char field_B; /*C*/ int field_C; /*10*/ char playerName[16]; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; }; EXPECT_SIZE(struct C20, 0x30);
struct

C4

{ /*2 members, size 40Eh*/ /*0*/ char _pad0[0x60]; /**x/y writable, z doesn't seem to be writable (or needs special handling)*/ /*60*/ struct vec3 carPosition; /*6C*/ char _pad6C[0x3A0]; /*40C*/ short carAngle? ; }; EXPECT_SIZE(struct C4, 0x40E);
struct

vec3

{ /*3 members, size Ch*/ /*0*/ float x; /*4*/ float y; /*8*/ float z; }; EXPECT_SIZE(struct vec3, 0xC);

I think it's career related and I'm sick of long temp struct names so C it is.

struct

C

{ /*115 members, size 9C0h*/ /*0*/ int field_0; /**due to lack of better name*/ /*4*/ struct C4 *playerInstance; /*8*/ void *field_8; /*C*/ int field_C; /*10*/ int field_10; /**there may be max 2 instances of this struct, and this field links to the other instance*/ /*14*/ struct C *otherInstance; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ struct C20 field_20; /*50*/ int field_50; /*54*/ int field_54; /*58*/ int field_58; /*5C*/ int field_5C; /*60*/ char field_60[8]; /*68*/ char field_68[32]; /*88*/ int field_88; /*8C*/ int field_8C; /*90*/ char field_90; /*91*/ char _pad91[0x3]; /*94*/ int field_94; /*98*/ float floatField_98; /*9C*/ int field_9C; /**allocated memory, see ctor for details*/ /*A0*/ void *field_A0; /*A4*/ int field_A4; /*A8*/ float floatField_A8; /*AC*/ int field_AC; /*B0*/ int field_B0; /*B4*/ float floatField_B4; /*B8*/ int field_B8; /*BC*/ int field_BC; /*C0*/ char field_C0[64]; /*100*/ int field_100; /*104*/ char _pad104[0x4]; /*108*/ int field_108; /*10C*/ int field_10C; /*110*/ int field_110; /*114*/ char field_114; /*115*/ char _pad115[0x1B]; /*130*/ int field_130; /*134*/ int field_134; /*138*/ char _pad138[0x8]; /*140*/ int field_140; /*144*/ int field_144; /*148*/ int field_148; /*14C*/ void *floatField_14C; /*150*/ float floatField_150; /*154*/ int field_154; /*158*/ int field_158; /*15C*/ char _pad15C[0x4]; /*160*/ int field_160; /*164*/ short field_164; /*166*/ short field_166; /*168*/ short field_168; /*16A*/ char _pad16A[0x2]; /*16C*/ float floatField_16C; /*170*/ float floatField_170; /*174*/ int field_174; /*178*/ float floatField_178; /*17C*/ int field_17C; /**allocated memory, see ctor for details*/ /*180*/ void *field_180; /**allocated memory, see ctor for details*/ /*184*/ void *field_184; /*188*/ char _pad188[0x8]; /*190*/ int field_190; /*194*/ char _pad194[0x3C]; /*1D0*/ int field_1D0; /*1D4*/ char _pad1D4[0x4]; /*1D8*/ float floatField_1D8; /*1DC*/ char _pad1DC[0x34]; /*210*/ int field_210; /*214*/ int field_214; /*218*/ int field_218; /*21C*/ int field_21C; /*220*/ int field_220; /*224*/ char field_224; /*225*/ char field_225; /*226*/ char _pad226[0x2]; /*228*/ int field_228; /*22C*/ int field_22C; /*230*/ int field_230; /*234*/ int field_234; /*238*/ int field_238; /*23C*/ int field_23C; /*240*/ int field_240; /*244*/ int field_244; /*248*/ char field_248; /*249*/ char field_249; /*24A*/ char field_24A; /*24B*/ char _pad24B[0x1]; /*24C*/ int field_24C; /*250*/ int field_250; /*254*/ char _pad254[0x4]; /*258*/ int field_258; /*25C*/ int field_25C; /*260*/ int field_260; /*264*/ int field_264; /**allocated memory, see ctor for details*/ /*268*/ void *field_268; /*26C*/ char _pad26C[0x4]; /*270*/ int field_270; /*274*/ int field_274; /*278*/ int field_278; /*27C*/ char _pad27C[0x4]; /*280*/ int field_280; /*284*/ int field_284; /*288*/ int field_288; /*28C*/ char _pad28C[0x4]; /*290*/ int field_290; /*294*/ int field_294; /*298*/ float floatField_298; /*29C*/ char _pad29C[0x4]; /*2A0*/ int field_2A0; /*2A4*/ char _pad2A4[0xC]; /*2B0*/ int field_2B0; /*2B4*/ int field_2B4; /*2B8*/ int field_2B8; /*2BC*/ char _pad2BC[0x4]; /*2C0*/ int field_2C0; /*2C4*/ int field_2C4; /*2C8*/ int field_2C8; /*2CC*/ char _pad2CC[0x4]; /**allocated memory, see ctor for details*/ /*2D0*/ void *field_2D0; /*2D4*/ struct C2D4 field_2D4; /*644*/ int field_644; /*648*/ int field_648; /*64C*/ struct C64C field_64C; /*960*/ char _pad960[0x38]; /*998*/ int field_998; /*99C*/ int field_99C; /*9A0*/ char field_9A0; /*9A1*/ char field_9A1; /*9A2*/ char _pad9A2[0x2]; /**allocated memory, see ctor for details*/ /*9A4*/ void *field_9A4; /*9A8*/ char field_9A8; /*9A9*/ char _pad9A9[0x3]; /*9AC*/ int field_9AC; /*9B0*/ int field_9B0; /*9B4*/ int field_9B4; /*9B8*/ int field_9B8; /*9BC*/ char _pad9BC[0x3]; /*9BF*/ char __end ; }; EXPECT_SIZE(struct C, 0x9C0);
struct

D

{ /*9 members, size 70h*/ /*0*/ struct E *e; /*4*/ int field_4; /*8*/ char field_8; /*9*/ char _pad9[0xF]; /*18*/ float floatField_18; /*1C*/ char _pad1C[0x28]; /*44*/ struct ObjectLink link44; /*4C*/ char _pad4C[0xC]; /*58*/ int field_58; /*5C*/ char _pad5C[0x4]; /*60*/ int field_60; /*64*/ void *field_64; /*68*/ char _pad68[0x7]; /*6F*/ char __end ; }; EXPECT_SIZE(struct D, 0x70);
struct

E

{ /*1 members, size 120h*/ /*0*/ char _pad0[0x11F]; /*11F*/ char __end ; }; EXPECT_SIZE(struct E, 0x120);
struct

struct890020

{ /*2 members, size 8h*/ /*0*/ struct Marker *marker; /*4*/ float floatField4; }; EXPECT_SIZE(struct struct890020, 0x8);

Part of this data is markers, see PathsData::ReadFromBinData Markers is just section 3414A but this func loads more than that

struct

PathsData

{ /*17 members, size 4A0h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ float floatField_14; /*18*/ float floatField_18; /*1C*/ int field_1C; /*20*/ char field_20; /*21*/ char _pad21[0x1]; /*22*/ char field_22; /*23*/ char _pad23[0x1]; /*24*/ int field_24; /*28*/ char _pad28[0x40C]; /**number of entries in allMarkers, note that each entry has a dynamic size of markerStructSize*/ /*434*/ int numMarkers; /**allMarkers is loaded from binsection 3414A data, this field is the "size" field of that binsection size of allMarkers*/ /*438*/ int allMarkersSize; /*43C*/ struct Marker *allMarkers; /**note that, while this array is of size 22, entry 21 does not point to an array of markers, rather it points to where the end of the array on entry 20 is array of ptrs to markers with the arrayindex as marker type (ie markers[3] points to an array of markers with type 3*/ /*440*/ struct Marker *markers[22]; /*498*/ int field_498; /*49C*/ int field_49C; }; EXPECT_SIZE(struct PathsData, 0x4A0);
struct

NeighbourhoodName

{ /*2 members, size 8h*/ /*0*/ char *ptrName; /*4*/ unsigned int hash; }; EXPECT_SIZE(struct NeighbourhoodName, 0x8);
struct

JoyKeyData

{ /*2 members, size 8h*/ /*0*/ int keyId; /*4*/ char *name; }; EXPECT_SIZE(struct JoyKeyData, 0x8);
struct

SomeKeyData

{ /*8 members, size 20h*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ enum JOYID joyId; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; }; EXPECT_SIZE(struct SomeKeyData, 0x20);
struct

JoyHandlerData

{ /*7 members, size 1Ch*/ /*0*/ int field_0; /*4*/ int id ; /*8*/ char *name; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; }; EXPECT_SIZE(struct JoyHandlerData, 0x1C);
struct

JoystickEventNode

{ /*8 members, size 24h*/ /**offset 0*/ /*0*/ struct ObjectLink link; /*8*/ enum JOYID joyId; /*C*/ int field_C; /**minimum 4 args, arg0/arg4(joyId)/arg8/argC*/ /*10*/ int proc ; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; }; EXPECT_SIZE(struct JoystickEventNode, 0x24);

joy (joystickEventNode) related

struct

Entry8655A0

{ /*3 members, size 1C8h*/ /**element struct JoystickEventNode, offset 0*/ /*0*/ struct ObjectLink joystickEventNodeLink; /*8*/ char _pad8[0x1B0]; /*1B8*/ int field_1B8; /*1BC*/ char _pad1BC[0x8]; /*1C4*/ int field_1C4; }; EXPECT_SIZE(struct Entry8655A0, 0x1C8);
struct

Struct8383A4

{ /*5 members, size 138h*/ /*0*/ int field_0; /*4*/ char _pad4[0x28]; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ char _pad38[0xFC]; /*134*/ int field_134; }; EXPECT_SIZE(struct Struct8383A4, 0x138);
struct

Network86A388

{ /*39 members, size C8h*/ /*0*/ int vtable ; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ struct ObjectLink linkField_34; /*3C*/ struct ObjectLink linkField_3C; /*44*/ struct Network44 *network44; /*48*/ char field_48; /*49*/ char field_49; /*4A*/ char field_4A; /*4B*/ char field_4B; /*4C*/ int field_4C; /*50*/ char serverName[64]; /*90*/ int field_90; /*94*/ void (__cdecl *field_94)(int, int); /**on allocation, same as ptrfield 8B7CAC*/ /*98*/ int field_98; /*9C*/ int field_9C; /*A0*/ char field_A0; /*A1*/ char field_A1; /*A2*/ char field_A2; /*A3*/ char field_A3; /*A4*/ int field_A4; /*A8*/ int field_A8; /*AC*/ int field_AC; /*B0*/ int field_B0; /*B4*/ int field_B4; /*B8*/ int field_B8; /*BC*/ int field_BC; /*C0*/ int field_C0; /*C4*/ int field_C4; }; EXPECT_SIZE(struct Network86A388, 0xC8);
struct

Network44

{ /*35 members, size 1988h*/ /*0*/ struct Network0 *network0; /*4*/ struct Network8B7CAC *icmpSocketWrapper; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /**big number (40000, 60000)*/ /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ char _pad30[0x10]; /**some string, set to KEY=VALUE thing on init*/ /*40*/ char field_40[256]; /**actual length unknown, a KEY=VALUE string*/ /*140*/ char keyValueString61757464[256] ; /*240*/ char _pad240[0x100]; /**actual length unknown*/ /*340*/ char keyValueString70657264[256] ; /*440*/ char _pad440[0x100]; /**actual length unknown, KEY=VALUE string, this one should have TOSURL,GAMES_PER_UPDATE,NEWSURL,RESPONSE_GRAPH*/ /*540*/ char keyValueString636F6E66[256] ; /*640*/ char _pad640[0x704]; /**actual length unknown*/ /*D44*/ int keyValueString75736572_61636374 ; /*D48*/ char _padD48[0x10]; /**994 bytes zero inited from here*/ /*D58*/ char keyValueString73656C66[8] ; /**actual length unknown*/ /*D60*/ char keyValueString70657273 ; /*D61*/ char _padD61[0x3AF]; /**actual length unknown*/ /*1110*/int keyValueString726F6F6D ; /*1114*/char _pad1114[0x4C]; /*1160*/struct Network1160 network1160[36]; /*1430*/char _pad1430[0x4]; /*1434*/int field_1434; /*1438*/int field_1438; /*143C*/char _pad143C[0x5C]; /*1498*/struct Network1498 network1498[32]; /*1618*/struct Network1618 *network1618; /*161C*/int field_161C; /**zero at alloc?*/ /*1620*/int field_1620; /**int?,char**/ /*1624*/int procSomething ; /*1628*/int field_1628; /*162C*/int field_162C; /*1630*/char _pad1630[0x4]; /*1634*/int field_1634; /*1638*/char _pad1638[0x2F0]; /**actual length unknown*/ /*1928*/char keyValueString73657276[8] ; /*1930*/char _pad1930[0x18]; /*1948*/char field_1948; /*1949*/char field_1949; /*194A*/char _pad194A[0x3A]; /*1984*/int field_1984; }; EXPECT_SIZE(struct Network44, 0x1988);
struct

Network1498

{ /*3 members, size Ch*/ /*0*/ int field_0; /*4*/ int proc3 ; /*8*/ int field_8; }; EXPECT_SIZE(struct Network1498, 0xC);
struct

Network1618

{ /*23 members, size 5Ch*/ /*0*/ int field_0; /*4*/ int field_4; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ int field_38; /*3C*/ int field_3C; /*40*/ int field_40; /*44*/ int field_44; /*48*/ int field_48; /*4C*/ int field_4C; /*50*/ int field_50; /*54*/ int field_54; /*58*/ int field_58; }; EXPECT_SIZE(struct Network1618, 0x5C);
struct

Network1160

{ /*5 members, size 14h*/ /*0*/ int ptrField_0 ; /*4*/ int ptrField_4 ; /*8*/ int field_8; /*C*/ int field_C; /*10*/ int field_10; }; EXPECT_SIZE(struct Network1160, 0x14);
struct

Network0

{ /*20 members, size 2F0h*/ /*0*/ int network00 ; /*4*/ char _pad4[0x2]; /*6*/ char field_6; /*7*/ char _pad7[0x1]; /*8*/ int field_8; /*C*/ int field_C; /*10*/ char _pad10[0x4]; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ char _pad1C[0x3C]; /*58*/ int field_58; /*5C*/ int field_5C; /*60*/ int field_60; /*64*/ int field_64; /*68*/ int field_68; /*6C*/ int field_6C; /**alloced mem*/ /*70*/ int ptrField_70 ; /*74*/ int field_74; /*78*/ int field_78; /**alloced mem*/ /*7C*/ int ptrField_7C ; /*80*/ char _pad80[0xC]; /*8C*/ short field_8C; /*8E*/ short field_8E; /*90*/ char _pad90[0x54]; /*E4*/ int field_E4; /*E8*/ char _padE8[0x204]; /*2EC*/ int field_2EC; }; EXPECT_SIZE(struct Network0, 0x2F0);
struct

Network00

{ /*10 members, size 124h*/ /*0*/ struct SocketWrapper *socketWrapper; /*4*/ struct Network00_4 *network00_4; /**(from cheatengine) might be hostname to connect to?*/ /*8*/ int field_8; /*C*/ char _padC[0xFC]; /*108*/ int field_108; /*10C*/ int field_10C; /*110*/ int field_110; /*114*/ int field_114; /**only sends or receives when between (inclusive) 10 & 16*/ /*118*/ int someState ; /*11C*/ int field_11C; /*120*/ struct Network120 *network120; }; EXPECT_SIZE(struct Network00, 0x124);
struct

Network00_4

{ /*3 members, size Ch*/ /*0*/ int field_0; /*4*/ int field_4; /**1 arg, its own struct?*/ /*8*/ int proc ; }; EXPECT_SIZE(struct Network00_4, 0xC);
struct

Network120

{ /*43 members, size 88C0h*/ /*0*/ int bytesSent ; /*4*/ int bytesToSend ; /**how long is this*/ /*8*/ char sendDataBuffer[200] ; /*D0*/ char _padD0[0x3F38]; /**maybe packet sequence number?*/ /*4008*/int field_4008; /*400C*/int numberBytesReceived ; /*4010*/int numberBytesToReceive ; /*4014*/char _pad4014[0x4]; /*4018*/int recvDataBuffer ; /*401C*/char _pad401C[0x3FFC]; /*8018*/int field_8018; /*801C*/int field_801C; /*8020*/int field_8020; /*8024*/int field_8024; /*8028*/int field_8028; /*802C*/char _pad802C[0x7C]; /**a number?*/ /*80A8*/int field_80A8; /*80AC*/int field_80AC; /*80B0*/char _pad80B0[0x7C]; /*812C*/int field_812C; /*8130*/int field_8130; /*8134*/char _pad8134[0x7C]; /*81B0*/int field_81B0; /**a number*/ /*81B4*/int field_81B4; /**initialized to 48*1*/ /*81B8*/char field_81B8; /**initialized to 48*2*/ /*81B9*/char field_81B9; /**initialized to 48*3*/ /*81BA*/char field_81BA; /**initialized to 48*4*/ /*81BB*/char field_81BB; /**initialized to 48*5*/ /*81BC*/char field_81BC; /**initialized to 48*6*/ /*81BD*/char field_81BD; /**initialized to 48*7*/ /*81BE*/char field_81BE; /**initialized to 48*8*/ /*81BF*/char field_81BF; /**initialized to 48*9*/ /*81C0*/char field_81C0; /**initialized to 48*10*/ /*81C1*/char field_81C1; /**initialized to 48*11*/ /*81C2*/char field_81C2; /**initialized to 48*12*/ /*81C3*/char field_81C3; /**initialized to 48*13*/ /*81C4*/char field_81C4; /**initialized to 48*14*/ /*81C5*/char field_81C5; /**initialized to 48*15*/ /*81C6*/char field_81C6; /**initialized to 48*16*/ /*81C7*/char field_81C7; /*81C8*/char _pad81C8[0x8]; /*81D0*/int field_81D0; /*81D4*/int field_81D4; /*81D8*/char _pad81D8[0x3D4]; /*85AC*/int field_85AC; /*85B0*/int field_85B0; /*85B4*/char _pad85B4[0x80]; /*8634*/int field_8634; /*8638*/int field_8638; /*863C*/char _pad863C[0x80]; /*86BC*/int field_86BC; /*86C0*/char _pad86C0[0xFC]; /*87BC*/int field_87BC; /*87C0*/char _pad87C0[0xFC]; /*88BC*/int field_88BC; }; EXPECT_SIZE(struct Network120, 0x88C0);
struct

Network8B7CAC

{ /*8 members, size 20h*/ /*0*/ int sizeInDwords ; /*4*/ int field_4; /*8*/ int field_8; /**set to GetTickCount on allocation (system uptime)*/ /*C*/ int field_C; /**set to GetTickCount on allocation (system uptime)*/ /*10*/ int field_10; /*14*/ int field_14; /*18*/ int field_18; /*1C*/ struct SocketWrapperWrapper *icmpSocketWrapperWrapper; }; EXPECT_SIZE(struct Network8B7CAC, 0x20);
struct

Network89CF48

{ /*53 members, size 1841h*/ /**some state? 0-6*/ /*0*/ int field_0; /*4*/ int field_4; /**24 bytes nulled on init*/ /*8*/ char field_8[24]; /*20*/ char field_20; /*21*/ char field_21; /*22*/ char field_22; /*23*/ char field_23; /*24*/ int field_24; /**32 bytes nulled on init*/ /*28*/ char field_28[32]; /*48*/ char field_48; /*49*/ char field_49; /*4A*/ char field_4A; /*4B*/ char field_4B; /*4C*/ int field_4C; /*50*/ int field_50; /*54*/ int field_54; /*58*/ int field_58; /*5C*/ int field_5C; /*60*/ int field_60; /**96 bytes nulled on init*/ /*64*/ char field_64[96]; /*C4*/ int field_C4; /*C8*/ int field_C8; /*CC*/ int field_CC; /*D0*/ int field_D0; /*D4*/ int field_D4; /*D8*/ int field_D8; /*DC*/ int field_DC; /**24 bytes nulled on init*/ /*E0*/ char field_E0[24]; /**24 bytes nulled on init*/ /*F8*/ char field_F8[24]; /*110*/ int field_110; /*114*/ int field_114; /*118*/ char field_118; /*119*/ char field_119; /*11A*/ char field_11A; /*11B*/ char field_11B; /*11C*/ struct Quantizer141 carSlotIDQuantizer; /*25D*/ char _pad25D[0x3]; /*260*/ struct Quantizer141 carTypeQuantizer; /*3A1*/ char _pad3A1[0x3]; /*3A4*/ struct Quantizer141 partIndexQuantizer; /*4E5*/ char _pad4E5[0x3]; /*4E8*/ struct Quantizer141 int2bitQuantizer; /*629*/ char _pad629[0x3]; /*62C*/ struct Quantizer141 int4bitQuantizer; /*76D*/ char _pad76D[0x3]; /*770*/ struct Quantizer149 floatTimeQuantizer; /*8B9*/ char _pad8B9[0x3]; /*8BC*/ struct Quantizer149 positionQuantizerX; /*A05*/ char _padA05[0x3]; /*A08*/ struct Quantizer149 positionQuantizerY; /*B51*/ char _padB51[0x3]; /*B54*/ struct Quantizer149 positionQuantizerZ; /*C9D*/ char _padC9D[0x3]; /*CA0*/ struct Quantizer149 velocityQuantizer; /*DE9*/ char _padDE9[0x3]; /*DEC*/ struct Quantizer149 matrixQuantizer; /*F35*/ char _padF35[0x3]; /*F38*/ struct Quantizer149 accelerationQuantizer; /*1081*/char _pad1081[0x3]; /*1084*/struct Quantizer149 avelocityQuantizer; /*11CD*/char _pad11CD[0x3]; /*11D0*/struct Quantizer149 controlQuantizer; /*1319*/char _pad1319[0x3]; /*131C*/struct Quantizer149 rpmQuantizer; /*1465*/char _pad1465[0x3]; /*1468*/struct Quantizer149 hydraulicQuantizer; /*15B1*/char _pad15B1[0x3]; /*15B4*/struct Quantizer149 nosQuantizer; /*16FD*/char _pad16FD[0x3]; /*1700*/struct Quantizer141 gearQuantizer; }; EXPECT_SIZE(struct Network89CF48, 0x1841);
struct

Quantizer141

{ /*7 members, size 141h*/ /*0*/ char name[300]; /*12C*/ int field_12C; /*130*/ int field_130; /*134*/ int field_134; /*138*/ int floatField_138; /*13C*/ int floatField_13C; /*140*/ char field_140; }; EXPECT_SIZE(struct Quantizer141, 0x141);
struct

Quantizer149

{ /*3 members, size 149h*/ /*0*/ struct Quantizer141 __parent; /*141*/ char _pad141[0x3]; /*144*/ int field_144; /*148*/ char field_148; }; EXPECT_SIZE(struct Quantizer149, 0x149);
struct

SocketWrapper

{ /*23 members, size 50h*/ /*0*/ struct SocketWrapper *previousSocketWrapper; /*4*/ int field_4; /*8*/ int socket_af; /*C*/ int socket_type; /*10*/ int socket_protocol; /*14*/ char field_14; /*15*/ char field_15; /*16*/ char field_16; /*17*/ char field_17; /*18*/ SOCKET socket; /*1C*/ int field_1C; /*20*/ int field_20; /*24*/ int field_24; /*28*/ int field_28; /*2C*/ int field_2C; /*30*/ int field_30; /*34*/ int field_34; /*38*/ int field_38; /**some number, values seen: 2*/ /*3C*/ int field_3C; /*40*/ int field_40; /**maybe buffer size? values seen: 5000*/ /*44*/ int field_44; /*48*/ struct SocketWrapperWrapper *socketWrapperWrapper; /**not a __thiscall even though first arg is usually this*/ /*4C*/ int (__cdecl *func)(struct SocketWrapper *, int, struct SocketWrapperWrapper *); }; EXPECT_SIZE(struct SocketWrapper, 0x50);
struct

SocketWrapperWrapper

{ /*7 members, size 3Ch*/ /*0*/ struct SocketWrapper *socketWrapper; /*4*/ int field_4; /*8*/ int field_8; /*C*/ struct CriticalSectionWrapper_3 criticalSectionWrapper; /*30*/ int ptrField30 ; /*34*/ int field_34; /*38*/ int field_38; }; EXPECT_SIZE(struct SocketWrapperWrapper, 0x3C);
struct

CriticalSectionWrapper_3

{ /*4 members, size 24h*/ /*0*/ int lastAccessedThreadId; /*4*/ int numActiveLocks; /*8*/ int isInCriticalSection; /*C*/ struct CRITICAL_SECTION criticalSection; }; EXPECT_SIZE(struct CriticalSectionWrapper_3, 0x24);
struct

NetworkRegionStuff

{ /*5 members, size 14h*/ /*0*/ char *regionName; /*4*/ char *regionCode; /*8*/ int someNumber ; /*C*/ char *someSuffix; /*10*/ char *someCode; }; EXPECT_SIZE(struct NetworkRegionStuff, 0x14);
struct

sockaddr_in

{ /*4 members, size 10h*/ /*0*/ __int16 sin_family; /*2*/ u_short sin_port; /*4*/ struct in_addr sin_addr; /*8*/ char sin_zero[8]; }; EXPECT_SIZE(struct sockaddr_in, 0x10);
struct

in_addr

{ /*1 members, size 4h*/ /*0*/ struct in_addr::$C13EC994467D6E67044F092615EC7EA9 S_un; }; EXPECT_SIZE(struct in_addr, 0x4);
union

in_addr::$C13EC994467D6E67044F092615EC7EA9

{ /*3 members, size 4h*/ /*0*/ struct in_addr::$C13EC994467D6E67044F092615EC7EA9::$01C175C1F0716DCA00314EDD79DBC0A0 S_un_b; /*0*/ struct in_addr::$C13EC994467D6E67044F092615EC7EA9::$4DE764E669F663DACA3CBFDE73714CB5 S_un_w; /*0*/ int S_addr ; }; EXPECT_SIZE(struct in_addr::$C13EC994467D6E67044F092615EC7EA9, 0x4);
struct

in_addr::$C13EC994467D6E67044F092615EC7EA9::$01C175C1F0716DCA00314EDD79DBC0A0

{ /*4 members, size 4h*/ /*0*/ u_char s_b1; /*1*/ u_char s_b2; /*2*/ u_char s_b3; /*3*/ u_char s_b4; }; EXPECT_SIZE(struct in_addr::$C13EC994467D6E67044F092615EC7EA9::$01C175C1F0716DCA00314EDD79DBC0A0, 0x4);
struct

in_addr::$C13EC994467D6E67044F092615EC7EA9::$4DE764E669F663DACA3CBFDE73714CB5

{ /*2 members, size 4h*/ /*0*/ u_short s_w1; /*2*/ u_short s_w2; }; EXPECT_SIZE(struct in_addr::$C13EC994467D6E67044F092615EC7EA9::$4DE764E669F663DACA3CBFDE73714CB5, 0x4);
struct

CRITICAL_SECTION

{ /*6 members, size 18h*/ /*0*/ PRTL_CRITICAL_SECTION_DEBUG DebugInfo; /*4*/ LONG LockCount; /*8*/ LONG RecursionCount; /*C*/ HANDLE OwningThread; /*10*/ HANDLE LockSemaphore; /*14*/ ULONG_PTR SpinCount; }; EXPECT_SIZE(struct CRITICAL_SECTION, 0x18);
struct

vec2

{ /*2 members, size 8h*/ /*0*/ float x; /*4*/ float y; }; EXPECT_SIZE(struct vec2, 0x8);