aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorJohannes Schickel2009-10-04 17:38:15 +0000
committerJohannes Schickel2009-10-04 17:38:15 +0000
commit41e4a1ddb6b515f932f445dabbbba28351472315 (patch)
tree922e42152b6c6c574d6e8f318324eb824f1aeb30 /engines/kyra
parentfc4d7b7d1dc22170b8223ce723cce9a219d84c59 (diff)
downloadscummvm-rg350-41e4a1ddb6b515f932f445dabbbba28351472315.tar.gz
scummvm-rg350-41e4a1ddb6b515f932f445dabbbba28351472315.tar.bz2
scummvm-rg350-41e4a1ddb6b515f932f445dabbbba28351472315.zip
LoL PC98: Fix thumbnail creation for quick saves and autosave.
svn-id: r44623
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/kyra_v1.cpp2
-rw-r--r--engines/kyra/kyra_v1.h3
-rw-r--r--engines/kyra/lol.h2
-rw-r--r--engines/kyra/saveload.cpp9
-rw-r--r--engines/kyra/saveload_lol.cpp31
-rw-r--r--engines/kyra/screen.cpp2
6 files changed, 44 insertions, 5 deletions
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) {