So, I'll give you folks a few hints to get you started, feel free to post what you find, or any questions.
Firstly, there are a list of "types" you'll need to know:
Code:
public enum HeroType {
None = 0,
Id = 1,
Integer = 2,
Boolean = 3,
Float = 4,
Enum = 5,
String = 6,
List = 7,
LookupList = 8,
Class = 9,
Association = 10,
ScriptRef = 14,
NodeRef = 15,
GuiControl = 16,
Timer = 17,
Vector3 = 18,
FsGuid = 19,
TimeInterval = 20,
DateTime = 21,
RawData = 22,
}
When you poke around in the SWTOR assembly, you'll be able to search these strings without much issue, and find tons of xrefs to said strings (and vtables). There's your big starting point for reversing the game. Please keep in mind, SWTOR is built on HeroEngine, which essentially, is a big scripting engine. Scripts are loaded into the GOM (find it by searching "attempt to find GOM", it's referenced inside GetGOM()) as bytecode.
Definitions are where you'll spend most of your time. Definitions do what they say... define an object. Please check the HE wiki for "glomming" to understand how inheritance works. (There is inheritance, and components. Very different things.)
Bioware did include the entire on-disk DOM file, including names, comments, etc, during the beta (and early live builds). I'll leave it up to the reader to figure out how to pull it from the archives, and parse it.
Once you understand how the engine works, you can begin to delve into the way they deal with "objects" in the world. From there, you can move onto figuring out how to call scripts, and pull return values. (I highly suggest you do this out of process, and get a very *fast* memory library to do it. There is a lot of pointer usage, thusly, a lot of ReadProcMem calls required)
I'll give you a base structure for HeroDefinition, which should let you guys get started reversing things:
Code:
struct HeroDef
{
VFTABLE* VTable;
void* Field;
const char* Name;
DWORD Flags;
};
From here, you'll be on your way to deciphering the complex, yet simple, engine.