From 41e4a1ddb6b515f932f445dabbbba28351472315 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 4 Oct 2009 17:38:15 +0000 Subject: LoL PC98: Fix thumbnail creation for quick saves and autosave. svn-id: r44623 --- engines/kyra/kyra_v1.cpp | 2 +- engines/kyra/kyra_v1.h | 3 +++ engines/kyra/lol.h | 2 ++ engines/kyra/saveload.cpp | 9 +++++++++ engines/kyra/saveload_lol.cpp | 31 ++++++++++++++++++++++++++++--- engines/kyra/screen.cpp | 2 +- 6 files changed, 44 insertions(+), 5 deletions(-) (limited to 'engines/kyra') diff --git a/engines/kyra/kyra_v1.cpp b/engines/kyra/kyra_v1.cpp index a461d464e3..681b391a09 100644 --- a/engines/kyra/kyra_v1.cpp +++ b/engines/kyra/kyra_v1.cpp @@ -281,7 +281,7 @@ int KyraEngine_v1::checkInput(Button *buttonList, bool mainLoop, int eventFlag) } else if (event.kbd.keycode == 'q') { quitGame(); } - } else { + } else { keys = _keyMap[event.kbd.keycode]; // When we got an keypress, which we might need to handle, diff --git a/engines/kyra/kyra_v1.h b/engines/kyra/kyra_v1.h index 3b9436c3be..2116243b54 100644 --- a/engines/kyra/kyra_v1.h +++ b/engines/kyra/kyra_v1.h @@ -357,6 +357,9 @@ protected: Common::SeekableReadStream *openSaveForReading(const char *filename, SaveHeader &header); Common::WriteStream *openSaveForWriting(const char *filename, const char *saveName, const Graphics::Surface *thumbnail) const; + + // TODO: Consider moving this to Screen + virtual Graphics::Surface *generateSaveThumbnail() const { return 0; } }; } // End of namespace Kyra diff --git a/engines/kyra/lol.h b/engines/kyra/lol.h index 6ef97c5148..26eb74bb89 100644 --- a/engines/kyra/lol.h +++ b/engines/kyra/lol.h @@ -1487,6 +1487,8 @@ private: Common::Error loadGameState(int slot); Common::Error saveGameState(int slot, const char *saveName, const Graphics::Surface *thumbnail); + Graphics::Surface *generateSaveThumbnail() const; + void generateTempData(); LevelTempData *_lvlTempData[29]; }; diff --git a/engines/kyra/saveload.cpp b/engines/kyra/saveload.cpp index 9e0ddcea4f..fe0b168f61 100644 --- a/engines/kyra/saveload.cpp +++ b/engines/kyra/saveload.cpp @@ -206,11 +206,20 @@ Common::WriteStream *KyraEngine_v1::openSaveForWriting(const char *filename, con return 0; } + Graphics::Surface *genThumbnail = 0; + if (!thumbnail) + thumbnail = genThumbnail = generateSaveThumbnail(); + if (thumbnail) Graphics::saveThumbnail(*out, *thumbnail); else Graphics::saveThumbnail(*out); + if (genThumbnail) { + genThumbnail->free(); + delete genThumbnail; + } + return out; } diff --git a/engines/kyra/saveload_lol.cpp b/engines/kyra/saveload_lol.cpp index 4e15c4495c..928cb508c7 100644 --- a/engines/kyra/saveload_lol.cpp +++ b/engines/kyra/saveload_lol.cpp @@ -25,13 +25,15 @@ #ifdef ENABLE_LOL +#include "kyra/lol.h" +#include "kyra/screen_lol.h" +#include "kyra/resource.h" + #include "common/endian.h" #include "common/savefile.h" #include "common/system.h" -#include "kyra/lol.h" -#include "kyra/screen_lol.h" -#include "kyra/resource.h" +#include "graphics/scaler.h" namespace Kyra { @@ -449,6 +451,29 @@ Common::Error LoLEngine::saveGameState(int slot, const char *saveName, const Gra return Common::kNoError; } +Graphics::Surface *LoLEngine::generateSaveThumbnail() const { + if (_flags.platform != Common::kPlatformPC98) + return 0; + + uint8 *screenPal = new uint8[16 * 3]; + assert(screenPal); + _screen->getRealPalette(0, screenPal); + + uint8 *screenBuf = new uint8[Screen::SCREEN_W * Screen::SCREEN_H]; + assert(screenBuf); + + Graphics::Surface *dst = new Graphics::Surface(); + assert(dst); + + _screen->copyRegionToBuffer(0, 0, 0, 320, 200, screenBuf); + Screen_LoL::convertPC98Gfx(screenBuf, Screen::SCREEN_W, Screen::SCREEN_H, Screen::SCREEN_W); + ::createThumbnail(dst, screenBuf, Screen::SCREEN_W, Screen::SCREEN_H, screenPal); + + delete[] screenBuf; + delete[] screenPal; + return dst; +} + } // end of namespace Kyra #endif // ENABLE_LOL diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp index f8361b8eab..1b9e105d17 100644 --- a/engines/kyra/screen.cpp +++ b/engines/kyra/screen.cpp @@ -688,7 +688,7 @@ void Screen::setPaletteIndex(uint8 index, uint8 red, uint8 green, uint8 blue) { } void Screen::getRealPalette(int num, uint8 *dst) { - const int colors = _isAmiga ? 32 : 256; + const int colors = _use16ColorMode ? 16 : (_isAmiga ? 32 : 256); const uint8 *palData = getPalette(num).getData(); if (!palData) { -- cgit v1.2.3