I updated the moball struct for LC GER a few weeks ago, I think USA should have the same struct. I didnt resolved all Values, because I dont need all, so your job is to resolve the missing ones

Please keep in mind that I used the Int32 Unknown Values just as a placeholder for 4 bytes (It can also consist of byte/int16/int64).
Reader.ReadInt32(); //Index
Reader.ReadInt32(); //Level
Reader.ReadInt32(); //HP
Reader.ReadInt32(); //MP
Reader.ReadInt32(); //Flag
Reader.ReadInt32(); //Flag 2
Reader.ReadInt32(); //Attack Speed
Reader.ReadSingle(); //Walk Speed
Reader.ReadSingle(); //Run Speed
Reader.ReadSingle(); //Scale
Reader.ReadSingle(); //Attack Area
Reader.ReadSingle(); //Size
Reader.ReadInt32(); //Skill Master
Reader.ReadInt32(); //Skill Master 2
Reader.ReadInt32(); //Unknown1
Reader.ReadInt32(); //Unknown2
Reader.ReadInt32(); //Unknown3
Reader.ReadInt32(); //Unknown4
Reader.ReadInt32(); //Unknown5
Reader.ReadInt32(); //Unknown6
Reader.ReadInt32(); //Unknown7
Reader.ReadInt32(); //Unknown8
Reader.ReadInt32(); //Unknown9
Reader.ReadInt32(); //Skill ID 0
Reader.ReadInt32(); //Skill Level 0
Reader.ReadInt32(); //Skill ID 1
Reader.ReadInt32(); //Skill Level 1
Reader.ReadInt32(); //Unknown10
Reader.ReadInt32(); //Unknown11
Reader.ReadInt32(); //Unknown12
Reader.ReadInt32(); //Unknown13
Reader.ReadInt32(); //Unknown14
Reader.ReadBytes(64); //UnknownString15
Reader.ReadBytes(64); //UnknownString16
Reader.ReadBytes(64); //UnknownString17
Reader.ReadBytes(64); //UnknownString18
Reader.ReadBytes(64); //UnknownString19
Reader.ReadBytes(64); //UnknownString20
Reader.ReadBytes(64); //UnknownString21
Reader.ReadBytes(64); //UnknownString22
Reader.ReadBytes(64); //UnknownString23
Reader.ReadBytes(64); //UnknownString24
Reader.ReadBytes(64); //UnknownString25
Reader.ReadBytes(64); //UnknownString26
Reader.ReadBytes(64); //UnknownString27
Strings are now stored with a fixed length of 64bytes, and no longer dynamically.