nfsu2-re

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

Functions (1704)

4012B0

??SomeUpdatePosition

401650 int __stdcall

ThiscallProcForInstances

(void *instances, int instanceSize, int num, void (__thiscall *proc)(void *));
4017E0 struct MenuCarInstance_10_2E0 *__thiscall

MenuCarInstance::Get_10_2E0

(struct MenuCarInstance *this);

maybe for console enable check? see xref to MainWndProc sometimes also string passed: 600976

4022C0

nullsub_1_maybe_console_check_enabled?

pops 1 arg

4031C0

nullsub_3

4035D0 void __cdecl

LoadAIStuff

();
408200 int __cdecl

LoadBinSection34B00

(struct BinSection *bindata);
408220 int __cdecl

UnloadBinSection34B00

(struct BinSection *bindata);
40A460 int __cdecl

LoadBinSection3A000

(struct BinSection *bindata);
40A4A0 int __cdecl

UnloadBinSection3A000

(struct BinSection *bindata);
40C910 void __thiscall

MenuCarInstance::ctor

(struct MenuCarInstance *this);
40CB20

return1

411740 void __thiscall

C2D4::dtor?

(struct C2D4 *this);

not an exact copy

4133D0 void __thiscall

s735::CopyFrom

(struct s735 *this, struct s735 *from);

not an exact copy

413440 int __thiscall

MenuCarInstance::CopyFrom

(struct MenuCarInstance *this, struct MenuCarInstance *from);
4189F0 void __thiscall

C2D4::ctor

(struct C2D4 *this, int);
430560 int __thiscall

Career::430560

(struct Career *this);

Called by CreateAnim_CNFSAnimBankPool

431380 void __cdecl

CreateAnim_CNFSAnimBankPool

();
4313B0 void __cdecl

CreateAnimCtrlPool

();

Called by CreateAnim_CNFSAnimBankPool

4314E0 void __cdecl

CreateAnim_CAnimSkeletonPool

();

Called by CreateAnim_CNFSAnimBankPool

431580 void __cdecl

CreateAnim_CAnimPartPool

();
431870 int __cdecl

LoadBinSection80037050

(struct BinSection *bindata);
4318D0 int __cdecl

UnloadBinSection80037050

(struct BinSection *bindata);
432080 int __cdecl

LoadBinSection37140

(struct BinSection *bindata);
4320C0 int __cdecl

UnloadBinSection37140

(struct BinSection *bindata);
4325C0 int __cdecl

UnloadBinSection80037020

(struct BinSection *bindata);

Uses anim_CNFSAnimBankPool

4348F0 int __cdecl

LoadBinSection0E34010

(struct BinSection *bindata);
4349A0 int __cdecl

UnloadBinSection0E34010

(struct BinSection *bindata);

Uses anim_CAnimSkeletonPool

434E10 int __cdecl

LoadBinSection0E34009

(struct BinSection *bindata);

TODO but most likely: this is struct of link (prev, next), for each, call their destructor (vtable entry 0)

4358E0

FreeAllLinks

435A50 int __cdecl

UnloadBinSection37110

(struct BinSection *bindata);
435A90 int __cdecl

LoadBinSection37080

(struct BinSection *bindata);
4365B0 int __cdecl

UnloadBinSection0E34009

(struct BinSection *bindata);
4377F0 int __cdecl

LoadBinSection80037020

(struct BinSection *bindata);
4381B0 int __cdecl

LoadBinSection37100

(struct BinSection *bindata);
4385B0 void __thiscall

WorldAnimStuff::CreatePools?

(struct WorldAnimStuff *this);
438720 int __cdecl

UnloadBinSection37150

(struct BinSection *bindata);
438C20 int __cdecl

UnloadBinSection37080

(struct BinSection *bindata);
438C60 int __cdecl

UnloadBinSection37090

(struct BinSection *bindata);
439D70 int __cdecl

UnloadBinSection37100

(struct BinSection *bindata);
439EA0 void __thiscall

WorldAnimStuff::ctor

(struct WorldAnimStuff *this);
43A1F0 int __cdecl

LoadBinSection37150

(struct BinSection *bindata);
43A260 int __cdecl

LoadBinSection37110

(struct BinSection *bindata);
43A460 int __cdecl

LoadBinSection37090

(struct BinSection *bindata);
43BD50

_int3

43BDF0

??perfcountertime

43BE60 struct ObjectLink *__thiscall

ObjectLink::GetObjectAtIndex

(struct ObjectLink *this, int index);

Nop handler that returns 1 if binsection->header is 0.

43C0A0 int __cdecl

LoadUnloadBinSection0

(struct BinSection *binsection);
int magic, index;

magic = handler.magic;
index = 0x3F & ((magic >> 0x6) + (magic + (magic >> 0xC)));
this->value = handler;
this->nextEntry = binSectionMagicMap[index];
binSectionMagicMap[index] = this;
numBinSectionLoadFunctionsInMagicMapBucket++;
43C0B0 void __thiscall

BinSectionMagicMapEntry::RegisterBinSectionHandler

(struct BinSectionMagicMapEntry *this, struct BinSectionHandler handler);

Used in LoadBinSection and UnloadBinSection.

struct BinSectionMagicMapEntry *entry;
int index;
index = 0x3F & ((magic >> 0x6) + (magic + (magic >> 0xC)));
entry = binSectionMagicMap[index];
while (entry) {
        if (entry->value.magic == magic) {
                return entry;
        }
        entry = entry->nextEntry;
}
return NULL;
43C100 struct BinSectionMagicMapEntry *__cdecl

FindBinSectionHandler

(int binMagic);
43C1C0 int __cdecl

RandomInt

(int maxExclusive);
43C1F0 float __cdecl

RandomFloat

(float maxExclusive);
43CAE0 int __cdecl

func

(int, int);

Called once, from AllocateAndInitPool.

struct Pool *pool;
struct PoolEntry *entry;
struct PoolEntry *next;
int idx;

pool = this;
do {
        pool->firstAvailableElement = NULL;
        if (pool->elementAmount) {
                next = (void*) ((char*) pool + sizeof(struct Pool));
                pool->firstAvailableElement = (void*) next;
                for (idx = pool->elementAmount - 1; idx >= 0; idx--) {
                        entry = next;
                        next += pool->elementSize;
                        entry->nextEntry = next;
                }
                next->nextEntry = 0;
        }
        pool = pool->nextLinkedPool;
} while (pool);
43CD40 void __thiscall

Pool::Init

(struct Pool *this);

returns -1 when not in this pool (or any linked pools).

43CD80 int __thiscall

Pool::GetIndexOfEntry

(struct Pool *this, struct PoolEntry *entry);

Mark the entry as free again. Returns the amount of used entries in the pool. Same as UngetPoolEntry, but a thiscall.

43CDF0 int __thiscall

Pool::UngetEntry

(struct Pool *this, struct PoolEntry *entry);

generic IsPointInRangeOfPoint, but this function is only used by marker func PathsData::FindMarkerAtPosWithTypeAfterIndex, hence its name radius is always a radius, so it's usually 4-14

43D890 int __cdecl

IsMarkerInRange

(struct vec2 *position, struct vec2 *markerPosition, int radius);

Case sensitive hash function. see also cshashWithStartValue and cihash

43DB50 unsigned int __cdecl

cshash

(char *str);

Like cshash, but starts with given startValue instead of -1. TODO where used? and why

43DB80 unsigned int __cdecl

cshashWithStartValue

(char *str, unsigned int startValue);
43DBB0 int __cdecl

strlenWithNullcheck

(char *str);
43DBD0 int __cdecl

strcpy

(char *dest, char *src);
43DC00 void __cdecl

strncpy

(char *dst, char *src, int maxlen);
43DC30 int __cdecl

strcmp

(char *a, char *b);
43DC60 int __cdecl

strncmp

(char *a, char *b, int maxlen);
43DCC0 int __cdecl

stricmp

(char *a, char *b);

Functionally equivalent to strcpy(dest, src1); strcpy(dest + strlen(src1), src2);.

43DDA0 void __cdecl

strcpycat

(char *dest, char *src1, char *src2);

Uses sign extension. See also LanguageConversionTable::StrcpyCharToWchar and LanguageAwareStrcpyCharToWchar.

43E000 void *__cdecl

NaiveStrcpyCharToWchar

(wchar_t *dest, char *src);

always returns 0, makes no sense

43E620

nopReturn0

goes through all previous entries from this and sort based on return result of given function

43E650 int __thiscall

PoolEntry::SortAllPreviousEntries?

(struct PoolEntry *this, int (__cdecl *func)(struct PoolEntry *a, struct PoolEntry *b));
43E950 int __cdecl

bPrintf

(char *dst, char *format, void *parameter);

like Pool::GetNextFreeItem except doesn't check if pool needs to be extended if no entries are left, and doesn't check if entry needs to be zero inited?

43F8F0 struct PoolEntry *__cdecl

PoolGetNextFreeItemRaw

(struct Pool *pool);

Same as Pool::UngetEntry, but a cdecl.

43F920 int __cdecl

UngetPoolEntry

(struct Pool *pool, struct PoolEntry *entry);

Calls bPrintf but does some stuff with QueryPerformanceCounter before and after, I'm assuming it times. Seems to add the time spent to _TimeSpentInFormatWithSinglePlaceholder, and increments _FormatWithSinglePlaceholderCallCount every time this func is called.

43FBC0 int __cdecl

FormatWithSinglePlaceholderPtrTimed

(char *dst, char *format, void *parameterPtr);
43FC80

SomeAlloc_1

does more parameters, but unsure how that works

4400D0 int __cdecl

FormatWithSinglePlaceholderValueTimed_0

(char *dest, char *format, int parameter);

TODO, seems to check the string to determine how to alloc? somestring arg compared with RCMP::chunkbuff?

440390 int __cdecl

SomeAlloc?

(int size, int somestring, int, int);
440540 int __cdecl

SomeFree

(void *ptr);

Called by init_function_77B670.

this->link.prev = &this->link;
this->link.next = &this->link;
this->inited = 1;
4407B0 void __thiscall

PoolControl::Init

(struct PoolControl *this);
440820 int __cdecl

SomeAllocWrapper

(int size, int);
4408A0

ExecuteIncludeScriptCommand

Uses SomeAlloc? to allocate memory, calls Pool::Init. TODO, has one more XREF

440B40 struct Pool *__cdecl

AllocateAndInitPool

(int elementSize, int elementAmount, char *name, int unknown);

Only called by Pool::GetNextFreeItem? Implementation nfsu2-re-hooks/replace-440BB0-Pool__Extend.c

440BB0 int __thiscall

Pool::Extend

(struct Pool *this, int elementAmount);

see also PoolGetNextFreeItemRaw

440D40 struct PoolEntry *__thiscall

Pool::GetNextFreeItem

(struct Pool *this);

Frees pool and all its linked pools, remove the pool from the link in struct PoolControl.

440DA0 void __thiscall

PoolControl::DeletePool

(struct PoolControl *this, struct Pool *pool);

Calls AllocateAndInitPool. Implementation nfsu2-re-hooks/replace-440DF0-CreatePool.c

440DF0 struct Pool *__cdecl

CreatePool

(int elementSize, int elementAmount, char *name, int unknown);
pools->PoolControl::DeletePool(pool);
440E40 int __cdecl

DeletePool

(struct Pool *pool);

Pool::GetNextFreeItem but wrapped in an cdecl.

440E50 struct PoolEntry *__cdecl

PoolGetNextFreeItem_cdeclwrapper

(struct Pool *pool);
440E60

CreatebPNodeSlotPool

440EC0

GetNextbPNodeSlotPoolFreeItem

44AB60 int __cdecl

LoadBinSection8003B200_8003B201_8003B202

(struct BinSection *bindata);
44EFE0

UpdateCamera

44F2B0

RegisterDebugCameraJoys3

451100

RegisterDebugCameraJoys2

452E90 int __cdecl

UnloadBinSection8003B200_8003B201_8003B202

(struct BinSection *bindata);
4533F0

RegisterDebugCameraJoys

458340 struct CareerShop *__thiscall

Career::458340

(struct Career *this);
458520 void __thiscall

SoundEffectSystem::PlaySound?

(struct SoundEffectSystem *this, int soundId);
461550 void __cdecl

ptrsomefunc

(void *);
465180 int __cdecl

funcptr

(int);

doesn't actually print; formats it into audioDebugString (as long as arg0 is non-zero)

4691C0 void __cdecl

DebugPrint4691C0

(int doPrint, char *format, void *param);

empties and frees all entries, entries where their link is at +10h

479100 void __cdecl

ObjectLink::EmptyAndFreeAll_Offset10

(struct ObjectLink *this);
47BC30 int __cdecl

LoadBinSection8003B500

(struct BinSection *bindata);

Does a function call on soundEffectSystem?.

482D20 int __cdecl

UnloadBinSection8003B500

(struct BinSection *bindata);
4888A0

RenderWorld_

488B60

??SetSomeByteFlagsFromStruct_ecx28_29

488B70

??GetSomeByteFlagFromStruct_ecx28

48A280 int __cdecl

LoadBinSection3B700

(struct BinSection *bindata);
48A2B0 int __cdecl

UnloadBinSection3B700

(struct BinSection *bindata);

returns d at requested index

48B1E0 struct D *__cdecl

GetDByIndex

(int index);
48B4A0 int __cdecl

LoadBinSection34202

(struct BinSection *bindata);
48B740 int __cdecl

UnloadBinSection34202

(struct BinSection *bindata);
48E070 int __cdecl

LoadBinSection135200_80135100_80135000

(struct BinSection *binsection);
48E270 int __cdecl

UnloadBinSection135200_80135100_80135000

(struct BinSection *binsection);
48F7A0

Render3DLODPoles??

loads a texture maybe or checks if a texture is loaded somewhere maybe, return hash to use for struct UIElement.textureHashOrMovieName

4901D0 unsigned int __cdecl

GetOrLoadTextureMaybe

(unsigned int hash, int, int);
491860

RenderLightReflectionsOnRoad

491940 void __thiscall

D::ctor

(struct D *this);
491C70 int __cdecl

LoadBinSection80035000_80035010_35021_35020

(struct BinSection *bindata);
491D50 int __cdecl

UnloadBinSection80035000_80035010_35021_35020

(struct BinSection *bindata);
494060 int __cdecl

LoadBinSection80134000

(struct BinSection *binsection);
4940E0 int __cdecl

UnloadBinSection80134000

(struct BinSection *binsection);
494EA0 int __cdecl

LoadBinSectionB3300000_B332000_B0300100

(struct BinSection *binsection);
495040 int __cdecl

UnloadBinSectionB3300000_B332000_B0300100

(struct BinSection *binsection);
495240 struct CarCollectionWithPointers *__thiscall

ProfileData::GetCarCollection

(struct ProfileData *this, int playerIndex);

return this->field_8704 ? this->field_8710 : 0;

495270 int __thiscall

Career::495270

(struct Career *this);

return this->field_8704 ? this->field_8714 : 0;

495290 int __thiscall

Career::495290

(struct Career *this);

Hashes str and delegates to FindUILabelByHash.

4953C0 struct UILabel *__cdecl

FindUILabelByName

(char *fngName, char *str);
4953E0 struct UIElementType1 *__cdecl

FindUIElementType1ByName

(char *fngName, char *str);
495460 int __cdecl

SetUILabelByHashLanguageString

(char *fngName, unsigned int hash, unsigned int languageString);

Uses cihash.

495490 int __cdecl

SetUILabelByNameLanguageString

(char *fngName, char *name, unsigned int languageString);

Uses cihash.

4954C0 int __cdecl

HideUIElementAndChildrenByName

(char *fngName, char *name);
4954E0 void __cdecl

HideUIElementAndChildrenByHash

(char *fngName, unsigned int hash);

Uses cihash.

495500 int __cdecl

ShowUIElementAndChildrenByName

(char *fngName, char *name);
495520 void __cdecl

ShowUIElementAndChildrenByHash

(char *fngName, unsigned int hash);
495810 void __thiscall

ScrollingThing::ApplyBlinkAnimationToLeftArrowIfNotAlready

(struct ScrollingThing *this);
495850 void __thiscall

ScrollingThing::ApplyBlinkAnimationToRightArrowIfNotAlready

(struct ScrollingThing *this);
495B10

CribRewardOptionsMainFNGObject::MessageHandler

495C40

RewardsSponsorFNGObject::MessageHandler

495D30

CareerShowSponsorSelectScreen?

495F00 int __thiscall

CareerCarLotFNGObject::495F00

(struct CareerCarLotFNGObject *this, int);

sets numUnlockedAndFreeInventorySlots and numUnlockedInventorySlots

495F70 void __thiscall

CareerCarLotFNGObject::CountAvailableInventorySlots

(struct CareerCarLotFNGObject *this);

0 if not found but 0 is also a possible slot!

495FD0 int __thiscall

CareerCarLotFNGObject::GetFirstUnlockedUnusedCareerCarSlotIndex

(struct CareerCarLotFNGObject *this);

hashOfCareerSlot like CAREER_SLOT_2 stockCarHash like STOCK_PEUGEOT (it's not really _buying_ since cars are always free)

496050 int __thiscall

CareerCarLotFNGObject::BuyCar

(struct CareerCarLotFNGObject *this, unsigned int hashOfCareerSlot, unsigned int stockCarHash);
496080 void __thiscall

CareerCarLotFNGObject::InitializeProgressBars

(struct CareerCarLotFNGObject *this);
496160 void __thiscall

CareerCarLotFNGObject::UpdateAccelerationTopspeedHandlingProgressBars

(struct CareerCarLotFNGObject *this);
497040 int __thiscall

StatusRegionFNGObject::497040

(struct StatusRegionFNGObject *this);

TODO check where this is called, it will be the carreer game state's keyhandler. TODO has some references to unknown fields When SmsMessageList::GetNumUnreadMessages returns 1, immediately open that message. Show mailbox otherwise.

4976B0 void __cdecl

ShowMailboxOrSingleUnreadSms

();

Gets the subject from SmsMessage::GetSubject and prepends Subject: to it (based on language). Used by SmsListEntry::ctor and EngageMessageDialogFNGObject::ctor. See nfsu2-re-hooks/replace-497760-GetSmsMessageSubjectHeader.c

497760 void __cdecl

GetSmsMessageSubjectHeader

(struct SmsMessage *sms, char *dest, int maxLength);
4977C0 void __cdecl

HideSmsMailbox

();
497850 int __thiscall

EngageMessageDialogFNGObject::ctor

(struct EngageMessageDialogFNGObject *this, struct FNGShowData *fngShowData);
497B00

EngageMessageDialogFNGObject::MessageHandler

497BF0 void __thiscall

CarSelectFNGObject::InitializeProgressBars

(struct CarSelectFNGObject *this);
497CD0 void __thiscall

CarSelectFNGObject::UpdateTopspeedAccelerationHandlingIndicators

(struct CarSelectFNGObject *this);

to use for CarCollectionWithPointers::CountAvailableCars and/or IsCarUnlocked

497DA0 int __cdecl

GetUnlockTypeToCheckBasedOnMenuState

();
497EE0 int __thiscall

CarSelectFNGObject::CountAvailableCars

(struct CarSelectFNGObject *this, enum INVENTORY_CAR_FLAGS flagsToCheck);

ui element "RaceMode_data", sets "ranked mode" label to "circuit" etc based on selected online car

497F20 void __thiscall

CarSelectFNGObject::UpdateRankedModeLabel

(struct CarSelectFNGObject *this, struct OnlineCar *onlineCar);
498070

TwoPPressStartFNGObject::MessageHandler

498F00

EngageEventDialogFNGObject::MessageHandler

499690

EngageShopDialogFNGObject::MessageHandler

499C00

EngageRaceDialogFNGObject::MessageHandler

49B740

OnLevelOfDetailChanged

49C540

PCCustomizeOptionFNGObject::MessageHandler

49C690

OptionsFNGObject::MessageHandler

49C9C0

TrailersFNGObject::MessageHandler

49C9F0

CreditsFNGObject::ctor

49CB90

DebugTestFNGObject::MessageHandler

49CBB0

WheelOptionsFNGObject::MessageHandler

49CCB0 struct OLWebOfferFNGObject *__thiscall

OLWebOfferFNGObject::ctor

(struct OLWebOfferFNGObject *this, int);

cmd is format string aCmdHttpTimeDMe, result stored in buffer downloadingHttpCommandString

49CDB0 void __cdecl

MakeAndStoreCommandStringToDownloadURL

(char *url, unsigned int languageKeyInProgress, unsigned int failureTitle, unsigned int languageKeyFailed, unsigned int languageKeyFailedButtonText);
49D1D0 struct OLNewsFNGObject *__thiscall

OLNewsFNGObject::ctor

(struct OLNewsFNGObject *this, int);
49D380

OLNewsFNGObject::MessageHandler

49D4F0

FNGINIT_UI_OL_News.fng

49D550

FNGINIT_UI_OL_WebOffer.fng

49DE10 struct OLISPConnectFNGObject *__thiscall

OLISPConnectFNGObject::ctor

(struct OLISPConnectFNGObject *this, int);
49E650

OLAgeVerifFNGObject::MessageHandler

49E780

FNGINIT_UI_OLAgeTooYoung.fng

49FAA0

OLGameRoomhostFNGObject::MessageHandler

49FD20

OLGameRoomclientFNGObject::MessageHandler

49FFA0 int __cdecl

IsFNGScreenPrintfOrChyronFEOrGarageMainOrPCHelpbar

(char *fngName);
4A0140

CloseOLOrLanScreenBackToMainMenu

4A0470

OLRankingsPersonalFNGObject::MessageHandler

4A0C30

OLFiltersFNGObject::MessageHandler

4A1690

PCOLSEARCHFNGObject::MessageHandler

4A2090

OLRankingsFNGObject::MessageHandler

4A21E0

OLViewCarFNGObject::MessageHandler

4A2C50

OLViewCareerFNGObject::MessageHandler

4A2E20

PCLANFNGObject::MessageHandler

requests scene name from career data and loads IG_PlayMovie.fng

4A3E30 void __thiscall

PostRaceFNGObject::PlayMovieIfNeeded

(struct PostRaceFNGObject *this);

sets reputation/bank value strings, type of race text (sponsor/some OL thing), pchelpbar

4A4240

PostRaceRewardFNGObject::InitUI

4A5250 struct SponsorPopupFNGObject *__thiscall

SponsorPopupFNGObject::ctor

(struct SponsorPopupFNGObject *this, int);
4A5300 void __thiscall

SponsorshipnewFNGObject::SelectedIconChanged

(struct SponsorshipnewFNGObject *this);
4A58C0 void __thiscall

GarageMainFNGObject_1D8::4A58C0

(struct GarageMainFNGObject_1D8 *this, struct UIElement *uiElement1, struct UIElement *uiElement2);
4A78B0 void __cdecl

LoadGarageMainFNGIfNotLoadedAlready

();
4A78E0 void __cdecl

UnloadGarageMainFNGIfLoaded

();
4A7D60

PauseOptionsMainFNGObject::MessageHandler

4A8010

PauseOptionsFNGObject::MessageHandler

and put it in loadingTipsFNGObject

4A83F0 void __cdecl

CreateLoadingTipsFNGObject

();
4A8630 void __cdecl

FreeBootflow

();
4A8650 struct DemoLegalFNGObject *__thiscall

DemoLegalFNGObject::ctor

(struct DemoLegalFNGObject *this, int);
4A8740

FNGINIT_MC_Background.fng

4A87E0

FNGINIT_LS_Chinese_Health.fng

4A8860 struct LSIntroFMVFNGObject *__thiscall

LSIntroFMVFNGObject::ctor

(struct LSIntroFMVFNGObject *this, int);
4A8930 struct LSEALogoFNGObject *__thiscall

LSEALogoFNGObject::ctor

(struct LSEALogoFNGObject *this, int);
4A89D0

FNGINIT_LS_EALogo.fng

4A8A30 struct LSBlankMovieFNGObject *__thiscall

LSBlankMovieFNGObject::ctor

(struct LSBlankMovieFNGObject *this);
4A8AD0

FNGINIT_LS_BlankMovie.fng

4A8B30 struct LSPSAMovieFNGObject *__thiscall

LSPSAMovieFNGObject::ctor

(struct LSPSAMovieFNGObject *this, int);
4A8C50 int __cdecl

CanUseQToExit

();
4A8C60

FNGINIT_LS_PSAMovie.fng

4A8CC0 struct LSTHXMovieFNGObject *__thiscall

LSTHXMovieFNGObject::ctor

(struct LSTHXMovieFNGObject *this, int);
4A8D90

FNGINIT_LS_THXMovie.fng

4A8DF0 struct DemoPSAFNGObject *__thiscall

DemoPSAFNGObject::ctor

(struct DemoPSAFNGObject *this, int);
4A8EC0

FNGINIT_LS_Demo_PSA.fng

4A8F50

FNGINIT_LS_Demo_ESRB.fng

4A8FD0 struct LSDemoWarningFNGObject *__thiscall

LSDemoWarningFNGObject::ctor

(struct LSDemoWarningFNGObject *this, int);
4A9080

FNGINIT_LS_Demo_Warning.fng

4A90E0 int __thiscall

LSLangSelectFNGObject::MessageHandler

(struct LSLangSelectFNGObject *this, int message, int, int, int);
4A90F0 struct LSSplashFNGObject *__thiscall

LSSplashFNGObject::ctor

(struct LSSplashFNGObject *this, int);
4A9310 void __cdecl

UnloadPCLoadingFNGIfLoaded

();
4A9330

IsPCLoadingFNGLoaded

return IsFNGLoaded("PC_Loading.fng") ? "PC_Loading.fng" : 0;

4A9340 char *__cdecl

GetPCLoadingFNGIfLoaded

();
4A9360

??EnterProfileManagerMenu

4A93E0

DeleteprofileFNGObject::MessageHandler

4A9D50 struct C4 *__cdecl

GetPlayerInstanceFromC

(struct C *c);

return B/C/D/E/F/10

4ABFE0 int __thiscall

Marker::4ABFE0

(struct Marker *this);
4AC6D0 int __cdecl

CreateMinimapPools

();
4AC730

ChyronIGFNGObject::ctor

and put it in struct836498.chyronIGFNGObject

4AC920 void __cdecl

CreateChyronIGFNGObject

();

ie go left or go right (switch between keyboard/gamepad/...) message should only be UIMSG_GO_LEFT or UIMSG_GO_RIGHT

4ACAA0 void __thiscall

OptionsPCControllerFNGObject::HandleMessageChangeActiveConfiguration

(struct OptionsPCControllerFNGObject *this, unsigned int message);
4ACBF0 void __thiscall

OptionsPCControllerFNGObject::UpdateScrollbarArrowAnimations

(struct OptionsPCControllerFNGObject *this);

columnName should be OPTION_NAME_ or OPTION_DATA_ or OPTION_DATA2_

rowidx is read from this->currentOptionIndex

4ACCA0 struct UILabel *__thiscall

OptionsPCControllerFNGObject::FindLabelAtCurrentRowForColumnName

(struct OptionsPCControllerFNGObject *this, char *columnName);
4ACCF0 void __thiscall

OptionsPCControllerFNGObject::SaveMasterElementPositions

(struct OptionsPCControllerFNGObject *this);
4ACD90 void __thiscall

OptionsPCControllerFNGObject::ResetControlBindingsToDefault

(struct OptionsPCControllerFNGObject *this);
4ACE00 void __thiscall

OptionsPCControllerFNGObject::4ACE00

(struct OptionsPCControllerFNGObject *this);

related to struct OptionsPCControllerFNGObject, updates the text of a row in the controls list

4ACF40 void __cdecl

UpdateControllerLabelText

(struct UIElement *uielement, int keyIndex, int isSecondary, int controllerIndex);

return this->field_34 == 3 && this->field_D == 1;

4AE8B0 int __thiscall

CareerRace::Is_34_3_And_D_1

(struct CareerRace *this);
4AF2C0

StartCareerFNGObject::MessageHandler

4AF3A0

CareerCribFNGObject::MessageHandler

updates scroller, car logo/badge texture, accel/spd/handl progress bars

4AFE00 void __thiscall

CareerCarLotFNGObject::UpdateUIForSelectedCar

(struct CareerCarLotFNGObject *this);

availableStockCarList is sentinel node of list with entries struct Tmp4DF9C0ListEntry

4AFF40 int __thiscall

CareerCarLotFNGObject::IsCarInAvailableStockCarList

(struct CareerCarLotFNGObject *this, int, struct InventoryCar *inventoryCar, struct ObjectLink *availableStockCarList);
4B1B60

StatusCareerFNGObject::MessageHandler

4B1C00 struct StatusRegionFNGObject *__thiscall

StatusRegionFNGObject::ctor

(struct StatusRegionFNGObject *this, int);
4B1C90

FNGINIT_UI_Status_Region.fng

4B1CF0 struct StatusDVDFNGObject *__thiscall

StatusDVDFNGObject::ctor

(struct StatusDVDFNGObject *this, int);
4B1D90

FNGINIT_UI_Status_DVD.fng

4B1F20

StatusMasterFNGObject::MessageHandler

4B2240 int __cdecl

FNGINIT_UI_EngageMessageDialog.fng

(struct FNGShowData *fngShowData);

called when selected car changes, when filter changes, ..

4B2310 void __thiscall

CarSelectFNGObject::UpdateUI

(struct CarSelectFNGObject *this);
4B2860 void __thiscall

CarSelectFNGObject::DeleteAllEntries

(struct CarSelectFNGObject *this);
4B2890 struct TwoPPressStartFNGObject *__thiscall

TwoPPressStartFNGObject::ctor

(struct TwoPPressStartFNGObject *this, int);
4B2B30

QRModeSelectFNGObject::MessageHandler

4B5260 struct EngageEventDialogFNGObject *__thiscall

EngageEventDialogFNGObject::ctor

(struct EngageEventDialogFNGObject *this, int);
4B5300 struct EngageShopDialogFNGObject *__thiscall

EngageShopDialogFNGObject::ctor

(struct EngageShopDialogFNGObject *this, int);
4B5ED0 struct ShowcaseDPADFNGObject *__thiscall

ShowcaseDPADFNGObject::ctor

(struct ShowcaseDPADFNGObject *this, int);
4B6080

OptionsMainFNGObject::MessageHandler

4B8620 struct TrailersFNGObject *__thiscall

TrailersFNGObject::ctor

(struct TrailersFNGObject *this, int);
4B8720

FNGINIT_Credits.fng

4B87A0

CreditsFNGObject::MessageHandler

4B89B0

FNGINIT_UI_DebugTest.fng

4B8BB0

OLWebOfferFNGObject::MessageHandler

passed text is used, or when zero, "connecting to lobby"

4B8EE0 void __thiscall

OLMainStruct::ShowLANOLConnectingMessage

(struct OLMainStruct *this, char *textOrNull);
4B9090

ShowOLLostConnectionDialog

4B9290 struct OLDisconnectBGFNGObject *__thiscall

OLDisconnectBGFNGObject::ctor

(struct OLDisconnectBGFNGObject *this, int);
4B9430 struct OLDisconnectFNGObject *__thiscall

OLDisconnectFNGObject::ctor

(struct OLDisconnectFNGObject *this, int);

called with param "UI_OLISPConnect.fng" on init (altho variable)

4B9650 struct OL138 *__thiscall

OL836370::GetOL138ForFngName

(struct OL836370 *this, char *str);
4B9690 void __thiscall

OL836370::ContinueToNextFNG

(struct OL836370 *this);
4B9750

FNGINIT_UI_OLISPConnect.fng

4B97D0

OLISPConnectFNGObject::MessageHandler

4B9A20

OLForgotAccountNameFNGObject::MessageHandler

4B9E80

FNGINIT_UI_OL_WebOffer2.fng

4B9EE0

OLWebOffer2FNGObject::MessageHandler

4BAA60

FNGINIT_UI_OLCreateUser_2.fng

4BAAC0

OLCreateUser2FNGObject::MessageHandler

4BB4E0

OLPassworFNGObject::MessageHandler

4BC300 struct OLPreRaceStartFNGObject *__thiscall

OLPreRaceStartFNGObject::ctor

(struct OLPreRaceStartFNGObject *this, int);
4BC520

OLPreRaceStartFNGObject::MessageHandler

4BD310 struct PCOLSEARCHFNGObject *__thiscall

PCOLSEARCHFNGObject::ctor

(struct PCOLSEARCHFNGObject *this, int);
4BDF80

OLXFindResultsFNGObject::MessageHandler

4BE2C0 struct OLChallengeFNGObject *__thiscall

OLChallengeFNGObject::ctor

(struct OLChallengeFNGObject *this, int);
4BE960 struct PCLANFNGObject *__thiscall

PCLANFNGObject::ctor

(struct PCLANFNGObject *this, int);
4BF8E0 struct PostRaceRewardFNGObject *__thiscall

PostRaceRewardFNGObject::ctor

(struct PostRaceRewardFNGObject *this, int);
4C0AA0 struct ReplayControlFNGObject *__thiscall

ReplayControlFNGObject::ctor

(struct ReplayControlFNGObject *this, int);
4C1280

FNGINIT_UI_SponsorPopup.fng

4C12E0

SponsorPopupFNGObject::MessageHandler

4C1340

SponsorshipnewFNGObject::MessageHandler

4C14C0 int __thiscall

SponsorIconScrollerIcon::IconSelected

(struct SponsorIconScrollerIcon *this, char *dialogParentFNGName, int, int, int, int);
4C1530 int __thiscall

SponsorshipnewFNGObject::4C1530

(struct SponsorshipnewFNGObject *this);
4C1730

GarageMainFNGObject_234::ctor

4C2170

PauseFNGObject::MessageHandler

4C4C90 struct LoadingTipsFNGObject *__thiscall

LoadingTipsFNGObject::ctor

(struct LoadingTipsFNGObject *this, int);
4C4EF0 struct BootflowEntry *__thiscall

Bootflow::GetEntryByFNGName

(struct Bootflow *this, char *fngName);
4C4F50

DoNextBootFlowEntry

4C5080 int __cdecl

SetFNGAsFirstBootEntryAndDoNow

(int, char *fngName);
4C50C0

FNGINIT_LS_Demo_Legal.fng

4C5120

DemoLegalFNGObject::MessageHandler

4C51F0

MCBackgroundFNGObject::MessageHandler

4C5280

LSChineseHealthFNGObject::MessageHandler

4C52D0

FNGINIT_UG_LS_IntroFMV.fng

4C5330

LSIntroFMVFNGObject::MessageHandler

4C53A0

LSBlankMovieFNGObject::MessageHandler

4C53D0

LSPSAMovieFNGObject::MessageHandler

4C5460

DemoPSAFNGObject::MessageHandler

4C54B0

DemoESRBFNGObject::MessageHandler

4C5500

FNGINIT_UG_LS_Splash.fng

4C5580

LSSplashFNGObject::MessageHandler

4C56C0 struct DiscErrorPCFngObject *__thiscall

DiscErrorPCFngObject::ctor

(struct DiscErrorPCFngObject *this, int);
4C5770

DiscErrorPCFngObject::MessageHandler

4CB180

FNGINIT_Chyron_IG.fng

4CB4B0 int __thiscall

OptionsPCControllerFNGObject::AddOptionRow

(struct OptionsPCControllerFNGObject *this, struct ControllerOptionsRelated *titleElement, struct ControllerOptionsRelated *primaryElement, struct ControllerOptionsRelated *secondaryElement);
4CB660 struct ControllerOptionsRelated *__thiscall

OptionsPCControllerFNGObject::GetItemAtIndexInTitleLink

(struct OptionsPCControllerFNGObject *this, int index);

called from OptionsPCControllerFNGObject::OnMouseActivity

4CB6B0 struct ControllerOptionsRelated *__thiscall

OptionsPCControllerFNGObject::GetOptionAtScreenPosition

(struct OptionsPCControllerFNGObject *this, float x, float y);
4CB7C0 void __thiscall

OptionsPCControllerFNGObject::DestroyOptionListElements

(struct OptionsPCControllerFNGObject *this);
4CB910 void __cdecl

OptionsPCControllerFNGObject::UpdateKeyLabelsText

(struct OptionsPCControllerFNGObject *this);

finds the index where the given struct ControllerOptionsRelated is in either the primary or secondary link. If it's found in the primary controls link: return its index, if it's found in the secondary controls link: return its index, otherwise 0

4CB970 int __thiscall

OptionsPCControllerFNGObject::GetIndexOfItemInPrimaryOrSecondaryLink

(struct OptionsPCControllerFNGObject *this, struct ControllerOptionsRelated *cor);
4CB9E0

OptionsPCControllerFNGObject::4CB9E0

4CBB60 void __thiscall

[generic_dtor

(struct SmsListEntry *this, char doFreeMem);

for example: " Total Spent On Car: " entry

namePrefix: always " "

4CC250 void __thiscall

StatusCareerFNGObject::AddEntrySimpleIntValue

(struct StatusCareerFNGObject *this, char *namePrefix, unsigned int nameLanguageKey, int value);
4CC2E0 void __thiscall

StatusCareerFNGObject::AddEntryReward

(struct StatusCareerFNGObject *this, unsigned int nameLanguageKey, int value, int max, char *namePrefix);

for total reputation and average reputation

4CC380 void __thiscall

StatusCareerFNGObject::AddEntryStageReputation

(struct StatusCareerFNGObject *this, char *stageText, float value);
4CC410 void __thiscall

StatusCareerFNGObject::AddEntryFloatValue

(struct StatusCareerFNGObject *this, unsigned int nameLanguageKey, float value, char *namePrefix);

for example, the "Overall Status" header

4CC4A0 void __thiscall

StatusCareerFNGObject::AddHeader

(struct StatusCareerFNGObject *this, unsigned int languageKey);
4CC7C0 struct SmsListEntry *__thiscall

SmsListEntry::ctor

(struct SmsListEntry *this, struct SmsMessage *sms);
4CC900 void __thiscall

SMSMailboxFNGObject::ShowSmsList

(struct SMSMailboxFNGObject *this);
4CCC10

SMSMailboxFNGObject::MessageHandler

4CCED0

FNGINIT_2P_PressStart.fng

4CE650

FNGINIT_UI_EngageEventDialog.fng

4CE6B0

FNGINIT_UI_EngageShopDialog.fng

4CE710 struct EngageRaceDialogFNGObject *__thiscall

EngageRaceDialogFNGObject::ctor

(struct EngageRaceDialogFNGObject *this, int);
4CE770 struct ShowcasePreviewFNGObject *__thiscall

ShowcasePreviewFNGObject::ctor

(struct ShowcasePreviewFNGObject *this, int);
4CF170

ShowcasePreviewFNGObject::MessageHandler

4CF5C0

FNGINIT_UI_Showcase_DPAD.fng

4CF660 struct PCCustomizeOptionFNGObject *__thiscall

PCCustomizeOptionFNGObject::ctor

(struct PCCustomizeOptionFNGObject *this, int);
4CF750 struct OptionsFNGObject *__thiscall

OptionsFNGObject::ctor

(struct OptionsFNGObject *this, int);
4CFB20

FNGINIT_UI_Trailers.fng

4CFBA0 struct WheelOptionsFNGObject *__thiscall

WheelOptionsFNGObject::ctor

(struct WheelOptionsFNGObject *this, int);
4CFE90

OLShowErrorUploadingCarInformationDialog

4D0390

FNGINIT_UI_OL_Disconnect.fng

4D03F0

FNGINIT_UI_OL_Disconnect_BG.fng

4D0470

OLDisconnectFNGObject::MessageHandler

4D0500 struct OLForgotAccountNameFNGObject *__thiscall

OLForgotAccountNameFNGObject::ctor

(struct OLForgotAccountNameFNGObject *this, int);
4D0690 struct OLEALoginFNGObject *__thiscall

OLEALoginFNGObject::Init

(struct OLEALoginFNGObject *this, int);
4D0860 struct OLSelectPersonaFNGObject *__thiscall

OLSelectPersonaFNGObject::ctor

(struct OLSelectPersonaFNGObject *this, int);
4D09A0 struct OLCreateUserFNGObject *__thiscall

OLCreateUserFNGObject::ctor

(struct OLCreateUserFNGObject *this, int);
4D1080 struct OLAgeVerifFNGObject *__thiscall

OLAgeVerifFNGObject::ctor

(struct OLAgeVerifFNGObject *this, int);
4D1100 struct OLUseExistingFNGObject *__thiscall

OLUseExistingFNGObject::ctor

(struct OLUseExistingFNGObject *this, int);
4D1810 struct OLPassworFNGObject *__thiscall

OLPassworFNGObject::ctor

(struct OLPassworFNGObject *this, int);
4D3430

FNGINIT_UI_OLPreRaceStart.fng

4D4240 struct OLRankingsMonthlyFNGObject *__thiscall

OLRankingsMonthlyFNGObject::ctor

(struct OLRankingsMonthlyFNGObject *this, struct FNGShowData *fngShowData);
4D4440

OLRankingsMonthlyFNGObject::MessageHandler

4D4560 struct OLFiltersFNGObject *__thiscall

OLFiltersFNGObject::ctor

(struct OLFiltersFNGObject *this, int);
4D5070

FNGINIT_PC_OL_SEARCH.fng

4D60C0

OLViewTrackFNGObject::MessageHandler

4D6290

OLFeedbackFNGObject::MessageHandler

4D6940

FNGINIT_UI_OL_Challenge.fng

4D69C0 struct OLViewCareerFNGObject *__thiscall

OLViewCareerFNGObject::ctor

(struct OLViewCareerFNGObject *this, int);
4D6C90

FNGINIT_UI_PC_LAN.fng

4D6D50 struct MCListFNGObject *__thiscall

MCListFNGObject::ctor

(struct MCListFNGObject *this, int);
4D7070

FNGINIT_MC_List.fng

4D72F0

FNGINIT_UI_PostRaceReward.fng

4D7350

PostRaceRewardFNGObject::MessageHandler

4D7AD0

FNGINIT_UI_ReplayControl.fng

4D7BD0

ReplayControlFNGObject::MessageHandler

4D8030 int __thiscall

GarageMainFNGObject_234::4D8030

(struct GarageMainFNGObject_234 *this, struct MenuCarInstance *arg4);
4D8C70 int __thiscall

GarageMainFNGObject::ShowCar?

(struct GarageMainFNGObject *this, struct MenuCarInstance *carInstance, int);
4D8D20

GarageMainFNGObject::MessageHandler

4D8F20 struct QuickRaceCarSelectFNGObject *__thiscall

QuickRaceCarSelectFNGObject::ctor

(struct QuickRaceCarSelectFNGObject *this, int);
4D93C0 struct PauseOptionsFNGObject *__thiscall

PauseOptionsFNGObject::ctor

(struct PauseOptionsFNGObject *this, int);
4D9480

FNGINIT_Loading_Tips.fng

4D9580 struct Bootflow *__thiscall

Bootflow::ctor

(struct Bootflow *this);
4D9700 void __thiscall

Bootflow::dtor

(struct Bootflow *this, char);
4D9730 void __cdecl

initBootflow

();
4D97A0

FNGINIT_DiscErrorPC.fng

4D9800

ProfileManagerFNGObject::MessageHandler

4DB9C0

ChyronIGFNGObject::MessageHandler

these create 54(36h) instances of something with UI object stuff. There are 18 controls *3(name,primary,secondary columns) = 54

4DBA50 void __thiscall

OptionsPCControllerFNGObject::CreateOptionListElements

(struct OptionsPCControllerFNGObject *this);
4DC9F0

OptionsPCControllerFNGObject::4DC9F0

4DDC10

OptionsPCControllerFNGObject::4DDC10

4DEC40 void __thiscall

OptionsPCControllerFNGObject::SetFocusedControl

(struct OptionsPCControllerFNGObject *this, struct ControllerOptionsRelated *cor);
4DECD0 void __thiscall

OptionsPCControllerFNGObject::UpdateControlElementPositions

(struct OptionsPCControllerFNGObject *this);
4DEE90 void __thiscall

OptionsPCControllerFNGObject::4DEE90

(struct OptionsPCControllerFNGObject *this);
4DEF30 void __thiscall

ObjectLink::dtor

(struct ObjectLink *this);
4DF010 int __thiscall

IconScrollerFNGObject::dtor

(struct IconScrollerFNGObject *this, char);
4DF140

MainFNGObject::ctor

4DF3A0

CareerCribFNGObject::ctor

4DF570

CribRewardOptionsMainFNGObject::ctor

4DF6F0 struct RewardsSponsorFNGObject *__thiscall

RewardsSponsorFNGObject::ctor

(struct RewardsSponsorFNGObject *this, struct FNGShowData *fngShowData);

flag should be IS_STOCK_CAR (when choosing car to buy) or IS_CAREER_CAR (when choosing career car to replace if no slots free)

4DF9C0 void __thiscall

CareerCarLotFNGObject::InitializeBrowsableCars

(struct CareerCarLotFNGObject *this, enum INVENTORY_CAR_FLAGS flag14ToCheck);
4DFC50

CareerCarSelectFNGObject::MessageHandler

4E08E0

InGameWorldMapFNGObject::MessageHandler

4E0F60

CareerWorldMapFNGObject::MessageHandler

4E13C0

StatusCareerFNGObject::CreateStatsUIData

4E1A30 struct StatusMasterFNGObject *__thiscall

StatusMasterFNGObject::ctor

(struct StatusMasterFNGObject *this, int);
4E1B80

FNGINIT_UI_Status_Master.fng

4E1BF0 void __thiscall

SMSMailboxFNGObject::ctor

(struct SMSMailboxFNGObject *this, struct FNGShowData *fngShowData);
4E2050

FNGINIT_UI_SMS_Mailbox.fng

4E22E0 void __thiscall

CarSelectFNGObject::InitializeBrowsableCars

(struct CarSelectFNGObject *this, enum INVENTORY_CAR_FLAGS flags);
4E2A50 struct QRModeSelectFNGObject *__thiscall

QRModeSelectFNGObject::ctor

(struct QRModeSelectFNGObject *this, struct FNGShowData *fngShowData);
4E2F30 struct QRTrackSelectFNGObject *__thiscall

QRTrackSelectFNGObject::ctor

(struct QRTrackSelectFNGObject *this, int);
4E3300 struct VirtualKeyboardFNGObject *__thiscall

VirtualKeyboardFNGObject::ctor

(struct VirtualKeyboardFNGObject *this, int);
4E34A0

FNGINIT_UI_EngageRaceDialog.fng

4E3500

FNGINIT_UI_Showcase_Preview.fng

4E3560 struct OptionsMainFNGObject *__thiscall

OptionsMainFNGObject::ctor

(struct OptionsMainFNGObject *this, struct FNGShowData *fngShowData);
4E36B0

FNGINIT_UI_PC_Customize_Options.fng

4E3710

FNGINIT_UI_Options.fng

4E3770

FNGINIT_UI_Wheel_Options.fng

4E3960

OL836370::ctor

4E3BD0

FNGINIT_UI_OLForgotAccountName.fng

4E3C50

FNGINIT_UI_OLEALogin.fng

4E3CD0

FNGINIT_UI_OLSelectPersona.fng

4E3D50

FNGINIT_UI_OLCreateUser.fng

4E3DD0

FNGINIT_UI_OLAgeVerif.fng

4E3E30

FNGINIT_UI_OLUseExisting.fng

4E42C0

FNGINIT_UI_OLPassword.fng

4E4320 struct PCOLGameRoomFNGObject *__thiscall

PCOLGameRoomFNGObject::ctor

(struct PCOLGameRoomFNGObject *this, int);
4E4A30

PCOLGameRoomFNGObject::MessageHandler

4E5D40 struct OLGameRoomhostFNGObject *__thiscall

OLGameRoomhostFNGObject::ctor

(struct OLGameRoomhostFNGObject *this, int);
4E5E60 struct OLGameRoomclientFNGObject *__thiscall

OLGameRoomclientFNGObject::ctor

(struct OLGameRoomclientFNGObject *this, int);
4E5F80 struct OLMAINFNGObject *__thiscall

OLMAINFNGObject::ctor

(struct OLMAINFNGObject *this, int);
4E6210 struct OLRankingsPersonalFNGObject *__thiscall

OLRankingsPersonalFNGObject::ctor

(struct OLRankingsPersonalFNGObject *this, int);
4E64D0

FNGINIT_UI_OLRankings_Monthly.fng

4E6530

FNGINIT_UI_OLFilters.fng

4E65B0 struct OLEAMessengerFNGObject *__thiscall

OLEAMessengerFNGObject::ctor

(struct OLEAMessengerFNGObject *this, int);
4E6770

OLEAMessengerFNGObject::MessageHandler

4E6C30

OLFriendDialogueFNGObject::MessageHandler

4E7540 struct OLXMessageFNGObject *__thiscall

OLXMessageFNGObject::ctor

(struct OLXMessageFNGObject *this, int);
4E77A0

OLXMessageFNGObject::MessageHandler

4E7D90 struct OLRankingsFNGObject *__thiscall

OLRankingsFNGObject::ctor

(struct OLRankingsFNGObject *this, struct FNGShowData *fngShowData);
4E7E10 struct OLXFindResultsFNGObject *__thiscall

OLXFindResultsFNGObject::ctor

(struct OLXFindResultsFNGObject *this, int);
4E8090 struct OLFeedbackFNGObject *__thiscall

OLFeedbackFNGObject::ctor

(struct OLFeedbackFNGObject *this, int);
4E88C0

FNGINIT_UI_OLViewCareer.fng

4E8FC0

MCListFNGObject::MessageHandler

4E94C0 struct PostRaceFNGObject *__thiscall

PostRaceFNGObject::ctor

(struct PostRaceFNGObject *this, struct FNGShowData *fngShowData);
4E9A20

PostRaceResultsFNGObject::MessageHandler

4EA6A0

PostRaceTournStandingsFNGObject::MessageHandler

4EA790 struct SponsorshipnewFNGObject *__thiscall

SponsorshipnewFNGObject::ctor

(struct SponsorshipnewFNGObject *this, struct FNGShowData *fngShowData);
4EA900 struct GarageMainFNGObject *__thiscall

GarageMainFNGObject::ctor

(struct GarageMainFNGObject *this, void *, int, int, char *fngName, int);
4EB130

FNGINIT_GarageMain.fng

4EB1A0

FNGINIT_MU_QuickRaceCarSelect.fng

4EB220

QuickRaceCarSelectFNGObject::MessageHandler

4EB410 struct PauseFNGObject *__thiscall

PauseFNGObject::ctor

(struct PauseFNGObject *this, struct FNGShowData *fngShowData);
4EB580 struct PauseOptionsMainFNGObject *__thiscall

PauseOptionsMainFNGObject::ctor

(struct PauseOptionsMainFNGObject *this, struct FNGShowData *fngShowData);
4EB650

FNGINIT_UI_PauseOptions.fng

4EB700 struct ProfileManagerFNGObject *__thiscall

ProfileManagerFNGObject::ctor

(struct ProfileManagerFNGObject *this, struct FNGShowData *fngShowData);
4EB7A0 struct DeleteprofileFNGObject *__thiscall

DeleteprofileFNGObject::ctor

(struct DeleteprofileFNGObject *this, struct FNGShowData *fngShowData);
4ECD10 int __thiscall

OptionsPCControllerFNGObject::ctor

(struct OptionsPCControllerFNGObject *this, struct FNGShowData *fngShowData);
4ED140 void __thiscall

OptionsPCControllerFNGObject::OnMouseActivity

(struct OptionsPCControllerFNGObject *this);
4ED380

OptionsPCControllerFNGObject::4ED380

4ED6B0 struct FNGObject *__cdecl

FNGINIT_UI_Main.fng

(struct FNGShowData *fngShowData);
4ED710

FNGINIT_UI_StartCareer.fng

4ED780

FNGINIT_UI_CareerCrib.fng

4ED7E0

FNGINIT_UI_CribRewardOptionsMain.fng

4ED840

FNGINIT_UI_RewardsSponsor.fng

4ED8A0 int __thiscall

CareerCarLotFNGObject::4ED8A0

(struct CareerCarLotFNGObject *this, int);
4ED9E0

CareerCarLotFNGObject::MessageHandler

4EE1A0 int __thiscall

CareerCarLotFNGObject::InitializeBrowsableCarsAndSelectFirst

(struct CareerCarLotFNGObject *this);
4EE320 struct InGameWorldMapFNGObject *__thiscall

InGameWorldMapFNGObject::ctor

(struct InGameWorldMapFNGObject *this, void *param);
4EE690

CareerWorldMapFNGObject::ctor

4EE8B0 struct StatusCareerFNGObject *__thiscall

StatusCareerFNGObject::ctor

(struct StatusCareerFNGObject *this, int);
4EEB10

FNGINIT_UI_Status_Career.fng

4EEB90 void __thiscall

CarSelectFNGObject::InitializeBrowsableCarsAndSelectFirst

(struct CarSelectFNGObject *this);

relies on carSelectCategory to know what cars to display, resets it to IS_STOCK_CAR | IS_TUNED_CAR if the result would be empty

4EEC90 void __thiscall

CarSelectFNGObject::ResetBrowableCars

(struct CarSelectFNGObject *this);

message: 5073EF13 prev, D9FEEC59 next

see replace-4EED10-CarSelectFNGObject__ChangeCategory.c

4EED10 void __thiscall

CarSelectFNGObject::ChangeCategory

(struct CarSelectFNGObject *this, unsigned int message);
4EF280

FNGINIT_UI_QRModeSelect.fng

4EF3F0 struct QRModeOptionsFNGObject *__thiscall

QRModeOptionsFNGObject::ctor

(struct QRModeOptionsFNGObject *this, int);
4EF620

QRModeOptionsFNGObject::MessageHandler

4EF9B0

FNGINIT_UI_QRTrackSelect.fng

4EFA10

QRTrackSelectFNGObject::MessageHandler

4EFD40

FNGINIT_UI_VirtualKeyboard.fng

4EFDE0

FNGINIT_UI_OptionsMain.fng

4EFF50

OLDisconnectBGFNGObject::MessageHandler

4EFFD0

CreateOL836370

4F0060

OLEALoginFNGObject::MessageHandler

4F0370

OLSelectPersonaFNGObject::MessageHandler

4F08E0

OLCreateUserFNGObject::MessageHandler

4F0D90

OLUseExistingFNGObject::MessageHandler

4F1150 struct PCOLLobbyFNGObject *__thiscall

PCOLLobbyFNGObject::ctor

(struct PCOLLobbyFNGObject *this, int);
4F1820

FNGINIT_PC_OL_GameRoom.fng

4F1880

FNGINIT_UI_OLGameRoom_host.fng

4F18E0

FNGINIT_UI_OLGameRoom_client.fng

4F1940

FNGINIT_UI_OLMAIN.fng

4F19A0

OLMAINFNGObject::MessageHandler

4F1BC0

FNGINIT_UI_OLRankings_Personal.fng

4F1C20 struct OLRankingsOverallFNGObject *__thiscall

OLRankingsOverallFNGObject::ctor

(struct OLRankingsOverallFNGObject *this, int);
4F1E60

OLRankingsOverallFNGObject::MessageHandler

4F22F0

FNGINIT_UI_OLEAMessenger.fng

4F2350 struct OLFriendDialogueFNGObject *__thiscall

OLFriendDialogueFNGObject::ctor

(struct OLFriendDialogueFNGObject *this, int);
4F24E0

FNGINIT_UI_OLX_Message.fng

4F2540

FNGINIT_UI_OLRankings.fng

4F25A0

FNGINIT_UI_OLX_FindResults.fng

4F2600 struct OLViewCarFNGObject *__thiscall

OLViewCarFNGObject::ctor

(struct OLViewCarFNGObject *this, int);
4F26F0 struct OLViewTrackFNGObject *__thiscall

OLViewTrackFNGObject::ctor

(struct OLViewTrackFNGObject *this, int);
4F27E0

FNGINIT_UI_OL_Feedback.fng

4F2840

OLChallengeFNGObject::MessageHandler

4F2CA0

OLCarLotFNGObject::MessageHandler

4F32B0

FNGINIT_MC_Bootup.fng

4F3320

FNGINIT_MC_Main.fng

4F3940

FNGINIT_UI_PostRace.fng

4F39A0

PostRaceFNGObject::MessageHandler

4F3BE0 struct PostRaceResultsFNGObject *__thiscall

PostRaceResultsFNGObject::ctor

(struct PostRaceResultsFNGObject *this, int);
4F41F0 struct PostRaceTournResultsFNGObject *__thiscall

PostRaceTournResultsFNGObject::ctor

(struct PostRaceTournResultsFNGObject *this, int);
4F4370

PostRaceTournResultsFNGObject::MessageHandler

4F4610 struct PostRaceTournStandingsFNGObject *__thiscall

PostRaceTournStandingsFNGObject::ctor

(struct PostRaceTournStandingsFNGObject *this, int);
4F4730

FNGINIT_UI_Sponsorship_new.fng

4F4790

FNGINIT_UI_Pause.fng

4F47F0

FNGINIT_UI_PauseOptionsMain.fng

4F4850

LoadingTipsFNGObject::MessageHandler

4F48A0

FNGINIT_LS_LangSelect.fng

4F4900

FNGINIT_UI_ProfileManager.fng

4F4960

FNGINIT_UI_Deleteprofile.fng

4F92E0

FNGINIT_UI_Options_PC_Controller.fng

4F9340

OptionsPCControllerFNGObject::MessageHandler

4F98B0

MainFNGObject::MessageHandler

4F9930 struct CareerCarLotFNGObject *__thiscall

CareerCarLotFNGObject::ctor

(struct CareerCarLotFNGObject *this, void *fngShowData);
4F9AD0 struct CareerCarSelectFNGObject *__thiscall

CareerCarSelectFNGObject::ctor

(struct CareerCarSelectFNGObject *this, void *fngShowData);
4F9C10

FNGINIT_UI_InGame_WorldMap.fng

4F9D30

FNGINIT_UI_CareerWorldMap.fng

4F9D90 struct CarSelectFNGObject *__thiscall

CarSelectFNGObject::ctor

(struct CarSelectFNGObject *this, int);
4FA2A0 void __thiscall

CarSelectFNGObject::ResetBrowsableCarsAndSelectPreviouslySelectedCarForPlayer

(struct CarSelectFNGObject *this, int playerIndex);
4FA550

FNGINIT_UI_QRModeOptions.fng

4FA5B0

VirtualKeyboardFNGObject::MessageHandler

4FA990

FNGINIT_PC_OL_Lobby.fng

4FB1A0

FNGINIT_UI_OLRankings_Overall.fng

4FB200

FNGINIT_UI_OL_FriendDialogue.fng

4FB260

FNGINIT_UI_OL_ViewCar.fng

4FB2C0

FNGINIT_UI_OL_ViewTrack.fng

4FB320 struct OLCarLotFNGObject *__thiscall

OLCarLotFNGObject::ctor

(struct OLCarLotFNGObject *this, int);
4FB4C0 struct PCLANServerSelectFNGObject *__thiscall

PCLANServerSelectFNGObject::ctor

(struct PCLANServerSelectFNGObject *this, int);
4FB680

PCLANServerSelectFNGObject::MessageHandler

4FBB60

FNGINIT_UI_PostRaceResults.fng

4FBBC0 struct PostRaceStatsFNGObject *__thiscall

PostRaceStatsFNGObject::ctor

(struct PostRaceStatsFNGObject *this, int);
4FBE20

PostRaceStatsFNGObject::MessageHandler

4FBF00

FNGINIT_UI_PostRace_TournResults.fng

4FBF60

FNGINIT_UI_PostRace_TournStandings.fng

4FC0B0

FNGINIT_UI_CareerCarLot.fng

4FC110

FNGINIT_UI_CareerCarSelect.fng

used for both QR and OL car select AND customize car select

4FC190

FNGINIT_UI_CarSelect.fng

4FC1F0

CarSelectFNGObject::MessageHandler

4FCDA0

PCOLLobbyFNGObject::MessageHandler

4FD450

FNGINIT_UI_OLCarLot.fng

4FD4B0

FNGINIT_UI_PC_LAN_ServerSelect.fng

4FD510

MCBootupFNGObject::MessageHandler

4FD570

MCMainFNGObject::MessageHandler

4FD6C0

FNGINIT_UI_PostRaceStats.fng

Sums this and rect into this.

4FDAD0 void __thiscall

U2RECT::Add

(struct U2RECT *this, struct U2RECT *rect);
4FE140 void __thiscall

InventoryCar::dtor

(struct InventoryCar *this);
4FE260 void __thiscall

CareerD24_8::ctor

(struct CareerD24_8 *this);
4FE270 void __thiscall

CareerD24_8::dtor

(struct CareerD24_8 *this);
4FE4A0

??IsGameLoading

Initializes memory that was allocated to be a dialog.

4FF250 int __thiscall

DialogInfo::ctor

(struct DialogInfo *this);
4FF2F0 int __cdecl

IsAllowedCharacterInChatTextbox

(char character);
4FF310 int __thiscall

TextboxData::CanAppendChar

(struct TextboxData *this, char character);
4FF430 void __thiscall

UIProgressBar::ctor

(struct UIProgressBar *this);
4FF480

UIProgressBar::4FF480

will delegate to procUpdateUIVertical or procUpdateUIHorizontal based on isVertical

4FF530 void __thiscall

UIProgressBar::UpdateUI

(struct UIProgressBar *this);

does not update ui elements, need to do that separately. value [0,1]

4FF550 void __thiscall

UIProgressBar::SetValue

(struct UIProgressBar *this, float value);
4FF640

GetLanguageFileCode

TODO

4FF680 int __cdecl

LoadLanguageSomething

();
4FF780

LoadLanguageFile2

4FF970

GetCurrentLoadedLanguage

Returns a string ptr or NULL for given hash (which is passed through edx). Does a binary search over the hashes in loadedLanguage.ptrTable

key is passed thru edx

4FF9D0 char *__cdecl

GetLanguageStringOrNull

();

Same as GetLanguageString but copy it into a buffer.

4FFA50 void __cdecl

GetLanguageStringIntoBuf

(char *dest, int destlen, int hash);

Calls GetLanguageStringOrNull and when it returns NULL, call it again but with 0xC01A6F63 as fallback (which is the key DEFAULT_STRING_ERROR and results in FENG: Default string error.)

4FFA80 char *__cdecl

GetLanguageString

(unsigned int hash);

Returns, based on passed index, one of: th, st, nd, rd, th, th, th, th, th, th th, uses default string as fallback. TODO: xref this for fun and profit (only 2 usages?)

4FFAA0 char *__cdecl

GetNumberSuffix

(int number);
if (section->header.magic == 0x39000) {
        loadedLanguage.ptrConversionTable = 0;
        loadedLanguage.numStrings = 0;
        loadedLanguage.ptrStrings = 0;
        loadedLanguage.ptrTable = 0;
}
4FFAE0 int __cdecl

UnloadLanguageBinSection39000

(struct BinSection *bindata);

finds any marker of type MARKER_TYPE_D/MARKER_TYPE_E/MARKER_TYPE_F with matching hash

4FFC50 struct Marker *__cdecl

FindMarkerTypeD_E_FWithHash

(unsigned int hash);
4FFC90 struct CareerRace *__cdecl

FindCareerRaceByHash

(unsigned int raceHash);
4FFD90 struct CareerRace *__cdecl

GetCareerRaceByIndex

(int index);
4FFDE0 int __thiscall

CareerRace::4FFDE0

(struct CareerRace *this, void *);
4FFE20 struct CareerShop *__cdecl

FindCareerShopByHash

(unsigned int hash);
4FFE60 struct CareerShop *__cdecl

FindShopForMarker

(unsigned int markerHash);
4FFFC0 struct Bin34A16 *__cdecl

Find34A16ForMarker

(struct Marker *marker);
500000 void __cdecl

StoreBin34A15

(struct Bin34A15 *data, int totalSize);

return numBin34A15;

500070 int __cdecl

GetNumBin34A15

();
500080 struct Bin34A15 *__cdecl

GetBin34A15AtIndex

(int index);
500150 struct Bin34A15_C *__cdecl

GetBin34A15_CAtIndex

(int index);

internal name which can be used to create eg SPONSOR_INFO_%S language key

500180 char *__thiscall

CareerSponsor::GetInternalSponsorName

(struct CareerSponsor *this);

searches in careerStageSettingsEntries

param stageIndex: 0-7

500190 struct CareerStageSettings *__cdecl

FindCareerStageSettingsForStageIndex

(int stageIndex);
500250 struct CarUnlockEntry *__cdecl

FindCarUnlockEntryForCar

(unsigned int carNameHash);
500290 int __cdecl

UnloadBinSection80034A10

(struct BinSection *bindata);
5003B0 struct Career7B00 *__thiscall

Career::FindCareer7B00WithHash0

(struct Career *this, unsigned int hash);

basically __stdcall wrapper around FindCareerRaceByHash because 'this' is not used

5003F0 struct CareerRace *__thiscall

Career::FindRaceByHash

(struct Career *this, unsigned int raceHash);

field_8869 is char[8][2], this counts how many of those 16 fields are set to 0

500400 int __thiscall

Career::CountEmptyEntriesAt8869

(struct Career *this);
500460 int __thiscall

Career::500460

(struct Career *this, void *);
5004B0 int __thiscall

Career::SetField7138

(struct Career *this, char);
5004C0 int __thiscall

Career::getField7138

(struct Career *this);
5004D0 int __thiscall

CareerStage::CountNumField0Set

(struct CareerStage *this);
500520 int __thiscall

CareerStage::CountNumField9CSet

(struct CareerStage *this);
5005A0 int __thiscall

CareerStage::CountNumField8CSet

(struct CareerStage *this);
5005E0 float __thiscall

CareerStage::GetAverageReputationPerRace

(struct CareerStage *this);
500610 int __thiscall

CareerStage::500610

(struct CareerStage *this);

sponsors' availability depends on average reputation per race in previous stage, and something else (struct CareerStageSettings.field_1C)

500670 int __thiscall

CareerStage::GetNumAvailableSponsors

(struct CareerStage *this, float lastStageAverageReputationPerRace);
5006D0 struct CareerSponsor *__thiscall

CareerStage::GetCareerSponsorAtIndex

(struct CareerStage *this, int index);

param stageIndex: 0-7

500700 void __thiscall

CareerStage::Init

(struct CareerStage *this, int stageIndex);
5007A0 void __thiscall

Career7148::5007A0

(struct Career7148 *this, struct CareerRace *race);
5007E0 int __thiscall

Career7148::HasSomething5007E0

(struct Career7148 *this, void *);
500820 int __thiscall

Career7148::CountAmountOfField80AreUsed

(struct Career7148 *this);
500880 int __thiscall

Career7148::CountAmountOfField80HaveField7FSet

(struct Career7148 *this);
500910 int __thiscall

Career7148::CountAmountOfField0AreUsed

(struct Career7148 *this);

from stage0 to stage7, add 1 if their signedSponsor is nonnull

5009E0 int __thiscall

Career::CountNumberOfSponsorsSigned

(struct Career *this);

profileData.career.currentStage is usually passed as arg0

500A40 int __thiscall

Career::500A40

(struct Career *this, int stage);
500AA0 int __thiscall

Career::500AA0

(struct Career *this);

writes to struct Career.carPosition and struct Career.carAngle

500AB0 void __thiscall

Career::StoreP1PositionIntoCareerData

(struct Career *this, int unused);
this->field_8704 = this->field_8700;
this->field_8708 = this->field_871C;
this->someCareerShop870C = this->someCareerShop8724;
this->field_8710 = this->field_8728;
this->field_8714 = this->field_8720;
500B00 void __thiscall

Career::500B00

(struct Career *this);
this->field_8704 = 0;
this->field_8708 = 0;
this->someCareerShop870C = 0;
this->field_8710 = 0;
500B40 void __thiscall

Career::500B40

(struct Career *this);

'this' is unused; can be treated as __stdcall (__cdecl even since 0 params)

is doing pure freeroam stuff in career I guess

500B60 int __thiscall

Career::IsInCareerAndTotallyFreeroaming??

(struct Career *this);

checks if something is collected (struct Career7B00.field_6)

500B80 int __thiscall

Career::500B80

(struct Career *this, unsigned int hash);

also sets this->field_873D = 1

500BD0 void __thiscall

Career::SetActiveCarBySlotHash

(struct Career *this, unsigned int hash);
500BF0 int __thiscall

[Return_1_Pop_2

(void *this, int, int);

return this->stage0[arg0].stageFinished?

crash if arg0 < 0 or > 7

500C00 int __thiscall

Career::IsStageFinished?

(struct Career *this, int stageIndex);
500C30 int __thiscall

Career::500C30

(struct Career *this, int);

stakes: amount to win or lose stageIndex 0-7

500C60 int __thiscall

Career::GetOutrunStakesForStageIndex

(struct Career *this, int stageIndex);

this->floatField_1AE4 = 0; this->field_1AE8 = 0;

500CA0 void __thiscall

Career4230::500CA0

(struct Career4230 *this);
500CB0 int __thiscall

Career4230::500CB0

(struct Career4230 *this);

return this->field_1AE0

500CF0 int __thiscall

Career4230::500CF0

(struct Career4230 *this);

index 0-2

500D00 struct MenuCarInstance *__thiscall

Career4230::GetMenuCarInstanceAtIndex

(struct Career4230 *this, int index);
500D20 int __thiscall

Career4230::500D20

(struct Career4230 *this, int);
500D70 void __thiscall

Career4230::500D70

(struct Career4230 *this);

return this->field_1AE8 == 2

500D80 int __thiscall

Career4230::500D80

(struct Career4230 *this);
500EA0 void __thiscall

Career::CopyIntoFirstAvailableField0

(struct Career *this, struct Career_0 *from);
500EE0 int __thiscall

Career::500EE0

(struct Career *this, int);

nulls field_0, collectedEngageMarkers, collectedMoneyMarkers?

500F30 int __thiscall

Career::500F30

(struct Career *this);

Only used in the career money cheats.

500F80 void __thiscall

CareerBank::AddMoney

(struct CareerBank *this, int amount);

Only used in career money cheats, and to show bank label in career freeroam? not for pchelpbar, other transactions etc...

500F90 int __thiscall

CareerBank::GetMoney

(struct CareerBank *this);
500FA0 int __thiscall

CareerStage::WriteToSaveData

(struct CareerStage *this, void *dest, int);
501150 int __thiscall

Career4210::501150

(struct Career4210 *this, int);
5011C0 int __thiscall

Career4210::5011C0

(struct Career4210 *this, int, int);

Called from LoadBinSection80034A10. Data is a bin section with magic 0x34A17 (which is inside bin section 80034A10).

smsDatas = (void*) data;
numSmsDatas = size / 20;
5012F0 void __cdecl

StoreSmsDatas

(char *data, int size);

Goes through all smsDatas and returns the one that has a matching cshash(careerStringPool + careerTextLanguageTableOffset).

501310 struct SmsData *__cdecl

GetSmsDataForHash

(unsigned int hash);

TODO may be able to find out some gameprogress things here

501370 int __thiscall

SmsData::CanSendUnlockMessage?

(struct SmsData *this, struct CareerRace *race);

Returns the hash for the language string that is the sms sender. Used once in EngageMessageDialogFNGObject::ctor.

return this->data.senderLanguageLabel;
501470 unsigned int __thiscall

SmsMessage::GetSenderLanguageHash

(struct SmsMessage *this);
501480 int __thiscall

SmsMessageList::501480

(struct SmsMessageList *this, int);

TODO: check xrefs

5014A0 struct SmsMessage *__thiscall

SmsMessageList::GetAtIndex

(struct SmsMessageList *this, int index);
if (!sms->deleted && !sms->read) {
      this->numUnreadMessages--;
}
sms->deleted = 1;
sms->read = 1;
5014C0 void __thiscall

SmsMessageList::MarkMessageDeletedAndRead

(struct SmsMessageList *this, struct SmsMessage *sms);
5014F0 int __thiscall

SmsMessageList::WriteToSaveData

(struct SmsMessageList *this, int, int);
5016A0 int __thiscall

CareerC00::5016A0

(struct CareerC00 *this);
501920

InitializeLotsOfVariables

arg is struct Car.carIndex, checks carsToHideForRegionUS and carsToHideForRegionNotUS

5022C0 int __cdecl

ShouldCarBeShownForCurrentRegion

(int carIndex);
5023B0 struct CareerRace *__cdecl

FindCareerRaceThatUnlocksCar

(unsigned int carNameHash);
502420 int __thiscall

Career713C::502420

(struct Career713C *this);
5025B0 void __thiscall

Player_24::Init

(struct Player_24 *this);
5026F0 void __thiscall

Player_D4::5026F0

(struct Player_D4 *this);
502A40 void __thiscall

Player_D4::SetCurrentCarSelectionSlotHash

(struct Player_D4 *this, unsigned int slotNameHash, int playerIndex);
502FD0 void __thiscall

[Return_This_Pop_0

(void *);
5030E0 void __thiscall

ProfileData_156B0::ctor

(struct ProfileData_156B0 *this);
503460 int __thiscall

SponsorCar::GetCarIndex

(struct SponsorCar *this);
503490 unsigned int __thiscall

SponsorCar::GetCarNameHash

(struct SponsorCar *this);
503510 struct InventoryCar *__thiscall

CarCollectionWithPointers::GetCarForSlot

(struct CarCollectionWithPointers *this, unsigned int slotHash);

stockCarHash like STOCK_PEUGOT

503550 struct StockCar *__thiscall

CarCollection::FindStockCar

(struct CarCollection *this, unsigned int stockCarHash);
503590 int __thiscall

CarCollection::IsSponsorCar

(struct CarCollection *this, unsigned int slotNameHash);

may not modify ecx! see 52A736

5035C0 struct TunedCar *__thiscall

CarCollection::GetCareerOrTunedCarForSlotHash

(struct CarCollection *this, unsigned int slotNameHash);
503640 struct OnlineCar *__thiscall

CarCollection::GetOnlineCarForSlotHash

(struct CarCollection *this, unsigned int slotHash);
503680 struct CareerCar *__thiscall

CarCollection::GetCareerCarForSlotHash

(struct CarCollection *this, unsigned int slotHash);
5036C0 struct TunedCar *__thiscall

CarCollection::GetFreeTunedCarSlot

(struct CarCollection *this);
5036F0 void __thiscall

CarCollectionWithPointers::ClearSlotPointers

(struct CarCollectionWithPointers *this);
5037F0 int __thiscall

CareerCar::5037F0

(struct CareerCar *this);
503950 void __thiscall

TunedCar18::CopyTuningFromMenuCarInstance

(struct TunedCar18 *this, struct MenuCarInstance *menuCarInstance);
5039D0 void __thiscall

SponsorCar::ApplyTuningToInstance

(struct SponsorCar *this, int playerIndex, struct MenuCarInstance *menuCarInstance, int);
503A00 void __thiscall

StockCar::ctor

(struct StockCar *this);
503A30 int __thiscall

StockCar::GetCarIndex

(struct StockCar *this);
503A60 unsigned int __thiscall

StockCar::GetCarNameHash

(struct StockCar *this);
503A80 void *__thiscall

StockCar::ApplyTuningToInstance

(struct StockCar *this, int playerIndex, struct MenuCarInstance *menuCarInstance, int);

NOTE: THIS IS SHARED FOR struct TunedCar struct CareerCar struct OnlineCar

503AE0 int __thiscall

TunedCar::GetCarIndex

(struct TunedCar *this);

NOTE: THIS IS SHARED FOR struct TunedCar struct CareerCar struct OnlineCar

503B00 unsigned int __thiscall

TunedCar::GetCarNameHash

(struct TunedCar *this);
503B10 int __thiscall

CareerCar434::503B10

(struct CareerCar434 *this, int, int, int);
503D50 int __thiscall

CareerCar434::503D50

(struct CareerCar434 *this, int, int);
503DB0

CareerCar434::503DB0

just nulls everything

503E70 void __thiscall

CareerCar434::Init

(struct CareerCar434 *this);
5047C0

unnamed_5047C0

Starts at container->rootElement, iterates through all children by traversing nextSibling, calls visitor->vtable->acceptElement for every child, calls FNGInfo::VisitContainerRecursively (itself) for every child that is of type 5 (struct UIContainer). returns 0 when either calls return 0.

does nothing with this

504830 int __thiscall

FNGInfo::VisitContainerRecursively

(struct FNGInfo *this, struct UIContainer *container, struct UIElementVisitor *data);

Starts at this->rootUIElement, iterates through all children by traversing nextSibling, calls visitor->vtable->acceptElement for every child, calls FNGInfo::VisitContainerRecursively for every child that is of type 5 (struct UIContainer), returns 0 when either calls return 0.

504880 int __thiscall

FNGInfo::VisitUIRecursively

(struct FNGInfo *this, struct UIElementVisitor *visitor);

If element->hash == this->searchingHash, set this->foundUIElement to element and return 0.

5048D0 int __thiscall

UIElementVisitor_FindByHash::acceptElement

(struct UIElementVisitor_FindByHash *this, struct UIElement *element);
5048F0 int __thiscall

UIElementVisitor_FindByFieldC::acceptElement

(struct UIElementVisitor_FindByFieldC *this, struct UIElement *element);

same as the other stricmp, just implemented slightly differently (removes one redundant condition and does the 'case insensitive' calculation differently but equally correct)

505310 int __cdecl

stricmp2

(char *a, char *b);
5053B0 void __thiscall

List::AddAfter

(struct List *this, struct ListEntry *after, struct ListEntry *entry);
505400 void __thiscall

List::RemoveEntry

(struct List *this, struct ListEntry *entry);

Case insensitive hash function. see also cshash

505450 unsigned int __cdecl

cihash

(char *str);
50B460 int __cdecl

RenderCursor

(int x, int y);

See nfsu2-re-hooks/replace-50B790-CreateFNGObject.c for a reimplementation.

50B790 struct FNGObject *__cdecl

CreateFNGObject

(unsigned int fnghash, struct FNGInfo *fngInfo, int);

Goes through all entries in fngdata and returns the one with matching hash.

50B840 struct FNGData *__cdecl

GetFNGDataForHash

(unsigned int fngHashCS);

Goes through all the fng data above and set the handler for stricmp matching fng names.

50B8E0 int __cdecl

SetInitializeHandlerForFNG

(char *fng, int (__cdecl *func)(int));

exact same code can be found inlined at 51BBBF

works with data with binsection header 30203 & 30210

50B920 unsigned int __thiscall

SomethingUIImpl::GetPackageHash?

(struct SomethingUIImpl *this);

Delegates hashing to cshash.

50B990 int __cdecl

FormatWithSinglePlaceholderAndHashCS43DB50

(char *src, void *param);

Does its own hashing.

50B9C0 int __cdecl

FormatWithSinglePlaceholderAndHashCI

(char *src, void *param);

It's a guess

50BEC0 void __thiscall

FontData::MeasureWidth?

(struct FontData *this, wchar_t *wcharString, int);

it's a guess

50BF40 void __thiscall

FontData::MeasureHeight?

(struct FontData *this, int, int);

Frees all struct UIElement::FERenderObject objects by calling FNGInfo::VisitUIRecursively using a visitor that has UIElementVisitor_ClearFNGCache::acceptElement as its acceptElement.

50C550 void __cdecl

FreeFNGFeRenderObjects

(struct FNGInfo *fng);
50C680 int __thiscall

UIData::50C680

(struct UIData *this);

'this' is unused; can be called as an __stdcall

*((short*) arg_0 + 0) = mouseData.cursorX - canvasWidth2;
*((short*) arg_0 + 1) = mouseData.cursorY - canvasHeight2;
*((short*) arg_0 + 2) = mouseData.button0State << 1 | mouseData.button1State; (or swapped)
50C860 int __thiscall

UIData::StoreMousePosButtonsIntoArg

(struct UIData *this, int);
50C8E0 struct FNGInfo *__cdecl

GetTopPackage

();
50C900 int __cdecl

SetUILabelLanguageString

(struct UILabel *label, unsigned int languageString);

may have more parameters

50C960 void __cdecl

FormatWithSinglePlaceholderValueTimed_1

(char *dest, int maxLength_ignored, char *format, int parameter);

only if it's not already that value; then also add NEED_UPDATE_0 to its flags

50C990 void __cdecl

SetUIElementTexture

(struct UIElement *element, unsigned int textureHash);
50CA00 void __cdecl

HideNullableUIElementAndChildren

(struct UIElement *uielement);
50CA50 void __cdecl

ShowNullableUIElementAndChildren

(struct UIElement *uielement);

Only seen this being called when there's a list on screen so far.

50CD00 int __cdecl

IsPointInRect

(float x, float y, struct _POS *pos, struct _SIZE *size);
*cursorX = mouseData.cursorX - canvasWidth2;
*cursorY = mouseData.cursorY - canvasHeight2;
50CD70 void __cdecl

GetMousePositionFromMiddle

(float *cursorX, float *cursorY);
*mouseWheelData = mouseData.mousestate.lZ;
50CDA0 void __cdecl

GetMouseWheel

(float *mouseWheelData);

Gets called in one location, but still haven't actually seen it being called. Not in Main/Career/QR menus... TODO

50CDB0 int __cdecl

DidCursorPressInRect

(struct _POS *pos, struct _SIZE *size);
50CE20 struct UIDataC *__cdecl

GetUIDataFieldC

();

Checks if any of the given hashes conform with struct FNGInfo.hash of entries in pUIData->field_8->fngPackagesDC.__parent.first and return its fngName.

50CE30 char *__cdecl

FindTopPackage

(unsigned int *hashes, int numHashes);

return "UI_PC_Help_Bar.fng";

50CEA0 char *__cdecl

GetHelpBarFNGName

();

and put it in pcHelpBarFNGObject

50CEB0 void __cdecl

CreatePCHelpBarFNGObject

();
50CF10 int __thiscall

PCHelpBarFNGObject::IsSomethingStillAnimating

(struct PCHelpBarFNGObject *this);
50CF40 void __cdecl

InitializeSoundBankIdMapping

();
50D150 void __cdecl

PlaySoundEffectFromAudioBank

(char *unusedFngName, int audioBankIndex, int soundIndex);
50D180 void __cdecl

PlaySoundEffect

(int soundId);
50D2D0 int __cdecl

ConstructFNGControlMask

(int);

If a char could not be converted, it will be _ and the func will return 1.

50D3C0 int __thiscall

LanguageConversionTable::StrcpyCharToWchar

(struct LanguageConversionTable *this, wchar_t *dest, int maxlen, char *src);

A nop function. It seems like many calls to different functions that got nopped all redirect here. Some of the calls are used as a debug print, see Debug print.

50D510

DebugPrint50D510

arrow: 1 (left) or 2 (right)

50D820 void __thiscall

ScrollingThing::SetArrowVisibility

(struct ScrollingThing *this, int arrow, char visible);
50D980 int __thiscall

IconScroller::50D980

(struct IconScroller *this, int, int, int, int);

sets two labels' text by language string

50DA50 int __thiscall

IconScrollerFNGObject::SelectedIconChanged

(struct IconScrollerFNGObject *this);
50DAB0 int __thiscall

IconScroller::AddIconEntryToScroller

(struct IconScroller *this, struct IconScrollerIcon *icon);
50DB40 void __thiscall

CommonFNGObjectStructA::ctor

(struct CommonFNGObjectStructA *this);

allocates memory into ptrAllocatedBytes50DB80

50DB80 int __thiscall

CommonFNGObjectStructA::allocateMem

(struct CommonFNGObjectStructA *this, int bytes);

copy string and: this->field_4 = arg10; this->field_2C = arg4;

50DBB0 int __thiscall

CommonFNGObjectStructA::copySomeString

(struct CommonFNGObjectStructA *this, struct FNGObject *ownerFNGObject, int, int, char *src, int);

Doesn't actually use this, so can be treated as a __stdcall. Returns a ptr to the first occurrence of ^ or \n, nullptr otherwise.

50DC70 wchar_t *__thiscall

CommonFNGObjectStructA::FindNewlineW

(struct CommonFNGObjectStructA *this, wchar_t *str);

Doesn't actually use this, so can be treated as a __stdcall. Returns a ptr to the zero terminator.

50DCB0 wchar_t *__thiscall

CommonFNGObjectStructA::GetEndOfStringW

(struct CommonFNGObjectStructA *this, wchar_t *str);
5108A0 int __cdecl

LoadBinSection30230

(struct BinSection *bindata);
5108C0 int __cdecl

UnloadBinSection30230

(struct BinSection *bindata);
5108E0 int __cdecl

LoadBinSection30231

(struct BinSection *bindata);
510900 int __cdecl

UnloadBinSection30231

(struct BinSection *bindata);
510A70 int __thiscall

ProfileData28DB0::510A70

(struct ProfileData28DB0 *this);
510E40 int __thiscall

MagazineSelectFNGObject::SelectedIconChanged

(struct MagazineSelectFNGObject *this);
511000 void __thiscall

Career887C::511000

(struct Career887C *this);
5110C0 int __thiscall

Career887C::OnOutrunFinish

(struct Career887C *this, int didWin);
5111F0 int __thiscall

Career887C::5111F0

(struct Career887C *this, int *, int, int);

this->field_B = 0

5112A0

Career887C::SponsorSigned

5112B0 int __thiscall

Career887C::5112B0

(struct Career887C *this);

Checks if dest is NULL first.

511630 void __cdecl

strcpyW

(wchar_t *dest, wchar_t *src);
5116E0 void __thiscall

Player_24::ctor

(struct Player_24 *this);
5117C0 struct CareerD24_54_30 *__thiscall

CareerD24_54_30::ctor

(struct CareerD24_54_30 *this);
511820 void __thiscall

CarCollection::dtor

(struct CarCollection *this);
5118E0 void __thiscall

SponsorCar::ctor

(struct SponsorCar *this);

this is pretty much memcpy(this, from, sizeof(struct CareerD24_54_30_0) but instead all fields are copied separately

511900 void __thiscall

CareerD24_54_30_0::CopyFrom

(struct CareerD24_54_30_0 *this, struct CareerD24_54_30_0 *from);
511DB0 int __thiscall

CarSelectCarEntry::ctor

(struct CarSelectCarEntry *this, struct Car *car, int, unsigned int slotHash, int playerId, char);
511E00 struct MenuCarInstance *__thiscall

CarSelectCarEntry::ApplyTuningToCarInstanceIfNotDoneAlready

(struct CarSelectCarEntry *this);
511E60 unsigned int __cdecl

GetLogoHashForCarModel

(int car_model_index, char get_manufacturer_logo);

return hashf("BRAND_NAME_%s", cars[car_index].manufacturerName);

512050 unsigned int __cdecl

GetCarBrandNameHash

(int car_index);

return hashf("CAR_NAME_%s%s", cars[car_index].manufacturerName, "");

512080 unsigned int __cdecl

GetCarNameHash

(int car_index);

return GetLanguageStringOrNull(hashf("CAR_NAME_%s%s", cars[car_index].manufacturerName, "")); does the DEFAULT_STRING_ERROR dance if no such language string exists

5120B0 char *__cdecl

GetTranslatedCarName

(int car_index);

return hashf("CS_CAR_LOGO_%s%s", cars[car_index].manufacturerName, "");

calls GetGameRegion for no good reason? (result unused)

5120F0 unsigned int __cdecl

GetCarLogoHash

(int car_index);
512240 void __thiscall

UIProgressBar::ShowOrHideElements

(struct UIProgressBar *this, char doShow);
512360

LoadLanguageFile1

TODO

512520

LoadLanguageAtBoot

Uses LanguageConversionTable::StrcpyCharToWchar when loadedLanguage.ptrConversionTable is set, otherwise NaiveStrcpyCharToWchar.

512530 void __cdecl

LanguageAwareStrcpyCharToWchar

(wchar_t *dest, int maxlen, char *src);
struct BinDataLanguage39000 *data;
struct LanguageTableEntry *tableEntry;
int i;

if (section->header.magic == 0x39000) {
        data = (void*) section->data;
        loadedLanguage.ptrConversionTable = (void*) (data + (int) data->field_0);
        loadedLanguage.numStrings = data->numStrings;
        loadedLanguage.ptrStrings = (void*) (data + (int) data->stringsOffset);
        loadedLanguage.ptrTable = (void*) (data + (int) data->tableOffset);
        tableEntry = loadedLanguage.ptrTable;
        for (i = 0; i < loadedLanguage.numStrings; i++) {
                tableEntry->string += loadedLanguage.ptrTable;
                tableEntry++;
        }
}
5125B0 int __cdecl

LoadLanguageBinSection39000

(struct BinSection *bindata);
512870 int __thiscall

CareerShop::512870

(struct CareerShop *this);

searches in careerSponsors with use of careerStringPool

512990 struct CareerSponsor *__cdecl

FindCareerSponsorBySponsorNameHash

(unsigned int sponsorNameHash);

returns hashed SPONSOR_%S

5129F0 unsigned int __thiscall

CareerSponsor::GetSponsorNameLanguageKey

(struct CareerSponsor *this);
512A10 struct Bin34A1B *__cdecl

Find34A1BForMarker

(unsigned int markerHash);

data comes from bin section 34A18 in GLOBALB.BUN also sets sponsors to the ptr to sponsor instead of the name hash

512A70 void __cdecl

StoreCareerStageSettings

(struct CareerStageSettings *data, int size);
512B50 int __cdecl

CalculateReputationToAddFromWonRace

(float, struct CareerRace *race);

This gets loaded once (enforced by profileData.binSection80034A10loaded), data resides in GLOBAL/GLOBALB.BUN. Career/Sponsor/DVD/Magazines related. The data in this section is more sections, with magic 0x34A11-0x34A1F (excluding 0x34A13)

512C00 int __cdecl

LoadBinSection80034A10

(struct BinSection *binsection);
512EB0 int __thiscall

Career887C::ctor

(struct Career887C *this);
512F10 struct Career7B00 *__thiscall

Career::512F10

(struct Career *this, unsigned int hash);
512F70 int __thiscall

Career::512F70

(struct Career *this, int, int);
512FF0 int __thiscall

Career::512FF0

(struct Career *this, struct Marker *marker, struct CareerShop *shop);
513050 void __thiscall

Career::513050

(struct Career *this, struct MarkerQueryResult *markerQueryResult);
5130A0 int __thiscall

Career::5130A0

(struct Career *this, int);
513110 int __thiscall

Career::ShouldShowShopOnMap

(struct Career *this, struct CareerShop *shop);
513160 int __thiscall

Career::513160

(struct Career *this, int, int, int);
5132E0 float __thiscall

CareerStage::5132E0

(struct CareerStage *this);
513390 int __thiscall

CareerStage::513390

(struct CareerStage *this, struct CareerRace *race);

does nothing if the race is DDAY_EVENT_A or DDAY_EVENT_B

513430 void __thiscall

CareerStage::IncreaseRacesFinishedAndAddReputation

(struct CareerStage *this, int, struct CareerRace *race);
513490 int __thiscall

CareerStage::513490

(struct CareerStage *this);
513510 int __thiscall

CareerStage::513510

(struct CareerStage *this, struct CareerRace *race);
5135A0 int __thiscall

Career7148::5135A0

(struct Career7148 *this, __int16 *ptrOffsetInCareerStringPool);
513600 int __thiscall

Career7148::513600

(struct Career7148 *this, struct CareerRace *race, int);
513770 int __thiscall

Career7148::513770

(struct Career7148 *this, int);
5137C0 int __thiscall

Career::5137C0

(struct Career *this, int, int);

check if something is collected

513880 int __thiscall

Career::513880

(struct Career *this);
5138F0 int __thiscall

Career::5138F0

(struct Career *this, void *);
513910 void *__thiscall

Career::513910

(struct Career *this);
513950 int __thiscall

Career::513950

(struct Career *this);
5139C0 int __thiscall

Career::5139C0

(struct Career *this);
513A50 bool __thiscall

Career::GetMovieNameToPlay

(struct Career *this, char, char *movieNameBuffer);
513B30 void __thiscall

Career::513B30

(struct Career *this);
513BC0 int __thiscall

Career::513BC0

(struct Career *this);
return CarCollection::GetCareerCarForSlotHash(this->activeCarSlotHash);
513C30 struct CareerCar *__thiscall

Career::GetCarForActiveCareerCarSlot

(struct Career *this);

allocates struct Tmp4DF9C0ListEntry for every available car and puts it into the passed link

513C50 void __thiscall

Career::GetAvailableStockCars

(struct Career *this, struct ObjectLink *link);
513D30 int __thiscall

Career4230::513D30

(struct Career4230 *this);
513DB0 void __thiscall

Career4230::513DB0

(struct Career4230 *this);
513E00 int __thiscall

Career4230::513E00

(struct Career4230 *this, int);
513EB0 int __thiscall

CareerD24::513EB0

(struct CareerD24 *this, int field8index);

could be a reputation thing

513FE0 float __thiscall

CareerD24::513FE0

(struct CareerD24 *this);

TODO: what does this actually do (RecalculateUncollectedMoneyMarkers?)

5141B0 void __thiscall

Career::CheckMoneyMarkers

(struct Career *this);
514280 int __thiscall

Career::GetPartCost

(struct Career *this, int, int);
5142E0 int __thiscall

Career::5142E0

(struct Career *this, int, int, int);
5143C0 int __thiscall

Career::5143C0

(struct Career *this, int, int);

returns ptr to save data positioned after reading this

514400 void *__thiscall

CareerStage::ReadFromSaveData

(struct CareerStage *this, void *data, int);
514530 int __thiscall

Career::WriteToSaveData

(struct Career *this, int, int);
514780 void __thiscall

UIDLA::AddEntry

(struct UIDLA *this, struct UIDLA_ENTRY *entry);
514810 void __thiscall

Career4210::514810

(struct Career4210 *this);

See nfsu2-re-hooks/replace-5149C0-GetSmsMessageSubject.c

5149C0 void __thiscall

SmsMessage::GetSubject

(struct SmsMessage *this, char *dest, int maxlen);

Used once in EngageMessageDialogFNGObject::ctor. See nfsu2-re-hooks/replace-514B00-GetSmsMessageBody.c

514B00 void __thiscall

SmsMessage::GetBody

(struct SmsMessage *this, char *dest, int maxlen);
514C70 int __thiscall

SmsMessageList::514C70

(struct SmsMessageList *this);
514CB0 int __thiscall

SmsMessageList::IsMessageAlreadyReceived

(struct SmsMessageList *this, struct SmsData *smsdata);
514CF0 struct SmsMessage *__thiscall

SmsMessageList::GetFirstUnreadSmsMessage

(struct SmsMessageList *this);

When useCachedFlag, just return profileData.career.smsMessageList.numUnreadMessages, otherwise count all profileData.career.smsMessageList.smsMessages that have both read and deleted on 0. TODO check other xref, probably for displaying icon ingame

514D30 int __thiscall

SmsMessageList::GetNumUnreadMessages

(struct SmsMessageList *this, int useCachedFlag);

For every message, set flag movedToCorrectInbox when flag read is set.

514D80 void __thiscall

SmsMessageList::MarkReadMessagesMovedToCorrectInbox

(struct SmsMessageList *this);

marker is of type MARKER_TYPE_ENGAGE_TIP

514E10 int __thiscall

SmsMessageList::IsEngageTipUncollected

(struct SmsMessageList *this, struct Marker *marker);

returns ptr to save data positioned after reading this

514E80 void *__thiscall

SmsMessageList::ReadFromSaveData

(struct SmsMessageList *this, void *data, int);
514FD0 int __thiscall

CareerC00::514FD0

(struct CareerC00 *this, struct CareerShop *shop);
515060 int __thiscall

CareerC00::515060

(struct CareerC00 *this, struct Career_0 *into);
515750

Player_D4_100::Init

515800 void __thiscall

Player_D4::Clear

(struct Player_D4 *this);
515AA0 void __thiscall

Player::Clear

(struct Player *this, int playerIndex, int);
515BF0

ProfileData_156B0::WriteToSaveData

searches all cars (stock/tuned/career/online/sponsor)

5162D0 struct InventoryCar *__thiscall

CarCollectionWithPointers::FindCarWithFlagAfterGivenCar

(struct CarCollectionWithPointers *this, enum INVENTORY_CAR_FLAGS flag, struct InventoryCar *givenCar);
516340 int __thiscall

CarCollection::IsCareerSlot

(struct CarCollection *this, unsigned int slotNameHash);

may not modify ecx! see 52A7A5

516360 int __thiscall

CarCollection::IsStockCar

(struct CarCollection *this, unsigned int slotHash);
5163A0 int __thiscall

CarCollection::IsTunedOrCareerSlotUsed

(struct CarCollection *this, unsigned int slotNameHash);
5163C0 void __thiscall

CarCollection::ClearSponsorCarData

(struct CarCollection *this);

called (sometimes more than once) on profile load

516480 void __thiscall

CarCollection::ClearCareerCarData

(struct CarCollection *this);
516500 void __thiscall

CarCollection::LoadStockCars

(struct CarCollection *this, int unused);

may not modify ecx! see 52A736 and 52A7A5

5165E0 int __thiscall

CarCollection::HasFreeEntryInTunedCars

(struct CarCollection *this);
516620 int __thiscall

CareerCar::WriteToSaveData

(struct CareerCar *this, int, int);
5166B0 int __thiscall

CarCollection::WriteToSaveData

(struct CarCollection *this, int, int);
516A60 void __thiscall

TunedCar18::ctor

(struct TunedCar18 *this);
516AC0 void __thiscall

TunedCar18::ApplyTuningToInstance

(struct TunedCar18 *this, int playerIndex, struct MenuCarInstance *menuCarInstance, int);
516B30 void __thiscall

TunedCar::ctor

(struct TunedCar *this);

"FromStockCar" is an assumption, is this always true?

slotHash is like TUNED_CAR_%d car is only used to invoke struct InventoryCar$vtable.procGetCarIndex

516B90 int __thiscall

TunedCar::InitializeFromStockCar

(struct TunedCar *this, unsigned int slotHash, struct InventoryCar *car);

NOTE: THIS IS SHARED FOR struct TunedCar struct CareerCar struct OnlineCar just calls TunedCar18::ApplyTuningToInstance

516CA0 void __thiscall

TunedCar::ApplyTuningToInstance

(struct TunedCar *this, int playerIndex, struct MenuCarInstance *menuCarInstance, int);
517520 int __thiscall

List::517520

(struct List *this, int);
517720 int __thiscall

UIElement::AnimationChanged

(struct UIElement *this);
517EE0 int __thiscall

UIElementVisitor::acceptElement__setElementsCurrentAnimationToInit

(struct UIElementVisitor *this, struct UIElement *element);
struct UIElementVisitor_FindByHash visitor;

visitor.__parent.vtable = &vtable_UIElementVisitor_FindByHash;
visitor.searchingHash = hash;
visitor.foundUIElement = 0;
FNGInfo::VisitUIRecursively(this, visitor);
return visitor.foundUIElement;
517F80 struct UIElement *__thiscall

FNGInfo::FindUIElementByHash

(struct FNGInfo *this, unsigned int hash);
517FE0 int __thiscall

FNGInfo::FindElementByFieldC

(struct FNGInfo *this, int searchingUIElementFieldC);
518280 void __thiscall

FNGInfoList::AddEntry

(struct FNGInfoList *this, struct FNGInfo *fngInfo);
519AE0 void __thiscall

UIData_field8_8::ctor

(struct UIData_field8_8 *this);

frees struct NamedLinkNode.name if not empty, then allocate just enough memory to fit name into it, copy it, cihash it and put it into struct NamedLinkNode.cihashOfName

519DE0 void __thiscall

NamedLinkNode::CopyNameIntoCAndHashInto10

(struct NamedLinkNode *this, char *name);

Goes through __parent.next until the next one is null or its fngName and hash matches. this is unused.

519E50 struct FNGInfo *__thiscall

FNGInfoList::GetFNGInfoByNameByHierarchy

(struct FNGInfoList *thisUnused, char *fngName, struct FNGInfo *fnginfo);
519EB0 void __thiscall

UIDLA::CreateEntryAndAdd

(struct UIDLA *this, char *name, int type);
519F10 struct UIDLA_ENTRY *__thiscall

UIDLA::FindEntryWithName

(struct UIDLA *this, char *name);

and zero field 38

51A740 int __thiscall

UIData_field8::CreateField8Instances

(struct UIData_field8 *this, int);

calls Init for fngs in DC, nulls data in field8, zeros other fields

51A7E0 int __thiscall

UIData_field8::ResetThings

(struct UIData_field8 *this);
51A8B0 void __thiscall

UIData_field8::51A8B0

(struct UIData_field8 *this, struct FNGInfo *fngInfo);
51AA20 int __thiscall

UIData_field8::QueueUIMessage

(struct UIData_field8 *this, unsigned int message, int, struct FNGInfo *fngInfo, int, int);
51AB20 int __thiscall

UIData_field8::51AB20

(struct UIData_field8 *this, char *fngName, struct FNGInfo *fngInfo);
51AC10 void __thiscall

UIData_field8::CreateAndAdd412CEntryForFNG

(struct UIData_field8 *this, char *fngName, struct FNGInfo *parentFngInfo, int controlMask);
51ADB0 int __thiscall

UIData_field8::CreateAndAdd412CEntryForFNG_3

(struct UIData_field8 *this, struct FNGInfo *fngInfo);
51AE80 int __thiscall

UIData_field8::51AE80

(struct UIData_field8 *this, char *fngName);

data is binsection 30203 or 30210

51B8E0 struct SomethingUIImpl *__thiscall

SomethingUIImpl::ctor

(struct SomethingUIImpl *this, struct BinSection *data);
51B990 void __thiscall

SomethingUIImpl::dtor

(struct SomethingUIImpl *this);
51B9D0 int __thiscall

SomethingUIImpl::LinkWithFNGInfoAndCreateFNGObject

(struct SomethingUIImpl *this, struct FNGInfo *fngInfo, int);

calls dtor of this->fngObject and nulls it (if set), nulls this->fngInfo->somethingUIImpl and then nulls it (if set), frees this->data30203 and then nulls it (if set)

SomethingUI::NukeAllScreens has this inlined

51BA60 void __thiscall

SomethingUIImpl::ReleaseFngAndFngInfoAndPtrFieldC

(struct SomethingUIImpl *this);
51BAD0 unsigned int __thiscall

SomethingUI::SumCSHashOfFNGNamesInEntries

(struct SomethingUI *this);

cdecl for SomethingUI::SumCSHashOfFNGNamesInEntries with profileData.somethingUI

51BB20 unsigned int __cdecl

SomethingUISumCSHashOfFNGNamesInEntries

();
51BB30 struct SomethingUIImpl *__thiscall

SomethingUI::FindBinSectionInLink?

(struct SomethingUI *this, struct BinSection *binsection);

in struct SomethingUI.link, move the entry with matching (hash of) name to the front of the link and return it (or return null if not found)

51BB70 struct SomethingUIImpl *__thiscall

SomethingUI::MoveEntryForFNGToTopAndReturnIt

(struct SomethingUI *this, char *fngName);

just called from LoadBinSection30203_30210

param oneOrZero is !!something_864F7C

creates a new struct SomethingUIImpl to hold the data and adds it as last in profileData.somethingUI.link

51BCA0 void __thiscall

SomethingUI::LoadFromBinSectionAndAddAsLast

(struct SomethingUI *this, struct BinSection *data, int oneOrZero);

uses SomethingUI::MoveEntryForFNGToTopAndReturnIt

51BD10 struct FNGObject *__cdecl

FindFNGInEntriesOfSomethingUI

(char *fngName);

calls SomethingUI::LoadFromBinSectionAndAddAsLast

51BD30 int __cdecl

LoadBinSection30203_30210

(struct BinSection *bindata);
51BD70 struct FontData *__cdecl

GetFontData?

(int);
51C610 int __cdecl

UnloadBinSection39020

(struct BinSection *bindata);

used in UIData::InitFNGPackage at 54E571

51C860 int __thiscall

UIElementVisitor::acceptElement__forInitFNGPackage_2

(struct UIElementVisitor *this, struct UIElement *element);

used in UIData::UnloadFNGPackage

51C8A0 int __thiscall

UIElementVisitor::acceptElement::forUnloadFNGPackage

(struct UIElementVisitor *this, struct UIElement *element);
51C8C0 int __thiscall

UIData::UnloadFNGPackage

(struct UIData *this, struct FNGInfo *fnginfo);
51CA50 void __thiscall

UIData::DrawMagazineBack

(struct UIData *this, struct FNGInfo *magazineBackFNGInfo, int always0);
51CB20 void __thiscall

UIData::51CB20

(struct UIData *this, char *fngName, char *parentFngName, int controlMask);
51CBA0 int __thiscall

UIData::SwitchFEngPackages

(struct UIData *this, char *fromFngName, char *toFngName);
51CC00 int __thiscall

UIData::51CC00

(struct UIData *this, char *fngName);
51CC60 int __thiscall

UIData::51CC60

(struct UIData *this, char *fngName, unsigned int hash, char);

Searches through field_8.

51CCD0 struct LevelSorterPoolEntry *__thiscall

UIData::GetLevelSorterPoolEntryForFngName

(struct UIData *this, char *fngName);
51CD40 void __cdecl

AssignSomethingUIImplField1C

(char *fngName, __int16 value);
51CD60 int __cdecl

GetFNGInfoField8C

(char *fngName);
51CDC0 int __cdecl

QueueUIMessage_Wrapper

(unsigned int message, int, int, struct FNGInfo *fng);
51CDF0

SendUIMessageQueued?

51CE80 void __cdecl

AssignSomethingUIImplField1E

(char *fngName, char value);
51CF70 void __cdecl

SetUIElementAnimationByName

(struct UIElement *uielement, char *animationStr, char resetAnimationWhenThisAnimationAlreadyActive);
51CFE0 void __cdecl

SetUIElementAnimationByHash

(struct UIElement *element, unsigned int hash, char resetAnimationWhenThisAnimationAlreadyActive);
51D040 int __cdecl

IsUIElementAnimationOngoing

(struct UIElement *element, char *animationName);

TODO

51D070 void __cdecl

GetUIElementTopLeft

(struct UIElement *element, float *x, float *y);

TODO

51D170 void __cdecl

GetUIElementRightBottom

(struct UIElement *element, float *right, float *bottom);

some ui element get size maybe?

51D730 int __cdecl

GetUIElementSize??

(struct UIElement *element, float *floatPtrA, float *floatPtrB);

out will be ([-cw/2,cw/2],[-ch/2,ch/2]) Returns 1 on success.

51D9F0 int __cdecl

GetUIElementRect

(struct UIElement *element, struct U2RECT *out);
51DD90 int __thiscall

PCHelpBarFNGObject::FadeinPlayerNameFadeoutMoney

(struct PCHelpBarFNGObject *this, struct UILabel *playerNameUIElement, struct UILabel *moneyUIElement, float, float);

Discovered when looking at cheats. 8 is some choose sound, 9 too, .. TODO other IDs.

51DE60 int __cdecl

PlayUISoundEffect

(void *unknownUnused, int soundID);

If it's already allocated and long enough, NOP. Otherwise allocate new memory, copy existing string, free previous memory. Does not actually check the allocatedWcharLength field, but does a strlen to check if the existing string length is less than required.

51DE90 int __thiscall

WideCharString::EnsureAllocatedSize

(struct WideCharString *this, int length);

these are for the OPTION_DATA_ elements, aka the primary/secondary control elements (complements the Name element)

51DFC0 void __thiscall

ControllerOptionsRelated::ctor_data

(struct ControllerOptionsRelated *this, int *, float *, char);

this is for the OPTION_NAME_ element (the name of an option), complements the Data elements

51E090

ControllerOptionsRelated::ctor_title

51EFD0 void __thiscall

MailBoxRelated1::RecalculateUIElementRectOrSomething

(struct MailBoxRelated1 *this);
51F4E0 void __thiscall

SubScrollingThing::51F4E0

(struct SubScrollingThing *this);

nop if uielement is not null otherwise writes floatField_8C, floatField_90, floatField_94, floatField_98

51F560 void __thiscall

SubScrollingThing::RecalculateSomeSizeProbably

(struct SubScrollingThing *this);
51F670 struct IconScrollerIcon *__thiscall

IconScrollerIcon::ctor

(struct IconScrollerIcon *this, int, int, int);
51F820 int __thiscall

IconScroller::GetIndexOfIconInIconList

(struct IconScroller *this, struct IconScrollerIcon *icon);
51FD10 void __thiscall

IconScroller::51FD10

(struct IconScroller *this);
5234C0

CalculateVisualRep

524240 int __thiscall

Career887C::524240

(struct Career887C *this, struct CareerRace *race);
5242C0 int __thiscall

Career887C::5242C0

(struct Career887C *this, struct CareerRace *race, int);
5253F0 int __thiscall

Career887C::5253F0

(struct Career887C *this, int);
525650 void __thiscall

Career887C::525650

(struct Career887C *this);
525CA0 void __thiscall

Player_D4_100::ctor

(struct Player_D4_100 *this);
525CE0 void __thiscall

Player::dtor

(struct Player *this);
525CF0 void __thiscall

OnlineCareerCar::ctor

(struct OnlineCareerCar *this);

this is pretty much memcpy(this, from, sizeof(struct CareerD24_54_30) but instead all fields are copied separately

525D10 void __thiscall

CareerD24_54_30::CopyFrom

(struct CareerD24_54_30 *this, struct CareerD24_54_30 *from);
526C10 struct FNGInfo *__cdecl

GetFNGInfoForCurrentlyShownDialogIfDialogIdMatches

(int dialogid);

Returns the name of what FNG to display for the dialog that was passed. See nfsu2-re-hooks/replace-526C40-GetFNGForDialog.c

526C40 char *__cdecl

GetFNGforDialog

(struct DialogInfo *dialog);
526D90

UIProgressBar::526D90

526F80

UIProgressBar::526F80

"valid" because it checks if the race hash is also present in struct Career.field_7148.raceHash

527780 struct CareerRace *__thiscall

Career::FindValidRaceForMarker

(struct Career *this, struct Marker *marker);
527800 void __thiscall

Career::QueryMarker

(struct Career *this, struct MarkerQueryResult *result, struct Marker *marker);

doesn't use this; something with cars

527890 int __thiscall

Career::527890

(struct Career *this);
5278F0 int __thiscall

Career::5278F0

(struct Career *this);
527970 int __thiscall

Career7148::527970

(struct Career7148 *this, struct CareerStage *stage, int);
527AA0 int __thiscall

Career7148::527AA0

(struct Career7148 *this, int);
527BB0 struct CareerRace *__thiscall

Career7148::527BB0

(struct Career7148 *this, int);
527D30 int __thiscall

Career::527D30

(struct Career *this);
528320 int __thiscall

Career::IncrementCurrentStage?

(struct Career *this, int);
528370 int __stdcall

PlaySound528370

(void *sound);

param marker may be null

this func only plays some sound!?

5283C0 void __thiscall

Career::MoneyMarkerHitPlaySound??

(struct Career *this, struct Marker *marker);
528410 float __thiscall

Career::528410

(struct Career *this);

'this' is unused; can be treated as a normal __stdcall (__cdecl even)

finds first career car in profileData.player1.carCollection.__parent.careerCars with nonzero isLocked and puts it on zero

5284D0 void __thiscall

Career::UnlockNextLockedCarSlot

(struct Career *this);
528500 int __thiscall

Career::528500

(struct Career *this, unsigned int hash);

something with "THE_UNIQUES_SHOP"

528560 int __thiscall

Career::528560

(struct Career *this);
528600 int __thiscall

Career::528600

(struct Career *this, int, int);
528680 struct CareerD24 *__thiscall

CareerD24::ctor

(struct CareerD24 *this);
528710 int __thiscall

CareerD24::528710

(struct CareerD24 *this);
5287A0 int __thiscall

CareerD24::5287A0

(struct CareerD24 *this, int);

zeros collectedEngageMarkers, finds all MARKER_TYPE_ENGAGE_TIP and put them in collectedEngageMarkers if they're not collected (checked with SmsMessageList::IsEngageTipUncollected)

528980 void __thiscall

Career::RecalculateCollectedEngageMarkers

(struct Career *this);

changes struct Career.bank and struct CareerCar434.moneySpentOnCar

5289F0 int __thiscall

Career::HandleMoneyAfterPartBought

(struct Career *this, int, int);
528A60 int __thiscall

Career::UpdateCareerStatsObject

(struct Career *this, struct CareerStats *stats);
5291E0 void __thiscall

Career::5291E0

(struct Career *this);
529230 int __thiscall

Career::ReadFromSaveData

(struct Career *this, void *data, int);

Checks with SmsMessageList::IsMessageAlreadyReceived first.

5295F0 struct SmsMessage *__thiscall

SmsMessageList::SendMessage

(struct SmsMessageList *this, struct SmsData *smsdata);

Checks with SmsMessageList::IsMessageAlreadyReceived first.

529670 struct SmsMessage *__thiscall

SmsMessageList::SendMessageFormatted

(struct SmsMessageList *this, struct SmsData *smsdata, unsigned int bodyFormatLanguageLabel, unsigned int subjectFormatLanguageLabel, unsigned int subjectParameterLanguageLabel);
529700 void __thiscall

SmsMessageList::529700

(struct SmsMessageList *this);
529750 void __thiscall

SmsMessageList::529750

(struct SmsMessageList *this, float someFloat);

Goes through all smsDatas and send all unreceived messages with type 8 (My game files do not have any messages with that type)? Also checks for type SMS_TYPE_OUTRUN_INFO, then does more checks with arg0 before sending.

arg0 is also put in {struct Career+field_8734} before calling this

529860 int __thiscall

SmsMessageList::SendSomeCareerStartMsgs?

(struct SmsMessageList *this, void *);
529920 void __thiscall

SmsMessageList::SendUnlockMessagesForCurrentGameProgress

(struct SmsMessageList *this, struct CareerRace *race);

Goes through all smsDatas and send every one that hasn't been received yet and has type == SMS_TYPE_DVD_COVER and data == index by using SmsMessageList::SendMessage (which already has a check for if it was already received...).

5299B0 void __thiscall

SmsMessageList::SendDVDCoverSmsWithIndex

(struct SmsMessageList *this, int index);
529A40 int __thiscall

SmsMessageList::529A40

(struct SmsMessageList *this, int);

Goes through all smsDatas and send every one that hasn't been received yet and has type == SMS_TYPE_OUTRUN_INFO by using SmsMessageList::SendMessage when it wasn't received yet. (which already has a check for if it was already received...). This only matches the single SMS_OUTRUN_INTRO SMS. TODO check xref to explore outrun code

529B50 void __thiscall

SmsMessageList::SendOutrunInfoSms

(struct SmsMessageList *this);

Goes through all smsDatas. When didWin is 1, send all with type == SMS_TYPE_OUTRUN_VICTORY, else send all with type == SMS_TYPE_OUTRUN_DEFEAT. Uses SmsMessageList::SendMessage. TODO xref to explore outrun code

529BD0 void __thiscall

SmsMessageList::SendOutrunVictoryOrDefeatSms

(struct SmsMessageList *this, int didWin);

Returns null when it was already received.

529C40 struct SmsData *__thiscall

SmsMessageList::SendEngageTipSmsMessage

(struct SmsMessageList *this, struct Marker *marker);

fastcall? ecx is playerIndex, eax is slotHash

529CC0

IsCarUnlockedAtStartOfCareer

529F70 int __cdecl

IsCarUnlockedByCareerProgressOrSponsorCarUnlockedByCheat

(int unused, unsigned int slotHash);
52A220 void __thiscall

Player_D4::ctor

(struct Player_D4 *this);

also does profileData.field_156B0 and controllerStruct874C40

52A280

Player::WriteToSaveData

has CarCollection::ctor inlined (at least it looks like that from a distance, I haven't looked very closely but seems reasonable to think)

52A5D0 void __thiscall

CarCollectionWithPointers::ctor

(struct CarCollectionWithPointers *this);

slotNameHash like STOCK_PEUGOT or CAREER_SLOT_%d or TUNED_CAR_%d it supports creating from existing tuned/career car, but that is never actually possible to invoke with UI?

52A710 struct TunedCar *__thiscall

CarCollection::CreateNewTunedCarFromFromDataAtSlot

(struct CarCollection *this, unsigned int slotNamehash);
52A7F0 void __thiscall

CarCollection::ClearOnlineCarData

(struct CarCollection *this);
52A8A0 void __thiscall

CarCollectionWithPointers::Clear

(struct CarCollectionWithPointers *this, int someNumber);
52C2F0 int __thiscall

UILabel::SetStringToDialogText

(struct UILabel *this, struct DialogInfo *dialogInfo);
52C390 void __thiscall

FERenderObject::FreeAllRenderEPolys

(struct FERenderObject *this);
52C3A0 void __thiscall

FERenderObject::FreeAllRenderEPolys_0

(struct FERenderObject *this, void *unused);

When fngName is null, searches every FNG in this->fngPackagesDC.__parent.first for the given hash. Otherwise, limit the search to the FNG that is in the hierarchy of this->fngPackagesDC.__parent.first (by using FNGInfoList::GetFNGInfoByNameByHierarchy).

fngName is nullable

52C570 struct UIElement *__thiscall

UIData_field8::GetUIElementByHashInFngName

(struct UIData_field8 *this, unsigned int hash, char *fngName);
52CC50 void __thiscall

SomethingUI::ctor

(struct SomethingUI *this);

Something with font, section is in languagefiles

52CD00 int __cdecl

LoadLanguageFontBinSection30201

(struct BinSection *bindata);
52CD90 int __cdecl

LoadBinSection39020

(struct BinSection *bindata);
52CDD0 int __thiscall

UIData::AddJoyHandlers

(struct UIData *this);
52CE40 void __thiscall

UIData::52CE40

(struct UIData *this, char *fngName, unsigned int hash);

searches either both hierarchies (struct UIData_field8.fngPackagesDC and struct UIData_field8.fngPackagesEC) or, if that's not initialized yet[citation needed], searches profileData.somethingUI

52CEF0 struct FNGInfo *__cdecl

GetFNGInfoByName

(char *fngName);
52CF60 int __cdecl

IsFNGLoaded?

(char *fngName);
52D020 int __cdecl

IsPointInUIElement

(float xFromMid, float yFromMid, struct UIElement *uiElement);

Checks if the primary mouse button is held down. Delegates to IsPointInUIElement

52D090 int __cdecl

IsCursorDownInUIElement

(struct UIElement *uiElement);

Checks is the primary mouse button is just down (pressed, not holding down). Delegates to IsPointInUIElement

52D100 int __cdecl

DidCursorPressInUIElement

(struct UIElement *uiElement);

Used when a button is pressed, to send the appropriate message.

52D170 int __thiscall

PCHelpBarFNGObject::GetMessageToSendFromMask

(struct PCHelpBarFNGObject *this, enum PCHELPBARFLAGS mask);

See PCHelpBarFNGObject::SyncByMask for mask. BUTTON_PC_NAV_CONTINUE is returned if it's not any of the other BUTTON_ masks. mask is just (1 << x)

52D330 unsigned int __thiscall

PCHelpBarFNGObject::GetButtonLanguageKey

(struct PCHelpBarFNGObject *this, int mask);

Called from PCHelpBarFNGObject::MessageHandler.

52D4F0 void __thiscall

PCHelpBarFNGObject::OnCursorMoved

(struct PCHelpBarFNGObject *this);
52E200 int __thiscall

ScrollingThing::UpdateHandlePositionProbably1

(struct ScrollingThing *this, int, int numEntries, int);
52E320 int __thiscall

ScrollingThing::UpdateHandlePositionProbably2

(struct ScrollingThing *this, int, int numEntries, int);

sets frameTimeWhenArrowClicked and currentScrollAmountToPerform and plays sounds when indeed clicked

52E470 void __thiscall

ScrollingThing::CheckMouseClickOnArrows

(struct ScrollingThing *this);
52E4E0 void __thiscall

ScrollingThing::52E4E0

(struct ScrollingThing *this);
52E670 void __thiscall

ScrollingThing::CheckMouseClickOnBar

(struct ScrollingThing *this);
52E770 int __thiscall

SubScrollingThing::AddMailBoxRelated1or3

(struct SubScrollingThing *this, struct MailBoxRelated1 *thing);
52F680 int __thiscall

IconScroller::SetSelectedIcon

(struct IconScroller *this, struct IconScrollerIcon *iconToSelect);
52F7C0 int __thiscall

IconScroller::52F7C0

(struct IconScroller *this, int);
52FBF0 void __thiscall

IconScrollerFNGObject::StopInput

(struct IconScrollerFNGObject *this);

called from Career::InitOnProfileLoad

531800 void __thiscall

Career887C::InitOnProfileLoad

(struct Career887C *this);
531CC0 void __thiscall

ProfileData::dtor

(struct ProfileData *this);
531D20 int __thiscall

CarCollection::ctor

(struct CarCollection *this);

Converts language aware, like LanguageAwareStrcpyCharToWchar does. Calls WideCharString::EnsureAllocatedSize. Returns itself.

532670 struct WideCharString *__thiscall

WideCharString::SetFromCharString

(struct WideCharString *this, char *string);
532740 struct Career *__thiscall

Career::ctor

(struct Career *this);
532830 void __thiscall

Career::InitOnProfileLoad

(struct Career *this, char);
532A50 int __thiscall

Career::532A50

(struct Career *this, void *);
532B10 int __thiscall

Career::532B10

(struct Career *this, int);
532C20 int __thiscall

Career::532C20

(struct Career *this, void *);
532C60 int __thiscall

CareerStage::IncrementStageIfFinished

(struct CareerStage *this);

what's the difference with Career::SignRandomSponsorForSomeReason?

532CF0 void __thiscall

Career::SignSponsor

(struct Career *this, struct CareerSponsor *sponsor);

Implementation:

struct SmsData *smsdata;

smsdata = this->smsMessageList->SmsMessageList::SendEngageTipSmsMessage(engageMarker);
if (smsdata) {
        this->bank += smsdata->moneyReward;
        this->Career::RecalculateCollectedEngageMarkers();
}
532D40 void __thiscall

Career::EngageTipMarkerHit

(struct Career *this, struct Marker *marker);
532D80 int __thiscall

Career::532D80

(struct Career *this, unsigned int hash);
532E10 int __thiscall

Career::532E10

(struct Career *this);

calls SmsMessageList::SendOutrunInfoSms and Career887C::511000

532E30 void __thiscall

Career::532E30

(struct Career *this);

calculates in possible sponsor bonus money TODO: this returns 0 on some conditions. what are they?

532E50 int __thiscall

Career::GetBankWonFromRace

(struct Career *this);
532EA0 int __thiscall

CareerD24::532EA0

(struct CareerD24 *this, struct CareerRace *race);
5330D0

CareerD24::GetReputationWonFromRace

5331C0 int __thiscall

Career::5331C0

(struct Career *this);
533310 int __thiscall

Career::533310

(struct Career *this);
5337D0 int __thiscall

Career4210::5337D0

(struct Career4210 *this, struct CareerRace *race);

Combines GetSmsDataForHash, SmsMessageList::IsMessageAlreadyReceived and SmsMessageList::SendMessage.

533890 struct SmsMessage *__thiscall

SmsMessageList::SendMessageByHash

(struct SmsMessageList *this, int hash);

Uses SmsMessageList::SendMessageFormatted. TODO

5338C0 void __thiscall

SmsMessageList::SendMagOrUnlockMessage

(struct SmsMessageList *this, int);
533A90 int __thiscall

CareerC00::OnOutrunFinish

(struct CareerC00 *this, int didWin);
533B40 int __thiscall

CareerC00::533B40

(struct CareerC00 *this);
533BE0 int __thiscall

CareerC00::533BE0

(struct CareerC00 *this, int);
533D20 int __thiscall

CareerC00::533D20

(struct CareerC00 *this);

typeToCheck: - if & 0x1FF, check if unlocked by career progress or if sponsor car, check cheat - if & 0x1F9, check if unlocked from the start

534180 int __cdecl

IsCarUnlocked

(int typeToCheck, unsigned int slotHash, int check2ndPlayerCarCollection);
534290 int __thiscall

Career713C::534290

(struct Career713C *this);
5344A0 void __thiscall

Player::ctor

(struct Player *this);
5346F0 void __thiscall

ProfileData::Clear

(struct ProfileData *this);

typeToCheck: - if & 0x1FF, check if unlocked by career progress or if sponsor car, check cheat - if & 0x1F9, check if unlocked from the start

checks all cars (stock, tuned, career, online, sponsor), depending on flagsToCheck

534850 int __thiscall

CarCollectionWithPointers::CountAvailableCars

(struct CarCollectionWithPointers *this, enum INVENTORY_CAR_FLAGS flagsToCheck, int typeToCheck);

stockCarHash like STOCK_PEUGEOT

5348E0 void __thiscall

CarCollection::5348E0

(struct CarCollection *this, int slotIndex, unsigned int stockCarHash);
535610 struct UIDLA *__stdcall

CreateUIDLA

(char *name);
5358D0 struct UIDLA *__stdcall

CreateUIDLAWithExtraUpperLeftLowerRight

(char *name);
5359D0 int __thiscall

UIData_field8_4134::ctor

(struct UIData_field8_4134 *this);
535F40 void __thiscall

UILabel::SetWcharString

(struct UILabel *this, wchar_t *wcharBuffer);

Only seems to be used for dynamic things such as: money, player name, sms messages, track length...

535FE0 void __thiscall

UILabel::SetString

(struct UILabel *this, char *str);

also creates FERenderObjectPool and FERenderEPolyPool

536050 void __thiscall

UIDataC::ctor

(struct UIDataC *this);
536170 struct UIData_field8 *__thiscall

UIData_field8::ctor

(struct UIData_field8 *this);
5362E0 int __thiscall

UIData_field8::DirectPopFNG

(struct UIData_field8 *this, struct FNGInfo *fnginfo);
536520 int __thiscall

UIData_field8::536520

(struct UIData_field8 *this);
5371A0

UIDataC::5371A0

537290 int __cdecl

UnloadLanguageFontBinSection30201

(struct BinSection *bindata);

Called from ??SetupPools.

5372E0 struct UIData *__thiscall

UIData::ctor

(struct UIData *this);

Frees struct UIElement::FERenderObject and its EPoly objects with FERenderObject::FreeAllRenderEPolys_0 and FERenderObject::FreeAllRenderEPolys.

5374F0 int __thiscall

UIElementVisitor_ClearFNGCache::acceptElement

(struct UIElementVisitor_ClearFNGCache *this, struct UIElement *element);
537540 void __thiscall

UIData::DrawMagazineBackIfNeeded

(struct UIData *this);
537580 void __thiscall

UIData::PopPackage

(struct UIData *this, char *fngName);

'this' unused, can be called as __stdcall

it just passes args to IsPointInUIElement

537690 int __thiscall

UIData::IsPointInUIElement

(struct UIData *this, float xFromMid, float yFromMid, struct UIElement *uiElement);

goes through levelSorterPoolEntry and assigns indexInLevelSorterLink and indexInLevelSorterLink

5376B0 int __thiscall

UIData::ReassignLevelSorterIndices

(struct UIData *this);
5376F0 void __thiscall

UIData::RemoveFNGFromUIObject

(struct UIData *this, char *fngName);
537750 void __thiscall

UIData::ClosePackage

(struct UIData *this, char *fngName);
5377A0 void __thiscall

UIData::ShowFNG

(struct UIData *this, char *currentFNGName, char *fngName, int);

Called from ??SetupPools.

537830 void __cdecl

CreateUI

();

calls UIData::DrawMagazineBackIfNeeded if drawHud

537930 void __cdecl

DrawMagazineBack

();
537950 void __cdecl

SetFNGControlMask?

(char *fngName, int mask);

simple wrapper for UIData::ShowFNG

537980 void __cdecl

ShowFNG

(char *currentFNGName, char *fngName, int);
5379A0 void __cdecl

RemoveFNGFromUIObject

(char *fngName);
5379C0 struct UIElement *__cdecl

FindUIElementByHash

(char *fngName, unsigned int hash);
537A10 struct UILabel *__cdecl

FindUILabelByHash

(char *fngName, unsigned int hash);
537A60 struct UIElementType1 *__cdecl

FindUIElementType1ByHash

(char *fngName, unsigned int hash);
537AB0 void __cdecl

SetNullableUILabelWcharString

(struct UILabel *, wchar_t *strc);
537AD0 void __cdecl

SetUILabelByFngByHashWcharText

(char *fngName, unsigned int labelElementHash, wchar_t *text);

paramsPtr points to array of parameters Delegates to UILabel::SetString.

537B30 int __cdecl

SetUILabelFormattedString

(struct UILabel *label, char *format, void *paramsPtr);

Only used for a few things, such as: sms 'from', sms 'subject', part name in customize. Delegates to SetUILabelFormattedString

537B80 int __cdecl

SetUILabelByHashFormattedString

(char *fngName, unsigned int hash, char *format, int parameter);

varargs

537BE0 int

SetNullableUILabelFormattedStringAndMakeVisible

(struct UILabel *label, char *format, int params, ...);
537C00

SetUIElementByHashAnimationByName

537E60 void __thiscall

PCHelpBarFNGObject::UpdatePlayernameAndMoneyAndResetAnimation

(struct PCHelpBarFNGObject *this);
538080 int __thiscall

ScrollingThing::538080

(struct ScrollingThing *this, int, int numEntries, int);
538130 void __thiscall

ScrollingThing::CheckMouseInput

(struct ScrollingThing *this);
5397E0 int __thiscall

CommonFNGObjectStructA::UpdateAfterScrollEvent?

(struct CommonFNGObjectStructA *this, int);
53D510

PerformanceDynoResultsFNGObject::MessageHandler

53D8C0

RemoveUIMenuAssetReputationUI

53E0B0 int __thiscall

Career887C::53E0B0

(struct Career887C *this, int, int);
53ED20 void __thiscall

ProfileData::ctor

(struct ProfileData *this);

only dismisses when idToDismiss==shownDialog.dialogId, nop otherwise

540A60 int __cdecl

DismissDialog

(int idToDismiss);
540AB0 void __thiscall

FocusedTextbox::UpdateDisplayedText

(struct FocusedTextbox *this, char showCaret);
540C10 void __thiscall

UIProgressBar::InitializeElements

(struct UIProgressBar *this, struct UIProgressBarInitializeElementsConfig *config, char toBePutInField4);
540D20 void __thiscall

UIProgressBar::UpdateUIHorizontal

(struct UIProgressBar *this);
540E90 void __thiscall

UIProgressBar::UpdateUIVertical

(struct UIProgressBar *this);

magazine/dvd showcase (picture) done

541090 int __thiscall

CareerStage::OnShowcaseDone

(struct CareerStage *this, void *);
5410E0 int __thiscall

Career::5410E0

(struct Career *this, struct CareerRace *race);
541120 int __thiscall

Career::541120

(struct Career *this, int);
541160 int __thiscall

Career::541160

(struct Career *this, struct CareerRace *race);

magazine/dvd showcase (picture) done

541210 int __thiscall

Career::OnShowcaseDone

(struct Career *this, void *);
5412D0 int __thiscall

Career::5412D0

(struct Career *this);
541320 int __thiscall

Career::OnOutrunFinish

(struct Career *this, int didWin);

gives race reward money, sends sms messages if needed, increases current stage idx if needed, more things...

541420 int __thiscall

Career::DoPostRaceThings

(struct Career *this, unsigned int raceHash);

changes activeCarSlotHash also sets this->field_873D = 1

541540 void __thiscall

Career::541540

(struct Career *this, int slotIndex, unsigned int stockCarHash);
5415E0 int __thiscall

Career::5415E0

(struct Career *this, int, int, int, int);
541680

Career::541680

what's the difference with Career::SignSponsor? this one does a lot more...

5417F0

Career::SignRandomSponsorForSomeReason

542340 void __thiscall

SomethingUIImpl::Unload

(struct SomethingUIImpl *this);

has SomethingUIImpl::ReleaseFngAndFngInfoAndPtrFieldC inlined

name is kinda dramatic but it seems like it clears all references to linked fngs?

542390 void __thiscall

SomethingUI::NukeAllScreens

(struct SomethingUI *this, int keepFNGRenderObjects);

called when the binsection is being unloaded

542530 void __thiscall

SomethingUI::UnloadFNGPackageByBinsection

(struct SomethingUI *this, struct BinSection *binsection, int zeroOrOneUnused);

Unloads FNG packages?

5425A0 int __cdecl

UnloadBinSection30203_30210

(struct BinSection *bindata);

Uses FindUILabelByName, then SetUILabelFormattedString.

542600 int __cdecl

SetUILabelByNameFormattedStringAndMakeVisible

(char *fngName, char *uiElementName, char *format, int parameter);

send command to UI element?

5426C0 void __cdecl

SetUIElementByNameAnimation?

(char *fngName, char *elementName, char *animationStr, char resetAnimationWhenThisAnimationAlreadyActive);
542990 void __thiscall

PCHelpBarFNGObject::SetVisible

(struct PCHelpBarFNGObject *this, int show);

basename can be: SideScroller: vertical scrollbar (to place at the left/right side) SideScrollBar: TBD ScrollBar/scrollbar: TBD Chat_ScrollBar: TBD empty string: TBD? H_ScrollBar: TBD Scroll_Bar: TBD basename will be used to get ui elements with hash %s_Backing, %s_Handle, ...

542AC0 struct ScrollingThing *__thiscall

ScrollingThing::ctor

(struct ScrollingThing *this, char *fngName, char *basename, char, char, char);

may not be ctor, but sure looks like it

542CA0 int __thiscall

SubScrollingThing::ctor

(struct SubScrollingThing *this, char *fngName, char *uiElementName, char *scrollbar_basename, char, char, char, char);
543840 struct IconScrollerBase *__thiscall

IconScrollerBase::ctor

(struct IconScrollerBase *this, char *fngName, char *str_OPTION_MASTER, char *str_LOCK_MASTER, char *str_BUTTON_MASTER, char *str_OptionPrefix, char someChar);
543A90 struct IconScroller *__thiscall

IconScroller::ctor

(struct IconScroller *this, char *ptrFngName, char *str_OPTION_MASTER, char *str_LOCK_MASTER, char *str_BUTTON_MASTER, char *str_OptionPrefix, float floatArg_14);

returns uiElement10

543C10 struct UIElementType1 *__thiscall

IconScroller::AddIconEntry

(struct IconScroller *this, struct IconScrollerIcon *icon);
543D40

IconScrollerFNGObject::MessageHandler

544880 int __thiscall

CommonFNGObjectStructA::544880

(struct CommonFNGObjectStructA *this, int);
5448F0 int __thiscall

CommonFNGObjectStructA::5448F0

(struct CommonFNGObjectStructA *this, int);
544F80 struct s54F980 *__thiscall

s54F980::ctor

(struct s54F980 *this);
54A800

PerformanceDynoChartFNGObject::MessageHandler

54B0E0

MagazineBackFNGObject::MessageHandler

54B210

MagazineSelectFNGObject::MessageHandler

54BD30 int __thiscall

Career887C::54BD30

(struct Career887C *this, int);
54C050 int __thiscall

DialogFNGObject::MessageHandler

(struct DialogFNGObject *this, int, int, int, int);
54C3D0 void __thiscall

DialogFNGObject::SetButtonsAndText

(struct DialogFNGObject *this);
54C7F0 void __thiscall

FocusedTextbox::CarriageReturnPressed

(struct FocusedTextbox *this);
54C8A0 int __thiscall

FocusedTextbox::EscapePressed

(struct FocusedTextbox *this);
54C940 int __thiscall

Career::54C940

(struct Career *this);

returns 1 if there is a movie to play (which will be filled in in the given argument buffer)

54C9D0 bool __thiscall

Career::54C9D0

(struct Career *this, char *movieNameBuffer);
54CA30 int __thiscall

Career::j_54C940

(struct Career *this);
54CA40 void __thiscall

Career::54CA40

(struct Career *this);
54CA60 int __thiscall

Career::54CA60

(struct Career *this, int);
54CAE0 void __thiscall

Career::54CAE0

(struct Career *this);
54CAF0 int __thiscall

Career::54CAF0

(struct Career *this, void *);
54CE60 int __thiscall

FNGInfo::54CE60

(struct FNGInfo *this, struct UIElement *uiElement, int);

calls FNGInfo::54CE60 for every UI element in this fng, possibly some init stuff

54D190 int __thiscall

FNGInfo::54D190

(struct FNGInfo *this, struct UIData_field8 *pUIData_field8, int);
54E4A0 int __thiscall

UIData::InitFNGPackage

(struct UIData *this, struct FNGInfo *fngInfo);
54E5B0 int __thiscall

FNGObject::HandleMessageForTextbox

(struct FNGObject *this, unsigned int message);
54E6A0 void __thiscall

PCHelpBarFNGObject::Show

(struct PCHelpBarFNGObject *this);
54E6B0 void __thiscall

PCHelpBarFNGObject::Hide

(struct PCHelpBarFNGObject *this);

Sets buttons and background of the help bar, updates profile name display. See enum PCHELPBARFLAGS Mask gets adjusted based on profileData.menuState and _??gameStateSomething:

if ((profileData.menuState == MENU_STATE_ONLINE_MAIN_MENU || profileData.menuState == MENU_STATE_CUSTOMIZE_FROM_ONLINE_MAIN_MENU) && _??gameStateSomething == 3 && (mask & BUTTON_PC_NAV_QUIT)) {
        mask = (mask & ~PC_NAV_QUIT) | BUTTON_PC_NAV_LOGOFF;
}
if (profileData.menuState == MENU_STATE_LAN_MAIN_MENU && (mask & BUTTON_PC_NAV_EA_MESSENGER)) {
        mask &= ~BUTTON_PC_NAV_EA_MESSENGER;
}
54E6E0 void __thiscall

PCHelpBarFNGObject::SyncByMask

(struct PCHelpBarFNGObject *this, int someMask, char *fngName);

this smells like a memory leak elaborate way to determine which parts browser UI to show

54F980 struct s54F980 *__cdecl

AllocateAndInitializes54F980

();
551070 int __thiscall

Career887C::551070

(struct Career887C *this, int);
5511E0 int __thiscall

DialogFNGObject::SendResultMessage

(struct DialogFNGObject *this);

return 1 if handled

551270 int __thiscall

TextboxData::ConsumeKey

(struct TextboxData *this, int keyCode);
551320 int __thiscall

Career::551320

(struct Career *this);
551DE0 int __thiscall

FNGObject::ctor

(struct FNGObject *this, struct FNGShowData *fngShowData);
551F80 int __thiscall

PCHelpBarFNGObject::ctor

(struct PCHelpBarFNGObject *this, struct FNGShowData *fngShowData);
552280

FNGINIT_UI_PC_Help_Bar.fng

5522D0

FNGINIT_DiscError.fng

552330 struct IconScrollerFNGObject *__thiscall

IconScrollerFNGObject::ctor

(struct IconScrollerFNGObject *this, struct FNGShowData *fngShowData);
552410 struct DateEntryFNGObject *__thiscall

DateEntryFNGObject::ctor

(struct DateEntryFNGObject *this, int);
552720

FNGINIT_UI_DateEntry.fng

returns slotNameHash of same or newly allocated tunedcar

can customize existing tunedcar, careercar, onlinecar, or if it's a stockcar then it will allocate a new tunedcar slot and initialize it will show fng for customizing the car

552CC0 unsigned int __cdecl

CustomizeCar

(enum CAR_CUSTOMIZE_MODE mode, char *currentFNGName, int playerIndex, int slotNamehash);
552EB0 struct DebugCarCustomizeFNGObject *__thiscall

DebugCarCustomizeFNGObject::ctor

(struct DebugCarCustomizeFNGObject *this, int);
553070

ChooseRimBrandFNGObject::ctor

5530F0 struct DecalMainFNGObject *__thiscall

DecalMainFNGObject::ctor

(struct DecalMainFNGObject *this, struct FNGShowData *fngShowData);
553200

ChooseUniquePartFNGObject::ctor

5532B0 struct PerformanceBrandSelectFNGObject *__thiscall

PerformanceBrandSelectFNGObject::ctor

(struct PerformanceBrandSelectFNGObject *this, int);
553310 struct NeonPartsOverlayFNGObject *__thiscall

NeonPartsOverlayFNGObject::ctor

(struct NeonPartsOverlayFNGObject *this, int);
5534F0 struct CustomNeonMainFNGObject *__thiscall

CustomNeonMainFNGObject::ctor

(struct CustomNeonMainFNGObject *this, struct FNGShowData *fngShowData);
553770

ChooseCustomHUDFNGObject::ctor

553940 struct IGPlayMovieFNGObject *__thiscall

IGPlayMovieFNGObject::ctor

(struct IGPlayMovieFNGObject *this, int);
553B00

FNGINIT_UI_Menu_Asset_Reputation.fng

553B60 struct MagazineBackFNGObject *__thiscall

MagazineBackFNGObject::ctor

(struct MagazineBackFNGObject *this, int);
553BE0 struct MagazineViewFNGObject *__thiscall

MagazineViewFNGObject::ctor

(struct MagazineViewFNGObject *this, int);
553C70 struct EATraxJukeboxFNGObject *__thiscall

EATraxJukeboxFNGObject::ctor

(struct EATraxJukeboxFNGObject *this, int);
5541C0 void __thiscall

DialogFNGObject::ctor

(struct DialogFNGObject *this, struct FNGShowData *fngShowData);
554280

DialogFNGObject::dtor

5542A0 int __cdecl

FNGINIT_Dialogs

(struct FNGShowData *fngShowData);
554A00

FNGINIT_UI_DebugCarCustomize.fng

554A60

FNGINIT_UI_ChooseRimBrand.fng

554AC0

FNGINIT_UI_DecalMain.fng

554B20

FNGINIT_UI_ChooseUniquePart.fng

554B80

FNGINIT_UI_PerformanceBrandSelect.fng

554BE0

FNGINIT_UI_NeonPartsOverlay.fng

554C40

FNGINIT_UI_CustomNeonMain.fng

554CA0

ChooseVinylLayerFNGObject::ctor

554DA0

FNGINIT_UI_ChooseCustomHUD.fng

554E00

FNGINIT_IG_PlayMovie.fng

554E60

FNGINIT_UI_MagazineBack.fng

554EC0

FNGINIT_UI_MagazineView.fng

554F20

FNGINIT_EA_Trax_Jukebox.fng

555440

FNGINIT_UI_ChooseVinylLayer.fng

555860 int __thiscall

UIData_field8::555860

(struct UIData_field8 *this, char *fngName, char, int);

parentFngName may be null.

555D00 void __thiscall

UIData::AddFNGToUIObject

(struct UIData *this, int flagsMaybe, char *fngName, char *parentFngName, int controlMask, void *data);

Does more stuff.

555E80 void __cdecl

AddFngToUIObject_1

(char *fngName, void *data);
555EB0

AddFNGToUIObject_flags5

Wraps UIData::AddFNGToUIObject. parentFngName may be null.

555F10 int __cdecl

AddFngToUIObjectWrapper

(char *fngName, char *parentFngName, char controlMask, void *data);
556640

ChooseCustomizeCategoryFNGObject::ctor

556C80

ChoosePerformanceCategoryFNGObject::ctor

5571B0

ChoosePaintCategoryFNGObject::ctor

557A10

PerformanceDynoChartFNGObject::ctor

557BD0 struct PerformanceDynoResultsFNGObject *__thiscall

PerformanceDynoResultsFNGObject::ctor

(struct PerformanceDynoResultsFNGObject *this, int);
557F20 struct MagazineSelectFNGObject *__thiscall

MagazineSelectFNGObject::ctor

(struct MagazineSelectFNGObject *this, struct FNGShowData *fngShowData);

Returns the new dialog id for it (value in shownDialog.dialogId) or zero when it didn't show because of some override.

558020 int __cdecl

ShowDialog

(struct DialogInfo *dialog);

Calls ShowDialog.

5582A0 int __cdecl

ShowButtonlessFormattedDialogPtr

(char *dialogParentFNGName, char *dialogFNGName, char *textFormat, void *textParameterPtr);

Delegates to ShowButtonlessFormattedDialogPtr.

558310 int __cdecl

ShowButtonlessFormattedDialog

(char *dialogParentFNGName, char *dialogFNGName, char *textFormat, int textParameter);

Delegates to ShowButtonlessFormattedDialogPtr.

558330 int __cdecl

ShowButtonlessFormattedLanguageDialog

(char *dialogParentFNGName, char *dialogFNGName, unsigned int textLanguageString, int textParameter);

Calls ShowDialog. Uses 0x639(OK) for middleButtonLanguageString, 0x34DC1BEC for middleButtonMessage, 0xB4EDEB6D for escMessage, 0 for field_31C, 1 for numButtons and field_32C.

558390 int __cdecl

ShowStandardFormattedErrorDialog

(char *dialogParentFNGName, char *dialogFNGName, char *textFormat, void *textParameterPtr);

Delegates to ShowStandardFormattedErrorDialog.

558430 int __cdecl

ShowStandardFormattedLanguageErrorDialog

(char *dialogParentFNGName, char *dialogFNGName, unsigned int textFormatLanguageString, int textParameter);

Calls ShowDialog. Uses 0 for field_31C and 1 for numButtons.

558490 int __cdecl

ShowSingleButtonEscapableFormattedDialog32C

(char *dialogParentFNGName, char *dialogFNGName, unsigned int middleButtonLanguageString, unsigned int middleButtonMessage, unsigned int escMessage, char byteDialogField32C, char *textFormat, void *textParameterPtr);

Delegates to ShowSingleButtonEscapableFormattedDialog32C. Uses 1 for field_32C.

558540 int __cdecl

ShowSingleButtonEscapableFormattedDialog

(char *dialogParentFNGName, char *dialogFNGName, unsigned int middleButtonLanguageString, unsigned int middleButtonMessage, unsigned int escMessage, char *textFormat, int textParameter);

Delegates to ShowSingleButtonEscapableFormattedDialog32C. Uses 1 for field_32C.

558570 int __cdecl

ShowSingleButtonEscapableFormattedLanguageDialog

(char *dialogParentFNGName, char *dialogFNGName, unsigned int middleButtonLanguageString, unsigned int middleButtonMessage, unsigned int escMessage, unsigned int textLanguageString, int textParameter);

Delegates to ShowSingleButtonEscapableFormattedDialog32C. Uses 0 for escMessage and field_32C.

5585E0 int __cdecl

ShowSingleButtonFormattedDialog

(char *dialogParentFNGName, char *dialogFNGName, unsigned int middleButtonLanguageString, unsigned int middleButtonMessage, char *textFormat, int textParameter);

Delegates to ShowSingleButtonEscapableFormattedDialog32C. Uses 0 for escMessage and field_32C.

558610 int __cdecl

ShowSingleButtonFormattedLanguageDialog

(char *dialogParentFNGName, char *dialogFNGName, unsigned int middleButtonLanguageString, unsigned int middleButtonMessage, unsigned int textLanguageString, int textParameter);

Calls ShowDialog.

558680 int __cdecl

ShowTwoButtonEscapableFormattedDialog31C_32C

(char *dialogParentFNGName, char *dialogFNGName, unsigned int leftButtonLanguageString, unsigned int rightButtonLanguageString, unsigned int leftButtonMessage, unsigned int rightButtonMessage, unsigned int escMessage, char dialogField_32C, int dialogField_31C, char *textFormat, void *textParameterPtr);

Delegates to ShowTwoButtonEscapableFormattedDialog31C_32C with 1 for field_32C.

558750 int __cdecl

ShowTwoButtonEscapableFormattedDialog31C

(char *dialogParentFNGName, char *dialogFNGName, unsigned int leftButtonLanguageString, unsigned int rightButtonLanguageString, unsigned int leftButtonMessage, unsigned int rightButtonMessage, unsigned int escMessage, int dialogField31C, char *textFormat, int textParameter);

Delegates to ShowTwoButtonEscapableFormattedDialog31C_32C with 1 for field_32C.

558790 int __cdecl

ShowTwoButtonEscapableFormattedLanguageDialog31C

(char *dialogParentFNGName, char *dialogFNGName, unsigned int leftButtonLanguageString, unsigned int rightButtonLanguageString, unsigned int leftButtonMessage, unsigned int rightButtonMessage, unsigned int escMessage, int dialogField31C, unsigned int textFormatLanguageString, int textParameter);

Delegates to ShowTwoButtonEscapableFormattedDialog31C_32C with 0 for escMessage and field_32C.

558820 int __cdecl

ShowTwoButtonFormattedDialog31C

(int dialogParentFNGName, int dialogFNGName, unsigned int leftButtonLanguageString, unsigned int rightButtonLanguageString, unsigned int leftButtonMessage, unsigned int rightButtonMessage, int dialogField31C, char *textFormat, int textParameter);

Delegates to ShowTwoButtonEscapableFormattedDialog31C_32C with 0 for escMessage and field_32C.

558860 int __cdecl

ShowTwoButtonFormattedLanguageDialog31C

(char *dialogParentFNGName, char *dialogFNGName, unsigned int leftButtonLanguageString, unsigned int rightButtonLanguageString, unsigned int leftButtonMessage, unsigned int rightButtonMessage, int dialogField31C, char *textFormat, int textParameter);

Calls ShowDialog with 3 for numButtons, 1 for field_32C.

5588F0 int __cdecl

ShowThreeButtonEscapableFormattedDialogPtr31C

(char *dialogParentFNGName, char *dialogFNGName, unsigned int leftButtonLanguageString, unsigned int rightButtonLanguageString, unsigned int middleButtonLanguageString, unsigned int leftButtonMessage, unsigned int rightButtonMessage, unsigned int middleButtonMessage, unsigned int escMessage, int dialogField31C, char *textFormat, void *textParameterPtr);

Delegates to ShowThreeButtonEscapableFormattedDialogPtr31C.

5589D0 int __cdecl

ShowThreeButtonEscapableFormattedDialog31C

(char *dialogParentFNGName, char *dialogFNGName, unsigned int leftButtonLanguageString, unsigned int rightButtonLanguageString, unsigned int middleButtonLanguageString, unsigned int leftButtonMessage, unsigned int rightButtonMessage, unsigned int middleButtonMessage, unsigned int escMessage, int dialogField31C, char *textFormat, int textParameter);

Delegates to ShowThreeButtonEscapableFormattedDialogPtr31C.

558A20 int __cdecl

ShowThreeButtonEscapableFormattedLanguageDialog31C

(char *dialogParentFNGName, char *dialogFNGName, unsigned int leftButtonLanguageString, unsigned int rightButtonLanguageString, unsigned int middleButtonLanguageString, unsigned int leftButtonMessage, unsigned int rightButtonMessage, unsigned int middleButtonMessage, unsigned int escMessage, int dialogField31C, unsigned int textFormatLanguageString, int textParameter);

Calls ShowDialog with 1 for numButtons, field_32C, isHelpDialog. Uses 0x639(OK) for middleButtonLanguageString, 0x34DC1BEC for middleButtonMessage, 0xB4EDEB6D for escMessage, 0 for field_31C.

558AC0 int __cdecl

ShowHelpDialog

(char *dialogParentFNGName, char *dialogFNGName, unsigned int textLanguageString);

this is unused

558B70 void __thiscall

TextboxData::HandleQuitKey

(struct TextboxData *this, int keyCode);
558C00 int __thiscall

UIData_field8::558C00

(struct UIData_field8 *this, int, int);
5591E0

FNGINIT_UI_ChooseCustomizeCategory.fng

559C30

FNGINIT_UI_ChoosePerformanceCategory.fng

559C90 struct ChoosePerformancePackageFNGObject *__thiscall

ChoosePerformancePackageFNGObject::ctor

(struct ChoosePerformancePackageFNGObject *this, int);
55A400

FNGINIT_UI_ChoosePaintCategory.fng

55A460 struct PerformanceDynoMAINFNGObject *__thiscall

PerformanceDynoMAINFNGObject::ctor

(struct PerformanceDynoMAINFNGObject *this, struct FNGShowData *fngShowData);
55A620 struct PerformanceTuningSetting *__thiscall

PerformanceTuningSetting::ctor

(struct PerformanceTuningSetting *this, struct FNGShowData *fngShowData);
55A740

PerformanceTuningSetting::MessageHandler

55AA40 struct PerformanceTuningMaster *__thiscall

PerformanceTuningMaster::ctor

(struct PerformanceTuningMaster *this, struct FNGShowData *fngShowData);
55AC10 struct PerformanceTuningSlidersFNGObject *__thiscall

PerformanceTuningSlidersFNGObject::ctor

(struct PerformanceTuningSlidersFNGObject *this, int);
55AD70 struct PerformanceTuningGraph *__thiscall

PerformanceTuningGraph::ctor

(struct PerformanceTuningGraph *this, int);
55AF20

FNGINIT_UI_PerformanceDyno_Chart.fng

55AF80

FNGINIT_UI_PerformanceDyno_Results.fng

55AFE0

IGPlayMovieFNGObject::MessageHandler

55B260

MagazineRewardFNGObject::MessageHandler

55B520

FNGINIT_UI_MagazineSelect.fng

also called MenuScreen::BaseNotify

55B5C0 int __thiscall

FNGObject::BaseNotify

(struct FNGObject *this, unsigned int message, int, int, struct FNGInfo *fngInfo);
55C010 struct ICEMAINFNGObject *__thiscall

ICEMAINFNGObject::ctor

(struct ICEMAINFNGObject *this, struct FNGShowData *fngShowData);
55C520

ChoosePerformanceCategoryFNGObject::MessageHandler

55C8D0

FNGINIT_UI_ChoosePerformancePackage.fng

55C930

PerformanceBrandSelectFNGObject::MessageHandler

55D7F0

FNGINIT_UI_PerformanceDyno_MAIN.fng

55D850

FNGINIT_UI_PerformanceTuning_Setting.fng

55D8B0

FNGINIT_UI_PerformanceTuning_Master.fng

55D910

PerformanceTuningMaster::MessageHandler

55DB10

FNGINIT_UI_PerformanceTuning_Sliders.fng

55DB70

FNGINIT_UI_PerformanceTuning_Graph.fng

Called from WM_CHAR messages in MainWndProc, only used to type/press enter in a textbox and Q to quit. Navigating menus seems unaffected

55DBD0 void __cdecl

UIHandleKey

(int keyCode);

Called when menus change.

55DC20 int __thiscall

SomethingUI::SendMessageToFNG

(struct SomethingUI *this, char *fngName, int message);
55DC50 void __thiscall

SomethingUI::SendUIMessageImmediately?

(struct SomethingUI *this, unsigned int, int);
55DDA0 int __cdecl

SendMessageToFNG

(unsigned int message, char *fngName);

Called from PCHelpBarFNGObject::MessageHandler.

55DE00 void __thiscall

PCHelpBarFNGObject::OnPrimaryCursorJustPressed

(struct PCHelpBarFNGObject *this);
55DFA0 int __thiscall

PCHelpBarFNGObject::MessageHandler

(struct PCHelpBarFNGObject *this, unsigned int message, int, int, int);
55E160

DateEntryFNGObject::MessageHandler

55E380

DebugCarCustomizeFNGObject::MessageHandler

55E520

ChooseCustomizeCategoryFNGObject::MessageHandler

55E820 struct GenericPartsBrowserFNGObject *__thiscall

GenericPartsBrowserFNGObject::ctor

(struct GenericPartsBrowserFNGObject *this, int);
55F080

ChooseRimBrandFNGObject::MessageHandler

560550

FNGINIT_UI_ICEMAIN.fng

561720

ChooseUniquePartFNGObject::MessageHandler

561D10

ChoosePerformancePackageFNGObject::MessageHandler

562C50

ChoosePaintCategoryFNGObject::MessageHandler

563410

PaintFNGObject::MessageHandler

5644D0

ChooseCustomHUDFNGObject::MessageHandler

5647E0

PerformanceDynoMAINFNGObject::MessageHandler

5650C0

PerformanceTuningSlidersFNGObject::MessageHandler

5654D0

PerformanceTuningGraph::MessageHandler

565750 struct MagazineRewardFNGObject *__thiscall

MagazineRewardFNGObject::ctor

(struct MagazineRewardFNGObject *this, int);
565B50

MagazineViewFNGObject::MessageHandler

used in UIData::InitFNGPackage at 54E558

only does things with ui elements type 7 (movie)

566240 int __thiscall

UIElementVisitor::acceptElement__forInitFNGPackage_1

(struct UIElementVisitor *this, struct UIElement *element);
5662C0 void __thiscall

UIData::5662C0

(struct UIData *this);

TODO document this and go in the last unresolved func.

5663B0

DoUI

566430

FNGINIT_UI_GenericParts_Browser.fng

566490

GenericPartsBrowserFNGObject::MessageHandler

5678E0 struct RimsBrowserFNGObject *__thiscall

RimsBrowserFNGObject::ctor

(struct RimsBrowserFNGObject *this, struct FNGShowData *fngShowData);
567A50

RimsBrowserFNGObject::MessageHandler

568450 struct DecalsOverlayFNGObject *__thiscall

DecalsOverlayFNGObject::ctor

(struct DecalsOverlayFNGObject *this, int);
568740

ICEMAINFNGObject::MessageHandler

568D30

IcePartsOverlayFNGObject::MessageHandler

569500

ChooseSpinnerFNGObject::ctor

569670

ChooseSpinnerFNGObject::MessageHandler

569CC0 struct BuyPerformancePartsFNGObject *__thiscall

BuyPerformancePartsFNGObject::ctor

(struct BuyPerformancePartsFNGObject *this, int);
569EE0 int __thiscall

BuyPerformancePartsFNGObject::MessageHandler

(struct BuyPerformancePartsFNGObject *this, int, int, int, int);
56A300

NeonPartsOverlayFNGObject::MessageHandler

56A880

CustomNeonMainFNGObject::MessageHandler

56AB00

ChooseVinylLayerFNGObject::MessageHandler

56AEB0 struct PaintFNGObject *__thiscall

PaintFNGObject::ctor

(struct PaintFNGObject *this, int);
56B140

FNGINIT_UI_MagazineReward.fng

56B1C0

EATraxJukeboxFNGObject::MessageHandler

56B350

FNGINIT_UI_Rims_Browser.fng

56B3B0

DecalMainFNGObject::MessageHandler

DecalsOverlay.fng and DecalsOverlayInvis.fng

56B900

FNGINIT_UI_DecalsOverlay.fng

56B960

DecalsOverlayFNGObject::MessageHandler

56BF70

IcePartsOverlayFNGObject::ctor

56C0F0

FNGINIT_UI_ChooseSpinner.fng

56C150

FNGINIT_UI_BuyPerformanceParts.fng

56C1B0

FNGINIT_UI_Paint.fng

56C210 struct CustomHUDOverlayFNGObject *__thiscall

CustomHUDOverlayFNGObject::ctor

(struct CustomHUDOverlayFNGObject *this, int);
56C3C0

FNGINIT_UI_IcePartsOverlay.fng

56C420

FNGINIT_UI_CustomHUDOverlay.fng

56C4C0 int __cdecl

LoadBinSection34A07

(struct BinSection *bindata);
56C4E0 int __cdecl

UnloadBinSection34A07

(struct BinSection *bindata);

return _gameRegion; 0-5, affects name of cars

570A30 int __cdecl

GetGameRegion

();

return _gameRegion == 1 || (4 < _gameRegion && _gameRegion < 10); Unsure about this name.

570A40 int __cdecl

ShouldUseCarUKNames

();
570A60 int __cdecl

Return_1

();
570A70 int __thiscall

[Return_0_Pop_5

(void *this, int, int, int, int, int);

returns 0 64bit edx:eax

570A80 int __stdcall

UnkStdCall1Arg

(int unkunused);

returns 0 64bit edx:eax

570A90 int __cdecl

Return0_64bit

();

return driveNameLetterPathThing;

570AA0 int __thiscall

CRealCoreDrive::GetDriveNamePath

(struct CRealCoreDrive *this);

Only called from unnamed_577AB0.

struct BinSectionMagicMapEntry *entry;
int i;

entry = FindBinSectionHandler(binsection->header.magic);
if (entry) {
        return entry->value.loadfunc(binsection);
}
for (i = 0; i < 36; i++) {
        if (binSectionLoadFuncs[i](binsection)) {
                return 1;
        }
}
return 0;

Returns 1 when something managed to load it. Some loaders that are in the map are also in the array.

570D70 int __cdecl

LoadBinSection

(struct BinSection *binData);
570DD0 int __cdecl

somethingBinSections

(int, char *ptrBinData, int sectionSize, int, int, int);
570F80

CreateResourceFileSlotPool

memset(this->filename_again, 0, 4*12);
strncpy(this->filename_again, filename, 0x2F);
this->field_C4 = arg0;
570FA0 void __thiscall

ResourceFileSlotPoolEntry::strcpyIntoEntryFilenameAgainAndSetFieldC4

(struct ResourceFileSlotPoolEntry *this, int arg0, char *filename);

return AmountOfQueuedFileSlotPoolEntries != 0;

571060

IsQueuedFileSlotPoolEmpty

571380 char *__cdecl

GetCountryCode

();

uses joyKeyData

571AD0 int __cdecl

GetJoyIdFromName

(char *joyname);

return a->field_58 < b->field_58;

5735C0 int __cdecl

CheckQueuedFileSlotPoolEntryField58LE

(struct QueuedFileSlotPoolEntry *a, struct QueuedFileSlotPoolEntry *b);
5736D0

CreateQueuedFileSlotPool

uppercase and / to \

575330 int __cdecl

NormalizeFilenameAndHashCS

(char *filename);
575620 void *__cdecl

j_HeapAllocWrapper75C6C8

(int bytes);

jmp HeapFreeWrapper75C6DA

575630 void __cdecl

j_HeapFreeWrapper75C6DA

(void *mem);

Initializes cheatScreenData and cheatData.

575770 void __thiscall

CheatScreenData::InitCheats?

(struct CheatScreenData *this);

cheatType: cheatType, cheatData: cheatData

576000 int __thiscall

CheatScreenData::HasCheatBeenTriggered

(struct CheatScreenData *this, enum CHEATTYPE cheatType, unsigned int cheatData);

Weird one, is called on each cheat entry and all cheats with a matching field_28 has zero written to its hasBeenTriggered field.

576050 void __thiscall

CheatScreenData::UndoCheat??

(struct CheatScreenData *this, int cheatdata_field28);

Basically return cheatExtraCareerMoney200 + cheatExtraCareerMoney1000;

576090 int __cdecl

GetExtraCheatedCareerMoney

();
5760A0 int __thiscall

CheatScreenData::DoCareerCheat

(struct CheatScreenData *this, int careerCheatIdx);
577AB0

unnamed_577AB0

Does things and calls the bin section unload handler, similar to LoadBinSection.

577B10

UnloadBinSection

579340 int __cdecl

LoadBinSection39100_39101_39102

(struct BinSection *binsection);
579350 int __cdecl

UnloadBinSection39100_39101_39102

(struct BinSection *binsection);
579360 struct JoystickEventNode *__thiscall

JoystickEventNode::ctor

(struct JoystickEventNode *this, int, int, int);
5794E0 int __cdecl

IsJoyIdRegisteredAtEntryWithIndex

(int index, enum JOYID joyId);
579550

SetupJoystickEventNodeSlotPool

5797B0 struct QueuedFileSlotPoolEntry *__cdecl

GetQueuedFileSlotPoolEntryByHandle

(int handle);

what type of pool entry is this? also seems to move the entry in the list?

5798F0 int __cdecl

FindSomeExistingPoolEntryWithFilename

(int filename);
579CA0

CheatScreenData::Disable

Called from CheatScreenData::CheatCheck when a cheat matched.

579CB0 void __thiscall

CheatScreenData::CheatMatched

(struct CheatScreenData *this, int cheat_index);

true for car 27 (skyline) and 21 (rx8) if "regmebaby" cheat was triggered does not apply to career car lot

579D30 int __thiscall

CheatScreenData::ShouldCarBeAvailableByCheat

(struct CheatScreenData *this, int carIndex);
579D60 int __cdecl

CheatScreenData::IsTriggeredREGMEBABY

(struct CheatScreenData *this);
579D70 int __thiscall

CheatScreenData::IsSponsorCarCheatTriggered

(struct CheatScreenData *this, unsigned int sponsorHash);

visual: just a number

579D80 int __thiscall

CheatScreenData::IsVisualCheatTriggered

(struct CheatScreenData *this, unsigned int visual);

performance: just a number

579D90 int __thiscall

CheatScreenData::IsPerformanceCheatTriggered

(struct CheatScreenData *this, unsigned int performance);
579DA0 int __thiscall

CheatScreenData::IsVinylCheatTriggered

(struct CheatScreenData *this, unsigned int vinylHash);
57A0E0

??UpdateRace

57A470 int __cdecl

LoadBinSection8003B000

(struct BinSection *bindata);
57B410 int __thiscall

QueuedFileSlotPoolEntry::Init

(struct QueuedFileSlotPoolEntry *this, char *ptrData, char *filename, int, int size, void (__cdecl *ptrsomefunc)(void *), struct ResourceFileSlotPoolEntry *resourceFileSlotPoolEntry);

returns the handle of the new struct QueuedFileSlotPoolEntry

57B4A0 int __cdecl

AllocateAndInitQueuedFileSlotPoolEntry

(char *ptrData, char *filename, int, int size, void (__cdecl *ptrsomefunc)(void *), struct ResourceFileSlotPoolEntry *resourceFileSlotPoolEntry);

Called from UIHandleKey when cheatScreenData.doCheatCheck is non-zero.

57B8B0 void __thiscall

CheatScreenData::CheatCheck

(struct CheatScreenData *this, int keyCode);

this MIGHT be a more generic constructor.. right

57BCD0 void __thiscall

PoolEntry::Init

(struct PoolEntry *this);
57BCE0 int __cdecl

UnloadBinSection8003B000

(struct BinSection *bindata);
57BD70 struct QueuedFileSlotPoolEntry *__thiscall

ResourceFileSlotPoolEntry::CreateQueuedFileSlotPoolEntry

(struct ResourceFileSlotPoolEntry *this, int, int);

might do more than getting file size, todo RETURN TYPE IS PROBABLY _NOT_ FILESYSTEMPOOLENTRY

57CA10 struct bFileSystemPoolEntry *__cdecl

AllocateFileSystemPoolEntryForFileAndReadFileSize

(char *filename, int, int);

lots of depth, many critical sections etc mostly called bin files, some speech files, something E:\bin.dat

57CAC0 int __cdecl

GetFileSizeProbably?

(char *filename);

returns this

57CDE0 struct ResourceFileSlotPoolEntry *__thiscall

ResourceFileSlotPoolEntry::ctor

(struct ResourceFileSlotPoolEntry *this, int src, int, int, int, int);
57CEF0 struct ResourceFileSlotPoolEntry *__cdecl

CreateResourceFileSlotPoolEntry

(char *filename, int, int, int, int);

Creates a struct bFileSystemPoolEntry but no way to get it? although that is done by AllocateFileSystemPoolEntryForFileAndReadFileSize and that func's docs say it may not be true that it allocates an instance

57D900 int __stdcall

GetFileSizeRelativePath

(char *filename);

Called by ??SetupPools

57ED10

??SetupPools

return AmountOfQueuedFileSlotPoolEntries;

57EF60 int __cdecl

LoadFilesInQueuedFileSlotPool

();
5811C0

GameLoop

581E40

Quantizer149::ctor

581E90 int __thiscall

Quantizer149::Init

(struct Quantizer149 *this, char *name, int, int, float);
581F50

Quantizer141::InitFloat?

582080 struct Quantizer141 *__thiscall

Quantizer141::ctor

(struct Quantizer141 *this);
5820C0 struct Quantizer141 *__thiscall

Quantizer141::Init

(struct Quantizer141 *this, char *name, int, int);
582360 int __thiscall

Network86A388::something

(struct Network86A388 *this, int, void (__cdecl *func)(int, int));

return &this->network44->keyValueString636F6E66;

582380 char *__thiscall

Network86A388::GetNetwork44KeyValueString636F6E66

(struct Network86A388 *this);

calls a function ptr that may change, delegates to 440820 with extra param 8 or B

5832F0

SomeChangingAlloc?

5836D0 int __cdecl

SomeAllocWrapper_0

(int size);
586680 void __thiscall

Network86A388::ctor

(struct Network86A388 *this);
586A80 void __thiscall

Network86A388::Shutdown

(struct Network86A388 *this);
588630

??ConnectToEAServer

588D40 int __thiscall

Network86A388::Startup

(struct Network86A388 *this);
58A0C0 void __thiscall

Network86A388::Free

(struct Network86A388 *this, int keepMemory);
58A0E0 struct Network86A388 *__cdecl

GetNetwork86A388

();
58D6B0 int __thiscall

OL86A858::OL_JoinGameFromBuddyInvite?

(struct OL86A858 *this, int, int, int, int);
58F740 struct OL86A858 *__cdecl

GetOL86A858

();

this MIGHT be a more generic constructor.. right

598750 int __thiscall

PoolEntry::InitWrapper

(struct PoolEntry *this);
598EC0 int __cdecl

j_SomeFree?

(void *ptr);
598F10

CreatePools?

599440 int __cdecl

LoadBinSection80034A30

(struct BinSection *bindata);
5994D0 int __cdecl

UnloadBinSection80034A30

(struct BinSection *bindata);
599680 int __thiscall

MenuCarInstance_10_2E0::599680

(struct MenuCarInstance_10_2E0 *this, int index, int, int);
59AE20 void __cdecl

StoreBin34A1A

(struct Bin34A1A *data, int totalSize);
59AFE0

TunedCar360::59AFE0

59B060

s734::59B060

5A1750 int __cdecl

LoadBinSection80034020

(struct BinSection *bindata);
5A1860 int __cdecl

UnloadBinSection80034020

(struct BinSection *bindata);
5A6320 int __thiscall

MenuCarInstance_10_2E0::5A6320

(struct MenuCarInstance_10_2E0 *this, struct Bin34A15_C *bin34A15_C, int, int);
5A6400 int __thiscall

MenuCarInstance_10_2E0::5A6400

(struct MenuCarInstance_10_2E0 *this, struct Bin34A15 *bin34A15, int);
5A6450 int __thiscall

MenuCarInstance_10_2E0::5A6450

(struct MenuCarInstance_10_2E0 *this, int);
5A64A0 void __thiscall

MenuCarInstance_10_2E0::5A64A0

(struct MenuCarInstance_10_2E0 *this, int, int);
5A7890 void __thiscall

MenuCarInstance_10::Clear

(struct MenuCarInstance_10 *this, int);
5A7930 void __thiscall

TunedCar360::ctor

(struct TunedCar360 *this);
5A7970 struct s734 *__thiscall

s734::ctor

(struct s734 *this);
5A8BD0 int __cdecl

UnloadBinSection34026_34027

(struct BinSection *binsection);
5AC6E0 int __thiscall

MenuCarInstance_10::ctor

(struct MenuCarInstance_10 *this);
5B0E30 int __cdecl

LoadBinSection34026_34027

(struct BinSection *binsection);
5B4FC0 void __thiscall

MenuCarInstance_10::5B4FC0

(struct MenuCarInstance_10 *this, int, int, char);
5B6990 float __thiscall

MenuCarInstance_10::5B6990

(struct MenuCarInstance_10 *this, char, float);

Called once during boot, from LoadPaths?

5B76F0 void __cdecl

LoadOtherRegistrySettings

();

TODO

5B7A70 void __cdecl

LoadPaths?

();

return languageIndex == -1 ? 0 : languageIndex

5B7AF0

GetLanguageIndex

Guessing this is used when trying to go online, in case this game client has the wrong version, TODO

int OpenPatchesWebsite()
{
    char *url;

    switch (GetGameRegion()) {
    case 0: url = "http://patches.ea.com/nfs_underground2/EN-US/home.html"; break;
    case 2: url = "http://patches.ea.com/nfs_underground2/KO/home.html"; break;
    case 3: url = "http://patches.ea.com/nfs_underground2/JP/home.html"; break;
    case 4: url = "http://patches.ea.com/nfs_underground2/TW/home.html"; break;
    case 5:
        switch (GetCurrentLoadedLanguage()) {
        case 0: url = "http://patches.ea.com/nfs_underground2/EN-UK/home.html"; break;
        case 5: url = "http://patches.ea.com/nfs_underground2/NL/home.html"; break;
        case 6: url = "http://patches.ea.com/nfs_underground2/SV/home.html"; break;
        case 7: url = "http://patches.ea.com/nfs_underground2/DA/home.html"; break;
        default: goto def;
        }
        break;
    case 6: url = "http://patches.ea.com/nfs_underground2/FR/home.html"; break;
    case 7: url = "http://patches.ea.com/nfs_underground2/DE/home.html"; break;
    case 8: url = "http://patches.ea.com/nfs_underground2/IT/home.html"; break;
    case 9: url = "http://patches.ea.com/nfs_underground2/ES/home.html"; break;
    case 11: url = "http://patches.ea.com/nfs_underground2/ZH/home.html"; break;
    case 12: url = "http://patches.ea.com/nfs_underground2/TH/home.html"; break;
def:
    default: /*eax??*/ break;
    }
    return ShellExecuteA(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL);
}
5B7C40

OpenPatchesWebsite

5B8000 void __thiscall

ControllerStruct874C40::dtor

(void *this);
5B8010

ControllerStruct874C40::5B8010

5B8110 int __thiscall

ControllerStruct874C40::5B8110

(struct ControllerStruct874C40 *this, int);
5B8720 int __thiscall

ControllerStruct874C40::5B8720

(struct ControllerStruct874C40 *this);
5B8760 void __cdecl

ResetControlsToDefaultBindings

();

returns multibyte string

5B8A90 char *__thiscall

ControllerStruct874C40::GetControllerKeyName

(struct ControllerStruct874C40 *this, int keyIndex, int isSecondary);

returns multibyte string

5B8D90 char *__thiscall

ControllerStruct874C40::GetKeyboardKeyName

(struct ControllerStruct874C40 *this, int keyIndex, int isSecondary);
5B9120

ControllerStruct874C40::5B9120

5B9280 int __thiscall

ControllerStruct874C40::5B9280

(struct ControllerStruct874C40 *this);
5B9420

WriteControllerStuffToSaveData

related to size needed to write save data

5B9680 int __cdecl

Return1086

();
5B9750

CreateVertexDeclarations5B9750

5B98A0

GetCameraState

5B9A60

UpdateD3DWindow

5B9B70

Create3D9Device

5B9C20

RenderWorld

5BC5B0 struct E *__cdecl

Get873380AtIndex

(int index);

tempStoredOptLightGlow = _optLightGlow; _optLightGlow = 0;

TODO: why?

5BE190

StoreOptLightGlowSetToZero

_optLightGlow = tempStoredOptLightGlow;

TODO: why?

5BE1B0

RestoreOptLightGlow

return clamp(_optWorldDetail, 0, 2);

5BE1C0

GetWorldDetailClampBetween0And2

Sets maximum values of various options based on the adapter info in _d3d9AdapterIdentifier. See all _optMax* fields. Also seems to do stuff with shaders maybe? TODO Called twice. TODO: where and why

5BE200

DetermineMaxDisplaySettingValuesForDevice

Returns _optTextureFiltering+1 (0-2 -> 1-3), but maxed to 2 if the device doesn't have D3DDEVCAPS_RTPATCHES support.

5BE560

GetRealFilteringLevelForCurrentSetting

Based on the device, for every resolution index, put 1 in isSupportedResolutionIdx at that index if available.

5BE5A0

DetermineSupportedResolutions

For each option that has a maximum value field, set it to the maximum value if it was exceeded.

5BE690

EnsureDisplayOptionsDontExceedMaxSettings

5BE870

SetPresetDisplayLevelFromLevelOfDetail

Calls SetPresetDisplayLevelFromLevelOfDetail, sets _optFSAALevel to 0 for some specific windows version or if the device is from vendor Advanced Micro Devices, Inc, then calls EnsureDisplayOptionsDontExceedMaxSettings

5BE9F0

SetPresetDisplayLevelFromLevelOfDetailAndLimit

Loads display settings from windows registry into their variables. Only called once, at boot.

5BEA20

LoadRegistrySettings

Stores display settings into windows registry. Called multiple times, TODO.

5BEEA0 int __cdecl

SaveRegistrySettings

();
unsigned char values[55] = {
        ' ', '.', ',', '_', '@', '-', '`', '=', '[', ']', '\\',
        ';', '\'', '/', '<', '>', '?', ':', '"', '{', '}', '|',
        '+', '(', ')', '*', '&', '%', '#', '!', '~', 0xE5, 0xE4,
        0xE0, 0xE2, 0xEB, 0xE8, 0xE9, 0xEA, 0xEF, 0xEE, 0xF6,
        0xF4, 0xFC, 0xF9, 0xFB, 0xE7, 0x9C, 0xF2, 0xEC, 0xC5,
        0xC4, 0xD6, 0xDC, 0xA7
};
int i;

for (i = 0; i < 55; i++) {
        if (values[i] == value) {
                return 1;
        }
}
return 0;
5BF260 int __cdecl

ConsoleIsArgOneOfTheseHardcodedValues

(char c);
5BF3A0 void __cdecl

ConsoleMoveCaret

(int relativePosition);
5BF5A0

IsSystemNotWindowsNT

5BF610 int __thiscall

[GetActiveResolution

(void *this, int *width, int *height);

Creates and sets mouseData.dinputdevice

5BF6E0 int __thiscall

MouseData::CreateDinputDevice

(struct MouseData *this);
5BF750 int __thiscall

MouseData::QueryAndUpdateCursorPosition

(struct MouseData *this);

Calls MouseData::QueryAndUpdateCursorPosition and then updates button states.

5BF860 void __thiscall

MouseData::QueryAndUpdateMouseState

(struct MouseData *this);

called once, from DoUI. returns 1 if position deltas or scrollwheel or any of the JustPressed/JustReleased fields are not zero. Always returning 0 here has the effect that ui hover does not work, left click acts as right click (go back) except when clicking on the active ui element (like main menu bar). Dialog box buttons still work somehow. The car showroom can still be rotated with mmb. Mouse still moves.

5BF940 int __thiscall

MouseData::HaveCursorActivity

(struct MouseData *this);
5C1020 struct ControllerStruct874C40 *__thiscall

ControllerStruct874C40::ctor

(struct ControllerStruct874C40 *this);
5C1080 int __thiscall

ControllerStruct874C40::5C1080

(struct ControllerStruct874C40 *this, int, int);
5C11A0 int __thiscall

ControllerStruct874C40::5C11A0

(struct ControllerStruct874C40 *this);
5C14F0 int __thiscall

ControllerStruct874C40::5C14F0

(struct ControllerStruct874C40 *this, int);

returns multibyte string

delegates to ControllerStruct874C40::GetKeyboardKeyName or ControllerStruct874C40::GetControllerKeyName depending on this->type

5C20E0 char *__thiscall

ControllerStruct874C40::GetKeyName

(struct ControllerStruct874C40 *this, int keyIndex, int isSecondary);
5C2100 int __thiscall

ControllerStruct874C40::5C2100

(struct ControllerStruct874C40 *this, int keyIndex, int isSecondary);
5C2AE0

UpdateMyCarHeadlightPosition

5C2ED0

TakeScreenshot

5C7470

RenderHorizonFog

5C7EC0

??UpdateCameraPosition

Doesn't do anything unless (debug?) flag consoleEnabledFlag is nonzero. Seems like a proc that handles typing text, maybe for a console? Seems almost completely removed though See nfsu2-re-hooks/faux-enable-console.c for how it can be 'enabled', although nothing happens with the string

5C8320

ConsoleConsumeKey??NOP

Called once, from init_function_77E580_MouseData_ctor.

5C8600 int __thiscall

MouseData::ctor

(struct MouseData *this);
5CAAD0

Render3D

5CCD60

MainWndProc

5CF220 int __thiscall

ControllerStruct874C40::5CF220

(struct ControllerStruct874C40 *this);
5CF320 int __thiscall

ControllerStruct874C40::5CF320

(struct ControllerStruct874C40 *this, int);
5CF960

DestroyGame

5CFFF0 void __thiscall

ControllerStruct874C40::5CFFF0

(struct ControllerStruct874C40 *this);
5D21F0

CapTextureFilteringAnd??LoadShaders

5D24F0

CreateWindowAndD3D

5D2850

UpdateAndRenderStuff

On first call (checked with neighbourhoodHashesCalculatedAlready), calculate all the hashes in neighbourhoodData.

5D3DE0 struct NeighbourhoodName *__cdecl

GetNeighbourhoodNameForHash

(unsigned int hash);
5D3EB0 int __cdecl

LoadBinSection34201

(struct BinSection *binsection);
5D3EF0 int __cdecl

UnloadBinSection34201

(struct BinSection *binsection);

called from PathsData::ReadFromBinData

inits stuff and markers

5D5630 void __thiscall

PathsData::InitAfterReadFromBinData

(struct PathsData *this);
5D6440 int __cdecl

UnloadBinSection34108

(struct BinSection *binsection);
5D6D20

MarkCarToRenderHeadlightBeams

5D8470 int __cdecl

LoadBinSection34146

(struct BinSection *binsection);
5D84D0 int __cdecl

UnoadBinSection34146

(struct BinSection *binsection);
5D9A90 int __thiscall

PathsData::ReadFromBinData

(struct PathsData *this, struct BinSection *binsection);

atPosition can be null, then it'll just return the first marker. When after is not null, the search starts after that specific marker

5D9BF0 struct Marker *__thiscall

PathsData::FindMarkerAtPosWithTypeAfterIndex

(struct PathsData *this, void *nearPosition, int type, struct Marker *after);

markerTypesToCheck: set bit 0 to check marker types 0, set bit 1 to check marker types 1, and so on if after is set, only markers of that type or higher will be checked

5D9C70 struct Marker *__thiscall

PathsData::FirstMarkerOfTypeAtPos

(struct PathsData *this, void *nearPosition, int markerTypesToCheck, struct Marker *after);

loads pathsData

5DA490 int __cdecl

LoadBinSection80034147

(struct BinSection *binsection);
5DB2E0 int __cdecl

LoadBinSection34108

(struct BinSection *binsection);
5DB5A0 int __cdecl

UnloadBinSection80034150

(struct BinSection *bindata);
5DBF60 int __cdecl

LoadBinSection80036000

(struct BinSection *bindata);
5DC050 int __cdecl

UnloadBinSection80036000

(struct BinSection *bindata);
5DEB80 int __cdecl

LoadBinSection34121_34122_34123_34124

(struct BinSection *bindata);
5DEE00 int __cdecl

UnloadBinSection80034147

(struct BinSection *binsection);
5DEF30 int __cdecl

LoadBinSection_34110_34111_34112_34113

(struct BinSection *binsection);
5DF8A0 int __cdecl

LoadBinSection80034100_34107

(struct BinSection *binsection);
5DFBA0 int __cdecl

UnloadBinSection80034100_34107

(struct BinSection *binsection);
5E0190 int __cdecl

LoadBinSection34250

(struct BinSection *bindata);
5E0220 int __cdecl

UnloadBinSection34250

(struct BinSection *bindata);
5E0B40

C64C::ctor

5E4820 int __cdecl

UnloadBinSection34121_34122_34123_34124

(struct BinSection *bindata);
5E4E60 int __cdecl

UnloadBinSection_34110_34111_34112_34113

(struct BinSection *binsection);

Called when exiting to main menu after being in race/freeroam.

5E81C0 int __cdecl

LoadBinSection80034130_3412F

(struct BinSection *binsection);
5E8660 int __cdecl

UnloadBinSection80034130_3412F

(struct BinSection *binsection);
5E9C10 int __thiscall

[LoadBinSection80034150_thiscall

(void *this, struct BinSection *bindata);
5EA0F0 int __cdecl

LoadBinSection80034150

(struct BinSection *bindata);
5EA150 float __thiscall

C::5EA150

(struct C *this);
5EA650 void __thiscall

C::5EA650

(struct C *this);
5EA7C0 int __thiscall

C::5EA7C0

(struct C *this);

return profileData.player1.p24.useMetricSystem == 1

technically it looks like this is an instance method of struct C, but this is unused and no params so __cdecl it is

5EA8B0 int __cdecl

isUseMetricSystem

();
5EA8C0 int __thiscall

C::5EA8C0

(struct C *this);
5EA8E0 int __thiscall

C::5EA8E0

(struct C *this);
5EA930 int __thiscall

C::5EA930

(struct C *this);
5EA980 void __thiscall

C::5EA980

(struct C *this);
5EA9A0 int __thiscall

C::5EA9A0

(struct C *this);
5EAC70 int __thiscall

C::5EAC70

(struct C *this);
5EAF30 void __thiscall

C::5EAF30

(struct C *this, struct Marker *marker);
5EAFB0 void __thiscall

C::5EAFB0

(struct C *this, struct MarkerQueryResult *markerQueryResult);
5EB040 void __thiscall

C::5EB040

(struct C *this);
5EB280 void __thiscall

C::5EB280

(struct C *this);
5EB400 int __thiscall

C::5EB400

(struct C *this);
5EB450 int __thiscall

C::WriteHotPositionFileIfRequested

(struct C *this);
5EFAC0 void __thiscall

Network89CF48::InitQuantizers

(struct Network89CF48 *this);
5F08F0

UnloadServerLib

5F1670 void __thiscall

C::ctor

(struct C *this, int, struct Player *player);
5F1CC0 int __thiscall

C::5F1CC0

(struct C *this);
5F1E10 int __thiscall

C::5F1E10

(struct C *this, int);
5F1FD0 int __thiscall

C::5F1FD0

(struct C *this, int, char);
5F2FA0 int __thiscall

C::5F2FA0

(struct C *this, int);
5F3010 int __thiscall

C::5F3010

(struct C *this);
5F3080 void __cdecl

C::5F3080

(struct C *this);
5F30F0 void __thiscall

C::5F30F0

(struct C *this);
5F32A0 int __thiscall

C::5F32A0

(struct C *this);
5F3550 void __thiscall

C::5F3550

(struct C *this, float);
5F39D0 int __thiscall

C::5F39D0

(struct C *this);
5F3E10 void __thiscall

C::SetPlayerInstance

(struct C *this, struct C4 *playerInstance);
5F41B0 char *__thiscall

C::GetCurrectRacerName

(struct C *this);
5F73D0 struct CareerD24_54_30_0_10C *__cdecl

CareerD24_54_30_0_10C::ctor

(struct CareerD24_54_30_0_10C *this);
5F9050 void __thiscall

Network89CF48::ctor

(struct Network89CF48 *this);
5FA300

??StartServer

5FA820 int __thiscall

C::5FA820

(struct C *this, int);
5FAA60 void __thiscall

C::5FAA60

(struct C *this, int, int, int);
5FABC0 void __thiscall

C::5FABC0

(struct C *this);
5FAE20 void __thiscall

C::5FAE20

(struct C *this);
5FAF10 void __thiscall

C::5FAF10

(struct C *this);
5FAF80 void __thiscall

C::5FAF80

(struct C *this);
5FAFD0 void __thiscall

C::5FAFD0

(struct C *this);
5FB050 void __thiscall

C::5FB050

(struct C *this);
5FFDD0 void __thiscall

C::5FFDD0

(struct C *this);
5FFE70 void __thiscall

C::5FFE70

(struct C *this, int);
5FFF50 int __thiscall

C::5FFF50

(struct C *this);
600090 void __thiscall

C::600090

(struct C *this);
600590 void __thiscall

C::600590

(struct C *this);
6005F0 void __thiscall

C::6005F0

(struct C *this);
600710 int __thiscall

C::600710

(struct C *this, int);
600900

??NISAndRaceHUD

600E10 void __thiscall

C::600E10

(struct C *this);
600F30 void __thiscall

C::600F30

(struct C *this);
602650 void __thiscall

C::ProcessCareerMarkersAndZoneMessages

(struct C *this);
605C70 int __thiscall

C::SetupCareerJoys?

(struct C *this, int);
6063B0 int __thiscall

C::6063B0

(struct C *this);
60A2A0 int __thiscall

C::60A2A0

(struct C *this, int);

when nopped, LAN lobby doesn't work

60AEE0 int __thiscall

Network89CF48::Tick

(struct Network89CF48 *this, char someflag);
60B810 int __cdecl

LoadBinSection8003B600

(struct BinSection *bindata);
60BAC0 int __cdecl

UnloadBinSection8003B600

(struct BinSection *bindata);

find entry in ptrCarData by struct Car.carNamehash

610130 struct Car *__cdecl

FindCarByCarNameHash

(unsigned int carNameHash);
610170 char *__thiscall

Car::GetManufacturerName

(struct Car *this);
610180 int __thiscall

Car::DoesItsGeometryFileExist

(struct Car *this);
610270 void __thiscall

MenuCarInstance::Clear

(struct MenuCarInstance *this, int carIndex, int unused, char field5, char field6);
6102F0 void *__thiscall

MenuCarInstance::GetField590AtIndex

(struct MenuCarInstance *this, int index);
61AE90

RenderLights

61B460 int __cdecl

UnloadBinSection34600_34601_80034602

(struct BinSection *bindata);
61BCD0 void __thiscall

MenuCarInstance::61BCD0

(struct MenuCarInstance *this);

playerId 1/2

61C280 void __thiscall

MenuCarInstance::CalculateSomeHashes

(struct MenuCarInstance *this, int playerId);
61C3C0 int __cdecl

LoadBinSection30220

(struct BinSection *bindata);
61C420 int __cdecl

UnloadBinSection30220

(struct BinSection *bindata);

preset cars of my game:

DDAY_PLAYER_CAR model: 350Z
DDAY_PLAYER_CAR_OLD_RX8 model: RX8
DDAY_PLAYER_CAR_OLD model: LANCEREVO8
DEMO_AI_IMPREZAWRX_WHITE model: IMPREZAWRX
DEMO_AI_IMPREZAWRX_BLUE model: IMPREZAWRX
DEMO_AI_300GT_ORANGE model: 3000GT
DEMO_AI_300GT_BLUE model: 3000GT
DEMO_AI_350Z_SILVER model: 350Z
DEMO_AI_350Z_BROWN model: 350Z
TT_AI_PRESET_1 model: TT
G35_AI_PRESET_1 model: G35
LANCEREVO8_AI_PRESET_1 model: LANCEREVO8
350Z_AI_PRESET_1 model: 350Z
CALEB_GTO model: GTO
NIKKI_MUSTANGGT model: MUSTANGGT
NIGEL_3000GT model: 3000GT
TOM_G35 model: G35
AL_RX8 model: RX8
MARCUS_CELICA model: CELICA
SCOTT_TT model: TT
DEMO_PRESET_1 model: 350Z
DEMO_PRESET_2 model: 350Z
DEMO_PRESET_3 model: 350Z
DEMO_PRESET_4 model: 350Z
CHINGY model: NAVIGATOR
CAPONE model: HUMMER
D3 model: ECLIPSE
SHINESTREET model: IS300
DAVIDCHOE model: COROLLA
JAPANTUNING model: G35
SNOOP_DOGG model: ESCALADE
THE_DOORS model: GTO
61C460 struct CarPreset *__cdecl

FindCarPreset

(unsigned int nameHash);
61CB50 int __cdecl

LoadBinSection34030

(struct BinSection *bindata);
61CB90 int __cdecl

UnloadBinSection34030

(struct BinSection *bindata);

Sets ptrCarData data.

636BE0 int __cdecl

LoadBinSection34600_34601_34608_34609_34607_80034602

(struct BinSection *bindata);
637040 int __thiscall

MenuCarInstance::637040

(struct MenuCarInstance *this, int playerIndex);
637190 int __thiscall

MenuCarInstance::637190

(struct MenuCarInstance *this);

carPresetHash: struct CarPreset.name

637270 void __thiscall

MenuCarInstance::ApplyCarPresetTuning

(struct MenuCarInstance *this, unsigned int carPresetHash);
63BD30 IDirect3D9 *__stdcall

Direct3DCreate9

(UINT SDKVersion);
6D7100

DirectInput8Create

6DA560

j_nullsub_1

jumptable 006E23E3 default case

6E2421

nullsub_17

6F55C7 int __thiscall

CriticalSectionWrapper::InitializeCriticalSection

(struct CriticalSectionWrapper *this);
6F55D2 int __thiscall

CriticalSectionWrapper::DeleteCriticalSection

(struct CriticalSectionWrapper *this);
6F55DD int __thiscall

CriticalSectionWrapper::EnterCriticalSection

(struct CriticalSectionWrapper *this);
6F55E8 int __thiscall

CriticalSectionWrapper::LeaveCriticalSection

(struct CriticalSectionWrapper *this);

most likely 1000

6F57A1

GetSomeTimerResolution

6F57EA void __cdecl

GetThreadIdAndProcessHandle

();
6F582E void __cdecl

UnsetThreadIdCloseProcessHandle

();
6F58C1 int __cdecl

AreWeOnTheMainThread

(void *);
6F5B4D TIMECALLBACK

fptc

;
6F62E9 int __cdecl

EventWrapper__CreateEventA

(struct EventWrapper *eventWrapper);
6F630C int __cdecl

EventWrapper__SetEvent

(struct EventWrapper *eventWrapper);
6F631D int __cdecl

EventWrapper__WaitForSingleObject_Unused_B

(struct EventWrapper *eventWrapper);
6F6335 int __cdecl

EventWrapper__WaitForSingleObject

(struct EventWrapper *eventWrapper);
6F6348 int __cdecl

EventWrapper__WaitForSingleObject_Unused_C

(struct EventWrapper *eventWrapper, int milliseconds);
6F6372 int __cdecl

EventWrapper__CloseHandle

(struct EventWrapper *eventWrapper);
6F6B35 void __thiscall

LinkedList::Clear

(struct LinkedList *this);
6F6B56

LinkedList::PopFirst

6F6C23 int __thiscall

CRealCoreDrive::ctor

(struct CRealCoreDrive *this, int dirname);

index of array in struct_8AD610

6F6C47 struct struct6F79AFesi *__cdecl

GetStruct6F79AFesiFromIndex

(int index);

pops and set node valuemaybe? to -1

6F7112

PopDword8AD610List

6F7143

Clearstruct8AD610LinkedListNodeAndReaddToList

esi = struct struct8AD610LinkedListNode*

6F717C

CloseFileHandleAndAddFileNodeBackToLinkedList

file might get read in here, see criticalSectionWrapper_fileReadLock in passed struct this function has been seen running on non-main thread (not seen on main thread) seems to loop forever until stopLoadingFileLoop? is not 0 this might be resposible for reading files?

6F7195 int __cdecl

threadfuncfilerelated

(struct struct6F7195 *struct6F7195);

thread with threadfuncfilerelated as runnable

6F7388

?StartThread

6F76E9 int __cdecl

thunkfor_6F767C

(int index);
6F78DC struct struct6F79AFesi *__cdecl

GetSomeStructCRealCoreDriveForPath

(char *filepath);
6F79AF struct struct8AD610LinkedListNode *__cdecl

OpenFileGetstruct8AD610LinkedListNodeForPath?

(char *filepathfromgamedir, int unk1);

return 1 on success

6F7C54 int __cdecl

GetFileSize?

(char *filepathfromgamedir, int, int *ptrQwordUnk, int *ptrQwordFileSize);
6F8041 int __thiscall

LinkedList::PushFirst

(struct LinkedList *this, LinkedListNode *node);
6FAD03 int __stdcall

CreateFileAWrapper

(LPCSTR lpFileName, int, int);
6FAE16 int __thiscall

CRealCoreDrive::CloseHandleWrapper

(struct CRealCoreDrive *this, HANDLE handle);

return amount of bytes actually read

6FAE20 int __thiscall

CRealCoreDrive::ReadFileWrapper

(struct CRealCoreDrive *this, HANDLE hFile, char *lpBuffer, int nNumberOfBytesToRead, int unkunused1, int unkunused2);

returns number of bytes written

6FAE3F int __thiscall

CRealCoreDrive::WriteFileWrapper

(struct CRealCoreDrive *this, HANDLE hFile, char *lpBuffer, int nNumberOfBytesToWrite);

moveMethod is either 0 for start or 1 for current 64bit edx:eax

6FAE5E int __thiscall

CRealCoreDrive::SetFilePointerWrapper

(struct CRealCoreDrive *this, HANDLE hFile, int lDistanceToMove, int distanceHighDwordUnused, int moveMethod, int unkunused1, int unkunused2);

64bit edx:eax assumed __thiscall

6FAE89 int __thiscall

CRealCoreDrive::GetFileSizeWrapper

(struct CRealCoreDrive *this, HANDLE hFile);

1 on success(1), zero otherwise assumed __thiscall

6FAE9D int __thiscall

CRealCoreDrive::DeleteFileAWrapper

(struct CRealCoreDrive *this, char *lpFileName);

directoryname is at this+4? returns free bytes available to user 64bit edx:eax

6FAEB3 int __thiscall

CRealCoreDrive::GetDiskFreeSpaceExAWrapper

(struct CRealCoreDrive *this);
6FAF1E

FindFirstFileAWrapper

7263C7 DWORD __stdcall

StartAddress

(LPVOID lpThreadParameter);

for data("A=1 B=2 C:3 D=4") key("C") ret("3 D=4")

7414A0 char *__cdecl

GetValueStartForKey

(char *dataString, char *keyToSearch);

Returns amount of chars written?

741650 int __cdecl

strncpy_0

(char *dest, int maxlen, char *src);
742B20

StartSocketThreadStuff

742C60

StopAllSocketsAndThread

743110 int __cdecl

SwapDwordEndianness

(int);

writes to ptr in ESI, returns 1-4

743320 int __thiscall

[wchar_t::WcharSomeConvert

(wchar_t *this);
7433A0 int __cdecl

CalcDialogTextLengthWcharAware

(struct DialogInfo *dialogInfo);

some wchar expand/set string like func

7433F0 void __cdecl

SetWcharFromDialogText

(wchar_t *ptrWchar, int length, struct DialogInfo *dialogInfo);
7444B0 int __cdecl

SetNetwork44field28ReturnpreviousValue

(struct Network44 *network44, int somenum);
744620 char *__cdecl

Network44__GetKeyValueStringIdentifiedByHash

(struct Network44 *network44, unsigned int hash);

arg0 is the key=value\n etc string

744FF0 struct Network44 *__cdecl

CreateNetwork44

(char *, int, int);
745100 void __cdecl

DestroyNetwork44

(struct Network44 *network44);
74A1A0

StartOLThreadAndPrepareSocketStuff

Calls Winsock's socket, set it nonblocking (with ioctlsocket). In case of type == SOCK_RAW, call setsockopt(s, SOL_SOCKET, SO_BROADCAST, (ptr to 1), 4). Returned value is stored in socketWrapper and the previous value is put in its previousSocketWrapper (this seems to be an atomic operation).

74A220 struct SocketWrapper *__cdecl

CreateNonBlockingSocket

(int af_, int type, int protocol);

Calls Winsock's shutdown and closesocket. Some critical section stuff. Removes it from the socket wrapper links

74A2D0 int __cdecl

CloseSocketWrapper

(struct SocketWrapper *socketWrapper);

Calls Winsock's bind.

returns 0 on success or WSAEWOULDBLOCK/WSAECONNRESET, -2 on WSAENOTCONN, -5 on WSAENETUNREACH/WSAEHOSTDOWN, -6 on WSAECONNREFUSED, -7 on other err.

74A380 int __cdecl

BindWrapper

(struct SocketWrapper *socketWrapper, int name, int namelen);
74A3F0

connect_wrapper

74A5C0 int __cdecl

send_sendto_wrapper

(struct SocketWrapper *socketWrapper, int data, int len, int, int flags, int tolen);
74A6D0

recv_wrapper

74A760

getpeername_wrapper

74A960 void __cdecl

LinkSocketWrapperAndSocketWrapperWrapper

(struct SocketWrapper *socketWrapper, int, int, struct SocketWrapperWrapper *socketWrapperWrapper, int func);

arg should be at least 20h

74AE50 struct Network8B7CAC *__cdecl

CreateOrGetICMPSocketWrapper8B7CAC

(int structSizeInDwords);
74AED0

UnGetICMPSocketWrapper8B7CAC

74B730 DWORD __stdcall

GetTickCount

();

criticalSectionWrapper8B7CB8 is used when nullptr is passed

74B740 void __cdecl

InitializeCriticalSection_Wrapper3

(struct CriticalSectionWrapper_3 *critSectionWrapper);

criticalSectionWrapper8B7CB8 is used when nullptr is passed

74B770 void __cdecl

DeleteCriticalSection_Wrapper3

(struct CriticalSectionWrapper_3 *critSectionWrapper);

8B7CB8 is used when nullptr is passed

ret 0 on failure

74B790 int __cdecl

EnterCriticalSection_Wrapper3

(struct CriticalSectionWrapper *critSectionWrapper);

criticalSectionWrapper8B7CB8 is used when nullptr is passed

74B7E0 void __cdecl

EnterCriticalSection_Wrapper3_0

(struct CriticalSectionWrapper_3 *critSectionWrapper);

criticalSectionWrapper8B7CB8 is used when nullptr is passed

74B870 int __cdecl

LeaveCriticalSection_Wrapper3

(struct CriticalSectionWrapper_3);
74B8A0 int __cdecl

AddSocketAndHandler

(int func1, struct SocketWrapper *socketwrapper);
74BA50 DWORD __stdcall

OLThreadFunc

(LPVOID lpThreadParameter);
74BA90

StartOLThread

750520 void __stdcall

fnCallback

(DWORD hDevice, DWORD dwMessage, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3);

so it can be put in struct Network44.network0

754230

CreateNetwork0

7542C0 void __cdecl

DestroyNetwork0

(struct Network0 *network0);
754C40 DWORD __stdcall

j_GetTickCount

();
7568F0 struct SocketWrapperWrapper *__cdecl

CreateICMPSocket

(struct SocketWrapperWrapper *__return_ptr __struct_ptr retstr);
7569E0 int __cdecl

CloseSocketWrapperWrapper?

(struct SocketWrapperWrapper *ptr);
7596A0 int __cdecl

DestroyNetwork00

(struct Network00 *network00);
759910

NetworkSendReceive

75A600

bunchOfXorAddShit

75B070

bunchOfXorAddShit_0

75BBFA int __stdcall

WSAGetLastError

();
75BC00 int __stdcall

WSAStartup

(WORD wVersionRequested, LPWSADATA lpWSAData);
75BC06 int __stdcall

setsockopt

(SOCKET s, int level, int optname, const char *optval, int optlen);
75BC0C int __stdcall

ioctlsocket

(SOCKET s, int cmd, u_long *argp);
75BC12 SOCKET __stdcall

socket

(int af, int type, int protocol);
75BC18 int __stdcall

closesocket

(SOCKET s);
75BC1E int __stdcall

shutdown

(SOCKET s, int how);
75BC24 int __stdcall

bind

(SOCKET s, const struct sockaddr *name, int namelen);
75BC2A int __stdcall

connect

(SOCKET s, const struct sockaddr *name, int namelen);
75BC30 int __stdcall

listen

(SOCKET s, int backlog);
75BC36 SOCKET __stdcall

accept

(SOCKET s, struct sockaddr *addr, int *addrlen);
75BC3C int __stdcall

sendto

(SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen);
75BC42 int __stdcall

send

(SOCKET s, const char *buf, int len, int flags);
75BC48 int __stdcall

recvfrom

(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen);
75BC4E int __stdcall

recv

(SOCKET s, char *buf, int len, int flags);
75BC54 int __stdcall

select

(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout);
75BC5A int __stdcall

getpeername

(SOCKET s, struct sockaddr *name, int *namelen);
75BC60 int __stdcall

getsockname

(SOCKET s, struct sockaddr *name, int *namelen);
75BC66 void *__stdcall

gethostbyname

(const char *name);
75BC6C int __stdcall

gethostname

(char *name, int namelen);
75BC72 int __stdcall

WSAIoctl

(SOCKET s, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
75BC78 int __stdcall

WSACleanup

();
75BCC7

start

expects one in FPU, removes it returns 64bit edx:eax?

75BED4

floor64bit

mostly used as pure virtual function

75C39A

ThrowTantrumAndExit

75C401 int __stdcall

eh_vector_destructor_iterator

(void *mem, int elementSize, int elementCount, void (__thiscall *dtor)(void *this));
75C461 int __stdcall

eh_vector_constructor_iterator

(void *mem, int elementSize, int elementCount, void (__thiscall *ctor)(void *this), void (__thiscall *dtor)(void *this));
75C4D0

alloca_like

75C5E7

LeaveCriticalSectionWithIndex8_b

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/atexit?view=msvc-160

We sure arg1 is a __thiscall func ptr?

75C5ED int __cdecl

atexit

(void (__thiscall *dtor)(void *));
75C621

HeapAllocWrapper75C621

75C69C

HeapAllowWrapper75C69C

75C6C8

HeapAllocWrapper75C6C8

75C6DA

HeapFreeWrapper75C6DA

75C72D void __cdecl

LeaveCriticalSectionWithIndex4

();

varargs for params maybe does a lot more shit

75C784 int __cdecl

Format?

(char *destination, char *format, int param);
75D452

LeaveCriticalSectionWithIndex8

Invoked once at boot, does things (todo) and calls all functions in someInitFunctions.

75D45B

unnamed_75D45B

75D5A4 int __cdecl

ExitProcessWrapper

(int uExitCode);
75D65B

unnamed_75D65B

75DD6F int __cdecl

SomeElaborateStrcmp??

(char *desired, char *value);

according to ghidra

76115E

@__security_check_cookie@4

761E0B

ReleaseThreadLocalStorageValue

762018

InitializeThreadLocalStorage?

index should be <= 18(012h) or variable criticalSectionVars is wrong

76315D void __cdecl

LeaveCriticalSectionWithIndex

(int index);
768B39 BOOL __stdcall

LocaleEnumProc

(LPSTR);
76E9F0 BOOL __stdcall

Process32Next

(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
76E9F6 BOOL __stdcall

Process32First

(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
76E9FC HANDLE __stdcall

CreateToolhelp32Snapshot

(DWORD dwFlags, DWORD th32ProcessID);
76EA02 void __stdcall

RtlUnwind

(PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue);
770D16 HRESULT __stdcall

DirectSoundCreate

(LPGUID, LPDIRECTSOUND *, LPUNKNOWN);
770D1C HRESULT __stdcall

DirectDrawCreate

(GUID *lpGUID, LPDIRECTDRAW *lplpDD, IUnknown *pUnkOuter);
770D22 LONG __stdcall

lineOpen

(HLINEAPP hLineApp, DWORD dwDeviceID, LPHLINE lphLine, DWORD dwAPIVersion, DWORD dwExtVersion, DWORD dwCallbackInstance, DWORD dwPrivileges, DWORD dwMediaModes, const LPLINECALLPARAMS lpCallParams);
770D28 LONG __stdcall

lineNegotiateAPIVersion

(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPILowVersion, DWORD dwAPIHighVersion, LPDWORD lpdwAPIVersion, LPLINEEXTENSIONID lpExtensionID);
770D2E LONG __stdcall

lineClose

(HLINE hLine);
770D34 LONG __stdcall

lineGetID

(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass);
770D3A LONG __stdcall

lineMakeCall

(HLINE hLine, LPHCALL lphCall, LPCSTR lpszDestAddress, DWORD dwCountryCode, const LPLINECALLPARAMS lpCallParams);
770D40 LONG __stdcall

lineAnswer

(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize);
770D46 LONG __stdcall

lineInitialize

(LPHLINEAPP lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, LPCSTR lpszAppName, LPDWORD lpdwNumDevs);
770D4C LONG __stdcall

lineShutdown

(HLINEAPP hLineApp);
770D52 LONG __stdcall

lineGetDevCaps

(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps);
770D58 UCHAR __stdcall

Netbios

(PNCB pncb);
7789D9

??ConnectToEAServer_SEH

7792F8

CapTextureFilteringAnd??LoadShaders_SEH

Calls WorldAnimStuff::ctor.

77B5E0 void __cdecl

init_function_77B5E0

();

Registers binSectionHandlerMagicMapEntry0 (without using BinSectionMagicMapEntry::RegisterBinSectionHandler).

77B620

init_function_77B620_registerBinSectionHandler0

pools->PoolControl::Init()
77B670

init_function_77B670

77CB00

init_function_77CB00_registerBinSectionHandler80134000

77CC20

init_function_77CC20_registerBinSectionHandler135200

77CC40

init_function_77CC40_registerBinSectionHandler80135100

77CC60

init_function_77CC60_registerBinSectionHandler80135000

77CD60

init_function_77CD60_registerBinSectionHandlerB3300000

77CD80

init_function_77CD80_registerBinSectionHandlerB332000

77CDA0

init_function_77CDA0_registerBinSectionHandlerB0300100

77D960

init_function_77D960_registerBinSectionHandler39100

77D980

init_function_77D980_registerBinSectionHandler39101

77D9A0

init_function_77D9A0_registerBinSectionhandler39102

77E190

init_function_77E190_registerBinSectionHandler34026

77E1B0

init_function_77E1B0_registerBinSectionHandler34027

inits controllerStruct874C40

77E1F0

init_function_77E1F0

Calls MouseData::ctor to initialize mouse data.

77E580

init_function_77E580_MouseData_ctor

77E6C0

init_function_77E6C0_registerBinSectionHandler80034140

77E6E0

init_function_77E6E0_registerBinSectionHandler3412F

77E720

init_function_77E720_registerBinSectionHandler34146

77E740

init_function_77E740_registerBinSectionHandler34201

77E7A0

init_function_77E7A0_registerBinSectionHandler80034147

77E7D0

init_function_77E7D0_registerBinSectionHandler34110

77E7F0

init_function_77E7F0_registerBinSectionHandler34113

77E810

init_function_77E810_registerBinSectionHandler34111

77E830

init_function_77E830_registerBinSectionHandler34112

77E890

init_function_77E890_registerBinSectionHandler34108

77E8B0

init_function_77E8B0_registerBinSectionHandler80034100

77E8D0

init_function_77E8D0_registerBinSectionHandler34107

781FA0 void __cdecl

Career__dtor

();
782470 void __cdecl

destroyControllerStruct874C40

();

registered with atexit

7826F0 void __cdecl

Network89CF48__dtor

();
782860 void __cdecl

atexit_destroy_carPresets

();