NScumm.Sky.Intro.FloppyScrollFlirt C# (CSharp) Method

FloppyScrollFlirt() private method

private FloppyScrollFlirt ( ) : bool
return bool
        private bool FloppyScrollFlirt()
        {
            var scrollScreen = new byte[FrameSize * 2];
            Array.Copy(_skyScreen.Current, 0, scrollScreen, FrameSize, FrameSize);
            var scrollPos = FrameSize;
            var vgaData = _skyDisk.LoadFile(60100);
            var diffData = _skyDisk.LoadFile(60101);
            var frameNum = diffData.ToUInt16();
            var diffPtr = 2;
            var vgaPtr = 0;
            bool doContinue = true;

            for (ushort frameCnt = 1; (frameCnt < frameNum) && doContinue; frameCnt++)
            {
                var scrollVal = diffData[diffPtr++];
                if (scrollVal != 0)
                    scrollPos -= scrollVal * Screen.GameScreenWidth;

                ushort scrPos = 0;
                while (scrPos < FrameSize)
                {
                    byte nrToDo, nrToSkip;
                    do
                    {
                        nrToSkip = diffData[diffPtr++];
                        scrPos += nrToSkip;
                    } while (nrToSkip == 255);
                    do
                    {
                        nrToDo = diffData[diffPtr++];
                        Array.Copy(vgaData, vgaPtr, scrollScreen, scrollPos + scrPos, nrToDo);
                        scrPos += nrToDo;
                        vgaPtr += nrToDo;
                    } while (nrToDo == 255);
                }
                _system.GraphicsManager.CopyRectToScreen(scrollScreen, scrollPos, Screen.GameScreenWidth, 0, 0, Screen.GameScreenWidth, Screen.GameScreenHeight);
                _system.GraphicsManager.UpdateScreen();
                if (!EscDelay(60))
                    doContinue = false;
            }
            Array.Copy(scrollScreen, scrollPos, _skyScreen.Current, 0, FrameSize);
            return doContinue;
        }