static bool DetectVersionSci1(AssetLoader loader)
{
var reader = loader.Reader;
var length = loader.Length;
// File starts with three-byte resource type headers; each (u1 type; u2 offset), where type ends in 255.
int firstOffset = -1, lastOffset = 0;
while (true) {
if (reader.BaseStream.Position + 3 >= length)
return false;
ResourceType type = (ResourceType)reader.ReadByte();
int offset = reader.ReadUInt16();
if (firstOffset < 0)
firstOffset = offset;
else if (offset < lastOffset || (offset - lastOffset) % 6 != 0)
return false;
lastOffset = offset;
if (type == ResourceType.End)
break;
}
// The remainder are sorted resource lists for each type, but this is enough for positive detection.
return reader.BaseStream.Position == firstOffset && lastOffset == length;
}