public void ProcessSequence()
{
if (!_seqInfo.Running)
return;
if (Environment.TickCount < _seqInfo.NextFrame)
return;
_seqInfo.NextFrame += 60;
Array.Clear(_seqGrid, 0, 12 * 20);
var screenPos = 0;
do
{
byte nrToSkip;
do
{
nrToSkip = _seqInfo.SeqData[_seqInfo.SeqDataPos];
_seqInfo.SeqDataPos++;
screenPos += nrToSkip;
} while (nrToSkip == 0xFF);
byte nrToDo;
do
{
nrToDo = _seqInfo.SeqData[_seqInfo.SeqDataPos];
_seqInfo.SeqDataPos++;
var gridSta = (byte)(screenPos / (GameScreenWidth * 16) * 20 + ((screenPos % GameScreenWidth) >> 4));
var gridEnd =
(byte)
((screenPos + nrToDo) / (GameScreenWidth * 16) * 20 +
(((screenPos + nrToDo) % GameScreenWidth) >> 4));
gridSta = Math.Min(gridSta, (byte)(12 * 20 - 1));
gridEnd = Math.Min(gridEnd, (byte)(12 * 20 - 1));
byte cnt;
if (gridEnd >= gridSta)
for (cnt = gridSta; cnt <= gridEnd; cnt++)
_seqGrid[cnt] = 1;
else
{
for (cnt = gridSta; cnt < (gridSta / 20 + 1) * 20; cnt++)
_seqGrid[cnt] = 1;
for (cnt = (byte)(gridEnd / 20 * 20); cnt <= gridEnd; cnt++)
_seqGrid[cnt] = 1;
}
for (cnt = 0; cnt < nrToDo; cnt++)
{
Current[screenPos] = _seqInfo.SeqData[_seqInfo.SeqDataPos];
_seqInfo.SeqDataPos++;
screenPos++;
}
} while (nrToDo == 0xFF);
} while (screenPos < GameScreenWidth * GameScreenHeight);
var gridPtr = 0;
var scrPtr = 0;
var rectPtr = 0;
byte rectWid = 0, rectX = 0, rectY = 0;
for (byte cnty = 0; cnty < 12; cnty++)
{
for (byte cntx = 0; cntx < 20; cntx++)
{
if (_seqGrid[gridPtr] != 0)
{
if (rectWid == 0)
{
rectX = cntx;
rectY = cnty;
rectPtr = scrPtr;
}
rectWid++;
}
else if (rectWid != 0)
{
_system.GraphicsManager.CopyRectToScreen(Current, rectPtr, GameScreenWidth, rectX << 4,
rectY << 4, rectWid << 4, 16);
rectWid = 0;
}
scrPtr += 16;
gridPtr++;
}
if (rectWid != 0)
{
_system.GraphicsManager.CopyRectToScreen(Current, rectPtr, GameScreenWidth, rectX << 4, rectY << 4,
rectWid << 4, 16);
rectWid = 0;
}
scrPtr += 15 * GameScreenWidth;
}
_system.GraphicsManager.UpdateScreen();
_seqInfo.FramesLeft--;
if (_seqInfo.FramesLeft == 0)
{
_seqInfo.Running = false;
if (!_seqInfo.RunningItem)
_seqInfo.SeqData = null;
_seqInfo.SeqData = null;
_seqInfo.SeqDataPos = 0;
}
}