Improve some color functions readability
This commit is contained in:
parent
462baa0a04
commit
1f6d5ebbc9
78
src/color.cc
78
src/color.cc
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue