public static TextFile FromBytes(byte[] data, bool fixedLength) { var result = new TextFile(); if (fixedLength) { result.FixedLength = data.Length; } using (var stream = new MemoryStream(data)) using (var reader = new BinaryReader(stream)) { // enumerate pages var pageCount = reader.ReadInt16(); for (var i = 0; i < pageCount; i++) { result.Pages.Add(new MenuTextPage(reader.ReadInt16())); } // read pages foreach (var page in result.Pages) { // pages listed at location 0 aren't real if (page.Location == 0) { continue; } // enumerate string offsets stream.Seek(page.Location, SeekOrigin.Begin); var offsetCount = reader.ReadInt16(); for (var i = 0; i < offsetCount; i++) { page.Offsets.Add(reader.ReadInt16()); } // read strings foreach (var offset in page.Offsets) { // strings listed at offset 0 aren't real if (offset == 0) { continue; } stream.Seek(page.Location + offset, SeekOrigin.Begin); var stringBytes = new List <byte>(); var nextByte = byte.MaxValue; while (nextByte != 0) { nextByte = reader.ReadByte(); stringBytes.Add(nextByte); } page.Strings.Add(FF8String.Decode(stringBytes.ToArray())); } } } return(result); }
private CommandAbilities(FF8String name, FF8String description, byte ap, BattleCommand battleCommand, byte index, byte[] unknown0) : base(name, description, ap, Icon) => (BattleCommand, Index, Unknown0) = (battleCommand, index, unknown0);
public BattleCommand(FF8String name, FF8String description, byte ability, Battle.Dat.UnkFlag flags, Target target, byte unknown, int battleID) => (Name, Description, Ability, Flags, Target, Unknown, BattleID) = (name, description, ability, flags, target, unknown, battleID);