private bool ReadField(ObjectReader objectReader, Dictionary <TableField, int> fieldValues, TableField field) { var address = 0; var value = field.ToString() + " = "; switch (field) { case TableField.End: return(false); case TableField.Unknown128: var header = objectReader.ReadBytes(2); var dataLength = 0; switch (header[0]) { case 3: if (header[1] == 32) { header = header.Concat(objectReader.ReadBytes(12)).ToArray(); dataLength = header[6] * 4; } else { dataLength = 4; } break; case 5: dataLength = header[1] == 32 ? 24 : 8; break; case 8: dataLength = 16; break; case 11: if (header[1] == 32) { header = header.Concat(objectReader.ReadBytes(9)).ToArray(); dataLength = header[6]; } else { dataLength = 1; } break; } value += string.Join(", ", header.Concat(objectReader.ReadBytes(dataLength))); break; case TableField.Unknown129: value += string.Join(", ", objectReader.ReadBytes(10)); break; case TableField.Unknown130: address = objectReader.ReadInt32(); value += $"{address.ToString("X8")}, {objectReader.ReadInt32()}, {objectReader.ReadInt32()}, {objectReader.ReadInt32()}"; break; case TableField.Unknown131: case TableField.Unknown132: address = objectReader.ReadInt32(); value += $"{address.ToString("X8")}, {objectReader.ReadInt32()}, {objectReader.ReadInt32()}"; break; default: throw new NotImplementedException(); } var entry = MxrObjectReader.ReadString(objectReader); if (address != 0) { Strings.Add(address, entry); } InfoText += $"{value}, {entry}\n"; if (objectReader.ReadUInt16() != 0) { objectReader.BaseStream.Position--; } return(true); }