Improve some color functions readability

This commit is contained in:
Alexander Batalov 2022-12-27 16:27:14 +03:00
parent 462baa0a04
commit 1f6d5ebbc9
7 changed files with 52 additions and 54 deletions

View File

@ -178,15 +178,13 @@ int _calculateColor(int intensity, Color color)
} }
// 0x4C72E0 // 0x4C72E0
int _Color2RGB_(int a1) int Color2RGB(Color c)
{ {
int v1, v2, v3; int r = _cmap[3 * c] >> 1;
int g = _cmap[3 * c + 1] >> 1;
int b = _cmap[3 * c + 2] >> 1;
v1 = _cmap[3 * a1] >> 1; return (r << 10) | (g << 5) | b;
v2 = _cmap[3 * a1 + 1] >> 1;
v3 = _cmap[3 * a1 + 2] >> 1;
return (((v1 << 5) | v2) << 5) | v3;
} }
// Performs animated palette transition. // Performs animated palette transition.
@ -267,26 +265,26 @@ void _setSystemPaletteEntries(unsigned char* palette, int start, int end)
// 0x4C7550 // 0x4C7550
static void _setIntensityTableColor(int cc) static void _setIntensityTableColor(int cc)
{ {
int v1, v2, v3, v4, v5, v6, v7, v8, v9; int shift = 0;
v5 = 0;
for (int index = 0; index < 128; index++) { for (int index = 0; index < 128; index++) {
v1 = (_Color2RGB_(cc) & 0x7C00) >> 10; int r = (Color2RGB(cc) & 0x7C00) >> 10;
v2 = (_Color2RGB_(cc) & 0x3E0) >> 5; int g = (Color2RGB(cc) & 0x3E0) >> 5;
v3 = (_Color2RGB_(cc) & 0x1F); int b = (Color2RGB(cc) & 0x1F);
v4 = (((v1 * v5) >> 16) << 10) | (((v2 * v5) >> 16) << 5) | ((v3 * v5) >> 16); int darkerR = ((r * shift) >> 16);
intensityColorTable[cc][index] = _colorTable[v4]; int darkerG = ((g * shift) >> 16);
int darkerB = ((b * shift) >> 16);
int darkerColor = (darkerR << 10) | (darkerG << 5) | darkerB;
intensityColorTable[cc][index] = _colorTable[darkerColor];
v6 = v1 + (((0x1F - v1) * v5) >> 16); int lighterR = r + (((0x1F - r) * shift) >> 16);
v7 = v2 + (((0x1F - v2) * v5) >> 16); int lighterG = g + (((0x1F - g) * shift) >> 16);
v8 = v3 + (((0x1F - v3) * v5) >> 16); int lighterB = b + (((0x1F - b) * shift) >> 16);
int lighterColor = (lighterR << 10) | (lighterG << 5) | lighterB;
intensityColorTable[cc][128 + index] = _colorTable[lighterColor];
v9 = (v6 << 10) | (v7 << 5) | v8; shift += 512;
intensityColorTable[cc][128 + index] = _colorTable[v9];
v5 += 0x200;
} }
} }
@ -311,13 +309,13 @@ static void _setMixTableColor(int a1)
for (i = 0; i < 256; i++) { for (i = 0; i < 256; i++) {
if (_mappedColor[a1] && _mappedColor[i]) { if (_mappedColor[a1] && _mappedColor[i]) {
v2 = (_Color2RGB_(a1) & 0x7C00) >> 10; v2 = (Color2RGB(a1) & 0x7C00) >> 10;
v3 = (_Color2RGB_(a1) & 0x3E0) >> 5; v3 = (Color2RGB(a1) & 0x3E0) >> 5;
v4 = (_Color2RGB_(a1) & 0x1F); v4 = (Color2RGB(a1) & 0x1F);
v5 = (_Color2RGB_(i) & 0x7C00) >> 10; v5 = (Color2RGB(i) & 0x7C00) >> 10;
v6 = (_Color2RGB_(i) & 0x3E0) >> 5; v6 = (Color2RGB(i) & 0x3E0) >> 5;
v7 = (_Color2RGB_(i) & 0x1F); v7 = (Color2RGB(i) & 0x1F);
v8 = v2 + v5; v8 = v2 + v5;
v9 = v3 + v6; v9 = v3 + v6;
@ -364,13 +362,13 @@ static void _setMixTableColor(int a1)
colorMixAddTable[a1][i] = v12; colorMixAddTable[a1][i] = v12;
v20 = (_Color2RGB_(a1) & 0x7C00) >> 10; v20 = (Color2RGB(a1) & 0x7C00) >> 10;
v21 = (_Color2RGB_(a1) & 0x3E0) >> 5; v21 = (Color2RGB(a1) & 0x3E0) >> 5;
v22 = (_Color2RGB_(a1) & 0x1F); v22 = (Color2RGB(a1) & 0x1F);
v23 = (_Color2RGB_(i) & 0x7C00) >> 10; v23 = (Color2RGB(i) & 0x7C00) >> 10;
v24 = (_Color2RGB_(i) & 0x3E0) >> 5; v24 = (Color2RGB(i) & 0x3E0) >> 5;
v25 = (_Color2RGB_(i) & 0x1F); v25 = (Color2RGB(i) & 0x1F);
v26 = (v20 * v23) >> 5; v26 = (v20 * v23) >> 5;
v27 = (v21 * v24) >> 5; v27 = (v21 * v24) >> 5;
@ -482,9 +480,9 @@ static void _buildBlendTable(unsigned char* ptr, unsigned char ch)
beg = ptr; beg = ptr;
r = (_Color2RGB_(ch) & 0x7C00) >> 10; r = (Color2RGB(ch) & 0x7C00) >> 10;
g = (_Color2RGB_(ch) & 0x3E0) >> 5; g = (Color2RGB(ch) & 0x3E0) >> 5;
b = (_Color2RGB_(ch) & 0x1F); b = (Color2RGB(ch) & 0x1F);
for (i = 0; i < 256; i++) { for (i = 0; i < 256; i++) {
ptr[i] = i; ptr[i] = i;
@ -503,9 +501,9 @@ static void _buildBlendTable(unsigned char* ptr, unsigned char ch)
for (j = 0; j < 7; j++) { for (j = 0; j < 7; j++) {
for (i = 0; i < 256; i++) { for (i = 0; i < 256; i++) {
v12 = (_Color2RGB_(i) & 0x7C00) >> 10; v12 = (Color2RGB(i) & 0x7C00) >> 10;
v14 = (_Color2RGB_(i) & 0x3E0) >> 5; v14 = (Color2RGB(i) & 0x3E0) >> 5;
v16 = (_Color2RGB_(i) & 0x1F); v16 = (Color2RGB(i) & 0x1F);
int index = 0; int index = 0;
index |= (r_2 + v12 * v31) / 7 << 10; index |= (r_2 + v12 * v31) / 7 << 10;
index |= (g_2 + v14 * v31) / 7 << 5; index |= (g_2 + v14 * v31) / 7 << 5;

View File

@ -26,7 +26,7 @@ extern unsigned char _colorTable[32768];
void colorPaletteSetFileIO(ColorPaletteFileOpenProc* openProc, ColorPaletteFileReadProc* readProc, ColorPaletteCloseProc* closeProc); void colorPaletteSetFileIO(ColorPaletteFileOpenProc* openProc, ColorPaletteFileReadProc* readProc, ColorPaletteCloseProc* closeProc);
int _calculateColor(int intensity, Color color); int _calculateColor(int intensity, Color color);
int _Color2RGB_(int a1); int Color2RGB(Color c);
void colorPaletteFadeBetween(unsigned char* oldPalette, unsigned char* newPalette, int steps); void colorPaletteFadeBetween(unsigned char* oldPalette, unsigned char* newPalette, int steps);
void colorPaletteSetTransitionCallback(ColorTransitionCallback* callback); void colorPaletteSetTransitionCallback(ColorTransitionCallback* callback);
void _setSystemPalette(unsigned char* palette); void _setSystemPalette(unsigned char* palette);

View File

@ -4667,9 +4667,9 @@ void gameDialogRenderTalkingHead(Art* headFrm, int frame)
void gameDialogHighlightsInit() void gameDialogHighlightsInit()
{ {
for (int color = 0; color < 256; color++) { for (int color = 0; color < 256; color++) {
int r = (_Color2RGB_(color) & 0x7C00) >> 10; int r = (Color2RGB(color) & 0x7C00) >> 10;
int g = (_Color2RGB_(color) & 0x3E0) >> 5; int g = (Color2RGB(color) & 0x3E0) >> 5;
int b = _Color2RGB_(color) & 0x1F; int b = Color2RGB(color) & 0x1F;
_light_GrayTable[color] = ((r + 2 * g + 2 * b) / 10) >> 2; _light_GrayTable[color] = ((r + 2 * g + 2 * b) / 10) >> 2;
_dark_GrayTable[color] = ((r + g + b) / 10) >> 2; _dark_GrayTable[color] = ((r + g + b) / 10) >> 2;
} }

View File

@ -276,9 +276,9 @@ int gameMoviePlay(int movie, int flags)
windowSetFont(oldFont); windowSetFont(oldFont);
float r = (float)((_Color2RGB_(oldTextColor) & 0x7C00) >> 10) * flt_50352A; float r = (float)((Color2RGB(oldTextColor) & 0x7C00) >> 10) * flt_50352A;
float g = (float)((_Color2RGB_(oldTextColor) & 0x3E0) >> 5) * flt_50352A; float g = (float)((Color2RGB(oldTextColor) & 0x3E0) >> 5) * flt_50352A;
float b = (float)(_Color2RGB_(oldTextColor) & 0x1F) * flt_50352A; float b = (float)(Color2RGB(oldTextColor) & 0x1F) * flt_50352A;
windowSetTextColor(r, g, b); windowSetTextColor(r, g, b);
} }

View File

@ -8,7 +8,7 @@ namespace fallout {
int _HighRGB_(int a1) int _HighRGB_(int a1)
{ {
// TODO: Some strange bit arithmetic. // TODO: Some strange bit arithmetic.
int v1 = _Color2RGB_(a1); int v1 = Color2RGB(a1);
int r = (v1 & 0x7C00) >> 10; int r = (v1 & 0x7C00) >> 10;
int g = (v1 & 0x3E0) >> 5; int g = (v1 & 0x3E0) >> 5;
int b = (v1 & 0x1F); int b = (v1 & 0x1F);

View File

@ -14,11 +14,11 @@ void grayscalePaletteUpdate(int a1, int a2)
{ {
if (a1 >= 0 && a2 <= 255) { if (a1 >= 0 && a2 <= 255) {
for (int index = a1; index <= a2; index++) { for (int index = a1; index <= a2; index++) {
// NOTE: The only way to explain so much calls to [_Color2RGB_] with // NOTE: The only way to explain so much calls to `Color2RGB` with
// the same repeated pattern is by the use of min/max macros. // the same repeated pattern is by the use of min/max macros.
int v1 = std::max((_Color2RGB_(index) & 0x7C00) >> 10, std::max((_Color2RGB_(index) & 0x3E0) >> 5, _Color2RGB_(index) & 0x1F)); int v1 = std::max((Color2RGB(index) & 0x7C00) >> 10, std::max((Color2RGB(index) & 0x3E0) >> 5, Color2RGB(index) & 0x1F));
int v2 = std::min((_Color2RGB_(index) & 0x7C00) >> 10, std::min((_Color2RGB_(index) & 0x3E0) >> 5, _Color2RGB_(index) & 0x1F)); int v2 = std::min((Color2RGB(index) & 0x7C00) >> 10, std::min((Color2RGB(index) & 0x3E0) >> 5, Color2RGB(index) & 0x1F));
int v3 = v1 + v2; int v3 = v1 + v2;
int v4 = (int)((double)v3 * 240.0 / 510.0); int v4 = (int)((double)v3 * 240.0 / 510.0);

View File

@ -3479,9 +3479,9 @@ static void _obj_light_table_init()
static void _obj_blend_table_init() static void _obj_blend_table_init()
{ {
for (int index = 0; index < 256; index++) { for (int index = 0; index < 256; index++) {
int r = (_Color2RGB_(index) & 0x7C00) >> 10; int r = (Color2RGB(index) & 0x7C00) >> 10;
int g = (_Color2RGB_(index) & 0x3E0) >> 5; int g = (Color2RGB(index) & 0x3E0) >> 5;
int b = _Color2RGB_(index) & 0x1F; int b = Color2RGB(index) & 0x1F;
_glassGrayTable[index] = ((r + 5 * g + 4 * b) / 10) >> 2; _glassGrayTable[index] = ((r + 5 * g + 4 * b) / 10) >> 2;
_commonGrayTable[index] = ((b + 3 * r + 6 * g) / 10) >> 2; _commonGrayTable[index] = ((b + 3 * r + 6 * g) / 10) >> 2;
} }