@ZXApocrypha
Thanks for that list. I hope you don't mind me using this for my AR Code generator. I will credit your for your contribution of course :)
Same goes for everyone else that is helping me out here :D
I finally found some more time to look into the RAM of the game and I want to share some of my findings. I use the EUR version of the game, without DLCs & Spotpass.
I hope that some of you guys with other versions of the game will be able to confirm some of my results or will be able to provide more info about their offsets etc.
Class Table
The class table seems to hold all the definitions of the classes. The 272 byte in length character blocks refer to the table entries.
This are pointers to the class table.
EUR = 0x000220FC
USA = 0x000234FC (with DLC/Spotpass)
Just read the value there (it's the offset of the table begin) and make sure you fix the offset! (e.g. 0xC00A3B15 = 0x013B0AC0 !)
The class list will start 8 bytes later from there, each object is 128 bytes in size and there should be a total of 83 objects. If you jump 83 * 128 (10624 bytes) forward, you will reach the end of the class table and see a 4 byte int value that seems to hold the total object count (0x53 = 83).
Need to figure out the structure of each entry still, but I got some stuff mapped out already:
Character Table
The character table seems to hold all the base character values and more. The order is static, it should always be the same.
This is the order of the characters listed:
Each entry seems to be 568 bytes in size and there is a total of 57 objects.
There is an easy way to find the start of the table, which seems to be located in a file (HSDArc format) that is loaded by the game.
You simply can use a hex editor that offers wildcard search. I'm using Hex Workshop which offers ?? as a wildcard mask for a hex byte.
Just search for the hex string below and you should find the beginning of that HSDArc file.
48 53 44 41 72 63 00 01 ?? ?? ?? ?? 39 00 00 00
You will be seeing the header of the file. Which has the following struct?:
Right after that the character table will start. I didn't figure out the struct for each of the entries yet, but it seems like VincentASM has mapped it out in his CharacterEditor Nightmare script. So it should be easy to adopt the info.
So far I've found the following offsets when trying to hunt down the table in the below listed versions of the game:
EUR = 0x013D6558
USA = 0x0133BE58 (with DLC/Spotpass)
Character Block Table
The character block table keeps track of your current character roster. The order in there is dynamic and it will change several times.
Stuff like haircolor, level, exp, hp, character inventory etc are stored in there. Each block is 272 bytes in size and there is a total of 200 blocks but most remain unused.
You can search for this hex string to find the beginning of the table:
10 01 00 00 C8 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ??
10 01 00 00 seems to be holding the object size (272 bytes)
while C8 00 00 00 seems to hold the object count (200)
Those blocks were partially mapped out already by some of you guys, there are still some unknown values left in there.
Expect more info soon... :)
I'm really interested in finding more reliable pointers to offer support to read every dump of the game reliable, regardless of what game version was used to make it. Hope you guys can help me with that :D