示例#1
0
        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);
        }
示例#2
0
 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);
示例#3
0
 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);