private void ReadLBL1(BinaryReaderX br) { LBL1.Identifier = br.ReadString(4); LBL1.SectionSize = br.ReadUInt32(); LBL1.Padding1 = br.ReadBytes(8); long startOfLabels = br.BaseStream.Position; LBL1.NumberOfGroups = br.ReadUInt32(); for (int i = 0; i < LBL1.NumberOfGroups; i++) { var grp = new MSBTGroup { NumberOfLabels = br.ReadUInt32(), Offset = br.ReadUInt32() }; LBL1.Groups.Add(grp); } foreach (var grp in LBL1.Groups) { br.BaseStream.Seek(startOfLabels + grp.Offset, SeekOrigin.Begin); for (int i = 0; i < grp.NumberOfLabels; i++) { var length = Convert.ToUInt32(br.ReadByte()); var name = br.ReadString((int)length); var index = br.ReadUInt32(); var lbl = new MSBTLabel(name) { Index = index, Length = length }; LBL1.Labels.Add(lbl); } } if (LBL1.Labels.Count > 0) { HasLabels = true; } PaddingSeek(br); }
private static (string Label, string Text) GetCleanLabelText(MSBTLabel lbl, IList <MSBTTextString> txt) { var label = lbl.Name; var index = (int)lbl.Index; var text = txt[index].ToString(Encoding.Unicode); if (text.StartsWith("\u000e")) // string formatting present; discard formatting! { text = text.Substring(6); } const char germanJunk = '\u000e'; int junk = text.IndexOf(germanJunk); if (junk != -1) // string formatting present; discard formatting! (german) { text = text.Substring(0, junk); } text = StringUtil.TrimFromZero(text); return(label, text); }