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); }
public MSBTLabel(string name) { Name = name; String = MSBTTextString.Empty; }