private void parseSubtitles()
{
int block = 0;
UInt32 type;
UInt32 blockSize;
BinaryReader br = new BinaryReader(dataStream);
// Start of MUL data
dataStream.Position = 0x800;
while (dataStream.Position < dataStream.Length)
{
// Read block header
type = dataStream.readuint(isBE);
blockSize = dataStream.readuint(isBE);
dataStream.Position += 8;
if (type == 1) // Cine block
{
if (blockSize == 0x10)
{
block++;
dataStream.Position += 0x10;
continue;
}
// Copy cine block to array
var array = br.ReadBytes((int)blockSize);
parseBlock(array, block);
block++;
}
else if (type == 0) // Skip audio block
{
dataStream.Position += blockSize;
}
else if (type == 2) // Unknown block (TRL, TRA), skip
{
dataStream.Position += blockSize;
}
else if (type == 3) // Unknown block (LCGoL), skip
{
dataStream.Position += blockSize;
}
else
{
throw new Exception("Unknown mul block type");
}
}
}