Here's next piece of junk/chunk... At 0x5CDCC starts a block of 768 bytes which holds all the AP needed for all action & support abilities. Each ability uses 2 bytes, the second byte is the number of AP needed to master/learn, the first one I think is ID for the ability. Every class (I rather call it, as opposed to character) have 48 abilities each and there are 8 classes stored in this order: Theif, Black Mage, Summoner/White Mage, Knight, Dragon Knight, Blue Mage, White Mage/Summoner, Monk/Ninja.
The 16 first byte of this block (and the data for Zidane's first 8 abilities), looks like this:
65 28 66 28 67 28 68 23 69 32 6A 37 6B 55 6C 64
Edit: This block of data may actually be larger, and include temporary/guest character classes, I don't know yet but the other is still correct.
Another Edit: So I tried to use the code form the ability screen to get the MP cost for abilities, and allthough I found them, the MP cost display under the ability screen are stored locally within the ability/equip module, and the MP cost actually used in battle is most likely read from somewhere else... -_-
But I think I've pretty much managed to track down where the battle data is stored aswell...
Ok, so the data for abilities when they are used in battle are read from file 22 in directory 1, @0xBB2B. Each ability uses 16 bytes and there's 192 abilities listed, for a total of 3072 bytes. An identical copy of this data is also stored in the ability/equip module ( 8 ) in directory 0.
The things I found so far:
; Target (Bits ???)
; Sub-Dialog (Bits 6-8)
; 0 = None
; 1 = HP MAX
; 2 = MP MAX
; 3 = Status Bad
; 4 = Status Good
; 5 = (illegal)
; 6 = (illegal)
; 7 = (illegal)
0x0000: byte Target/Sub-Dialog
0x0004: byte Command ID
0x0005: byte Coefficient
0x000A: byte MP Cost
0x000C: word Animation Pointer
0x000E: word String Pointer
The data for the first two abilities looks like this:
Ability 0 (Void) 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00
Ability 1 (Cure) 33 09 00 20 0A 10 00 00 47 00 06 01 08 00 03 00