static void DoCycleIndirectPalette(byte[] palette, byte cycleStart, byte cycleEnd, bool forward, int palIndex)
{
var num = cycleEnd - cycleStart + 1;
var offset = forward ? 1 : num - 1;
var palOffset = palIndex * 256;
for (var i = palOffset; i < (palOffset + 256); i++)
{
if (cycleStart <= palette[i] && palette[i] <= cycleEnd)
{
palette[i] = (byte)((palette[i] - cycleStart + offset) % num + cycleStart);
}
}
DoCyclePalette(palette, cycleStart, cycleEnd, forward);
}