public DrCrsFrame(Stream s, CrsHeader sph, CrsFrameInfo info) { Type = SpriteFrameType.Indexed; const int width = 32; const int numPixels = width * width; Data = new byte[numPixels]; var pixindex = new Func <int, int, int>((x, y) => y * width + x); for (var y = 0; y < width; ++y) { for (var x = 0; x < width; ++x) { var newIndex = pixindex(x, y); Data[newIndex] = s.ReadUInt8(); } } Offset = new float2(0, 0); FrameSize = new Size(width, width); Size = FrameSize; }
private DrCrsFrame[] ParseFrames(Stream s) { var start = s.Position; var frames = new List <DrCrsFrame>(); for (var i = 0; i < header.Nanims; ++i) { var sfi = new CrsFrameInfo() { FrameIndex = i }; var frame = new DrCrsFrame(s, header, sfi); frames.Add(frame); } frames.Reverse(19, 9); frames.Reverse(28, 4); frames.Reverse(32, 8); frames.Reverse(40, 10); frames.Reverse(50, 7); frames.Reverse(62, 6); frames.Reverse(68, 8); frames.Reverse(76, 8); frames.Reverse(90, 6); frames.Reverse(96, 8); frames.Reverse(104, 8); frames.Reverse(112, 4); frames.Reverse(116, 4); frames.Reverse(120, 4); frames.Reverse(124, 4); frames.Reverse(128, 7); frames.Reverse(135, 7); frames.Reverse(142, 7); frames.Reverse(149, 7); frames.Reverse(156, 7); frames.Reverse(163, 7); frames.Reverse(170, 7); frames.Reverse(177, 7); frames.Reverse(185, 9); frames.Reverse(194, 7); frames.Reverse(202, 8); frames.Reverse(210, 5); frames.Reverse(215, 5); frames.Reverse(229, 11); frames.Reverse(240, 11); frames.Reverse(251, 8); frames.Reverse(263, 8); frames.Reverse(279, 9); var isDemo = frames.Count < 296; if (!isDemo) { var cursor1 = frames[304]; var cursor2 = frames[321]; var cursor3 = frames[322]; frames.RemoveAt(304); frames.RemoveRange(320, 2); frames.InsertRange(288, new[] { cursor1, cursor2, cursor3 }); frames.Reverse(291, 8); } s.Position = start; return(frames.ToArray()); }