Sprite[] LoadSprites(string filename)
        {
            // TODO: Cleanly abstract file type detection
            if (filename.ToLower().EndsWith("r8"))
            {
                var r8 = new R8Reader(FileSystem.Open(filename));
                return r8.Select(a => SheetBuilder.Add(a.Image, a.Size, a.Offset)).ToArray();
            }

            BinaryReader reader = new BinaryReader(FileSystem.OpenWithExts(filename, exts));

            var ImageCount = reader.ReadUInt16();
            if (ImageCount == 0)
            {
                var shp = new ShpTSReader(FileSystem.OpenWithExts(filename, exts));
                return shp.Select(a => SheetBuilder.Add(a.Image, shp.Size)).ToArray();
            }
            else
            {
                var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts));
                return shp.Frames.Select(a => SheetBuilder.Add(a.Image, shp.Size)).ToArray();
            }
        }