internal StringValue(StringBlock block, int index, uint offset, BinaryReader reader, StringPackage.Node[] nodes, char[] buffer) : base(block, "") { Index = index; reader.BaseStream.Position = offset; int bitCount = 0, bits = 0; int length = 0; while (true) { StringPackage.Node node = nodes[nodes.Length - 1]; while (node.Left != 0xFF) { if (bitCount == 0) { bits = reader.ReadByte(); bitCount += 8; } if ((bits & 0x80) != 0) { node = nodes[node.Right]; } else { node = nodes[node.Left]; } bits <<= 1; bitCount--; } char value = (char)node.Value; if (value == '|') { break; } buffer[length++] = value; } Name = new string(buffer, 0, length); }