protected void SetShadowPalette(int slot, int redScale, int greenScale, int blueScale, int startColor, int endColor)
{
if (slot < 0 || slot >= NumShadowPalette)
throw new ArgumentException(string.Format("setShadowPalette: invalid slot {0}", slot), "slot");
if (startColor < 0 || startColor > 255 || endColor < 0 || endColor > 255 || endColor < startColor)
throw new ArgumentException(string.Format("setShadowPalette: invalid range from {0} to {1}", startColor, endColor), "startColor");
var offs = slot * 256;
for (var i = 0; i < 256; i++)
_shadowPalette[offs + i] = (byte)i;
for (var i = startColor; i <= endColor; i++)
{
var curColor = CurrentPalette.Colors[i];
_shadowPalette[offs + i] = (byte)RemapPaletteColor(
(curColor.R * redScale) >> 8,
(curColor.G * greenScale) >> 8,
(curColor.B * blueScale) >> 8, -1);
}
}