This is just me documenting while I have fun attempting to reverse-engineer the game Need For Speed Underground 2, otherwise knows as nfsu2.
This normally belongs to https://github.com/yugecin/nfsu2-re.
The code for all injected things I did can be found in
It's configured as a VC2005 project in a VC2005 solution.
The project emits a compiled file to
I'm using the Ultimate ASI Loader by ThirteenAG,
which loads the library nicely for me (download the ZIP and place the dll in the game folder,
Symbol information (functions, structs, enums, vars) is generated from the
SPEED2.idc file which can be found on the idc branch of the repository.
This file is generated by IDA - The Interactive Disassembler from the IDA database that I'm
making (this database is not shared, but the idc file has nearly everything).
I'm using IDA freeware 7.7.220118.
The generated idc file does not contain type information of global variables when that type
is a pointer. One example is smsDatas, which has type
struct SmsData*, but this information
is missing from the idc and thus in these docs it shows up as
The same counts for some primitive types like
int, for example numSmsDatas.
Some other types do show up correctly, like when the type is a struct or
for example twoPi.
There is some code to manually set the type by using the following format on the first line of
the (non-repeating) comment of the symbol:
@docgen:type:struct MyStruct *, but this is
rarely used (most likely only when it's actually used in written docs) and this comment could
be out of date.
In IDA, the difference between a struct member that has a type set and a struct member that
has no type set is not very visible. Because of that, some struct members might be missing
an explicit type, because it is simply forgotten to set their type correctly. The type shown
will still most likely be correct, as the struct member's size may be translated into
int, but it will have an
/*unconfirmed type*/ tag.