From 0523480a7068e4a04ad030e172539632f648b099 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Thu, 27 Jan 2005 20:07:04 +0000 Subject: Applied patch #1106775 "SAGA colours". This simplifies code considerably, and moreover getBlack() didn't always work correctly for some reason. If IHNM uses different colors we will switch to variables, but that could be addressed later or at least when someone will start to work on it more time than now. svn-id: r16647 --- saga/actor.cpp | 2 +- saga/gfx.cpp | 81 ++---------------------------------------------------- saga/gfx.h | 13 --------- saga/interface.h | 1 + saga/objectmap.cpp | 3 +- saga/render.cpp | 10 +++---- saga/sfuncs.cpp | 4 +-- saga/xref.txt | 1 + 8 files changed, 15 insertions(+), 100 deletions(-) diff --git a/saga/actor.cpp b/saga/actor.cpp index b70218da51..f7bbc8c494 100644 --- a/saga/actor.cpp +++ b/saga/actor.cpp @@ -1518,7 +1518,7 @@ void Actor::actorSpeech(uint16 actorId, const char **strings, int stringsCount, _activeSpeech.speechCoords[0] = actor->screenPosition; _activeSpeech.speechCoords[0].y -= ACTOR_DIALOGUE_HEIGHT; _activeSpeech.speechColor[0] = actor->speechColor; - _activeSpeech.outlineColor[0] = _vm->_gfx->getBlack(); + _activeSpeech.outlineColor[0] = kITEColorBlack; _activeSpeech.sampleResourceId = sampleResourceId; _activeSpeech.playing = false; _activeSpeech.slowModeCharIndex = 0; diff --git a/saga/gfx.cpp b/saga/gfx.cpp index 1af8dff24a..450284b89d 100644 --- a/saga/gfx.cpp +++ b/saga/gfx.cpp @@ -60,8 +60,6 @@ Gfx::Gfx(OSystem *system, int width, int height, GameDetector &detector) : _syst // Set module data _back_buf = back_buf; _init = 1; - _white_index = -1; - _black_index = -1; // For now, always show the mouse cursor. setCursor(); @@ -749,90 +747,17 @@ SURFACE *Gfx::getBackBuffer() { return &_back_buf; } -int Gfx::getWhite(void) { - return _white_index; -} - -int Gfx::getBlack(void) { - return _black_index; -} - -int Gfx::matchColor(unsigned long colormask) { - int i; - int red = (colormask & 0x0FF0000UL) >> 16; - int green = (colormask & 0x000FF00UL) >> 8; - int blue = colormask & 0x00000FFUL; - int dr; - int dg; - int db; - long color_delta; - long best_delta = LONG_MAX; - int best_index = 0; - byte *ppal; - - for (i = 0, ppal = _cur_pal; i < PAL_ENTRIES; i++, ppal += 4) { - dr = ppal[0] - red; - dr = ABS(dr); - dg = ppal[1] - green; - dg = ABS(dg); - db = ppal[2] - blue; - db = ABS(db); - ppal[3] = 0; - - color_delta = (long)(dr * RED_WEIGHT + dg * GREEN_WEIGHT + db * BLUE_WEIGHT); - - if (color_delta == 0) { - return i; - } - - if (color_delta < best_delta) { - best_delta = color_delta; - best_index = i; - } - } - - return best_index; -} - int Gfx::setPalette(SURFACE *surface, PALENTRY *pal) { - byte red; - byte green; - byte blue; - int color_delta; - int best_wdelta = 0; - int best_windex = 0; - int best_bindex = 0; - int best_bdelta = 1000; int i; byte *ppal; for (i = 0, ppal = _cur_pal; i < PAL_ENTRIES; i++, ppal += 4) { - red = pal[i].red; - ppal[0] = red; - color_delta = red; - green = pal[i].green; - ppal[1] = green; - color_delta += green; - blue = pal[i].blue; - ppal[2] = blue; - color_delta += blue; + ppal[0] = pal[i].red; + ppal[1] = pal[i].green; + ppal[2] = pal[i].blue; ppal[3] = 0; - - if (color_delta < best_bdelta) { - best_bindex = i; - best_bdelta = color_delta; - } - - if (color_delta > best_wdelta) { - best_windex = i; - best_wdelta = color_delta; - } } - // Set whitest and blackest color indices - _white_index = best_windex; - _black_index = best_bindex; - _system->setPalette(_cur_pal, 0, PAL_ENTRIES); return SUCCESS; diff --git a/saga/gfx.h b/saga/gfx.h index c7ff643dd4..e65d91f4be 100644 --- a/saga/gfx.h +++ b/saga/gfx.h @@ -68,20 +68,12 @@ struct SURFACE : Graphics::Surface { #define PAL_ENTRIES 256 -#define RGB_RED 0x00FF0000UL -#define RGB_GREEN 0x0000FF00UL -#define RGB_BLUE 0x000000FFUL - #define CURSOR_W 7 #define CURSOR_H 7 #define CURSOR_ORIGIN_X 4 #define CURSOR_ORIGIN_Y 4 -#define RED_WEIGHT 0.299 -#define GREEN_WEIGHT 0.587 -#define BLUE_WEIGHT 0.114 - int drawPalette(SURFACE *dst_s); int bufToSurface(SURFACE *ds, const byte *src, int src_w, int src_h, Rect *src_rect, Point *dst_pt); int bufToBuffer(byte * dst_buf, int dst_w, int dst_h, const byte *src, @@ -100,9 +92,6 @@ public: Gfx(OSystem *system, int width, int height, GameDetector &detector); SURFACE *getBackBuffer(); - int getWhite(); - int getBlack(); - int matchColor(unsigned long colormask); int setPalette(SURFACE *surface, PALENTRY *pal); int getCurrentPal(PALENTRY *src_pal); int palToBlack(SURFACE *surface, PALENTRY *src_pal, double percent); @@ -114,8 +103,6 @@ private: void setCursor(); int _init; SURFACE _back_buf; - int _white_index; - int _black_index; byte _cur_pal[PAL_ENTRIES * 4]; OSystem *_system; }; diff --git a/saga/interface.h b/saga/interface.h index 51eee1e6c7..d213284312 100644 --- a/saga/interface.h +++ b/saga/interface.h @@ -99,6 +99,7 @@ enum ITEColors { kITEColorDarkGrey = 0x0b, kITEColorGreen = 0xba, kITEColorBlack = 0x0f, + kITEColorRed = 0x65, kITEColorBlue = 0x93 }; diff --git a/saga/objectmap.cpp b/saga/objectmap.cpp index fe4a7a7e49..6b592fff67 100644 --- a/saga/objectmap.cpp +++ b/saga/objectmap.cpp @@ -31,6 +31,7 @@ #include "saga/gfx.h" #include "saga/console.h" #include "saga/font.h" +#include "saga/interface.h" #include "saga/objectmap.h" #include "saga/stream.h" @@ -206,7 +207,7 @@ void ObjectMap::draw(SURFACE *ds, const Point& testPoint, int color, int color2) if (hitZoneIndex != -1) { snprintf(txtBuf, sizeof(txtBuf), "hitZone %d", hitZoneIndex); _vm->_font->draw(SMALL_FONT_ID, ds, txtBuf, 0, 2, 2, - _vm->_gfx->getWhite(), _vm->_gfx->getBlack(), FONT_OUTLINE); + kITEColorBrightWhite, kITEColorBlack, FONT_OUTLINE); } } diff --git a/saga/render.cpp b/saga/render.cpp index d384ef548f..457168ca28 100644 --- a/saga/render.cpp +++ b/saga/render.cpp @@ -126,9 +126,9 @@ int Render::drawScene() { // Display scene maps, if applicable if (getFlags() & RF_OBJECTMAP_TEST) { if (_vm->_scene->_objectMap) - _vm->_scene->_objectMap->draw(backbuf_surface, mouse_pt, _vm->_gfx->getWhite(), _vm->_gfx->getBlack()); + _vm->_scene->_objectMap->draw(backbuf_surface, mouse_pt, kITEColorBrightWhite, kITEColorBlack); if (_vm->_scene->_actionMap) - _vm->_scene->_actionMap->draw(backbuf_surface, mouse_pt, _vm->_gfx->matchColor(RGB_RED), _vm->_gfx->getBlack()); + _vm->_scene->_actionMap->draw(backbuf_surface, mouse_pt, kITEColorRed, kITEColorBlack); } // Draw queued actors @@ -152,7 +152,7 @@ int Render::drawScene() { sprintf(txt_buf, "%d", _fps); fps_width = _vm->_font->getStringWidth(SMALL_FONT_ID, txt_buf, 0, FONT_NORMAL); _vm->_font->draw(SMALL_FONT_ID, backbuf_surface, txt_buf, 0, backbuf_surface->w - fps_width, 2, - _vm->_gfx->getWhite(), _vm->_gfx->getBlack(), FONT_OUTLINE); + kITEColorBrightWhite, kITEColorBlack, FONT_OUTLINE); } // Display "paused game" message, if applicable @@ -160,7 +160,7 @@ int Render::drawScene() { int msg_len = strlen(PAUSEGAME_MSG); int msg_w = _vm->_font->getStringWidth(BIG_FONT_ID, PAUSEGAME_MSG, msg_len, FONT_OUTLINE); _vm->_font->draw(BIG_FONT_ID, backbuf_surface, PAUSEGAME_MSG, msg_len, - (backbuf_surface->w - msg_w) / 2, 90, _vm->_gfx->getWhite(), _vm->_gfx->getBlack(), FONT_OUTLINE); + (backbuf_surface->w - msg_w) / 2, 90, kITEColorBrightWhite, kITEColorBlack, FONT_OUTLINE); } // Update user interface @@ -170,7 +170,7 @@ int Render::drawScene() { // Display text formatting test, if applicable if (_flags & RF_TEXT_TEST) { _vm->textDraw(MEDIUM_FONT_ID, backbuf_surface, test_txt, mouse_pt.x, mouse_pt.y, - _vm->_gfx->getWhite(), _vm->_gfx->getBlack(), FONT_OUTLINE | FONT_CENTERED); + kITEColorBrightWhite, kITEColorBlack, FONT_OUTLINE | FONT_CENTERED); } // Display palette test, if applicable diff --git a/saga/sfuncs.cpp b/saga/sfuncs.cpp index 2f3447694f..9c8808d49c 100644 --- a/saga/sfuncs.cpp +++ b/saga/sfuncs.cpp @@ -1110,8 +1110,8 @@ void Script::sfPlacard(SCRIPTFUNC_PARAMS) { _vm->_scene->getInfo(&scene_info); - text_entry.color = _vm->_gfx->getWhite(); - text_entry.effect_color = _vm->_gfx->getBlack(); + text_entry.color = kITEColorBrightWhite; + text_entry.effect_color = kITEColorBlack; text_entry.text_x = _vm->getDisplayWidth() / 2; text_entry.text_y = (_vm->getSceneHeight() - _vm->_font->getHeight(MEDIUM_FONT_ID)) / 2; text_entry.font_id = MEDIUM_FONT_ID; diff --git a/saga/xref.txt b/saga/xref.txt index 3a7ffd8dd5..622bed7122 100644 --- a/saga/xref.txt +++ b/saga/xref.txt @@ -103,6 +103,7 @@ WHITE_02 kITEColorWhite GREY_0A kITEColorGrey DK_GREY_0B kITEColorDarkGrey PITCH_BLACK kITEColorBlack +RED_65 kITEColorRed BLUE_93 kITEColorBlue GREEB_BA kITEColorGreen -- cgit v1.2.3