(svn r14146) -Codechange: allow palette override in both ways and remove some unneeded '(x == 0) ? 0 : 1' constructs.

This commit is contained in:
rubidium 2008-08-23 20:16:54 +00:00
parent 5de17da66e
commit 200f405706
8 changed files with 118 additions and 111 deletions

View File

@ -327,7 +327,7 @@ void Blitter_32bppAnim::CopyFromBuffer(void *video, const void *src, int width,
}
/* We update the palette (or the pixels that do animation) immediatly, to avoid graphical glitches */
this->PaletteAnimate(PALETTE_ANIM_SIZE_START, _use_dos_palette ? PALETTE_ANIM_SIZE_DOS : PALETTE_ANIM_SIZE_WIN);
this->PaletteAnimate(PALETTE_ANIM_SIZE_START, (_use_palette == PAL_DOS) ? PALETTE_ANIM_SIZE_DOS : PALETTE_ANIM_SIZE_WIN);
}
void Blitter_32bppAnim::CopyToBuffer(const void *video, void *dst, int width, int height)

View File

@ -49,7 +49,6 @@ Colour _cur_palette[256];
byte _stringwidth_table[FS_END][224]; ///< Cache containing width of often used characters. @see GetCharacterWidth()
DrawPixelInfo *_cur_dpi;
byte _colour_gradient[COLOUR_END][8];
bool _use_dos_palette;
static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = NULL);
@ -756,11 +755,10 @@ void DrawCharCentered(WChar c, int x, int y, uint16 real_color)
{
FontSize size = FS_NORMAL;
byte color = real_color & 0xFF;
uint palette = _use_dos_palette ? 1 : 0;
int w = GetCharacterWidth(size, c);
_string_colorremap[1] = _string_colormap[palette][color].text;
_string_colorremap[2] = _string_colormap[palette][color].shadow;
_string_colorremap[1] = _string_colormap[_use_palette][color].text;
_string_colorremap[2] = _string_colormap[_use_palette][color].shadow;
_color_remap_ptr = _string_colorremap;
GfxMainBlitter(GetGlyph(size, c), x - w / 2, y, BM_COLOUR_REMAP);
@ -802,11 +800,10 @@ int DoDrawString(const char *string, int x, int y, uint16 real_colour, bool pars
switch_colour:;
if (real_colour & IS_PALETTE_COLOR) {
_string_colorremap[1] = colour;
_string_colorremap[2] = _use_dos_palette ? 1 : 215;
_string_colorremap[2] = (_use_palette == PAL_DOS) ? 1 : 215;
} else {
uint palette = _use_dos_palette ? 1 : 0;
_string_colorremap[1] = _string_colormap[palette][colour].text;
_string_colorremap[2] = _string_colormap[palette][colour].shadow;
_string_colorremap[1] = _string_colormap[_use_palette][colour].text;
_string_colorremap[2] = _string_colormap[_use_palette][colour].shadow;
}
_color_remap_ptr = _string_colorremap;
}
@ -989,7 +986,7 @@ void DoPaletteAnimations();
void GfxInitPalettes()
{
memcpy(_cur_palette, _palettes[_use_dos_palette ? 1 : 0], sizeof(_cur_palette));
memcpy(_cur_palette, _palettes[_use_palette], sizeof(_cur_palette));
DoPaletteAnimations();
_pal_first_dirty = 0;
@ -1007,7 +1004,7 @@ void DoPaletteAnimations()
/* Amount of colors to be rotated.
* A few more for the DOS palette, because the water colors are
* 245-254 for DOS and 217-226 for Windows. */
const int colour_rotation_amount = _use_dos_palette ? PALETTE_ANIM_SIZE_DOS : PALETTE_ANIM_SIZE_WIN;
const int colour_rotation_amount = (_use_palette == PAL_DOS) ? PALETTE_ANIM_SIZE_DOS : PALETTE_ANIM_SIZE_WIN;
Colour old_val[PALETTE_ANIM_SIZE_DOS];
const int oldval_size = colour_rotation_amount * sizeof(*old_val);
const uint old_tc = _palette_animation_counter;
@ -1092,7 +1089,7 @@ void DoPaletteAnimations()
}
/* Animate water for old DOS graphics */
if (_use_dos_palette) {
if (_use_palette == PAL_DOS) {
/* Dark blue water DOS */
s = (_settings_game.game_creation.landscape == LT_TOYLAND) ? ev->dark_water_TOY : ev->dark_water;
j = EXTR(320, 5);

View File

@ -179,6 +179,6 @@ extern DrawPixelInfo *_cur_dpi;
*/
extern byte _colour_gradient[COLOUR_END][8];
extern bool _use_dos_palette;
extern Palette _use_palette;
#endif /* GFX_FUNC_H */

View File

@ -235,4 +235,12 @@ enum FillRectMode {
FILLRECT_RECOLOR, ///< Apply a recolor sprite to the screen content
};
/** Palettes OpenTTD supports. */
enum Palette {
PAL_DOS, ///< Use the DOS palette.
PAL_WINDOWS, ///< Use the Windows palette.
PAL_AUTODETECT, ///< Automatically detect the palette based on the graphics pack.
MAX_PAL = 2, ///< The number of palettes.
};
#endif /* GFX_TYPE_H */

View File

@ -21,6 +21,8 @@
#include "table/sprites.h"
Palette _use_palette = PAL_AUTODETECT;
struct MD5File {
const char * filename; ///< filename
uint8 hash[16]; ///< md5 sum of the file
@ -130,7 +132,7 @@ static bool FileMD5(const MD5File file)
*/
static void DeterminePalette()
{
if (_use_dos_palette) return;
if (_use_palette < MAX_PAL) return;
/* Count of files from the different versions. */
uint dos = 0;
@ -143,11 +145,11 @@ static void DeterminePalette()
for (uint i = 0; i < lengthof(files_win.landscape); i++) if (FioCheckFileExists(files_win.landscape[i].filename)) win++;
if (win == 5) {
_use_dos_palette = false;
_use_palette = PAL_WINDOWS;
} else if (dos == 5 || (win == 0 && dos > 0)) {
_use_dos_palette = true;
_use_palette = PAL_DOS;
} else {
_use_dos_palette = false;
_use_palette = PAL_WINDOWS;
}
}
@ -161,7 +163,7 @@ void CheckExternalFiles()
DeterminePalette();
static const size_t ERROR_MESSAGE_LENGTH = 128;
const FileList *files = _use_dos_palette ? &files_dos : &files_win;
const FileList *files = (_use_palette == PAL_DOS) ? &files_dos : &files_win;
char error_msg[ERROR_MESSAGE_LENGTH * (lengthof(files->basic) + lengthof(files->landscape) + 3)];
error_msg[0] = '\0';
char *add_pos = error_msg;
@ -192,7 +194,7 @@ void CheckExternalFiles()
static void LoadSpriteTables()
{
const FileList *files = _use_dos_palette ? &files_dos : &files_win;
const FileList *files = (_use_palette == PAL_DOS) ? &files_dos : &files_win;
uint i = FIRST_GRF_SLOT;
LoadGrfFile(files->basic[0].filename, 0, i++);

View File

@ -323,7 +323,7 @@ StringID MapGRFStringID(uint32 grfid, StringID str)
static uint8 MapDOSColour(uint8 colour)
{
if (_use_dos_palette) return colour;
if (_use_palette == PAL_DOS) return colour;
if (colour < 10) {
static uint8 dos_to_win_colour_map[] = { 0, 215, 216, 136, 88, 106, 32, 33, 40, 245 };
@ -3634,7 +3634,7 @@ bool GetGlobalVariable(byte param, uint32 *value)
}
case 0x0D: // TTD Version, 00=DOS, 01=Windows
*value = !_use_dos_palette;
*value = _use_palette;
return true;
case 0x0E: // Y-offset for train sprites

View File

@ -189,7 +189,7 @@ static void ShowHelp()
" -f = Fork into the background (dedicated only)\n"
#endif
#endif /* ENABLE_NETWORK */
" -i = Force to use the DOS palette\n"
" -i = Force to use the DOS (0) or Windows (1) palette\n"
" (use this if you see a lot of pink)\n"
" -c config_file = Use 'config_file' instead of 'openttd.cfg'\n"
" -x = Do not automatically save to config file on exit\n",
@ -406,7 +406,7 @@ int ttd_main(int argc, char *argv[])
* a letter means: it accepts that param (e.g.: -h)
* a ':' behind it means: it need a param (e.g.: -m<driver>)
* a '::' behind it means: it can optional have a param (e.g.: -d<debug>) */
optformat = "m:s:v:b:hD::n::eit:d::r:g::G:c:xl:"
optformat = "m:s:v:b:hD::n::ei::t:d::r:g::G:c:xl:"
#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32)
"f"
#endif
@ -455,7 +455,7 @@ int ttd_main(int argc, char *argv[])
if (mgo.opt != NULL) SetDebugString(mgo.opt);
} break;
case 'e': _switch_mode = SM_EDITOR; break;
case 'i': _use_dos_palette = true; break;
case 'i': _use_palette = (mgo.opt == NULL || atoi(mgo.opt) == 0) ? PAL_DOS : PAL_WINDOWS; break;
case 'g':
if (mgo.opt != NULL) {
ttd_strlcpy(_file_to_saveload.name, mgo.opt, sizeof(_file_to_saveload.name));

View File

@ -11,6 +11,74 @@
#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
static const Colour _palettes[][256] = {
/* palette 0 (mixed TTD DOS + TTD Windows palette */
{
{ 0, 0, 0, 0 }, M( 16, 16, 16), M( 32, 32, 32), M( 48, 48, 48),
M( 65, 64, 65), M( 82, 80, 82), M( 98, 101, 98), M(115, 117, 115),
M(131, 133, 131), M(148, 149, 148), M(168, 168, 168), M(184, 184, 184),
M(200, 200, 200), M(216, 216, 216), M(232, 232, 232), M(252, 252, 252),
M( 52, 60, 72), M( 68, 76, 92), M( 88, 96, 112), M(108, 116, 132),
M(132, 140, 152), M(156, 160, 172), M(176, 184, 196), M(204, 208, 220),
M( 48, 44, 4), M( 64, 60, 12), M( 80, 76, 20), M( 96, 92, 28),
M(120, 120, 64), M(148, 148, 100), M(176, 176, 132), M(204, 204, 168),
M( 72, 44, 4), M( 88, 60, 20), M(104, 80, 44), M(124, 104, 72),
M(152, 132, 92), M(184, 160, 120), M(212, 188, 148), M(244, 220, 176),
M( 64, 0, 4), M( 88, 4, 16), M(112, 16, 32), M(136, 32, 52),
M(160, 56, 76), M(188, 84, 108), M(204, 104, 124), M(220, 132, 144),
M(236, 156, 164), M(252, 188, 192), M(252, 212, 0), M(252, 232, 60),
M(252, 248, 128), M( 76, 40, 0), M( 96, 60, 8), M(116, 88, 28),
M(136, 116, 56), M(156, 136, 80), M(176, 156, 108), M(196, 180, 136),
M( 68, 24, 0), M( 96, 44, 4), M(128, 68, 8), M(156, 96, 16),
M(184, 120, 24), M(212, 156, 32), M(232, 184, 16), M(252, 212, 0),
M(252, 248, 128), M(252, 252, 192), M( 32, 4, 0), M( 64, 20, 8),
M( 84, 28, 16), M(108, 44, 28), M(128, 56, 40), M(148, 72, 56),
M(168, 92, 76), M(184, 108, 88), M(196, 128, 108), M(212, 148, 128),
M( 8, 52, 0), M( 16, 64, 0), M( 32, 80, 4), M( 48, 96, 4),
M( 64, 112, 12), M( 84, 132, 20), M(104, 148, 28), M(128, 168, 44),
M( 28, 52, 24), M( 44, 68, 32), M( 60, 88, 48), M( 80, 104, 60),
M(104, 124, 76), M(128, 148, 92), M(152, 176, 108), M(180, 204, 124),
M( 16, 52, 24), M( 32, 72, 44), M( 56, 96, 72), M( 76, 116, 88),
M( 96, 136, 108), M(120, 164, 136), M(152, 192, 168), M(184, 220, 200),
M( 32, 24, 0), M( 56, 28, 0), M( 72, 40, 0), M( 88, 52, 12),
M(104, 64, 24), M(124, 84, 44), M(140, 108, 64), M(160, 128, 88),
M( 76, 40, 16), M( 96, 52, 24), M(116, 68, 40), M(136, 84, 56),
M(164, 96, 64), M(184, 112, 80), M(204, 128, 96), M(212, 148, 112),
M(224, 168, 128), M(236, 188, 148), M( 80, 28, 4), M(100, 40, 20),
M(120, 56, 40), M(140, 76, 64), M(160, 100, 96), M(184, 136, 136),
M( 36, 40, 68), M( 48, 52, 84), M( 64, 64, 100), M( 80, 80, 116),
M(100, 100, 136), M(132, 132, 164), M(172, 172, 192), M(212, 212, 224),
M( 40, 20, 112), M( 64, 44, 144), M( 88, 64, 172), M(104, 76, 196),
M(120, 88, 224), M(140, 104, 252), M(160, 136, 252), M(188, 168, 252),
M( 0, 24, 108), M( 0, 36, 132), M( 0, 52, 160), M( 0, 72, 184),
M( 0, 96, 212), M( 24, 120, 220), M( 56, 144, 232), M( 88, 168, 240),
M(128, 196, 252), M(188, 224, 252), M( 16, 64, 96), M( 24, 80, 108),
M( 40, 96, 120), M( 52, 112, 132), M( 80, 140, 160), M(116, 172, 192),
M(156, 204, 220), M(204, 240, 252), M(172, 52, 52), M(212, 52, 52),
M(252, 52, 52), M(252, 100, 88), M(252, 144, 124), M(252, 184, 160),
M(252, 216, 200), M(252, 244, 236), M( 72, 20, 112), M( 92, 44, 140),
M(112, 68, 168), M(140, 100, 196), M(168, 136, 224), M(204, 180, 252),
M(204, 180, 252), M(232, 208, 252), M( 60, 0, 0), M( 92, 0, 0),
M(128, 0, 0), M(160, 0, 0), M(196, 0, 0), M(224, 0, 0),
M(252, 0, 0), M(252, 80, 0), M(252, 108, 0), M(252, 136, 0),
M(252, 164, 0), M(252, 192, 0), M(252, 220, 0), M(252, 252, 0),
M(204, 136, 8), M(228, 144, 4), M(252, 156, 0), M(252, 176, 48),
M(252, 196, 100), M(252, 216, 152), M( 8, 24, 88), M( 12, 36, 104),
M( 20, 52, 124), M( 28, 68, 140), M( 40, 92, 164), M( 56, 120, 188),
M( 72, 152, 216), M(100, 172, 224), M( 92, 156, 52), M(108, 176, 64),
M(124, 200, 76), M(144, 224, 92), M(224, 244, 252), M(204, 240, 252),
M(180, 220, 236), M(132, 188, 216), M( 88, 152, 172), M( 16, 16, 16),
M( 32, 32, 32), M( 8, 92, 104), M( 16, 100, 112), M( 24, 108, 120),
M( 32, 116, 128), M( 44, 124, 140), M( 92, 164, 184), M(116, 180, 196),
M(148, 200, 216), M(180, 220, 232), M(216, 244, 252), M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M(252, 60, 0), M(252, 80, 0), M(252, 104, 0), M(252, 128, 0),
M(252, 148, 0), M(252, 172, 0), M(252, 196, 0), M(252, 0, 0),
M(252, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M(252, 228, 0), M(148, 148, 148), M( 16, 101, 115), M( 24, 109, 123),
M( 32, 117, 131), M( 41, 125, 139), M( 90, 165, 189), M(115, 182, 197),
M(148, 202, 222), M(180, 222, 238), M(222, 246, 255), M(252, 252, 252)
},
/* palette 1 (TTD Windows) */
{
{ 0, 0, 0, 0 }, M(212, 0, 212), M(212, 0, 212), M(212, 0, 212),
@ -77,74 +145,6 @@ static const Colour _palettes[][256] = {
M(252, 228, 0), M(148, 148, 148), M(212, 0, 212), M(212, 0, 212),
M(212, 0, 212), M(212, 0, 212), M(212, 0, 212), M(212, 0, 212),
M(212, 0, 212), M(212, 0, 212), M(212, 0, 212), M(252, 252, 252)
},
/* palette 2 (mixed TTD DOS + TTD Windows palette */
{
{ 0, 0, 0, 0 }, M( 16, 16, 16), M( 32, 32, 32), M( 48, 48, 48),
M( 65, 64, 65), M( 82, 80, 82), M( 98, 101, 98), M(115, 117, 115),
M(131, 133, 131), M(148, 149, 148), M(168, 168, 168), M(184, 184, 184),
M(200, 200, 200), M(216, 216, 216), M(232, 232, 232), M(252, 252, 252),
M( 52, 60, 72), M( 68, 76, 92), M( 88, 96, 112), M(108, 116, 132),
M(132, 140, 152), M(156, 160, 172), M(176, 184, 196), M(204, 208, 220),
M( 48, 44, 4), M( 64, 60, 12), M( 80, 76, 20), M( 96, 92, 28),
M(120, 120, 64), M(148, 148, 100), M(176, 176, 132), M(204, 204, 168),
M( 72, 44, 4), M( 88, 60, 20), M(104, 80, 44), M(124, 104, 72),
M(152, 132, 92), M(184, 160, 120), M(212, 188, 148), M(244, 220, 176),
M( 64, 0, 4), M( 88, 4, 16), M(112, 16, 32), M(136, 32, 52),
M(160, 56, 76), M(188, 84, 108), M(204, 104, 124), M(220, 132, 144),
M(236, 156, 164), M(252, 188, 192), M(252, 212, 0), M(252, 232, 60),
M(252, 248, 128), M( 76, 40, 0), M( 96, 60, 8), M(116, 88, 28),
M(136, 116, 56), M(156, 136, 80), M(176, 156, 108), M(196, 180, 136),
M( 68, 24, 0), M( 96, 44, 4), M(128, 68, 8), M(156, 96, 16),
M(184, 120, 24), M(212, 156, 32), M(232, 184, 16), M(252, 212, 0),
M(252, 248, 128), M(252, 252, 192), M( 32, 4, 0), M( 64, 20, 8),
M( 84, 28, 16), M(108, 44, 28), M(128, 56, 40), M(148, 72, 56),
M(168, 92, 76), M(184, 108, 88), M(196, 128, 108), M(212, 148, 128),
M( 8, 52, 0), M( 16, 64, 0), M( 32, 80, 4), M( 48, 96, 4),
M( 64, 112, 12), M( 84, 132, 20), M(104, 148, 28), M(128, 168, 44),
M( 28, 52, 24), M( 44, 68, 32), M( 60, 88, 48), M( 80, 104, 60),
M(104, 124, 76), M(128, 148, 92), M(152, 176, 108), M(180, 204, 124),
M( 16, 52, 24), M( 32, 72, 44), M( 56, 96, 72), M( 76, 116, 88),
M( 96, 136, 108), M(120, 164, 136), M(152, 192, 168), M(184, 220, 200),
M( 32, 24, 0), M( 56, 28, 0), M( 72, 40, 0), M( 88, 52, 12),
M(104, 64, 24), M(124, 84, 44), M(140, 108, 64), M(160, 128, 88),
M( 76, 40, 16), M( 96, 52, 24), M(116, 68, 40), M(136, 84, 56),
M(164, 96, 64), M(184, 112, 80), M(204, 128, 96), M(212, 148, 112),
M(224, 168, 128), M(236, 188, 148), M( 80, 28, 4), M(100, 40, 20),
M(120, 56, 40), M(140, 76, 64), M(160, 100, 96), M(184, 136, 136),
M( 36, 40, 68), M( 48, 52, 84), M( 64, 64, 100), M( 80, 80, 116),
M(100, 100, 136), M(132, 132, 164), M(172, 172, 192), M(212, 212, 224),
M( 40, 20, 112), M( 64, 44, 144), M( 88, 64, 172), M(104, 76, 196),
M(120, 88, 224), M(140, 104, 252), M(160, 136, 252), M(188, 168, 252),
M( 0, 24, 108), M( 0, 36, 132), M( 0, 52, 160), M( 0, 72, 184),
M( 0, 96, 212), M( 24, 120, 220), M( 56, 144, 232), M( 88, 168, 240),
M(128, 196, 252), M(188, 224, 252), M( 16, 64, 96), M( 24, 80, 108),
M( 40, 96, 120), M( 52, 112, 132), M( 80, 140, 160), M(116, 172, 192),
M(156, 204, 220), M(204, 240, 252), M(172, 52, 52), M(212, 52, 52),
M(252, 52, 52), M(252, 100, 88), M(252, 144, 124), M(252, 184, 160),
M(252, 216, 200), M(252, 244, 236), M( 72, 20, 112), M( 92, 44, 140),
M(112, 68, 168), M(140, 100, 196), M(168, 136, 224), M(204, 180, 252),
M(204, 180, 252), M(232, 208, 252), M( 60, 0, 0), M( 92, 0, 0),
M(128, 0, 0), M(160, 0, 0), M(196, 0, 0), M(224, 0, 0),
M(252, 0, 0), M(252, 80, 0), M(252, 108, 0), M(252, 136, 0),
M(252, 164, 0), M(252, 192, 0), M(252, 220, 0), M(252, 252, 0),
M(204, 136, 8), M(228, 144, 4), M(252, 156, 0), M(252, 176, 48),
M(252, 196, 100), M(252, 216, 152), M( 8, 24, 88), M( 12, 36, 104),
M( 20, 52, 124), M( 28, 68, 140), M( 40, 92, 164), M( 56, 120, 188),
M( 72, 152, 216), M(100, 172, 224), M( 92, 156, 52), M(108, 176, 64),
M(124, 200, 76), M(144, 224, 92), M(224, 244, 252), M(204, 240, 252),
M(180, 220, 236), M(132, 188, 216), M( 88, 152, 172), M( 16, 16, 16),
M( 32, 32, 32), M( 8, 92, 104), M( 16, 100, 112), M( 24, 108, 120),
M( 32, 116, 128), M( 44, 124, 140), M( 92, 164, 184), M(116, 180, 196),
M(148, 200, 216), M(180, 220, 232), M(216, 244, 252), M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M(252, 60, 0), M(252, 80, 0), M(252, 104, 0), M(252, 128, 0),
M(252, 148, 0), M(252, 172, 0), M(252, 196, 0), M(252, 0, 0),
M(252, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M(252, 228, 0), M(148, 148, 148), M( 16, 101, 115), M( 24, 109, 123),
M( 32, 117, 131), M( 41, 125, 139), M( 90, 165, 189), M(115, 182, 197),
M(148, 202, 222), M(180, 222, 238), M(222, 246, 255), M(252, 252, 252)
}
};
@ -201,25 +201,6 @@ struct StringColor {
};
static const StringColor _string_colormap[][17] = {
{ /* Windows palette. */
{ 150, 215 }, // TC_BLUE
{ 12, 215 }, // TC_SILVER
{ 189, 215 }, // TC_GOLD
{ 184, 215 }, // TC_RED
{ 174, 215 }, // TC_PURPLE
{ 30, 215 }, // TC_LIGHT_BROWN
{ 195, 215 }, // TC_ORANGE
{ 209, 215 }, // TC_GREEN
{ 68, 215 }, // TC_YELLOW
{ 95, 215 }, // TC_DARK_GREEN
{ 79, 215 }, // TC_CREAM
{ 116, 215 }, // TC_BROWN
{ 15, 215 }, // TC_WHITE
{ 152, 215 }, // TC_LIGHT_BLUE
{ 32, 215 }, // TC_GREY
{ 133, 215 }, // TC_DARK_BLUE
{ 215, 0 }, // TC_BLACK
},
{ /* DOS palette. */
{ 150, 1 }, // TC_BLUE
{ 12, 1 }, // TC_SILVER
@ -238,5 +219,24 @@ static const StringColor _string_colormap[][17] = {
{ 6, 1 }, // TC_GREY
{ 133, 1 }, // TC_DARK_BLUE
{ 1, 0 }, // TC_BLACK
},
{ /* Windows palette. */
{ 150, 215 }, // TC_BLUE
{ 12, 215 }, // TC_SILVER
{ 189, 215 }, // TC_GOLD
{ 184, 215 }, // TC_RED
{ 174, 215 }, // TC_PURPLE
{ 30, 215 }, // TC_LIGHT_BROWN
{ 195, 215 }, // TC_ORANGE
{ 209, 215 }, // TC_GREEN
{ 68, 215 }, // TC_YELLOW
{ 95, 215 }, // TC_DARK_GREEN
{ 79, 215 }, // TC_CREAM
{ 116, 215 }, // TC_BROWN
{ 15, 215 }, // TC_WHITE
{ 152, 215 }, // TC_LIGHT_BLUE
{ 32, 215 }, // TC_GREY
{ 133, 215 }, // TC_DARK_BLUE
{ 215, 0 }, // TC_BLACK
}
};