void UpdatePalette()
{
if (_palDirtyMax == -1)
return;
var colors = new Color[256];
var noir_mode = (Game.GameId == GameId.SamNMax && ReadVariable(0x8000) != 0);
var first = _palDirtyMin;
var num = _palDirtyMax - first + 1;
if (noir_mode)
{
for (var i = _palDirtyMin; i <= _palDirtyMax; i++)
{
var color = _currentPalette.Colors[Game.Version < 5 ? _shadowPalette[i] : i];
var brightness = (int)((0.299 * color.R + 0.587 * color.G + 0.114 * color.B) + 0.5);
colors[i] = Color.FromRgb(brightness, brightness, brightness);
}
}
else
{
for (var i = _palDirtyMin; i <= _palDirtyMax; i++)
{
var color = _currentPalette.Colors[_game.Version > 2 && Game.Version < 5 ? _shadowPalette[i] : i];
colors[i] = color;
}
}
_palDirtyMax = -1;
_palDirtyMin = 256;
if (_game.Platform == Platform.FMTowns)
{
for (int i = first; i < first + num; ++i)
{
var c = colors[i];
_16BitPalette[i] = ColorHelper.RGBToColor((byte)c.R, (byte)c.G, (byte)c.B);
}
return;
}
_gfxManager.SetPalette(colors, first, num);
}