void CyclePalette()
{
if (_game.Platform == Platform.FMTowns && ((TownsPaletteFlags & 1) == 0))
return;
var valueToAdd = _variables[VariableTimer.Value];
if (valueToAdd < _variables[VariableTimerNext.Value])
valueToAdd = _variables[VariableTimerNext.Value];
for (var i = 0; i < 16; i++)
{
var cycl = _colorCycle[i];
if (cycl.Delay == 0 || cycl.Start > cycl.End)
continue;
cycl.Counter = (ushort)(cycl.Counter + valueToAdd);
if (cycl.Counter >= cycl.Delay)
{
cycl.Counter %= cycl.Delay;
SetDirtyColors(cycl.Start, cycl.End);
MoveMemInPalRes(cycl.Start, cycl.End, (cycl.Flags & 2) != 0);
DoCyclePalette(_currentPalette, cycl.Start, cycl.End, (cycl.Flags & 2) == 0);
if (_shadowPalette != null)
{
if (_game.Version >= 7)
{
for (var j = 0; j < NumShadowPalette; j++)
{
DoCycleIndirectPalette(_shadowPalette, cycl.Start, cycl.End, (cycl.Flags & 2) == 0, j);
}
}
else
{
DoCycleIndirectPalette(_shadowPalette, cycl.Start, cycl.End, (cycl.Flags & 2) == 0, 0);
}
}
}
}
}