コード例 #1
0
ファイル: MSBT.cs プロジェクト: zsw12abc/NHSE
        private void ReadTXT2(BinaryReaderX br)
        {
            TXT2.Identifier  = br.ReadString(4);
            TXT2.SectionSize = br.ReadUInt32();
            TXT2.Padding1    = br.ReadBytes(8);
            long startOfStrings = br.BaseStream.Position;

            TXT2.NumberOfStrings = br.ReadUInt32();

            var offsets = new List <uint>();

            for (int i = 0; i < TXT2.NumberOfStrings; i++)
            {
                offsets.Add(br.ReadUInt32());
            }

            for (int i = 0; i < TXT2.NumberOfStrings; i++)
            {
                uint nextOffset = (i + 1 < offsets.Count) ? ((uint)startOfStrings + offsets[i + 1]) : ((uint)startOfStrings + TXT2.SectionSize);

                br.BaseStream.Seek(startOfStrings + offsets[i], SeekOrigin.Begin);

                var result = new List <byte>();
                while (br.BaseStream.Position < nextOffset && br.BaseStream.Position < Header.FileSize)
                {
                    if (Header.EncodingByte == MSBTEncodingByte.UTF8)
                    {
                        result.Add(br.ReadByte());
                    }
                    else
                    {
                        byte[] unichar = br.ReadBytes(2);

                        if (br.ByteOrder == ByteOrder.BigEndian)
                        {
                            Array.Reverse(unichar);
                        }

                        result.AddRange(unichar);
                    }
                }
                var str = new MSBTTextString(result.ToArray(), (uint)i);
                TXT2.Strings.Add(str);
            }

            // Tie in LBL1 labels
            foreach (var lbl in LBL1.Labels)
            {
                lbl.String = TXT2.Strings[(int)lbl.Index];
            }

            PaddingSeek(br);
        }
コード例 #2
0
 public MSBTLabel(string name)
 {
     Name   = name;
     String = MSBTTextString.Empty;
 }