The actual data is located in system.cmp. you first need to decompress that file with something like BatchLZ77, then character data starts at $250. here are my notes on the file:
FE8Data.bin isn't the actual data file, it's probably more of a reference file, as you need
to decompress(LZ77) system.cmp to get the actual data you need to change.
I'll be referencing offset in both files, First offset being offset in FE8Data.bin, second offset being system.cmp.
difference between the two: $220
Pointers are big endian, and reference the offset - $20
$30/$250 = Character table: size per entry $54
1st pointer = PID
2nd pointer = MPID
3rd pointer = Always 0
4th pointer = FID
5th pointer = JID(Class)
6th Pointer = Affiliation
7th pointer = Weapon level(Weapon levels are ascii so you cant start with D almost leveled for example)
8th pointer = SID(special properties, i think)
9th pointer = SID(special properties, i think)
10th pointer = SID(special properties, i think)
11th pointer = AID
12th pointer = AID2
Then A bunch of char data:
First Byte = ??
Second Byte = ??
Third Byte = ??
Fourth Byte = ??
Fifth Byte = ??
Sixth byte = ??
7th byte = Starting level
8th byte = Starting exp
9th byte = ??
then Bases and growths, 8 bytes each.
then, from +$49 to +$54, even more data i have no idea about. they certainly arent pointer.
$6FC4/$71E4 = Class table: size per entry $64
1st pointer: JID
2nd pointer: MJID
3rd pointer: MH_J(No ideas what this means)
4th pointer: JID_PROMOTION(PROMOTION being the class he promotes into)
5th pointer: ??
6th pointer: Base weapon rank, reference for enemies i guess
7th pointer: SID
8th pointer: ??
9th pointer: ??
10th pointer: ??
11th pointer: ??
12th pointer: Race?(ranger points to human)
13th pointer: Promotion?(ranger points to hero)
14th pointer: ??
15th pointer: AID
then 8 bytes of fuck if i know data, shoutouts to +$3F for being mov tho
After that Class Bases, caps and growths.
then 8 more bytes of nothingness, at least for ranger, and the end.
I have more notes on the header of system.cmp and how it's really just a compiation of a bunch of files somewhere, but i cant find it right now.
EDIT: alright didn't find them but wrote this up:
Notes On the system.cmp(and more generally, the overall file header structs for pack files) struct:
+$0: First word: 70 61 63 6B(pack in ascii)
+$4: Maybe a short: number of entries in the header, it would seem
then starting from +$8, the file table:
First word: Unknown, always zero
Second word: Pointer, Points to filename string(for example, FE8Data.bin)
Third word: Pointer, Points to beggining of file in pack file
Fourth word: Size of file.
For example, The first entry in the system.cmp table:
$00000000 = ?
$00000108 = "FE8Data.bin"
$00000220 = Start of file(the first four bytes at $220 in system.cmp and at the beggining of FE8Data.bin are both 00 02 3D 2C.)
$00023D2C = Size of file, same as the size of FE8Data.bin.